pax_global_header00006660000000000000000000000064145766537120014532gustar00rootroot0000000000000052 comment=6bdbe38ec3a727bc58947890cdbbe2c46a5b5ddb Atomes-GNU-1.1.14/000077500000000000000000000000001457665371200134755ustar00rootroot00000000000000Atomes-GNU-1.1.14/AUTHORS000066400000000000000000000007411457665371200145470ustar00rootroot00000000000000Atomes program Author ========================================================= For any support request please use: atomes AT ipcms.unistra.fr --------------------------------------------------------- Dr. Sébastien Le Roux Institut de Chimie et Physique des Matériaux de Strasbourg Département des Matériaux Organiques 23 rue du Loess, BP 43 F-67034 Strasbourg Cedex 2 France Email: sebastien.leroux AT ipcms.unistra.fr Web page: https://www.ipcms.fr/sebastien-le-roux/ Atomes-GNU-1.1.14/COPYING000066400000000000000000001034051457665371200145330ustar00rootroot00000000000000 GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Remote Network Interaction; Use with the GNU General Public License. Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Atomes - An atomic-scale 3D modeling toolbox To analyze, visualize, and create 3D atomistic models. Copyright (C) 2022, 2023 Dr. Sébastien Le Roux This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . Atomes-GNU-1.1.14/ChangeLog000066400000000000000000000127051457665371200152540ustar00rootroot000000000000002024-20-03 Sébastien Le Roux Release of version 1.1.14 * Bug corrections: X-rays g(r): 'CHEM_X' parameter was 0.0 * Improvements: Option to build model from CIF file using symmetry positions when available 'read_cif.c' Object(s) can be used to fill CIF file unknown positions 'read_cif.c' and 'cbuild_action.c' Distance matrix calculation 'dmtx.F90' minor adjustments and improvements Imrpovement of the automatic evaluation of the OpenGL model depth 'bonds.F90' Pixel debug is now available in DEBUG mode overall code cleaning atomes code is now entirely commented in Doxygen format 2024-28-02 Sébastien Le Roux Release of version 1.1.13 * Bug corrections: Surface passivation: 'cell_cut.c' and 'atom_action.c' Atomic object managment: 'src/opengl/edit/atom_*.c' Atom search window: 'w_search.c' * Improvements: Handling unknown chemical species when reading coordinates files Keyboard shortcuts added for styles and selection modes for the OpenGL window Re-compute bonding properties of edition with the model edition window 2023-09-11 Sébastien Le Roux Release of version 1.1.12 * Bug corrections: Corrections on reading I.S.A.A.C.S. files: 'callbacks.c' and 'xmlrw.c' Workspace contextual menu correction: 'workspace.c' Movie encoding correction for axis colors and volumes: 'movie.c' GTK3 version: OpenGL / GTK interaction, on fail to initialize rendering: test to change the GDK visual 'gtk_window_change_gdk_visual()' GTK4 version: Event controller correction: 'dlp_ff_match.c' Tree view selection corrections: 'dlp_field.c' and 'w_measures.c' Menus with pango markups (if no submenu attached: https://gitlab.gnome.org/GNOME/gtk/-/issues/5946) "Color palettes" ready (if bug fixed: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955) Periodic table focus on mouse motion fixed: 'w_periodic.c' OpenGL window main menu and contextual menus corrections * Improvements: Massive code cleaning Massive addition of comments in the C sources Code cleaning to remove older APF version compatibilities on open project File associations added for standards atomic coordinates file formats BASH completion adapted accordingly Separate 'Makefile.am' for architecture independent data 2023-03-27 Sébastien Le Roux Release of version 1.1.11 * Bug correction: dmtx.F90: ADAPT_CUT callbacks.c: removed 'if (oap < 2)' 2022-04-11 Sébastien Le Roux Release of version 1.1.10 * Bug correction: molecules.F90: m = VOISJ(l,j,i) 2022-28-10 Sébastien Le Roux Release of version 1.1.9 * Bug corrections: glwin.h: float shift[4], label_format[3] m_poly.c: olg_clones[6] -> olg_clones[5] read_bond.c: update_mol edit_menu.c: cshift[i+3] -> cshift[i] gui.c: cut_sel and cut_lab pointers for 3D window actions dlp_atom.c: compare_non_bonded 2022-27-10 Sébastien Le Roux Release of version 1.1.8 * Bug corrections: edit_menu.c: correction for lattice parameter updates gui.c: cut_sel and cut_lab pointers for 3D window actions popup.c: corrections to use cut_sel and cut_lab glwindow.c: corrections to use cut_sel and cut_lab closep.c: corrections to close volume_win and model_win[2] atom_action.c: corrections to properly trigger bond udpates or not atom_remove.c: corrections to adjust bonds id atom_remove.c: corrections if fragments are removed ogl_text.c: correction buffer size strings for measures callbacks.c: correction when reading workspace remember name 2022-13-10 Sébastien Le Roux Release of version 1.1.7 * Bug corrections: callback.c: save workspace atom_action.c: on remove, trigger re-calculate bonding 2022-10-10 Sébastien Le Roux Release of version 1.1.6 * Bug correction: w_library.c: lib_preview_plot = NULL; * Improvements: main.c: -h glview.c: selection delay on mouse pressed/released 2022-09-23 Sébastien Le Roux Release of version 1.1.5 * Bug correction: w_search.c: selection not to crash if atom_win is closed 2022-09-22 Sébastien Le Roux Release of version 1.1.4 * Bug corrections: read_coord.c: Windows to handle properly EOL symbols m_curve.c: Windows to not crash when destroying label widget glview.c: correct GWARNING messages on widget scale 2022-09-15 Sébastien Le Roux Release of version 1.1.3 * Bug corrections: read_opengl.c: correct 'read_atom_b' initring.c: correct 'send_rings_opengl_' 2022-09-14 Sébastien Le Roux Release of version 1.1.2 * Bug corrections: atom_action.c: recompute bonding on passivate bdcall.c: do not trigger menu init on passivate 2022-09-13 Sébastien Le Roux Release of version 1.1.1 * Bug correction: workspace.c: double click on workspace 2022-08-28 Sébastien Le Roux Initial release of the Atomes program v1.1.0 Atomes-GNU-1.1.14/INSTALL000066400000000000000000000366261457665371200145430ustar00rootroot00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. Atomes-GNU-1.1.14/Makefile.am000066400000000000000000000056701457665371200155410ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in SUBDIRS = src data atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications atomes_mimedir = $(atomes_datadir)/mime/packages/ atomes_metadir = $(atomes_datadir)/metainfo atomes_bashdir = $(atomes_datadir)/bash-completion/completions atomes_docdir = $(docdir) atomes_doc_DATA = \ README.md \ AUTHORS \ ChangeLog atomes_mandir = $(mandir)/man1/ atomes_man_DATA = \ atomes.1.gz install-data-local: # Bash completion if [ ! -d $(atomes_bashdir) ]; then \ $(mkinstalldirs) $(atomes_bashdir); \ fi $(INSTALL_DATA) $(srcdir)/atomes-completion.sh $(atomes_bashdir)/atomes # Program's icons if [ ! -d $(atomes_iconsdir) ]; then \ $(mkinstalldirs) $(atomes_iconsdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-workspace.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-project.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-coordinates.svg $(atomes_iconsdir) # Custom MIME types if [ ! -d $(atomes_mimedir) ]; then \ $(mkinstalldirs) $(atomes_mimedir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes-mime.xml $(atomes_mimedir) # Meta info if [ ! -d $(atomes_metadir) ]; then \ $(mkinstalldirs) $(atomes_metadir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/fr.ipcms.atomes.appdata.xml $(atomes_metadir) appstream-util validate-relax --nonet $(atomes_metadir)/fr.ipcms.atomes.appdata.xml # Desktop file if [ ! -d $(atomes_desktopdir) ]; then \ $(mkinstalldirs) $(atomes_desktopdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes.desktop $(atomes_desktopdir)/atomes.desktop # Finalize touch --no-create $(atomes_iconsdir)/pixmaps if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi desktop-file-install --vendor="" \ --dir=$(atomes_desktopdir) -m 644 \ $(atomes_desktopdir)/atomes.desktop if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi # Remove doc directordy on uninstall uninstall-local: -rm -rf $(atomes_iconsdir)/atomes.svg -rm -rf $(atomes_iconsdir)/atomes-workspace.svg -rm -rf $(atomes_iconsdir)/atomes-project.svg -rm -rf $(atomes_iconsdir)/atomes-coordinates.svg -rm -f $(atomes_desktopdir)/atomes.desktop -rm -f $(atomes_metadir)/fr.ipcms.atomes.appdata.xml -rm -f $(atomes_mimedir)/atomes-mime.xml -rm -f $(atomes_bashdir)/atomes -rmdir $(atomes_docdir) touch --no-create $(atomes_iconsdir) if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi Atomes-GNU-1.1.14/Makefile.in000066400000000000000000000764631457665371200155620ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(atomes_docdir)" \ "$(DESTDIR)$(atomes_mandir)" DATA = $(atomes_doc_DATA) $(atomes_man_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in AUTHORS \ COPYING ChangeLog INSTALL NEWS README.md compile config.guess \ config.sub depcomp install-sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = src data atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications atomes_mimedir = $(atomes_datadir)/mime/packages/ atomes_metadir = $(atomes_datadir)/metainfo atomes_bashdir = $(atomes_datadir)/bash-completion/completions atomes_docdir = $(docdir) atomes_doc_DATA = \ README.md \ AUTHORS \ ChangeLog atomes_mandir = $(mandir)/man1/ atomes_man_DATA = \ atomes.1.gz all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-atomes_docDATA: $(atomes_doc_DATA) @$(NORMAL_INSTALL) @list='$(atomes_doc_DATA)'; test -n "$(atomes_docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(atomes_docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(atomes_docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(atomes_docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(atomes_docdir)" || exit $$?; \ done uninstall-atomes_docDATA: @$(NORMAL_UNINSTALL) @list='$(atomes_doc_DATA)'; test -n "$(atomes_docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(atomes_docdir)'; $(am__uninstall_files_from_dir) install-atomes_manDATA: $(atomes_man_DATA) @$(NORMAL_INSTALL) @list='$(atomes_man_DATA)'; test -n "$(atomes_mandir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(atomes_mandir)'"; \ $(MKDIR_P) "$(DESTDIR)$(atomes_mandir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(atomes_mandir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(atomes_mandir)" || exit $$?; \ done uninstall-atomes_manDATA: @$(NORMAL_UNINSTALL) @list='$(atomes_man_DATA)'; test -n "$(atomes_mandir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(atomes_mandir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(atomes_docdir)" "$(DESTDIR)$(atomes_mandir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-atomes_docDATA install-atomes_manDATA \ install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-atomes_docDATA uninstall-atomes_manDATA \ uninstall-local .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ dist-zstd distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-atomes_docDATA install-atomes_manDATA install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-atomes_docDATA uninstall-atomes_manDATA \ uninstall-local .PRECIOUS: Makefile install-data-local: # Bash completion if [ ! -d $(atomes_bashdir) ]; then \ $(mkinstalldirs) $(atomes_bashdir); \ fi $(INSTALL_DATA) $(srcdir)/atomes-completion.sh $(atomes_bashdir)/atomes # Program's icons if [ ! -d $(atomes_iconsdir) ]; then \ $(mkinstalldirs) $(atomes_iconsdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-workspace.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-project.svg $(atomes_iconsdir) $(INSTALL_DATA) $(srcdir)/metadata/icons/atomes-coordinates.svg $(atomes_iconsdir) # Custom MIME types if [ ! -d $(atomes_mimedir) ]; then \ $(mkinstalldirs) $(atomes_mimedir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes-mime.xml $(atomes_mimedir) # Meta info if [ ! -d $(atomes_metadir) ]; then \ $(mkinstalldirs) $(atomes_metadir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/fr.ipcms.atomes.appdata.xml $(atomes_metadir) appstream-util validate-relax --nonet $(atomes_metadir)/fr.ipcms.atomes.appdata.xml # Desktop file if [ ! -d $(atomes_desktopdir) ]; then \ $(mkinstalldirs) $(atomes_desktopdir); \ fi $(INSTALL_DATA) $(srcdir)/metadata/atomes.desktop $(atomes_desktopdir)/atomes.desktop # Finalize touch --no-create $(atomes_iconsdir)/pixmaps if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi desktop-file-install --vendor="" \ --dir=$(atomes_desktopdir) -m 644 \ $(atomes_desktopdir)/atomes.desktop if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi # Remove doc directordy on uninstall uninstall-local: -rm -rf $(atomes_iconsdir)/atomes.svg -rm -rf $(atomes_iconsdir)/atomes-workspace.svg -rm -rf $(atomes_iconsdir)/atomes-project.svg -rm -rf $(atomes_iconsdir)/atomes-coordinates.svg -rm -f $(atomes_desktopdir)/atomes.desktop -rm -f $(atomes_metadir)/fr.ipcms.atomes.appdata.xml -rm -f $(atomes_mimedir)/atomes-mime.xml -rm -f $(atomes_bashdir)/atomes -rmdir $(atomes_docdir) touch --no-create $(atomes_iconsdir) if [ -u `which gtk-update-icon-cache` ]; then \ gtk-update-icon-cache -q $(atomes_iconsdir); \ fi if [ -z "$(DESTDIR)" ]; then \ update-desktop-database $(atomes_desktopdir) &> /dev/null || :; \ update-mime-database $(atomes_datadir)/mime &> /dev/null || :; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Atomes-GNU-1.1.14/NEWS000066400000000000000000000003671457665371200142020ustar00rootroot00000000000000Welcome to Atomes ! Detailed installation instruction can be found on the web site: https://atomes.ipcms.fr/ For basic help after compilation and/or installation: atomes -h atomes --help For version information: atomes -v atomes --version Atomes-GNU-1.1.14/README.md000066400000000000000000000111201457665371200147470ustar00rootroot00000000000000# Atomes ![](https://github.com/Slookeur/Atomes.io/workflows/ns/badge.svg) ![](https://www.codefactor.io/repository/github/Slookeur/Atomes/badge) [Atomes][atomes] is a Free (Open Source) cross-platform software licensed under the terms of the Affero GPL v3+ license. Atoms is a toolbox developed to analyze, to visualize and to create/edit three-dimensional atomistic models. It offers a workspace that allows to have many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates ... Atomes also provides an advanced input preparation system for further calculations using well known molecular dynamics codes: - Classical MD : [DLPOLY][dlpoly] and [LAMMPS][lammps] - ab-initio MD : [CPMD][cpmd] and [CP2K][cp2k] - QM-MM MD : [CPMD][cpmd] and [CP2K][cp2k] To prepare the input filles for these calculations is likely to be the key, and most complicated step towards MD simulations. Atomes offers a user-friendly assistant to help and guide the user step by step to achieve this crucial step. ## Features - Analysis of 3D atomistic model: neutron and x-rays diffraction, rings statistics, chain statistics, bond order, MSD ... - Visualization: measures, coordination polyhedras, advanced coloring, advanced design - Edition: molecular library, crystal builder, cell edition, surface creation and passivation ... - MD input preparation: - Classical MD: [DLPOLY][dlpoly] and [LAMMPS][lammps] - ab-initio MD: [CPMD][cpmd] and [CP2K][cp2k] - QM-MM MD: [CPMD][cpmd] and [CP2K][cp2k] ## Build instructions To build ***Atomes***: ``` ./configure ``` Followed by: ``` make ``` ### Build options #### Building the GTK4 version of ***Atomes*** ***Atomes*** uses the [GTK][gtk] lib for the GUI, by default GTK3 is used, however it is possible to build the GTK4 version (beta), to do that edit the `Makefile` and change: 1. Edit the file `configure.ac`: And change: ``` PKG_CHECK_MODULES(GTK, [gtk+-3.0 >= 3.16]) dnl PKG_CHECK_MODULES(GTK, [gtk4 >= 4.6]) ``` To: ``` dnl PKG_CHECK_MODULES(GTK, [gtk+-3.0 >= 3.16]) PKG_CHECK_MODULES(GTK, [gtk4 >= 4.6]) ``` 2. Edit the file `src/Makefile.am` And change: > -DGTK3 To: > -DGTK4 3. Update the `configure` script: ``` rm -f aclocal.m4 rm -rf autom4te.cache rm -f configure~ aclocal autoconf automake --add-missing ``` 4. Build ***Atomes*** ``` ./configure make ``` Here are some issues with GTK4 that cannot be sovled for the time being: 1. No way to use Pango markups in menu items with sub-menus (https://gitlab.gnome.org/GNOME/gtk/-/issues/5946) 2. No way to attach widget to menu items not in the top level of the menu (https://gitlab.gnome.org/GNOME/gtk/-/issues/5955) #### Building the serial version of ***Atomes*** By default ***Atomes*** uses [OpenMP][openmp] to parallelize several calculations over the CPU cores. It is possible to turn this off, and to build a serial version of ***Atomes***, to do that: 1. Edit the file `src/Makefile.am` And remove all: > -DOPENMP -fopenmp 2. Update the `configure` script: ``` rm -f aclocal.m4 rm -rf autom4te.cache rm -f configure~ aclocal autoconf automake --add-missing ``` 3. Build ***Atomes*** ``` ./configure make ``` ## Install ***Atomes*** ``` make install ``` ## Who's behind ***Atomes*** ***Atomes*** is developed by [Dr. Sébastien Le Roux][slr], research engineer for the [CNRS][cnrs]

CNRS logo

[Dr. Sébastien Le Roux][slr] works at the Institut de Physique et Chimie des Matériaux de Strasbourg [IPCMS][ipcms]

IPCMS logo

## Documentation The documenation is hosted on [GitHub][github] here: [Atomes documentation][atomes-doc] ## Tutorials Tutorial are regrouped and hosted on [GitHub][github] here: [Atomes tutorials][atomes-tuto] [slr]:https://www.ipcms.fr/sebastien-le-roux/ [cnrs]:https://www.cnrs.fr/ [ipcms]:https://www.ipcms.fr/ [github]:https://github.com/ [jekyll]:https://jekyllrb.com/ [atomes]:https://atomes.ipcms.fr/ [atomes-doc]:https://slookeur.github.io/Atomes-doc/ [atomes-tuto]:https://slookeur.github.io/Atomes-tuto/ [dlpoly]:https://www.scd.stfc.ac.uk/Pages/DL_POLY.aspx [lammps]:https://lammps.sandia.gov/ [cpmd]:http://www.cpmd.org [cp2k]:http://cp2k.berlios.de [gtk]:https://www.gtk.org/ [openmp]:https://www.openmp.org/ Atomes-GNU-1.1.14/aclocal.m4000066400000000000000000001533111457665371200153410ustar00rootroot00000000000000# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, [m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 11 (pkg-config-0.29.1) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.1]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND], dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------ dnl dnl Prepare a "--with-" configure option using the lowercase dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and dnl PKG_CHECK_MODULES in a single macro. AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ])dnl PKG_WITH_MODULES dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ----------------------------------------------- dnl dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES dnl check._[VARIABLE-PREFIX] is exported as make variable. AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ])dnl PKG_HAVE_WITH_MODULES dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES, dnl [DESCRIPTION], [DEFAULT]) dnl ------------------------------------------------------ dnl dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make dnl and preprocessor variable. AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ])dnl PKG_HAVE_DEFINE_WITH_MODULES # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR Atomes-GNU-1.1.14/atomes-completion.sh000066400000000000000000000012401457665371200174650ustar00rootroot00000000000000# atomes(1) completion -*- shell-script -*- _atomes() { local cur prev words cword split _init_completion -s || return COMPREPLY=() cur=${COMP_WORDS[COMP_CWORD]} case $prev in -h | --help | -v | --version) return ;; esac $split && return if [[ $cur == -* ]]; then COMPREPLY=($(compgen -W '$(_parse_help "$1")' -- "$cur")) [[ ${COMPREPLY-} == *= ]] && compopt -o nospace return fi _filedir '@([aA][wW][fF]|[aA][pP][fF]|[xX][yY][zZ]|[pP][dD][bB]|[eE][nN][tT]|[cC][iI][fF]|[iI][pP][fF]|[tT][rR][jJ]|[xX][dD][aA][tT][cC][aA][rR]|[cC]3[dD]|[hH][iI][sS][tT])' } && complete -F _atomes atomes Atomes-GNU-1.1.14/atomes.1.gz000066400000000000000000000022131457665371200154640ustar00rootroot00000000000000L`Mcatomes.1V]o6}ׯ˒VaCPsg1ǚb͖$*bKIQ~Iq-:k^d64vH$!uq8:)u+=|(Ϣ-6픰ΰ6o]py.u2Öq3l2 NVTpbRRZ9/d|=_[В8vZ5<:L׼:%9,y|4rz-ӫ/ @@"Y>v5R7\Іw!Bx#!{ L/YiPM W%? T5.U²Brjخ<~*!y+~wWĻcr 0 /nҪ?ORx]Rzr[-qW ٧-VocslmHږǞ&i~!1Ԩe}L1?Y⁇KC>m~s5io)zOŔ z-I|ܢ/L;4Nn*B*]vK#ײًP%eY zYC~ Z^uAonW|ӧb8xj)Vլ< Jpbe&sQ>ܿD{JI2u cLkm>BNg5#9(9lEl43Nc!N:('D,A6tߺ0iwU+@j;6" [l גɲMk(5T!$4ƒY+fgX]f˛_f dk3*B Dٌ٣8;yu6; "QUj:W=m$ʱAX iH z]k46 7i2^#ӣCpJU xj惶aiDZ ]g![~;OAJqa'{h f7!kr2e>Z{ztJ㿄EQ__ϗFF$cQ Atomes-GNU-1.1.14/atomes.spec000066400000000000000000000073461457665371200156530ustar00rootroot00000000000000Name: atomes %global upname Atomes-GNU Version: 1.1.14 Release: 2%{?dist} Summary: An atomistic toolbox License: AGPL-3.0-or-later Source0: https://github.com/Slookeur/%{upname}/archive/refs/tags/v%{version}.tar.gz # Source1: ./v%%{version}.tar.gz.asc # Source2: %%{name}.gpg URL: https://%{name}.ipcms.fr/ BuildRequires: gnupg2 BuildRequires: make BuildRequires: automake BuildRequires: autoconf BuildRequires: pkgconf-pkg-config BuildRequires: gcc BuildRequires: gcc-gfortran BuildRequires: libgfortran BuildRequires: desktop-file-utils BuildRequires: libappstream-glib # pkg-config BuildRequires: pkgconfig(gtk+-3.0) BuildRequires: pkgconfig(libxml-2.0) BuildRequires: pkgconfig(pangoft2) BuildRequires: pkgconfig(glu) BuildRequires: pkgconfig(epoxy) BuildRequires: pkgconfig(libavutil) BuildRequires: pkgconfig(libavcodec) BuildRequires: pkgconfig(libavformat) BuildRequires: pkgconfig(libswscale) # Runtime requirements Requires: gtk3 Requires: mesa-libGLU Provides: %{name} = %{version}-%{release} %description Atomes: a toolbox to analyze, to visualize and to create/edit three-dimensional atomistic models. It offers a workspace that allows to have many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates... Atomes also provides an advanced input preparation system for further calculations using well known molecular dynamics codes: Classical MD: DLPOLY and LAMMPS ab-initio MD: CPMD and CP2K QM-MM MD: CPMD and CP2K To prepare the input files for these calculations is likely to be the key, and most complicated step towards MD simulations. Atomes offers a user-friendly assistant to help and guide the scientist step by step to achieve this crucial step. %prep # %%{gpgverify} --keyring='%%{SOURCE2}' --signature='%%{SOURCE1}' --data='%%{SOURCE0}' %autosetup -n %{upname}-%{version} %build %configure #make %%{?_smp_mflags} %make_build %install %make_install %check desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/fr.ipcms.%{name}.appdata.xml %files %license COPYING %{_bindir}/%{name} %{_datadir}/doc/%{name}/ %{_mandir}/man1/%{name}.1* %{_datadir}/%{name}/ %{_datadir}/bash-completion/completions/%{name} %{_datadir}/applications/%{name}.desktop %{_datadir}/mime/packages/%{name}-mime.xml %{_datadir}/pixmaps/%{name}.svg %{_datadir}/pixmaps/%{name}-workspace.svg %{_datadir}/pixmaps/%{name}-project.svg %{_datadir}/pixmaps/%{name}-coordinates.svg %{_metainfodir}/fr.ipcms.%{name}.appdata.xml %changelog * Wed Mar 20 2024 Sébastien Le Roux - 1.1.14-2 - Bug corrections and improvements (see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.14) * Wed Mar 20 2024 Sébastien Le Roux - 1.1.14-1 - Bug corrections and improvements (see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.14) * Wed Feb 28 2024 Sébastien Le Roux - 1.1.13-1 - Bug corrections and improvements (see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.13) * Mon Sep 18 2023 Sébastien Le Roux - 1.1.12-2 - Package metadata update * Mon Sep 11 2023 Sébastien Le Roux - 1.1.12-1 - Several bug corrections and improvements (see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.12) * Wed Jul 19 2023 Fedora Release Engineering - 1.1.11-9 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild * Fri Apr 14 2023 Sébastien Le Roux - 1.1.11-8 - Initial Fedora commit Atomes-GNU-1.1.14/autom4te.cache/000077500000000000000000000000001457665371200163015ustar00rootroot00000000000000Atomes-GNU-1.1.14/autom4te.cache/output.0000066400000000000000000007642571457665371200177470ustar00rootroot00000000000000@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.71 for atomes 1.1.14. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.1.14' PACKAGE_STRING='atomes 1.1.14' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB@&t@OBJS FLATPAK_FALSE FLATPAK_TRUE WINDRES NATIVE_WIN32_FALSE NATIVE_WIN32_TRUE PLATFORM_WIN32_FALSE PLATFORM_WIN32_TRUE FCFLAGS_F90 FCFLAGS_f90 FCLIBS host_os host_vendor host_cpu host build_os build_vendor build_cpu build ac_ct_FC FCFLAGS FC am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS GTK_LIBS GTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG GETTEXT_PACKAGE ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_flatpak ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTK_CFLAGS GTK_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS CC CFLAGS LDFLAGS LIBS CPPFLAGS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures atomes 1.1.14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/atomes@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.1.14:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-flatpak to build the Flatpak Some influential environment variables: PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.1.14 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_fc_try_compile LINENO @%:@ --------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_fc_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.1.14, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null @%:@ Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.1.14' printf "%s\n" "@%:@define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "@%:@define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi printf "%s\n" "@%:@define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_MINOR_VERSION 1" >>confdefs.h ATOMES_MINOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_PATCH_VERSION 14" >>confdefs.h ATOMES_PATCH_VERSION=14 GETTEXT_PACKAGE=atomes printf "%s\n" "@%:@define GETTEXT_PACKAGE \"$GETTEXT_PACKAGE\"" >>confdefs.h # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="pkg-config" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="update-mime-database" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="update-desktop-database" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="appstream-util" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 printf %s "checking for GTK... " >&6; } if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.16\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.16") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0 >= 3.16" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.16\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.16") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-3.0 >= 3.16" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0 >= 3.16" 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0 >= 3.16" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-3.0 >= 3.16) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LIBXML2" >&5 printf %s "checking for LIBXML2... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PANGOFT2" >&5 printf %s "checking for PANGOFT2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FFMPEG" >&5 printf %s "checking for FFMPEG... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLU" >&5 printf %s "checking for GLU... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EPOXY" >&5 printf %s "checking for EPOXY... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in @%:@( '0:this is the am__doit target') : case $s in @%:@( BSD) : am__include='.include' am__quote='"' ;; @%:@( *) : am__include='include' am__quote='' ;; esac ;; @%:@( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } @%:@ Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="$CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval `printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes else $as_nop eval `printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 printf "%s\n" "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then : else : fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else $as_nop FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else $as_nop ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* ) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else $as_nop ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else $as_nop ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "@%:@define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "@%:@define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else $as_nop FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else $as_nop ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } ax_save_FLAGS=$FCFLAGS FCFLAGS="$FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval `printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh`=yes else $as_nop eval `printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 printf "%s\n" "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then : else : fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* ) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & @&t@ 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $host in *mingw* | pw32* | cygwin*) platform_win32=yes echo "Building win32 application" ;; *) platform_win32=no ;; esac if test x"$platform_win32" = "xyes"; then PLATFORM_WIN32_TRUE= PLATFORM_WIN32_FALSE='#' else PLATFORM_WIN32_TRUE='#' PLATFORM_WIN32_FALSE= fi case $host in *mingw*) native_win32=yes echo "Building native win32 application" ;; *) native_win32=no ;; esac if test x"$native_win32" = "xyes"; then NATIVE_WIN32_TRUE= NATIVE_WIN32_FALSE='#' else NATIVE_WIN32_TRUE='#' NATIVE_WIN32_FALSE= fi if test "$native_win32" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h @%:@ Check whether --enable-flatpak was given. if test ${enable_flatpak+y} then : enableval=$enable_flatpak; fi if test "x$flatpak" != "xno"; then FLATPAK_TRUE= FLATPAK_FALSE='#' else FLATPAK_TRUE='#' FLATPAK_FALSE= fi ac_config_files="$ac_config_files Makefile src/Makefile data/Makefile" ac_config_headers="$ac_config_headers config.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then as_fn_error $? "conditional \"PLATFORM_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NATIVE_WIN32_TRUE}" && test -z "${NATIVE_WIN32_FALSE}"; then as_fn_error $? "conditional \"NATIVE_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FLATPAK_TRUE}" && test -z "${FLATPAK_FALSE}"; then as_fn_error $? "conditional \"FLATPAK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.1.14, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.1.14 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in @%:@( *\'*) : eval set x "$CONFIG_FILES" ;; @%:@( *) : set x $CONFIG_FILES ;; @%:@( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi Atomes-GNU-1.1.14/autom4te.cache/output.1000066400000000000000000007642621457665371200177440ustar00rootroot00000000000000@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.71 for atomes 1.1.14. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.1.14' PACKAGE_STRING='atomes 1.1.14' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB@&t@OBJS FLATPAK_FALSE FLATPAK_TRUE WINDRES NATIVE_WIN32_FALSE NATIVE_WIN32_TRUE PLATFORM_WIN32_FALSE PLATFORM_WIN32_TRUE FCFLAGS_F90 FCFLAGS_f90 FCLIBS host_os host_vendor host_cpu host build_os build_vendor build_cpu build ac_ct_FC FCFLAGS FC am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS GTK_LIBS GTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG GETTEXT_PACKAGE ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_flatpak ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTK_CFLAGS GTK_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS CC CFLAGS LDFLAGS LIBS CPPFLAGS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures atomes 1.1.14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/atomes@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.1.14:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-flatpak to build the Flatpak Some influential environment variables: PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.1.14 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_fc_try_compile LINENO @%:@ --------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_fc_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.1.14, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null @%:@ Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.1.14' printf "%s\n" "@%:@define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "@%:@define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi printf "%s\n" "@%:@define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_MINOR_VERSION 1" >>confdefs.h ATOMES_MINOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_PATCH_VERSION 14" >>confdefs.h ATOMES_PATCH_VERSION=14 GETTEXT_PACKAGE=atomes printf "%s\n" "@%:@define GETTEXT_PACKAGE \"$GETTEXT_PACKAGE\"" >>confdefs.h # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="pkg-config" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="update-mime-database" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="update-desktop-database" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="appstream-util" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 printf %s "checking for GTK... " >&6; } if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.16\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.16") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0 >= 3.16" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.16\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.16") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-3.0 >= 3.16" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0 >= 3.16" 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0 >= 3.16" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-3.0 >= 3.16) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LIBXML2" >&5 printf %s "checking for LIBXML2... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PANGOFT2" >&5 printf %s "checking for PANGOFT2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FFMPEG" >&5 printf %s "checking for FFMPEG... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLU" >&5 printf %s "checking for GLU... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EPOXY" >&5 printf %s "checking for EPOXY... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in @%:@( '0:this is the am__doit target') : case $s in @%:@( BSD) : am__include='.include' am__quote='"' ;; @%:@( *) : am__include='include' am__quote='' ;; esac ;; @%:@( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } @%:@ Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="$CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval `printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes else $as_nop eval `printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 printf "%s\n" "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then : else : fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else $as_nop FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else $as_nop ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* ) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else $as_nop ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else $as_nop ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "@%:@define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "@%:@define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else $as_nop FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else $as_nop ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } ax_save_FLAGS=$FCFLAGS FCFLAGS="$FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval `printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh`=yes else $as_nop eval `printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 printf "%s\n" "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then : else : fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* ) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & @&t@ 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $host in *mingw* | pw32* | cygwin*) platform_win32=yes echo "Building win32 application" ;; *) platform_win32=no ;; esac if test x"$platform_win32" = "xyes"; then PLATFORM_WIN32_TRUE= PLATFORM_WIN32_FALSE='#' else PLATFORM_WIN32_TRUE='#' PLATFORM_WIN32_FALSE= fi case $host in *mingw*) native_win32=yes echo "Building native win32 application" ;; *) native_win32=no ;; esac if test x"$native_win32" = "xyes"; then NATIVE_WIN32_TRUE= NATIVE_WIN32_FALSE='#' else NATIVE_WIN32_TRUE='#' NATIVE_WIN32_FALSE= fi if test "$native_win32" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h @%:@ Check whether --enable-flatpak was given. if test ${enable_flatpak+y} then : enableval=$enable_flatpak; fi if test "x$flatpak" != "xno"; then FLATPAK_TRUE= FLATPAK_FALSE='#' else FLATPAK_TRUE='#' FLATPAK_FALSE= fi ac_config_files="$ac_config_files Makefile src/Makefile data/Makefile" ac_config_headers="$ac_config_headers config.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then as_fn_error $? "conditional \"PLATFORM_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NATIVE_WIN32_TRUE}" && test -z "${NATIVE_WIN32_FALSE}"; then as_fn_error $? "conditional \"NATIVE_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FLATPAK_TRUE}" && test -z "${FLATPAK_FALSE}"; then as_fn_error $? "conditional \"FLATPAK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.1.14, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.1.14 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in @%:@( *\'*) : eval set x "$CONFIG_FILES" ;; @%:@( *) : set x $CONFIG_FILES ;; @%:@( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi Atomes-GNU-1.1.14/autom4te.cache/output.2000066400000000000000000007642571457665371200177510ustar00rootroot00000000000000@%:@! /bin/sh @%:@ Guess values for system-dependent variables and create Makefiles. @%:@ Generated by GNU Autoconf 2.71 for atomes 1.1.14. @%:@ @%:@ Report bugs to . @%:@ @%:@ @%:@ Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, @%:@ Inc. @%:@ @%:@ @%:@ This configure script is free software; the Free Software Foundation @%:@ gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in @%:@( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in @%:@ (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith @%:@ as_fn_nop @%:@ --------- @%:@ Do nothing but, unlike ":", preserve the value of @S|@?. as_fn_nop () { return $? } as_nop=as_fn_nop @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIB@&t@OBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.1.14' PACKAGE_STRING='atomes 1.1.14' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIB@&t@OBJS FLATPAK_FALSE FLATPAK_TRUE WINDRES NATIVE_WIN32_FALSE NATIVE_WIN32_TRUE PLATFORM_WIN32_FALSE PLATFORM_WIN32_TRUE FCFLAGS_F90 FCFLAGS_f90 FCLIBS host_os host_vendor host_cpu host build_os build_vendor build_cpu build ac_ct_FC FCFLAGS FC am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS GTK_LIBS GTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG GETTEXT_PACKAGE ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_flatpak ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTK_CFLAGS GTK_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS CC CFLAGS LDFLAGS LIBS CPPFLAGS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures atomes 1.1.14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX @<:@@S|@ac_default_prefix@:>@ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX @<:@PREFIX@:>@ By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root @<:@DATAROOTDIR/doc/atomes@:>@ --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.1.14:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-flatpak to build the Flatpak Some influential environment variables: PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.1.14 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## @%:@ ac_fn_c_try_compile LINENO @%:@ -------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_compile @%:@ ac_fn_fc_try_compile LINENO @%:@ --------------------------- @%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_fc_try_compile @%:@ ac_fn_c_try_link LINENO @%:@ ----------------------- @%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } @%:@ ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?@<:@ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.1.14, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "@%:@define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "@%:@define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in @%:@( */*) : ;; @%:@( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_@&t@config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_@&t@config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_@&t@configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in @%:@(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null @%:@ Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.1.14' printf "%s\n" "@%:@define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "@%:@define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi printf "%s\n" "@%:@define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_MINOR_VERSION 1" >>confdefs.h ATOMES_MINOR_VERSION=1 printf "%s\n" "@%:@define ATOMES_PATCH_VERSION 14" >>confdefs.h ATOMES_PATCH_VERSION=14 GETTEXT_PACKAGE=atomes printf "%s\n" "@%:@define GETTEXT_PACKAGE \"$GETTEXT_PACKAGE\"" >>confdefs.h # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="pkg-config" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="update-mime-database" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="update-desktop-database" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="appstream-util" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 printf %s "checking for GTK... " >&6; } if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.16\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.16") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0 >= 3.16" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.16\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.16") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-3.0 >= 3.16" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0 >= 3.16" 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0 >= 3.16" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-3.0 >= 3.16) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LIBXML2" >&5 printf %s "checking for LIBXML2... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PANGOFT2" >&5 printf %s "checking for PANGOFT2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FFMPEG" >&5 printf %s "checking for FFMPEG... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLU" >&5 printf %s "checking for GLU... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EPOXY" >&5 printf %s "checking for EPOXY... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $@%:@ != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in @%:@( '0:this is the am__doit target') : case $s in @%:@( BSD) : am__include='.include' am__quote='"' ;; @%:@( *) : am__include='include' am__quote='' ;; esac ;; @%:@( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } @%:@ Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="$CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval `printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes else $as_nop eval `printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 printf "%s\n" "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then : else : fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else $as_nop FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else $as_nop ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* ) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else $as_nop ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else $as_nop ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @%:@define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "@%:@define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "@%:@define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "@%:@define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "@%:@define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else $as_nop FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else $as_nop ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } ax_save_FLAGS=$FCFLAGS FCFLAGS="$FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval `printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh`=yes else $as_nop eval `printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 printf "%s\n" "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then : else : fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $@%:@ != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* ) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & @&t@ 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $host in *mingw* | pw32* | cygwin*) platform_win32=yes echo "Building win32 application" ;; *) platform_win32=no ;; esac if test x"$platform_win32" = "xyes"; then PLATFORM_WIN32_TRUE= PLATFORM_WIN32_FALSE='#' else PLATFORM_WIN32_TRUE='#' PLATFORM_WIN32_FALSE= fi case $host in *mingw*) native_win32=yes echo "Building native win32 application" ;; *) native_win32=no ;; esac if test x"$native_win32" = "xyes"; then NATIVE_WIN32_TRUE= NATIVE_WIN32_FALSE='#' else NATIVE_WIN32_TRUE='#' NATIVE_WIN32_FALSE= fi if test "$native_win32" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h @%:@ Check whether --enable-flatpak was given. if test ${enable_flatpak+y} then : enableval=$enable_flatpak; fi if test "x$flatpak" != "xno"; then FLATPAK_TRUE= FLATPAK_FALSE='#' else FLATPAK_TRUE='#' FLATPAK_FALSE= fi ac_config_files="$ac_config_files Makefile src/Makefile data/Makefile" ac_config_headers="$ac_config_headers config.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIB@&t@OBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then as_fn_error $? "conditional \"PLATFORM_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NATIVE_WIN32_TRUE}" && test -z "${NATIVE_WIN32_FALSE}"; then as_fn_error $? "conditional \"NATIVE_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FLATPAK_TRUE}" && test -z "${FLATPAK_FALSE}"; then as_fn_error $? "conditional \"FLATPAK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in @%:@( *posix*) : set -o posix ;; @%:@( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in @%:@(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi @%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] @%:@ ---------------------------------------- @%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are @%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the @%:@ script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } @%:@ as_fn_error @%:@ as_fn_set_status STATUS @%:@ ----------------------- @%:@ Set @S|@? to STATUS, without forking. as_fn_set_status () { return $1 } @%:@ as_fn_set_status @%:@ as_fn_exit STATUS @%:@ ----------------- @%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } @%:@ as_fn_exit @%:@ as_fn_unset VAR @%:@ --------------- @%:@ Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset @%:@ as_fn_append VAR VALUE @%:@ ---------------------- @%:@ Append the text in VALUE to the end of the definition contained in VAR. Take @%:@ advantage of any shell optimizations that allow amortized linear growth over @%:@ repeated appends, instead of the typical quadratic growth present in naive @%:@ implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append @%:@ as_fn_arith ARG... @%:@ ------------------ @%:@ Perform arithmetic evaluation on the ARGs, and store the result in the @%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments @%:@ must be portable across @S|@(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in @%:@((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_@&t@echo='printf %s\n' as_@&t@echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null @%:@ as_fn_mkdir_p @%:@ ------------- @%:@ Create "@S|@as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } @%:@ as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi @%:@ as_fn_executable_p FILE @%:@ ----------------------- @%:@ Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } @%:@ as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.1.14, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.1.14 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX @%:@@%:@ Running $as_me. @%:@@%:@ _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in @%:@( *\'*) : eval set x "$CONFIG_FILES" ;; @%:@( *) : set x $CONFIG_FILES ;; @%:@( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi Atomes-GNU-1.1.14/autom4te.cache/requests000066400000000000000000000263611457665371200201070ustar00rootroot00000000000000# This file was generated by Autom4te 2.71. # It contains the lists of macros which have been traced. # It can be safely removed. @request = ( bless( [ '0', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', '/usr/share/aclocal-1.16/internal/ac-config-macro-dirs.m4', '/usr/share/aclocal/pkg.m4', '/usr/share/aclocal-1.16/amversion.m4', '/usr/share/aclocal-1.16/auxdir.m4', '/usr/share/aclocal-1.16/cond.m4', '/usr/share/aclocal-1.16/depend.m4', '/usr/share/aclocal-1.16/depout.m4', '/usr/share/aclocal-1.16/init.m4', '/usr/share/aclocal-1.16/install-sh.m4', '/usr/share/aclocal-1.16/lead-dot.m4', '/usr/share/aclocal-1.16/make.m4', '/usr/share/aclocal-1.16/missing.m4', '/usr/share/aclocal-1.16/options.m4', '/usr/share/aclocal-1.16/prog-cc-c-o.m4', '/usr/share/aclocal-1.16/runlog.m4', '/usr/share/aclocal-1.16/sanity.m4', '/usr/share/aclocal-1.16/silent.m4', '/usr/share/aclocal-1.16/strip.m4', '/usr/share/aclocal-1.16/substnot.m4', '/usr/share/aclocal-1.16/tar.m4', 'configure.ac' ], { 'AC_DEFUN_ONCE' => 1, 'PKG_PROG_PKG_CONFIG' => 1, 'PKG_INSTALLDIR' => 1, '_AM_IF_OPTION' => 1, 'AM_SILENT_RULES' => 1, '_PKG_SHORT_ERRORS_SUPPORTED' => 1, 'AM_PROG_CC_C_O' => 1, '_AM_PROG_CC_C_O' => 1, 'AM_RUN_LOG' => 1, 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, 'AM_MISSING_PROG' => 1, '_AM_PROG_TAR' => 1, '_m4_warn' => 1, '_AC_AM_CONFIG_HEADER_HOOK' => 1, 'PKG_CHECK_VAR' => 1, '_AM_SET_OPTIONS' => 1, 'AM_SET_DEPDIR' => 1, 'AM_DEP_TRACK' => 1, '_AM_MANGLE_OPTION' => 1, 'PKG_CHECK_EXISTS' => 1, 'AM_AUX_DIR_EXPAND' => 1, 'AX_CHECK_COMPILER_FLAGS' => 1, 'm4_include' => 1, 'AM_PROG_INSTALL_STRIP' => 1, 'PKG_NOARCH_INSTALLDIR' => 1, 'PKG_CHECK_MODULES_STATIC' => 1, 'AC_DEFUN' => 1, '_AM_AUTOCONF_VERSION' => 1, 'PKG_HAVE_WITH_MODULES' => 1, 'AU_DEFUN' => 1, '_AM_CONFIG_MACRO_DIRS' => 1, 'PKG_HAVE_DEFINE_WITH_MODULES' => 1, 'm4_pattern_allow' => 1, 'PKG_WITH_MODULES' => 1, '_AM_SET_OPTION' => 1, 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AM_MISSING_HAS_RUN' => 1, 'AM_SET_LEADING_DOT' => 1, 'AM_PROG_INSTALL_SH' => 1, 'AM_SUBST_NOTMAKE' => 1, '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'include' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AM_CONDITIONAL' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, '_AM_SUBST_NOTMAKE' => 1, 'AC_CONFIG_MACRO_DIR' => 1, 'AM_SANITY_CHECK' => 1, 'm4_pattern_forbid' => 1, 'AM_MAKE_INCLUDE' => 1, '_AM_DEPENDENCIES' => 1, 'PKG_CHECK_MODULES' => 1 } ], 'Autom4te::Request' ), bless( [ '1', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', 'aclocal.m4', '/usr/share/autoconf/autoconf/trailer.m4', 'configure.ac' ], { 'AM_NLS' => 1, 'AM_PATH_GUILE' => 1, 'AC_FC_PP_SRCEXT' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'GTK_DOC_CHECK' => 1, 'm4_include' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'AC_SUBST_TRACE' => 1, 'AM_PROG_MKDIR_P' => 1, 'AC_CONFIG_HEADERS' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AC_CANONICAL_TARGET' => 1, 'AC_FC_PP_DEFINE' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AC_CONFIG_LINKS' => 1, 'AM_PROG_CXX_C_O' => 1, 'AM_XGETTEXT_OPTION' => 1, '_AM_MAKEFILE_INCLUDE' => 1, 'AC_LIBSOURCE' => 1, 'AM_PROG_CC_C_O' => 1, 'AC_PROG_LIBTOOL' => 1, '_m4_warn' => 1, 'AC_FC_SRCEXT' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'AM_GNU_GETTEXT' => 1, '_AM_COND_ELSE' => 1, 'AM_MAKEFILE_INCLUDE' => 1, 'AM_SILENT_RULES' => 1, 'LT_INIT' => 1, 'm4_pattern_forbid' => 1, 'AM_PROG_MOC' => 1, 'm4_sinclude' => 1, 'AM_PROG_F77_C_O' => 1, 'AM_MAINTAINER_MODE' => 1, 'IT_PROG_INTLTOOL' => 1, '_LT_AC_TAGCONFIG' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'include' => 1, 'AM_PROG_LIBTOOL' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AC_CANONICAL_BUILD' => 1, 'AM_CONDITIONAL' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AM_INIT_AUTOMAKE' => 1, '_AM_COND_ENDIF' => 1, '_AM_SUBST_NOTMAKE' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, 'sinclude' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AC_SUBST' => 1, 'AC_INIT' => 1, 'AC_CONFIG_FILES' => 1, 'AC_CANONICAL_HOST' => 1, 'AM_PROG_FC_C_O' => 1, 'AH_OUTPUT' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, '_AM_COND_IF' => 1, 'AM_POT_TOOLS' => 1, 'AC_FC_FREEFORM' => 1, 'm4_pattern_allow' => 1, 'AM_PROG_AR' => 1, 'LT_SUPPORTED_TAG' => 1 } ], 'Autom4te::Request' ), bless( [ '2', 1, [ '/usr/share/autoconf' ], [ '/usr/share/autoconf/autoconf/autoconf.m4f', 'aclocal.m4', 'configure.ac' ], { 'm4_sinclude' => 1, 'm4_pattern_forbid' => 1, 'AM_PROG_MOC' => 1, '_LT_AC_TAGCONFIG' => 1, 'AC_CONFIG_LIBOBJ_DIR' => 1, 'IT_PROG_INTLTOOL' => 1, 'AM_MAINTAINER_MODE' => 1, 'AM_PROG_F77_C_O' => 1, 'AC_CANONICAL_BUILD' => 1, 'AM_AUTOMAKE_VERSION' => 1, 'AM_PROG_LIBTOOL' => 1, 'include' => 1, 'AC_CONFIG_MACRO_DIR_TRACE' => 1, 'AC_SUBST' => 1, 'sinclude' => 1, 'AC_DEFINE_TRACE_LITERAL' => 1, '_AM_SUBST_NOTMAKE' => 1, '_AM_COND_ENDIF' => 1, 'AM_INIT_AUTOMAKE' => 1, 'AC_CANONICAL_SYSTEM' => 1, 'AM_CONDITIONAL' => 1, 'AC_INIT' => 1, 'AH_OUTPUT' => 1, 'AM_PROG_FC_C_O' => 1, 'AC_CANONICAL_HOST' => 1, 'AC_CONFIG_FILES' => 1, 'AC_FC_FREEFORM' => 1, 'AM_POT_TOOLS' => 1, '_AM_COND_IF' => 1, 'AM_EXTRA_RECURSIVE_TARGETS' => 1, 'LT_SUPPORTED_TAG' => 1, 'AM_PROG_AR' => 1, 'm4_pattern_allow' => 1, 'GTK_DOC_CHECK' => 1, 'LT_CONFIG_LTDL_DIR' => 1, 'AC_FC_PP_SRCEXT' => 1, 'AM_PATH_GUILE' => 1, 'AM_NLS' => 1, 'AC_REQUIRE_AUX_FILE' => 1, 'm4_include' => 1, 'AC_SUBST_TRACE' => 1, 'AM_ENABLE_MULTILIB' => 1, 'AC_CANONICAL_TARGET' => 1, 'AC_CONFIG_SUBDIRS' => 1, 'AC_CONFIG_HEADERS' => 1, 'AM_PROG_MKDIR_P' => 1, 'AM_PROG_CC_C_O' => 1, 'AC_LIBSOURCE' => 1, '_AM_MAKEFILE_INCLUDE' => 1, 'AM_XGETTEXT_OPTION' => 1, 'AM_PROG_CXX_C_O' => 1, 'AC_CONFIG_LINKS' => 1, 'AC_FC_PP_DEFINE' => 1, 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, 'AC_FC_SRCEXT' => 1, '_m4_warn' => 1, 'AC_PROG_LIBTOOL' => 1, 'AM_MAKEFILE_INCLUDE' => 1, '_AM_COND_ELSE' => 1, 'AM_GNU_GETTEXT' => 1, 'AC_CONFIG_AUX_DIR' => 1, 'LT_INIT' => 1, 'AM_SILENT_RULES' => 1 } ], 'Autom4te::Request' ) ); Atomes-GNU-1.1.14/autom4te.cache/traces.0000066400000000000000000001572231457665371200176550ustar00rootroot00000000000000m4trace:/usr/share/aclocal/pkg.m4:58: -1- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:92: -1- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) m4trace:/usr/share/aclocal/pkg.m4:121: -1- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:139: -1- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:208: -1- AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ]) m4trace:/usr/share/aclocal/pkg.m4:226: -1- AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) m4trace:/usr/share/aclocal/pkg.m4:248: -1- AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ]) m4trace:/usr/share/aclocal/pkg.m4:267: -1- AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ]) m4trace:/usr/share/aclocal/pkg.m4:285: -1- AC_DEFUN([PKG_WITH_MODULES], [ m4_pushdef([with_arg], m4_tolower([$1])) m4_pushdef([description], [m4_default([$5], [build with ]with_arg[ support])]) m4_pushdef([def_arg], [m4_default([$6], [auto])]) m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes]) m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no]) m4_case(def_arg, [yes],[m4_pushdef([with_without], [--without-]with_arg)], [m4_pushdef([with_without],[--with-]with_arg)]) AC_ARG_WITH(with_arg, AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),, [AS_TR_SH([with_]with_arg)=def_arg]) AS_CASE([$AS_TR_SH([with_]with_arg)], [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)], [auto],[PKG_CHECK_MODULES([$1],[$2], [m4_n([def_action_if_found]) $3], [m4_n([def_action_if_not_found]) $4])]) m4_popdef([with_arg]) m4_popdef([description]) m4_popdef([def_arg]) ]) m4trace:/usr/share/aclocal/pkg.m4:322: -1- AC_DEFUN([PKG_HAVE_WITH_MODULES], [ PKG_WITH_MODULES([$1],[$2],,,[$3],[$4]) AM_CONDITIONAL([HAVE_][$1], [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"]) ]) m4trace:/usr/share/aclocal/pkg.m4:337: -1- AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES], [ PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4]) AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"], [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])]) ]) m4trace:/usr/share/aclocal-1.16/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) m4trace:/usr/share/aclocal-1.16/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) m4trace:/usr/share/aclocal-1.16/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) m4trace:/usr/share/aclocal-1.16/cond.m4:12: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) m4trace:/usr/share/aclocal-1.16/depend.m4:26: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) m4trace:/usr/share/aclocal-1.16/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) m4trace:/usr/share/aclocal-1.16/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) m4trace:/usr/share/aclocal-1.16/depout.m4:11: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ]) m4trace:/usr/share/aclocal-1.16/depout.m4:64: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) m4trace:/usr/share/aclocal-1.16/init.m4:29: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) m4trace:/usr/share/aclocal-1.16/init.m4:204: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) m4trace:/usr/share/aclocal-1.16/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) m4trace:/usr/share/aclocal-1.16/lead-dot.m4:10: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) m4trace:/usr/share/aclocal-1.16/make.m4:13: -1- AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) m4trace:/usr/share/aclocal-1.16/make.m4:42: -1- m4_pattern_allow([^am__quote$]) m4trace:/usr/share/aclocal-1.16/missing.m4:11: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) m4trace:/usr/share/aclocal-1.16/missing.m4:20: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) m4trace:/usr/share/aclocal-1.16/options.m4:11: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) m4trace:/usr/share/aclocal-1.16/options.m4:17: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) m4trace:/usr/share/aclocal-1.16/options.m4:23: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) m4trace:/usr/share/aclocal-1.16/options.m4:29: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) m4trace:/usr/share/aclocal-1.16/prog-cc-c-o.m4:12: -1- AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) m4trace:/usr/share/aclocal-1.16/prog-cc-c-o.m4:47: -1- AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) m4trace:/usr/share/aclocal-1.16/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) m4trace:/usr/share/aclocal-1.16/sanity.m4:11: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) m4trace:/usr/share/aclocal-1.16/silent.m4:12: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) m4trace:/usr/share/aclocal-1.16/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) m4trace:/usr/share/aclocal-1.16/substnot.m4:12: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) m4trace:/usr/share/aclocal-1.16/substnot.m4:17: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) m4trace:/usr/share/aclocal-1.16/tar.m4:23: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:13: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:13: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:13: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:15: -1- AM_INIT_AUTOMAKE m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:15: -1- AM_SET_CURRENT_AUTOMAKE_VERSION m4trace:configure.ac:15: -1- AM_AUTOMAKE_VERSION([1.16.5]) m4trace:configure.ac:15: -1- _AM_AUTOCONF_VERSION([2.71]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:15: -1- _AM_SET_OPTIONS([]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([no-define]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AM_SANITY_CHECK m4trace:configure.ac:15: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) m4trace:configure.ac:15: -1- AM_MISSING_HAS_RUN m4trace:configure.ac:15: -1- AM_AUX_DIR_EXPAND m4trace:configure.ac:15: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:15: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:15: -1- AM_PROG_INSTALL_SH m4trace:configure.ac:15: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:15: -1- AM_PROG_INSTALL_STRIP m4trace:configure.ac:15: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:15: -1- AM_SET_LEADING_DOT m4trace:configure.ac:15: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([tar-ustar]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([tar-pax]) m4trace:configure.ac:15: -1- _AM_PROG_TAR([v7]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.ac:15: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) m4trace:configure.ac:15: -2- _AM_MANGLE_OPTION([no-dependencies]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CTAGS$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ETAGS$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CSCOPE$]) m4trace:configure.ac:15: -1- AM_SILENT_RULES m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_V$]) m4trace:configure.ac:15: -1- AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_V$]) m4trace:configure.ac:15: -1- AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_BACKSLASH$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH]) m4trace:configure.ac:17: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:18: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:19: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:20: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:21: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:22: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:29: -1- m4_pattern_allow([^GETTEXT_PACKAGE$]) m4trace:configure.ac:30: -1- m4_pattern_allow([^GETTEXT_PACKAGE$]) m4trace:configure.ac:36: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:37: -1- m4_pattern_allow([^UP_MIME$]) m4trace:configure.ac:38: -1- m4_pattern_allow([^UP_DESKTOP$]) m4trace:configure.ac:39: -1- m4_pattern_allow([^UP_APPSTREAM$]) m4trace:configure.ac:46: -1- PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.16]) m4trace:configure.ac:46: -1- PKG_PROG_PKG_CONFIG m4trace:configure.ac:46: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^GTK_CFLAGS$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^GTK_LIBS$]) m4trace:configure.ac:46: -1- PKG_CHECK_EXISTS([gtk+-3.0 >= 3.16], [pkg_cv_[]GTK_CFLAGS=`$PKG_CONFIG --[]cflags "gtk+-3.0 >= 3.16" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:46: -1- PKG_CHECK_EXISTS([gtk+-3.0 >= 3.16], [pkg_cv_[]GTK_LIBS=`$PKG_CONFIG --[]libs "gtk+-3.0 >= 3.16" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:46: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:48: -1- PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.4.0]) m4trace:configure.ac:48: -1- m4_pattern_allow([^LIBXML2_CFLAGS$]) m4trace:configure.ac:48: -1- m4_pattern_allow([^LIBXML2_LIBS$]) m4trace:configure.ac:48: -1- PKG_CHECK_EXISTS([libxml-2.0 >= 2.4.0], [pkg_cv_[]LIBXML2_CFLAGS=`$PKG_CONFIG --[]cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:48: -1- PKG_CHECK_EXISTS([libxml-2.0 >= 2.4.0], [pkg_cv_[]LIBXML2_LIBS=`$PKG_CONFIG --[]libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:48: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:49: -1- PKG_CHECK_MODULES([PANGOFT2], [pangoft2]) m4trace:configure.ac:49: -1- m4_pattern_allow([^PANGOFT2_CFLAGS$]) m4trace:configure.ac:49: -1- m4_pattern_allow([^PANGOFT2_LIBS$]) m4trace:configure.ac:49: -1- PKG_CHECK_EXISTS([pangoft2], [pkg_cv_[]PANGOFT2_CFLAGS=`$PKG_CONFIG --[]cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:49: -1- PKG_CHECK_EXISTS([pangoft2], [pkg_cv_[]PANGOFT2_LIBS=`$PKG_CONFIG --[]libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:49: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:50: -1- PKG_CHECK_MODULES([FFMPEG], [libavcodec libavformat libavutil libswscale]) m4trace:configure.ac:50: -1- m4_pattern_allow([^FFMPEG_CFLAGS$]) m4trace:configure.ac:50: -1- m4_pattern_allow([^FFMPEG_LIBS$]) m4trace:configure.ac:50: -1- PKG_CHECK_EXISTS([libavcodec libavformat libavutil libswscale], [pkg_cv_[]FFMPEG_CFLAGS=`$PKG_CONFIG --[]cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:50: -1- PKG_CHECK_EXISTS([libavcodec libavformat libavutil libswscale], [pkg_cv_[]FFMPEG_LIBS=`$PKG_CONFIG --[]libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:50: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:51: -1- PKG_CHECK_MODULES([GLU], [glu]) m4trace:configure.ac:51: -1- m4_pattern_allow([^GLU_CFLAGS$]) m4trace:configure.ac:51: -1- m4_pattern_allow([^GLU_LIBS$]) m4trace:configure.ac:51: -1- PKG_CHECK_EXISTS([glu], [pkg_cv_[]GLU_CFLAGS=`$PKG_CONFIG --[]cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:51: -1- PKG_CHECK_EXISTS([glu], [pkg_cv_[]GLU_LIBS=`$PKG_CONFIG --[]libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:51: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:52: -1- PKG_CHECK_MODULES([EPOXY], [epoxy]) m4trace:configure.ac:52: -1- m4_pattern_allow([^EPOXY_CFLAGS$]) m4trace:configure.ac:52: -1- m4_pattern_allow([^EPOXY_LIBS$]) m4trace:configure.ac:52: -1- PKG_CHECK_EXISTS([epoxy], [pkg_cv_[]EPOXY_CFLAGS=`$PKG_CONFIG --[]cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:52: -1- PKG_CHECK_EXISTS([epoxy], [pkg_cv_[]EPOXY_LIBS=`$PKG_CONFIG --[]libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) m4trace:configure.ac:52: -1- _PKG_SHORT_ERRORS_SUPPORTED m4trace:configure.ac:56: -1- AC_DEFUN([AX_CHECK_COMPILER_FLAGS], [AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: AS_LITERAL_IF([$1], [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1), [ ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1) AC_MSG_RESULT($ax_check_compiler_flags) if test "x$ax_check_compiler_flags" = xyes; then m4_default([$2], :) else m4_default([$3], :) fi ]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.ac:84: -1- _AM_PROG_CC_C_O m4trace:configure.ac:84: -1- AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) m4trace:configure.ac:84: -1- _AM_DEPENDENCIES([CC]) m4trace:configure.ac:84: -1- AM_SET_DEPDIR m4trace:configure.ac:84: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.ac:84: -1- AM_OUTPUT_DEPENDENCY_COMMANDS m4trace:configure.ac:84: -1- AM_MAKE_INCLUDE m4trace:configure.ac:84: -1- AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__include$]) m4trace:configure.ac:84: -1- AM_DEP_TRACK m4trace:configure.ac:84: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.ac:84: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__nodep$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([am__nodep]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:84: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:86: -1- AX_CHECK_COMPILER_FLAGS([$CFLAGS]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build_cpu$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build_vendor$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build_os$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host_cpu$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host_vendor$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host_os$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_DUMMY_MAIN$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:94: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:94: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:94: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:94: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:94: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:94: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:97: -1- m4_pattern_allow([^FCFLAGS_f90$]) m4trace:configure.ac:98: -1- m4_pattern_allow([^FCFLAGS_F90$]) m4trace:configure.ac:100: -1- AX_CHECK_COMPILER_FLAGS([$FCFLAGS]) m4trace:configure.ac:102: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:119: -1- AM_CONDITIONAL([PLATFORM_WIN32], [test x"$platform_win32" = "xyes"]) m4trace:configure.ac:119: -1- m4_pattern_allow([^PLATFORM_WIN32_TRUE$]) m4trace:configure.ac:119: -1- m4_pattern_allow([^PLATFORM_WIN32_FALSE$]) m4trace:configure.ac:119: -1- _AM_SUBST_NOTMAKE([PLATFORM_WIN32_TRUE]) m4trace:configure.ac:119: -1- _AM_SUBST_NOTMAKE([PLATFORM_WIN32_FALSE]) m4trace:configure.ac:130: -1- AM_CONDITIONAL([NATIVE_WIN32], [test x"$native_win32" = "xyes"]) m4trace:configure.ac:130: -1- m4_pattern_allow([^NATIVE_WIN32_TRUE$]) m4trace:configure.ac:130: -1- m4_pattern_allow([^NATIVE_WIN32_FALSE$]) m4trace:configure.ac:130: -1- _AM_SUBST_NOTMAKE([NATIVE_WIN32_TRUE]) m4trace:configure.ac:130: -1- _AM_SUBST_NOTMAKE([NATIVE_WIN32_FALSE]) m4trace:configure.ac:133: -1- m4_pattern_allow([^WINDRES$]) m4trace:configure.ac:148: -1- AM_CONDITIONAL([FLATPAK], [test "x$flatpak" != "xno"]) m4trace:configure.ac:148: -1- m4_pattern_allow([^FLATPAK_TRUE$]) m4trace:configure.ac:148: -1- m4_pattern_allow([^FLATPAK_FALSE$]) m4trace:configure.ac:148: -1- _AM_SUBST_NOTMAKE([FLATPAK_TRUE]) m4trace:configure.ac:148: -1- _AM_SUBST_NOTMAKE([FLATPAK_FALSE]) m4trace:configure.ac:158: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:158: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:158: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:158: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:158: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:158: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:158: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:158: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) m4trace:configure.ac:158: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS m4trace:configure.ac:158: -1- AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) Atomes-GNU-1.1.14/autom4te.cache/traces.1000066400000000000000000001114741457665371200176540ustar00rootroot00000000000000m4trace:aclocal.m4:1043: -1- AC_SUBST([am__quote]) m4trace:aclocal.m4:1043: -1- AC_SUBST_TRACE([am__quote]) m4trace:aclocal.m4:1043: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.ac:13: -1- AC_INIT([atomes], [atomes_version], [atomes@ipcms.unistra.fr], [atomes_tar], [atomes_url]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:13: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:13: -1- AC_SUBST([SHELL]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:13: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.ac:13: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:13: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:13: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:13: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:13: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([runstatedir], ['${localstatedir}/run']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([runstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:13: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:13: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:13: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:13: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:13: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:13: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:13: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:13: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:13: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ @%:@undef PACKAGE_NAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ @%:@undef PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ @%:@undef PACKAGE_VERSION]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ @%:@undef PACKAGE_STRING]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ @%:@undef PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ @%:@undef PACKAGE_URL]) m4trace:configure.ac:13: -1- AC_SUBST([DEFS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_C]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_N]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_T]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:13: -1- AC_SUBST([LIBS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:13: -1- AC_SUBST([build_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([host_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([target_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:15: -1- AM_INIT_AUTOMAKE m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:15: -1- AM_AUTOMAKE_VERSION([1.16.5]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:15: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__isrc]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:15: -1- AC_SUBST([CYGPATH_W]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CYGPATH_W]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ @%:@undef PACKAGE]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AH_OUTPUT([VERSION], [/* Version number of package */ @%:@undef VERSION]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([missing]) m4trace:configure.ac:15: -1- AC_SUBST([ACLOCAL]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ACLOCAL]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOCONF]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOCONF]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOMAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOMAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOHEADER]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOHEADER]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:15: -1- AC_SUBST([MAKEINFO]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MAKEINFO]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:15: -1- AC_SUBST([install_sh]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([install_sh]) m4trace:configure.ac:15: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:15: -1- AC_SUBST([STRIP]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([STRIP]) m4trace:configure.ac:15: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([MKDIR_P]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MKDIR_P]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:15: -1- AC_SUBST([mkdir_p], ['$(MKDIR_P)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([mkdir_p]) m4trace:configure.ac:15: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:15: -1- AC_SUBST([AWK]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:15: -1- AC_SUBST([SET_MAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([SET_MAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([am__leading_dot]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__leading_dot]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:15: -1- AC_SUBST([AMTAR], ['$${TAR-tar}']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AMTAR]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:15: -1- AC_SUBST([am__tar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__tar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.ac:15: -1- AC_SUBST([am__untar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__untar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.ac:15: -1- AC_SUBST([CTAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CTAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CTAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([ETAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ETAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ETAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([CSCOPE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CSCOPE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CSCOPE$]) m4trace:configure.ac:15: -1- AM_SILENT_RULES m4trace:configure.ac:15: -1- AC_SUBST([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$]) m4trace:configure.ac:15: -1- AC_SUBST([AM_BACKSLASH]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_BACKSLASH]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_BACKSLASH$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH]) m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:17: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:17: -1- AH_OUTPUT([ATOMES_MAJOR_VERSION], [/* Atomes major version */ @%:@undef ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- AC_SUBST([ATOMES_MAJOR_VERSION], [1]) m4trace:configure.ac:18: -1- AC_SUBST_TRACE([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:19: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MINOR_VERSION]) m4trace:configure.ac:19: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:19: -1- AH_OUTPUT([ATOMES_MINOR_VERSION], [/* Atomes minor version */ @%:@undef ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- AC_SUBST([ATOMES_MINOR_VERSION], [1]) m4trace:configure.ac:20: -1- AC_SUBST_TRACE([ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:21: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_PATCH_VERSION]) m4trace:configure.ac:21: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:21: -1- AH_OUTPUT([ATOMES_PATCH_VERSION], [/* Atomes patch version */ @%:@undef ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- AC_SUBST([ATOMES_PATCH_VERSION], [14]) m4trace:configure.ac:22: -1- AC_SUBST_TRACE([ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:29: -1- AC_SUBST([GETTEXT_PACKAGE]) m4trace:configure.ac:29: -1- AC_SUBST_TRACE([GETTEXT_PACKAGE]) m4trace:configure.ac:29: -1- m4_pattern_allow([^GETTEXT_PACKAGE$]) m4trace:configure.ac:30: -1- AC_DEFINE_TRACE_LITERAL([GETTEXT_PACKAGE]) m4trace:configure.ac:30: -1- m4_pattern_allow([^GETTEXT_PACKAGE$]) m4trace:configure.ac:30: -1- AH_OUTPUT([GETTEXT_PACKAGE], [/* GETTEXT package name */ @%:@undef GETTEXT_PACKAGE]) m4trace:configure.ac:36: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:36: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:36: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:37: -1- AC_SUBST([UP_MIME]) m4trace:configure.ac:37: -1- AC_SUBST_TRACE([UP_MIME]) m4trace:configure.ac:37: -1- m4_pattern_allow([^UP_MIME$]) m4trace:configure.ac:38: -1- AC_SUBST([UP_DESKTOP]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([UP_DESKTOP]) m4trace:configure.ac:38: -1- m4_pattern_allow([^UP_DESKTOP$]) m4trace:configure.ac:39: -1- AC_SUBST([UP_APPSTREAM]) m4trace:configure.ac:39: -1- AC_SUBST_TRACE([UP_APPSTREAM]) m4trace:configure.ac:39: -1- m4_pattern_allow([^UP_APPSTREAM$]) m4trace:configure.ac:46: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:configure.ac:46: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:46: -1- AC_SUBST([PKG_CONFIG_PATH]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([PKG_CONFIG_PATH]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:configure.ac:46: -1- AC_SUBST([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:configure.ac:46: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:46: -1- AC_SUBST([GTK_CFLAGS]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([GTK_CFLAGS]) m4trace:configure.ac:46: -1- m4_pattern_allow([^GTK_CFLAGS$]) m4trace:configure.ac:46: -1- AC_SUBST([GTK_LIBS]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([GTK_LIBS]) m4trace:configure.ac:46: -1- m4_pattern_allow([^GTK_LIBS$]) m4trace:configure.ac:48: -1- AC_SUBST([LIBXML2_CFLAGS]) m4trace:configure.ac:48: -1- AC_SUBST_TRACE([LIBXML2_CFLAGS]) m4trace:configure.ac:48: -1- m4_pattern_allow([^LIBXML2_CFLAGS$]) m4trace:configure.ac:48: -1- AC_SUBST([LIBXML2_LIBS]) m4trace:configure.ac:48: -1- AC_SUBST_TRACE([LIBXML2_LIBS]) m4trace:configure.ac:48: -1- m4_pattern_allow([^LIBXML2_LIBS$]) m4trace:configure.ac:49: -1- AC_SUBST([PANGOFT2_CFLAGS]) m4trace:configure.ac:49: -1- AC_SUBST_TRACE([PANGOFT2_CFLAGS]) m4trace:configure.ac:49: -1- m4_pattern_allow([^PANGOFT2_CFLAGS$]) m4trace:configure.ac:49: -1- AC_SUBST([PANGOFT2_LIBS]) m4trace:configure.ac:49: -1- AC_SUBST_TRACE([PANGOFT2_LIBS]) m4trace:configure.ac:49: -1- m4_pattern_allow([^PANGOFT2_LIBS$]) m4trace:configure.ac:50: -1- AC_SUBST([FFMPEG_CFLAGS]) m4trace:configure.ac:50: -1- AC_SUBST_TRACE([FFMPEG_CFLAGS]) m4trace:configure.ac:50: -1- m4_pattern_allow([^FFMPEG_CFLAGS$]) m4trace:configure.ac:50: -1- AC_SUBST([FFMPEG_LIBS]) m4trace:configure.ac:50: -1- AC_SUBST_TRACE([FFMPEG_LIBS]) m4trace:configure.ac:50: -1- m4_pattern_allow([^FFMPEG_LIBS$]) m4trace:configure.ac:51: -1- AC_SUBST([GLU_CFLAGS]) m4trace:configure.ac:51: -1- AC_SUBST_TRACE([GLU_CFLAGS]) m4trace:configure.ac:51: -1- m4_pattern_allow([^GLU_CFLAGS$]) m4trace:configure.ac:51: -1- AC_SUBST([GLU_LIBS]) m4trace:configure.ac:51: -1- AC_SUBST_TRACE([GLU_LIBS]) m4trace:configure.ac:51: -1- m4_pattern_allow([^GLU_LIBS$]) m4trace:configure.ac:52: -1- AC_SUBST([EPOXY_CFLAGS]) m4trace:configure.ac:52: -1- AC_SUBST_TRACE([EPOXY_CFLAGS]) m4trace:configure.ac:52: -1- m4_pattern_allow([^EPOXY_CFLAGS$]) m4trace:configure.ac:52: -1- AC_SUBST([EPOXY_LIBS]) m4trace:configure.ac:52: -1- AC_SUBST_TRACE([EPOXY_LIBS]) m4trace:configure.ac:52: -1- m4_pattern_allow([^EPOXY_LIBS$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:84: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:84: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:84: -1- AC_SUBST([LIBS]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:84: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:84: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:configure.ac:84: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.ac:84: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:configure.ac:84: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.ac:84: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:84: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([DEPDIR]) m4trace:configure.ac:84: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.ac:84: -1- AC_SUBST([am__include]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([am__include]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__include$]) m4trace:configure.ac:84: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.ac:84: -1- AC_SUBST([AMDEP_TRUE]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([AMDEP_TRUE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.ac:84: -1- AC_SUBST([AMDEP_FALSE]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([AMDEP_FALSE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.ac:84: -1- AC_SUBST([AMDEPBACKSLASH]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) m4trace:configure.ac:84: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.ac:84: -1- AC_SUBST([am__nodep]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([am__nodep]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__nodep$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([am__nodep]) m4trace:configure.ac:84: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:84: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:84: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:84: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:90: -1- AC_SUBST([FC]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:90: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:90: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:90: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:90: -1- AC_SUBST([LIBS]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:90: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:90: -1- AC_SUBST([FC]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:90: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:90: -1- AC_CANONICAL_HOST m4trace:configure.ac:90: -1- AC_CANONICAL_BUILD m4trace:configure.ac:90: -1- AC_REQUIRE_AUX_FILE([config.sub]) m4trace:configure.ac:90: -1- AC_REQUIRE_AUX_FILE([config.guess]) m4trace:configure.ac:90: -1- AC_SUBST([build], [$ac_cv_build]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([build]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build$]) m4trace:configure.ac:90: -1- AC_SUBST([build_cpu], [$[1]]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([build_cpu]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build_cpu$]) m4trace:configure.ac:90: -1- AC_SUBST([build_vendor], [$[2]]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([build_vendor]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build_vendor$]) m4trace:configure.ac:90: -1- AC_SUBST([build_os]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([build_os]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build_os$]) m4trace:configure.ac:90: -1- AC_SUBST([host], [$ac_cv_host]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([host]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host$]) m4trace:configure.ac:90: -1- AC_SUBST([host_cpu], [$[1]]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([host_cpu]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host_cpu$]) m4trace:configure.ac:90: -1- AC_SUBST([host_vendor], [$[2]]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([host_vendor]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host_vendor$]) m4trace:configure.ac:90: -1- AC_SUBST([host_os]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([host_os]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host_os$]) m4trace:configure.ac:90: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_DUMMY_MAIN$]) m4trace:configure.ac:90: -1- AH_OUTPUT([FC_DUMMY_MAIN], [/* Define to dummy `main\' function (if any) required to link to the Fortran libraries. */ @%:@undef FC_DUMMY_MAIN]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) m4trace:configure.ac:90: -1- AH_OUTPUT([FC_DUMMY_MAIN_EQ_F77], [/* Define if F77 and FC dummy `main\' functions are identical. */ @%:@undef FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:90: -1- AH_OUTPUT([FC_FUNC], [/* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ @%:@undef FC_FUNC]) m4trace:configure.ac:90: -1- AH_OUTPUT([FC_FUNC_], [/* As FC_FUNC, but for C identifiers containing underscores. */ @%:@undef FC_FUNC_]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:94: -1- AC_SUBST([FC]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:94: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:94: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:94: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:94: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:94: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:94: -1- AC_SUBST([LIBS]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:94: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:94: -1- AC_SUBST([FC]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:94: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:94: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:94: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:97: -1- AC_FC_SRCEXT([f90], [FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS"], [as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5]) m4trace:configure.ac:97: -1- AC_SUBST([FCFLAGS_f90]) m4trace:configure.ac:97: -1- AC_SUBST_TRACE([FCFLAGS_f90]) m4trace:configure.ac:97: -1- m4_pattern_allow([^FCFLAGS_f90$]) m4trace:configure.ac:98: -1- AC_FC_SRCEXT([F90], [FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS"], [as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5]) m4trace:configure.ac:98: -1- AC_SUBST([FCFLAGS_F90]) m4trace:configure.ac:98: -1- AC_SUBST_TRACE([FCFLAGS_F90]) m4trace:configure.ac:98: -1- m4_pattern_allow([^FCFLAGS_F90$]) m4trace:configure.ac:102: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:102: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:102: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:103: -1- AC_FC_FREEFORM m4trace:configure.ac:119: -1- AM_CONDITIONAL([PLATFORM_WIN32], [test x"$platform_win32" = "xyes"]) m4trace:configure.ac:119: -1- AC_SUBST([PLATFORM_WIN32_TRUE]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([PLATFORM_WIN32_TRUE]) m4trace:configure.ac:119: -1- m4_pattern_allow([^PLATFORM_WIN32_TRUE$]) m4trace:configure.ac:119: -1- AC_SUBST([PLATFORM_WIN32_FALSE]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([PLATFORM_WIN32_FALSE]) m4trace:configure.ac:119: -1- m4_pattern_allow([^PLATFORM_WIN32_FALSE$]) m4trace:configure.ac:119: -1- _AM_SUBST_NOTMAKE([PLATFORM_WIN32_TRUE]) m4trace:configure.ac:119: -1- _AM_SUBST_NOTMAKE([PLATFORM_WIN32_FALSE]) m4trace:configure.ac:130: -1- AM_CONDITIONAL([NATIVE_WIN32], [test x"$native_win32" = "xyes"]) m4trace:configure.ac:130: -1- AC_SUBST([NATIVE_WIN32_TRUE]) m4trace:configure.ac:130: -1- AC_SUBST_TRACE([NATIVE_WIN32_TRUE]) m4trace:configure.ac:130: -1- m4_pattern_allow([^NATIVE_WIN32_TRUE$]) m4trace:configure.ac:130: -1- AC_SUBST([NATIVE_WIN32_FALSE]) m4trace:configure.ac:130: -1- AC_SUBST_TRACE([NATIVE_WIN32_FALSE]) m4trace:configure.ac:130: -1- m4_pattern_allow([^NATIVE_WIN32_FALSE$]) m4trace:configure.ac:130: -1- _AM_SUBST_NOTMAKE([NATIVE_WIN32_TRUE]) m4trace:configure.ac:130: -1- _AM_SUBST_NOTMAKE([NATIVE_WIN32_FALSE]) m4trace:configure.ac:133: -1- AC_SUBST([WINDRES]) m4trace:configure.ac:133: -1- AC_SUBST_TRACE([WINDRES]) m4trace:configure.ac:133: -1- m4_pattern_allow([^WINDRES$]) m4trace:configure.ac:148: -1- AM_CONDITIONAL([FLATPAK], [test "x$flatpak" != "xno"]) m4trace:configure.ac:148: -1- AC_SUBST([FLATPAK_TRUE]) m4trace:configure.ac:148: -1- AC_SUBST_TRACE([FLATPAK_TRUE]) m4trace:configure.ac:148: -1- m4_pattern_allow([^FLATPAK_TRUE$]) m4trace:configure.ac:148: -1- AC_SUBST([FLATPAK_FALSE]) m4trace:configure.ac:148: -1- AC_SUBST_TRACE([FLATPAK_FALSE]) m4trace:configure.ac:148: -1- m4_pattern_allow([^FLATPAK_FALSE$]) m4trace:configure.ac:148: -1- _AM_SUBST_NOTMAKE([FLATPAK_TRUE]) m4trace:configure.ac:148: -1- _AM_SUBST_NOTMAKE([FLATPAK_FALSE]) m4trace:configure.ac:150: -1- AC_CONFIG_FILES([ Makefile src/Makefile data/Makefile ]) m4trace:configure.ac:156: -1- AC_CONFIG_HEADERS([config.h]) m4trace:configure.ac:158: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.ac:158: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:158: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.ac:158: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:158: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:158: -1- AC_SUBST([am__EXEEXT_TRUE]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) m4trace:configure.ac:158: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:158: -1- AC_SUBST([am__EXEEXT_FALSE]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) m4trace:configure.ac:158: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:158: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:158: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([top_build_prefix]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([INSTALL]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([MKDIR_P]) Atomes-GNU-1.1.14/autom4te.cache/traces.2000066400000000000000000001114741457665371200176550ustar00rootroot00000000000000m4trace:aclocal.m4:1043: -1- AC_SUBST([am__quote]) m4trace:aclocal.m4:1043: -1- AC_SUBST_TRACE([am__quote]) m4trace:aclocal.m4:1043: -1- m4_pattern_allow([^am__quote$]) m4trace:configure.ac:13: -1- AC_INIT([atomes], [atomes_version], [atomes@ipcms.unistra.fr], [atomes_tar], [atomes_url]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?A[CHUM]_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([_AC_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) m4trace:configure.ac:13: -1- m4_pattern_allow([^AS_FLAGS$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?m4_]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^dnl$]) m4trace:configure.ac:13: -1- m4_pattern_forbid([^_?AS_]) m4trace:configure.ac:13: -1- AC_SUBST([SHELL]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([SHELL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^SHELL$]) m4trace:configure.ac:13: -1- AC_SUBST([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PATH_SEPARATOR$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AC_SUBST([exec_prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([exec_prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^exec_prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([prefix], [NONE]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([prefix]) m4trace:configure.ac:13: -1- m4_pattern_allow([^prefix$]) m4trace:configure.ac:13: -1- AC_SUBST([program_transform_name], [s,x,x,]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([program_transform_name]) m4trace:configure.ac:13: -1- m4_pattern_allow([^program_transform_name$]) m4trace:configure.ac:13: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([bindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^bindir$]) m4trace:configure.ac:13: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sbindir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sbindir$]) m4trace:configure.ac:13: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libexecdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libexecdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datarootdir], ['${prefix}/share']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datarootdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datarootdir$]) m4trace:configure.ac:13: -1- AC_SUBST([datadir], ['${datarootdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([datadir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^datadir$]) m4trace:configure.ac:13: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sysconfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sysconfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([sharedstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^sharedstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([localstatedir], ['${prefix}/var']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([runstatedir], ['${localstatedir}/run']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([runstatedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^runstatedir$]) m4trace:configure.ac:13: -1- AC_SUBST([includedir], ['${prefix}/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([includedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^includedir$]) m4trace:configure.ac:13: -1- AC_SUBST([oldincludedir], ['/usr/include']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([oldincludedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^oldincludedir$]) m4trace:configure.ac:13: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], ['${datarootdir}/doc/${PACKAGE_TARNAME}'], ['${datarootdir}/doc/${PACKAGE}'])]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([docdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^docdir$]) m4trace:configure.ac:13: -1- AC_SUBST([infodir], ['${datarootdir}/info']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([infodir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^infodir$]) m4trace:configure.ac:13: -1- AC_SUBST([htmldir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([htmldir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^htmldir$]) m4trace:configure.ac:13: -1- AC_SUBST([dvidir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([dvidir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^dvidir$]) m4trace:configure.ac:13: -1- AC_SUBST([pdfdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([pdfdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^pdfdir$]) m4trace:configure.ac:13: -1- AC_SUBST([psdir], ['${docdir}']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([psdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^psdir$]) m4trace:configure.ac:13: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([libdir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^libdir$]) m4trace:configure.ac:13: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([localedir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^localedir$]) m4trace:configure.ac:13: -1- AC_SUBST([mandir], ['${datarootdir}/man']) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([mandir]) m4trace:configure.ac:13: -1- m4_pattern_allow([^mandir$]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_NAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ @%:@undef PACKAGE_NAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ @%:@undef PACKAGE_TARNAME]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_VERSION$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ @%:@undef PACKAGE_VERSION]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_STRING$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ @%:@undef PACKAGE_STRING]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ @%:@undef PACKAGE_BUGREPORT]) m4trace:configure.ac:13: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) m4trace:configure.ac:13: -1- m4_pattern_allow([^PACKAGE_URL$]) m4trace:configure.ac:13: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ @%:@undef PACKAGE_URL]) m4trace:configure.ac:13: -1- AC_SUBST([DEFS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([DEFS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^DEFS$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_C]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_C]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_C$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_N]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_N]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_N$]) m4trace:configure.ac:13: -1- AC_SUBST([ECHO_T]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([ECHO_T]) m4trace:configure.ac:13: -1- m4_pattern_allow([^ECHO_T$]) m4trace:configure.ac:13: -1- AC_SUBST([LIBS]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:13: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:13: -1- AC_SUBST([build_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([build_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^build_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([host_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([host_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^host_alias$]) m4trace:configure.ac:13: -1- AC_SUBST([target_alias]) m4trace:configure.ac:13: -1- AC_SUBST_TRACE([target_alias]) m4trace:configure.ac:13: -1- m4_pattern_allow([^target_alias$]) m4trace:configure.ac:15: -1- AM_INIT_AUTOMAKE m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) m4trace:configure.ac:15: -1- AM_AUTOMAKE_VERSION([1.16.5]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_DATA]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_DATA]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_DATA$]) m4trace:configure.ac:15: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__isrc]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__isrc$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([am__isrc]) m4trace:configure.ac:15: -1- AC_SUBST([CYGPATH_W]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CYGPATH_W]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CYGPATH_W$]) m4trace:configure.ac:15: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^PACKAGE$]) m4trace:configure.ac:15: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ @%:@undef PACKAGE]) m4trace:configure.ac:15: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) m4trace:configure.ac:15: -1- m4_pattern_allow([^VERSION$]) m4trace:configure.ac:15: -1- AH_OUTPUT([VERSION], [/* Version number of package */ @%:@undef VERSION]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([missing]) m4trace:configure.ac:15: -1- AC_SUBST([ACLOCAL]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ACLOCAL]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ACLOCAL$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOCONF]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOCONF]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOCONF$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOMAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOMAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOMAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([AUTOHEADER]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AUTOHEADER]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AUTOHEADER$]) m4trace:configure.ac:15: -1- AC_SUBST([MAKEINFO]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MAKEINFO]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MAKEINFO$]) m4trace:configure.ac:15: -1- AC_SUBST([install_sh]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([install_sh]) m4trace:configure.ac:15: -1- m4_pattern_allow([^install_sh$]) m4trace:configure.ac:15: -1- AC_SUBST([STRIP]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([STRIP]) m4trace:configure.ac:15: -1- m4_pattern_allow([^STRIP$]) m4trace:configure.ac:15: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) m4trace:configure.ac:15: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) m4trace:configure.ac:15: -1- AC_REQUIRE_AUX_FILE([install-sh]) m4trace:configure.ac:15: -1- AC_SUBST([MKDIR_P]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([MKDIR_P]) m4trace:configure.ac:15: -1- m4_pattern_allow([^MKDIR_P$]) m4trace:configure.ac:15: -1- AC_SUBST([mkdir_p], ['$(MKDIR_P)']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([mkdir_p]) m4trace:configure.ac:15: -1- m4_pattern_allow([^mkdir_p$]) m4trace:configure.ac:15: -1- AC_SUBST([AWK]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AWK]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AWK$]) m4trace:configure.ac:15: -1- AC_SUBST([SET_MAKE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([SET_MAKE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^SET_MAKE$]) m4trace:configure.ac:15: -1- AC_SUBST([am__leading_dot]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__leading_dot]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__leading_dot$]) m4trace:configure.ac:15: -1- AC_SUBST([AMTAR], ['$${TAR-tar}']) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AMTAR]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AMTAR$]) m4trace:configure.ac:15: -1- AC_SUBST([am__tar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__tar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__tar$]) m4trace:configure.ac:15: -1- AC_SUBST([am__untar]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([am__untar]) m4trace:configure.ac:15: -1- m4_pattern_allow([^am__untar$]) m4trace:configure.ac:15: -1- AC_SUBST([CTAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CTAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CTAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([ETAGS]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([ETAGS]) m4trace:configure.ac:15: -1- m4_pattern_allow([^ETAGS$]) m4trace:configure.ac:15: -1- AC_SUBST([CSCOPE]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([CSCOPE]) m4trace:configure.ac:15: -1- m4_pattern_allow([^CSCOPE$]) m4trace:configure.ac:15: -1- AM_SILENT_RULES m4trace:configure.ac:15: -1- AC_SUBST([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_V$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_DEFAULT_V]) m4trace:configure.ac:15: -1- AC_SUBST([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_DEFAULT_VERBOSITY]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_DEFAULT_VERBOSITY$]) m4trace:configure.ac:15: -1- AC_SUBST([AM_BACKSLASH]) m4trace:configure.ac:15: -1- AC_SUBST_TRACE([AM_BACKSLASH]) m4trace:configure.ac:15: -1- m4_pattern_allow([^AM_BACKSLASH$]) m4trace:configure.ac:15: -1- _AM_SUBST_NOTMAKE([AM_BACKSLASH]) m4trace:configure.ac:17: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:17: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:17: -1- AH_OUTPUT([ATOMES_MAJOR_VERSION], [/* Atomes major version */ @%:@undef ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- AC_SUBST([ATOMES_MAJOR_VERSION], [1]) m4trace:configure.ac:18: -1- AC_SUBST_TRACE([ATOMES_MAJOR_VERSION]) m4trace:configure.ac:18: -1- m4_pattern_allow([^ATOMES_MAJOR_VERSION$]) m4trace:configure.ac:19: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_MINOR_VERSION]) m4trace:configure.ac:19: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:19: -1- AH_OUTPUT([ATOMES_MINOR_VERSION], [/* Atomes minor version */ @%:@undef ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- AC_SUBST([ATOMES_MINOR_VERSION], [1]) m4trace:configure.ac:20: -1- AC_SUBST_TRACE([ATOMES_MINOR_VERSION]) m4trace:configure.ac:20: -1- m4_pattern_allow([^ATOMES_MINOR_VERSION$]) m4trace:configure.ac:21: -1- AC_DEFINE_TRACE_LITERAL([ATOMES_PATCH_VERSION]) m4trace:configure.ac:21: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:21: -1- AH_OUTPUT([ATOMES_PATCH_VERSION], [/* Atomes patch version */ @%:@undef ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- AC_SUBST([ATOMES_PATCH_VERSION], [14]) m4trace:configure.ac:22: -1- AC_SUBST_TRACE([ATOMES_PATCH_VERSION]) m4trace:configure.ac:22: -1- m4_pattern_allow([^ATOMES_PATCH_VERSION$]) m4trace:configure.ac:29: -1- AC_SUBST([GETTEXT_PACKAGE]) m4trace:configure.ac:29: -1- AC_SUBST_TRACE([GETTEXT_PACKAGE]) m4trace:configure.ac:29: -1- m4_pattern_allow([^GETTEXT_PACKAGE$]) m4trace:configure.ac:30: -1- AC_DEFINE_TRACE_LITERAL([GETTEXT_PACKAGE]) m4trace:configure.ac:30: -1- m4_pattern_allow([^GETTEXT_PACKAGE$]) m4trace:configure.ac:30: -1- AH_OUTPUT([GETTEXT_PACKAGE], [/* GETTEXT package name */ @%:@undef GETTEXT_PACKAGE]) m4trace:configure.ac:36: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:36: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:36: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:37: -1- AC_SUBST([UP_MIME]) m4trace:configure.ac:37: -1- AC_SUBST_TRACE([UP_MIME]) m4trace:configure.ac:37: -1- m4_pattern_allow([^UP_MIME$]) m4trace:configure.ac:38: -1- AC_SUBST([UP_DESKTOP]) m4trace:configure.ac:38: -1- AC_SUBST_TRACE([UP_DESKTOP]) m4trace:configure.ac:38: -1- m4_pattern_allow([^UP_DESKTOP$]) m4trace:configure.ac:39: -1- AC_SUBST([UP_APPSTREAM]) m4trace:configure.ac:39: -1- AC_SUBST_TRACE([UP_APPSTREAM]) m4trace:configure.ac:39: -1- m4_pattern_allow([^UP_APPSTREAM$]) m4trace:configure.ac:46: -1- m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) m4trace:configure.ac:46: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:46: -1- AC_SUBST([PKG_CONFIG_PATH]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([PKG_CONFIG_PATH]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG_PATH$]) m4trace:configure.ac:46: -1- AC_SUBST([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([PKG_CONFIG_LIBDIR]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG_LIBDIR$]) m4trace:configure.ac:46: -1- AC_SUBST([PKG_CONFIG]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([PKG_CONFIG]) m4trace:configure.ac:46: -1- m4_pattern_allow([^PKG_CONFIG$]) m4trace:configure.ac:46: -1- AC_SUBST([GTK_CFLAGS]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([GTK_CFLAGS]) m4trace:configure.ac:46: -1- m4_pattern_allow([^GTK_CFLAGS$]) m4trace:configure.ac:46: -1- AC_SUBST([GTK_LIBS]) m4trace:configure.ac:46: -1- AC_SUBST_TRACE([GTK_LIBS]) m4trace:configure.ac:46: -1- m4_pattern_allow([^GTK_LIBS$]) m4trace:configure.ac:48: -1- AC_SUBST([LIBXML2_CFLAGS]) m4trace:configure.ac:48: -1- AC_SUBST_TRACE([LIBXML2_CFLAGS]) m4trace:configure.ac:48: -1- m4_pattern_allow([^LIBXML2_CFLAGS$]) m4trace:configure.ac:48: -1- AC_SUBST([LIBXML2_LIBS]) m4trace:configure.ac:48: -1- AC_SUBST_TRACE([LIBXML2_LIBS]) m4trace:configure.ac:48: -1- m4_pattern_allow([^LIBXML2_LIBS$]) m4trace:configure.ac:49: -1- AC_SUBST([PANGOFT2_CFLAGS]) m4trace:configure.ac:49: -1- AC_SUBST_TRACE([PANGOFT2_CFLAGS]) m4trace:configure.ac:49: -1- m4_pattern_allow([^PANGOFT2_CFLAGS$]) m4trace:configure.ac:49: -1- AC_SUBST([PANGOFT2_LIBS]) m4trace:configure.ac:49: -1- AC_SUBST_TRACE([PANGOFT2_LIBS]) m4trace:configure.ac:49: -1- m4_pattern_allow([^PANGOFT2_LIBS$]) m4trace:configure.ac:50: -1- AC_SUBST([FFMPEG_CFLAGS]) m4trace:configure.ac:50: -1- AC_SUBST_TRACE([FFMPEG_CFLAGS]) m4trace:configure.ac:50: -1- m4_pattern_allow([^FFMPEG_CFLAGS$]) m4trace:configure.ac:50: -1- AC_SUBST([FFMPEG_LIBS]) m4trace:configure.ac:50: -1- AC_SUBST_TRACE([FFMPEG_LIBS]) m4trace:configure.ac:50: -1- m4_pattern_allow([^FFMPEG_LIBS$]) m4trace:configure.ac:51: -1- AC_SUBST([GLU_CFLAGS]) m4trace:configure.ac:51: -1- AC_SUBST_TRACE([GLU_CFLAGS]) m4trace:configure.ac:51: -1- m4_pattern_allow([^GLU_CFLAGS$]) m4trace:configure.ac:51: -1- AC_SUBST([GLU_LIBS]) m4trace:configure.ac:51: -1- AC_SUBST_TRACE([GLU_LIBS]) m4trace:configure.ac:51: -1- m4_pattern_allow([^GLU_LIBS$]) m4trace:configure.ac:52: -1- AC_SUBST([EPOXY_CFLAGS]) m4trace:configure.ac:52: -1- AC_SUBST_TRACE([EPOXY_CFLAGS]) m4trace:configure.ac:52: -1- m4_pattern_allow([^EPOXY_CFLAGS$]) m4trace:configure.ac:52: -1- AC_SUBST([EPOXY_LIBS]) m4trace:configure.ac:52: -1- AC_SUBST_TRACE([EPOXY_LIBS]) m4trace:configure.ac:52: -1- m4_pattern_allow([^EPOXY_LIBS$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([CFLAGS]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CFLAGS]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CFLAGS$]) m4trace:configure.ac:84: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:84: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:84: -1- AC_SUBST([LIBS]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:84: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:84: -1- AC_SUBST([CPPFLAGS]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CPPFLAGS]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CPPFLAGS$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([ac_ct_CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([ac_ct_CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^ac_ct_CC$]) m4trace:configure.ac:84: -1- AC_SUBST([CC]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CC]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CC$]) m4trace:configure.ac:84: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([EXEEXT]) m4trace:configure.ac:84: -1- m4_pattern_allow([^EXEEXT$]) m4trace:configure.ac:84: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([OBJEXT]) m4trace:configure.ac:84: -1- m4_pattern_allow([^OBJEXT$]) m4trace:configure.ac:84: -1- AC_REQUIRE_AUX_FILE([compile]) m4trace:configure.ac:84: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([DEPDIR]) m4trace:configure.ac:84: -1- m4_pattern_allow([^DEPDIR$]) m4trace:configure.ac:84: -1- AC_SUBST([am__include]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([am__include]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__include$]) m4trace:configure.ac:84: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) m4trace:configure.ac:84: -1- AC_SUBST([AMDEP_TRUE]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([AMDEP_TRUE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^AMDEP_TRUE$]) m4trace:configure.ac:84: -1- AC_SUBST([AMDEP_FALSE]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([AMDEP_FALSE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^AMDEP_FALSE$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) m4trace:configure.ac:84: -1- AC_SUBST([AMDEPBACKSLASH]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) m4trace:configure.ac:84: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) m4trace:configure.ac:84: -1- AC_SUBST([am__nodep]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([am__nodep]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__nodep$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([am__nodep]) m4trace:configure.ac:84: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([CCDEPMODE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^CCDEPMODE$]) m4trace:configure.ac:84: -1- AM_CONDITIONAL([am__fastdepCC], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) m4trace:configure.ac:84: -1- AC_SUBST([am__fastdepCC_TRUE]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) m4trace:configure.ac:84: -1- AC_SUBST([am__fastdepCC_FALSE]) m4trace:configure.ac:84: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) m4trace:configure.ac:84: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) m4trace:configure.ac:84: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) m4trace:configure.ac:90: -1- AC_SUBST([FC]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:90: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:90: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:90: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:90: -1- AC_SUBST([LIBS]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:90: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:90: -1- AC_SUBST([FC]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:90: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:90: -1- AC_CANONICAL_HOST m4trace:configure.ac:90: -1- AC_CANONICAL_BUILD m4trace:configure.ac:90: -1- AC_REQUIRE_AUX_FILE([config.sub]) m4trace:configure.ac:90: -1- AC_REQUIRE_AUX_FILE([config.guess]) m4trace:configure.ac:90: -1- AC_SUBST([build], [$ac_cv_build]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([build]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build$]) m4trace:configure.ac:90: -1- AC_SUBST([build_cpu], [$[1]]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([build_cpu]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build_cpu$]) m4trace:configure.ac:90: -1- AC_SUBST([build_vendor], [$[2]]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([build_vendor]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build_vendor$]) m4trace:configure.ac:90: -1- AC_SUBST([build_os]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([build_os]) m4trace:configure.ac:90: -1- m4_pattern_allow([^build_os$]) m4trace:configure.ac:90: -1- AC_SUBST([host], [$ac_cv_host]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([host]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host$]) m4trace:configure.ac:90: -1- AC_SUBST([host_cpu], [$[1]]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([host_cpu]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host_cpu$]) m4trace:configure.ac:90: -1- AC_SUBST([host_vendor], [$[2]]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([host_vendor]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host_vendor$]) m4trace:configure.ac:90: -1- AC_SUBST([host_os]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([host_os]) m4trace:configure.ac:90: -1- m4_pattern_allow([^host_os$]) m4trace:configure.ac:90: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:90: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_DUMMY_MAIN$]) m4trace:configure.ac:90: -1- AH_OUTPUT([FC_DUMMY_MAIN], [/* Define to dummy `main\' function (if any) required to link to the Fortran libraries. */ @%:@undef FC_DUMMY_MAIN]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_DUMMY_MAIN_EQ_F77$]) m4trace:configure.ac:90: -1- AH_OUTPUT([FC_DUMMY_MAIN_EQ_F77], [/* Define if F77 and FC dummy `main\' functions are identical. */ @%:@undef FC_DUMMY_MAIN_EQ_F77]) m4trace:configure.ac:90: -1- AH_OUTPUT([FC_FUNC], [/* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ @%:@undef FC_FUNC]) m4trace:configure.ac:90: -1- AH_OUTPUT([FC_FUNC_], [/* As FC_FUNC, but for C identifiers containing underscores. */ @%:@undef FC_FUNC_]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC$]) m4trace:configure.ac:90: -1- AC_DEFINE_TRACE_LITERAL([FC_FUNC_]) m4trace:configure.ac:90: -1- m4_pattern_allow([^FC_FUNC_$]) m4trace:configure.ac:94: -1- AC_SUBST([FC]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:94: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:94: -1- AC_SUBST([FCFLAGS]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([FCFLAGS]) m4trace:configure.ac:94: -1- m4_pattern_allow([^FCFLAGS$]) m4trace:configure.ac:94: -1- AC_SUBST([LDFLAGS]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([LDFLAGS]) m4trace:configure.ac:94: -1- m4_pattern_allow([^LDFLAGS$]) m4trace:configure.ac:94: -1- AC_SUBST([LIBS]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([LIBS]) m4trace:configure.ac:94: -1- m4_pattern_allow([^LIBS$]) m4trace:configure.ac:94: -1- AC_SUBST([FC]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([FC]) m4trace:configure.ac:94: -1- m4_pattern_allow([^FC$]) m4trace:configure.ac:94: -1- AC_SUBST([ac_ct_FC]) m4trace:configure.ac:94: -1- AC_SUBST_TRACE([ac_ct_FC]) m4trace:configure.ac:94: -1- m4_pattern_allow([^ac_ct_FC$]) m4trace:configure.ac:97: -1- AC_FC_SRCEXT([f90], [FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS"], [as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5]) m4trace:configure.ac:97: -1- AC_SUBST([FCFLAGS_f90]) m4trace:configure.ac:97: -1- AC_SUBST_TRACE([FCFLAGS_f90]) m4trace:configure.ac:97: -1- m4_pattern_allow([^FCFLAGS_f90$]) m4trace:configure.ac:98: -1- AC_FC_SRCEXT([F90], [FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS"], [as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5]) m4trace:configure.ac:98: -1- AC_SUBST([FCFLAGS_F90]) m4trace:configure.ac:98: -1- AC_SUBST_TRACE([FCFLAGS_F90]) m4trace:configure.ac:98: -1- m4_pattern_allow([^FCFLAGS_F90$]) m4trace:configure.ac:102: -1- AC_SUBST([FCLIBS]) m4trace:configure.ac:102: -1- AC_SUBST_TRACE([FCLIBS]) m4trace:configure.ac:102: -1- m4_pattern_allow([^FCLIBS$]) m4trace:configure.ac:103: -1- AC_FC_FREEFORM m4trace:configure.ac:119: -1- AM_CONDITIONAL([PLATFORM_WIN32], [test x"$platform_win32" = "xyes"]) m4trace:configure.ac:119: -1- AC_SUBST([PLATFORM_WIN32_TRUE]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([PLATFORM_WIN32_TRUE]) m4trace:configure.ac:119: -1- m4_pattern_allow([^PLATFORM_WIN32_TRUE$]) m4trace:configure.ac:119: -1- AC_SUBST([PLATFORM_WIN32_FALSE]) m4trace:configure.ac:119: -1- AC_SUBST_TRACE([PLATFORM_WIN32_FALSE]) m4trace:configure.ac:119: -1- m4_pattern_allow([^PLATFORM_WIN32_FALSE$]) m4trace:configure.ac:119: -1- _AM_SUBST_NOTMAKE([PLATFORM_WIN32_TRUE]) m4trace:configure.ac:119: -1- _AM_SUBST_NOTMAKE([PLATFORM_WIN32_FALSE]) m4trace:configure.ac:130: -1- AM_CONDITIONAL([NATIVE_WIN32], [test x"$native_win32" = "xyes"]) m4trace:configure.ac:130: -1- AC_SUBST([NATIVE_WIN32_TRUE]) m4trace:configure.ac:130: -1- AC_SUBST_TRACE([NATIVE_WIN32_TRUE]) m4trace:configure.ac:130: -1- m4_pattern_allow([^NATIVE_WIN32_TRUE$]) m4trace:configure.ac:130: -1- AC_SUBST([NATIVE_WIN32_FALSE]) m4trace:configure.ac:130: -1- AC_SUBST_TRACE([NATIVE_WIN32_FALSE]) m4trace:configure.ac:130: -1- m4_pattern_allow([^NATIVE_WIN32_FALSE$]) m4trace:configure.ac:130: -1- _AM_SUBST_NOTMAKE([NATIVE_WIN32_TRUE]) m4trace:configure.ac:130: -1- _AM_SUBST_NOTMAKE([NATIVE_WIN32_FALSE]) m4trace:configure.ac:133: -1- AC_SUBST([WINDRES]) m4trace:configure.ac:133: -1- AC_SUBST_TRACE([WINDRES]) m4trace:configure.ac:133: -1- m4_pattern_allow([^WINDRES$]) m4trace:configure.ac:148: -1- AM_CONDITIONAL([FLATPAK], [test "x$flatpak" != "xno"]) m4trace:configure.ac:148: -1- AC_SUBST([FLATPAK_TRUE]) m4trace:configure.ac:148: -1- AC_SUBST_TRACE([FLATPAK_TRUE]) m4trace:configure.ac:148: -1- m4_pattern_allow([^FLATPAK_TRUE$]) m4trace:configure.ac:148: -1- AC_SUBST([FLATPAK_FALSE]) m4trace:configure.ac:148: -1- AC_SUBST_TRACE([FLATPAK_FALSE]) m4trace:configure.ac:148: -1- m4_pattern_allow([^FLATPAK_FALSE$]) m4trace:configure.ac:148: -1- _AM_SUBST_NOTMAKE([FLATPAK_TRUE]) m4trace:configure.ac:148: -1- _AM_SUBST_NOTMAKE([FLATPAK_FALSE]) m4trace:configure.ac:150: -1- AC_CONFIG_FILES([ Makefile src/Makefile data/Makefile ]) m4trace:configure.ac:156: -1- AC_CONFIG_HEADERS([config.h]) m4trace:configure.ac:158: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) m4trace:configure.ac:158: -1- m4_pattern_allow([^LIB@&t@OBJS$]) m4trace:configure.ac:158: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([LTLIBOBJS]) m4trace:configure.ac:158: -1- m4_pattern_allow([^LTLIBOBJS$]) m4trace:configure.ac:158: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) m4trace:configure.ac:158: -1- AC_SUBST([am__EXEEXT_TRUE]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) m4trace:configure.ac:158: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) m4trace:configure.ac:158: -1- AC_SUBST([am__EXEEXT_FALSE]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) m4trace:configure.ac:158: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) m4trace:configure.ac:158: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) m4trace:configure.ac:158: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([top_builddir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([top_build_prefix]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([srcdir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([abs_srcdir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([top_srcdir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([abs_top_srcdir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([builddir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([abs_builddir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([abs_top_builddir]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([INSTALL]) m4trace:configure.ac:158: -1- AC_SUBST_TRACE([MKDIR_P]) Atomes-GNU-1.1.14/compile000077500000000000000000000163501457665371200150600ustar00rootroot00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: Atomes-GNU-1.1.14/config.guess000077500000000000000000001412051457665371200160200ustar00rootroot00000000000000#!/usr/bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-05-25' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Atomes-GNU-1.1.14/config.h.in000066400000000000000000000024221457665371200155200ustar00rootroot00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Atomes major version */ #undef ATOMES_MAJOR_VERSION /* Atomes minor version */ #undef ATOMES_MINOR_VERSION /* Atomes patch version */ #undef ATOMES_PATCH_VERSION /* Define to dummy `main' function (if any) required to link to the Fortran libraries. */ #undef FC_DUMMY_MAIN /* Define if F77 and FC dummy `main' functions are identical. */ #undef FC_DUMMY_MAIN_EQ_F77 /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #undef FC_FUNC /* As FC_FUNC, but for C identifiers containing underscores. */ #undef FC_FUNC_ /* GETTEXT package name */ #undef GETTEXT_PACKAGE /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Version number of package */ #undef VERSION Atomes-GNU-1.1.14/config.sub000077500000000000000000001051211457665371200154600ustar00rootroot00000000000000#!/usr/bin/sh # Configuration validation subroutine script. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: Atomes-GNU-1.1.14/configure000077500000000000000000007625111457665371200154200ustar00rootroot00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for atomes 1.1.14. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="as_nop=: if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ) then : else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" if (eval "$as_required") 2>/dev/null then : as_have_required=yes else $as_nop as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi fi if test "x$CONFIG_SHELL" != x then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$0: Please tell bug-autoconf@gnu.org and $0: atomes@ipcms.unistra.fr about your system, including $0: any error possibly output before this message. Then $0: install a modern shell, or manually run the script $0: under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_nop # --------- # Do nothing but, unlike ":", preserve the value of $?. as_fn_nop () { return $? } as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='atomes' PACKAGE_TARNAME='atomes' PACKAGE_VERSION='1.1.14' PACKAGE_STRING='atomes 1.1.14' PACKAGE_BUGREPORT='atomes@ipcms.unistra.fr' PACKAGE_URL='https://atomes.ipcms.fr' ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS FLATPAK_FALSE FLATPAK_TRUE WINDRES NATIVE_WIN32_FALSE NATIVE_WIN32_TRUE PLATFORM_WIN32_FALSE PLATFORM_WIN32_TRUE FCFLAGS_F90 FCFLAGS_f90 FCLIBS host_os host_vendor host_cpu host build_os build_vendor build_cpu build ac_ct_FC FCFLAGS FC am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC EPOXY_LIBS EPOXY_CFLAGS GLU_LIBS GLU_CFLAGS FFMPEG_LIBS FFMPEG_CFLAGS PANGOFT2_LIBS PANGOFT2_CFLAGS LIBXML2_LIBS LIBXML2_CFLAGS GTK_LIBS GTK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH UP_APPSTREAM UP_DESKTOP UP_MIME PKG_CONFIG GETTEXT_PACKAGE ATOMES_PATCH_VERSION ATOMES_MINOR_VERSION ATOMES_MAJOR_VERSION AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_flatpak ' ac_precious_vars='build_alias host_alias target_alias PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR GTK_CFLAGS GTK_LIBS LIBXML2_CFLAGS LIBXML2_LIBS PANGOFT2_CFLAGS PANGOFT2_LIBS FFMPEG_CFLAGS FFMPEG_LIBS GLU_CFLAGS GLU_LIBS EPOXY_CFLAGS EPOXY_LIBS CC CFLAGS LDFLAGS LIBS CPPFLAGS FC FCFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures atomes 1.1.14 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/atomes] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of atomes 1.1.14:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-flatpak to build the Flatpak Some influential environment variables: PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config LIBXML2_CFLAGS C compiler flags for LIBXML2, overriding pkg-config LIBXML2_LIBS linker flags for LIBXML2, overriding pkg-config PANGOFT2_CFLAGS C compiler flags for PANGOFT2, overriding pkg-config PANGOFT2_LIBS linker flags for PANGOFT2, overriding pkg-config FFMPEG_CFLAGS C compiler flags for FFMPEG, overriding pkg-config FFMPEG_LIBS linker flags for FFMPEG, overriding pkg-config GLU_CFLAGS C compiler flags for GLU, overriding pkg-config GLU_LIBS linker flags for GLU, overriding pkg-config EPOXY_CFLAGS C compiler flags for EPOXY, overriding pkg-config EPOXY_LIBS linker flags for EPOXY, overriding pkg-config CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory FC Fortran compiler command FCFLAGS Fortran compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . atomes home page: . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF atomes configure 1.1.14 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_fc_try_compile LINENO # --------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_fc_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext } then : ac_retval=0 else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by atomes $as_me 1.1.14, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C compiler supports C89 (global declarations) ac_c_conftest_c89_globals=' /* Does the compiler advertise C89 conformance? Do not test the value of __STDC__, because some compilers set it to 0 while being otherwise adequately conformant. */ #if !defined __STDC__ # error "Compiler does not advertise C89 conformance" #endif #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ struct buf { int x; }; struct buf * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not \xHH hex character constants. These do not provoke an error unfortunately, instead are silently treated as an "x". The following induces an error, until -std is added to get proper ANSI mode. Curiously \x00 != x always comes out true, for an array size at least. It is necessary to write \x00 == 0 to get something that is true only with -std. */ int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) '\''x'\'' int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), int, int);' # Test code for whether the C compiler supports C89 (body of main). ac_c_conftest_c89_main=' ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); ' # Test code for whether the C compiler supports C99 (global declarations) ac_c_conftest_c99_globals=' // Does the compiler advertise C99 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L # error "Compiler does not advertise C99 conformance" #endif #include extern int puts (const char *); extern int printf (const char *, ...); extern int dprintf (int, const char *, ...); extern void *malloc (size_t); // Check varargs macros. These examples are taken from C99 6.10.3.5. // dprintf is used instead of fprintf to avoid needing to declare // FILE and stderr. #define debug(...) dprintf (2, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK #error "your preprocessor is broken" #endif #if BIG_OK #else #error "your preprocessor is broken" #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) continue; return 0; } // Check varargs and va_copy. static bool test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str = ""; int number = 0; float fnumber = 0; while (*format) { switch (*format++) { case '\''s'\'': // string str = va_arg (args_copy, const char *); break; case '\''d'\'': // int number = va_arg (args_copy, int); break; case '\''f'\'': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); return *str && number && fnumber; } ' # Test code for whether the C compiler supports C99 (body of main). ac_c_conftest_c99_main=' // Check bool. _Bool success = false; success |= (argc != 0); // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[0] = argv[0][0]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' || dynamic_array[ni.number - 1] != 543); ' # Test code for whether the C compiler supports C11 (global declarations) ac_c_conftest_c11_globals=' // Does the compiler advertise C11 conformance? #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L # error "Compiler does not advertise C11 conformance" #endif // Check _Alignas. char _Alignas (double) aligned_as_double; char _Alignas (0) no_special_alignment; extern char aligned_as_int; char _Alignas (0) _Alignas (int) aligned_as_int; // Check _Alignof. enum { int_alignment = _Alignof (int), int_array_alignment = _Alignof (int[100]), char_alignment = _Alignof (char) }; _Static_assert (0 < -_Alignof (int), "_Alignof is signed"); // Check _Noreturn. int _Noreturn does_not_return (void) { for (;;) continue; } // Check _Static_assert. struct test_static_assert { int x; _Static_assert (sizeof (int) <= sizeof (long int), "_Static_assert does not work in struct"); long int y; }; // Check UTF-8 literals. #define u8 syntax error! char const utf8_literal[] = u8"happens to be ASCII" "another string"; // Check duplicate typedefs. typedef long *long_ptr; typedef long int *long_ptr; typedef long_ptr long_ptr; // Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. struct anonymous { union { struct { int i; int j; }; struct { int k; long int l; } w; }; int m; } v1; ' # Test code for whether the C compiler supports C11 (body of main). ac_c_conftest_c11_main=' _Static_assert ((offsetof (struct anonymous, i) == offsetof (struct anonymous, w.k)), "Anonymous union alignment botch"); v1.i = 2; v1.w.k = 5; ok |= v1.i != 5; ' # Test code for whether the C compiler supports C11 (complete). ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} ${ac_c_conftest_c11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} ${ac_c_conftest_c11_main} return ok; } " # Test code for whether the C compiler supports C99 (complete). ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} ${ac_c_conftest_c99_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} ${ac_c_conftest_c99_main} return ok; } " # Test code for whether the C compiler supports C89 (complete). ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} int main (int argc, char **argv) { int ok = 0; ${ac_c_conftest_c89_main} return ok; } " # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub compile missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 printf %s "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`printf "%s\n" "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval test \${ac_cv_prog_make_${ac_make}_set+y} then : printf %s "(cached) " >&6 else $as_nop cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } SET_MAKE= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='atomes' VERSION='1.1.14' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi printf "%s\n" "#define ATOMES_MAJOR_VERSION 1" >>confdefs.h ATOMES_MAJOR_VERSION=1 printf "%s\n" "#define ATOMES_MINOR_VERSION 1" >>confdefs.h ATOMES_MINOR_VERSION=1 printf "%s\n" "#define ATOMES_PATCH_VERSION 14" >>confdefs.h ATOMES_PATCH_VERSION=14 GETTEXT_PACKAGE=atomes printf "%s\n" "#define GETTEXT_PACKAGE \"$GETTEXT_PACKAGE\"" >>confdefs.h # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PKG_CONFIG"; then ac_cv_prog_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_PKG_CONFIG="pkg-config" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_PKG_CONFIG" && ac_cv_prog_PKG_CONFIG="no" fi fi PKG_CONFIG=$ac_cv_prog_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-mime-database", so it can be a program name with args. set dummy update-mime-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_MIME+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_MIME"; then ac_cv_prog_UP_MIME="$UP_MIME" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_MIME="update-mime-database" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_MIME" && ac_cv_prog_UP_MIME="no" fi fi UP_MIME=$ac_cv_prog_UP_MIME if test -n "$UP_MIME"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_MIME" >&5 printf "%s\n" "$UP_MIME" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "update-desktop-database", so it can be a program name with args. set dummy update-desktop-database; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_DESKTOP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_DESKTOP"; then ac_cv_prog_UP_DESKTOP="$UP_DESKTOP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_DESKTOP="update-desktop-database" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_DESKTOP" && ac_cv_prog_UP_DESKTOP="no" fi fi UP_DESKTOP=$ac_cv_prog_UP_DESKTOP if test -n "$UP_DESKTOP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_DESKTOP" >&5 printf "%s\n" "$UP_DESKTOP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "appstream-util", so it can be a program name with args. set dummy appstream-util; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_UP_APPSTREAM+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$UP_APPSTREAM"; then ac_cv_prog_UP_APPSTREAM="$UP_APPSTREAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_UP_APPSTREAM="appstream-util" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_UP_APPSTREAM" && ac_cv_prog_UP_APPSTREAM="no" fi fi UP_APPSTREAM=$ac_cv_prog_UP_APPSTREAM if test -n "$UP_APPSTREAM"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $UP_APPSTREAM" >&5 printf "%s\n" "$UP_APPSTREAM" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 printf %s "checking for GTK... " >&6; } if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.16\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.16") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0 >= 3.16" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= 3.16\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= 3.16") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-3.0 >= 3.16" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0 >= 3.16" 2>&1` else GTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0 >= 3.16" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (gtk+-3.0 >= 3.16) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for LIBXML2" >&5 printf %s "checking for LIBXML2... " >&6; } if test -n "$LIBXML2_CFLAGS"; then pkg_cv_LIBXML2_CFLAGS="$LIBXML2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_CFLAGS=`$PKG_CONFIG --cflags "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$LIBXML2_LIBS"; then pkg_cv_LIBXML2_LIBS="$LIBXML2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libxml-2.0 >= 2.4.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "libxml-2.0 >= 2.4.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBXML2_LIBS=`$PKG_CONFIG --libs "libxml-2.0 >= 2.4.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBXML2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` else LIBXML2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libxml-2.0 >= 2.4.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$LIBXML2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libxml-2.0 >= 2.4.0) were not met: $LIBXML2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables LIBXML2_CFLAGS and LIBXML2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else LIBXML2_CFLAGS=$pkg_cv_LIBXML2_CFLAGS LIBXML2_LIBS=$pkg_cv_LIBXML2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PANGOFT2" >&5 printf %s "checking for PANGOFT2... " >&6; } if test -n "$PANGOFT2_CFLAGS"; then pkg_cv_PANGOFT2_CFLAGS="$PANGOFT2_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_CFLAGS=`$PKG_CONFIG --cflags "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$PANGOFT2_LIBS"; then pkg_cv_PANGOFT2_LIBS="$PANGOFT2_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"pangoft2\""; } >&5 ($PKG_CONFIG --exists --print-errors "pangoft2") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_PANGOFT2_LIBS=`$PKG_CONFIG --libs "pangoft2" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "pangoft2" 2>&1` else PANGOFT2_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "pangoft2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$PANGOFT2_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (pangoft2) were not met: $PANGOFT2_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables PANGOFT2_CFLAGS and PANGOFT2_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else PANGOFT2_CFLAGS=$pkg_cv_PANGOFT2_CFLAGS PANGOFT2_LIBS=$pkg_cv_PANGOFT2_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for FFMPEG" >&5 printf %s "checking for FFMPEG... " >&6; } if test -n "$FFMPEG_CFLAGS"; then pkg_cv_FFMPEG_CFLAGS="$FFMPEG_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_CFLAGS=`$PKG_CONFIG --cflags "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$FFMPEG_LIBS"; then pkg_cv_FFMPEG_LIBS="$FFMPEG_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavcodec libavformat libavutil libswscale\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavcodec libavformat libavutil libswscale") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_FFMPEG_LIBS=`$PKG_CONFIG --libs "libavcodec libavformat libavutil libswscale" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then FFMPEG_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` else FFMPEG_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "libavcodec libavformat libavutil libswscale" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$FFMPEG_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (libavcodec libavformat libavutil libswscale) were not met: $FFMPEG_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables FFMPEG_CFLAGS and FFMPEG_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else FFMPEG_CFLAGS=$pkg_cv_FFMPEG_CFLAGS FFMPEG_LIBS=$pkg_cv_FFMPEG_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLU" >&5 printf %s "checking for GLU... " >&6; } if test -n "$GLU_CFLAGS"; then pkg_cv_GLU_CFLAGS="$GLU_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_CFLAGS=`$PKG_CONFIG --cflags "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLU_LIBS"; then pkg_cv_GLU_LIBS="$GLU_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glu\""; } >&5 ($PKG_CONFIG --exists --print-errors "glu") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLU_LIBS=`$PKG_CONFIG --libs "glu" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLU_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glu" 2>&1` else GLU_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glu" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLU_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (glu) were not met: $GLU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GLU_CFLAGS and GLU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else GLU_CFLAGS=$pkg_cv_GLU_CFLAGS GLU_LIBS=$pkg_cv_GLU_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EPOXY" >&5 printf %s "checking for EPOXY... " >&6; } if test -n "$EPOXY_CFLAGS"; then pkg_cv_EPOXY_CFLAGS="$EPOXY_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_CFLAGS=`$PKG_CONFIG --cflags "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$EPOXY_LIBS"; then pkg_cv_EPOXY_LIBS="$EPOXY_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"epoxy\""; } >&5 ($PKG_CONFIG --exists --print-errors "epoxy") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_EPOXY_LIBS=`$PKG_CONFIG --libs "epoxy" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then EPOXY_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "epoxy" 2>&1` else EPOXY_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "epoxy" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$EPOXY_PKG_ERRORS" >&5 as_fn_error $? "Package requirements (epoxy) were not met: $EPOXY_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details." "$LINENO" 5 elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables EPOXY_CFLAGS and EPOXY_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details" "$LINENO" 5; } else EPOXY_CFLAGS=$pkg_cv_EPOXY_CFLAGS EPOXY_LIBS=$pkg_cv_EPOXY_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi # Checking for compilers # C ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. set dummy ${ac_tool_prefix}clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 printf "%s\n" "$CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "clang", so it can be a program name with args. set dummy clang; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="clang" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 printf "%s\n" "$ac_ct_CC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi fi test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 printf %s "checking whether the C compiler works... " >&6; } ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else $as_nop ac_file='' fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 printf %s "checking for C compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_nop printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 printf %s "checking whether the compiler supports GNU C... " >&6; } if test ${ac_cv_c_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_c_compiler_gnu if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 printf %s "checking whether $CC accepts -g... " >&6; } if test ${ac_cv_prog_cc_g+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 printf "%s\n" "$ac_cv_prog_cc_g" >&6; } if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi ac_prog_cc_stdc=no if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 printf %s "checking for $CC option to enable C11 features... " >&6; } if test ${ac_cv_prog_cc_c11+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c11_program _ACEOF for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } CC="$CC $ac_cv_prog_cc_c11" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 ac_prog_cc_stdc=c11 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 printf %s "checking for $CC option to enable C99 features... " >&6; } if test ${ac_cv_prog_cc_c99+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c99_program _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c99" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c99" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } CC="$CC $ac_cv_prog_cc_c99" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 ac_prog_cc_stdc=c99 fi fi if test x$ac_prog_cc_stdc = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 printf %s "checking for $CC option to enable C89 features... " >&6; } if test ${ac_cv_prog_cc_c89+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_c_conftest_c89_program _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO" then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi if test "x$ac_cv_prog_cc_c89" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else $as_nop if test "x$ac_cv_prog_cc_c89" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } CC="$CC $ac_cv_prog_cc_c89" fi ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 ac_prog_cc_stdc=c89 fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $CFLAGS" >&5 printf %s "checking whether C compiler accepts $CFLAGS... " >&6; } ax_save_FLAGS=$CFLAGS CFLAGS="$CFLAGS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval `printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=yes else $as_nop eval `printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`printf "%s\n" "ax_cv_c_flags_$CFLAGS" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 printf "%s\n" "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then : else : fi # Fortran 90 ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else $as_nop FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else $as_nop ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* ) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 printf %s "checking for dummy main to link with Fortran libraries... " >&6; } if test ${ac_cv_fc_dummy_main+y} then : printf %s "(cached) " >&6 else $as_nop ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=none else $as_nop ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 printf "%s\n" "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown then : if test $FC_DUMMY_MAIN != none; then printf "%s\n" "#define FC_DUMMY_MAIN $FC_DUMMY_MAIN" >>confdefs.h if test "x$ac_cv_fc_dummy_main" = "x$ac_cv_f77_dummy_main"; then printf "%s\n" "#define FC_DUMMY_MAIN_EQ_F77 1" >>confdefs.h fi fi else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "linking to Fortran libraries from C fails See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 printf %s "checking for Fortran name-mangling scheme... " >&6; } if test ${ac_cv_fc_mangling+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ char $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main (void) { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else $as_nop { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 printf "%s\n" "$ac_cv_fc_mangling" >&6; } ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") printf "%s\n" "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h printf "%s\n" "#define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 printf "%s\n" "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fcflags_save="$FCFLAGS" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 printf "%s\n" "$FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_FC+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 printf "%s\n" "$ac_ct_FC" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU Fortran" >&5 printf %s "checking whether the compiler supports GNU Fortran... " >&6; } if test ${ac_cv_fc_compiler_gnu+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_compiler_gnu=yes else $as_nop ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 printf "%s\n" "$ac_cv_fc_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+y} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 printf %s "checking whether $FC accepts -g... " >&6; } if test ${ac_cv_prog_fc_g+y} then : printf %s "(cached) " >&6 else $as_nop FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_g=yes else $as_nop ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 printf "%s\n" "$ac_cv_prog_fc_g" >&6; } if test $ac_test_FCFLAGS; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu FCFLAGS="$fcflags_save" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 printf %s "checking for Fortran flag to compile .f90 files... " >&6; } if test ${ac_cv_fc_srcext_f90+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 printf "%s\n" "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Cannot compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .F90 files" >&5 printf %s "checking for Fortran flag to compile .F90 files... " >&6; } if test ${ac_cv_fc_srcext_F90+y} then : printf %s "(cached) " >&6 else $as_nop ac_ext=F90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_F90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=F90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_srcext_F90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.$ac_objext conftest.F90 ac_fcflags_srcext=$ac_fcflags_srcext_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_F90" >&5 printf "%s\n" "$ac_cv_fc_srcext_F90" >&6; } if test "x$ac_cv_fc_srcext_F90" = xunknown; then as_fn_error $? "Cannot compile .F90 files" "$LINENO" 5 else ac_fc_srcext=F90 if test "x$ac_cv_fc_srcext_F90" = xnone; then ac_fcflags_srcext="" FCFLAGS_F90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_F90 FCFLAGS_F90=$ac_cv_fc_srcext_F90 fi FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Fortran compiler accepts $FCFLAGS" >&5 printf %s "checking whether Fortran compiler accepts $FCFLAGS... " >&6; } ax_save_FLAGS=$FCFLAGS FCFLAGS="$FCFLAGS" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : eval `printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh`=yes else $as_nop eval `printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh`=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext FCFLAGS=$ax_save_FLAGS eval ax_check_compiler_flags=$`printf "%s\n" "ax_cv_fc_flags_$FCFLAGS" | $as_tr_sh` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_check_compiler_flags" >&5 printf "%s\n" "$ax_check_compiler_flags" >&6; } if test "x$ax_check_compiler_flags" = xyes; then : else : fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 printf %s "checking how to get verbose linking output from $FC... " >&6; } if test ${ac_cv_prog_fc_v+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 printf "%s\n" "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 printf "%s\n" "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 printf "%s\n" "$ac_cv_prog_fc_v" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 printf %s "checking for Fortran libraries of $FC... " >&6; } if test ${ac_cv_fc_libs+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift printf "%s\n" "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` printf "%s\n" "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) # Ignore this library only on Windows-like systems. case $host_os in cygwin* | msys* ) ;; *) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `printf "%s\n" "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue then : else $as_nop ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; -mllvm) ${2+shift};; # Defend against 'clang -mllvm -loopopt=0'. # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`printf "%s\n" "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 printf "%s\n" "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 printf %s "checking for Fortran flag needed to accept free-form source... " >&6; } if test ${ac_cv_fc_freeform+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO" then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 printf "%s\n" "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then as_fn_error 77 "Fortran does not accept free-form source" "$LINENO" 5 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu case $host in *mingw* | pw32* | cygwin*) platform_win32=yes echo "Building win32 application" ;; *) platform_win32=no ;; esac if test x"$platform_win32" = "xyes"; then PLATFORM_WIN32_TRUE= PLATFORM_WIN32_FALSE='#' else PLATFORM_WIN32_TRUE='#' PLATFORM_WIN32_FALSE= fi case $host in *mingw*) native_win32=yes echo "Building native win32 application" ;; *) native_win32=no ;; esac if test x"$native_win32" = "xyes"; then NATIVE_WIN32_TRUE= NATIVE_WIN32_FALSE='#' else NATIVE_WIN32_TRUE='#' NATIVE_WIN32_FALSE= fi if test "$native_win32" = "yes"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_WINDRES+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 printf "%s\n" "$WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_WINDRES+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 printf "%s\n" "$ac_ct_WINDRES" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="no" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi if test "$WINDRES" = no; then as_fn_error $? "*** Could not find an implementation of windres in your PATH." "$LINENO" 5 fi fi cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h # Check whether --enable-flatpak was given. if test ${enable_flatpak+y} then : enableval=$enable_flatpak; fi if test "x$flatpak" != "xno"; then FLATPAK_TRUE= FLATPAK_FALSE='#' else FLATPAK_TRUE='#' FLATPAK_FALSE= fi ac_config_files="$ac_config_files Makefile src/Makefile data/Makefile" ac_config_headers="$ac_config_headers config.h" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${PLATFORM_WIN32_TRUE}" && test -z "${PLATFORM_WIN32_FALSE}"; then as_fn_error $? "conditional \"PLATFORM_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${NATIVE_WIN32_TRUE}" && test -z "${NATIVE_WIN32_FALSE}"; then as_fn_error $? "conditional \"NATIVE_WIN32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FLATPAK_TRUE}" && test -z "${FLATPAK_FALSE}"; then as_fn_error $? "conditional \"FLATPAK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh as_nop=: if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null then : eval 'as_fn_append () { eval $1+=\$2 }' else $as_nop as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null then : eval 'as_fn_arith () { as_val=$(( $* )) }' else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by atomes $as_me 1.1.14, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to . atomes home page: ." _ACEOF ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ atomes config.status 1.1.14 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX printf "%s\n" "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "data/Makefile") CONFIG_FILES="$CONFIG_FILES data/Makefile" ;; "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi Atomes-GNU-1.1.14/configure.ac000066400000000000000000000121261457665371200157650ustar00rootroot00000000000000dnl Process this file with autoconf to produce a configure script. dnl Created by Sébastien Le Roux. AC_PREREQ(2.59) m4_define(atomes_major_version, 1) m4_define(atomes_minor_version, 1) m4_define(atomes_patch_version, 14) m4_define(atomes_version, atomes_major_version.atomes_minor_version.atomes_patch_version) m4_define(atomes_url, https://atomes.ipcms.fr) m4_define(atomes_tar, atomes) AC_INIT([atomes], [atomes_version], [atomes@ipcms.unistra.fr], [atomes_tar], [atomes_url]) AM_INIT_AUTOMAKE AC_DEFINE(ATOMES_MAJOR_VERSION, atomes_major_version, [Atomes major version]) AC_SUBST(ATOMES_MAJOR_VERSION, atomes_major_version) AC_DEFINE(ATOMES_MINOR_VERSION, atomes_minor_version, [Atomes minor version]) AC_SUBST(ATOMES_MINOR_VERSION, atomes_minor_version) AC_DEFINE(ATOMES_PATCH_VERSION, atomes_patch_version, [Atomes patch version]) AC_SUBST(ATOMES_PATCH_VERSION, atomes_patch_version) dnl *************************************************************************** dnl Internatinalization dnl *************************************************************************** GETTEXT_PACKAGE=atomes AC_SUBST(GETTEXT_PACKAGE) AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE,"$GETTEXT_PACKAGE", [GETTEXT package name]) dnl *************************************************************************** dnl Check for utilities dnl *************************************************************************** AC_CHECK_PROG([PKG_CONFIG], [pkg-config], [pkg-config], [no]) AC_CHECK_PROG([UP_MIME], [update-mime-database], [update-mime-database], [no]) AC_CHECK_PROG([UP_DESKTOP], [update-desktop-database], [update-desktop-database], [no]) AC_CHECK_PROG([UP_APPSTREAM], [appstream-util], [appstream-util], [no]) dnl *************************************************************************** dnl Check for required librairies dnl *************************************************************************** PKG_CHECK_MODULES(GTK, [gtk+-3.0 >= 3.16]) dnl PKG_CHECK_MODULES(GTK, [gtk4 >= 4.6]) PKG_CHECK_MODULES(LIBXML2, [libxml-2.0 >= 2.4.0]) PKG_CHECK_MODULES(PANGOFT2, [pangoft2]) PKG_CHECK_MODULES(FFMPEG, [libavcodec libavformat libavutil libswscale]) PKG_CHECK_MODULES(GLU, [glu]) PKG_CHECK_MODULES(EPOXY, [epoxy]) # Checking for compilers AC_DEFUN([AX_CHECK_COMPILER_FLAGS], [AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX AC_MSG_CHECKING([whether _AC_LANG compiler accepts $1]) dnl Some hackery here since AC_CACHE_VAL can't handle a non-literal varname: AS_LITERAL_IF([$1], [AC_CACHE_VAL(AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1), [ ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS])], [ax_save_FLAGS=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$1" AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=yes, eval AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1)=no) _AC_LANG_PREFIX[]FLAGS=$ax_save_FLAGS]) eval ax_check_compiler_flags=$AS_TR_SH(ax_cv_[]_AC_LANG_ABBREV[]_flags_$1) AC_MSG_RESULT($ax_check_compiler_flags) if test "x$ax_check_compiler_flags" = xyes; then m4_default([$2], :) else m4_default([$3], :) fi ])dnl AX_CHECK_COMPILER_FLAGS # C AC_PROG_CC AX_CHECK_COMPILER_FLAGS([$CFLAGS]) # Fortran 90 AC_FC_WRAPPERS AC_LANG_PUSH([Fortran]) fcflags_save="$FCFLAGS" AC_PROG_FC([xlf95 fort ifort ifc efc f95 g95 pgf95 lf95 ftn xlf90 f90 pgf90 pghpf epcf90 gfortran gfortran-4 gfortran-4.exe], [90]) FCFLAGS="$fcflags_save" AC_FC_SRCEXT(f90, FCFLAGS_f90="$FCFLAGS_f90 $FCFLAGS", AC_MSG_ERROR([Cannot compile .f90 files])) AC_FC_SRCEXT(F90, FCFLAGS_F90="$FCFLAGS_F90 $FCFLAGS", AC_MSG_ERROR([Cannot compile .F90 files])) AX_CHECK_COMPILER_FLAGS([$FCFLAGS]) AC_FC_LIBRARY_LDFLAGS AC_FC_FREEFORM AC_LANG_POP([Fortran]) dnl *************************************************************************** dnl Check for windows dnl *************************************************************************** case $host in *mingw* | pw32* | cygwin*) platform_win32=yes echo "Building win32 application" ;; *) platform_win32=no ;; esac AM_CONDITIONAL(PLATFORM_WIN32, test x"$platform_win32" = "xyes") case $host in *mingw*) native_win32=yes echo "Building native win32 application" ;; *) native_win32=no ;; esac AM_CONDITIONAL(NATIVE_WIN32, test x"$native_win32" = "xyes") if test "$native_win32" = "yes"; then AC_CHECK_TOOL(WINDRES, windres, no) if test "$WINDRES" = no; then AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.]) fi fi cat lic > src/version.h echo "#define FC \""$FC"\"" >> src/version.h echo "#define FCFLAGS \""$FCFLAGS"\"" >> src/version.h echo "#define CC \""$CC"\"" >> src/version.h echo "#define CFLAGS \""$CFLAGS"\"" >> src/version.h dnl Flatpak AC_ARG_ENABLE([flatpak], [ --enable-flatpak to build the Flatpak]) AM_CONDITIONAL([FLATPAK], [test "x$flatpak" != "xno"]) AC_CONFIG_FILES([ Makefile src/Makefile data/Makefile ]) AC_CONFIG_HEADERS([config.h]) AC_OUTPUT Atomes-GNU-1.1.14/data/000077500000000000000000000000001457665371200144065ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/Makefile.am000066400000000000000000000031431457665371200164430ustar00rootroot00000000000000## Process this file with automake to produce Makefile.in atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications install-data-local: if test -d $(srcdir)/pixmaps; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/pixmaps; \ for pixmap in $(srcdir)/pixmaps/*; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(atomes_pkgdatadir)/pixmaps; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$pixmap; \ for pixma in $$pixmap/*; do \ if test -f $$pixma; then \ $(INSTALL_DATA) $$pixma $(atomes_pkgdatadir)/$$pixmap; \ fi \ done \ fi \ done \ fi if test -d $(srcdir)/library; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/library; \ for librar in $(srcdir)/library/*; do \ if test -f $$librar; then \ $(INSTALL_DATA) $$librar $(atomes_pkgdatadir)/library; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$librar; \ for libra in $$librar/*; do \ if test -f $$libra; then \ $(INSTALL_DATA) $$libra $(atomes_pkgdatadir)/$$librar; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$libra; \ for libr in $$libra/*; do \ if test -f $$libr; then \ $(INSTALL_DATA) $$libr $(atomes_pkgdatadir)/$$libra; \ fi \ done \ fi \ done \ fi \ done \ fi # Remove doc directordy on uninstall uninstall-local: -rm -rf $(atomes_pkgdatadir)/pixmaps/* -rmdir $(atomes_pkgdatadir)/pixmaps -rm -rf $(atomes_pkgdatadir)/library/* -rmdir $(atomes_pkgdatadir)/library -rmdir $(atomes_pkgdatadir) Atomes-GNU-1.1.14/data/Makefile.in000066400000000000000000000327151457665371200164630ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = data ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ atomes_datadir = $(DESTDIR)$(datadir) atomes_pkgdatadir = $(DESTDIR)$(pkgdatadir) atomes_iconsdir = $(atomes_datadir)/pixmaps atomes_desktopdir = $(atomes_datadir)/applications all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu data/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-data-local install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am uninstall-local .PRECIOUS: Makefile install-data-local: if test -d $(srcdir)/pixmaps; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/pixmaps; \ for pixmap in $(srcdir)/pixmaps/*; do \ if test -f $$pixmap; then \ $(INSTALL_DATA) $$pixmap $(atomes_pkgdatadir)/pixmaps; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$pixmap; \ for pixma in $$pixmap/*; do \ if test -f $$pixma; then \ $(INSTALL_DATA) $$pixma $(atomes_pkgdatadir)/$$pixmap; \ fi \ done \ fi \ done \ fi if test -d $(srcdir)/library; then \ $(mkinstalldirs) $(atomes_pkgdatadir)/library; \ for librar in $(srcdir)/library/*; do \ if test -f $$librar; then \ $(INSTALL_DATA) $$librar $(atomes_pkgdatadir)/library; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$librar; \ for libra in $$librar/*; do \ if test -f $$libra; then \ $(INSTALL_DATA) $$libra $(atomes_pkgdatadir)/$$librar; \ else \ $(mkinstalldirs) $(atomes_pkgdatadir)/$$libra; \ for libr in $$libra/*; do \ if test -f $$libr; then \ $(INSTALL_DATA) $$libr $(atomes_pkgdatadir)/$$libra; \ fi \ done \ fi \ done \ fi \ done \ fi # Remove doc directordy on uninstall uninstall-local: -rm -rf $(atomes_pkgdatadir)/pixmaps/* -rmdir $(atomes_pkgdatadir)/pixmaps -rm -rf $(atomes_pkgdatadir)/library/* -rmdir $(atomes_pkgdatadir)/library -rmdir $(atomes_pkgdatadir) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Atomes-GNU-1.1.14/data/library/000077500000000000000000000000001457665371200160525ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/force_fields/000077500000000000000000000000001457665371200204765ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/force_fields/amber94.ffl000066400000000000000000001607311457665371200224420ustar00rootroot00000000000000 AMBER 94 k-calories per mol 55 83 0 0 191 0 81 0 31 0 50 Atomes-GNU-1.1.14/data/library/force_fields/amber96.ffl000066400000000000000000001610171457665371200224420ustar00rootroot00000000000000 AMBER 96 k-calories per mol 54 83 0 0 191 0 81 0 31 0 51 Atomes-GNU-1.1.14/data/library/force_fields/amber98.ffl000066400000000000000000001613111457665371200224410ustar00rootroot00000000000000 AMBER 98 k-calories per mol 54 83 0 0 191 0 83 0 31 0 51 Atomes-GNU-1.1.14/data/library/force_fields/amber99.ffl000066400000000000000000002512761457665371200224540ustar00rootroot00000000000000 AMBER 99 k-calories per mol 64 116 0 0 281 0 164 0 38 0 62 Atomes-GNU-1.1.14/data/library/force_fields/cff91.ffl000066400000000000000000007233661457665371200221200ustar00rootroot00000000000000 CFF 91 k-calories per mol 93 667 58 0 330 155 216 294 0 70 40 Atomes-GNU-1.1.14/data/library/force_fields/charmm-carb_36.ffl000066400000000000000000011044421457665371200236610ustar00rootroot00000000000000 CHARMM 36 carbohydrates k-calories per mol 59 153 0 0 438 0 1354 0 14 0 57 Atomes-GNU-1.1.14/data/library/force_fields/charmm-cgenff_36.ffl000066400000000000000000037253761457665371200242230ustar00rootroot00000000000000 CHARMM 36 general k-calories per mol 163 506 0 0 1561 0 3937 0 125 0 156 Atomes-GNU-1.1.14/data/library/force_fields/charmm-ethers_35.ffl000066400000000000000000000740051457665371200242430ustar00rootroot00000000000000 CHARMM 35 ethers k-calories per mol 13 22 0 0 55 0 106 0 0 0 13 Atomes-GNU-1.1.14/data/library/force_fields/charmm-lipid_36.ffl000066400000000000000000001641331457665371200240550ustar00rootroot00000000000000 CHARMM 36 lipids k-calories per mol 29 50 0 0 131 0 180 0 4 0 29 Atomes-GNU-1.1.14/data/library/force_fields/charmm-na_36.ffl000066400000000000000000003570451457665371200233600ustar00rootroot00000000000000 CHARMM 36 Nucleid acids k-calories per mol 42 89 0 0 226 0 502 0 15 0 42 Atomes-GNU-1.1.14/data/library/force_fields/charmm-prot_22.ffl000066400000000000000000004752271457665371200237440ustar00rootroot00000000000000 CHARMM 22 proteins k-calories per mol 47 122 0 0 324 0 445 0 34 0 47 Atomes-GNU-1.1.14/data/library/force_fields/charmm-prot_36.ffl000066400000000000000000006226731457665371200237500ustar00rootroot00000000000000 CHARMM 36 proteins k-calories per mol 53 132 0 0 364 0 705 0 35 0 53 Atomes-GNU-1.1.14/data/library/force_fields/charmm-prot_metals_22.ffl000066400000000000000000005423041457665371200253000ustar00rootroot00000000000000 CHARMM 22 proteins and metals k-calories per mol 98 139 0 0 345 0 452 0 43 0 98 Atomes-GNU-1.1.14/data/library/force_fields/charmm-prot_metals_36.ffl000066400000000000000000006246641457665371200253170ustar00rootroot00000000000000 CHARMM 36 proteins and metals k-calories per mol 53 132 0 0 364 0 706 0 35 0 53 Atomes-GNU-1.1.14/data/library/force_fields/charmm-silicates.ffl000066400000000000000000000330711457665371200244200ustar00rootroot00000000000000 CHARMM silicates k-calories per mol 13 14 0 0 27 0 34 0 0 0 13 Atomes-GNU-1.1.14/data/library/force_fields/compass.ffl000066400000000000000000001366271457665371200226530ustar00rootroot00000000000000 COMPASS k-calories per mol 45 0 54 0 0 94 0 95 0 22 46 Atomes-GNU-1.1.14/data/library/force_fields/cvff.ffl000066400000000000000000011174601457665371200221250ustar00rootroot00000000000000 CVFF k-calories per mol 133 776 0 775 563 0 295 0 41 0 45 Atomes-GNU-1.1.14/data/library/force_fields/cvff_aug.ffl000066400000000000000000011740231457665371200227570ustar00rootroot00000000000000 CVFF Augmented k-calories per mol 172 798 0 752 640 0 342 0 41 0 86 Atomes-GNU-1.1.14/data/library/force_fields/oplsaap.ffl000066400000000000000000007564051457665371200226470ustar00rootroot00000000000000 OPLS All-atoms for proteins k-calories per mol 78 159 0 0 437 0 1446 0 105 0 78 Atomes-GNU-1.1.14/data/library/force_fields/oplsaar.ffl000066400000000000000000015476471457665371200226600ustar00rootroot00000000000000 OPLS All-atoms for RNA k-calories per mol 145 242 0 0 593 0 2482 0 131 0 145 Atomes-GNU-1.1.14/data/library/force_fields/pcff.ffl000066400000000000000000011353761457665371200221250ustar00rootroot00000000000000 PCFF k-calories per mol 133 627 126 0 329 302 216 492 0 83 94 Atomes-GNU-1.1.14/data/library/molecules/000077500000000000000000000000001457665371200200425ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Alcohols/000077500000000000000000000000001457665371200216065ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Alcohols/2-aminoethanol.sml000066400000000000000000000024701457665371200251430ustar00rootroot00000000000000 Alcohols β-Aminoethanol 2-Aminoethan-1-ol 2-Aminoethanol β-Aminoethanol Glycinol 11 Atomes-GNU-1.1.14/data/library/molecules/Alcohols/but-2-yne-1_4-diol.sml000066400000000000000000000025361457665371200253610ustar00rootroot00000000000000 Alcohols Butynediol But-2-yne-1,4-diol Butynediol 2-Butyne-1,4-diol 1,4-Dihydroxy-2-butyne 12 Atomes-GNU-1.1.14/data/library/molecules/Alcohols/cyclohexanol.sml000066400000000000000000000034411457665371200250150ustar00rootroot00000000000000 Alcohols Cyclohexanol Cyclohexanol Cyclohexyl Alcohol Hexahydrophenol Naxol 19 Atomes-GNU-1.1.14/data/library/molecules/Alcohols/cyclopentanol.sml000066400000000000000000000031111457665371200251710ustar00rootroot00000000000000 Alcohols Cyclopentanol Cyclopentanol Cyclopentyl alcohol Hydroxycyclopentane 16 Atomes-GNU-1.1.14/data/library/molecules/Alcohols/ethane-1_2-diol.sml000066400000000000000000000023421457665371200250740ustar00rootroot00000000000000 Alcohols Ethylene glycol Ethane-1,2-diol Ethylene glycol Monoethylene glycol 1,2-Dihydroxyethane 10 Atomes-GNU-1.1.14/data/library/molecules/Alcohols/ethanol.sml000066400000000000000000000022041457665371200237530ustar00rootroot00000000000000 Alcohols Ethanol Ethanol Absolute alcohol Ethylic alcohol Hydroxyethane 9 Atomes-GNU-1.1.14/data/library/molecules/Alcohols/methanol.sml000066400000000000000000000016701457665371200241360ustar00rootroot00000000000000 Alcohols Methanol Methanol Carbinol Hydroxymethane Methyl alcohol 6 Atomes-GNU-1.1.14/data/library/molecules/Alcohols/propan-1-ol.sml000066400000000000000000000025561457665371200244000ustar00rootroot00000000000000 Alcohols --i--n--I---Propanol Propan-1-ol --i--n--I---Propyl alcohol --i--n--I---Propanol Ethylcarbinol 12 Atomes-GNU-1.1.14/data/library/molecules/Alcohols/propan-2-ol.sml000066400000000000000000000025641457665371200244000ustar00rootroot00000000000000 Alcohols --i--s--I---Propanol Propan-2-ol --i--s--I---Propyl alcohol --i--s--I---Propanol Dimethyl carbinol 12 Atomes-GNU-1.1.14/data/library/molecules/Alcohols/propane-1_2_3-triol.sml000066400000000000000000000030051457665371200257150ustar00rootroot00000000000000 Alcohols Glycerin Propane-1,2,3-triol Glycerin Propanetriol 1,2,3-Trihydroxypropane 1,2,3-Propanetriol 14 Atomes-GNU-1.1.14/data/library/molecules/Aldehydes/000077500000000000000000000000001457665371200217445ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Aldehydes/acetaldehyde.sml000066400000000000000000000020021457665371200250670ustar00rootroot00000000000000 Aldehydes Acetaldehyde Acetaldehyde Ethanal Acetic aldehyde Acetylaldehyde 7 Atomes-GNU-1.1.14/data/library/molecules/Aldehydes/formaldehyde.sml000066400000000000000000000014701457665371200251260ustar00rootroot00000000000000 Aldehydes Formaldehyde Formaldehyde Methanal Methylene glycol Formol 4 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/000077500000000000000000000000001457665371200214205ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Alkanes/butane.sml000066400000000000000000000026471457665371200234240ustar00rootroot00000000000000 Alkanes Butane Butane Butyl hydride Methylethylmethane Quartane 14 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/decane.sml000066400000000000000000000047731457665371200233670ustar00rootroot00000000000000 Alkanes Decane Decane 32 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/dodecane.sml000066400000000000000000000056161457665371200237070ustar00rootroot00000000000000 Alkanes Dodecane Dodecane 38 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/ethane.sml000066400000000000000000000017271457665371200234100ustar00rootroot00000000000000 Alkanes Ethane Ethane Dicarbane 8 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/heptane.sml000066400000000000000000000036751457665371200235740ustar00rootroot00000000000000 Alkanes Heptane Heptane Septane 23 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/hexadecane.sml000066400000000000000000000072601457665371200242270ustar00rootroot00000000000000 Alkanes Hexadecane Hexadecane 50 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/hexane.sml000066400000000000000000000033641457665371200234130ustar00rootroot00000000000000 Alkanes Hexane Hexane Sextane 20 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/icosane.sml000066400000000000000000000107511457665371200235620ustar00rootroot00000000000000 Alkanes Icosane Icosane Eicosane 62 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/methane.sml000066400000000000000000000015151457665371200235600ustar00rootroot00000000000000 Alkanes Methane Methane Natural Gas Hydrogen carbide Carbane 5 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/methylpropane.sml000066400000000000000000000026301457665371200250250ustar00rootroot00000000000000 Alkanes Methylpropane Methylpropane 2-Methylpropane Isobutane 14 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/nonane.sml000066400000000000000000000044601457665371200234170ustar00rootroot00000000000000 Alkanes Nonane Nonane 29 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/octane.sml000066400000000000000000000041531457665371200234110ustar00rootroot00000000000000 Alkanes Octane Octane 26 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/pentadecane.sml000066400000000000000000000070251457665371200244100ustar00rootroot00000000000000 Alkanes Pentadecane Pentadecane --i--n--I---Pentadecane 47 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/pentane.sml000066400000000000000000000030551457665371200235720ustar00rootroot00000000000000 Alkanes Pentane Pentane Quintane 17 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/propane.sml000066400000000000000000000022441457665371200236030ustar00rootroot00000000000000 Alkanes Propane Propane Tricarbane 11 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/tetracosane.sml000066400000000000000000000124021457665371200244440ustar00rootroot00000000000000 Alkanes Tetracosane Tetracosane 74 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/tetradecane.sml000066400000000000000000000064431457665371200244230ustar00rootroot00000000000000 Alkanes Tetradecane Tetradecane 44 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/tridecane.sml000066400000000000000000000061261457665371200241000ustar00rootroot00000000000000 Alkanes Tridecane Tridecane 41 Atomes-GNU-1.1.14/data/library/molecules/Alkanes/undecane.sml000066400000000000000000000053411457665371200237220ustar00rootroot00000000000000 Alkanes Undecane Undecane Hendecane 35 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/000077500000000000000000000000001457665371200214245ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Alkenes/1-butene.sml000066400000000000000000000024371457665371200235670ustar00rootroot00000000000000 Alkenes 1-Butene But-1-ene Ethylethylene 1-Butylene α-Butylene 12 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/1-heptene.sml000066400000000000000000000034771457665371200237420ustar00rootroot00000000000000 Alkenes 1-Heptene Hept-1-ene 1-Heptene 21 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/1-hexene.sml000066400000000000000000000031641457665371200235570ustar00rootroot00000000000000 Alkenes 1-Hexene Hex-1-ene 1-Hexene 18 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/1-octene.sml000066400000000000000000000040031457665371200235510ustar00rootroot00000000000000 Alkenes 1-Octene Oct-1-ene 1-Octene 24 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/1-pentene.sml000066400000000000000000000026601457665371200237410ustar00rootroot00000000000000 Alkenes 1-Pentene Pent-1-ene 1-Pentene 15 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/2-methylbut-2-ene.sml000066400000000000000000000030001457665371200252120ustar00rootroot00000000000000 Alkenes 2-Methylbut-2-ene 2-Methylbut-2-ene β-Isoamylene Trimethylethylene Isoamylene 15 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/2-methylbuta-1_3-diene.sml000066400000000000000000000025331457665371200261230ustar00rootroot00000000000000 Alkenes Isoprene 2-Methylbuta-1,3-diene 2-Methyl-1,3-butadiene Isoprene 13 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/3z-3-ethylhepta-1_3-diene.sml000066400000000000000000000041171457665371200264470ustar00rootroot00000000000000 Alkenes (3Z)-3-Ethylhepta-1,3-diene (3Z)-3-Ethylhepta-1,3-diene 25 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/3z-penta-1_3-diene.sml000066400000000000000000000025141457665371200252460ustar00rootroot00000000000000 Alkenes (3Z)-1,3-Pentadiene (3Z)-Penta-1,3-diene (3Z)-1,3-Pentadiene 13 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/cis-2-butene.sml000066400000000000000000000024221457665371200243360ustar00rootroot00000000000000 Alkenes --i--cis--I---2-Butene --i--cis--I---But-2-ene --i--cis--I---β-Butylene 12 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/e-2-heptene.sml000066400000000000000000000035151457665371200241560ustar00rootroot00000000000000 Alkenes (E)-2-Heptene (E)-Hept-2-ene (E)-2-Heptene 21 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/e-2-hexene.sml000066400000000000000000000031441457665371200240000ustar00rootroot00000000000000 Alkenes (E)-2-Hexene (E)-Hex-2-ene 18 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/e-2-octene.sml000066400000000000000000000040171457665371200240010ustar00rootroot00000000000000 Alkenes (E)-2-Octene (E)-Oct-2-ene (E)-2-Octene 24 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/e-2-pentene.sml000066400000000000000000000026761457665371200241730ustar00rootroot00000000000000 Alkenes (E)-2-Pentene (E)-Pent-2-ene (E)-2-Pentene 15 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/e-3-heptene.sml000066400000000000000000000035151457665371200241570ustar00rootroot00000000000000 Alkenes (E)-3-Heptene (E)-Hept-3-ene (E)-3-Heptene 21 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/e-3-hexene.sml000066400000000000000000000031441457665371200240010ustar00rootroot00000000000000 Alkenes (E)-3-Hexene (E)-Hex-3-ene 18 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/e-3-octene.sml000066400000000000000000000040171457665371200240020ustar00rootroot00000000000000 Alkenes (E)-3-Octene (E)-Oct-3-ene (E)-3-Octene 24 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/e-4-octene.sml000066400000000000000000000040201457665371200237750ustar00rootroot00000000000000 Alkenes (E)-4-Octene (E)-Oct-4-ene (E)-4-Octene 24 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/ethene.sml000066400000000000000000000015251457665371200234140ustar00rootroot00000000000000 Alkenes Ethylene Ethene Ethylene 6 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/piperylene.sml000066400000000000000000000024661457665371200243250ustar00rootroot00000000000000 Alkenes Piperylene 1,3-Pentadiene Penta-1,3-diene 13 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/propene.sml000066400000000000000000000020761457665371200236160ustar00rootroot00000000000000 Alkenes Propene Propene Propylene Methyle ethylene 9 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/trans-2-butene.sml000066400000000000000000000024301457665371200247060ustar00rootroot00000000000000 Alkenes --i--trans--I---2-Butene --i--trans--I---But-2-ene --i--trans--I---β-Butylene 12 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/z-2-heptene.sml000066400000000000000000000035141457665371200242020ustar00rootroot00000000000000 Alkenes (Z)-2-Heptene (Z)-Hept-2-ene (Z)-2-Heptene 21 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/z-2-hexene.sml000066400000000000000000000032001457665371200240160ustar00rootroot00000000000000 Alkenes (Z)-2-Hexene (Z) Hex-2-ene (Z)-2-Hexene 18 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/z-2-octene.sml000066400000000000000000000040171457665371200240260ustar00rootroot00000000000000 Alkenes (Z)-2-Octene (Z)-Oct-2-ene (Z)-2-Octene 24 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/z-2-pentene.sml000066400000000000000000000026731457665371200242150ustar00rootroot00000000000000 Alkenes (Z)-2-Pentene (Z)-Pent-2-ene (Z)-2-Pentene 15 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/z-3-heptene.sml000066400000000000000000000035131457665371200242020ustar00rootroot00000000000000 Alkenes (Z)-3-Heptene (Z) Hept-3-ene (Z)-3-Heptene 21 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/z-3-hexene.sml000066400000000000000000000031771457665371200240340ustar00rootroot00000000000000 Alkenes (Z)-3-Hexene (Z)-Hex-3-ene (Z)-3-Hexene 18 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/z-3-octene.sml000066400000000000000000000040171457665371200240270ustar00rootroot00000000000000 Alkenes (Z)-3-Octene (Z) Oct-3-ene (Z)-3-Octene 24 Atomes-GNU-1.1.14/data/library/molecules/Alkenes/z-4-octene.sml000066400000000000000000000040221457665371200240240ustar00rootroot00000000000000 Alkenes (Z)-4-Octene (Z)-Oct-4-ene (Z)-4-Octene 24 Atomes-GNU-1.1.14/data/library/molecules/Alkynes/000077500000000000000000000000001457665371200214505ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Alkynes/ethyne.sml000066400000000000000000000013211457665371200234560ustar00rootroot00000000000000 Alkynes Ethyne Ethyne Acetylene 4 Atomes-GNU-1.1.14/data/library/molecules/Alkynes/propyne.sml000066400000000000000000000017231457665371200236640ustar00rootroot00000000000000 Alkynes Propyne Prop-1-yne Propyne Methyl acetylene Allylene 7 Atomes-GNU-1.1.14/data/library/molecules/Amides/000077500000000000000000000000001457665371200212445ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Amides/acetamide.sml000066400000000000000000000022071457665371200236760ustar00rootroot00000000000000 Amides Acetamide Acetamide Ethanamide Acetic acid amide 9 Atomes-GNU-1.1.14/data/library/molecules/Amides/n_n-dimethylacetamide.sml000066400000000000000000000027551457665371200262160ustar00rootroot00000000000000 Amides N,N-Dimethylacetamide N,N-Dimethylacetamide 15 Atomes-GNU-1.1.14/data/library/molecules/Amides/n_n-dimethylformamide.sml000066400000000000000000000025221457665371200262350ustar00rootroot00000000000000 Amides N,N-Dimethylformamide N,N-Dimethylformamide N,N-Dimethylmethanamide 12 Atomes-GNU-1.1.14/data/library/molecules/Amides/oxamide.sml000066400000000000000000000023411457665371200234070ustar00rootroot00000000000000 Amides Oxamide Oxamide Ethanediamide Oxalamide Oxamimidic acid 10 Atomes-GNU-1.1.14/data/library/molecules/Amides/urea.sml000066400000000000000000000021321457665371200227130ustar00rootroot00000000000000 Amides Urea Urea Carbamide Carbonyl diamide Carbonyldiamine 8 Atomes-GNU-1.1.14/data/library/molecules/Amides/urethane.sml000066400000000000000000000025611457665371200236000ustar00rootroot00000000000000 Amides Urethane Ethyl carbamate Urethane 13 Atomes-GNU-1.1.14/data/library/molecules/Amines/000077500000000000000000000000001457665371200212565ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Amines/ammonia.sml000066400000000000000000000014261457665371200234170ustar00rootroot00000000000000 Amines Ammonia Azane Ammonia Trihydrogen nitride Nitrogen trihydride 4 Atomes-GNU-1.1.14/data/library/molecules/Amines/azepane.sml000066400000000000000000000035041457665371200234200ustar00rootroot00000000000000 Amines Azepane Azepane Hexahydroazepine Hexamethyleneimine 20 Atomes-GNU-1.1.14/data/library/molecules/Amines/azepine.sml000066400000000000000000000025571457665371200234370ustar00rootroot00000000000000 Amines Azepine Azepine 14 Atomes-GNU-1.1.14/data/library/molecules/Amines/diethylamine.sml000066400000000000000000000030401457665371200244440ustar00rootroot00000000000000 Amines Diethylamine N-Ethylethanamine Diethylamine 16 Atomes-GNU-1.1.14/data/library/molecules/Amines/dimethylamine.sml000066400000000000000000000022241457665371200246240ustar00rootroot00000000000000 Amines Dimethylamine N-Methylmethanamine Dimethylamine 10 Atomes-GNU-1.1.14/data/library/molecules/Amines/ethylamine.sml000066400000000000000000000022121457665371200241270ustar00rootroot00000000000000 Amines Ethylamine Ethanamine Ethylamine 10 Atomes-GNU-1.1.14/data/library/molecules/Amines/isopropylamine.sml000066400000000000000000000025721457665371200250530ustar00rootroot00000000000000 Amines Isopropylamine Propan-2-amine Isopropylamine 2-Aminopropane 13 Atomes-GNU-1.1.14/data/library/molecules/Amines/methylamine.sml000066400000000000000000000020011457665371200243000ustar00rootroot00000000000000 Amines Methylamine Methanamine Methylamine Aminomethane Monomethylamine 7 Atomes-GNU-1.1.14/data/library/molecules/Amines/piperazine.sml000066400000000000000000000030731457665371200241440ustar00rootroot00000000000000 Amines Piperazine Piperazine Hexahydropyrazine Piperazidine 16 Atomes-GNU-1.1.14/data/library/molecules/Amines/piperidine.sml000066400000000000000000000032731457665371200241300ustar00rootroot00000000000000 Amines Piperidine Piperidine Hexahydropyridine Azacyclohexane Pentamethyleneamine Azinane 17 Atomes-GNU-1.1.14/data/library/molecules/Amines/pyrrolidine.sml000066400000000000000000000027551457665371200243440ustar00rootroot00000000000000 Amines Pyrrolidine Pyrrolidine Azolidine Azacyclopentane Tetrahydropyrrole Prolamine 14 Atomes-GNU-1.1.14/data/library/molecules/Amines/r-sec-butylamine.sml000066400000000000000000000030171457665371200251540ustar00rootroot00000000000000 Amines (R)-sec-butylamine (R)-Butan-2-amine (R)-sec-butylamine (R)-2-Aminobutane (R)-2-Butanamine 16 Atomes-GNU-1.1.14/data/library/molecules/Amines/s-sec-butylamine.sml000066400000000000000000000031601457665371200251540ustar00rootroot00000000000000 Amines (S)-sec-butylamine (S)-Butan-2-amine (S)-sec-butylamine (S)-2-Aminobutane (S)-2-Butanamine 16 Atomes-GNU-1.1.14/data/library/molecules/Amines/tert-butylamine.sml000066400000000000000000000032311457665371200251170ustar00rootroot00000000000000 Amines tert-butylamine 2-Methylpropan-2-amine tert-butylamine 2-Aminoisobutane 2-Amino-2-methylpropane Dimethylethylamine 16 Atomes-GNU-1.1.14/data/library/molecules/Amines/triethylamine.sml000066400000000000000000000036711457665371200246600ustar00rootroot00000000000000 Amines Triethylamine N,N-Diethylethanamine Triethylamine 22 Atomes-GNU-1.1.14/data/library/molecules/Amines/triethylenediamine.sml000066400000000000000000000035011457665371200256550ustar00rootroot00000000000000 Amines Triethylenediamine 1,4-Diazabicyclo[2.2.2]octane Triethylenediamine 20 Atomes-GNU-1.1.14/data/library/molecules/Amines/trimethylamine.sml000066400000000000000000000025471457665371200250360ustar00rootroot00000000000000 Amines Trimethylamine N,N-Dimethylmethanamine Trimethylamine 13 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/000077500000000000000000000000001457665371200222505ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-alanine.sml000066400000000000000000000026111457665371200246150ustar00rootroot00000000000000 Amino acids Alanine-(D) (D)-Alanine (2R)-2-Aminopropanoicacid 13 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-allo-threonine.sml000066400000000000000000000032531457665371200261310ustar00rootroot00000000000000 Amino acids Allo-threonine-(D) (D)-Allo-threonine (2R,3R)-2-Amino-3-hydroxybutanoicacid 17 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-arginine.sml000066400000000000000000000044111457665371200250020ustar00rootroot00000000000000 Amino acids Arginine-(D) (D)-Arginine (2R)-2-Amino-5-(diaminomethylideneamino)pentanoicacid 26 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-asparagine.sml000066400000000000000000000032451457665371200253240ustar00rootroot00000000000000 Amino acids Asparagine-(D) (D)-Asparagine (2R)-2-Amino-3-carbamoylpropanoicacid 17 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-aspartic_acid.sml000066400000000000000000000031331457665371200257740ustar00rootroot00000000000000 Amino acids Aspartic acid-(D) (D)-Aspartic acid (2R)-2-Aminobutanedioicacid 16 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-cysteine.sml000066400000000000000000000027721457665371200250410ustar00rootroot00000000000000 Amino acids Cysteine-(D) (D)-Cysteine (2S)-2-Amino-3-sulfanylpropanoicacid 14 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-glutamic_acid.sml000066400000000000000000000034511457665371200257760ustar00rootroot00000000000000 Amino acids Glutamic acid-(D) (D)-glutamic acid (2R)-2-Aminopentanedioic acid 19 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-glutamine.sml000066400000000000000000000035521457665371200252000ustar00rootroot00000000000000 Amino acids Glutamine-(D) (D)-Glutamine (2R)-2-Amino-4-carbamoylbutanoic acid 20 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-histidine.sml000066400000000000000000000035621457665371200251740ustar00rootroot00000000000000 Amino acids Histidine-(D) (D)-Histidine (2R)-2-Amino-3-(3H-imidazol-4-yl)propanoic acid 20 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-isoleucine.sml000066400000000000000000000037631457665371200253560ustar00rootroot00000000000000 Amino acids Isoleucine-(D) (D)-Isoleucine (2R,3R)-2-Amino-3-methylpentanoic acid 22 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-leucine.sml000066400000000000000000000037521457665371200246410ustar00rootroot00000000000000 Amino acids Leucine-(D) (D)-Leucine (2R)-2-Amino-4-methylpentanoic acid 22 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-lysine.sml000066400000000000000000000041471457665371200245170ustar00rootroot00000000000000 Amino acids Lysine-(D) (D)-Lysine (2R)-2,6-Diaminohexanoic acid 24 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-methionine.sml000066400000000000000000000036221457665371200253500ustar00rootroot00000000000000 Amino acids Methionine-(D) (D)-Methionine (2R)-2-Amino-4-methylsulfanylbutanoic acid 20 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-phenylalanine.sml000066400000000000000000000040711457665371200260370ustar00rootroot00000000000000 Amino acids Phenylalanine-(D) (D)-Phenylalanine (2R)-2-Amino-3-phenylpropanoic acid 23 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-proline.sml000066400000000000000000000032341457665371200246600ustar00rootroot00000000000000 Amino acids Proline-(D) (D)-Proline (2R)-Pyrrolidine-2-carboxylic acid 17 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-serine.sml000066400000000000000000000027231457665371200244770ustar00rootroot00000000000000 Amino acids Serine-(D) (D)-Serine (2R)-2-Amino-3-hydroxypropanoic acid 14 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-threonine.sml000066400000000000000000000032421457665371200252020ustar00rootroot00000000000000 Amino acids Threonine-(D) (D)-Threonine (2R,3S)-2-Amino-3-hydroxybutanoic acid 17 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-tryptophan.sml000066400000000000000000000045141457665371200254220ustar00rootroot00000000000000 Amino acids Tryptophan-(D) (D)-Tryptophan (2R)-2-Amino-3-(1H-indol-3-yl)propanoic acid 27 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-tyrosine.sml000066400000000000000000000041741457665371200250700ustar00rootroot00000000000000 Amino acids Tyrosine-(D) (D)-Tyrosine (2R)-2-Amino-3-(4-hydroxyphenyl)propanoic acid 24 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/d-valine.sml000066400000000000000000000034401457665371200244650ustar00rootroot00000000000000 Amino acids Valine-(D) (D)-Valine (2R)-2-Amino-3-methylbutanoic acid 19 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/glycine.sml000066400000000000000000000022671457665371200244260ustar00rootroot00000000000000 Amino acids Glycine-(D) Glycine 2-Aminoacetic acid 10 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-4-nitrophenylalanine.sml000066400000000000000000000043241457665371200272650ustar00rootroot00000000000000 Amino acids 4-Nitrophenylalanine-(L) (L)-4-Nitrophenylalanine (S)-2-Amino-3-(4-nitrophenyl)propanoic acid 25 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-alanine.sml000066400000000000000000000026131457665371200246270ustar00rootroot00000000000000 Amino acids Alanine-(L) (L)-Alanine (2S)-2-Aminopropanoic acid 13 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-allo-isoleucine.sml000066400000000000000000000037751457665371200263160ustar00rootroot00000000000000 Amino acids Allo-isoleucine-(L) (L)-Allo-isoleucine (2S,3R)-2-Amino-3-methylpentanoic acid 22 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-arginine.sml000066400000000000000000000044141457665371200250150ustar00rootroot00000000000000 Amino acids Arginine-(L) (L)-Arginine (2S)-2-Amino-5-(diaminomethylideneamino)pentanoic acid 26 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-asparagine.sml000066400000000000000000000032441457665371200253330ustar00rootroot00000000000000 Amino acids Asparagine-(L) (L)-Asparagine (2S)-2-Amino-3-carbamoylpropanoic acid 17 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-aspartic_acid.sml000066400000000000000000000031341457665371200260050ustar00rootroot00000000000000 Amino acids Aspartic-(L) (L)-Aspartic acid (2S)-2-Aminobutanedioic acid 16 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-cysteine.sml000066400000000000000000000027771457665371200250560ustar00rootroot00000000000000 Amino acids Cysteine-(L) (L)-Cysteine (2R)-2-Amino-3-sulfanylpropanoic acid 14 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-glutamic_acid.sml000066400000000000000000000034461457665371200260120ustar00rootroot00000000000000 Amino acids Glutamic acid-(L) (L)-Glutamic acid (2S)-2-Aminopentanedioic acid 19 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-glutamine.sml000066400000000000000000000035551457665371200252130ustar00rootroot00000000000000 Amino acids Glutamine-(L) (L)-Glutamine (2S)-2-Amino-4-carbamoylbutanoic acid 20 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-histidine.sml000066400000000000000000000035601457665371200252020ustar00rootroot00000000000000 Amino acids Histidine-(L) (L)-Histidine (2S)-2-Amino-3-(3H-imidazol-4-yl)propanoic acid 20 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-isoleucine.sml000066400000000000000000000037601457665371200253630ustar00rootroot00000000000000 Amino acids Isoleucine-(L) (L)-Isoleucine (2S,3S)-2-Amino-3-methylpentanoic acid 22 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-leucine.sml000066400000000000000000000037561457665371200246550ustar00rootroot00000000000000 Amino acids Leucine-(L) (L)-Leucine (2S)-2-Amino-4-methylpentanoic acid 22 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-lysine.sml000066400000000000000000000041461457665371200245260ustar00rootroot00000000000000 Amino acids Lysine-(L) (L)-Lysine (2S)-2,6-Diaminohexanoic acid 24 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-methionine.sml000066400000000000000000000036241457665371200253620ustar00rootroot00000000000000 Amino acids Methionine-(L) (L)-Methionine (2S)-2-Amino-4-methylsulfanylbutanoic acid 20 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-phenylalanine.sml000066400000000000000000000040671457665371200260540ustar00rootroot00000000000000 Amino acids Phenylalanine-(L) (L)-Phenylalanine (2S)-2-Amino-3-phenylpropanoic acid 23 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-proline.sml000066400000000000000000000032331457665371200246670ustar00rootroot00000000000000 Amino acids Proline-(L) (L)-Proline (2S)-Pyrrolidine-2-carboxylic acid 17 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-serine.sml000066400000000000000000000027251457665371200245110ustar00rootroot00000000000000 Amino acids Serine-(L) (L)-Serine (2S)-2-Amino-3-hydroxypropanoic acid 14 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-threonine.sml000066400000000000000000000032451457665371200252150ustar00rootroot00000000000000 Amino acids Threonine-(L) (L)-Threonine (2S,3R)-2-Amino-3-hydroxybutanoic acid 17 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-tryptophan.sml000066400000000000000000000045051457665371200254320ustar00rootroot00000000000000 Amino acids Tryptophan-(L) (L)-Tryptophan (2S)-2-Amino-3-(1H-indol-3-yl)propanoic acid 27 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-tyrosine.sml000066400000000000000000000041721457665371200250760ustar00rootroot00000000000000 Amino acids Tyrosine-(L) (L)-Tyrosine (2S)-2-Amino-3-(4-hydroxyphenyl)propanoic acid 24 Atomes-GNU-1.1.14/data/library/molecules/Amino_acids/l-valine.sml000066400000000000000000000034351457665371200245010ustar00rootroot00000000000000 Amino acids Valine-(L) (L)-Valine (2S)-2-Amino-3-methylbutanoic acid 19 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/000077500000000000000000000000001457665371200217645ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Aromatics/1h-indole.sml000066400000000000000000000027741457665371200242730ustar00rootroot00000000000000 Aromatics 1H-Indole 1H-Indole 16 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/2h-chromene.sml000066400000000000000000000032451457665371200246140ustar00rootroot00000000000000 Aromatics 2H-Chromene 2H-1-benzopyran 2H-Chromene 18 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/4h-chromene.sml000066400000000000000000000032461457665371200246170ustar00rootroot00000000000000 Aromatics 4H-Chromene 4H-1-benzopyran 4H-Chromene 18 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/acenaphthene.sml000066400000000000000000000040171457665371200251260ustar00rootroot00000000000000 Aromatics Acenaphthene 1,2-Dihydroacenaphthylene Acenaphthene 1,8-Ethylenenaphthalene Tricyclo[6.3.1.0--b--4,12--e--]dodeca-1(12),4,6,8,10-pentaene 22 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/acenaphthenequinone.sml000066400000000000000000000035451457665371200265320ustar00rootroot00000000000000 Aromatics Acenaphthenequinone Acenaphthylene-1,2-dione Acenaphthenequinone Acenaphthenedione 20 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/acenaphthylene.sml000066400000000000000000000035331457665371200254750ustar00rootroot00000000000000 Aromatics Acenaphthylene Acenaphthylene Acenaphthalene Tricyclo[6.3.1.0--b--4,12--e--]dodeca-1(12),2,4,6,8,10-hexaene 20 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/acridine.sml000066400000000000000000000040361457665371200242620ustar00rootroot00000000000000 Aromatics Acridine Acridine Dibenzo[b,e]pyridine 2,3-Benzoquinoline 23 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/aniline.sml000066400000000000000000000027431457665371200241260ustar00rootroot00000000000000 Aromatics Aniline Aniline Benzenamine Phenylamine Aminobenzene Benzamine 14 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/anisole.sml000066400000000000000000000031321457665371200241320ustar00rootroot00000000000000 Aromatics Anisole Anisole Methoxybenzene Methyl Phenyl ether Phenoxymethane 16 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/anthracene.sml000066400000000000000000000041111457665371200246060ustar00rootroot00000000000000 Aromatics Anthracene Anthracene Tricyclo[8.4.0.0--b--3,8--e--]tetradeca-1,3,5,7,9,11,13-heptaene 24 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/benzaldehyde.sml000066400000000000000000000030071457665371200251370ustar00rootroot00000000000000 Aromatics Benzaldehyde Benzaldehyde Benzenecarbaldehyde Benzenecarboxaldehyde Phenylmethanal Benzoic aldehyde 14 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/benzene.sml000066400000000000000000000023421457665371200241300ustar00rootroot00000000000000 Aromatics Benzene Benzene Benzol 12 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/benzofuran.sml000066400000000000000000000030221457665371200246470ustar00rootroot00000000000000 Aromatics Benzofuran 1-Benzofuran Benzofuran Coumarone Benzo[b]furan 15 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/benzoic_acid.sml000066400000000000000000000030401457665371200251070ustar00rootroot00000000000000 Aromatics Benzoic acid Benzoic acid Benzenecarboxylic acid E 210 Dracylic acid 15 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/benzothiophene.sml000066400000000000000000000031051457665371200255210ustar00rootroot00000000000000 Aromatics Benzothiophene Benzo[b]thiophene Benzothiophene 1-Benzothiophene Thianaphthene Benzothiofuran 15 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/benzoyl_chloride.sml000066400000000000000000000027211457665371200260360ustar00rootroot00000000000000 Aromatics Benzoyl chloride Benzoyl chloride Benzenecarbonyl chloride 14 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/caffeine.sml000066400000000000000000000043001457665371200242360ustar00rootroot00000000000000 Aromatics Caffeine Caffeine Guaranine Theine Trimethylxanthine 1,3,7-Trimethyl-1H-purine-2,6(3H,7H)-dione 24 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/carbazole.sml000066400000000000000000000037511457665371200244510ustar00rootroot00000000000000 Aromatics Carbazole 9H-Carbazole 9-Azafluorene Dibenzopyrrole Diphenylenimine 22 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/chromone.sml000066400000000000000000000031641457665371200243170ustar00rootroot00000000000000 Aromatics Chromone Chromen-4-one Chromone 1,4-Benzopyrone 17 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/cinnoline.sml000066400000000000000000000030361457665371200244610ustar00rootroot00000000000000 Aromatics Cinnoline Cinnoline Benzopyridazine 16 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/coumarin.sml000066400000000000000000000032341457665371200243200ustar00rootroot00000000000000 Aromatics Coumarin 2H-chromen-2-one Coumarin Chromen-2-one 1-Benzopyran-2-one 17 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/cyclopentadienyl.sml000066400000000000000000000021551457665371200260520ustar00rootroot00000000000000 Aromatics Cyclopentadienyl Cyclopentadienyl Cp 10 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/fluorene.sml000066400000000000000000000040221457665371200243160ustar00rootroot00000000000000 Aromatics Fluorene 9H-Fluorene Fluorene Tricyclo[7.4.0.0--b--2,7--e--]trideca-2,4,6,9,11,13-hexaene 23 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/indene.sml000066400000000000000000000032211457665371200237410ustar00rootroot00000000000000 Aromatics Indene 1H-Indene Bicyclo[4.3.0]nona-1,3,5,7-tetraene Benzocyclopentadiene Indonaphthene 17 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/isoquinoline.sml000066400000000000000000000032031457665371200252150ustar00rootroot00000000000000 Aromatics Isoquinoline Isoquinoline Benzo[c]pyridine 2-Benzanine 17 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/naphthalene.sml000066400000000000000000000033101457665371200247650ustar00rootroot00000000000000 Aromatics Naphthalene Naphthalene Camphor tar Naphthaline Bicyclo[4.4.0]deca-1,3,5,7,9-pentaene 18 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/naphthyridine.sml000066400000000000000000000031141457665371200253460ustar00rootroot00000000000000 Aromatics Naphthyridine 1,8-Naphthyridine Naphthyridine 1,8-Diazanaphthalene 16 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/nitrobenzene.sml000066400000000000000000000027361457665371200252130ustar00rootroot00000000000000 Aromatics Nitrobenzene Nitrobenzene Nitrobenzol Oil of mirbane 14 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/phenanthrene.sml000066400000000000000000000041061457665371200251610ustar00rootroot00000000000000 Aromatics Phenanthrene Phenanthrene Tricyclo[8.4.0.0--b--2,7--e--]tetradeca-1,3,5,7,9,11,13-heptaene 24 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/phenanthroline.sml000066400000000000000000000036721457665371200255270ustar00rootroot00000000000000 Aromatics Phenanthroline 1,10-Phenanthroline Phenanthroline 22 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/phenol.sml000066400000000000000000000026441457665371200237740ustar00rootroot00000000000000 Aromatics Phenol Phenol Benzenol Carbolic acid Phenylic acid Hydroxybenzene 13 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/phthalimide.sml000066400000000000000000000031551457665371200247750ustar00rootroot00000000000000 Aromatics Phthalimide Isoindole-1,3-dione Phthalimide 1,3-dioxoisoindoline 16 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/purine.sml000066400000000000000000000025071457665371200240070ustar00rootroot00000000000000 Aromatics Purine 9H-Purine Purine 13 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/quinazoline.sml000066400000000000000000000032031457665371200250350ustar00rootroot00000000000000 Aromatics Quinazoline Quinazoline 1,3-diazanaphthalene Benzopyrimidine Phenmiazine Benzo-1,3-diazine 16 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/quinoline.sml000066400000000000000000000032771457665371200245150ustar00rootroot00000000000000 Aromatics Quinoline Quinoline 1-Benzopyridine Benzo[b]pyridine 2-Azabicyclo[4.4.0]deca-1(6),2,4,7,9-pentaene 17 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/tetralin.sml000066400000000000000000000037141457665371200243300ustar00rootroot00000000000000 Aromatics Tetralin 1,2,3,4-tetrahydronaphthalene Bacticin benzocyclohexane THN 22 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/toluene.sml000066400000000000000000000027731457665371200241650ustar00rootroot00000000000000 Aromatics Toluene Toluene Methylbenzene Phenylmethane Toluol Anisen 15 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/uric_acid.sml000066400000000000000000000033011457665371200244200ustar00rootroot00000000000000 Aromatics Uric acid 7,9-Dihydro-3H-purine-2,6,8-trione Uric acid 2,6,8-Trioxypurine 2,6,8-Trihydroxypurine 1H-Purine-2,6,8-triol 16 Atomes-GNU-1.1.14/data/library/molecules/Aromatics/xanthene.sml000066400000000000000000000041631457665371200243170ustar00rootroot00000000000000 Aromatics Xanthene 9H-Xanthene Xanthene Dibenzo[a,e]pyran 10H-9-oxaanthracene 24 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/000077500000000000000000000000001457665371200233045ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/acetic_acid.sml000066400000000000000000000021141457665371200262270ustar00rootroot00000000000000 Carboxylic acids Acetic acid Acetic acid Ethanoic acid Hydrogen acetate Vinegar 8 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/butanoic_acid.sml000066400000000000000000000027541457665371200266150ustar00rootroot00000000000000 Carboxylic acids Butanoic acid Butanoic acid Butyric acid Ethylacetic acid Propanecarboxylic acid 14 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/citric_acid.sml000066400000000000000000000037011457665371200262570ustar00rootroot00000000000000 Carboxylic acids Citric acid 2-Hydroxypropane-1,2,3-tricarboxylic acid Citric acid 3-Carboxy-3-hydroxypentanedioic acid 21 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/d-lactic_acid.sml000066400000000000000000000025151457665371200264640ustar00rootroot00000000000000 Carboxylic acids (D)-Lactic acid (R)-2-Hydroxypropanoic acidd (D)-Lactic acid Milk acid 12 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/d-malic_acid.sml000066400000000000000000000031071457665371200263100ustar00rootroot00000000000000 Carboxylic acids (D)-Malic acid (R)-2-Hydroxybutanedioic acid (D)-Malic acid Hydroxybutanedioic acid 2-Hydroxysuccinic acid 15 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/d-tartaric_acid.sml000066400000000000000000000032051457665371200270330ustar00rootroot00000000000000 Carboxylic acids (D)-Tartaric acid (2S,3S)-2,3-Dihydroxybutanedioic acid (D)-Tartaric acid Threaric acid Racemic acid 16 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/dichloroacetic_acid.sml000066400000000000000000000022301457665371200277520ustar00rootroot00000000000000 Carboxylic acids Dichloroacetic acid Dichloroacetic acid Dichloroethanoic acid Bichloroacetic acid 2,2-Dichloroacetic acid 8 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/formic_acid.sml000066400000000000000000000016121457665371200262600ustar00rootroot00000000000000 Carboxylic acids Formic acid Formic acid Methanoic acid Carbonous acid Formylic acid 5 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/isobutyric_acid.sml000066400000000000000000000027721457665371200272050ustar00rootroot00000000000000 Carboxylic acids Isobutyric acid 2-Methylpropanoic acid Isobutyric acid 2-Methylpropionic acid Isobutanoic acid 14 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/l-ascorbic_acid.sml000066400000000000000000000034401457665371200270200ustar00rootroot00000000000000 Carboxylic acids (L)-Ascorbic acid (R)-3,4-dihydroxy-5-((S)-1,2-dihydroxyethyl)furan-2(5H)-one (L)-Ascorbic acid Vitamic C Ascorbate 20 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/l-lactic_acid.sml000066400000000000000000000025161457665371200264750ustar00rootroot00000000000000 Carboxylic acids (L)-Lactic acid (S)-2-Hydroxypropanoic acidd (L)-Lactic acid Milk acid 12 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/l-malic_acid.sml000066400000000000000000000031071457665371200263200ustar00rootroot00000000000000 Carboxylic acids (L)-Malic acid (S)-2-Hydroxybutanedioic acid (L)-Malic acid Hydroxybutanedioic acid 2-Hydroxysuccinic acid 15 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/l-tartaric_acid.sml000066400000000000000000000032041457665371200270420ustar00rootroot00000000000000 Carboxylic acids (L)-Tartaric acid (2R,3R)-2,3-Dihydroxybutanedioic acid (L)-Tartaric acid Threaric acid Racemic acid 16 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/maleic_acid.sml000066400000000000000000000025051457665371200262350ustar00rootroot00000000000000 Carboxylic acids Maleic acid ((2Z)-But-2-enedioic acid Maleic acid Maleinic acid 12 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/oxalic_acid.sml000066400000000000000000000020601457665371200262560ustar00rootroot00000000000000 Carboxylic acids Oxalic acid Oxalic acid Ethanedioic acid Wood bleach 8 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/propanoic_acid.sml000066400000000000000000000024101457665371200267700ustar00rootroot00000000000000 Carboxylic acids Propanoic acid Propanoic acid Propionic acid Ethanecarboxylic acid 11 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/trichloroacetic_acid.sml000066400000000000000000000022501457665371200301560ustar00rootroot00000000000000 Carboxylic acids Trichloroacetic acid Trichloroacetic acid Trichloroethanoic acid 2,2,2-Trichloroacetic acid 2,2,2-Trichloroethanoic acid 8 Atomes-GNU-1.1.14/data/library/molecules/Carboxylic_acids/trifluoroacetic_acid.sml000066400000000000000000000023101457665371200301730ustar00rootroot00000000000000 Carboxylic acids Trifluoroacetic acid Trifluoroacetic acid Perfluoroacetic acid Trifluoroethanoic acid 2,2,2-Trifluoroacetic 2,2,2-Trifluoroethanoic acid 8 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/000077500000000000000000000000001457665371200227465ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/abietic_acid.sml000066400000000000000000000077111457665371200260510ustar00rootroot00000000000000 Cyclic alkanes Abietic acid Abieta-7,13-dien-18-oic acid Abietic acid Abietinic acid Sylvic acid 52 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/adamantane.sml000066400000000000000000000040531457665371200255560ustar00rootroot00000000000000 Cyclic alkanes Adamantane Tricyclo[3.3.1.1--b--3,7--e--]decane Adamantane 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/camphene.sml000066400000000000000000000043711457665371200252500ustar00rootroot00000000000000 Cyclic alkanes Camphene 2,2-Dimethyl-3-methylidenebicyclo[2.2.1]heptane Camphene 2,2-Dimethyl-3-methanylidenebicyclo[2.2.1]heptane 26 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cis-decahydronaphthalene.sml000066400000000000000000000046111457665371200304130ustar00rootroot00000000000000 Cyclic alkanes --i--cis--I---Decahydronaphthalene --i--cis--I---Decahydronaphthalene --i--cis--I---Bicyclo[4.4.0]decane --i--cis--I---Decalin 28 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cubane.sml000066400000000000000000000030551457665371200247230ustar00rootroot00000000000000 Cyclic alkanes Cubane Cubane Pentacyclo[4.2.0.0--b--2,5--e--.0--b--3,8--e--.0--b--4,7--e--]octane 16 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cyclobutane.sml000066400000000000000000000023301457665371200257710ustar00rootroot00000000000000 Cyclic alkanes Cyclobutane Cyclobutane 12 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cyclodecane.sml000066400000000000000000000046061457665371200257420ustar00rootroot00000000000000 Cyclic alkanes Cyclodecane Cyclodecane 30 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cycloheptane.sml000066400000000000000000000034621457665371200261460ustar00rootroot00000000000000 Cyclic alkanes Cycloheptane Cycloheptane 21 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cyclohexane-chair.sml000066400000000000000000000032171457665371200270540ustar00rootroot00000000000000 Cyclic alkanes Cyclohexane---i--chair--I-- Cyclohexane---i--chair--I-- 18 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cyclohexane-twist-boat.sml000066400000000000000000000032221457665371200300570ustar00rootroot00000000000000 Cyclic alkanes Cyclohexane---i--twist-boat--I-- Cyclohexane---i--twist-boat--I-- 18 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cyclononane.sml000066400000000000000000000042761457665371200260040ustar00rootroot00000000000000 Cyclic alkanes Cyclononane Cyclononane 27 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cyclooctane.sml000066400000000000000000000037721457665371200257770ustar00rootroot00000000000000 Cyclic alkanes Cyclooctane Cyclooctane 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cyclopentane.sml000066400000000000000000000027041457665371200261520ustar00rootroot00000000000000 Cyclic alkanes Cyclopentane Cyclopentane Pentamethylene 15 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/cyclopropane.sml000066400000000000000000000020161457665371200261600ustar00rootroot00000000000000 Cyclic alkanes Cyclopropane Cyclopropane 9 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/norbornane.sml000066400000000000000000000034101457665371200256240ustar00rootroot00000000000000 Cyclic alkanes Norbornane Bicyclo[2.2.1]heptane Norbornane Norcamphane Norbornylane 19 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/r-camphor.sml000066400000000000000000000045261457665371200253620ustar00rootroot00000000000000 Cyclic alkanes (R)-Camphor 1,7,7-Trimethylbicyclo[2,2,1]heptan-2-one (R)-Camphor 2-Bornanone Bornan-2-one 27 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkanes/trans-decahydronaphthalene.sml000066400000000000000000000046231457665371200307670ustar00rootroot00000000000000 Cyclic alkanes --i--trans--I---Decahydronaphthalene --i--trans--I---Decahydronaphthalene --i--trans--I---Bicyclo[4.4.0]decane --i--trans--I---Decalin 28 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/000077500000000000000000000000001457665371200227525ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cyclohepta-1_3-diene.sml000066400000000000000000000031351457665371200272660ustar00rootroot00000000000000 Cyclic alkenes Cyclohepta-1,3-diene Cyclohepta-1,3-diene 1,3-Cycloheptadiene 17 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cyclohepta-1_3_5-triene.sml000066400000000000000000000030201457665371200277050ustar00rootroot00000000000000 Cyclic alkenes Cycloheptatriene Cyclohepta-1,3,5-triene Cycloheptatriene CHT 1--i--H--I---[7]Annulene 15 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cyclohepta-1_4-diene.sml000066400000000000000000000031311457665371200272630ustar00rootroot00000000000000 Cyclic alkenes Cyclohepta-1,4-diene Cyclohepta-1,4-diene 1,4-Cycloheptadiene 17 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cyclohexa-1_3-diene.sml000066400000000000000000000027141457665371200271140ustar00rootroot00000000000000 Cyclic alkenes Cyclohexa-1,3-diene Cyclohexa-1,3-diene 1,3-Cyclohexadiene 1,2-Dihydrobenzene 1,3-CHD 14 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cyclohexa-1_4-diene.sml000066400000000000000000000027131457665371200271140ustar00rootroot00000000000000 Cyclic alkenes Cyclohexa-1,4-diene Cyclohexa-1,4-diene 1,4-Cyclohexadiene 1,4-Dihydrobenzene 1,4-CHD 14 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cyclohexene.sml000066400000000000000000000031121457665371200257720ustar00rootroot00000000000000 Cyclic alkenes Cyclohexene Cyclohexene Tetrahydrobenzene Benzenetetrahydride Hexanaphthylene 16 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cycloocta-1_3-diene.sml000066400000000000000000000034401457665371200271120ustar00rootroot00000000000000 Cyclic alkenes Cycloocta-1,3-diene Cycloocta-1,3-diene 1,3-Cyclooctadiene 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_5-triene.sml000066400000000000000000000032001457665371200275320ustar00rootroot00000000000000 Cyclic alkenes Cycloocta-1,3,5-triene Cycloocta-1,3,5-triene 18 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_5_7-tetraene.sml000066400000000000000000000030601457665371200303050ustar00rootroot00000000000000 Cyclic alkenes Cycloocta-1,3,5,7-tetraene Cycloocta-1,3,5,7-tetraene [8]Annulene COT 16 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cycloocta-1_3_6-triene.sml000066400000000000000000000030231457665371200275360ustar00rootroot00000000000000 Cyclic alkenes Cycloocta-1,3,6-triene Cycloocta-1,3,6-triene 18 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cyclopenta-1_3-diene.sml000066400000000000000000000023511457665371200272730ustar00rootroot00000000000000 Cyclic alkenes Cyclopenta-1,3-diene Cyclopenta-1,3-diene 1,3-Cyclopentadiene Pyropentylene 11 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/cyclopentene.sml000066400000000000000000000024351457665371200261630ustar00rootroot00000000000000 Cyclic alkenes Cyclopentene Cyclopentene 13 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/e-cyclooctene.sml000066400000000000000000000033371457665371200262260ustar00rootroot00000000000000 Cyclic alkenes (E)-Cyclooctene (E)-Cyclooctene --i--trans--I---Cyclooctene 22 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/z-cycloheptene.sml000066400000000000000000000033411457665371200264210ustar00rootroot00000000000000 Cyclic alkenes (Z)-Cycloheptene (Z)-Cycloheptene --i--cis--I---Cycloheptene 19 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_alkenes/z-cyclooctene.sml000066400000000000000000000036431457665371200262530ustar00rootroot00000000000000 Cyclic alkenes (Z)-Cyclooctene (Z)-Cyclooctene --i--cis--I---Cyclooctene 22 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/000077500000000000000000000000001457665371200226345ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-allopyranose.sml000066400000000000000000000040411457665371200273640ustar00rootroot00000000000000 Sugars (Cyclics) Allopyranose-α-D α-D-Allopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-arabinopyranose.sml000066400000000000000000000034441457665371200300560ustar00rootroot00000000000000 Sugars (Cyclics) Arabinopyranose-α-D α-D-Arabinopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-fucopyranose.sml000066400000000000000000000037461457665371200274040ustar00rootroot00000000000000 Sugars (Cyclics) Fucopyranose-α-D α-D-Fucopyranose 23 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-galactopyranose.sml000066400000000000000000000040551457665371200300540ustar00rootroot00000000000000 Sugars (Cyclics) Galactopyranose-α-D α-D-Galactopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-galacturonopyranose.sml000066400000000000000000000036621457665371200307630ustar00rootroot00000000000000 Sugars (Cyclics) Galacturonopyranose-α-D α-D-Galacturonopyranose 22 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-glucopyranose.sml000066400000000000000000000040361457665371200275520ustar00rootroot00000000000000 Sugars (Cyclics) Glucopyranose-α-D α-D-Glucopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-glucuronopyranose.sml000066400000000000000000000036621457665371200304620ustar00rootroot00000000000000 Sugars (Cyclics) Glucuronopyranose-α-D α-D-Glucuronopyranose 22 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-gulopyranose.sml000066400000000000000000000040461457665371200274100ustar00rootroot00000000000000 Sugars (Cyclics) Gulopyranose-α-D α-D-Gulopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-idopyranose.sml000066400000000000000000000040501457665371200272100ustar00rootroot00000000000000 Sugars (Cyclics) Idopyranose-α-D α-D-Idopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-lyxopyranose.sml000066400000000000000000000034341457665371200274350ustar00rootroot00000000000000 Sugars (Cyclics) Lyxopyranose-α-D α-D-Lyxopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-mannopyranose.sml000066400000000000000000000040601457665371200275460ustar00rootroot00000000000000 Sugars (Cyclics) Mannopyranose-α-D α-D-Mannopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-psicopyranose.sml000066400000000000000000000040371457665371200275570ustar00rootroot00000000000000 Sugars (Cyclics) Psicopyranose-α-D α-D-Psicopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-rhamnopyranose.sml000066400000000000000000000037421457665371200277300ustar00rootroot00000000000000 Sugars (Cyclics) Rhamnopyranose-α-D α-D-Rhamnopyranose 23 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-ribopyranose.sml000066400000000000000000000034371457665371200274000ustar00rootroot00000000000000 Sugars (Cyclics) Ribopyranose-α-D α-D-Ribopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-tagatopyranose.sml000066400000000000000000000040531457665371200277170ustar00rootroot00000000000000 Sugars (Cyclics) Tagatopyranose-α-D α-D-Tagatopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-talopyranose.sml000066400000000000000000000040531457665371200273770ustar00rootroot00000000000000 Sugars (Cyclics) Talopyranose-α-D α-D-Talopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-d-xylopyranose.sml000066400000000000000000000034341457665371200274350ustar00rootroot00000000000000 Sugars (Cyclics) Xylopyranose-α-D α-D-Xylopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-l-arabinopyranose.sml000066400000000000000000000034471457665371200300710ustar00rootroot00000000000000 Sugars (Cyclics) Arabinopyranose-α-L α-L-Arabinopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-l-fucopyranose.sml000066400000000000000000000037471457665371200274150ustar00rootroot00000000000000 Sugars (Cyclics) Fucopyranose-α-L α-L-Fucopyranose 23 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-l-galactopyranose.sml000066400000000000000000000040541457665371200300630ustar00rootroot00000000000000 Sugars (Cyclics) Galactopyranose-α-L α-L-Galactopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-l-lyxopyranose.sml000066400000000000000000000034361457665371200274470ustar00rootroot00000000000000 Sugars (Cyclics) Lyxopyranose-α-L α-L-Lyxopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-l-rhamnopyranose.sml000066400000000000000000000037571457665371200277460ustar00rootroot00000000000000 Sugars (Cyclics) Rhamnopyranose-α-L α-L-Rhamnopyranose 23 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-l-ribopyranose.sml000066400000000000000000000034301457665371200274010ustar00rootroot00000000000000 Sugars (Cyclics) Ribopyranose-α-L α-L-Ribopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-l-sorbopyranose.sml000066400000000000000000000040421457665371200275720ustar00rootroot00000000000000 Sugars (Cyclics) Sorbopyranose-α-L α-L-Sorbopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/alpha-l-xylopyranose.sml000066400000000000000000000034401457665371200274420ustar00rootroot00000000000000 Sugars (Cyclics) Xylopyranose-α-L α-L-Xylopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-allopyranose.sml000066400000000000000000000040431457665371200272140ustar00rootroot00000000000000 Sugars (Cyclics) Allopyranose-β-D β-D-Allopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-arabinopyranose.sml000066400000000000000000000034351457665371200277040ustar00rootroot00000000000000 Sugars (Cyclics) Arabinopyranose-β-D β-D-Arabinopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-fructopyranose.sml000066400000000000000000000040551457665371200275720ustar00rootroot00000000000000 Sugars (Cyclics) Fructopyranose-β-D β-D-Fructopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-fucopyranose.sml000066400000000000000000000037351457665371200272300ustar00rootroot00000000000000 Sugars (Cyclics) Fucopyranose-β-D β-D-Fucopyranose 23 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-galactopyranose.sml000066400000000000000000000040631457665371200277010ustar00rootroot00000000000000 Sugars (Cyclics) Galactopyranose-β-D β-D-Galactopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-glucopyranose.sml000066400000000000000000000040451457665371200274000ustar00rootroot00000000000000 Sugars (Cyclics) Glucopyranose-β-D β-D-Glucopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-gulopyranose.sml000066400000000000000000000040551457665371200272360ustar00rootroot00000000000000 Sugars (Cyclics) Gulopyranose-β-D β-D-Gulopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-idopyranose.sml000066400000000000000000000040511457665371200270370ustar00rootroot00000000000000 Sugars (Cyclics) Idopyranose-β-D β-D-Idopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-lyxopyranose.sml000066400000000000000000000034361457665371200272650ustar00rootroot00000000000000 Sugars (Cyclics) Lyxopyranose-β-D β-D-Lyxopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-mannopyranose.sml000066400000000000000000000040511457665371200273740ustar00rootroot00000000000000 Sugars (Cyclics) Mannopyranose-β-D β-D-Mannopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-rhamnopyranose.sml000066400000000000000000000037571457665371200275640ustar00rootroot00000000000000 Sugars (Cyclics) Rhamnopyranose-β-D β-D-Rhamnopyranose 23 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-ribopyranose.sml000066400000000000000000000034351457665371200272240ustar00rootroot00000000000000 Sugars (Cyclics) Ribopyranose-β-D β-D-Ribopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-tagatopyranose.sml000066400000000000000000000040541457665371200275460ustar00rootroot00000000000000 Sugars (Cyclics) Tagatopyranose-β-D β-D-Tagatopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-talopyranose.sml000066400000000000000000000040561457665371200272300ustar00rootroot00000000000000 Sugars (Cyclics) Talopyranose-β-D β-D-Talopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-d-xylopyranose.sml000066400000000000000000000034361457665371200272650ustar00rootroot00000000000000 Sugars (Cyclics) Xylopyranose-β-D β-D-Xylopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-l-arabinopyranose.sml000066400000000000000000000034421457665371200277120ustar00rootroot00000000000000 Sugars (Cyclics) Arabinopyranose-β-L β-L-Abinopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-l-lyxopyranose.sml000066400000000000000000000034361457665371200272750ustar00rootroot00000000000000 Sugars (Cyclics) Lyxopyranose-β-L β-L-Lyxopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-l-ribopyranose.sml000066400000000000000000000034311457665371200272300ustar00rootroot00000000000000 Sugars (Cyclics) Ribopyranose-β-L β-L-Ribopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Cyclic_sugars/beta-l-xylopyranose.sml000066400000000000000000000034401457665371200272700ustar00rootroot00000000000000 Sugars (Cyclics) Xylopyranose-β-L β-L-Xylopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Ethers/000077500000000000000000000000001457665371200212745ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Ethers/1_4-dioxane.sml000066400000000000000000000027741457665371200240330ustar00rootroot00000000000000 Ethers 1,4-Dioxane 1,4-Dioxane Diethylene dioxide Diethylene ether --i--p--I---Dioxane [6]-crown-2 14 Atomes-GNU-1.1.14/data/library/molecules/Ethers/di-tert-butylether.sml000066400000000000000000000045611457665371200255540ustar00rootroot00000000000000 Ethers Di---i--tert--I---butylether 2---i--tert--I---Butoxy-2-methylpropane 2-Methyl-2---i--tert--I---butoxypropane Di---i--tert--I---butylether 27 Atomes-GNU-1.1.14/data/library/molecules/Ethers/dibutylether.sml000066400000000000000000000045541457665371200245250ustar00rootroot00000000000000 Ethers Dibutyl ether 1-Butoxybutane Dibutyl ether Di---i--n--I---butyl ether Butyl ether --i--n--I---butyl ether 27 Atomes-GNU-1.1.14/data/library/molecules/Ethers/diethylether.sml000066400000000000000000000030411457665371200245010ustar00rootroot00000000000000 Ethers Ether Ethoxyethane Diethyl ether Ethyl ether Ethyl oxide Ether 15 Atomes-GNU-1.1.14/data/library/molecules/Ethers/diisopropylether.sml000066400000000000000000000037111457665371200254200ustar00rootroot00000000000000 Ethers Diisopropyl ether 2-[(Propan-2-yl)oxy]propane Diisopropyl ether 2-Isopropoxypropane Diisopropyl oxide 21 Atomes-GNU-1.1.14/data/library/molecules/Ethers/dimethylether.sml000066400000000000000000000022011457665371200246530ustar00rootroot00000000000000 Ethers Dimethyl ether Methoxymethane Dimethyl ether Wood ether Demeon 9 Atomes-GNU-1.1.14/data/library/molecules/Ethers/dipropylether.sml000066400000000000000000000036721457665371200247130ustar00rootroot00000000000000 Ethers Dipropyl ether 1-Propoxypropane Propyl ether Dipropyl ether Di---i--n--I---propyl ether 21 Atomes-GNU-1.1.14/data/library/molecules/Ethers/ethylmethylether.sml000066400000000000000000000024761457665371200254220ustar00rootroot00000000000000 Ethers Methoxyethane Methoxyethane Methyl ethyl ether Ethyl methyl ether 12 Atomes-GNU-1.1.14/data/library/molecules/Ethers/tetrahydrofuran.sml000066400000000000000000000026741457665371200252430ustar00rootroot00000000000000 Ethers Tetrahydrofuran Oxolane Tetrahydrofuran Oxacyclopentane Butylene oxide Cyclotetramethylene oxide 13 Atomes-GNU-1.1.14/data/library/molecules/Ethers/tetrahydropyran.sml000066400000000000000000000030741457665371200252540ustar00rootroot00000000000000 Ethers Tetrahydropyran Oxane Tetrahydropyran Oxacyclohexane 16 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/000077500000000000000000000000001457665371200222745ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/arachidonic_acid.sml000066400000000000000000000102621457665371200262360ustar00rootroot00000000000000 Fatty acids Arachidonic acid (5Z,8Z,11Z,14Z)-5,8,11,14-Eicosatetraenoic acid (5Z,8Z,11Z,14Z)-Icosa-5,8,11,14-tetraenoic acid Arachidonic acid Eicosatetraenoic acid Arachidonate 54 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/caprylic_acid.sml000066400000000000000000000042751457665371200256070ustar00rootroot00000000000000 Fatty acids Caprylic acid Octanoic acid Caprylic acid 26 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/cervonic_acid.sml000066400000000000000000000103451457665371200256040ustar00rootroot00000000000000 Fatty acids Cervonic acid (4Z,7Z,10Z,13Z,16Z,19Z)-Docosa-4,7,10,13,16,19-hexaenoic acid Cervonic acid DHA Doconexent 56 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/decanoic_acid.sml000066400000000000000000000052351457665371200255430ustar00rootroot00000000000000 Fatty acids Decanoic acid Decanoic acid Capric acid --i--n--I---Capric acid --i--n--I---Decanoic acid 32 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/hexanoic_acid.sml000066400000000000000000000035271457665371200255760ustar00rootroot00000000000000 Fatty acids Hexanoic acid Hexanoic acid Caproic acid --i--n--I---Caproic acid 20 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/lauric_acid.sml000066400000000000000000000060431457665371200252530ustar00rootroot00000000000000 Fatty acids Lauric acid Dodecanoic acid Lauric acid --i--n--I---Dodecanoic acid Vulvic acid 38 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/linoleic_acid.sml000066400000000000000000000076151457665371200256000ustar00rootroot00000000000000 Fatty acids Linoleic acid (9Z,12Z)-Octadeca-9,12-dienoic acid Linoleic acid 52 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/linolenic_acid.sml000066400000000000000000000074661457665371200257620ustar00rootroot00000000000000 Fatty acids Linolenic acid (9Z,12Z,15Z)-Octadeca-9,12,15-trienoic acid α-Linolenic acid Linolenic acid 50 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/myristic_acid.sml000066400000000000000000000065611457665371200256440ustar00rootroot00000000000000 Fatty acids Myristic acid Tetradecanoic acid Myristic acid 44 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/oleic_acid.sml000066400000000000000000000100731457665371200250650ustar00rootroot00000000000000 Fatty acids Oleic acid (9Z)-Octadec-9-enoic acid Oleic acid --i--cis--I---9-Octadecenoic acid 54 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/palmitic_acid.sml000066400000000000000000000074001457665371200255740ustar00rootroot00000000000000 Fatty acids Palmitic acid Hexadecanoic acid Palmitic acid 50 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/stearic_acid.sml000066400000000000000000000102251457665371200254230ustar00rootroot00000000000000 Fatty acids Stearic acid Octadecanoic acid Stearic acid 56 Atomes-GNU-1.1.14/data/library/molecules/Fatty_acids/valeric_acid.sml000066400000000000000000000032571457665371200254250ustar00rootroot00000000000000 Fatty acids Valeric acid Pentanoic acid Valeric acid Butane-1-carboxylic acid Valerianic acid 17 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/000077500000000000000000000000001457665371200221465ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c180.sml000066400000000000000000000302571457665371200233450ustar00rootroot00000000000000 Fullerenes C--c--180--f-- C--c--180--f-- 180 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c20.sml000066400000000000000000000033121457665371200232460ustar00rootroot00000000000000 Fullerenes C--c--20--f-- C--c--20--f-- 20 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c24.sml000066400000000000000000000037241457665371200232610ustar00rootroot00000000000000 Fullerenes C--c--24--f-- C--c--24--f-- 24 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c240.sml000066400000000000000000000402011457665371200233300ustar00rootroot00000000000000 Fullerenes C--c--240--f-- C--c--240--f-- 240 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c26.sml000066400000000000000000000041231457665371200232550ustar00rootroot00000000000000 Fullerenes C--c--26--f-- C--c--26--f-- 26 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c28.sml000066400000000000000000000043361457665371200232650ustar00rootroot00000000000000 Fullerenes C--c--28--f-- C--c--28--f-- 28 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c30.sml000066400000000000000000000045371457665371200232610ustar00rootroot00000000000000 Fullerenes C--c--30--f-- C--c--30--f-- 30 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c32.sml000066400000000000000000000047471457665371200232660ustar00rootroot00000000000000 Fullerenes C--c--32--f-- C--c--32--f-- 32 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c320.sml000066400000000000000000000526311457665371200233410ustar00rootroot00000000000000 Fullerenes C--c--320--f-- C--c--320--f-- 320 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c36.sml000066400000000000000000000053541457665371200232650ustar00rootroot00000000000000 Fullerenes C--c--36--f-- C--c--36--f-- 36 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c50.sml000066400000000000000000000072151457665371200232570ustar00rootroot00000000000000 Fullerenes C--c--50--f-- C--c--50--f-- 50 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c60.sml000066400000000000000000000106341457665371200232570ustar00rootroot00000000000000 Fullerenes C--c--60--f-- (C--c--60--f---Ih)[5,6]fullerene C--c--60--f-- Buckminsterfullerene Buckyball 60 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c70.sml000066400000000000000000000117131457665371200232570ustar00rootroot00000000000000 Fullerenes C--c--70--f-- C--c--70--f-- 70 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c76.sml000066400000000000000000000125261457665371200232700ustar00rootroot00000000000000 Fullerenes C--c--76--f-- C--c--76--f-- 76 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c78.sml000066400000000000000000000127271457665371200232750ustar00rootroot00000000000000 Fullerenes C--c--78--f-- C--c--78--f-- 78 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/c80.sml000066400000000000000000000131401457665371200232540ustar00rootroot00000000000000 Fullerenes C--c--80--f-- C--c--80--f-- 80 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/pc70bm.sml000066400000000000000000000156741457665371200237700ustar00rootroot00000000000000 Fullerenes PC--c--70--f--BM Phenyl-C--c--71--f---butyric acid methyl ester PC--c--70--f--BM 1-​[3-​(Methoxycarbonyl)​propyl]​-​1-​phenyl-​[6.6]​C--c--71--f-- 98 Atomes-GNU-1.1.14/data/library/molecules/Fullerenes/pcbm.sml000066400000000000000000000145361457665371200236150ustar00rootroot00000000000000 Fullerenes PCBM Phenyl-C--c--61--f---butyric acid methyl ester PCBM 1-​[3-​(Methoxycarbonyl)​propyl]​-​1-​phenyl-​[6.6]​C--c--61--f-- 88 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/000077500000000000000000000000001457665371200226425ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/1_2-oxazole.sml000066400000000000000000000020231457665371200254140ustar00rootroot00000000000000 Heterocyclics 1,2-Oxazole 1,2-Oxazole 8 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/1_2-thiazole.sml000066400000000000000000000020251457665371200255540ustar00rootroot00000000000000 Heterocyclics 1,2-Thiazole 1,2-Thiazole 8 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/1_3-oxazole.sml000066400000000000000000000020221457665371200254140ustar00rootroot00000000000000 Heterocyclics 1,3-Oxazole 1,3-Oxazole 8 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/1_3-thiazole.sml000066400000000000000000000020251457665371200255550ustar00rootroot00000000000000 Heterocyclics 1,3-Thiazole 1,3-Thiazole 8 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/1h-indole.sml000066400000000000000000000031161457665371200251400ustar00rootroot00000000000000 Heterocyclics Indole Indole 2,3-Benzopyrrole Ketole 1-Benzazole 16 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/1h-pyrazole.sml000066400000000000000000000021411457665371200255300ustar00rootroot00000000000000 Heterocyclics 1--i--H--I---Pyrazole 1--i--H--I---Pyrazole 1,2-Diazole 9 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/1h-pyrrole.sml000066400000000000000000000022101457665371200253540ustar00rootroot00000000000000 Heterocyclics 1H-Pyrrole 1H-Pyrrole Azole 10 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/benzofuran.sml000066400000000000000000000030051457665371200255260ustar00rootroot00000000000000 Heterocyclics Benzofuran 1-Benzofuran Coumarone Benzo[--i--b--I--]furan 15 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/benzothiophene.sml000066400000000000000000000030641457665371200264030ustar00rootroot00000000000000 Heterocyclics Benzothiophene Benzo[--i--b--I--]thiophene 1-Benzothiophene Thianaphthene Benzothiofuran 15 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/furan.sml000066400000000000000000000021531457665371200244730ustar00rootroot00000000000000 Heterocyclics Furan Furan Oxoline Oxole Furfuran 9 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/isonicotinamide.sml000066400000000000000000000030231457665371200265330ustar00rootroot00000000000000 Heterocyclics Isonicotinamide Isonicotinamide Pyridine-4-carboxamide 15 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/isonicotinic_acid.sml000066400000000000000000000030431457665371200270310ustar00rootroot00000000000000 Heterocyclics Isonicotinic acid Pyridine-4-carboxylic acid Isonicotinic acid 4-Pyridinecarboxylic acid 4-Picolinic acid 14 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/nicotinamide.sml000066400000000000000000000031471457665371200260270ustar00rootroot00000000000000 Heterocyclics Nicotinamide Nicotinamide Pyridine-3-carboxamide Vitamin PP vitamin B--c--3--f-- Niacinamide 15 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/nicotinic_acid.sml000066400000000000000000000030021457665371200263110ustar00rootroot00000000000000 Heterocyclics Nicotinic acid Pyridine-3-carboxylic acid Nicotinic acid Niacin Bionic 14 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/picolinamide.sml000066400000000000000000000030131457665371200260110ustar00rootroot00000000000000 Heterocyclics Picolinamide Pyridine-2-carboxamide Picolinamide 15 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/picolinic_acid.sml000066400000000000000000000027211457665371200263120ustar00rootroot00000000000000 Heterocyclics Picolinic acid Pyridine-2-carboxylic acid Picolinic acid 14 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/pyridine.sml000066400000000000000000000023731457665371200252070ustar00rootroot00000000000000 Heterocyclics Pyridine Pyridine Azinine Azine Azabenzene 11 Atomes-GNU-1.1.14/data/library/molecules/Heterocyclics/thiophene.sml000066400000000000000000000021761457665371200253500ustar00rootroot00000000000000 Heterocyclics Thiophene Thiophene Thiofuran Thiacyclopentadiene Thiole 9 Atomes-GNU-1.1.14/data/library/molecules/Ketones/000077500000000000000000000000001457665371200214525ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Ketones/acetone.sml000066400000000000000000000023011457665371200236010ustar00rootroot00000000000000 Ketones Acetone Propan-2-one Propanone Acetone Dimethyl ketone 10 Atomes-GNU-1.1.14/data/library/molecules/Ketones/butanone.sml000066400000000000000000000026171457665371200240100ustar00rootroot00000000000000 Ketones Butanone Butan-2-one Butanone Ethyl methyl ketone Methylacetone 13 Atomes-GNU-1.1.14/data/library/molecules/Ketones/cyclohexanone.sml000066400000000000000000000032431457665371200250300ustar00rootroot00000000000000 Ketones Cyclohexanone Cyclohexanone Oxocyclohexane Pimelic ketone Ketohexamethylene 17 Atomes-GNU-1.1.14/data/library/molecules/Ketones/methyl_vinyl_ketone.sml000066400000000000000000000024261457665371200262630ustar00rootroot00000000000000 Ketones Methyl vinyl ketone But-3-en-2-one Methyl vinyl ketone MVK Methylene acetone 11 Atomes-GNU-1.1.14/data/library/molecules/Ketones/p-benzoquinone.sml000066400000000000000000000025651457665371200251500ustar00rootroot00000000000000 Ketones --i--p--I---benzoquinone Cyclohexa-2,5-diene-1,4-dione 1,4-Benzoquinone Benzoquinone --i--p--I---Quinone 12 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/000077500000000000000000000000001457665371200226405ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-allose.sml000066400000000000000000000041651457665371200250630ustar00rootroot00000000000000 Sugars (Linears) (D)-Allose 6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Allose Aldehydo-(D)-allose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-altrose.sml000066400000000000000000000041171457665371200252520ustar00rootroot00000000000000 Sugars (Linears) (D)-Altrose 6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Altrose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-arabinose.sml000066400000000000000000000034611457665371200255450ustar00rootroot00000000000000 Sugars (Linears) (D)-Arabinose (D)-Arabinose Pectinose 20 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-erythrose.sml000066400000000000000000000030741457665371200256260ustar00rootroot00000000000000 Sugars (Linears) (D)-Erythrose (2R,3R)-2,3,4-Trihydroxybutanal (D)-Erythrose 16 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-erythrulose.sml000066400000000000000000000031411457665371200261620ustar00rootroot00000000000000 Sugars (Linears) (D)-Erythrulose (R)-1,3,4-Trihydroxybutan-2-one (D)-Erythrulose Glycerotetrulose 16 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-fructose.sml000066400000000000000000000042211457665371200254270ustar00rootroot00000000000000 Sugars (Linears) (D)-Fructose (2R,3S,4R,5R)-2,5-bis(hydroxymethyl)oxolane-2,3,4-triol (D)-Fructose α-(D)-Fructofuranose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-galactose.sml000066400000000000000000000041741457665371200255460ustar00rootroot00000000000000 Sugars (Linears) (D)-Galactose (2R,3S,4S,5R)-2,3,4,5,6-pentahydroxyhexanal (D)-Galactose Galactopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-glucose.sml000066400000000000000000000041771457665371200252500ustar00rootroot00000000000000 Sugars (Linears) (D)-Glucose (2R,3S,4R,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Glucose α-(D)-Glucopyranose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-glyceraldehyde.sml000066400000000000000000000025211457665371200265630ustar00rootroot00000000000000 Sugars (Linears) (D)-Glyceraldehyde (R)-2,3-Dihydroxypropanal (D)-Glyceraldehyde (D)-Glycerose 12 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-gulose.sml000066400000000000000000000042271457665371200251010ustar00rootroot00000000000000 Sugars (Linears) (D)-Gulose (2R,3R,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Gulose (D)-Gulo-hexose Aldehydo-D-gulose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-idose.sml000066400000000000000000000041231457665371200247010ustar00rootroot00000000000000 Sugars (Linears) (D)-Idose (2S,3R,4S,5R)-2,3,4,5,6-Pentahydroxyhexanal (D)-Idose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-lyxose.sml000066400000000000000000000035471457665371200251320ustar00rootroot00000000000000 Sugars (Linears) (D)-Lyxose (2S,3S,4R)-2,3,4,5-Tetrahydroxypentanal (D)-Lyxose Lyxopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-mannose.sml000066400000000000000000000042261457665371200252420ustar00rootroot00000000000000 Sugars (Linears) (D)-Mannose (3S,4S,5S,6R)-6-(hydroxymethyl)oxane-2,3,4,5-tetrol (D)-Mannose Carubinose Seminose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-psicose.sml000066400000000000000000000042641457665371200252510ustar00rootroot00000000000000 Sugars (Linears) (D)-Psicose (3R,4R,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one (D)-Psicose (D)-Pseudofructose (D)-Altrulose Allulose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-ribose.sml000066400000000000000000000035731457665371200250710ustar00rootroot00000000000000 Sugars (Linears) (D)-Ribose (2R,3S,4R)-5-(Hydroxymethyl)tetrahydrofuran-2,3,4-triol (D)-Ribofuranose α-(D)-ribose 20 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-ribulose.sml000066400000000000000000000035771457665371200254360ustar00rootroot00000000000000 Sugars (Linears) (D)-Ribulose (3R,4R)-1,3,4,5-Tetrahydroxypentan-2-one Adonose Arabinulose Araboketose 20 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-sorbose.sml000066400000000000000000000042211457665371200252510ustar00rootroot00000000000000 Sugars (Linears) (D)-Sorbose (3R,4S,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one (D)-Sorbose Sorbinose (L)-Xylo-Hexulose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-tagatose.sml000066400000000000000000000042411457665371200254060ustar00rootroot00000000000000 Sugars (Linears) (D)-Tagatose (3S,4S,5R)-1,3,4,5,6-Pentahydroxyhexan-2-one (D)-Tagatose (D)-Lyxo-Hexulose keto-(D)-tagatose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-talose.sml000066400000000000000000000041561457665371200250730ustar00rootroot00000000000000 Sugars (Linears) (D)-Talose (2S,3S,4S,5R)-Pentahydroxyhexanal (D)-Talose (D)-Talo-hexose 24 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-threose.sml000066400000000000000000000031271457665371200252520ustar00rootroot00000000000000 Sugars (Linears) (D)-Threose (2S,3R)-2,3,4-Trihydroxybutanal (D)-Threose (D)-Threoterose 16 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-xylose.sml000066400000000000000000000035431457665371200251260ustar00rootroot00000000000000 Sugars (Linears) (D)-Xylose (3R,4S,5R)-oxane-2,3,4,5-tetrol (D)-Xylose α-(D)-xylopyranose 20 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/d-xylulose.sml000066400000000000000000000036161457665371200254700ustar00rootroot00000000000000 Sugars (Linears) (D)-Xylulose (3S,4R)-1,3,4,5-Tetrahydroxypentan-2-one (D)-Xylulose threo-Pentulose threo-2-Pentulose 20 Atomes-GNU-1.1.14/data/library/molecules/Linear_sugars/dihydroxyacetone.sml000066400000000000000000000025111457665371200267360ustar00rootroot00000000000000 Sugars (Linears) Dihydroxyacetone 1,3-Dihydroxypropan-2-one Dihydroxyacetone Glycerone 12 Atomes-GNU-1.1.14/data/library/molecules/Macrocycles/000077500000000000000000000000001457665371200223065ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Macrocycles/ni-phthalocyanine.sml000066400000000000000000000116071457665371200264420ustar00rootroot00000000000000 Macrocycles Ni-Phthalocyanine Ni-Phthalocyanine 57 Atomes-GNU-1.1.14/data/library/molecules/Macrocycles/phthalocyanine.sml000066400000000000000000000103551457665371200260350ustar00rootroot00000000000000 Macrocycles Phthalocyanine Phthalocyanine 58 Atomes-GNU-1.1.14/data/library/molecules/Macrocycles/porphin.sml000066400000000000000000000060021457665371200245000ustar00rootroot00000000000000 Macrocycles Porphin Porphin 21--i--H--I--,23--i--H--I---Porphin Porphyrin 38 Atomes-GNU-1.1.14/data/library/molecules/Misc/000077500000000000000000000000001457665371200207355ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Misc/water.sml000066400000000000000000000012551457665371200225770ustar00rootroot00000000000000 Misc Water Water Oxidane Dihydrogen monoxide 3 Atomes-GNU-1.1.14/data/library/molecules/Nitriles/000077500000000000000000000000001457665371200216335ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Nitriles/Trichloroacetonitrile.sml000066400000000000000000000016471457665371200267300ustar00rootroot00000000000000 Nitriles Trichloroacetonitrile Trichloroacetonitrile 1,1,1-Trichloroacetonitrile 6 Atomes-GNU-1.1.14/data/library/molecules/Nitriles/acetonitrile.sml000066400000000000000000000017471457665371200250430ustar00rootroot00000000000000 Nitriles Acetonitrile Acetonitrile Cyanomethane Ethyl nitrile Methanecarbonitrile Methyl cyanide 6 Atomes-GNU-1.1.14/data/library/molecules/Nitriles/butyronitrile.sml000066400000000000000000000026001457665371200252610ustar00rootroot00000000000000 Nitriles Butyronitrile Butanenitrile Butyronitrile 1-Cyanopropane Propyl cyanide --i--n--I---Butyronitrile 12 Atomes-GNU-1.1.14/data/library/molecules/Nitriles/isobutyronitrile.sml000066400000000000000000000025131457665371200257770ustar00rootroot00000000000000 Nitriles Isobutyronitrile 2-Methylpropanenitrile Isobutyronitrile 2-Methylpropionitrile 12 Atomes-GNU-1.1.14/data/library/molecules/Nitriles/propionitrile.sml000066400000000000000000000022501457665371200252460ustar00rootroot00000000000000 Nitriles Propionitrile Propanenitrile Cyanoethane Ethyl cyanide Propionitrile Propylnitrile 9 Atomes-GNU-1.1.14/data/library/molecules/Nucleobases/000077500000000000000000000000001457665371200223055ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Nucleobases/adenine.sml000066400000000000000000000030471457665371200244310ustar00rootroot00000000000000 Nucleobases Adenine 9--i--H--I---purin-6-amine Adenine 6-Aminopurine 1,6-dihydro-6-iminopurine 15 Atomes-GNU-1.1.14/data/library/molecules/Nucleobases/cytosine.sml000066400000000000000000000027671457665371200246730ustar00rootroot00000000000000 Nucleobases Cytosine 4-aminopyrimidin-2(1--i--H--I--)-one Cytosine 4-amino-1--i--H--I---pyrimidine-2-one 1--i--H--I---4-amino-2-oxopyrimidine 13 Atomes-GNU-1.1.14/data/library/molecules/Nucleobases/guanine.sml000066400000000000000000000033361457665371200244550ustar00rootroot00000000000000 Nucleobases Guanine 2-amino-9--i--H--I---purin-6(1--i--H--I--)-one Guanine 1,9-dihydro-6--i--H--I---purin-6-one 2-amino-6-hydroxypurine 2-aminohypoxanthine 16 Atomes-GNU-1.1.14/data/library/molecules/Nucleobases/thymine.sml000066400000000000000000000031611457665371200245000ustar00rootroot00000000000000 Nucleobases Thymine 5-Methylpyrimidine-2,4(1--i--H--I--,3--i--H--I--)-dione Thymine 5-Methyl-1H-pyrimidine-2,4-dione 5-methyluracil 15 Atomes-GNU-1.1.14/data/library/molecules/Nucleobases/uracil.sml000066400000000000000000000027371457665371200243120ustar00rootroot00000000000000 Nucleobases Uracil Pyrimidine-2,4(1--i--H--I--,3--i--H--I--)-dione Uracil 2-oxy-4-oxy pyrimidine 2,4(1--i--H--I--,3--i--H--I--)-pyrimidinedione 2,4-dihydroxypyrimidine 12 Atomes-GNU-1.1.14/data/library/molecules/Steroids/000077500000000000000000000000001457665371200216365ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Steroids/cholesterol.sml000066400000000000000000000130141457665371200246750ustar00rootroot00000000000000 Steroids Cholesterol (3β)-cholest-5-en-3-ol Cholesterol Cholesterin Cholesteryl alcohol 74 Atomes-GNU-1.1.14/data/library/molecules/Steroids/estradiol.sml000066400000000000000000000070311457665371200243420ustar00rootroot00000000000000 Steroids Estradiol (17β)-estra-1,3,5(10)-triene-3,17-diol Estradiol Oestradiol E2 17β-Estradiol 44 Atomes-GNU-1.1.14/data/library/molecules/Steroids/testosterone.sml000066400000000000000000000071741457665371200251220ustar00rootroot00000000000000 Steroids Testosterone 17β-hydroxyandrost-4-en-3-one Testosterone Androst-4-en-17β-ol-3-one 46 Atomes-GNU-1.1.14/data/library/molecules/Sulfoxides/000077500000000000000000000000001457665371200221675ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Sulfoxides/dimethyl_sulfoxide.sml000066400000000000000000000023541457665371200266110ustar00rootroot00000000000000 Sulfoxides Dimethyl sulfoxide Dimethyl sulfoxide Methylsulfinylmethane Methyl sulfoxide 10 Atomes-GNU-1.1.14/data/library/molecules/Thiols/000077500000000000000000000000001457665371200213045ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/molecules/Thiols/2-methylproprane-2-thiol.sml000066400000000000000000000031171457665371200265070ustar00rootroot00000000000000 Thiols 2-Methylproprane-2-thiol 2-Methylproprane-2-thiol --i--t--I---BuSH 2-Methyl-2-propanethiol --i--tert--I---Butyl mercaptan 15 Atomes-GNU-1.1.14/data/library/molecules/Thiols/butane-1-thiol.sml000066400000000000000000000030511457665371200245510ustar00rootroot00000000000000 Thiols Butane-1-thiol Butane-1-thiol Butyl mercaptan --i--n--I---Butyl mercaptan 1-Butanethiol 15 Atomes-GNU-1.1.14/data/library/molecules/Thiols/ethane-1_2-dithiol.sml000066400000000000000000000022771457665371200253060ustar00rootroot00000000000000 Thiols Ethane-1,2-dithiol Ethane-1,2-dithiol Dimercaptoethane 1,2-Ethanedithiol 10 Atomes-GNU-1.1.14/data/library/molecules/Thiols/ethanethiol.sml000066400000000000000000000022141457665371200243240ustar00rootroot00000000000000 Thiols Ethanethiol Ethanethiol Ethyl mercaptan Mercaptoethane Ethyl sulfhydrate 9 Atomes-GNU-1.1.14/data/library/molecules/Thiols/heptane-1-thiol.sml000066400000000000000000000041321457665371200247200ustar00rootroot00000000000000 Thiols Heptane-1-thiol Heptane-1-thiol 1-Heptanethiol Heptyl mercaptan 24 Atomes-GNU-1.1.14/data/library/molecules/Thiols/hexane-1-thiol.sml000066400000000000000000000036171457665371200245530ustar00rootroot00000000000000 Thiols Hexane-1-thiol Hexane-1-thiol 1-Hexanethiol Hexil mercaptan 21 Atomes-GNU-1.1.14/data/library/molecules/Thiols/methanethiol.sml000066400000000000000000000017001457665371200245000ustar00rootroot00000000000000 Thiols Methanethiol Methanethiol Methyl mercaptan Mercaptomethane Methiol 6 Atomes-GNU-1.1.14/data/library/molecules/Thiols/octane-1-thiol.sml000066400000000000000000000043761457665371200245570ustar00rootroot00000000000000 Thiols Octane-1-thiol Octane-1-thiol 1-Octanethiol 27 Atomes-GNU-1.1.14/data/library/molecules/Thiols/pentane-1-thiol.sml000066400000000000000000000033121457665371200247250ustar00rootroot00000000000000 Thiols Pentane-1-thiol Pentane-1-thiol 1-Pentanethiol Penta mercaptan 18 Atomes-GNU-1.1.14/data/library/molecules/Thiols/proprane-1-thiol.sml000066400000000000000000000025441457665371200251270ustar00rootroot00000000000000 Thiols Proprane-1-thiol Proprane-1-thiol --i--n--I---Propylthiol 1-Propanethiol Propyl mercaptan 12 Atomes-GNU-1.1.14/data/library/molecules/Thiols/proprane-2-thiol.sml000066400000000000000000000025431457665371200251270ustar00rootroot00000000000000 Thiols Proprane-2-thiol Proprane-2-thiol 2-Propyl mercaptan Isopropyl mercaptan Isopropanthiol 12 Atomes-GNU-1.1.14/data/library/molecules/Thiols/r_butane-2-thiol.sml000066400000000000000000000030631457665371200250760ustar00rootroot00000000000000 Thiols (R)-Butane-2-thiol (2R)-Butane-2-thiol (R)-Butane-2-thiol (R)-2-Butanethiol (2R)-2-butanethiol 15 Atomes-GNU-1.1.14/data/library/space_groups/000077500000000000000000000000001457665371200205445ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/library/space_groups/1-P1.sgl000066400000000000000000000006321457665371200216720ustar00rootroot00000000000000 P1 1 P 1 Triclinic Atomes-GNU-1.1.14/data/library/space_groups/10-P2sm.sgl000066400000000000000000000040661457665371200223200ustar00rootroot00000000000000 P2/m 10 P 1 2/m 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/100-P4bm.sgl000066400000000000000000000021501457665371200223510ustar00rootroot00000000000000 P4bm 100 P 4 b m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/101-P42cm.sgl000066400000000000000000000024411457665371200224400ustar00rootroot00000000000000 P42cm 101 P 42 c m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/102-P42nm.sgl000066400000000000000000000023211457665371200224510ustar00rootroot00000000000000 P42nm 102 P 42 n m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/103-P4cc.sgl000066400000000000000000000021331457665371200223440ustar00rootroot00000000000000 P4cc 103 P 4 c c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/104-P4nc.sgl000066400000000000000000000017741457665371200223720ustar00rootroot00000000000000 P4nc 104 P 4 n c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/105-P42mc.sgl000066400000000000000000000026411457665371200224460ustar00rootroot00000000000000 P42mc 105 P 42 m c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/106-P42bc.sgl000066400000000000000000000021051457665371200224270ustar00rootroot00000000000000 P42bc 106 P 42 b c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/107-I4mm.sgl000066400000000000000000000024711457665371200223720ustar00rootroot00000000000000 I4mm 107 I 4 m m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/108-I4cm.sgl000066400000000000000000000023051457665371200223550ustar00rootroot00000000000000 I4cm 108 I 4 c m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/109-I41md.sgl000066400000000000000000000021751457665371200224450ustar00rootroot00000000000000 I41md 109 I 41 m d Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/11-P21sm.sgl000066400000000000000000000023651457665371200224020ustar00rootroot00000000000000 P21/m 11 P 1 21/m 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/110-I41cd.sgl000066400000000000000000000017651457665371200224270ustar00rootroot00000000000000 I41cd 110 I 41 c d Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/111-P-42m.sgl000066400000000000000000000051621457665371200223560ustar00rootroot00000000000000 P-42m 111 P -4 2 m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/112-P-42c.sgl000066400000000000000000000054021457665371200223420ustar00rootroot00000000000000 P-42c 112 P -4 2 c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/113-P-421m.sgl000066400000000000000000000026651457665371200224460ustar00rootroot00000000000000 P-421m 113 P -4 21 m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/114-P-421c.sgl000066400000000000000000000025141457665371200224260ustar00rootroot00000000000000 P-421c 114 P -4 21 c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/115-P-4m2.sgl000066400000000000000000000041561457665371200223640ustar00rootroot00000000000000 P-4m2 115 P -4 m 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/116-P-4c2.sgl000066400000000000000000000041641457665371200223520ustar00rootroot00000000000000 P-4c2 116 P -4 c 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/117-P-4b2.sgl000066400000000000000000000036771457665371200223620ustar00rootroot00000000000000 P-4b2 117 P -4 b 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/118-P-4n2.sgl000066400000000000000000000037531457665371200223720ustar00rootroot00000000000000 P-4n2 118 P -4 n 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/119-I-4m2.sgl000066400000000000000000000036451457665371200223630ustar00rootroot00000000000000 I-4m2 119 I -4 m 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/12-C2sm.sgl000066400000000000000000000055711457665371200223070ustar00rootroot00000000000000 C2/m 12 C 1 2/m 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/120-I-4c2.sgl000066400000000000000000000040161457665371200223320ustar00rootroot00000000000000 I-4c2 120 I -4 c 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/121-I-42m.sgl000066400000000000000000000040271457665371200223470ustar00rootroot00000000000000 I-42m 121 I -4 2 m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/122-I-42d.sgl000066400000000000000000000026401457665371200223360ustar00rootroot00000000000000 I-42d 122 I -4 2 d Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/123-P4smmm.sgl000066400000000000000000000112151457665371200227330ustar00rootroot00000000000000 P4/mmm 123 P 4/m 2/m 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/124-P4smcc.sgl000066400000000000000000000075151457665371200227200ustar00rootroot00000000000000 P4/mcc 124 P 4/m 2/c 2/c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/125-P4snbm.sgl000066400000000000000000000100531457665371200227220ustar00rootroot00000000000000 P4/nbm 125 P 4/n 2/b 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/126-P4snnc.sgl000066400000000000000000000072451457665371200227360ustar00rootroot00000000000000 P4/nnc 126 P 4/n 2/n 2/c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/127-P4smbm.sgl000066400000000000000000000064241457665371200227320ustar00rootroot00000000000000 P4/mbm 127 P 4/m 21/b 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/128-P4smnc.sgl000066400000000000000000000055511457665371200227350ustar00rootroot00000000000000 P4/mnc 128 P 4/m 21/b 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/129-P4snmm.sgl000066400000000000000000000065771457665371200227610ustar00rootroot00000000000000 P4/nmm 129 P 4/n 21/m 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/13-P2sc.sgl000066400000000000000000000033171457665371200223070ustar00rootroot00000000000000 P2/c 13 P 1 2/c 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/130-P4sncc.sgl000066400000000000000000000053171457665371200227140ustar00rootroot00000000000000 P4/ncc 130 P 4/n 21/c 2/c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/131-P42smmc.sgl000066400000000000000000000105041457665371200230020ustar00rootroot00000000000000 P42/mmc 131 P 42/m 2/m 2/c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/132-P42smcm.sgl000066400000000000000000000103241457665371200230030ustar00rootroot00000000000000 P42/mcm 132 P 42/m 2/c 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/133-P42snbc.sgl000066400000000000000000000077011457665371200227770ustar00rootroot00000000000000 P42/nbc 133 P 42/n 2/b 2/c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/134-P42snnm.sgl000066400000000000000000000106631457665371200230270ustar00rootroot00000000000000 P42/nnm 134 P 42/n 2/n 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/135-P42smbc.sgl000066400000000000000000000062051457665371200227760ustar00rootroot00000000000000 P42/mbc 135 P 42/m 21/b 2/c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/136-P42smnm.sgl000066400000000000000000000064161457665371200230310ustar00rootroot00000000000000 P42/mnm 136 P 42/m 21/n 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/137-P42snmc.sgl000066400000000000000000000054341457665371200230170ustar00rootroot00000000000000 P42/nmc 137 P 42/n 21/m 2/c Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/138-P42sncm.sgl000066400000000000000000000067361457665371200230260ustar00rootroot00000000000000 P42/ncm 138 P 42/n 21/c 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/139-I4smmm.sgl000066400000000000000000000074221457665371200227400ustar00rootroot00000000000000 I4/mmm 139 I 4/m 2/m 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/14-P21sc.sgl000066400000000000000000000027521457665371200223730ustar00rootroot00000000000000 P21/c 14 P 1 21/c 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/140-I4smcm.sgl000066400000000000000000000071731457665371200227210ustar00rootroot00000000000000 I4/mcm 140 I 4/m 2/c 2/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/141-I41samd.sgl000066400000000000000000000063661457665371200227730ustar00rootroot00000000000000 I41/amd 141 I 41/a 2/m 2/d Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/142-I41sacd.sgl000066400000000000000000000061461457665371200227560ustar00rootroot00000000000000 I41/acd 142 I 41/a 2/c 2/d Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/143-P3.sgl000066400000000000000000000013601457665371200220420ustar00rootroot00000000000000 P3 143 P 3 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/144-P31.sgl000066400000000000000000000007531457665371200221310ustar00rootroot00000000000000 P31 144 P 31 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/145-P32.sgl000066400000000000000000000007531457665371200221330ustar00rootroot00000000000000 P32 145 P 32 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/146-R3.sgl000066400000000000000000000016621457665371200220540ustar00rootroot00000000000000 R3 146 R 3 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/147-P-3.sgl000066400000000000000000000024661457665371200221330ustar00rootroot00000000000000 P-3 147 P -3 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/148-R-3.sgl000066400000000000000000000030571457665371200221330ustar00rootroot00000000000000 R-3 148 R -3 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/149-P312.sgl000066400000000000000000000034571457665371200222240ustar00rootroot00000000000000 P312 149 P 3 1 2 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/15-C2sc.sgl000066400000000000000000000077731457665371200223060ustar00rootroot00000000000000 C2/c 15 C 1 2/c 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/150-P321.sgl000066400000000000000000000024611457665371200222060ustar00rootroot00000000000000 P321 150 P 3 2 1 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/151-P3112.sgl000066400000000000000000000016441457665371200222720ustar00rootroot00000000000000 P3112 151 P 31 1 2 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/152-P3121.sgl000066400000000000000000000016361457665371200222740ustar00rootroot00000000000000 P3121 152 P 31 2 1 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/153-P3212.sgl000066400000000000000000000016441457665371200222750ustar00rootroot00000000000000 P3212 153 P 32 1 2 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/154-P3221.sgl000066400000000000000000000016361457665371200222770ustar00rootroot00000000000000 P3221 154 P 32 2 1 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/155-R32.sgl000066400000000000000000000030441457665371200221320ustar00rootroot00000000000000 R32 155 R 3 2 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/156-P3m1.sgl000066400000000000000000000017711457665371200223120ustar00rootroot00000000000000 P3m1 156 P 3 m 1 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/157-P31m.sgl000066400000000000000000000016751457665371200223160ustar00rootroot00000000000000 P31m 157 P 3 1 m Trigonal Atomes-GNU-1.1.14/data/library/space_groups/158-P3c1.sgl000066400000000000000000000017331457665371200223000ustar00rootroot00000000000000 P3c1 158 P 3 c 1 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/159-P31c.sgl000066400000000000000000000015301457665371200222740ustar00rootroot00000000000000 P31c 159 P 3 1 c Trigonal Atomes-GNU-1.1.14/data/library/space_groups/16-P222.sgl000066400000000000000000000053001457665371200221220ustar00rootroot00000000000000 P222 16 P 2 2 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/160-R3m.sgl000066400000000000000000000022671457665371200222270ustar00rootroot00000000000000 R3m 160 R 3 m Trigonal Atomes-GNU-1.1.14/data/library/space_groups/161-R3c.sgl000066400000000000000000000021141457665371200222050ustar00rootroot00000000000000 R3c 161 R 3 c Trigonal Atomes-GNU-1.1.14/data/library/space_groups/162-P-31m.sgl000066400000000000000000000051411457665371200223570ustar00rootroot00000000000000 P-31m 162 P -3 1 2/m Trigonal Atomes-GNU-1.1.14/data/library/space_groups/163-P-31c.sgl000066400000000000000000000043241457665371200223500ustar00rootroot00000000000000 P-31c 163 P -3 1 2/c Trigonal Atomes-GNU-1.1.14/data/library/space_groups/164-P-3m1.sgl000066400000000000000000000044201457665371200223600ustar00rootroot00000000000000 P-3m1 164 P -3 2/m 1 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/165-P-3c1.sgl000066400000000000000000000037101457665371200223500ustar00rootroot00000000000000 P-3c1 165 P -3 2/c 1 Trigonal Atomes-GNU-1.1.14/data/library/space_groups/166-R-3m.sgl000066400000000000000000000047771457665371200223220ustar00rootroot00000000000000 R-3m 166 R -3 2/m Trigonal Atomes-GNU-1.1.14/data/library/space_groups/167-R-3c.sgl000066400000000000000000000041561457665371200223000ustar00rootroot00000000000000 R-3c 167 R -3 2/c Trigonal Atomes-GNU-1.1.14/data/library/space_groups/168-P6.sgl000066400000000000000000000016721457665371200220620ustar00rootroot00000000000000 P6 168 P 6 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/169-P61.sgl000066400000000000000000000011341457665371200221350ustar00rootroot00000000000000 P61 169 P 61 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/17-P2221.sgl000066400000000000000000000021701457665371200222060ustar00rootroot00000000000000 P2221 17 P 2 2 21 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/170-P65.sgl000066400000000000000000000011341457665371200221310ustar00rootroot00000000000000 P65 170 P 65 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/171-P62.sgl000066400000000000000000000016341457665371200221340ustar00rootroot00000000000000 P62 171 P 62 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/172-P64.sgl000066400000000000000000000016341457665371200221370ustar00rootroot00000000000000 P64 172 P 64 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/173-P63.sgl000066400000000000000000000015221457665371200221330ustar00rootroot00000000000000 P63 173 P 63 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/174-P-6.sgl000066400000000000000000000034631457665371200221340ustar00rootroot00000000000000 P-6 174 P -6 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/175-P6sm.sgl000066400000000000000000000051611457665371200224150ustar00rootroot00000000000000 P6/m 175 P 6/m Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/176-P63sm.sgl000066400000000000000000000043261457665371200225030ustar00rootroot00000000000000 P63/m 176 P 63/m Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/177-P622.sgl000066400000000000000000000061371457665371200222270ustar00rootroot00000000000000 P622 177 P 6 2 2 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/178-P6122.sgl000066400000000000000000000025301457665371200223020ustar00rootroot00000000000000 P6122 178 P 61 2 2 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/179-P6522.sgl000066400000000000000000000025301457665371200223070ustar00rootroot00000000000000 P6522 179 P 65 2 2 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/18-P21212.sgl000066400000000000000000000016111457665371200222670ustar00rootroot00000000000000 P21212 18 P 21 21 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/180-P6222.sgl000066400000000000000000000057541457665371200223070ustar00rootroot00000000000000 P6222 180 P 62 2 2 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/181-P6422.sgl000066400000000000000000000057541457665371200223120ustar00rootroot00000000000000 P6422 181 P 64 2 2 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/182-P6322.sgl000066400000000000000000000043071457665371200223030ustar00rootroot00000000000000 P6322 182 P 63 2 2 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/183-P6mm.sgl000066400000000000000000000032011457665371200223770ustar00rootroot00000000000000 P6mm 183 P 6 m m Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/184-P6cc.sgl000066400000000000000000000026071457665371200223650ustar00rootroot00000000000000 P6cc 184 P 6 c c Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/185-P63cm.sgl000066400000000000000000000025761457665371200224700ustar00rootroot00000000000000 P63cm 185 P 63 c m Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/186-P63mc.sgl000066400000000000000000000024721457665371200224640ustar00rootroot00000000000000 P63mc 186 P 63 m c Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/187-P-6m2.sgl000066400000000000000000000054261457665371200224000ustar00rootroot00000000000000 P-6m2 187 P -6 m 2 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/188-P-6c2.sgl000066400000000000000000000052511457665371200223630ustar00rootroot00000000000000 P-6c2 188 P -6 c 2 Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/189-P-62m.sgl000066400000000000000000000051321457665371200223740ustar00rootroot00000000000000 P-62m 189 P -6 2 m Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/19-P212121.sgl000066400000000000000000000010541457665371200223520ustar00rootroot00000000000000 P212121 19 P 21 21 21 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/190-P-62c.sgl000066400000000000000000000043161457665371200223550ustar00rootroot00000000000000 P-62c 190 P -6 2 c Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/191-P6smmm.sgl000066400000000000000000000124711457665371200227470ustar00rootroot00000000000000 P6/mmm 191 P 6/m 2/m 2/m Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/192-P6smcc.sgl000066400000000000000000000114501457665371200227200ustar00rootroot00000000000000 P6/mcc 192 P 6/m 2/c 2/c Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/193-P63smcm.sgl000066400000000000000000000104701457665371200230170ustar00rootroot00000000000000 P63/mcm 193 P 63/m 2/c 2/m Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/194-P63smmc.sgl000066400000000000000000000100311457665371200230110ustar00rootroot00000000000000 P63/mmc 194 P 63/m 2/m 2/c Hexagonal Atomes-GNU-1.1.14/data/library/space_groups/195-P23.sgl000066400000000000000000000047021457665371200221360ustar00rootroot00000000000000 P23 195 P 2 3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/196-F23.sgl000066400000000000000000000037511457665371200221300ustar00rootroot00000000000000 F23 196 F 2 3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/197-I23.sgl000066400000000000000000000034411457665371200221300ustar00rootroot00000000000000 I23 197 I 2 3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/198-P213.sgl000066400000000000000000000020431457665371200222160ustar00rootroot00000000000000 P213 198 P 21 3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/199-I213.sgl000066400000000000000000000026361457665371200222200ustar00rootroot00000000000000 I213 199 I 21 3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/2-P-1.sgl000066400000000000000000000022171457665371200217510ustar00rootroot00000000000000 P-1 2 P -1 Triclinic Atomes-GNU-1.1.14/data/library/space_groups/20-C2221.sgl000066400000000000000000000022731457665371200221670ustar00rootroot00000000000000 C2221 20 C 2 2 21 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/200-Pm-3.sgl000066400000000000000000000075471457665371200223030ustar00rootroot00000000000000 Pm-3 200 P 2/m -3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/201-Pn-3.sgl000066400000000000000000000067741457665371200223060ustar00rootroot00000000000000 Pn-3 201 P 2/n -3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/202-Fm-3.sgl000066400000000000000000000065361457665371200222700ustar00rootroot00000000000000 Fm-3 202 F 2/m -3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/203-Fd-3.sgl000066400000000000000000000063341457665371200222540ustar00rootroot00000000000000 Fd-3 203 F 2/d -3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/204-Im-3.sgl000066400000000000000000000056731457665371200222760ustar00rootroot00000000000000 Im-3 204 I 2/m -3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/205-Pa-3.sgl000066400000000000000000000040221457665371200222550ustar00rootroot00000000000000 Pa-3 205 P 21/a -3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/206-Ia-3.sgl000066400000000000000000000051571457665371200222610ustar00rootroot00000000000000 Ia-3 206 I 21/a -3 Cubic Atomes-GNU-1.1.14/data/library/space_groups/207-P432.sgl000066400000000000000000000074421457665371200222200ustar00rootroot00000000000000 P432 207 P 4 3 2 Cubic Atomes-GNU-1.1.14/data/library/space_groups/208-P4232.sgl000066400000000000000000000125731457665371200223040ustar00rootroot00000000000000 P4232 208 P 42 3 2 Cubic Atomes-GNU-1.1.14/data/library/space_groups/209-F432.sgl000066400000000000000000000074551457665371200222140ustar00rootroot00000000000000 F432 209 F 4 3 2 Cubic Atomes-GNU-1.1.14/data/library/space_groups/21-C222.sgl000066400000000000000000000042001457665371200220770ustar00rootroot00000000000000 C222 21 C 2 2 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/210-F4132.sgl000066400000000000000000000071071457665371200222570ustar00rootroot00000000000000 F4132 210 F 41 3 2 Cubic Atomes-GNU-1.1.14/data/library/space_groups/211-I432.sgl000066400000000000000000000076161457665371200222070ustar00rootroot00000000000000 I432 211 I 4 3 2 Cubic Atomes-GNU-1.1.14/data/library/space_groups/212-P4332.sgl000066400000000000000000000052441457665371200222750ustar00rootroot00000000000000 P4332 212 P 43 3 2 Cubic Atomes-GNU-1.1.14/data/library/space_groups/213-P4132.sgl000066400000000000000000000052441457665371200222740ustar00rootroot00000000000000 P4132 213 P 41 3 2 Cubic Atomes-GNU-1.1.14/data/library/space_groups/214-I4132.sgl000066400000000000000000000104711457665371200222640ustar00rootroot00000000000000 I4132 214 I 41 3 2 Cubic Atomes-GNU-1.1.14/data/library/space_groups/215-P-43m.sgl000066400000000000000000000063341457665371200223660ustar00rootroot00000000000000 P-43m 215 P -4 3 m Cubic Atomes-GNU-1.1.14/data/library/space_groups/216-F-43m.sgl000066400000000000000000000054751457665371200223620ustar00rootroot00000000000000 F-43m 216 F -4 3 m Cubic Atomes-GNU-1.1.14/data/library/space_groups/217-I-43m.sgl000066400000000000000000000061071457665371200223570ustar00rootroot00000000000000 I-43m 217 I -4 3 m Cubic Atomes-GNU-1.1.14/data/library/space_groups/218-P-43n.sgl000066400000000000000000000077301457665371200223730ustar00rootroot00000000000000 P-43n 218 P -4 3 n Cubic Atomes-GNU-1.1.14/data/library/space_groups/219-F-43c.sgl000066400000000000000000000070571457665371200223510ustar00rootroot00000000000000 F-43c 219 F -4 3 c Cubic Atomes-GNU-1.1.14/data/library/space_groups/22-F222.sgl000066400000000000000000000034271457665371200221150ustar00rootroot00000000000000 F222 22 F 2 2 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/220-I-43d.sgl000066400000000000000000000055531457665371200223440ustar00rootroot00000000000000 I-43d 220 I -4 3 d Cubic Atomes-GNU-1.1.14/data/library/space_groups/221-Pm-3m.sgl000066400000000000000000000160561457665371200224560ustar00rootroot00000000000000 Pm-3m 221 P 4/m -3 2/m Cubic Atomes-GNU-1.1.14/data/library/space_groups/222-Pn-3n.sgl000066400000000000000000000150221457665371200224510ustar00rootroot00000000000000 Pn-3n 222 P 4/n -3 2/n Cubic Atomes-GNU-1.1.14/data/library/space_groups/223-Pm-3n.sgl000066400000000000000000000166301457665371200224570ustar00rootroot00000000000000 Pm-3n 223 P 42/m -3 2/n Cubic Atomes-GNU-1.1.14/data/library/space_groups/224-Pn-3m.sgl000066400000000000000000000202171457665371200224540ustar00rootroot00000000000000 Pn-3m 224 P 42/n -3 2/m Cubic Atomes-GNU-1.1.14/data/library/space_groups/225-Fm-3m.sgl000066400000000000000000000143111457665371200224400ustar00rootroot00000000000000 Fm-3m 225 F 4/m -3 2/m Cubic Atomes-GNU-1.1.14/data/library/space_groups/226-Fm-3c.sgl000066400000000000000000000150171457665371200224330ustar00rootroot00000000000000 Fm-3c 226 F 4/m -3 2/c Cubic Atomes-GNU-1.1.14/data/library/space_groups/227-Fd-3m.sgl000066400000000000000000000145011457665371200224320ustar00rootroot00000000000000 Fd-3m 227 F 41/d -3 2/m Cubic Atomes-GNU-1.1.14/data/library/space_groups/228-Fd-3c.sgl000066400000000000000000000154101457665371200224210ustar00rootroot00000000000000 Fd-3c 228 F 41/d -3 2/c Cubic Atomes-GNU-1.1.14/data/library/space_groups/229-Im-3m.sgl000066400000000000000000000153641457665371200224600ustar00rootroot00000000000000 Im-3m 229 I 4/m -3 2/m Cubic Atomes-GNU-1.1.14/data/library/space_groups/23-I222.sgl000066400000000000000000000032751457665371200221220ustar00rootroot00000000000000 I222 23 I 2 2 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/230-Ia-3d.sgl000066400000000000000000000152721457665371200224210ustar00rootroot00000000000000 Ia-3d 230 I 41/a -3 2/d Cubic Atomes-GNU-1.1.14/data/library/space_groups/24-I212121.sgl000066400000000000000000000020271457665371200223400ustar00rootroot00000000000000 I212121 24 I 21 21 21 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/25-Pmm2.sgl000066400000000000000000000027051457665371200223160ustar00rootroot00000000000000 Pmm2 25 P m m 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/26-Pmc21.sgl000066400000000000000000000020461457665371200223640ustar00rootroot00000000000000 Pmc21 26 P m c 21 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/27-Pcc2.sgl000066400000000000000000000021711457665371200222710ustar00rootroot00000000000000 Pcc2 27 P c c 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/28-Pma2.sgl000066400000000000000000000022241457665371200223010ustar00rootroot00000000000000 Pma2 28 P m a 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/29-Pca21.sgl000066400000000000000000000014621457665371200223540ustar00rootroot00000000000000 Pca21 29 P c a 21 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/3-P2.sgl000066400000000000000000000016201457665371200216730ustar00rootroot00000000000000 P2 3 P 1 2 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/30-Pnc2.sgl000066400000000000000000000020501457665371200222720ustar00rootroot00000000000000 Pnc2 30 P n c 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/31-Pmn21.sgl000066400000000000000000000016601457665371200223740ustar00rootroot00000000000000 Pmn21 31 P m n 21 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/32-Pba2.sgl000066400000000000000000000015731457665371200222670ustar00rootroot00000000000000 Pba2 32 P b a 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/33-Pna21.sgl000066400000000000000000000014721457665371200223630ustar00rootroot00000000000000 Pna21 33 P n a 21 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/34-Pnn2.sgl000066400000000000000000000016131457665371200223150ustar00rootroot00000000000000 Pnn2 34 P n n 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/35-Cmm2.sgl000066400000000000000000000027271457665371200223060ustar00rootroot00000000000000 Cmm2 35 C m m 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/36-Cmc21.sgl000066400000000000000000000030501457665371200223440ustar00rootroot00000000000000 Cmc21 36 C m c 21 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/37-Ccc2.sgl000066400000000000000000000024731457665371200222620ustar00rootroot00000000000000 Ccc2 37 C c c 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/38-Amm2.sgl000066400000000000000000000036721457665371200223070ustar00rootroot00000000000000 Amm2 38 A m m 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/39-Aem2.sgl000066400000000000000000000034261457665371200222750ustar00rootroot00000000000000 Aem2 39 A e m 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/4-P21.sgl000066400000000000000000000010711457665371200217550ustar00rootroot00000000000000 P21 4 P 1 21 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/40-Ama2.sgl000066400000000000000000000032311457665371200222530ustar00rootroot00000000000000 Ama2 40 A m a 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/41-Aea2.sgl000066400000000000000000000030471457665371200222510ustar00rootroot00000000000000 Aea2 41 A e a 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/42-Fmm2.sgl000066400000000000000000000031251457665371200223000ustar00rootroot00000000000000 Fmm2 42 F m m 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/43-Fdd2.sgl000066400000000000000000000024451457665371200222630ustar00rootroot00000000000000 Fdd2 43 F d d 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/44-Imm2.sgl000066400000000000000000000025361457665371200223120ustar00rootroot00000000000000 Imm2 44 I m m 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/45-Iba2.sgl000066400000000000000000000023021457665371200222530ustar00rootroot00000000000000 Iba2 45 I b a 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/46-Ima2.sgl000066400000000000000000000032441457665371200222750ustar00rootroot00000000000000 Ima2 46 I ma 2 Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/47-Pmmm.sgl000066400000000000000000000076741457665371200224270ustar00rootroot00000000000000 Pmmm 47 P 2/m 2/m 2/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/48-Pnnn.sgl000066400000000000000000000056061457665371200224240ustar00rootroot00000000000000 Pnnn 48 P 2/n 2/n 2/n Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/49-Pccm.sgl000066400000000000000000000067661457665371200224060ustar00rootroot00000000000000 Pccm 49 P 2/c 2/c 2/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/5-C2.sgl000066400000000000000000000037771457665371200216770ustar00rootroot00000000000000 C2 5 C 1 2 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/50-Pban.sgl000066400000000000000000000061361457665371200223630ustar00rootroot00000000000000 Pban 50 P 2/b 2/a 2/n Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/51-Pmma.sgl000066400000000000000000000051731457665371200223760ustar00rootroot00000000000000 Pmma 51 P 21 /m 2/m 2/a Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/52-Pnna.sgl000066400000000000000000000033571457665371200224030ustar00rootroot00000000000000 Pnna 52 P 2/n 21/n 2/a Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/53-Pmna.sgl000066400000000000000000000043331457665371200223760ustar00rootroot00000000000000 Pmna 53 P 2/m 2/n 21/a Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/54-Pcca.sgl000066400000000000000000000036361457665371200223570ustar00rootroot00000000000000 Pcca 54 P 21/c 2/c 2/a Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/55-Pbam.sgl000066400000000000000000000040651457665371200223660ustar00rootroot00000000000000 Pbam 55 P 21/b 21/a 2/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/56-Pccn.sgl000066400000000000000000000031171457665371200223700ustar00rootroot00000000000000 Pccn 56 P 21/c 21/c 2/n Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/57-Pbcm.sgl000066400000000000000000000033221457665371200223650ustar00rootroot00000000000000 Pbcm 57 P 2/b 21/c 21/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/58-Pnnm.sgl000066400000000000000000000036101457665371200224150ustar00rootroot00000000000000 Pnnm 58 P 21/n 21/n 2/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/59-Pmmn.sgl000066400000000000000000000040571457665371200224230ustar00rootroot00000000000000 Pmmn 59 P 21/m 21/m 2/n Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/6-Pm.sgl000066400000000000000000000013351457665371200217740ustar00rootroot00000000000000 Pm 6 P 1 m 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/60-Pbcn.sgl000066400000000000000000000030411457665371200223560ustar00rootroot00000000000000 Pbcn 60 P 21/b 2/c 21/n Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/61-Pbca.sgl000066400000000000000000000021751457665371200223510ustar00rootroot00000000000000 Pbca 61 P 21/b 21/c 21/a Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/62-Pnma.sgl000066400000000000000000000030501457665371200223710ustar00rootroot00000000000000 Pnma 62 P 21/n 21/m 21/a Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/63-Cmcm.sgl000066400000000000000000000052621457665371200223650ustar00rootroot00000000000000 Cmcm 63 C 2/m 2/c 21/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/64-Cmce.sgl000066400000000000000000000051441457665371200223550ustar00rootroot00000000000000 Cmce 64 C 2/m 2/c 21/e Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/65-Cmmm.sgl000066400000000000000000000065071457665371200224040ustar00rootroot00000000000000 Cmmm 65 C 2/m 2/m 2/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/66-Cccm.sgl000066400000000000000000000057371457665371200223650ustar00rootroot00000000000000 Cccm 66 C 2/c 2/c 2/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/67-Cmme.sgl000066400000000000000000000064461457665371200224000ustar00rootroot00000000000000 Cmme 67 C 2/m 2/m 2/e Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/68-Ccce.sgl000066400000000000000000000060771457665371200223550ustar00rootroot00000000000000 Ccce 68 C 2/c 2/c 2/e Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/69-Fmmm.sgl000066400000000000000000000057561457665371200224200ustar00rootroot00000000000000 Fmmm 69 F 2/m 2/m 2/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/7-Pc.sgl000066400000000000000000000016111457665371200217600ustar00rootroot00000000000000 Pc 7 P 1 c 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/70-Fddd.sgl000066400000000000000000000046001457665371200223400ustar00rootroot00000000000000 Fddd 70 F 2/d 2/d 2/d Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/71-Immm.sgl000066400000000000000000000051061457665371200224010ustar00rootroot00000000000000 Immm 71 I 2/m 2/m 2/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/72-Ibam.sgl000066400000000000000000000053561457665371200223620ustar00rootroot00000000000000 Ibam 72 I 2/b 2/a 2/m Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/73-Ibca.sgl000066400000000000000000000036641457665371200223510ustar00rootroot00000000000000 Ibca 73 I 21/b 21/c 21/a Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/74-Imma.sgl000066400000000000000000000057231457665371200223750ustar00rootroot00000000000000 Imma 74 I 21/m 21/m 21/a Orthorhombic Atomes-GNU-1.1.14/data/library/space_groups/75-P4.sgl000066400000000000000000000014541457665371200217730ustar00rootroot00000000000000 P4 75 P 4 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/76-P41.sgl000066400000000000000000000010141457665371200220450ustar00rootroot00000000000000 P41 76 P 41 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/77-P42.sgl000066400000000000000000000016051457665371200220550ustar00rootroot00000000000000 P42 77 P 42 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/78-P43.sgl000066400000000000000000000010141457665371200220510ustar00rootroot00000000000000 P43 78 P 43 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/79-I4.sgl000066400000000000000000000014751457665371200217730ustar00rootroot00000000000000 I4 79 I 4 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/8-Cm.sgl000066400000000000000000000036441457665371200217660ustar00rootroot00000000000000 Cm 8 C 1 m 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/80-I41.sgl000066400000000000000000000014061457665371200220360ustar00rootroot00000000000000 I41 80 I 41 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/81-P-4.sgl000066400000000000000000000023461457665371200220460ustar00rootroot00000000000000 P-4 81 P -4 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/82-I-4.sgl000066400000000000000000000023211457665371200220310ustar00rootroot00000000000000 I-4 82 I -4 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/83-P4sm.sgl000066400000000000000000000040561457665371200223330ustar00rootroot00000000000000 P4/m 83 P 4/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/84-P42sm.sgl000066400000000000000000000042531457665371200224150ustar00rootroot00000000000000 P42/m 84 P 42/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/85-P4sn.sgl000066400000000000000000000033041457665371200223310ustar00rootroot00000000000000 P4/n 85 P 4/n Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/86-P42sn.sgl000066400000000000000000000034671457665371200224260ustar00rootroot00000000000000 P42/n 86 P 42/n Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/87-I4sm.sgl000066400000000000000000000035431457665371200223300ustar00rootroot00000000000000 I4/m 87 I 4/m Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/88-I41sa.sgl000066400000000000000000000035161457665371200223760ustar00rootroot00000000000000 I41/a 88 I 41/a Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/89-P422.sgl000066400000000000000000000054501457665371200221440ustar00rootroot00000000000000 P422 89 P 4 2 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/9-Cc.sgl000066400000000000000000000064351457665371200217560ustar00rootroot00000000000000 Cc 9 C 1 c 1 Monoclinic Atomes-GNU-1.1.14/data/library/space_groups/90-P4212.sgl000066400000000000000000000031771457665371200222210ustar00rootroot00000000000000 P4212 90 P 4 21 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/91-P4122.sgl000066400000000000000000000023511457665371200222130ustar00rootroot00000000000000 P4122 91 P 41 2 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/92-P41212.sgl000066400000000000000000000016301457665371200222740ustar00rootroot00000000000000 P41212 92 P 41 21 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/93-P4222.sgl000066400000000000000000000061611457665371200222210ustar00rootroot00000000000000 P4222 93 P 42 2 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/94-P42212.sgl000066400000000000000000000033451457665371200223040ustar00rootroot00000000000000 P42212 94 P 42 21 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/95-P4322.sgl000066400000000000000000000023511457665371200222210ustar00rootroot00000000000000 P4322 95 P 43 2 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/96-P43212.sgl000066400000000000000000000016301457665371200223020ustar00rootroot00000000000000 P43212 96 P 43 21 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/97-I422.sgl000066400000000000000000000043401457665371200221310ustar00rootroot00000000000000 I422 97 I 4 2 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/98-I4122.sgl000066400000000000000000000035451457665371200222210ustar00rootroot00000000000000 I4122 98 I 41 2 2 Tetragonal Atomes-GNU-1.1.14/data/library/space_groups/99-P4mm.sgl000066400000000000000000000027461457665371200223400ustar00rootroot00000000000000 P4mm 99 P 4 m m Tetragonal Atomes-GNU-1.1.14/data/pixmaps/000077500000000000000000000000001457665371200160675ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/pixmaps/an.png000066400000000000000000000006011457665371200171700ustar00rootroot00000000000000PNG  IHDRabKGD pHYs  tIME .xrIDAT8˕q0 E@mp8G'6* m&uԫ6 ɖNGl6 A+x:SȻKDLUMULUC#6a ?@$4Me.CN !ۇ9oabI3 "z!nVEpX d{%Vv^VjSAmp,a' Eloᰭ住"xԶm9NYUNa*MK 㨻?u]s.s7IENDB`Atomes-GNU-1.1.14/data/pixmaps/bd.png000066400000000000000000000010551457665371200171630ustar00rootroot00000000000000PNG  IHDRasRGBbKGD pHYs  tIME Od% IDAT8˥KHAYjИԅ@(RTD /"<Dx]z ji ${$ĽFDk;\D`B ˈ's ;f`?V^n 4;@+D`;8n${Up Q8t o0oX+BhzZE`p(~Yj`'DJ{:w,|]]n%tS( g5mII&Wee,\X(PAJ_W$U\{;B lVvβ7?644}P+Jb*ir vS$ {n#Gבɤr*eBz<i[_vS+)o60ckAa9@aUTpsn27j֏擓qIENDB`Atomes-GNU-1.1.14/data/pixmaps/bmp.png000066400000000000000000000071211457665371200173540ustar00rootroot00000000000000PNG  IHDR22?bKGD pHYs  tIME qE IDAThŚkluٝK|")Q(ɲWd8YSۨa7- m}-}Ң.4( h" &hnܪRU+Kd[dR%Q{Is>avW+K^`̝3+XػwB0CQ5H&]r[0R[[[FypU?9633{|ݟ]@wvvv֭[Y H/tZc Zkr9kyn$=z(T ؀1|JXk8k#0FCMqf! cǎW/u YLVXAKs]l`/wvvA V˜aeB^">] 9q47нk~ghhV d_x~t~zfqh R̳?3<l/y0~aA& g8Hl/{Wo}voI^[|姿.0rfU^w/CZ2Z[[ٽ{wWcl6K&9q_766> H)ke H= ?y<[^4Y:|?ǫ*kR tV f-(g~6߿?8‰C8_7>- EaQ/ DWj6T{WQ+81~oTM"W_CU81(Hsq$Yʢ+rsf(WeL9gbq{,R((/ Dk-QɎ+ߥpV1H pTT^.(f׆U]VZ9qchu`UWuU^YJ@^8u_HJ{n{x˖[V%dtTIkUiF׊Y0:<7LWZKI( m@g8c&XMC*֮r V 2JA)/úZj" {BVL B"4k 0@sYWUR` 7x=qֈrSL rd69[PK+$FEr;?#\QR5 Bh^a2 !rXD4zm0)S43մ3 H Ð|YZHbrchBq`Y[J-@S>y,H FT@X5Yt_E;]GµdPՈhTZ|? :qT!y_L)0hf:p;EWvR%(1F.A,0PRGQlGo}0Ibv|{7MO sL#cT+32!ڻM&q-l_G\n)J$hpϏpNF wx7tC6IsKM36 ~f͈] ~{Zx]w+hsh ڄ(P1E}fBI~ T$j6 OxT#飫ױևhJ^!S(qc?$~dUe눭L f0<ƔKET>KXqR*^`f4 %Wsn"'LMlDXFP̒JH&jȵ+oZe?psɟ=B>:͍Q*1FoCp$P owq78QB`t@P -]c"gw ۹agόO0;r !$RT@*AS{' pMxXc^}}NM.c1ťiRJbF)RȪTXQl˄ƄJ)srZef tvxM$=q~3;M<$ :FP3VVA@$vt5% `>}]wKwH,֭]û}D`it{s;4 ʩ|MS|v,R 4Re,EZK.o(,΄O2ivqO$mcX[M!fjJV#s_r!a1ĺ(Sy5JE 4c)vl=fsc/x~x& cAXkյ(?㒸r(MRX^`e Y49 WNh쥩k5|r +NQ㳿u ehtQsmYQwvю{>摧qJ,EJ$L9Ci8+e`? y ~TBrڦ %qNJioAL& Pm[.5I9^T}SSSbvvvebǎ9@R?gd#J;w^\6b8' s0 ET*ɓ'??yf >IENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/000077500000000000000000000000001457665371200175165ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/pixmaps/bravais/Cubic-F.png000066400000000000000000000135761457665371200214500ustar00rootroot00000000000000PNG  IHDRQfbKGD̿ pHYs  tIME  .'mIDATxi|Uև,5HdUeaT\!.82:/:^Q PgFɸ2y]F5 ( ATB,"BXCNCWWW'!!0KuU/7=SW\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\yaV x2=qGD:nѫ2/ gr]Aw6K@/cv5 ?:_4))KӀǸK9zXC(Zf$E t6Hk_c˱eub~m2U?JPhC&^OoIK5Ii]ǀ6PF9e)+̛dEYՇ"h/%,({?JzYܶR8RɢYp4 _=AtD?U E([(Sq+e+v wD, jn\@~Fy CЗI,c<)GP"e yE%]5|,U [P2ANA(bHj ` J_h] M Pp/$ƳEItb*VmE E~?ٱeSb_ N˄a9"2GT^f6ʹ {vӾN!$ҘeSIq6TGRDR!9\2-6DI;M +_Cj`|Cq@^Q&e?}cZFeÚW<\dIfQ (_suңokQH?)W@Ơ)Z @+ɶ.ދNLCdQsLr!Q1?<5AЛ K&{aqУMR8`I+Q)\܈{@:@ əثTQߞ XRT>65ı=NT}fr^eskT_5@gṯӛ_?ֺFB A(ONUQ.x=&vҥIMD(j^alG1cTW}sD$!CX-:1(F&qRW'0wي {{cu$Ǣ֕ աqR.De. PHx嬬cbJÌ(D@I2Tk4]}ؔ4+;tƋJx(% Sl?T"5VV%YTnl@QcEy8[PQle.[5kp8.P|ߒXJ, cu(+E~D Gwk#dFE>5C9hXyx#J>CI sPAb0qX#6lD93V4JE=%u8R|(%"r7_-lrt!ʫA:?㒺\sYla=3qe^**e.̺2TM9 zIwu?1g(ہUbd4 ]M^:Eܶҫ}uRnZwPd|kX'27jmz>r!97o#`$P?uiЈspE+O@y1'l[fs/a?Ҝgn\p͏۰Q?;bJ=>kO1rCO:kpP:oh%  W)c= Vù=L$r+{ |x[8êFmӵJ(@>M,K"#kZ6SӍZr(@Gs,nVo;~!:{ދr?5Lv GR5 UW1d|io$2eΔEe&ٔ4̉j n VD*uP5c#;(0&7ܕ[@@~M/fH%$$4P-8l>ǎbd CCH"r%Mk+b8ǓoEuUuBHڞg+QyjO2Sye坮lW|Y]b1UeҲ+ zL;Zr*@&e/ VW6tt!zq ڸF[hŋ" 'T*y՘uƚ!q4TY Y0 |hb]tbJ ?i 0YF% ӋwYH%jQA_ 'u4#D݂WP*Pxs6B^UK:QQsw$\;.{,0C7#$h9V\o݇T)@ 9Qޗ4ɪ& j`#)[ȸ8B=j:bl$"7mGWjdψ-5ZZc*[Oib]2 ѭ= I$yfwWqPe1g.c;5}d,`PH|xaŀ/bebAᅀgCڎó**&:[QX2Y"܍B]lp@"!wTAe"Ӊ6ظLl̑ǰO@]ȞYg];MV my|2GK3ahB!:2k|s,\dW;;rS$_e͵/&i?`kqDèkERb@/1)-:fwULo8Y=ek@zTO @9R@_DyooOt$,RkaF)ezrNxfWY\;z_kX?_{qQ҉q$VN $l=߱5ǝWO.ڻ3}ًȔ \_8^{5mMXa&u[uW*U&qSԚ}Uu>V^|W38&v<&j+f@Gǐ歾S"ْfP1$w}HHx}"`4F^H:zU Yfs?M<sLyITRwɃ:q"lsQ.y="Ͻq*n6a_TP i'w[[ȔF>I装h_ }gry))◩Dkw'td5j݇b>YqTz Z!$-a 0$1QY.Bel}RIXҜlw>ezJ\ىDE܍Ⱁ=Q.s|V5 Qa{L 69o؛;}h [1@ߡMJ<_.yX 楱 4d,:vAִ:C6ќ`KQ!]J|Vi9dM_دڣLnC7dX8 Q)QEGb~"s d7[q..P*V#_ d dTܬh8*j{elkr/k rpFڽK)![P+tɞ?_?;#Ҽ*t,91量[}s}r"Pn:bz** 2Zo,bjļBT޲Gmd5c9Nm80 tb"Y17>%>N2 2k,rQ!Kf/rk|>-(H%/hiX5jG"= Ď;*xސk:c+x IOٲS/O\(Z_w,ml $F&@] 7Ka" k{ng_C}  P&dEH&o,qQ$"k+I`F~>+V"{=lH10{'z'^{$7MjQiR}v+r$IXTvh$sL03@2eg0mQ;K,}E͏H=J֯CXpdO25T"<̫.R-9ٞ{_"$<4mPLEe)5ތj|XT}Ġ&5(o 2T e'](qH>Y=Qn1e^:pXJe02-V$#.@ ;`Uq؆oj]~&7C JTI>HT]5,V ىrGegJfNOǛ*SXT|-ia yH Qs05z e%~;84Tu}RH᾵9\(**$3HrzKuzcɔ[+[J.9:?{wl5I LMոĬ޵h#gku,)+TM(] gY@%=yܣ`1a򵨨lNjv뿳sM YgPlQ4Txa$S~YJ\}/u!}Ȯ~o8kcx؃z_4wxnO_9^%}==adn74E qLd-y૑y=݆hѨж`)b>W Yţ ?ﺧ5z8A w՞  !@9=! QIHht@Ke).VǿYG>5 cmc59͛lfNGj-(6#lW\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\rʕ+W\?gģIENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Cubic-I.png000066400000000000000000000114101457665371200214340ustar00rootroot00000000000000PNG  IHDRQfbKGD̿ pHYs  tIME  .gPIDATxy|Tǿg !$bB5*[EEK)03!@]QVąMEVoQZ5"AQ7HIr RTD([Xٲ̜$3L61|O3w<9Fh4Fh4Fh4Fh4Fh4Fh4Fh4FXDK6 q1RNav0䰓,-%= 7Q΃wK4ksb5Av]Q7qKX g[Y//@$! j (1 mO$)ZX뻃o"J>`v~aZTiQk|ԯ ~eVr {1&@}ӻ`XbD%Q61Y/EdЅ4~R1#z_8~tfy( Jh6-@svs'bls6Y*X"ժE">~`=G6Q~/4@9N9@ǞQ6/ht:?I*a\ZbmZZ6nH@8[a6 yd滪'rU-2? Hh~U-sQ|WӘd`J6CxVlrEϓ;'\RٿT2+(,kVEr½Oݢ=>%lwipjQppWh{VwU,.j`+]e5Rb2'YhΗKZv\^+}7yCfiMcrzJ6sIEyg!БR6WJ2!5f ?$_L _F x0F-ݸ7l0߫&1>ԝ!.&Zt灏&^0pUTfv]5(~ _-5}$=a& ykVJf# س$w!oE(*=2o&;W\sI5r)S ʚ)@%ljsG ?>#[] =KZB B JJG]N<ݶ #/[>+e\$78xØ\C S*ׄ5<6>݊sTjK>rN[SD,1C޸O@yzFAEjTRBa p\DGYDOi?3OChNB̌ ͢.}IE-۵,o:⢝.:Ta,Gz&bLrv9iI㛿kQ\^a|u{K!<=x\f#0O\_l{kTgml^Y@KV֟%ƭs; VB\+;:)? r̗eo(al:V`/:n2hSq;[&8;o~*OkՌx^QP5̹oGF]pw~ܕ@l2S}٫k ɴBV5tK$g'C bP}=^ V䊜Δ9jcqm+56eڱN BsBu-pO!e>'?_Ms>[j|s\ru81=ΰԳ9]y+sR|ץC>8[Okޯ%ⷜHϒİ ίToVeSꃳW 1)|2GȯībJq=Q6tY=^ZuVL&B93lW΅Bn١]''v?u;&Q ivoSb+_BokϋF-3n >^y6;-h'u]`pk N|U):.h9\ԄujK7K78kSm}Yyӯ>}Pٿ>WrX*59L\4AI ց)+1]dJL98*}T v.IY&-U Z|;yhZwqT+ӟChd_YPhjpv;k^&?6?uJ6TpvL)}7U/d1+WVP 5J_81xl%́y/04q(ճgԇ;gOKe>kDn^UYb 9qS*q[s9㲐/k>MBn(g>g0(9kp4aANW'%I־59%Gإ^8cqM>tY~N*mXW,n )j~8ǹL-/ w4Ab?LP͢8aYI l6a2wMag«)} XuV͵g^ <Ls-eKz錇D]4r6ΙRul#r]cK9ޔ-$x^|\v"g)}xEEO`÷t@q1/O&xUuD[j1Wg*-Ho͛\Lf+=  i!tlcGzKezUtA\ybu+5bYwlN1{ 1~V4 zIŅ{yoj! :0L[:3zNQZ">yo:^u273n^ 9[\r˶ZWrt\(2vH /RcaAQJfu +{ˮI e&ꥱ|S|3"Dڝ ",ry2%j"}>@.) /]%F< [HMhǿR=6w (װ5AQ! 1|G mGkf;[8t>^6˵nVQ?hs}h $[h4Fh4Fh4Fh4Fh4Fh4Fh4Fh"x5D]IENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Cubic-P.png000066400000000000000000000062171457665371200214540ustar00rootroot00000000000000PNG  IHDRXbKGD pHYs  tIME  . 0 IDATxypB 7VQkX TD:ZQ(u)E tQkhnXŒVq[EXeɂ!<'ސVx3Ie>>{{6\ ,:),-< |~tPXOt/ PZ!߽XQ^LTnhtW[-7Fhac75&] Y >8/^RRm6$L"Y?site2yZolۡ_eCMx8Jb[^-{44Nӄ$cA%H;-& ꅤ-S ^Eu0gI\[$ U'ȿǁc1Uy [oD\ UjUP"JX?z*--}(AKU$h)A"0׳Wl9q(J |}! Rh[|gM U/7( Ch$ 4k@;^3 xc`cs @U`Ký%͛7o^r669N>{voKY,Qt:B;^ XlH WZsU1vw+i\;_ Mmp$ }cY|*6]KzY/۔ UMW+xl W(A$s]%dkTD z;DD "Q|*:+)B J%DڮF!PHa ;DMJI D ^J%hB JjQ(AD @ uRD "%Bv@v/c[k{ " <\ <,{(vCm>@sѢEŻ-#1`0pЋlX6Tl6 桴L&3h'v,59W}(Av{hwQ'7Aslvb;#TqlOIW=>I( <_nUsܪ((pi')vII_:ˁ;^]$LuEEE|_U }/l6`snʒ%K4?XLF >|=pw͚5("%H5p+Qx9n†OkGgS$ǭ>QQyWGQt/ppUUm|F%HrUX-0hpU8"E$7_z Lj#CɊHx p?6twl[d*`ˮ/@|[(rΝdNPDZJRk+,7Ql<{K7ꜫ$M|O$t*NgSV;62AU`lyͮh9e|8QU&,A. ,IYmWK┗? E9L@FrdB.ȘIaCfI+s::*"I>͎/z b[?4}5k&>sd$G~Xj8o| rq5FQkx# r;6=lDj=a";_MrMM}jũTR$jv|$0s;bKbVckh57'ѤJiJrh6j16VolnoH;QM^`AiB].` 6ÇW'*AS܄H)9w3T*Q ۱ @SЖkqWι;:Vgl|D(:*AeOW, 6l%0dNSg56`[JضHitִ[ hZnȿ?'{_%Hxs!hc! 8RqXzr}KLرcWt֭((s|b4y(Vßj sáخqfw~Q౳c3-:ךAIJۀ'[6>dGbӚ㼩OcŶBaSs* GEuf!.뫰l7֡G3AvO|hl1$l3po'lFK ]o[@0>ZН듡g]l V>+鋍 [f=.WQcl1q&vHB :X*lC" ]`ۖM-NB=""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""{sTПIENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Hexagonal.png000066400000000000000000000227431457665371200221420ustar00rootroot00000000000000PNG  IHDRXbKGD pHYs  tIME  + $h IDATxy|Eǿ39 !WTPT'yA /yk[%=ZOщh \F X3pUu賑Z+]ifA9}G\jur Y':ۜRNHcK~=S ޅ(h$줭FA8wۭz} v8G{>{W*!M[OoYCt4O^^BGTBJ; ZueY?H)!֎K)gJ ݠd}JiZ DJ]l6$KPi<)ez~BvWض=YJ9^׊x?Nߩ))lWX %%ib#q*>qm/B ~X-VK1ԲUD\2J!REiw#ҽgBƌ\4qk71fK)?D"ƍ\qqMJ\V_qJ"^ ekvrp믷vCm^o-ZӀQ}>dȐ$1~ gw9 mg۶_R*%%eQ(+(((Hsr!?>0it]ug6nlaaa^2٧ ۶u]BwiG[qH$UI,Ys炞={.*2335 E!+gJw  &STT4ض"5RMӼhԨQyHOp)..NŒR q& !^۷qZs!ZjDz4W>{B9B^ >EEE|>r!ӺRs2p &w4@7%BpZXXR.>i={,R^[ ̀j!}i~4M& !~zɈ#tp"iڡHd~ XNǶ'QRinT1Hm~ucT]8v!.yuݻug8szY/X~qv3˲q])jw1c;Pt;B6k !0 .15M/N(!ߤWH(..>XӴRꔔy3ґѣ]@iOw0+<x@c}{=u]wi)t EEE}>BJV]Cm*@_.YėwpdFF6,, !233GŲB ;$8`RCCe23pvWq{ҎoA0϶">q0trqZZEEEbPIOt ! 'p"Mu/BymzsYB!.Qj! @q( B>ԑ)..>BӴe3f̝J m\n!B)姻:cY0!)m]LSXX+XaYJ XbEP(trraW #V}1cgw˲jvrpMFH)5q^1lذZ iI)'!x'cB??j;PJy2/;vlKض};priv%fUFtw4VDffx-˲IIIytРAwSF%%%G"RJWq_Ѝ0 cm+Um;DB\ISOf &|8WNׂ۶>ξVKezΰeYm۲ūhpX͗m!yyy<5###2ذaC뺢y׮g!R^GJy[nudpDMMMF< ^ lMH"7ν-eR߁bv+W㿤TAۉ,:m>}UVmt#]sF0bRFoH=OkEIOO߯K kYV83ߒR~_n~f:h2{üg !B]ɶ)ꤔג ;vEEE5k֜xhCCi{>iouJin0\|G41sۀo$#Rt]כ g3uō+/OM/tsI. 8Τ`0x!_~5MRXRRr뺗B;O*^z5jjjNKKjـ蔂 @p/8Gq oÈodffNhmÈow}9ˈ&<X$M ˄{rdBWrK=ȎTQQqD\n?ez|f0w7;; >xyDYDX?DɉLIIÈ#6CmopYYzo;dÆ c&Ō#7 sp)p ܕb0Da;0Y܅ 4͛o999k𨚚==Hi i0䓿ˮiL){"$: oD%G[H$T|u]>744,KMM-D"X^B>S_C̽RRʳb4v0xs&?$@rN$q7x.o?-[~{ӦM8kkxXi̡8*ņaĺ]N7hrFZu3i~=]"\UUuTnnck׮0`֭=ѓS w7s(iǍ?@quݫ:ybO$\5\p8˛aÆvK#632wie-B̏SWaчwN ǹ n 뚚ò,//nG[]؏eZ5 D&@zψW/Nbl[@}-vK$Gggg߽nݺڳ>H s~K$PJlSJ &W8'Ʒ/7-g?IYn#UUUs?xOܡ+r1 5H #V"xH.$&WDO p/.vk,˲V}}I&LmFHu~[Wo]u֣@VߜZc&HfCL߹R3z|2O$Ox* RJ ;}>_q8^>grqз5~6\;c0!zUẆi6_J ֭[^?uG[2`9߭Jm۞ /,9&xLsiL{-|#Z{@LYqis#Hi1;@ 3Z˪w[2wN$K<0/^橓MӬ!џ?|%OдL^RRH$r P @K)$]˅G"[LzOƇNSE7]fE.--QGuU"m TL4b@:^&Vj%do;c_&JJJY3Ob ~wޥ~8?tFwHFF/6nܸ&&>zd7f<@tԲe3g\o;ohhh#eZyAǿQHD$5-辮o[  GtχFy@ :ɝk5Q]{`\ҽP((J BP((J BP(@ %B DPQ(@ %B DPQ(@ BP((J BP(( Mg;{=N]͋wD'(+u`Mu p5x{,;fǗMKPt[\] [be^VR %֩%%)s+@NzCg;terE" Ӏ\|nn-DeML_̬PٞFPDPQ(@ BP((J BP((J BP(@ %B D;xilxl)S":`t>!A8FjV RjD4_~w)eYW{eq;vѵ @Ӵ_bŠ{VX5_J;\~=>x`NU_klm'fK@6"Mp8&knܸsO8pAׯO>ӤL(i휔2W >O5>uX]{ܹ7s>gqFA'ܗSO9 杵}VN/W1H 8B)b)sqe4q.BP҄RcKJJTI",YsMl i`ƕR}\ם$RS95/0Sˆaw]w(p뺇D"smNnbI)8K2d6iknq ,˺0B7Y󤔧H)uԖ5|L4X6J) oض]뺞=mۓ%ؿ~ǎua!ěOK)ǻeY*YYYY>"%%eiƍ#1jԨ-eee !m)ӯ_iii9[n=NP(K ۶Qm=sB>5rȲX]oʔ)0H)},Zd/c0ӶgeeuY~`Ǐ2 !D۶[zuH`Ym?R^_~ڙ7MH$j= mE!p)֬YUg][!u]*--+RR  4mi73.w;xn 2z#4M6|v#6w}n,))0 Ӷ3 ð@b"n2CӴu˲4.۶J`YP!5Bo\׽4͍`ѣG/ugضņaܡҁ᙮7Mx+i5Rm۾qCt]3c0MӮ֦%n4"^j83\ӕ@v~;_D1++͖enY֝z#Ow !Bt]!3lذm?e ~ի Z83SRR^ 84D)i~˲n4M_{p*pkG|gdeY !Vƌ%4\)iRu]?&&;veYj@ PBR@`u2 YXZZ:<9TjFs![@}ff汻3(N+A1c.|C-˺=]|y˲B4>4&85jeee{mK MSρwlGOyv˲&98##cƎw/n 6 c%I̔)SQmqW^=bȐ!5zwߣGOII B{l۞XZ__ήmׁq%Mqqᚦ]U\\u(&>R^5nܸ~iF"Ł@ a'v}zeP=zW"〥6s&NW^"0gΜ;X;{׬Ž@<*4Ms}2_Lb'x3vط>Bɱp^^J 4QQoKdqnjmvj^r-}[.\!],)gJ)af pbsuox puq]7777 !-*͆I)+~ 43$P#8y֬YwM6l>q7=#qlyVX+z&*uG\uRj`p*0X\3fRӴ6J)_ !ěiiiW&{bY!)}>MK-|D"Ob=SQc1833ill9dH< !^۷;'???\Bϟdf%_JǓ@zTVV۷]vWÄmۓ=addd<`mfͺOQ-2o޼dH0LӴ[ee }wUUO|̈́m' !Й3gNBd !ϟ?DHQQ`wu݅i~O1@ffuuukmee(Dmۦb:P@}>R/{x͗>áDHii^Phu.Y o|>غw] `p3uӦM띚D1(B~.˗Bzx7`\ c`vvvv7np< .J)?2??___;p'z_ģ@Vjv e[" 3;;@ٰaE4{ҕ6DN_뾽^^/YbEP(pfdIDATtrV4 I D"5''gQUU޽{iӦc!\!D0G]f͚5hڳ, ,Jedd\!<[q n`%`O OkCEEH8J)oBTۨˬYx4==Ht r"/t'^|)/[K? F7;~7rU;3DxxϞ=TTT,94{5{U7:???i`"N$9uѢEwF V7 !*c~G7!~xlF]rYk999ՇDۘEJZpg͚5 &.X+Mh`M /-]N o}q;ph\vf)-;;٪S5Mq]7DJJ3K.<==uDt7\3Ǿ mҥj..,,QGJ0Qt)} zڻٳBm:ꨣRv'xɚmg!؎P2l~Q/^ՕRtb]" BZ;i u)y$Y l\VﻴejK nT,hŪF*Ӑ|؊}2y 9輮52..`L+8(!:zי}f5 E0=@^˽$[P}=qĶ#z2;U-Ӝ re"Ew%swz22-grT¢Ρ垺7yVЅ J ]oӀ95D$q b{z;H {;8be&BP( BP( BP( Eg,| ]IENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Monoclinic-I.png000066400000000000000000000157221457665371200225130ustar00rootroot00000000000000PNG  IHDRXbKGD pHYs  tIME  -8w[_IDATx{SչߕdFDhGR& /x+x FZJ =J/XޣxrDъR&=V L|dIv޿[߷                        9I!-itf=Z NfI_56bia=ꀣi(>>^i2XkCNB:ujY__恵'B_kx_ 03/`mƔ1zج>s[+`Vr@ JcY9w\_^^6?!9im2`PŎTrZJQ`: NMzoK` = t9d@a( oѢEM>]LV?R w.:pHx2}s1(]DY,RS}>ߑ/ުz,'UeS R:< rInޭ8G|M}Sx3Ly"46yWo4X J)ݡCoi /wg$d1pGDhnznW?G^Է6(rELIG<^45r/pf$[2dȚP(t!&hduu0yI Sn/3ZFD xY|˫ǹx>p²#F_@"~8u+|g"_E2'3gm$K)++8 fc򒾋s9!5k0yw4QLY<&m$٦\k S(foCQ֣@JgٮJx|r{ ?QTVXBS~~YY?P"Yfɕ@x,#4x<ϴֿv'I|L_zzTј_Q5jLj[01D YHiiJIu^@=p,o bTL4/gnW$ hoi/[]$DtCO"%-2ؔ'6L/V,K@F=4Y@kO޾}#`o{y֜~l*Gk*zǔ(RL_aԽZ@[Hjܹ+\i|h(A 5V$TDʓ:܌G'E6]'YK*lZbEц Utbɒ%>opRjT!~7r0iS9իw^o͛7qv_ݻ k׮0CyT^g]Z wm/Z /ϤG0J)G/XQQ5&5!Lʖ~#Nׯ ͙3jӦMqvmƌ%Ĵi644뮻~&ns47cGz#MC=4x]ם8v]Y.Isg8`RǩsXD/|7g3LRVV &uA3a>ԋ7gH|O[ ":$-~π<Oy]&Z:T(S>߸SF H֨ ???:jX&g)ښIRn"=0hР5k\PXXXTSS}fqbS1E;?wxv%lXw3\L}\0"6cǎ:P(4ˏlcz]ij+\FًW_}u]~ҥ˯ jʋ0)Bq1LEuuu7j󀹘قc"J ئ>SqfMMͩQl1c瞖L5fJ|~E .OmFy[O3a„uMMMަ.˖d ES.IJہý^rus1`syyyј)0fL@Q˛ k inMLg)_~{1nU^HxzRg/]ӾS2M֔ߖ\$R*thll ЪݕS_L* I ZUH{L_:K1 îSHz8mzn!G_t01r1"tZ[[g[ 3ZеnvU;PH* r8&Cg}j9" }sJeee*Ƹ]rGcۺ})=嬊@`1>6\Z8^i}3&]$Dׇ9 Sfs-eSag'lK$ϔ{ޫm۶-sKJJ6BZ㇘!UH㙮BoJPsDn&0Ooۿ 3sժUo~#gTTSn#+/IEn}R?Ljiw1DŽ&MFΨ$|zaR]^^ʚq5Yz>f*(;v*I)'HyLsؑP(4oٲeyQ܍-TYjaODPY\\嬊@²e¦Dʓ iVa/1XtĔ>iGbFǑU^D ۷o l~R:\Q)u뺗00Ycr`GO:3SQL!"1 YQk=v@.?01G.V]Ӊ1%7?|C"|_D/ }Ze5=H~a0S~Ӆ6D  ><`RjFMMn%o؋18X L$L4hпl:xq 6czjv=p=fIZg]"f!k0nj^x<Qq< S9JsP nf)S0g_T)Wݻ8;SL{nG}Tm6UYY9]kɦ<+20B#Dq]͞㜆Y}]L{3N-v ?3UɊCN ǻh2Z]׽r&ٴJV;Lŋ> k1QfTvOk}:z^Gk}/|f)9@`&/u0HnTVV.?~|J>Çӭ[xkիWs-0rS=<S\N"[Y$m6455,stZ[[@63y\zuСC׎9rUpLϭ0aTy%D3ԭ[lnǹ۔ G+V5V)tJEEŊO,.Sԭ=ebʣrhFD)¤i3UbF\%5B_i=yyy 3V)sB }XLkb@ߏ8wHS~.)-,,졵PJ Z_շfX3yTxԘdz+ص~' 8it]2bSGu{l״ümd%(`}dԜ8qBnM_%;@$ڗHUug8: "bS &{ LN$˹"#Omv`a FTZP]]}8H,u؇^g[xd(C0#:ߟ93ZOEo(!jE2? "C6")]~s 1[f5LII&ufsR m0/! c"y(Zp* L>%@`[Ga2| յ]ؕ6SM|U &"U S35o߾MׯH)? Z]]]`C_%ܠ+&\2̾߂6{u۬'$=?lzb*W 1O?lM(P탙Si UJ]{<`0|ךH{V0'Z+uꪫtل+'aS1LP yE @c;z8SMS(+>x.SD,JOt{ض=,p#t"4-rYDw!IGǁx].֝r#0û:84u0 jcL &!bRKc bkz&(KEH>TRG 89"awN}<34 &?S>7NGu^Ǥ߃/˷5L$+,aS7` *D!IB2؊`-&k9w#Ĥ*%a"V> i&!WY`G=>4(m4.̀6"?ދ)}43OE@6[15 Dyr~ n, -cL iAAAAAAAAAAAAAAAAAAAAAAAAA2T3bVIENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Monoclinic-P.png000066400000000000000000000071451457665371200225220ustar00rootroot00000000000000PNG  IHDRXbKGD pHYs  tIME  -)zϩ IDATxyoϲ ,r(htQ%*D(H$#xU4+ B@RL^"Qa-23ӿO,~ """""""""""""""""""""""""""""""""""""""""""""""KucU )5V1O`<`peB`-80 hbv'lZh|>T<ɢz.0q?ȝ;wnݚ*=^,R-bq?X,Mc]T!ˇҟ &DQ}Z=۵k={[Fk`0q{Q4B|J('-ɄMƉUY>nu];ڂF!yxw p !zaTN3f`E5c뻶"> @p!-x&>6$cjh*VEUZG1"Kv$Y@/J=EmYoGkD{\n st`:M71.\\oާ}ǃ|ee˖XCy8IG@*n݇+YZ>q>[5xϘ11˫%3&!Y^FA5Vy1^e~޲y9RFO1S!ްUÇu!{ $C4UznlIosr&ٶd[%m<<4`>f<zѓy hk0yw4%FSB\&3707'ė9VF.-)m( >V0:.`~iCábGBL2ZdC60ضMntKJ:窍HS8 qkF=jGlh|̹JN@{Vծ T~ sNR puB5 Qe!ق>~$hfjlXfێ9c`#56NWأ2+ !ZxĀ~0[9C稪) HޚI86X++y8LoÄH>f\Yy-`0yѢE7mڔ+NZŘ3*)+:\ugEW^!([ho./nޟr?N2胯\ fjx#mv) 1SiTg)aÆF >ίc.dss%Y0AEI8H**xQ.mkjǜ5{cPр =Gk!f>{ /߷`du!Yk_PQ@DDDQ@DDDQ@DDQ@DDDQ@DDDQ@DDQ@DDDQ@DDDDDQ@DD$.RN;{@"VKbߵJ sy Y>0 ܖP Wao]eWOф7odQ@$S( ٣ŗ Ⱦr( k&@^sGC h1p#k+F%FkGl" N6HR@DDDQ@DDDQ@Daum`.'p]Ju T" ȍ5kԊFf U pyu̜@i$M%㏀@wȒKǹ!yz76CMgvlA>}80-oF޽;5j6qD/ qs; R-b+xx<v2|NNly;'¼hUɲ}ہu@VUp+q5gw,;[nօ An#`8pt`+?$cy|W=Zρ6@p1p H|ܣ '׭[yǹy0LVRRr6y<`an[ձ6[ '_vuwE">iby?t\q>LD2i>Y^^y޿]׽[⯀TeWoa!@.]b`L8R_@ƶSJV\\8_,ugOzSu|ˀ6$m]Yf05LGd; mm<.p8S̙SO%㯀|c.w95,ᾭI&Wh4:c̙MT2 {]@ov0aÆ~<t(//ƌ'd!03"A9Hd뺞kKJJL8Hh폩ql;[ ثSN4 p8|J%X8(71CьĐaNq$=_ m#ltXI cOHHd\8dc-զx)6hߟx:;3q{Q`ol_'\K23(@ǎ+((sXiӦW@}z{w ?=Soi.As|C;< ۷p"R\4BW Oc.mުY"[:PضKܾFO9kطIfq!y`ϟzySʯف߷mv~KSLm,pse[1~V?E=JMw}Sn?~HemѦ'$W!>BV6soV͟?~\=fdݙ<Hp=d0GY|9-dLJi.Dina">Vy< 3Uc1WnTc23q :4+>Vӝ x.iRLwzķ:Ɯh]vIt*Op')mW1_MG-sTDW6ē bj(QsENwϾGGa.}t f( w"\K1'Q\^Pp fp +0P񈈈H?v5 2IENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Orthorhombic-C.png000066400000000000000000000076601457665371200230540ustar00rootroot00000000000000PNG  IHDRQfbKGD̿ pHYs  tIME  -K AIDATxyxUT6e_@dV(<.e4Ӣqa O;hOqyڴ>}>J'.Q@}V/-!oMrB-R?uNկ|ߩs`0 `0 `0 `0 `0 `0 `8kF8\]s㹗+Ee2$DGQ'*%,x7]㎐SND/ XAb"NurYk%,r!l j )ͮ6.⩠$ɢG!3 A9ʹڛl# He)~d3+AbRn?Ռg;߰`id (̣3DqP è@"Dk&O6W zWx%'ma])L]Q^ [*l=t-g)BԺB\$*9IJu (h{v-l(ed4ܓ}<.qP{W4|&a:V'8$>Ϡ c𳪅ydQS؆rrUDew]A` Jr P*Ȥ{;]STX5 #DkQHECC T,mIm }8ɶ|T۰ SAOćREpe ز-.|\|./ 2eq@ yTTE>Fz;\ *l`+)\rou)Ok^x|"ur;gϒA*ZU!J^Ȋ0!A(aJ85>jcaea6(8cHg+\tu>OS/ b7|j?9 ?sy9\29ҚRUT_~A]A.V @뚉*6XETyeAbBU)e/3Z0Zf |K! YÊӪt8A`:[1&U=cHz~ A 65xN+萏q#8$,tD`YDcDeYQDZ&>eAq (' , rH!ޜ`_^s?+Gv@vETEW.Ȃlk^ՑMuFYyc!9 ϑG19d8þ%CHoz7qOp/:pkmuĺoj|!i_&D氿]rj/ %!diېK.T)l,qӺ g(Hl(>sOT HM-FXƩh\ (&'k/z[/OfccYF b,em! 1e,e>',cY&1Ae_SC F-14aoRGcY´!&5ҁ1Ʋ &1b,I<r1e,r5qFЃ,g!ѷq|A)z:B 97| KcY~XǦQwe%&rC dML$:#}қnI TU62vr/{Eov0q1-ܠ܊5GG[MϨ 25!]g ?c"^Wv jֹc%yK щ\V7EGvxj^w9~Yۚ/a/jA }qm~@i4.V$EǼS&%GqhC{sUd鷟v(w\,IS|[M [;FRx'-n>5RJbmw ]УzaXɔ#NߛLk+Q9UMgt#9:YBr$ERTNݷtOzť'*U=}iw^ 9B9&R$v= )eΕ2EFpPfM~=QcaYAcT9 *M}L͉ 8&-\$>,iy|!*F 5QgZXANt(caV(JM7z-L&%G٨Ivh쿩9a^Cx07c%SŠLT*6+j7y5ܴ.)lS]-L-I)l'Ǭ1hl<0¼Am^I/DEed?jJQODԐHhă([\~M͑ 7>Q}փ\l7n<N:<~F X'=ZM^zڪ).D~OYw?wLŠ  唔N΍/^+y N`LbE&:Mg2KoU?~ nM|m(oXԱɼO^"'"=\rtxevnI}`%QOJJQ|ky-v/n3v<;8IӉ{Pj~WK䔨#r̐urT Z1 =KԮ 5Dr(eFs"N=Njso^>ΐ-%\$c{_3p%8+-.:]miQء:\Xئff$O ir+^4*ȲZ&<5͗4-> YM}*Rfqx|~;Q~MKSԠ3@7:׮dyѲ8Y~RI3(qM+~7'>46faRƷĒh\jqDB2ל&Wtf8r,ɛ2%Z5 ~G?՚1bA FR6[b6['ngrfu? vlChFW{b2~ 2<4_r~R}f:t$*/p|adpF_TT6]?Dzz{[s^Œ/cOe'Φ6F2. r{56d裳mDb`+cX"Hېq+`y6ŋ2b ǘmdpkwޢR=xe|cqSi'XB.4D!YntБu( < f!n/Ѕ2#Z(,F&rRe.H1T WՓ@P?ϱ;4!«C `0 `0 `0 `0 `0 `0x=( IENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Orthorhombic-F.png000066400000000000000000000166661457665371200230650ustar00rootroot00000000000000PNG  IHDRQfbKGD̿ pHYs  tIME  - V~GIDATxw`U?BB7 UjEĆ ."pź iAd΋TЛ!W2% 7͝sgs=s6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6ln4 f'͓pjP\$-zEQ ?:R}|%'Aۣ"dzYC,\dWS7*=!QTIn"Lg"Aunf[)6'Qr㈑b9[ mix:(T" UT]ޭ,ōrŨB=}h+иKZ<[Qʂ2LИJ*hAN /:Nw56L*)Ho&jf#vIrbf$wCR֧Ԡ,Gc*-e#}EfSQQ'!PF71$_zEX',Ne:.;Qb)‘((yeٺaxQLq+qAY%"S5MfO2> ق2聛2QT~\ڠb{,3 2P0c!o:~EDèo!:H$8_uGbBlNK_62xetlb/$Gȧzq5؄`*Y1I,ZΛD%cY̆2QyhN.U>A`E5'Ws"LYh.bs;Q3zȁ3JWs$ P ?B^AU}QRFQSᚢQȇwvÒ(T%y]zUBTWa` ^o_я+IiU|f3<p43yBPj)3FĭUIIfq6‹$> 1y<<р~sU [H5}" Qz 7!)"+_pvd뢢Ѝi/fBE^q-<{<#WT,|=P泍_&k,BLpZ01M>6ZƔq2OtX&Z+fM2mi$!$hˋpYUGT/* J"d9kPfQ8l\T)=)B9J2B+bD%eYQg|^Di?z9uQeie:Ebt٢VINmG+&ETR0 ɏ֎؞OPz[ހF]TGKΓɲhk!9&%gu~ZP !j9ITJˡ&$QNO K3C%D% ES,@>F$XOIi'[Zؑ# "ͦif{IHC%qQ hi3p![ DI8ߤ՗u(}9=/,(jS8GL&f'9VV 1eUP](iE)b_-2^c )BkXgJjk~d٫Xod.ripSh#ϫHW @6wjlmqRTCN2B桥 (O8ElVz/nuPr|=q ʸp!yAeu#x&Xdj 1_#nag/2"B|0HnT RDqP\"Z$goDԌ%E;gdB2菖X`f:ЛO2*HS =W8diުK~9 :{Ki7ϘϾMU5ب?&ӳ>ԬLmOgx~bԂa55Cj"-_D`M! {[b%Eu:?;x޹NM:ц< N;Kyrڷ5} ^)C? *? :;u&' )r.0cE%R`xÍeNU>8LAk2^ fFY^OEr,2dyV^e+ D;c'?>iPdxCB;&|ҍ9(*av~ռr Rkld9:Q==Q$"nF<2n-D5x}oUGS9t f#d**]}-22!#Г)dg:P=z7?q~#WZݒYG+!BoDmr"+kDχ*C>gQe 9 ӕŴ`XÚGÇȤ_l(z Pp ire0qg^F4K.B}|+!4cqrLu3Y {1Fӛ>ocmM3-HǼ2>7@x Jsʷp>/bNu~N%lo"!d,h8I?cWfp>Wgǐ~Cq"3*aƐ;%Z_h~)MY%o Ir KKLc%-؛Y/URd ivOKQGMOUװy_,"b c>M-gQ?1='L\ r5 ̑_Vd;>l+r?;GM~5҅\aeB}F d(ğ5KԲ`4zzqTS,!Lh,$d8HCg/3$Ta߃F]o0<䢂!`+N"7 tZĕB c!| o:z]Z_˽()|zU`X dBεsx+'Ef/nW͵<I%uMd9!}'p]eLV.u#t Muq ^U<`d`Du75w$ "y7Z)B- z!܈&OЩhaoK&AaC8ؚC,_>0r6\IygVա?mkf4v~BbsXN8l'N2/r9Z`mh[Yf&$2mݙKDd{rx5h>D#~G"K'"00v,ۜT"3B|4g'"&Q k'@-wege -c]WVli+!vů8;h'(y liDЏ_42n_ڰi\|nwoq(FӋi7Ն'dm":1ǛD1,x5S["K+g'$&90է6!,t KPQ'rXNȀ@Յ+UUjAvzcK?@dUNexV#l%)}Z,FűЂZvTL#yu5EL"W_}/ͺ"k XIĝr>?: .Vh*ɧ^ⱹ !bycK`]Q׍ q~sXcv;FUq!gu(4o\0dጬ9t?{ØMQ)c{cȝ.lU}FgGj[tM}ohO;QygSTtb\|y%o)@F\rjsDK'2Ȭe1 Ol ibN,` $.^ք۸٧xVyng|'~ |c["'BH9){%Uq2nerȊ0|_.(l#9v$Ɂ4g;-kaiy2m(?̾VT9y֑8's7-#5eh**G_F]{\= *ih%DH$X@˞-Â3wK95):$; & F֢ pY[zH$d; z-*\gk?A lHٻT塔JiY ɓ́3CT!U="9+2:ng` `23<XKs)3ޣS@u;6CAm}B~qA$$){b! oe&?;yCdq]8hY_,Bw[P?5\I!DXS6o9YDB׍o'y9=v>g2={:~\^k3;@a(3j24gQ7]'$l혊:, ō!*щX}ln;Q9NM}Fʛ:J9uyM&;3] j>!U޼La.f$˾nDY΋jN^KvN/L,pv8Ҫ|DeWSQ[ 9N}vBZ&6/T E%_UO5gQɑͦqrDTs^zL mVOF#1ӸM6veݿGzy<]hg/ $9gGODS;{~=/.X { GO ůgu,ە\OAi]ƒFQf3m)el*9e;㹀q$k*]u&F,fmlNשEe ]ys,$}:lCݽZT׀HK3`>ʭA{{P[7&^Rל,GEѲZTTh(k=fxYK Oa;Q'A H#*;# qZWs=KB1 Kٷ"$㒼p$$=wr[@(KVyBTr+b*V}rW@Te -c GFK2ETƂ|5uR @&?EmXJf[ܒxoe#hrQQ9$Cf+`YɖL GBp=tGIE?ޓlЧ퇚d~%Gn_ylBNdAP)lT-O_ n e0WQĮgӒf)QhN$8aÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lذaÆ 6lE|IENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Orthorhombic-I.png000066400000000000000000000117161457665371200230570ustar00rootroot00000000000000PNG  IHDRQfbKGD̿ pHYs  tIME  ,8n_IDATxy|EǿՓ +UTDp *Kpʺ ( %*eYH;#ˋEX\ @H2S$3&1]_ILU穪 BP( BP( BP( BP( BP( BP( EİEF=ȏ+ (ÜG"9G$֓˗Q?jWacfE~\o8[WkĖDAq*|dj.n1P~.` >0U$vkVsQ,G>f-8I3L3ɲi\jg?ߒlq4ꭊ1қɻu>fR(S '3%Q1d+h=OIQ]y/WH93ު5ܼs\]1KHt@RYMs Sqf2M}A\% {耛̇믪V @ohHc%aNQϪ;X-uz@ B\d>W3Һ $/ ҌЦ3ED /m]Ab=w{QQJhCS'e1Mxj_s+ҳ濵b3"W'5*#1i!t 6BŃEޭ"o 8λ *0 @>K\Dw^I xB"%n`} !rٺ \_s+pYpiOZH]rLI ƱBY,ȗK~vnUψ9!3]+DQn>RuEE=7bz1S3tr21e'.7v̖Ud YI4Eq$XB$3_hz<.'U*!q&[WXɷ &$ne~b0AֱXQdF.q ?8KP6GlLJ d\ Jm1ҿUːƺ |9ėmǿbŮZ+ײ/sYMb+[U;@<&0?#Il3%~=ΐ <XBH`-,aɑ,[ȉ1.2:@ms~OogpuqXm! [ɜ$uj!<ydbmyesف?~l`h?XL@skFNqn/%p#ܪp+9JM[&{^Of!CF!34UM}!}p$2#|4^_}~v,{XBU2I[am"_oec{䮓 b_cBxOWm"1 +?^1TxNYfqs}}q}8N:#ś&5'L-F\+Fp 7c\jE,k%I >ؗ&`i1R1Sg]46{͒\H8gn,x3_29摼r>{nu_4_%-uԜr|?ms :m!JyiR6em 97ۺg,R+!JHVx;ʠQlvoFO`OGPn$ѦBc`n9Pu yAV%ggGsDȴJz9LiG/` .YwlÝS\Y9;gʬ:3IredY!ս<2eg73h"|{w"5a8Cz=r)әToC}vW7_/}[U`q? )TaqP ҇:?? .9Im?+uɂ8s?$?JxLz@6 [hy12 zxNn5%3D;:zțSs9~ JT\ c.U7ox&8 wӐAF~.+zH ~ ƭzaqAo%^xXZXSB"%8m/hμ(%sݏ:.Q#%X.<+Iliݙ_-n!"URDmc%<9A:0]՚.H) x_# r8RUDQ.+\AK>m78bETeAq7;pO8M^'ёYn R R I4SW%9t= `ÓM>dd1?˺tA8sD^n`acFRjI¶)a֍'(U&w8ŕN:^.F9ɼA REw6xѫ#" a+܅Q':[ˊ tB|tCٱ[cلmcI>_/^-DTd\g,*CY(˷J'lW\| }[̯prYṬz cŒ$4Z\iL;~FZNrY%ȮZ戢=VC "fz 2CοRA"Al1n9PHq :j?~J.\ydbl1A^\(&^_cHs3eRx2\V'<ә! }иmH.2ef8/wnh`̮`xc>c?^=r~/* t?7ZB2; }#ƍt=R9 ]CŋޕHdW1̠Jx.qj@Do϶mGZgm #*>>ƸWx'/8":d˲EKuuT7X{h2›X)3}t9ny.P%@++'G?XX _&?w<7,`TxL7^Omx& ҘD+)=U#vpo PgH33;5统f>RW&T-wxŤmr ]z O&fV odn10ҐFne|ٙC|͑G/Z}44IÁüFZuix}"U"HTXlLហ'm~KjNDEeh@3;9^N yi%ȭ^qoS-o|B y\m *#%>%./OeEIxΡrZ8Llr|VD,-ؔ^%{14{юI+'Hmy`O!< z5xr8: IJȖRG.џ8l!͉!N_]s]BSUCZHmH)fPr^;,$B4&q-HVN:4M,K.+c ^"|~Es@2S Ԫ /ZiK2|_yL,5ŎD[ST) $z'RHoP J˼uL RnA64Cm"Y7VmUV Wl$ўQn-Ԧ`aZPd'id3NU]A38R򢄹ƐeWr&[Hw>C^E`r;p,hb-]{X}*hV|M{H~tJ8R28\ѲԌK-#pb!#9̿l*W.a[H.ʈYUZYϱZw(e27 &]yaq+gF+MO :@b5 XL:{)\9m5cKЂH!S]j%ꚓN$'Ze) egp//hJnߪj"9wAKIm,&~mKRT^QxJߋ'eYہP xpF!Hsϥ}!uoScgjnp] f!boM9 ~xҶC҂iUSa ei\0ǐ䳐(1D¶rtN1I LD*a[ C.72=0h7>Ώ91MjVRy-DE"}/* YNk^ re! b2K#+Ɗt۸t+/0"G x$wW 6򙼣qc t ",Yna;y,mHڮOUE¶rd&}q%nގc uӰkcko?Cba|G_oA>}=oZtoF,|an?1z5' H.$<gWXQe?i1/&2o^2ΐˬHn)_VžJ P>`*Ahʍ4v^G59 K:( A3+8gAK&"&G=¸HR7 @<&~aA 9ioCj1ԣ-W[P( BP( BP( BP( BP( BP( B?ЁNg"dIENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Orthorhombic-P.png000066400000000000000000000050311457665371200230570ustar00rootroot00000000000000PNG  IHDRQfbKGD̿ pHYs  tIME  ,&y IDATx{pT?7K Gx8<ZUqD,":SLȳRb` # mC)AR䱻VDPG &${G6 rɞgn9s}             `x\j')7w1㢍?ERb" E1}쓣+JhnE(NhjBC#܄\VыGyQu~m Y] D57`Qu3),_ 蕐En;9K%]ZC_R-֊E1 sm|j2SeQ یA@S|h:+aަ+LxcC6LUx 0G pXM>c%VyyA'+B1ǘ#'Oa=w0q_+b'+P5~"I M_#rӆmĩ#{V6-"S̸g?nAZA Y-lT5x^A + ] c:.<#2_T급O6F 崳C @6:vYȬ׋Q=96)ߦ( %Cy4E==@ h8{=8A)SQ75,gVrmta-,C ժ)Xe<8I'[=M9VujhJ1m)SƳθK|!_\b}toxiv*JZ:[3´DZ x}ƼT<ޝfn,h5yGac {iZcSn؞5= (DWs9sxvjջl:D#7%rH-8UAmQHA  !!C$dI2Lc`$dI" ADCL+ eثteCd+đ rqQB"u""!ju <<$d ,7Af '!CV/>`kyMrNr{5qDx E''}E.}uDžx Y=)c(\2֋yg<I @ÂxuVRZ=3Aq:)Q%YNR gt %c` #\eLc@oXIa{9r:3A 83fIA֩+ cqf:vbDQb/aO#Ɋ o)_W8IKxx?lc A6D;j'W#~=Zc`|43݃aFUx5ۓN]|sHn|< ۳6 a!7e@0?`Si8TJ:BC|TRbzwM&VP` f:p3y!Hb& )$ \AL R8tcICH{P f}'IGzҖW$r&DRNS9            XFdIENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Tetragonal-I.png000066400000000000000000000124601457665371200225150ustar00rootroot00000000000000PNG  IHDRQfbKGD̿ pHYs  tIME  ,+oIDATxy`SU'I"#3(4O, lPQs@TG "([iRTF RtK?%mi$rz}9Y@ 4hРA 4hРA 4hРA 4h O`=_I#H![B"(<Q"Ӑ,+/т Ci$; :!ySs݉NWPJŖDR\*Q43Ց}ә`kt\zu6# ) eK\&۝D\S:EvnLnN붌=d: q0g 6_x%^ϓAonS-!SA@fY Ja3s'Kˢp,\dAk)X.Bȕo;ڈJ".K)^B$:~qp#m{n,RZe 4S8NY}F}q&F[B%HH$,/b@@rJ= Ud59`XB,F|/YkzuHj׾a&K?MSK١dʭRij&d_r{2IT.lr‡d>tP/!0 B\OI^w;_ԑ0В)iWWZC`+2%D2YSnՔd4}]nVCy虬^Bep\K(e^n#N`  %Daz!Y#|B'v^! %\ ̍}jhZtN1!Dk @#b};tBOt$j/%`•-vK7_%Ȓoޕ0[erLCPu'y8N]6!_|zlۖ' =uwq]0`4WY} ƿW _>G귏pk5W;YрQ.DӧT}һ4sG8c7[fuOҲ"w~?"-;n9=\?Wg :k>;&mae`ulF3vVu.#B6 _5J;R!^㢅!İ|3UN0?/ӹ,{VcLCib/CͣMEuމ4ʚ#ʺI<Jb2B:3b1#ͷ`uNǻ]?XVvp+%H:bBJ`7# SսY*@ yl_y+ުC,:P@ۘKeMlF$u(T #7zktfbz9)%h&DK!cgXPkibv8/8!( m8@ߌ4_+;tuKʹ5X!|HHS|ku+8̣Ywxkk+iVV[nI'A!& /R.=PxCVyҏV V 37b.U>E Rw2{l ?% f*%t9(6+sj4ycJN'!-A!9E.hMD^Rΐ e0Và&L_ȧh*{} &`5%fLjr< w&~B#k$.CL˿~V5w}wk>z!>'@z:BQcVnv3)I>k]:}/ȃQӡ*fҟB){ωdh:W#RH8Q(^ h&O҄KDثY Ӡp.p͇FCKxek#{+uB@>aZQk-D"Z+0]ȗ -twHEQ :)!FH5LߊD8<'O;:`tƷYI4].Z8FRgkݳFV~#lӰD:VV]5Lb¬&HwLhm1!b+64Js~j|/:&TsS?tcGG7 Bv\ V0q! z䈑D)XΪ[5l:FYMDȾNV !ߦD;'o4UYd$/S4w4 Vth&'K-/ע k `E #DVpo2Ś;ӏ^wМ':lQ,}{.|Sc# hG,\ePkx#DqPHzgMa|HM4b4MyDeK3Y~$b|L**M5'/S9!"I?)4XܣiH뫋H(廥{O LM|[<ґul:UVr>FyJۥ>!z:M5JCQVT@%90a1G>wD TЉ<@rMB7vqFr՞IRV>Y,vAj<^%"o `H>Oʉ4텙neU{iŠޅ?dK hD?!BլdHqO/Rξ0r]jfKdmBwu to{=)Z؍b b:61Ǚv3Y&V{NW9$˹ ouheD~G>wi Mխ:R̕а+WԺc(yI,✪Lvuk:ɴdu͎J|C#"l8'd׆Nj^";!,^XݚhקGQ^=)SmʎeO]m8"ߥZq=r0髚~9+Ǽɦr!7ު quJY#kIKI2|'VL'!ֱ!jҐ*H!F_M w^SKL6934w}lWR1/vlk: %DY+V3Yݫ<(5JuM-&dUt:]G:<ЮXτ=ާeAw5F&K=>UaxHkh؋c]b{ekfq*`t.͸|DZ=srf*t- K: >&,i@U9qzg]0H!DEw ͳKCaE>7:m蕲%;BvKv:] Mx_,P)s&&cz[狂a@Kem^׈]I+jo/.56 .s8>CwLʚYBWrO d"NV;'H#4}n$\XGS>rrr"K6yu#VO2D1Żx(8{c߈11M~$56{f $LVl?&xXx,!z;GkU?K/Rrg nVX,$3k z/H:$^u H#ʾ:9nzq{kn=tWzf1U\F…H\,k!:_aXO8PM%d73kCX+b$~iRǠ^Be 7ǵx?_euC">{8dXam!H [ΤKVтc+H3E%n~,d_N!-p-,9Ic 7B`0W ]$O +5ƴ>`;GwU,铩7WYbf,v0Fb2n RGfUk9:cD o>p[88:+"ʪmB<.Iepk ~gWًl)N~e8,t8 CU1jY.c\"I%?[/sbH],+;ɲdXX"URH+ZOgos﹓5M.7&=d(Aݖ3-sP+|̵$FƜՃNFҋ1+'݋W:d #utܸ2>zh w $֤sƜ 7,.l:Շ28!0."֧ CTb;  Ks9^J%1RDsڛkc{4! SfMɰw`x"mefA/@1ǘr8{_7{NJ`z#8L{&G9[)a.r  srLM37ò`LZLC7FL1ò*Wr_e G*ijJyͰZ$1i~K&_,G.m!x"pX9^EZT!hIMyJBncPrgk cFe1-v˂tL!=| fXfG"sH@2q( ߣ\ceA?YGo uQ'#B'FaY*`Q+P)YJ:jVr}NEq ]Wun\)E1(')W7m"ޥ(fbY>wa$:5E 3a]d. ,K Qӱ|fcY rnmkVJG3, 'DQi欤MYLNJUxcL$ CPKI^AjXBC@;ZH/8wH;,e#d 6ѐ T݃f-buw~.ǢQs")-YV"","ܚjژEzs>tfͥ6p}E)?.Hc.rN& C$0?pbyU`F<2/d[AMYZKXToJB@. #`oAw} h_sE Hyo%@876#S_o9Α   )a$K.ynV7X]$a ױof >"ȜH$b C[@xL+5a-gHdeYיAC(ݭZgQdpa+ ðPsG1`$&wP= 8$)--=YBr@vlp? tBaK?qNybYVr{D 8ZHnHoB;Ld&7a2|8F;ssst55Jo~Q#&fnȆ%C<\IFܿ/}cp4ҷLAނ aҶr&f FdjHd^ٙoLǖu f`Ot;+ @ARA xh/dSeR` p/j|$tԊ[QCcG_n0 %̥\W)t;`!" 𺭨I[s;_285t;ez@)p4B[ 51U_Q]ː.ܟ%`ѿtD iB_7aMX1h/ ]@$] ʢn&fVJI;y@wYG'ͫ@&Tsq{N ,+Qd85iAa|5X~dqʭfRqx^ P ϴ0zҎ9o89$|'c z]覻J -Nm$R`>\D^b1|z98A?P[0ģ4G]Xau%_?&V }BSLW q$  %@ >`eV칷.͠y!_H )q|_&5}>U=4!-xQwڻx~ɩAckP J sޭFmVי|4tU^1U$TV&x } -PUۗ`tՏRoԭa5\8cx`X KϤi+hqv@g5|M;`W/_رcGVZץXop*I{[ً{W_wJ =b J-RR҆.lTFFF㧟~zR,sVs-&mswYw#҆fH$ZTTvz[qⳁd^gZ%W`90RS c`jIn؎JE>.ǺW˓p6c~c{M7+SZ" >5d<]ϠWE .Q5= Ĩ6kk+e"o Ae-\à 3ă*&;XTѧ$tCg*GAz%JK[b~*d C $Y"- 7ڤ@Rc?x֨lɺA?A*ĻN]b@Ġޠ@ĠA盓Ż"z7PD ( [ zJ zU~t*]"] .QtAM bSoW@݂$+T z ?Hp+41nߜʀ"oUL zLT15@D Ne ? D tt1"SEQGwAE hT%w1oгDH"] @?v$13,!qebj" 9º z *WA:B^*c\"] zU{AOA ZY)=1IE0w>0$_QudE"-HsT zJ z+t ^AT>\,b߾҂AA6k9(Q0+L'c#9.J8[1n˜K%db10261 ܜnݭ7l."QVp7i̧18/N|실IO$kQ3"8Dg'ƴ@ jP7ԟtAm5, eAl'*>`jZuT'vxiKv ĠW[o  Al Pg8Zqs |[PE4DZzR߀3jtM$QF[,˚poB[}_P"tdo큳0XA  D{6K Rw/?b˲v&;;{+0U_ >$K %ZM|mm~ &Pa ={6mڸ;Ӄ9޼a~vyj$p^md*&1+G [n;t"8ǿk;RW8i?+S}t>¬}AI[_`lmZt0L{G [n(γcV\=v9H@orrr腚TfannnQ|Ei_ }P0[usC"ȲH$RhѢNq_`*&&'W9El;Kdŏtxx[-HZϠۉbSp4UK*Z23 hͶ׶BCL>Lݬ.Oqӯ_PG(**j[I 5gLâp5GЏq촽5 ҝQ t.Aͮo Aƴ" X,6ג!,YN(`:*lЫI&͆a\_XXز {$SH_2!q\={Y5hlƍ 3V'/;HzEe6*2NӦM~F6k#{Ћ@3`pZ!E(]ҀlϺ@3fb'++!˲Fhmi˱5E%&$5y=0˯xaa 0Fy~SU4 aQۣLb* MTAH: Aڍ,쭻 GP5'ߠ9XVb>5933t7teYa,o2 1n'y{K `ACT*|Amn٬V$XLx ^^Ԟdq"+AD"b s~N q+ $Z)鑗TK8vIa\" z> l5ك,w / OFy_~=-I@,Mv%em.ZpB0)F誓c֪W߭ȋޝg yb^>]'7h]:b]liCL*f(gf{i#,u7{=E .QQ_i~l*16NeB `CX\ʣZ ;F">5LE ޥU^>BM}PDzY$gg  ldxb7x0U(n$U5g8xUI0F~e&P-tnjr9jXz@srr7 ༅  ==mSP%7y2T!3m('j70x\w^d%&WS׎ehm3݁ˀ`Ijz͋LU1g * 3jFl F1Qd>PC\mbp+bRXeNF߹ 94%*(-H]y5 8U^fnc"a<}UjN]7&?rB,Ţ?zYڇXa2s=MXAGPZP_kAQ+a.vSp #CPN;b@D= U矤Ai}40 Ga2CFQ,.=xPIz zDf㈲< l, 4wt?@TP)*GM=a4̼ւ-D  1*ݻnגr4hQl1c4u?KE ǺAbp1&%8rϨ541AH j3BVUV3g;jT?x /P6w1 !b9^~eQ_@Pq1ʘI+YS3ykD#IqZJAr.D+: ~騑xHf:S4`q(jk:ß*: g|ޗK'8*Pa@߄ھz$>uK[!0>B[;F-K* ~E'=PC^"FŖ'$!H9}"d|L>j>Bϑ=(jn ^C/BԨѽck ]/*{t|&[mmA!j}n!蜪 z[&Uꉰ e 0*}xAP3MQ/.AAAAAAAAAAAAAAAAAAAAAAAAAAKJLFIENDB`Atomes-GNU-1.1.14/data/pixmaps/bravais/Trigonal-R.png000066400000000000000000000126651457665371200222140ustar00rootroot00000000000000PNG  IHDRXbKGD pHYs  tIME  +BIDATxy|Uǿ՝ `A @8I2#.7\ ō\p|:=}Bw@" *,M!Iކ I;>ϧ?zOչ9\AAAAAAAAAAAAAAAAAAAAAAAAF14~O ,5FXE&D_@cԈ1Z \ ̮,+"Lq]~pO/䩕Mp_JM9_cb[&1k(K|"\ y h/1p=y%!C[nixd ;jw+];P pxw8 xR7>fU#kFvvi@}`)jVx@,,'tpg^ t1.y~ޮGC6qXT=̺_<)rq ԓ[=>,8\x t go7nMwmץI}ρϹܫ@wx8HjQE1mZ-_#e**~8Hj.>-*3䶯@w1KY \Ńd\{{>ueɨ`i9 g _l&u4"vM)؜n@o֬,z,`Mz>*qJ{SLطg"cӝt2J|2tz}|rEUxd I-lz0 8=92`7`1O}( A+||gmjыl.2(6Z`כTSxE?} l=!cX*oӂU.TE7㨬Ӊ{E/">N$4N>HT4nܸQǎ߲e˚˗'w5c!ᜯ[ sP\Vt1l"^έH7G,Dgf>(:<NrP;1GGA?B7?)]$t/Qv֥:6|/҆8֠cWQER{cI=XNQ+F>"|  EE1zFmA ʗ&MWIAjIwI@1ɮ~A6|,sL <10W$"Г#л,=Y?[z t?8ZSZt8TC'7.`ͨ6S$C :DyHvG䦸Kd@7NwA "]" "ЍMwGQX]gX?*@7CFMz$sptzg` ED1ʦ9tt{d\D$3j"Ѝ蟋$D%У$5j "Ѝ$Qn@76njn@72D <Am~*DN@7J3+hԢ^?ԶlT1R>"<sQ ӨmNΒ<8e%S{Y'`.j#ԁ>}|5j!Bbg$eE^{x rm@)jzq8DzE#л~؅߁]n?E푾s\c,F V"e;1|t艶m^F3*/;TR?/R]ڊ7v;JK/OA3w,+<*R]xRkuq vTj{w= =1¼px(8˲MШ틡bc\ T#:p^*݈mD7;|Y/ft p!`={ܖr&rv*Nk*J@]17$Kʬ>}4nx[AA&Cz1N,--L6Y:(f%iK/٬'= u@7}~_g=fTtzk֥eY%?3t֭eYXծBXAlY@c2i_Y?WVloc{R. tݰ܉uވD"&Kf͚u0n͚5S#kiف@ w11!8|q/"gRguvL;]#yiAע}OΝ{Gg.&Oo0#E.g[ ^b #<}lsVhL],])^$=RޱiӦTlQRuF&8":C}^~n@O  (,k&Pq\CFf㹉2nԽJ s!6$C2qڧxi&=q޽yqB\6K@lVv8x J|x{ߢ[x8]ٞs  N(/ΏzbZu=&E'meݹhѢzq|ELqul!zŨ:"C=vZl߾}tb=ZuxU/tT:)CPY!RܫG}ttFFƏ㜚_ZEhEy8nJ*f"r$gMsp'$^JsKz}. ak8ȵp Teb ; x  0FhYNY-~!rss׆B-˺g U/ǯ*"=zW j'Us N@_ w2n/>/FC8GAb& I=j:躅\HRMe:Z=9E;bԪ%(X53o޼.Up }5}p3*MTSy,uϦ 6![eLh#>&Lս= u >Tnwl*~"~`%Zdj+QQ6 ύԭ=QtuDHX:%6fje ,A~߱y?ٔ#>zu\G>l^9Hh>"\VQkgc8Ӂs8O ֣2J8q.:W^q%M!.\Tt;BZ']mF?:@^vU÷+DMlnn1x. P@;T B7T,Wn?3Y_ɞ7㇎vO'6,CQQf81 BM=+jۗ|{cA{gZƲlOA%''gjN˲yN\֮/du"`iOVV3CP*.wozUqNTc|)c3ҋA-VkX ;PUkqe!PRR2 (vnU )G3{ZH'dc4œ9sf;ڠzXdpAJRsZ J#ç zdH;4wN8`x1MxNӘE=TE| _]4aJ-Ps'+8:Dݼˆr BZqT\T6&iun@%&ҕc u QLBr-s?1aB? UhH$4}9]HHgC,wOo`>ZL$3s#w(=٧{{ߋQz P}?s41#(&8l,CUJ\_QT                         f?ʠ_kΔIENDB`Atomes-GNU-1.1.14/data/pixmaps/cedit.png000066400000000000000000000023671457665371200176750ustar00rootroot00000000000000PNG  IHDRw=gAMA asRGB cHRMz&u0`:pQ<bKGDC pHYs @SNIDATHǵ[lTU}L/ӱ-* TZ*LKJ!H*)A/fb4&h">y JhDT"(Q.鴝iQ*0-NKg^>tf %-suYg)ilV?$TP꬈TZZqZRv^;syI(ndYۮ{w^!#"hѢQJaٱX!MӉW[[WӤ-=k 0S)EEYkZ#A"0n::D}}9f(8-DNBͯ?2#A5?'N62 Jٺ0PyK!)T?E a3&1-?4@0d3g5Wi%@)@aQ̗╢ph!#h=g=&:D)2F= /IiY ))PƲzHގc1o[$ U0#qPBքBiwTO;BՃdϡ560M MO`رXZBӹkTIWk9$3ikï#40"@dg$.rX=1{8,_LÈdM%,q ) bk'}p{ǔGfQ;\aM2}Z"-k`&e\hX)<:9k>hsh;`nQ1Ȉ.?;<bH;s 717o$`b#hRkKh$'୩8^o~|Fv= R6P&  ѽt6AI1'z+6?5뭀mP"P}32g"cj. 4V15kȚu5Yޚm<KD̄8kw,n !h lܴု+Zk[i |x Vv=Nӑ/B\i3 "ҁ@wEYY \bm;P${swژ;קIENDB`Atomes-GNU-1.1.14/data/pixmaps/ch.png000066400000000000000000000007201457665371200171660ustar00rootroot00000000000000PNG  IHDR ޜbKGD pHYs__@)tIME w]IDAT(ϭK(6̨M#ydVˈ(F,bi;$sdv(jw8Iɫ&]pAbX ӯ_>i~rod}!-#~T8㳘 kAG:E sUx HnLvzd*KMoRl4( x M} kIH+E(: Cs?bӌ6Mh%^_Gy}񳿥gn"5r˲8ڱEdE&bm I.q=8ے>v,pL!x# ZA_'Xfwv>~u{-,[8NZCMwؿB'okfiIENDB`Atomes-GNU-1.1.14/data/pixmaps/chain.png000066400000000000000000005136201457665371200176660ustar00rootroot00000000000000PNG  IHDR&bKGD pHYs__@)tIME   N IDATxdus2;)qC;%n"eʢ-Mb;w8^PMKd'8Dqfzn~*~> @9u9)l<ps B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+( B;+yEs<|3b{FMf7RD:\|}Q]DEF<}Q`'Qqvq]P/)Ef\XO){M><|ߏ/E",7͠+\V?WJ{tPx"Rh>HqaMٽ^ه11qQ$_'Z{}^/2vYKcܹm[oE'{QX jya}X^"DRx^_?mDIgҙsH>xNےNK̾s|_` mQX7z=n62'Tdqj>\xXShxA~9Gl'IIUJL;rqzq?޽~r{o#TiWu#{>4]ގ;Xl p)__ORή7dpNrK&N:tP|?̟)AxbO}-#.El/"ΎsϮׇ]fz"s~o%{:149$f^}8b8ɣXyrWs+k3+s*#K%yI('3sC>C;:؏M\4,q\'{ 1r^6 ,`nן>OEȿAv P`ߴTÔs*I#cD*/L"& Ph9v?x^{3paٸ^;yʘj[X"ZThoɹq\W{OF{:\d_t^w /cqع,2ZhKM&1|H4k?Yۻ:]kKة:X3?ޫe0,)cXl2]ZiEx94 Ӡ tPpHB;3ſa> uF}nS%٘fEςcכ:%׳(?x:s<8,9=3)7Sj L:˘Vh;Z:qPp']13Qna"R=FsD,D;vWP^%y^&Ydzl7>q m"6ч.875;]s3go)&ȍ܉O>8,WT*bfgwR}E_Dlt;32ݰޛCx[,Gý֭spz-s,%C ~9e>MwR`+tNpFc\̂Q1cSs3۫dƔr~q2|?c2[>r·ss>FjTE$䡼8ĂUl?>ߞwb݈J n;r"{0XPh%ie,[DHfQ>9G:v>xh_p/$&}@rq^4m9a(.Nʱ17 s/6G>m?^ku?-bCɣGD-Nx?~*E_/9Ϯf'O4 S`ګ '% :{Ũq3ۻs@*F ')`LL9=3=bH O.삮^"1y37N0J 0q8#I> x>=]0}fIis[1q[X ˘Sh_2:f;tQ.(މx#?#W~!2ʲӫ%f̤lt==lأ(v:(Wmt\%G~?Dxc/㺑LRu7K͂D7f/NwF)5҅y=W"F6OnwUKG騘S@hdLW)De^ov /{xLo{ q/xV\5L江Ubm}A=zzk_l|\.bkڣ?:;}7bxҐnU +9t\^,-:y6 ⧈jꟴ"XH̍i%7lol-Gͤ%g_L/Gxa~~6bGļe=n8q6\|܋kKOߧf\\FF|dAjsL)e?~oB;@e?*$sߗN,ʵ\2OH":Q Ƣ!Ig{s_ Ŏq?^?ּ)Jؘ=D擘6{?;RdN^;3wbdg96SuW s(W:RX֩S+Fj&ek%P?w$~[9s{#6e7>fbj<8xɸ3ʷފceiH'%Q`Zv/įڲgSKtf2yv~(4.|Z@,ڙ,J}:?%P/Xq};>(bߴ0ݜV`7]~ZS3<^,wrF{/Ԕ0^8jm_:ugCw`B;pT1v[ Fd7%粗N g>MEueNQIY$W3)dލx_J&~d->]hә^k.i.@Ӟs'f>!V^1-G>>rVhύ{w#zsځ7VwAm:KO;bzsc0ɈXױSl.\Y흢I#F:7#33rRl툿o{ nƹWES죘w[i*); PO3)7bnIk N|vnVl|uygn{n][Pt3cȿ gM<39WWIG)b6O࿼l.\^f'f%͏joʿtH QH9"oﳻ._/]fx{:}dzukEQSIqrsVOqΌ)Ot'9{𒓞CԺdO{c9E) {uL<+EL/O_PǗ>+oUnuovDtgfN+% 3cd&Ez;W<v#bdbTx:!`DrߔPw#Ow\|+o+#cZ]D⑊3 (6Ct].4.\GEZ<(OPW)_Wks:U i&l B;%_^'ۋ"8&ۙyye=fS2^٩z ;ukIwM.+ޮ&DuIE$B{Ja'{*O~]B<߱g6O-ol<ŹdtL;܇חq)c')[OQ\׏[/ns?ٌcJ=~M<~6bcvJ9PWoOm^ǻdn.{Jf^=ڗ^_yR=V84pTS8zRt?6N}v<}X`ϵܠXʇ0PdtWt޸^}I}2?yBL8*\#ġzMӺZp}H"D"6|G ɶR.97s#W?|~uϋ117Nl.MY^>_}b۵zݽFw{5.")es8,9¨=z^+xi)/_qLAWvtl#VfQ'dut%qZТ7R!=}v9~8Vk/M1xS A8q؞7s-&^: t|gr<|s~ɾv疟nn1(.K&ZNLNgԹm/\VaSi$äsIO?x7;ίmCn Mt Z|Ӹ8-ۘw1qkLckGmvnvQqm ۸*o"ABbbॢ8q1\|:3J?]~鰩;m,?Eƻe[-fDzEV| -iBSvc8~8_ƣ=AoWߪQ2y܀r/G·swxi(/􍿙^\wܸ^~ñ1IܱJ00,qSgzo$8$ cE,T=]& cro3˟l]}FrYbNɯOoG$nM%i72&jKO+l56o8>´Z>13[p/b蘹Bd1n'f8R? ?a1λd"^yKEI%ǽ^}8*u@Eg1s(WsID4Xp,Rä^tMe(Kn$g˕1ż 8?ox?㍏OWEc7{e6Q4ƹz4FĂ始tߤ>ssЮAۛ^%3?ƒyIzwߛ>2 /}f~Rο4/vn'_N粏n*kf"{[窻=:s(Dԗ66ѫ7a߇>c3#DŽH*FMg^{p/R~ԧXE\\粗O'x5GȤg5U\_\TL 1nV9v26fiWl̍%E1cg &]D>;{q0җ~6bbYK=+jw ;zϥ$#;99yO`d+i##&Wǥg >\vh?E{h9*.=5 Gtt7훘t.dzdz߄Ǜs _ ]4}8rx?=ڢ= \j^7被Ũ ځ Gs&fZl,Y8XDMjP+}]4NZj}8}8$;{Egr$}9FH/:։"=u %r<iA|3帘"k +ؘ/>b{D1}rs.l6x<9tGE/_/4vn&_^˾9ͩGeߧ1$͛mîNV ]޻|4L&IEB֔Gc+Gg2yq4NEȘMcdL}eQԮ+簧ǺݽEyݸR@_/W뭘{+Vh/cȘΎZ|<^)Ԉr|{AW{u|u3~M1BiHj]v9?"gۘM9YTIΟEJ}p,I$~eb H&ĹQ.q+:v DE-(ȌN^'j0="f{8&̞=xS_~Sb,yrvɞjIT[ףѽZz(~ҳs6}ICJYT_պ::Y=~E{DelL4q23ia{ѐ84~!s >l=Wm1.67E''DϜI"jٓKfG-8ۏXuua챛X}>?b;0+"xLb4gñ6651MZJ\jJ87ք2diF9eN{W-{Pp?8}*&ǜB;pgmϋcq1K 8it 8]5䧴,H 6H86&:`kwm8\jOEU1\zI9~<*o}="v")s\_9,@ǼƒTi Ǹ ksTT8vI|8P럯\ZvoӘ&j>ZdL75w# ywt|U/,v$_^hcq6>>;^/ /zxFٗ$=ogtfAykdL^9 [ьiݘ)>wf/28oy2+#cK64uf"{- 8f3fᛕbU]+G(l#9(SȞkC7{*.Ys G?{0ڇ#/is}z#HT)7cؘal8)S1{ѧ511wpi^cJQXŻxylJl=i)\W\to/".x!)wB/8ٸ*o;skCQ;INԹmZ|}h뵂kwĥd"ƉPmӨȾhi!s50B2@=Oxc%nr jfe{4.q|ҧPqB|\O=zj,O^io螦quKO֊ej%ޯD+<,*훢m#.#}sB;'_u~\u6-W8w$vI:g:mŬVv]5d!ޝszmLmkLr#a;v]T@]%1h?ٝG|vWFt cc"3٫]T)vG粈 췱Щ26=* #EaWlOg娚c^=9~^5ca\<9ljߞaCZ eO7Y,n˺Gަ w,M}hщ3OB4:zo}/_<SٌO^l/g]k~9K]ޡjNjviwގJ &5e}#%Ɵsy|L_S1κ_+/2.n=t?gbax|H8ҶQX,+̝\\dع$bhN{t׎Z`ZKQk]:Q2Nh̢luzN=t]TDѾ,]<娛#u{^8?^CǨp elx"{ZQ`O4έwj-Cq1.a=7b17\A_CItz'xfw=Bvv`b6r\Vr좧g؇ GMO_z`>8ÊLn XOΨh?d5U&u;SyrD]w\=_(Q9==2f0Zcc;b\f)йP,Wnjq;R~Ql[y{m^ջ4(S10pDYEQSc$X2k3g2zs}=94@S)j|{O,^[,Na]e{ᅳrshrniZwֺ{͑1eۖL=U+[3c)Ϙ9يǤ,v=iR3'=+xxjſtϟgTُ2=69쑊fYmT6s }$tr}LI\IN_uuIaOѝs|ѬśizLz{+>i< h'qQLqÕGS__]͟8T<Sh+G=n-*3=V-GԒ|*LFxLQcq,~j$'lUI4KQW__2|.AŽùכza}Se7{qQ.čx[R闢C><+KP#(8rL8"NX8q4ɼ)K;}Gl7{1#.I#cbfF{(H)YR~T_툊QإMl/RQ&iz"c2~Wrl^~4šl׵SM:"fO6;o7%CX? {1n-Bަ}G];Qu\wj#d){6/~>F;cWn[kx~+nu"yn"nl#M!}8 _|8Z=7~5r5`WbH9+qp5]2صn'<0s#};y;>:{ n=ffq(%1}oIQ/y([rF_֊nE]AEb1I U4v ^iduyj/͡ll_^7#c1D]+31f%UV ~[>5gK.F=ggyXxO9љZjTmUfѦs?ځ.oG:{f@ .O3(Gq-H7<;3=Zֻ )Qe^)T[>>TZC9 JZ疐UGɤ|J0E\5l7VJf^wz,SkX2Nl-ƕ&88،Rk"jNHǭsTu5oڳ7gwB;\H?7r]'XS-pF:Ș1CGnطcfx#hu/.qL(cTJ,6bKyKp.n+sb҂zQn[=+_%ԝ\ińجV@neX-^GTGEFkNjmQ{,1(q9QgOs3:|QwB;|8w͞ŧØf :ä#ڝ(R^}s9jtխ{Hi/zI,u9\}|]b<{> ]J)lJG{lZ8d/ڨINf~a5r]gu >O{/hl&@㭭ْ'ΟΞ$1,fOvΎi%opv {8fS(j,8vovfIQ=[cc%ԯ+]h:7e^mXGz4]*Cyd.6nĬ%R{ewkѦ1VC';IzԦ)WGhvp/y1isߨ УAD9jT;sSo%bhk#+3l*xˠEznx\<(U8alLu{%\f٘nn9*o:^%*ϼtp_~mG,Ll FD~5M ~c'>Ɠs';I_^ڛM^= E˺\"NOSlkLDg9 ٓlۣsB評tH)J:Kjs,ggS"W^ 1%qڭ ƂjAGǴ⺹y0{͝1Xms+NjC<]3y`׿FE?ʭQp9 lntFh&&#AnZ7{'=S1҈͈Fq/DJNH&]L'5#c&]1[vOu'Dqeljo.'e-XƧ'uֈQ+skctčNj{a.n^4甮SX9>&Fzڏy1| Si%Q鴈VwEsj4FI|tzh'ݙ33 F~,INL#d&7j{s IDATH,5V, /#<|pX4OW e51 ɧHX13~0Z.y6^}cgs'<#5TyDP+>vNw1 k{jKĽ <չR?yhޗv,)W}Q/N{~=2,x'̢AW{%HQ_6LROnnVp^,ޫ~OftG%AQ9y8˪M348:;EfůȭX3&&b ]0I84'Z]M9ݣ|`,,׎"F'E/֞)vw؈EeJj8lvs P3VRK$鋞Nj/ȖztĦ2r8xab7>cs>3'ʸoRl-O&ccj84// ҉BΘi|K3'x֓ uQڹas6L SyJ^Ľ'G)'O8 ) SDsvkFT skq֍3Qn|N`[%K&[q-ј= ӂΝEGdվ/c扛Ec*<}bmbdRXYvGc}wP'~ؘ2n]$^^܊ [{~^mxƛFDm&|_/Ujo}Yxz9w`x٠{[e.=̧V9ݮZP*F7{Xh9y1j;[AIPÏ?w΃ˇWO^S _/΃ʻc|?W7>ܧ8~R.>GFu6콇~_]w~^^c~wL|fұKQq?ǜQ08:cz8t9osG2.]WƱ78aqӫs-ή;zbi?9bٜA1@/fT`l#Ό;o{6n2ĸ]>щ +/17唀~&VNK7?lm (jʹa?kʇcus3)l|h#^؜vRh>GgSc>{4c6ڷ;E#aKgOu/Rs4(򧨟OD#){R{37=u8D&d0<+owTz96g^-j/+NEw=ulL/[Y?3eT竝 {IF=姥3ush|^1MR?i64b|L_w1gw0sSolL+~Et:SL}dr1Ne06jKǩ#Q1cc>ho.< S}L>om|LǁS: fQ"UM&i]i5Sp_щq.nݿE:m w80Cn:AKodLLkTKʽ1ъQ5Q(.\<;.V-, 6$vhv1\}ș}ͭDhXtσ85w=*'Ec&a碠 DkDedc.&ïydQKΫmv?M&Mo-@Ýfo2>%7^;KcS前-yW/.CKٰ1ZP_o:\qsڇ_o'ii=sځExҗ~&+oEMu-^QغG0Ğ8{rn{DHN3/9[8WqZ$(gIW{/{n$>E4L,ZOqXYEr9-w̱Ⱦ&h,BZZĘ/VsIŠ b2ړ>*37J; ǂnv/7bQnSF݈k*KP/]^΍~V7(AmvtܿʿEQ1`?LSgḚ7Z.dmA s{=Uh|=& eBquyEL`4dLy]*TtQq~ؘHDX4Unjk|Ž]=_׺[1|>>~#>=OE4 k}XNrѿouӞ;0}qHX89J5fܕrxydL,.[$INӊ?{A'(3EE '']`R(pv)ڱ%Ge\K3}~~c7s^MʉnIǗou6=u7fԋ߭#6#>ӠQ4As9<- cgl$={ې-W/۩/[:B;mnH6&3)g:gfO`ف>Wd''eWqc{׊Q^ ;Eڑ1ٷMʣEGޚ|$qݟ|bM7FTgwTC֥E2QBe(cOEG~xn,V;q~a3˝eOKKւvuߜ>>"9ȩ]']YdBTccʘKhI`y`4niFiiݻCv*~v,^E{`6W"ƾؾFi:Qhv'7:k30 DK~tr%30{NkE\eifg>.y/WE+عYd 9f,o/F4w mě{ZI4Z %?˧Oe,݊[v?zo{^??]pbD.???TNމ14u3ǫrTagᒑ1 H8<:ځExƉƶ[ўk%Kt 3rQ}۴&z59 a}w!y7N&#[t/p{3?(߱55Ք?E'[uwΰ$X\A89nIܴcb.E\^^w?"⭈xsvl#Qǎys88,;Zp/Y{oҀRItwB;lm6ㆋPˤ҂?5I$aH'*Ot7eῇΞVwU4b{,(;*˞XZ O?t/_lƇjo,:5aB~i>aXzb=$|oF-><1vIz8ySf]*泟W{ɸ.o!~1uspL.F.0=1\tI|?/1G/{ Qhox+SgI-kZ2Zy,%Y~12@\="H뱸~h_Ҧ0xt/ӂƻ+U|>[4Ͼ 5J Ɍ7gRe1jyvx'p'2/ZJhȠ~`?w_퓂z\˗'w=zxnvt\sʣX s:C uLIמw8vx" ?HԥA.8.|Cv i[Ao y"Oۊ6zteNzfGIݓorGv<<LUWuy7b%F`9խ|H Q> ~b?xz_ %גO|<7 7 wW2,Gl:R)7 <3k^ЍX$H@LH#5CÄ쇡21~t8q_)Dj!E.`!A \ At7*~~/73NDEfʺy3|W]ޅ?k?0o/ aQxoy}- &u?3$υ-ɯd0T]˵ߴC+KfPzɾƝ~.+S4b 4t'![&/ˍ|X~Nhi7{0{_`0.Jf|~FnRb:;O' $`FdB{wV35ޚU9 E >7_w3$p Mp ~e 5Wu?&fm;aډw2X['z `0\4*|*{ZlT;FpM؃h&Vj!-{ Χ%v4<$ aT~ ;hN N>pvO}Ql@8ш\dy1+y/E潬i#/6`0 [c̤Gou tJ!u#wbN`~L{h"Z8)(zi1U?PҪ?K0`0_ ؘ"ѵdpy:{㤔 UFKv<]1j%#c{ ~|xkNx `8PE`GwtKDOAtSh3^ZeF}9g=_Pebeh OTc& & AR09sWЎFh@#/{|7ۯ5BڵS`0 (@\LSݾLyx鱟U*;RnRR3gBY4B ш/cpf)߉|ǹ]@W{hn0>g0N:^a]??G!Ս?F0oߋ4םK2 pp9'_q{cOm'jw_sŞFnk}JZN{4gЈшfzt|%"2U눧yALh7 & }Q"+ejdžœ%n;Yκ 0>Qh2⥄J%dB`0 L#1q)7D籜9=9qWDr<р^1|wڮ5 Ð~} v*chvѝ#6=}g@y鯗 9,F`0\ 0`0ܢnIКS"']4ʶK9om{P01ҫm^t9R2ANbT1 ŜQ1"D+*rL)v`?R~ǥ^| xif {;heChK~ϣe?&}}oyz6rjkc]>+qD|yV*E?p׏m o~[dW(L 'd0 & }2%#Ijmݵ}"Q%;h]o02V.9UZ?/,^k0 s2&{$Q0d!4߻hn]Ѿ>h>_^C|&*eW7"l~j3f32=y#q2t~d{gS9⩯=瀛g)2C ÄvW3n'gF?B3`^U4_8u<;02cZe"U>%`0 W;7\$1ZI 1 еMRW.XW"e+!e1a0hx^ʡ<ž `y+|v-6Fs%#ccJ)x" ՛7*0ErΏsIlݳK-}U  a?'4' 1.pQc˧`%^|hI^t3(wa[ʗj"{V E" H~:A_n9`0x,)yÜ8*nKI.Α]y"^4A2f)b.kv5U ̫ATޗa"{-٥!/rӕ IDAT_Bׁж>$0Q'Xt0yw+%bHpxv =1 & }BNx=vEv zfd_Zs,F3t\6Д?°\v <1ґ$zJ#@z oDv`0. s+EFM+@vE%9eOQ6(DMVnc8:\q}8]\ٝ{CD ww[{%Z}2 _YU8ʔtWǫfZ< `7qsp%RÄv?9 pb\{_E(zs~Үyӓα ;ֆUsJBBs `߻yf@!]Z1WR\ܿ+k-:ADAq= pq=n@EvGc\da7E-J&˛s1 Ův%~ǟ@_4Dxv%( v{ .BTTH";Jg~V÷Ǫr,aƉ^:#f*5qe9O  a@g t(эpDnjn)Q?sLN;^SZ} k_һ g0/ɦiJ$m]lH$>q2䗁EAw " a@iUKȽ`~襰\cbs0Wl S%0i˗<E4{;o.:[&Kʐ8r NYGe^(98|Vhra0 6/\`K:m ܌'scN\V:wGv֌)EMڝ/OÅk͵ǎ.rhw?ԻٕŅj/ko] `F"e"95 Lh7 vJIx,[G:oY [2`!JDusπY*vy0FXK~e4bhbv5q4,J| t\3">F+&֧DV99- MDG 8 `n~7[&ړ]Zap n#9n/f:xJ,rojᆵwm C^c'w䭻Zq I$)'PԈHN Ĉޟl'$$yႻn6Jڽv 2GnzWd, %pv?Su p]xd1z/"|X\/DI·"d\ {ݬi>懀=-7vP`{ vXJzqfQNް֙#U)-okj?H,w`0 wWG.ktox+'D/p oF Q=+|_\w՗}JqiUqQwxk/-?힫VEr"Bz=q"1.SsCјJmzhw ;!r۟;ψrx`8`B`\zm)4؀!s z^c&qLr*dN=1N|_˺=,Ft Flߙ"5Cw5||l/tu)rTcJJo%2=Uu~ `80p7pm`ވ쓵kd+Bm!h'\SiGtxu ޒVJ*r;.NՎ9s;vbB^1Km\JIowձS BCaS][*[UqPfHǀжqM[¹f0 & l7=H9Zf-], eͺ)dz%uxNVtlX95lY|1Z T#zJO=fL>;?z_ξ>2+^cÔrl!`0ǮַZFb"{5C,Ҝja@z8Qʃ@|Q\V3#nv'9,Nؽm+""|/P{b;D"xtLwW{/*fڅϝx1aَ1 Lh7 ~Y~N*N.0QS2ڕ34,'L,5DFrӚݮ8\g^+~DpnmD獉0fX `pop2`Nd& ?Fd5 ?8M`wHsPDr{Gx|QD)jo0=".nqY+_8?q9*"5S";9|xACb޲Ei^HO& pJvτvpqv -ÐX#>2EEG\q{t|L| ڠŸeu]VꄣݵD17IGpEhmDd |,>7>*MǵQd{>lVe침_ w;?.`0?_5N#"{+WPM _ W'.8SG6>a(sm"rNM2TLxDVk&D/"CDxSpLk%_-~UpEc0.n0]7loU.1P@,D iխ#!s "3׺܃+R\ՁrgR娃=EB1Z&cccyJyW3dmzǔ}|=Yݠ>5[KxA|w`0V wW}{L/[/-dr1$ZDJ3K"dr9!".vyN9&b:o$ j2ӿ|)Ni}Z%ՍqY5iFxNwR}D}`80`0o.*,U3c.N c1ώ--ɖ(S%<& MMÐ.#'j߫ 3|}ч.*LȘdϰ97]|݆`0V; G/h]bdDqO|~_ !sHq#hĄ8qP-]rTn{WΤTb­=%Vw%v>%{6JFϽ}FqU%Hf{hoʱO hV?@O5 oDK =RJrIdT\@&S*$#, Bt,L6gn Oecz,Jf]ls.UǢ ;aWHRZT}mqխj: w1 a9E8q5u y޹7l.:f.+4E8-Vi!?GRLFhZĞ|d`0h`0~ }\)ڔJ&(tpN"RC ]%Qޚ@]֖"5)-}*u=}f$ gٕ?W.T[?Ԝ pUU?p`0 pWHVXմ /<11m!T|#}`Nv R.=~\2SFxDGqGQ3ܘC=őN]!)Ee&||e%)*GT^vTq_!zm Á a@عGPi1[2 eix%RCRDR+Fh"%OP vD X(]j:JdQ %#JPH*R`Ie~ՏH$jl.PPKP7O:M"l 1 -<]LX* R:ɝ (+1D y"jmg)c+Ap`9:)C%q2I=ZnؒTx@kqZ 'BsiϷ %;_|`8P0`0/hGfR"VVprpp$˝;SNbVc1=c kN 񒸏 )R4"6Fyl2l t5EQL8 W;ݻޱ2; Գ`0"pp `c-}O{R^;ݣDT}`08Uz~R> ^ ;V}HE /bEJQ E$270DxrNlGtR~'&HO.FE$Uꈕ*ۓhtWT5|,fOV=@v嚵ծÀDdHf^rvҝ@dž$vK;AcEt10>XGA 2y1T*"DRVP`'J)?2Q8[MյlKz?;Pb0 W=kŞ5tnVTB{޽خ:L(U^T+9WcQ2SJ*=00]%s{ne/wWϼ ">~! yqh<BI.{G{Ka 槌  bc"^N P;nq>HĆ-ˊOO]/4 "qh9DvfDzA&& I#Q`#GsCHpm~_%tpZ׻Y["zk6 U w^?N7u`챲Hico'͙18˘t+ɞB@k##mJI @tW+'7V}?kEW_DlTTV+IѕN`0˅"eD T$f^ߙz#e`0\XnADv 9 ap,W˽%NJY ! 4 yHlcĝonb/\HFTʑB.mDgK9Xh.'j]|[N0f{=_3`]=S3~FĞ]`o= ;<4蹟`b0 Wm'CCd SQ8DnO _IsP.qkm䷥8m5UcYP re؎򸘅y{)׶][8綵›۞v^= aQұ1sl "#"z!j~(w,7s\褗ktIrr2%by#O6gٵTyXl܏@ȇxم_UKZ{Ŷ]%pWd \~ &`x^±+1Yoc0tɞأvoFluUhVV|B_ Yjbۢ+EJiHkQ"YXȱxU:+.IM>o>nⲻs^9fO?BwA?Z0`0?f{}j12NݘJhÁGee`P/Hs },!5fCJd$ ZD::J Qv:vIJ6{DzEdm*?R1ۻ#pHv{Wz}DO|ц`0"^;+#S2[x* O#z[?|o"b{xKIV;|,P!Q3&/"T'T]re8F. O%8?,[縫׹^ /Gy}k þ„v;WjYZ&Cs@o -jw iVÝ6 QV> (rIG+"bCCPt9(Xͮ Q\Vyoi!nu^rѽkJRpy:_^I QL Kmb6T)ce6u4߉U">Fs!/%A,X$fM"##ɎPpg`d2K2+k/QZh77҅n>j۠5v)ebG;pw;m'!SC~ wy5Ȇ`0\tpo-k6]\d_ZhQr=Ux m0_Ź1b3jJGL^b fG|%(iyՠ_wB NIh']Pf 3T H5t^!fq2*I3}Vy"~o=g y `iS1ұC2Ԕ=6@PFud&(%d/ᖔH`=p줹ٕLu"ծ(a IDATZ)Vڝhr*y]|2Jf◥VS]6Ն`0\4ppkӵM`+3ȡ؛1Q2TRz"pCvw~}sw}O5 & ݗÍjG;qJt ڣ,xB5מpfG"HJC2.vcFҩ.j!&Ɓx *BaG }f":tv,~a9`.·I'ny/y`0XF8~USxvXbS^zZXLy*<9pkS=\:7NeJ|v[۹.%Ηώe-"FF) U ~Yv#b|-+)-%uxb,PE$s^_Iøw-D!W0`8o<( 6y+JƒOIF& Eb qv>…X%McfFJ۩1"{wCծA/AJ $|K4{rmeg]712|j50kVvݳ@? '`8x{ ǛӵVd_k%bB{-<ϬȘQ1Wfxß;UZe"nPP֚$cn)-$.…qds{ ~.AK 4Qى"KzjY1=|{Nc:/5 +9 Å|OKѲs0% *oqѓGDdL H綳r&9u Li/(D絗FDXd LGT+I"ԜK̰쾹>4,t12@\bPV(u w '`8Hp'$Bj"ee LGcnSQ1RtOf'c\,fq^vwQ? 7Z*PgPe"eKf,{/3ZgS0@^wEDŽ$UvIJR Yʸf®-{T߱ Ya0`0\88HtL2aB\=0o#n|Y,-G݇b'Ut9SMXOEDP)̊'E\GBl\;a_Ngpg^KlX V\m*tɵN?zP p['Ǚ}zb Gtkqn_C\l羹-QB=ܙrk3,'6 1ɹ2Q~.JfђT?KR8ŀJ%]dc[9.+~o}ڸ`X/pA1/*%Uri\u$ }T!|!CBSEr5]Jh!sŅe,MMFƤcj%B&SmQXZρS}ߓb=DMt?e\D۰xv{8/%P QbVڈ-v%Yx+H0tƟ .17;8)|8.^̝"‘=7{-4d^Knvw)^vB.۹qywv>{4ѿ6.k0Vs BU:v$r=WDz\^' u4͈M4bVQb3ɀ´NjYFgi$?.y/PPvߪ.f=%fGvڜ;Ny? }gˮ" |LGg‹=5aan0.(rwSBK\{6PZi;S,FA)R#Cڍܮ 0HʊP1YNv cv/UO|I7;ȗiRCvo0QO}kV% s5['| "R R]o.vӹקa)U'{F`OFTs]fGyi /Db=.΅"{t㢌zAaQiYcǎg֌;GKQ^ _*mMlW]lū՗ $*ޞoHFR:qrԖz<D_ǯ>'h<`0, Ål7\jJ#dߐ.^XPA,zˈ퀷R$9Rꤺu!R)Q(!ο'R^*"Ep'?RӤе_ٹ| c0pNdQk}W ۝|g<`0,Vj0.kn"\rYM]v?办}3N$m` Es U̖E* R"G_ ջNgGKP#}(aPE; XyԈ3u-RNSz˧@/`0,Pd*vdW@9S /kB;Nx.ΑxOE;c.}]fy9%o_r!WzK_bIQJKR#|>mEpۚ/H%g/a (`0\pϾ܍M|L=I&>Fhg',{w\fOƖ*[*uJtu)ku Α8R7t{vYoCKXznp/SsW{5iONA`0 pB8qM[x9𴚶1\`q1Rt>o@"p&kͱ84V1zNY-H")RREt^2]aG$+X)*l@e]ێɜؕ╰@m8M/ d" b^NNyqɽDqXP_n07Y8הECIL2c3T';tܵ, U s ;^ա8Q;Fss-3Kc'ým^sw>@#h8۹+. P oxax  .؊T/d)B"\_[bn4+C/x7]ȝF[!%?G<_ڶ l/2YcFQw,R㳜4ϝ=a C1`0?H7G8tX;do%46WjUCiI#ūbÂ..<1DGl[Ȟ dNwDvZ _|׬Z)fMH௩h8q2,JfvN/=7mX1 \nphΖA4RxE *sh)E +*%X?:loG\M2%B{鉆l\NI}'gE(!L~sNخ q8b^Xⶒr.ޞ|}pٽsˠ`¢c K蘪"dzp-%I4?L]"A)8YmKbdP倱Y *Bv=u@4>pӐD, ,uXq*/ ~?z(Ge.ݞ ' x/ѓoÊ`0fop2Y8%DU6a{5{N]©AqX ` Ww%s74 y;`tyN|1GXNB'386==cRKfwA% NTZQe,( Dv5rIy/MlWE_uCu0;ݹ\{*DZ8~w>"a`0^<ǯjbI\dOnܙ^3؋b,<К{w3&p0u8 Rj";L% q.y\챌v%Wɏ5Wwwhx/i"@lx]/9II?Vr1r/?[@;-q' 5 J1  .67eWӍ!W?&j*'rڗY2K~//.B-VC@`G ];xTR"6f泿돡2Klcv"`L.}R.Jf,y2\yWmX1 W#&¥67.r;L_O4ߓqkx ',ukQ1+L~lׁ@b_~l|b,f_# ^&s~2b(=9"j25;,:2Pnn5r[@wc>2^r-!<#г?`0^-xS[xʌ%=2H`_e'tgYmd9 l\ g &"6Jc2g:Յ+^r^"科׉BIҵt /0Q2{W#p;{q1{ ຕ9Pp<Oso ѣc`0x0`0\X\&_r Wܹ { o$d{-ț&+$+68.t#5嶫1 )kT_vp1*Fo#S @B<˂iےdP%~ODf+?pr[]syL &/^/4.=~ X wcW}內}zt9q(% O/@Zf;XB9Jddw.vb K"3*z=y`veC.g&~K%rI.hw9Ÿvb4j0d1BCYF`\&O`AK-KS`%{)|\d0fYl˜v-+B]Td-3ծ#Ũz<'c&{m$c,N RGb-[[wQ2RܽsRS'``0$| ENPq8S\|FcHٺ؞4p&]_/uK":;6ƭf<>#\A ~(:hA^+|";kw΀qW 5`0\?>' D.d-^x ?zddVf93'aIr/q{J ‡n76 )<=ޖݗFvW51fnѨJ8,넗Jכu  O+?ǒ=g +u|WtlsF Vg\>cfy猻 bXF`%:O%Zz=eKfQb mI$#IQV'fHޤq] #N<wd33v~[%#RRd|cjf;5,πEfj(,D?C/GQ9".R֊ؐ/O?"`0.6w WvD)wO3Î#'C6} kq7I?"3;5b==v/+D>=ǑcѬvdPc8G77[.6C}pu:.(#A 2XLl۞*IeAIj6l73N˳1JQk~m#z3[ W+1G`?:w|沯e LO}-R"Ya,NDqAٓtv!/3Bd #Z\߶Y#w9<\J>ڶ $\o).mvg^}lh1 ^¡VZt-3RB˸eI5tEy}k{ ~b7x~4sq~)I9c;jultL(G#\ިߏ2HgdL4Awfuސ36;rsAr%kߗY:k팻{ 觌 B`0u?ؕͰ.bb)^h kH:HI BqwXqP̙9!'rp.UM v<,GIFd"]ە^Gʓ3~b<׊1?)z]smc;pw>% n+^ϥ9ۻ-}\DFy_`8| omKbc..4HX3ӽNכǁ-Vxzo 53M4|x[/tR|쏫= Y,9p;opG;;9+:JW/lOɕ8#W}"&+" ^|7yJqg gݮ= l4 V"z䯌 2n0O ˆ},UK 07 |+mƇ+zGt IDATv1 !" cfRD NpnQ$#Ϟ,?%ۅ},?`bns}2Z}މ{^w':&~;vg([F0NxDO78)CuK~Zw=D? .pnz'ĵmekoY4Vw>Bg~wams(,W^xpII)j'9(,J顣&pMl-&<9k /p+(F#yl7 >F~*y*&cTB96Kj912vKR %fĽdϞ{[ Wn0uoO Ct4I'&W1'9A>_ %:Sse\os#vUsgHrQsG%1%Xx*B#ߣ9s79i]AhRU;zsw+B(&k\qZaj%bd/ dxQj#Tpb0 m+ lvũdWDvT1yunWn7{~\0_yj4xH1*Dj{r eqs$enؘÉ'dT<&&vأ)<=ߖb{ߩK`dI(}%R!۩ozVj!s]! wD8 _j.Z\_4]#2ܭq'(s1Af*f 0e3y 9Ø"=TPqYqiwPQڋFnj*AL9ЦOƽBU~|T^ b٤qYKrr -/_6,!euKb?|;>kׄHdT/L:M"lp1 ypɕMz5"$V-VSJBHD\h_Dtb?ثisLӭÍRo@S|Nx^_xگ"vN,Dw'=p !L[p c\Aؓ|RvHN6(!{-6OT!#z \$b"혳-rg5^0`0_>1dtrWSHjLvǖvFn~7"Z~$m/CsNF#/$[܉,3Jd vd԰T&~&&Eٮ?v}ޒ)h6{A:$&;]#n.ݐKEwZ85g mo'$zob0 7KCKۋeSfPLjIEd)G$*bym_vlᜠ6v[sӠG 9 AI+]sPxžd )!=w[ '[-HeA$/9v!7Sx/3*]n_3&x9Nn j& ZAqOF'9|,}[wb.3X^n1/ZjIJepw.ҥo~w>"`0Vn{prQx+i1…+(Mtcfb M߀E O=~{įeRA 7F^41;3r1g8M{_ق9 4;Hn;!P"f~{ZCRu+5? w= ++`0˭mr7ˉ蘵v)4]-AMzs9|پS^D%I4~?whv (?\hM.#u=ʡqx9z|6eȀk>my; plU5n':JwXt_\|{e̯AO}`X۽ab_хn:s HGYJT /<USxz}Q,Zx }&UVSfGL8]7Lwzkls˹߆p:&5E}!c0 @jQSd/1RD"J2|p+\̥ETSt`0J9n#\r`.+;<Ŝ셽;EQ1UF_AT*WJ;w.րc@Sx:YM _8=vN/Vx 1ѽ7qGTzK)b|Mpgq]rS (道eA-"{Ma9*/جAu{ '7;}O.JvOdɂwW"UcWc=O"ܕSNVm=YΟ,:`0J˾:Ș>G9R[v)2@9<0ލ]쀰\EKr2ݤ?^cK9}T""Lhvu/*lp(9%ËYkp+8ӆj~KVdW%D)L#Eė©z6Nsb,p%_`0r{ [;t.TD{L_*Fdtqoh O%ބd3^U)ǞG(,]Eٯv;zI+mHE,#?DGIj6Gʈ/JQ2}x蛟2j0\0G`X@v{fiXU r $v!H[>ӣ38 J!%Kb}K6)c9?V3&6F_Fo f21xPCZ8nLd6[X'ӻ׀ vrN#3 RyJng˒]Kmwp5%e?3jU ƪ SHLD~ңc =jC`0hW0XSR\V29Hȍכt(}8:4始+<}RxZZ6LJGQ_VQɅ&GK#d4{ C E׆cJ%a%`Ɍ}~ڊDnw5rvEQ2$Uujv!F$:;XDT" a58r)s `)׫U治x.{Ttr?|/F(cӄrʐN5>Rf~yMqcL.;E 9['}۞)IFN#՝#̺ޕv=L]olT-tw_UE r u>'9_U+U6T|T#5lOʗFQ5R#@&^<%r3yqɼH%,W|h,07~Gc<4@IcZx.HČPIjw?Y[{8c5j0\0G`X/65NTM\v76}DlLI.+e\Z]|f)?k/rm['fF .|N5e7'fs5[^+p?[uGKn'FfSSE{;.dxn"v]I.V/c* +g5%bNNG<~ d +[d?E OErJC/1Qs@ވVMPx&4Y?@[xJSzi]b )!硫gvRVc8.w\X{]xg{M_'!w3u%.w4Hdv@-P Cv콍(IAgQVnF2+ ReW%VoDwiAXh7 wۗ4Zʲˋg 8Q&Ja9V#^-ŋ;uR.`2.ͮ:ٝ>37& i2Ԅؾ \v#n] 2ۻ/`T29'vngns}>4,-uB{OP.;cww]oM8rYS~okZDH8ڻ))AO?bÌ`xe#\rUt7JR0#md&rE O_D^߀D<<>౿V9nwtvp7cJLdQ%+K<%t#𙴓*8آE]s0&nh%;s"cDؑ> q&`c'h2ߏY>'v1*u42xbHeX"Dvȸb n.y+ϡDdڸwӻ%f ݮp⚶]9KfW,!Q-<=Ըy 6|~~t { O {Td_=B;)2e' SMLpy輙^ D +EDuMdwy1=ŋ;}Xj@eRQTv*=WR^Mmc,Tn( Q3sƍ+ ]M#ݥQ;C!KS_3j0n0.jnrٵ*ƪb{A.;ew\-Ʊt\ ƻf IDATc,Pwm(tfIQt[a"cّv?8ZLn7[ [I+!c6z}6@}e[޺ʆ>k/މ5^6^FIUJɴ2~YOa`0\\" \6*t-ƌ((.Q1t9VۗۮYx^t0^a_Ts}v;{@p.}BY2>%Ʉ&vZ B:l I ݹ^nOi< eb{FxTlTwOuk+W{ՊC/̾pj#zO Ľ,`0w[4K׻ؘˎPK\,ı4U49Gyf;0.{@͞Ln}=jׄuMx_qV|fG>[c3g2JqF{7Y׮%3f}7ٻA~.@~ޟH9[*HٗK/]2s6{;2o@ 3mO8t-/mSEb"C1O$KbJEb랮7Q`{1^\ '|CaDi_\Yiq|.rۋrKF7<"We# NfeەY){l 5]QCVE텆`N)3*y|ݦalOY9 Cٰv /c;/J8U8&(eGBdPrG^,~̋{IofrS IPI'T*/j_Ѯ c\J**b{OhL8q1x1p\M|'Som4_4i[uvLQ2]f[Uy''OKb w{5ΎK'r}!V>{wrn)O@c0&g{]Mmzd O].%%b*=eUMvZk`׷ct(,EEs۝"rgsRDb+ϪXL$"{'dibQ2oy?ѷ>m`8<!w_ lfٞRlϕg-z)7,>חs+*kߺzwV7# o`$@Hzփ"3Ba83d6IvWWWW׾wUu-g~Mfvs54~s>5Υ7Gč&^V}k8~gY9ڧj$t}Z7V1Y n6f |a&sG&]4r`{l|: ]x ds#{q? +}?fwVɪmn_= ?&V.j\ _4<Ȏ<ȣ{#cpcnv5SXLX6j0 eO/x m`R#91o'^.B-,j2 )G{gw!5m{nK *jTԅpP*u+T :(ծ0хq{%P.raI-rlq&Xj}Jv%9e8^@a\)!$]lC/jsCGy\y]) 8A#*1% 3vnTtk<=, Zn Sx 3<2<~Ӫ]_>+/Ȯvn/4q]5k`L,w.jVHcg9?moRZY󞆣w RQ5W6z˵-8[!Kpwlgs"n;cy}+չ?N[剀ڵ4!V{V=m\G#}۸}; WӒ9 (S0R04߈F `Z8, v^";q(i dTؠT"66 &e2RFο F%d8R)E|>)c*d*%dJ#֨Gq O&<2=x)3V4D.vYb+ xzvspں[csb:&V|mVY'S;DIE vM{Zd./N sÂЌ Q+4<-bd,Vlg=bہhH_o,TPTGLU"RPO~W\G#}׸=ut\^-}LG`^k3o5(q />¬vjvJ CHV{k(ga1[B7abU'znMc\9s:w>mnnm I8 咻]h:84&"<;ٞjWNx';703Ry_qnj#Ɓù)1V$wNa`*wyS.,#S0[634] <*!/N[]IUc1Aw;ةڅ)CYE_(+߸}\ߎ4t'V=% k&(rw-m򨮤Οv~CVm+oBqZV}Gn^|Z>NCw6#2=</~F- \wH.R9mU3sy'Lo[ڷ.{5j+]EmbbO4]j]\OH^>6t Dgc|eZ<آdƌA.%c<زSM$Krvmn0?~G[1`nw]ٕdgfb;u~\í_<̓w^.s#6{Ji>Ϭ+:=nW=Zbܡdrn{NQ2@rWܱ-{gvJ nw|n`r}_G\[ OOkOsSGyB\[yBzjh}*<~RT C|>EŭnrH[kfc4B8@1$#ߞk3A|bm(->wG=:%;=¢HY GXsiwN.8JyRU6=lGwsČdCOmv%#F?VA2f{Y,P`|x׵~4Ѥ fn"= - ]}6 GM8et\ܨԹH-ە ۬+/mgZ1[U;r>$UĚXzՍQw;`Uj1&T?5iyd=<س&Oii5nc%1ha<9dd ${lvˮ.ˇ'O(.גsGLvџv͗Fv.k=&)a]\F1#Z PM'hNEI1] -PKґB/~pg}0PɕFиRkE0bE*cM+?8xE{a2C=*1g"BERvڢ{ŃfA4N#<&6HZh~A#"vx0;<#=Eੇ7yǠٕT0!pT%<3Rֿ#,G{2dm] zn$q=Et,E%.tu~_2 ն qťٜ~x'xJEf'BV(.ad{7bXYbR~ߵla'(Iph8IQ:>fNo]#~8Ja¥ 'v{RtGm횲v 5}3^*=랻 {*sa]ۉ(^C]v9ѷ]kWo&|^;} /LW/$פy䑅{}+oŢ1Fa@JMn/D(hgs#\cd YCy_qnl#x]vnO^ 54='O%{,= r@wP]Xj(p(;k{viHiIlw"~imM2fH$ !* WjC_4<ОGy̼{k1՟k..;ЋE4\vtr7h웫&p'\vDl1G{D`o!kdl ug!ؕJ`>{bu5Mq Ax[=/=W'SAAڞ/Z7?y4rbj^}7~S=D nz* ڠ|qe'cm Hw]*{4&<\ҸN`qX]%ðSQʈ#2\Oq4K 0?o\GaV/Lfx^OP{Un; nd[Vv; e]Z[oGHx=w AϽRhsPDNnEjQBPwh&y2a$8^qq zX%5R)չo;-g4>!d dĀT&`$]vDH΅u0$5PvJYCn%;H jA΁dֿ\G#} c7e8tq_rL=Ӡ.Le? `iFeG@dwϟ8?ȍwS=&'CK\bq^Qv(uZ= Dh' %W;)@Bƌ ĤЖjT Z8~icmg{Q狲A(fWEQ[YAgn) })'Jmv/]gM IDATU)^8OirG[-_oOӢl~5"& B'O%d)F,>pPq @ʝ*wpO'̭MU3j*fiƤr3[2yINp uQEw/7UF1OdI*?~BQB@Ȑ>BKϨn-L, 2K1LDۉ(>uHj-lWr]UM^kN_ ٭wşZ4<ОGyLUBPq.m!4{\v ,Oeff0ETм (yUv@2Td;Ć#&On}|/,ҹD\( 8I!zK&iZUVh K۶"۱GӦRҜ' Ulbb7bE=wREuE lwLtQ~tmTp_هzgކ~P߲@`R\*R_$0؋s=,p*eԬsA?)w:L2ICx3&rb0Z#Z7ERSo:p '#MG.{=H-WG:&WGa0?siICKTR=Vy[؎ﮈN4hH*&\)jRK<[b%4.~rFG#4n]S,t= ˮ"\~70\ ˾a#apqOV8/"M* Qge:ʟp1FpxKvmZxwm qaLxwOdM2tל$ۭN{ To^{;Wcn/}w*8vR ]3YS BX݉- }3d?S ;WQh2RBn>ɏk?'<:Vn .vAxE A#gx,-IOWy`&.S4oLOՌWQ੫S,OG[Vv B}ˉ̭^E$45e(6ʤ^:Cn w{3^hR6Z\NJZF.xĖ}'}n;3وb{q$Ghw*g5?/iZ4<ОGy$÷yP4_]\b\vLe/(}XN}|o~?A2RH*|g{PMLB2P)>ؤNR \+#c_p-~':9 . wkr5\CT~p ? Ny\k"ɏk|1pTL4\/Znߢx A8up <3iiHhOAtw!𴅉I)EŬk9׻F>bX޹2RgXt wcNviR pwR%_+oBRݓÝY9`Kk"H+=8{(כ81$U -p*q]R{bQLk9ֿ\G#hķ-!cZ]b d"=Etڟ3\Uehe2FFlOv$*v K ˫[ҒZ渢h˄Ɏ83I`[݉- )R`ۑ,ìIR;ȎĠTʎ퟊.pAp=p׉D,s Qj\Hv>UwռTtװ1kg#_׸tsGB 5r{.eI*[t눬RFƒѐG*סy䑅g#,G8rmaWH,ˑP㲫"9}X0 pfu}; ]㱏RJO3<O.=o  r<2fsgTJfBHXIQ sKT/[8ݥ,"\;CXC_x%vY 摔T.L=>FKF!&?5hyd=sU"ۤ,>Z9\!j ad@Y{ظ/Tm=j$;sWN?Il'orHjDLG==:/abÇW&:נy䑅<Κ;8~R沗ej1 c_GDT.岟a0ˈ/lNgen9y5@}7"1ۻj#4|Q![lUmzoO4wW vL=L\DmXcd8N F :u2RFz;+ef5,dEcuVWTcD |f֍4*ERUbf<\ 4]b6]R ssB{d&C]Ь5UGrGb<]sLL &#Qi$GOjҹ < >diLhߗ{+tZ37g߅>vGJ-qK: M_RM"]46 1TsI8?^l'TOJ]!$U!E!&NգWy䑅< %kHꌹ!b䲗~;'᲏ଶ\ue]Z,9 M {1f$HY-n;u$O|#}ޢd&ӱ]Xss~;=YMG!EvnR{B`R610^_snRv Ҭ1?o,5sW͗!j#e෫nAqqƪGq,Ny\ Ok< H)y|gi>cTLHXϞxjYuE,M]Sb_D9ty7~'Ql|Ne9ɅuZiP*Zaj\xM&ֵTlgdLm!g6Wk&K@vc%ve}\zEPK_|#,u=-Eeﵑ1-Sٟcen)`g\vx~X''(˾;xq٫sSB"MqDl xaѮ,o?Ա5hT]vwOh򊇤j"4-{foj9+2 4 c<74ad{}zfR}R |# KFK= /h$,GP[o .Y]q ]E%pOj y+]$ȘQӔ;.]Z a¬6.V*emý΄u_}ٜ9"|%SRCbds`[j`bΊV|ǻdW{jqmX;MP7/kC*Рq+r v:.5jPQ#xW6$չkGwNk2R&״ <dg{`JPsAbnxc5R} ڜoQ1 4()X=gMvGگ9iՖ 0"7MXa.g<7c;rA}m%)卧:q,[4jlRg;wN{1 ;--M`8`P|,B"9LkSnZF0nmՠd̹ 'FZqsh/9 wj>n RO꼔7jA dƆrSg>H 1iPy^C'4sN{)$l[an-Z$gWk<!#9Yxe|EBc˽nw+0(vHP>J-@WsSq;XnO 'VX$ӰԲ)9*L\QLL= g-f-} !ۦg#b)Iiծgx:nB7M y9^O94׵\z: Ju/p2\/i}Zv{$d!-=a($w`K0O9$L@@D=0+rT4+]__=j,ڍN3m /DtW~S`=[o?Yh#yjOiX>fQ1BOs燀*Wꭀ.wxoDy< <= hfK < )xz=멖ݸTo`#ުZ{YlI\힆NM#+*ObX́u;2!n԰Rp*Bb3ᨼ]*Ror!uz nGb{NBɈ!tByݽ5)A5T%u7}G-&3L $C^+ßHUK׫F:Yh#CѧvڴqSw;uSwmjzM ;+W;ӥ<=˭ܐVtpwu{Os]m[d۝]ww{iAtq=&%p"yXCxl;.3W=U C7+ס zTb@Ak,a`xDńxuuR1D瀹e`aɘ!>O-*f${Ю'siڈGnJGj'] ;JE@OMC"' 'Ӻnb{k " @{AT}*듺^Ɣs, KXMt쾁{ sP?k*rR#+>]e̽}G\.G|1}*.m5K'qE=g 1W\=e\Ѧ뗀'n5*o>n0-1$C˄BRk4.D21O O{Lb%48kYEq;"f Fg^ Ap>n8 W늛dW{,-80:Bx^O鼬5뮞 ҡfz,ԙS cOnW;v!u#g)bi <=?Ny੄HA\Ӑ>mE7/~ybg>;Ka < 8H˿xA #b+%oј<$vCt2դW{)Ek!L[=Ex냺:!he@\O;3Kݪ=L,ˣ?iu>_dzОGyYSi,6N^!=AX`]*}Xc2.0KWlø]ge=^}IՖu.]ξݨ|En't?]X*Abc vf!r T)(5|uAEkxZh4qhM4hm*qkv{8ە9eD(;a!"H\OzZ(©q+) rɌ!b9;(qᅳ'y\ <S+CEQW6F`@LxʗOa[dcӥq )wY{ri%Ɂ=f܉^&w9tւ94N}4"JQ%[2q؞(#+!{¬$n;L I^/´gUkTF\_0c$Ж&4Sԓ2  Njc`dP3Nt= yǮ5|IS";wZ]Vg%Ww!aˉ-%W |{ӈЮ9]'p+ˮ粏W˾ytzRUJ8|[4 zcjg;ܙ]{Q4 10~ܴ JKxx‹@1rӆ%&b{w\P2!vzDET[^ Ұ"68`|H#'fW{ ΅]GMX*6cuuFqR7mGz"{?Wh/bbiI{ c5gAh`p#Gw^[4ǾxZW^/O/75;jƲn 0!D2n-Ո;kAn՛,U3aZIzr(;nLJHjَVv+k0&W.B1^xB;* MA\W]%#a#1:5\zۛZvg=誃4x ]lLˎ%1KoqHU۬nM" AY{e|p^.g7۽nV{I +A7(N.40Ub^#vV׾3B+(5T+ҀfR wS,((AicZ yńʦD>sntAܗU[xqX,}Lp2cZ_NTpC=EaqmwB{DC"4cɨDOEL<ԨE`Ѯ8ӻc\lbi%-fxj7&& ˖˾و[j|Ÿem&2 n.Y&WYyy8rԻ7v~m~';qpUA 9]I1^˄>APΔiςRAiBRa;C1t.#!0 `â{|il/`8BRE 'cGutCqPw>n/U=xʛ2x.џxiHP6+If`LH,,N642$c4T`O?z‡ƪREi0Z>DTLhjWpQ!w$<_)ܩU-%ןcZx ;kb{/BRԬ>N}GbVC8.(+P;؋ }91ܯOil!DB{yz}n4"> ,rc\v5F>4K)}%q~]\3 !cLe9tzBf{hŃFڱ+n/ySCR FspS U| x]Ntb-$֑T)p=oz;R 6ˡd۵uZLn>ߣ˙Fվοj<_p2P>R]Umo,Lz>a{y\]5ԩEbVp<PLLWi0$ BOs;T <= df*SP䱄ŎHf{xzg58ԯ؄]زH ";]]WtsDwpTϰA]-TZN {yBJ'1 ^z?S| Ef"^e .m ^Q$W'屷V|iNv~;vtHG'l@i!q?m56'ОGyD`8oC)zi\"dYtOeg[M]8ʾAm,5H粯ۦظh}e\2f-v\ws?6,o?Ա ` F@5g}mǛo'=W;I2KJNWJfNIR. &+@+§g`,MRvOkO5(-K؝1bFOK3Qi ?A)ڂ}B<5C W=kjOǂs:S `:TL }OOŹAF1Uk#52,K]ZBr=e5fWM r~&̤!b{%?́,O.4$LV'M@@hOwb0j&ǑҳPO:sYh#z˜ wiHjA`KcDv IBO;1! v~ EhgZD0?2):}(}4B{e뛱 y Rfs7?,(~r@^0  ݽeYq}9~ohS+Mw ҹo^".sez.;[>q5mYG3ЫjjZ>x͔qw>{CJ^ ( q9. K9y1'{Xbjsi}wHjlC >D`v'"}v  1baT +zA'c]ZEW'~>y\I)fno(J< A`N3@ŐC=GZJxa\{y1_)<!eK<= mIik lwXX1 ~>b$1>Bwo*&KEa9e1=YDoi_~% yq`2E.{-r.{콦cޒ=e_d퍶3j\v= Jk!k<Fٴakd.U۸R'Ni,5]PiXEvooRڋix(j]EyW떇 IDAT3dz=oL0&z{mtšdMQTG Qa "BXEVh&!8RfW\g GcXH;E|CYSy~3ˈƵݚj^/-t`C6ўKAńOps`Πu&Ng,U/'tI.v:$^Ta}O &&KgZ8`Veιm!K'd dTz'S D,LXL % IU Eت?ǁǀ72]E&EG2Mۆ%ׄue,牊 ]^R]g{UdQ~S_Ud=)=:3}PLLd,FTM0v퟊˜1YjM2O~Wcc5f=[y^t7gpty\[j c,g/BB@GDKcaHxM ;qyxz+g c 1l[Yr$4OEd.r4 <];z[9k q)BR8x'KyuẀ 'Pn}Z]j.K*N*wL2w$ci,56V62e/Laq}\v'pٗ1}e&jkݺٷz\l̴\_J\N-V'YBv8N>/̙u+׎^ـT'" I%v_xrDK,,nHhxi@| RPj,vq wmPncۓοA%m/lsSvZQ!PЇz߆|mc:顯h,.vϔ M)xaT {quՁx;E x:fɨڴo&C>6U>Eۡ пv*'@8$Og`1Cź*~*:؋BcD]}b$_.{ \xDvD2de]^)+}1;5{Jg"߫ОGWaxon#cJCDqٹ"prop0q|eNR^̀ˮc\v=9 6bcxs|ҙ|S7QI#(-c?; )#!B^"NF/|aJQ Jvqa\lJOV!RFn]U6#=QxA$vJu0WKvM|*+^Z}׸/ź}՝Ow\#G8sB;,R&=* n2hKCq:v;؉.(UmY="> ڳrD{Q`r 1n}Wv>UĿJ"/(y/#AM uE01- OCT\*li}[!Aj <1cbρy\ꥳJ-h8.LEưc;Q)NFW͵Z ; QZ?%qô؎pH [1#Yqeŕb "{JI=OgJzD`σQkArYr\p.E W~< Ț>pً nS%3.O/VɹOpWϷOE{e&6ds7r_Ș?׾<^,c {X\x U}<pOZifg0T xZK#Fl?~ocknI\$a]9EE@7eks+kUkGɆ6=p1{26u꽵}1>${dѝF1Y`ڟq"ޓݙT$>?7oEh/Uj u.y%-.Dd\8]Me%pٛ;e;Ob\M`spK 1G#h{X$>Rg<'Ü+%0ܫ= JŌRxtng"hߗ#ە(\rt(*Ch@jLHw7$Z-NF|{6Mnb.K cĒfa`@n }3E;wQ^v' &D̙JAe+B{R{`i,\vfG)=xy'\vvW!Cˮ~~ù`S˾Tr[7xU^X>beQx쇥dNpW$PޝۙCL.+,(UN )׬kwl9+} _BQ%w;-u9nὂ?~Tivj8F _׸1goAQ#6tНuzEi6*f>+x:^4 260ijP$~Z0xkIip"tXR%,׭RElo&ޔD| ҋ>g e>R8-2}ϋd/[t-> 9q;dlJ-7DZ[|»,!qпS;4Nm":*`MA=5T8PJ\-eRn=eW3ಓ{ބsp\K dμԉG5&Xw CԖ=@Hj+WcƉXXcw;n7>4s P̽]d|zE=w}K_&G?Pչa*7d3{pĐǻidUE9'@w\b?rFߔx:S%R4p.y;/~8&ketJD޼\zUvQ)8>q-jv^ dҟ^Fj')>w%{jmjKt mfGCڙ()B'ud|Ǯv=0Dw TvZ5j'.x 3̀/ކ=&şEh/U. O}U)DrQˮved똎>\#f{Flϩ0n+\r'a.6oʢTjAKKf!"qR󚇤o+AU;RlG%'6ٵ?t!vJ*ltЖGnc#qSG/dOJ]18A(u P:ݯ1 yܦg?0z5^i[4}h.0"&r!p=+ P1ѽ7CO*f_ ]cS>< 3rOہT:p*%W)rT5u'xM8t 4@P2Nlg9]sӭR& s할.>oDpC'hx* "[;O_[ -Gߧ'Ȋ|%ӆ Zu=ICN#w72BXWm%Ȯ]4؍K{zVn1/sۏze>V/ק!hM菿#5߅sWB׫ B&w<Q1S  <]\Vm30=4EO7&384Lx:~O",*Qo\Rjq՜,%f[ vNq2 Z܅vSr IDAT2؎@oboM`p_d 'l X!#z'⢻qDXw{6Xn8%W;>9 o*P_)_&T;4Xsˎ>G[\ve#\v44\pBq eb=eewynjog-ȘRdξkZӯXw ^pͅ]Lp2ދv~L Df )v7ȫSn'8ze4gnGDPrm6pqm!@w;򾇺=wM)aToֽ#531h&RTh ?h\75?htP=`xV"HBX׳zC^lowwNvX9br$&fh[e!Q{J8zx:oKҲ <}S>< JP2fvx[+U*Gy]#_~czRZd$ g4D|i eފ,4iTdY_Ebhиfmj' `zdL."* z:&b;5&pT{vk~8ۋ^ԝ._.Z·`w}C˻pJ\qixue@.=v_=LpVjRgLrnM=ae*dZ{qDxH5!SH*,ri#ENva ORP"|tОh2mج(S;chX*mr: Gw' ,A5U?"qk:r7PBY\|Czk> ܏i#nB;v/Ƒa_ <\uIg{/9ǧca+![0#xg.ð٥S0z+'4b* 0ta ol?*J Oo2!'3yz5;j᮴{fJa[Gt32svp2wϑc)=L6{"4cK=<"}ЦGr%ٽ?W@ٽ+jӐי5I.b{K8n 1=p$:eGApGsfv\`9u~u ,oao \vӽ9qo\z hvo-z`i۵ \v*v}=u DXjxH{2)0 'CDp fkaۆ\-7QCC,=ԨsM=VGʸ]a dT٦ǖ]Ph i?kzY.Lf蔆}I}hiw!"?IJ?ڈO2-cvNu9D7GDd_ERkL~~dDvc`dvBOۇ6=&6%N{Pl>'*" !h0a)Uɷ'Sv%_oh?g"*upC~$®uT2[o= \2㲏E` ~Pk Is{ s.ͫ3oWi3fbn\ dT8=s 9{.-fTQd7# NF؀G9Jg9G>nkI78A}=^Wm+9cސ{NQ2}ꜿ׸LEb5̚}AfG]Q4a\sq7=fX\z/iـ>ƎOW5N>aO:G7TjzGSSf^Ɛ1^Ƽp >M#M#cZbB{p'q]B#ew+t2%TG"=jbka%d>'-7y!u>Thd dTҜq7NkEy:96\ 2Li 9z*u֗z%d+<ůDvd $zY?=vT]*_X>GTdYP@\.b\vgt\`.|[nk>( gD WVtЋ?qIp1E`a`f,} ]=5xJ}b˩`i~WO*cw.b_XVkO^nm?],a!Y:&,J.r!d55Ϸcݹ=#6@8j@3R!乨>TlwgHl`X6N7C";y"mlGQmWZg{qH\"5dr״yDxz~-VwRATN c CC`2?$L:u- uظ[qM|TlQ |.U0+[׍Ⱦ/:p.meG|^Rww9R'8|vhnQ2-S5:w;:PCDISU*~lU;$n B#͂~19`umT}n:Q/(VD?`]Mݮ=ac'v"%&vCQLhg'c/k/G3SRFAL{3Ɠ6S='5?04&p1; <Q1S6Exz?}~wO `= xx<\*u'{Z\8ĮOZS Ndo5tjsl<5 C@ىy(lxJ&wXckL1 C󴐘"ِ%AR6Rsw N{y) .+^1q…<.{H 2dxX: w0ND{ˮC\vA`[urj>xM8tqT6@`Q2c"ӰT1ܭ^qW;{ "VBˈ=xIAUsRyAS9fF #4U$'R r]t`wRR1 gvrO{%SuK 9,vbg ٧Y裼vk)uW<'\a|ʄ-Sb8:+xTy oP16i{9\\OxS^KO5J*uқוېT-okmzCsz % #m, @(A6puB`JDĄ̀;Ƥ\BNzV_r-]|CșCvqM:ҷv߽'"*5+e_쇏PLjw=}del;^_0o2\v6/@߾UR{s9y~źsڲ'޾V] Kv={fXjO4pPۤ6Km6paާ7?[In.owK}'BQmIwԸG &wzHvX!a|}a"ϚeGU0Y:w,)@JA>"8jbDzݯ-#C> MLS0Și[ NcBF2W-h #?c^/֯_o^,Dǿqi3Hwς.&?4`(]W1[׹}oog ,UjO6KX=a>r(M028-!3]kSVXAAI]>FuGc1:!v{{_qwEƴ|vr-۩#wI+)pw{ gLNd(vOjw[C591dٺ5kXouBrZ%\Ӑ\`}k*=$J* zZW{N4Ls{brӊCfGEaursف׹bc/Lg {Rh=o0!4xwxv1uo7RLOۏ=?7C!z%tyTCm!Z^.^N˂0/ou`9EσO)2U36mTl!)H nY;g롂{<g "Ttb&/9XkPuJ͢=|\Rf䲫ppٗ:.}0nzW:Vk!.e8q 8Ay]?ͧ7GvyXZ#ALܨ ?U AupwHi_$2TynKsMv9Q;v3|fd.xp>?no|ɔA1ι ^Y1K bODSǘw,KUHhX맢nZ^py.nrPyv ;k`Ο1)ah*$ /9nXKaVc9^쑝aH=7 U粯.1 XbC[:d̞'\meig;l6͕4Vw{3N vԩ#!wNL>=َ0}^aAµDH2ntB&|k)a^%:N7ucK84 Vn}Ql$좎CX0Wlu`(ٕQB;Nxoڼ5Ŏ'ONH}ҝ <,DO)x).0'`C 2̀j>Pt }BLO,Jǿn= ldcAx-,-tzٷQ7p"*f[pkyS]+aT4DqW\3>pm݆rm.@'4EvۺZ7\͍2ڿQI㧀?blkB;:g>p6 V&,sKAT:hAnWцVX' kL]Sc m'0ު2gU2Q#Xq77q]02+Ȏn|,R.}|b@੊RUIi'  voi 8 `z r46sOghM6CfiS.{%T}&Z;z<>02@iR@*=tqP)Vpa6x|,Ș)~O%BksOdns1}++U.:CcB.9CBs{T+r{-Ty{=~40@}/k@Eh/Uj'|rb7kqGU]/k:.c; \M[\v縍=.;c$Sd-_ }2͕Uԋμc]ZwXHv' RF`· eysOՐ LE:Lu*.N*[\g]/Iw{w>JGSTB2`ne 8؊`lS#=8i?̶ۨ}7{`:ܝ6]դCT\sϯcb_V&I/ˆnv'fxݵ|ڏWCң*zkZ>lmh׳65Z5t  Hda2S$H -s0Tҫ/Me}Aq\L=I&I _Đ%a!4KʸZ$w ړ'z8S6ڗ hL7 nμԉG5&g76 u wE\y`*j"KJة] ?!1}ݻٍ&[&=r4ݎȞj{MpWTN IDAT-#{Ϝv.31qޏQ ಇv>}#LX eNDxM6nBigb;Y|w<4sP1g|O\Fd_2x cWdɱ|T#Ci6:P`" dv$%2)=(#v6H?#&羪mfy`TT768~=PkuKz|5N 3Wx!]:8N˾a8;t?q>nAp>xM8tV4@`Q2c"J%{aaLGLhוTCӠTuЍ1wskkDxp2ݮ#".)Rᝈ{7w#35^EocwnGo]ES>T#Sl~ B cbxΊžZxӉAiTh>ӆxP~7>QJ:H I=h.{u!2fV3؏% .NN/Ǭj~87R8=װ n|>U d ڴm#6rDG 7ML:UDם]iI02xh1/̚]R)G$-dBCc=.-o ܺf:\vC.$es7@_*\RȀs]f~Ec:9&v* Th1۹_dM)e8Z BmY-N&2 wQnR f᠚51gceypj^te"2U##e}ӢK`bD @սBt'#"Swl{˜l|Oԃ;XS)ӷ*fi٘)/.c`iC-}i24whiŞx:!<]7y9%Tۋjmc0b!P{9+jׂu`5r6Ɖ'ퟢGJ%}^u4Bf]VgO-1^v9]?݇5ф*v=zS$OeI0TKP+`ĥ!\vx"ePD>- UGwʷ\~epٛ;ev\ Խ7-|Zcl!M&L4vappwrzPg;¬TFƕvouzZcf[[;2m@mwLwm]-:pG\~O@x:w}+6iȷG.b: A†!@K{x`Ocpr )L. <"fxu: :Lpb*uψĿ'vڎF d"iDW~_۵7*ѝpZD}5̰08uF{BlTxYEwUZpcMYAܰ쬪+;yXGVv5!h?=kxKʽv3+G>'",8B5r٫[G*pd~8;v@qr7;Ձ؟>)\Rk<"MfU96+#C*-7ڝn7\G-~FjOv~O\Xe<&Ch{?_Hن^U{pqުs!Vp\2i n-G*2iu l_ϙM@po|]Upu+x]BP_<[V5+1ϫ >> a7)9n*>^JO$hk}4;y! O]-&Q1|NP ߁]E,,ˋ_zNњ64* z}OQib؍Kg(XRjƪLcsbH }WmR9B#c6;>f :٫@੒~cd~٧ A Cui2k݌{;uSSs #_vjc>a<"*S+Gc[#~Z[)Q=ˎ 0Qe[41 ˾.o|e 7Ml_IJr=QIk>j\Н] IuX)Lڹފ쒳 8Rh0(UrHuC 8;Zŭ>nSuL7%s2P$H^ !1^3h#}d *T #bBh70|.azc~ᯗzs44% w @ R33r| teQΐe)kb_Eh/U*u)/h,9"gp٫1.{T\vǠLı 8fϭWa=o\no.ˎ;ewNidWUr~{0J}ڕMK{E#yu5yTPgmمdݲ1ʨ$^&B4N:wk}3! sMP'{ٱp"GPߚh6'%pۥs ogv>ą/O+L@8T݇خ"bwWӽJ&ze *2׺-*f~禼@(tcӍ+ZRJu5<]TP/dsz9dھ?5B;usd =MCx˞#>F#}CPځ/"g~nPB'131@HU匸ۙޮϫW;mqm_^T2O[.0݊q٫*cCdB6@:*pt ʭpQg's..;puNIHd_0@K :gPģOU4M|L@m12TdwwwZŚZ&kXq4TwbuN;\:!ɐk7\ݞ_fw;漋\v=DRׯTTKyCs5z%anLsjuDvA6k`, o:&A$*fքp& {v%dxMrq6*Ujhۏ=z˩tvޮcs{*n7%!_d\LEP31RRvL)rԫ>a^ J>/$wxύN`^!0FW\^tiʿtpG;'ܓe?damX. \7:p6̘@/eNp㳻ј^s Y&mmeMN'A%4=7Mޛ@c󷺵37d3Q$P7T|:NpuGj)V =!Q= =K`"L030bx2(0Ѽԑp#bAp7Oo\˟J*Ujl׺1Z=u_DEwEv C#uh\o b{OCF>6H3e2Wx5` T߲69@s*!dtYb;&t7y9Bl_ߛiןoW{KQeo1Sj=z W=˾Fs~ jaP \&ٷAVJtyU|Fca-㈽V]X*Exv돸ڛ/Ưm,Уd<@e3R0րGrLNp1l֛CLaBݰ?b=SMe4]4Rb;E-.MaGIDtW7]$&cx' *!%WT Fϛ[0Ҋ <}3M}l߂Dpf300 <2tb][LYOK*5+}2VknhNRH@jUݠ5q7"C%dHNȈ' Ilrk0v =fvDe<*D}`Ipj="y~iIhXN~/UՕk:zg~w]/PRi.(e1BGn~ .{&Gs8azBr;Xg703.; jdwb;q\KˠW,O2W@16&₻fw L.w2{P`g,cCTDy #MvP#º ?skO}̌@KYDLn848'FwR}=6i@XeyAto ٙJ4e%m#{*faX7!WlStg6a4N\ . #CTwnu>OouNF';Lף>:F@5!tT)Z+G͋9eG89\vď^yNL.{UY(5./4,kkr٩۝ȾurٯB_ zJGkp`Q2svRimo12V`Si7yߎ&SSO JsW5';v{3wh]䞈DS-rD>.qw9' @ ?Քx3Ȥ#Qs }yw2cJOŮdh޺m< v;4KtwxJiOi5 ;7TR3?_Tjơ›5^/ i"F H1Q{nf0abz| ),{J`{-}: Sn\1F/L"BX0*լJP5tT)wIᲫZvW*dOrم< }sُF`?=Nyơ~Ndk\v=C. ߺy8nya*[Go*uƱSkEkzq{* W:w{M2jA~1',UwAH&R:R1 ۹eouFYֽcm9nOۡc2&) SoI[hh˝6FK_Å@=a!v7?Sq_~OMy{gAi̭ {.2׋^T=7*5qsMga>Gx?DwKfl,\mz%=,`<^g+B儛c~l['. lv0n(edL}B5{nz4h9tsmYZSR/ec?U!}\v{\#KQ 㲟o}sg).;2M.[wsUm ^nz3"G01C!*at_舸مv|8v&*!c__m)TLf6 IDATغVձ <} к=O=xsDS8Z$c%O7 uxAJ*x]ڏ+dM|҃(ۿ,23;蝠좛=A@5{A 炻ä|٧ T*2v6&k)uc ZFѮiZOk?7}BK)~G,bA.QVfEp;eQ2!&Oی~kpo\*_Rwj9ROiyv,sm;vXIaU7oE=>1(e {5"vv{ w5&l[ :w!?S,(rWΩ% 1.}ց 4'Sb^~[*Uԝ;]HS|o.K(-ws7_(_ÿ}m3T h !Lua(Z}= eE B*B&kPÏ'~1 ~n Is ^R 0d8e)CB/Խ5s˼?np/j`{\v}:e.$ei\i?.Rsጹ=%@ 'XTJF7BHj[Ċjp(l5Sx)(5*Scd;6N w(:v{Zu &눍=1a=X .S7;-J0Ƙɣȳai }BfYNvSyT6ʆd՞<>9*RTpj[ <ݸBP1x D`XRAL#{됋=t aLvNXr]z$| ᵇ\kjjOjR_\ }Lg՞I;HDw`o}lg*W),mױ3 ZEbwv34ۿ%4 fuDP2Cv9C}!F{`Dxq{vUN 9"7Ej<>U.=qtk\*e_֎.__޴\eo+4eߺe_(_R{iyU|Fce/ȯyJQ2m`jQ[5 ;mܩ5)a{R '{ߖɠPz6o5JU@Suu{Ew{ߒݽ*pJL: #bśvS<[ Du{ULtp{v7$v&{ {k3\=Vfv;:esxh.{eůwt a2P r.$b.OΩMX.$wewˮwcQy]*O2zObX KbuD)o)R&H㐠Tq'1tr H: Eɸ]OTnoTWH8w̪7~ CM tAQ]%fڣN|>77: .hH8*ۿ羖p+r-KL6͗dR<Y/!qx*~|OKiRIyRKkϾ5_y@*Y(B#_ @M=fW 7J8ED5ȾS=ջeBPp2s}>{C?.} G{EUn^/TX?o SŸ|{" h A.ظFFhifeҡq\v7"Pe)Uj/>X#k,5Bno,NFH S2מP.@B<^)^)$$wՄDuQVl\w;IT 2Spqm!28fNh!ǻΛ{Ltr y==vSYX *16&0'fx*"F=a}S. OWRJퟞsRsG=cn5ڱ BZ\5:D=zC>-/ ggbdف> 6Ϗ{?#SdG ^ E·. 'ԉq;dLI$Op_{C$vGZRX\Qe#\v߹\v5.{osG͵ Y6Ș!"' \rفA\v >w!c쿷rٯ+"{ReM8~ )N5׎;ѽ1 Obdt';aҾ +ȞnO JN dt_RDvb*m+ģsR0"FrB+~:rT\%:f,%#%#z=;{U%bׇYhrsY_qOİ/(6&#M# 6t-'o^}\J*7iZ]ÿ &"{c_<)*EDS!c<=͞#BƄD =tPjNrCθ1]1"ClxI`N9<2!Eh/u'xȘ]I{ˮr^ɋK:/w\G2_A\4̭[Ld;a\v=k.; ?l}r/C_;_RssrzQc 4>GC02]B8E$sZvx 5.+m/lP*nWސFNp3tRO 8%NPd9Mb8rC}Mug\킸=>EHo5@c}Kd_ Y ⷋd DD R"{*X6U0d]+ApO%z@lQG-lx"i״>ә-4c^Ԟ/"s\v2qMePp)1Q 4~4os.{K\f .pٛf0d_.)Rt 2G{V CH5 K>B=wcr&k[kܵKNvkSu7N1C)je98!~bDOR3J[7{ n yIwmR\ BTtv9DZ2AuZU\l/tG&4nnѢbV9,523 .}qu~q7;Př!N{HA,"%݂7,_j"BQ4kYsC7e?^Fp_j1`9=QdswQ}駴~6f;ׁ[ /yϘr׀#sdz2׍KP\vC.; '[/ ]1Js|Kˇu<I 6"; ¹-"9۫RNv!<n!aTlwu0Gc7t\waQQ=As>.9Z#eM}S,QM4wzo.D|~OȘ)^{'3N& 9`A%\EEPmXZ͞ANbv6>şX=n]] W3#NEve?b1);eqNW˾\+\RᷕqC']F^ ]wNo'D;GxSETw fR Nv pKݱw]U池\ݡF}G"{N(:&2 a-)|?JEu=C]O׋9b^]*q 2+iOsud{OX+%TR^lu>4RuF!۫N)Z%RY>ri4 b^?ut ]M'th pC%Hl8d>5FłQbb;y=?׀`՞{>6M?L4W@F>xO/is3J*UW)rTgY5@a\5* GϣA 5*֘psD.9հLQ ~Zs\C2aG7sE:Ojv3v>% b ac3sVd?irj~Cz 9\vC.Cܼ \(\RJ=9ɴbܰ&-"K Hv +,FB$;]"B';0ݎnCmB4\։t":E(+vmo "hR a]ŕ Wvծﳇ!"d9Bfw`N]q'O3p1ODO'[6G2+~JZ\8|2Qs]ɧ>J:IDЦz ompCclvJdLW.fM~^v.eJ` =} e.0ܥ0TObخd|L52":sHeW!.{:r1t ,F*cr !8~~poJ.ް\v*;. 2T{a-< t J#)(:LFzps7{Jx iٵJlnH#Sqv;|!YW: |w{Cw=XdWg{bpSmڳ:=䉬v m$1 /tX2vzE2׀Wdn"4fx@&(Vp**UYn^Wj`BR)ڋ1!zCT#!ˋz=I!cBrD9BtN;)vk01w4gfoj4BLsFw1Eh/u0Eve/DdeҿS\v[^ [\X.cA7vȤ eo.;;q'['O`XԽ29k5"xc7^%S;ᘅM1\ 9$ % PvWvplEzcvuK mjL\i1w"UM/xcc#;ƒϽ_5uE#Oc,O#<::qxZTRnSlj5xgvT sT7 HTUXtXr)O%POpHTjHlGs!v;s#so5Ǵ}!G6UPo{7)B{'?Ys^۔*e\.;2}dBe_VdCV2k\-Fںeɖ:#ˮkr9Ge+gpXԽ8}ROj?,v׏QcR9J&ךjdhxheurŀ>]r7q|L&˝Sdߠ:73uk^*c[v{QYUM {L`Q"% p:"DwDQ0rs'\5+}?9LYllWIbo]쒸>(4OS<l]以*UT)oFl?vJuk_6p}l=QL;|=>/ZI\G"cT O۷P:Tl OQv_D_`Lا^_7F6' Eh/uF5GƌΜR)eFdS*x0]dl˾r8~do^\~׬)l b .p(U^lX:`ahT콰TMR+JCzTO+6ة<! /f'P۷d@P=>B\,>;!eIU$U>/WM 'x pn7K{SAPa[>b?iK*U*&| k;È)l ~)d (\d)'&]D_%DTj\tE ,v0ЯOA_H7(s@}Rמ3^Ez6lz}Xs=!=)Wq/]%Q.L(B{R( }.{EP+'9dqU=[ǹ +ae?=N9 }W#\su-㲇dPtn [eH,UT^\٘_`L;uC02#rY]vt+$K; Mug8iS"g*(6ǡT9InH4f>Bj'. aAULsnV.F E; vBQ OuXhi@h3<\{*UTb;?6&uvև?=q Y|S4tCʳQ2 * l7?(At yP]C+Ƌa6{ϥHch6sAZ"@ti/B{!?Uߝ" @unvˮ.{hL.{ݱm}rF>: Җ9;eod7{bKǟaE2З?+CbRo+uNL'D&ݮ@mXjd]p!E.{H\ O݉7͠}pK*TZǦ:aY" Mvoviu-{Idps122S[B'ádF.(;;96 =k *M d{x.RV{NqwN5_˝_^ r/xnN44Kt{`ILY֧ @@ŋ)j$6$%KcMX3c;6~t=; ;3g,33Ȕ@H$.ą>ת\~ؙU{;t^DũSu\4|l͆R=5<5L˽Ν7͢1? %s|veMwC bcxR4k*]Eگ7ON(Q=1ۡ5HEמ.S MQQ2>}~7X}3/M1k22O᲻Z.[ˎFokewӀK.;0\=㷌n2Dc#\x_4bRL!ù_!eBc@ljX8.gBy*4ݎkq:=~Y *t{taw8mZE9M.#}Б8)ysg! rwLB(U S_EîZ O\)K4<65<5LՖ{έo]k1b90ώ| 䠀ˤ+rZĶ&.-Gxx4 Hu ۙ6I 뱨V2SP ~7E G3#P1APuzv3MgZ~qי>J푉>. eo 3Zepysnb.{4}.sٱ$.;I\qe?YG6X4LDY=`?ѣdBӝzn)XNw Əbcj!Iv5혽(Nߞ?KڤtF;Sk3.;Ig0`ə$!.?~Pr8d2ع+QCߣQzHupUϝ//5Gؘx3OB}JtUgCXFSn'2u!3(Gf;2=*_B^Og Qh7YO2<^EgGH\4W`Gf:d.;*.{!c6;ydv*ߔ=t\O(ΐ14Te5? L~xo\vɴ؀odij Wf}kno;vh=h$OMRT;+.Z=q1#,bQV;[a0OAot06FEF&م|lv 5ӁrC \qOW[0`ɹ`~iIc4{8nz'V3L&ө:n, eKH2 '&r#Sx)/`J=Sưe")k+,$$)ڬNq傺QY|a΄Rr=Qϸ">&xPFi]A  j=D/~kej3MgWWB+ˮ5 4C͙ YKo_xcޓ)Fe? ^eq6 Mb7wa2sMkov ۦ wo!=LKS{CLma0&,i4OT -uu?6d(\8bbk!&4C:4!׻QӪ753K S_7~&ii=> [cݚ5J%mQpd(("s)RڵRY>J'DT8ATkr%쮆)c<#ܸ^g.eIvb$IN |w]SwiH8v?J&tWܶ1F.t mJa.z+ĵ8,e']8{ qvZLx6u01.ng8k5_f ~nղh79~pNHK\vp]hZ3}}n.{3;Arٯ`Cqُ=M.;eϥ'yYL>{6p4LKE}pqޜčfk7CLlw4G02RI T;aTgExp%^腢LQf -o 5k`b}1>dvw:7=F=1ۑ&ىF{xzjI754;Yx)vîsLSD܆nL&nic;"DY"PsN">Qϓ9>5fɋ8|&`}P5'ͪk1@&Alp̙լz|grXCT^99jqh7)gJ1}mH4f6;ಋgm(=07c.7< sُfᲓe"c}rMЍwmh2NM[~/~6Qj?uf iҽ7}3 N&1ٛAQ 9Nݠt犺 &e KH@&<W*dLwpJPƧHSNAa#MG5KG&4F g74btUjENHhx:wba OM&ṁ@KeSHꍡP]iy%Dy~Πs h`Rz6mQ}ώIW&i[V)f{XQSHσ7{(uGA4NusH 4ӷL'˾63s\F1kBˎ}_GZ }t\>^1.{ H\]wa2:3K lRi pw=3.Esa*A下vtXg@yLv6Ӧ+vq&ItMAlv(2&# 4^;GD{uiug OM&hs,YOQcZB1拑r<]|Wv>- vh^d{xhFGxt'~I?SMJ &P|LE10إ&wf%tV+$3MgF˿9K7Kಣegǔ׷<9x-Z\v\py9׍n2|9 ۗv{9 ocefG>=p'9 YƒCt1W:{n9[V;?;XŰbq5B l,> NKb |2Fp!esc4ڝ^bG~&)vkxj2Lֻppɸ'MR-RQNx!?O0<K>WX ԂQXE2f6f5 0ҷKj`Ȉ-u3FX\ntfN D 1ᥢ'ॻHUB sH= J=fƁ$\O~gMe%t)k~u| oG Po]O.e?vmi2{sk~?FYj*I*d;͚N<ᄰ, >)+ݰFaBFBkߞ5CRV(c݈MR=@l*"v58~M؈զs C¬9j2tf^~R)v@M#2O7< #kxj2L^Ԡyc i񮥺dHHtP67͝(@37/ke `ms,=I@lơMIKhlSI&:{-ɬple'pNY[_{+O<l6H岏RiH\v㆞^d 4}=_|SᲷg>Qb\e7LV+9Gx+%`Q2Wa½7ޓfMvoF40 żjIdBQjf2OF;2}Qh$>!j-h'y:M˓s;Q@;RvGR? 7QS)=F*4<=w@md2PT aox6suk{#ցQgon ^ڏMB`sMM6conZ}]7{} \vW`:pTun ]_e?l_&#eK4dg.& ]㲛LPfpONYk:ƴvCʖ\s3L2cf_[13׷nn?.Gݥ7&}(řFJȦUc(|lZ }WnFi5㲳E.ee_c\\~$pٕҹᲓnI؛쇻w9j2VNK]~8|#p}46  emFZujiB e(Lv̌7^Nxc@8^;?.UN몆@`wKkh p=XU|]b#- AŠmUډ}/}w~zP95 O@4<ޏ.2LUR5Bh}W!^"H\MP|r9eցާ6 `P?~`<}.Bh#>߶LXM*EN{1/BFxTjBjK< k#e;7#LLw]^lEi@5]p BSk kxj2LE4Z O\,׋=gp3๪6C|(& u&91Ctӹ=Іh&m-C9>VcᡏY L-'W;narh7_kBӄ>*pٛV\d_6k>8˕!:.{ MG8+.;s=L\;7A߱dZyO_tڧWR ΰ^#JQ2^y?pX ^&Spjgo曟:`_2e5ޞޔ7qo$s$dCp3m2Τ:3K RqP2a½<)e8o*I `e/f*Īf5eIy!2xkE~@51ܵt;_FH^a۞xI2/] nKW5{O3ڹ'~V5<5La ?vࣀ[CL'xZLj:ZF5>"Ge[1@ S3XÐB6ы&S'7z.ls.ˎ\vMw>[Kf\nC`ˎ\va`I]} ,M&ә?bLMRF{x7_vd5< 4< j[L&,ɹ<.&"Y>\  DΒ6"5tBHp1zdFiu~2_]ӍY0@Cc f= s?5MrٯWrL2\v .qM&%z#<`0ZO_qGkA3{|#Cf{p!:FIz *+fֵ%eEg6Q d+ ]C T;BNVrl`%L&t| =Ynw ޿oT %b4۲+{}ZOu$BRPgQMi->5Wh7OU`}kde/&PeOv&&\=Cou}|Fe?>\6MOktGzm]Lcp=y9+hFl5 %CkNu3zorL'C`wnoӑhh.TfA롂iv)準rֿPҽb'w np툓 ^;GȈxE.4ErÁv  O%4mtػ|?G椘L&}ea@2R|d/Qt~&fa@ؾT7269=lB;}P?Α1[veq_3{7<>e'd&{7|'1L^9)•ǁsf" RsI*FgޛZTQ=d^*$jd2_ຖzb% Lݓn]zoO}`[z_{D+Ah73\5 ؘ)a9}E.amo@o~z_pé}d?2.dzXy&{y%v&ڬYj_mm SCC3)H$T^J>,`y}o/hPЛYoaQ̳ k[Yg2tO:#!cdo4;N lG\KUO݄O<vd'6fc%]k:hclL&n]ypQ`rlVӔ%n(fZ%HSw٫)%:7-Q1 !]욉/=H΍]ZB@1P1ƨ1''ƪB>2ɄɎ<|h}s>=&tVtm"ʃ2)/4)n>#o~(*H^\oidOK؃7OAH/'30ໄ3cn#ʌv]WeOMjv'f{|.e\Ksٟ𦼂~6UIʋ'=!cL&I_>GعluQ%C )C3on{d $Wg'%its΍!GRL.z.u5u6'I.RA7%'dƣ(5@eI|$^5ys3 )as=sN{yS_\i &}kn OM&A&I9Fle^y|VSVLl ef `x^Nolߙs?pT q; Nmnbn{T>U.H?݈ڍ)k^ˌv]{;͸k>Λ1W岇 \6q߅G+eoe.{45'~y3M&)WVs?;{YgRdh-#.=m1ٝq.s{P@Lj iB <3ؗP+6記>"5AH qaIvz& 7,Ow~:ܳzd2ȹWD4Ƭ1ҵ;io)G2C2߶6T{l25}l?7ڧ&;O5G}}sweLq IaM-sj 2t_MZf bJl̦o.]&.mxd̍>m~:+eo},'IguMnhNd{YH%sYd>0UHqٵb]2$(.SOEi6M+)FL-k]3ᡘi.6Eb$, D9}o| 6<=Ƈ*f:?&n)]Coy1г`!rvÞTYJqdM4#h#xs>~fa3N& O2t q~7Ŀ F}$GSOq}Oz?3MwOe`cۧG%.{pYN8-54#5\77d$M~-*?9=c=NR.DvOoe d2x%.?JIkm K޸&Yԏ12"RgN_Ā|uV~l*,a C_h7#6h$Xxtd ]Lh\eW2eG.\k#ejrُgO'{~74>a\V沏.q1.d27|p 5ڭn<):7>HO}3]dwҬ/ 6,"&Ş]+,d3oQNK}d@4@?ֺ> xTԠeL65' rۄ4ݎWs;? Oo^&k'H1RN~2f>Ur"bFzFsrڣ*L@LC&]urs~x.|cxL4i#3ٹ1Kצ׋(([q)S+7IÝ8}Ji?>$hj~3FYqGB=eo*e^<\5oe~k8p3pهˮL췍n2L ~s}pq܅Y1dn{g7s8>=>Ԇ%~gw cŜYu.bo$;l <@"[BK0 ye|3u*mJ QԺt뛠A?{jdzV0TI7HqxO i-B&:%= 3,82k'ݥ &'dzqMPGt(w;$_Q]i`G2>V>ZaN|;WިqRSYKO|aI .4p١.TKmz.ŀ˾^#cܛ/t SG\[d2Q~?=K}Xxռx9rU*5%| ^/2wњ7ٛ`5S[%@#)MTTB ELE]s^#*@6+6;JtjȌ3*[a\vL]}㲛L&i2a2nl=ϰitfM+ oPp*rԬ}=D5Ƭ)|oۏn07^I7u2\K27?Sg 6 ЌIpbH5w[G$jE `X(kZ NJȌ3$s6 cq ']#aڛ7 UGE块ߟ;q)t^.;* k~puzާ?=ny}e\CϡԶ65LSs}eI'CAu돉 8 vU44ͭ7w|"6f$[=7%u1f[#l̚ J !*_5`5qi#Eaj= 6xڱ&dP 3EF7RHhOS?B8!Yø(S1s> 3m ^zW"~wyACлX]c2L&]m`3MRDwM:]h| a١ N zJSjcW@MO,>] -Ăzv 6 zb>Auj`hSf j=y%>* /)|(t_~/zh_Qg_k0+K]'az'mqGd^36BIj.+p{mVKΆc5zw.7wAl߂`7KbMOy6EEὧwesf\|qY0IQ`s>~ C 3M&ɔW;$5- d'ڝjO.JBw0.d2C/9wQµ's;3v{;FdBxg,$'aF\f߄7/ l[2`Jd3!hGa?0V/-+5A勻*.F̓dlb2L|EܕO7aX f88Oq-6"hbk!2 LTbaIw)~bzaY wr$ qAGd /}ΒoSZ\ֿKW}Qn*yƧ$+gh_ *asm^lhd IDATXp<`EF[Jvw7;N0 pw+sp?ߺd}eȘ.~th|l&d2{d&S|.mqa5^¦ o !3n'뛎+ .hA< Q3 ^{&_\!d2VX Ȧ#$[lLoS4!jwiWq3|xݡNa#݆L_tlv$]` :Ĩ&{cY@Yg:y#d Z')ϣb#ԌB2}׼ާ F0س]2ݐ*U4SM^/VwBJ] ~Ŏ)DZsٯ=~OR.qnng&d2F#_sl]`N CZ/dz UNM%4h\vznӴ*#"lLgo'ׯ熨7{ I?/f;0 ;=~ѢY[2B^m_b2L'ʸH>pf| l<ueㄧ̛j`eN :c=ҧ漫+mO&"T$ld;P'R$ X Z}7<}O;F3X F6`}PT>8fr`,-ew˾ :?<=q.{~poi?vdZdotZ,u7/9Bw|v %>=|:K ser⟫5Mmlre|a2 IϾfl,C`2L (0s%޹`O{cd\\ ~MQ$vBPlx2]K-em;.>xMP99Zm.;eR!c="7n2L`\ݼ;E?&yx'5`mݛ=/ـ_]XkRcE(,H.~}Ҭ`d2L%ORdf\jf4f d$N;O/0ֳ0T2~ 5Ϧ0bMk4VU^hO,GƦ|{H9)97j㣕~7orQSqMd l`c2iieåLĩ6|`Geo:oH{nrQ50.p%C 2&4']8v?n2L+Wc"r7}{ɯkM-Ƨj[zWŇ3"]#4dW=aM5N O0h2LZ1Hs;IqJ]Jce؊cC Bmߠf>x[!og e:&%xxE2Qrmt 'Qbc "/°_TqfFiaF,`M{ /e~Dd2*DD]zb@ ()N0G#lLL3~9o6#|LSi .RgH!B.aS+$ԓiv~}%cr|v{Z`֊3Oۗ|ñRQ]P1x64?\~.0ҝpg? G_wse6̸)rٱո4&=}2Oza;dZE:?F sB@9fxz%d2LYb|w b3TX\Pg216:)jϱ3NUy.>&R&Y6װɞhJȘ9kLuUy!@*sdr?{3ڗ]SKKi`m(HrqC qqY@_[s Ą\&沟\[Mdžp m7>NXNs\e8>z˸&d' G=4,hwϧ1>0E>ok2L&SAG3| ǵr_@'PDp==!P> \!/p*v&dC,Ցxn3ÆayBi2Frv-NHໜIzadޙB׊ 27NFP24."FQ!og^WGp2V΋2}~S*FIX~ W; ;^2C=J;{ڙ. 7DuɾƸxdGe8UոGɁoj\vd:'ii_vrRף%<+~bOEL79igMs}iI V0L&)y<>F Q<' BҤy﵈MO $ί&JƧ29t]k !~\LuVgɮ')m=N'~XnG᳟ތ9:f]5i4gx쑉^5i|OIwH+Y F3'RI=䲏g l_mx.dk췀;d_.;.&'1#c&8m\vd:;=s3#:]hkta 66qtC$oGvR]s &^.~mn[sRd2*u8Ze:R/$jJH ~WvjQȘ<*KHO2}^@\w5TB:1ٵd{ v^פٓ`u)okE a*Si* v57b lv`΍%c8,̃7ס{|%Ьpk\0:|ԛIY.;r' }r]ӎ~g&d2p:WҼ>G\j5σՇJMlPV_cpg=>'YȥsCC Z2jdӠDqQo2L& ޻Mǔ G) ð1S/٧&{)v Ubz#]1#-7 ,4:&cMO1>C.]g31Lp)R[h&?2}pVb_ޣ.̌${>o]Lk vWsMLSЍadP${t_I2f?S+ GHeoS.{hOhؿ &tDMWl *1ZDXجKgMz3lt {G$=|99Rx틀K -../re/-|&d2 Q0&h*u;N%P)Mw".gdJ3id2&0ۙgEpi A:Vғ2Ro/dxj*jgwN-U8 c _٭~=AC㵃%ܿ.acں粟\WtfV6@=雟Nd2Κ~oƩg>k* PJ3ͥ۩0q zLDÁOܴXN8ޘ >~&B NOiMN [g>JiIې[h|5L&C%¹x;kfG>(;ǒI˜Q0G=Lk)v@5ű,)QjQnHmBMBAZC2T*|'Rq92QLKMPjރmJih'xefW=; = x0>ZS0h >&ADŽ;>&\^;;Hɜt`7e;ZL4ɭ5H?L.;g%\Oxx ~r^p[D\v\npُ=pqM&,OC<۫K,J~Q0IOXS܀۩8꺉 pmtop p57ᲇOf'$2؁0B,sO6uVrI>RYl{R7D6ivd2 m`ho[ 6ff@.bd;NIsB&5%zT׹ B/َ:%=(U5Qn& / c I)~(~F Ғ]$ Է{Šʌ'\{ :7f,iS0{`샌vv=I|ZA%: !t^$__˾ l].xd7q:.Q7u[bc.{q'1r\d?~ ڿm&d2E3V+؅i_`}F]ͮjQq!Aڶ31j:n]7;G=.뛯G6WZ1ἍvzhӪI1n!/܃s2}d2æmk1~zN]J #Ǽp,H]g+1rj wq8dӗLJ&Aǰ[e x >/8%_bx<)hZ)ƛXp߃7{c}\&m­g3BgJʠ {nX=9' s8$`RxۗL&iȹ<)! cvAj.>H /klJV;7׳QY!ZF3Ճcvx;2(d wKNy !N`'d xi/Mgxf r[+dbBLL 驔f~Q3cϓfvD;\=>B$,tW@_GK~={7<>q۳e&{0'J n2Lg}w}>k$Oj6RdTj@/= R=^ԉ >Az fu10^qMCzmg'&IdͨS:R>OzEr+g0L0e{] psYB&dK{ׁI cx4)F&4ѝq,G#1.`O! djB.o'&1s;P6en6X֘$V-gjibi*eQg860={s=&ɞMM> )vnKdq/l^aӊRlj?i!\7컷n?HkO3w?3.d2 Y88V)_ShR]dhIQ? 43 h&Pl $ಇC\[>!-qH"?h D?3%;ɐ;g7L&"e1xI|NBUb,U.qmSᱞrM)?8`񨶍AT]z5d2Ls`>fћvXST&;ubXDH PivX[en I j7j8\C\M.jBYAwL0Jh:_&܎o9MX=0اlv'$ڝu.{1ΗSv$H9Wh89YN``g'\Z`o ڟ cTe1~o\vdԎ'i`cE,RR},E[(LHQIph'{$j8AkO#6nLSITfvfʃܠ̀+'Z5}d2u%`]jf fcbc. yK\cTXGəHo/bh:OԬV2!lK>Γ蒁^cIT2١!'hzޛb]AńzibD4i~*&Nw;?~%Z]yh.]lڵcOf{essNz.x1.;eoYVm }sv^d2OIh( T/↟&20mSF' _%Pq]Q7;Q̮lqMULL,>;Y.Ȭ,t6duvneEnwî< IDATe{ewFI$ٳ̭L⁩"7]YأQ!a(卪aP{nց l@"ЗTB-WK{QNJ4pET :) L2/s}lCL&ɴv+V7._KM z 5DvVp OJkq-U`ϱ)dk;E ۚ;ijW!&;b_* P2y\Ś3Q5}񛄭ɾf(FhFbsf+p{Lzv{a)p6hfGɯl4ZKIL.V?ƣdߚqcVbr%p5_ dޏcd4*HO (8* "P"fY'%D3@F$S`[q50NTszJ=wH]lzJJ`>>{KZ6#RMym >d2L }a2q_âP2C+P4Lne+d_XC:CAR+PnFv?|oWGR@fRRfjFQr/Ƨj7A=<32:E`}+5{e@d*dtp{;&H[@T %{ j~y.s~ {?1dd2ǃ;_%}f82#2i]8iz2bdeNXx*MQT{!1v]~.c\|qv'c(<^ŗ)b OIH'(@fegh`9P|k_*'(5e&0A!sAI>>>|8}v&nF{-2NN'F;MPE]dP+Z yA i&{`ט/_]4{d́zLvd ]͏N{6+r3፫\)>')v !̳N`) _2ّ嚥Ay}NTX2ɳk fl~7}d2`㜟ֳڛ1j.ƴiCup^;p e2뢹Hj gzJ䚡&8\c{[d p"ծκlPDhL+gƧzv l_IQ1Swk|P9su}ݰ}p\m;O;(7K6Xa&WW3eou.5_~l&d2tfjGeM-q$ p* nKtR?$H{~>R ĆkLȘbO=_Tj=3g'>[wL&i)""k'd{Smۙ7Eˤ۠@lJc@$XCfBz= UL/vJMCP?b`vPPW եُc'\}7X;sdOR C\kZj ?1֝oC5@~%c>F1$yj{hok]_!* 㲿md2=wF$8[ډᩩMq=L˝C$5EͥڙדȤ$\0^V/1T+;r쨮[N2!|v@&&dZemS>>T8wT;eLvb14I M@@y vd*fX{ hת* +HA\X2١|"2F3I6[0ac??S'~1?-MOyMSe/`cؘ1SB]P#M3,C^hg |O˞-~rd2$ͶXY?eT1r}ȥsitx^G 1#Wv0 48E?_l_l wa.4\p:.n}gH𾉟G te\2.IeLvdzvfGr3 9$iXZk eI_e4pJ/dHI &;xkʿGȯ[^I&<| 4@}J&dZv||ܡƳq|4[r|Cgp%σϵcqt_NjNv;OmKkNC:K%|׸b'5o+iߥ\pTY(J^3Wv&q&;KfjR$ lp*[$0&۝r +#"_\ 06!gB; eaYMrewR28nndGdz4\xc:dP2cT9JWJqΧ+!'6XUrMk9{#S5S%=IF)O'-aʱ~dSXHAt~dN0d~gd2-_>~&c;V 2<ծm80]Uo4ӛjvp_G㳇ϝŐO4-j,^ē5vyCUdO*N~7 L5 XL(uؗۥ2cBhn\QNy0[駦UF7݌kK{\vD{"c=6[VݘL&ӃĬѦcqJ !d_-m4d@nFZ53>8M?R &/IMI, %ViNd2Lm`"9/YC&0۶8>C8'&\pcf;;!'_p~7֡1'#v;h*xI Ws=pqmsjR*f* j_]HLف=~bXb#Ōҋkd{i ¤ ~|}z?w\WMuWu>Fcgjcq>.ϝ)lLv1]w t.{8eOO=4hdzPuL.'p5V q%چySNlІB|h PWJj>2 ZL,2FjkA*^7j^{>\3ۅ'0L&ө(NuS]  Q3vn lf`S2%uj lSf㵑Zj4^)`a-.>"4;po*%C]Hט \))KDDŽߝ7P8aAlQj48DP_JOZSacYp& s%+9n7QH/j5Fu ؐf$A2rAZJFs쥦|NG/rPlL3 ??d2NO}Pt}h;j<3٧ v P{_u>>M#dp:YpݦCdl$SuCT?5XXqmInTGI5^MO-ٮه6@M칤kPB i8>g֯/vovfOf pOp1%@,.c'I@d;3Eӝ%˴ul(`f\`zt4yF>&|]/?Ur=d~r ]Lvdz51a,.5fr| z |<疇W1MJSᲇ z8}:a#.jJV1ra}il]cMQA8U93ތlUb 39pd2NUD `yT}_Inw3λSLf|(!d 3ђ9S }^FUs߄^#5rij>{`WB#2H${^y}g:a硘o5bIFH'M0ٳlv̏cReDN bNu 6F)>ohi2f{O ~}?g8op^sLJ>۸&d:9A"n&؉AXr({ݥ{dC6T7A%9=1&֒iف6XSVcv !dzrMR|Qh2ld2^j} d:f  w>-o2QKfA*0.l[XjVGe5"v ŧc$hJ %?+{$if{_},>V ?8#c1٥4;Oύ Z!^BW  C5RC28d-mrxNlBfko~c\v>&e\ޏ,e2L&]_7cֻY+5ă PvatD;)' vȘodڥ]MSTR-5DUu^;A0ԅ眗1M0L&EDέwcz\L)j A}t`;!OM\ek1^bK'DFs6~K?lylVQ|vdo]5>՝g|_K cf&{sRR}A}HZ]l|Zf_*1Qyʱf ڥ)pʘ,#^l.${{w"^e2Oi.s?4d2LCއo:_YUSLJ'XfLgMI+kDRYY$d)h8֌Μi2guiM[==7Q܊"Y{;6|g#"3wp gׯߧ mnr b{vq)&F fg(;5`Sޘ5@f'jK\6^!cNBOm ፷"wv ەҬFG{ߧ:++S[ʨ}p, b; Q֘1pD̵.gp]]?$Wٵ}r' PG]*vbwbc_טv憯.hzmcjy#<v ѥk2V})*sٯ\SGqH!$esjgMurnv]g;PA#cxb*$LQ=bbBo5׺Y6o 6|zpQrKq>.sl 跢 *B!y}.>Zj/ij"{i:4 1`8)Ut$np{1IohvjD%7&)?hɾOf/% ݊o`3\iluwOT/E̸u#`\pw\Xe\tG?eB!$)puE&cB{5Zdj=JGY *AyKJ)rE:7ѓNԚK n[!/ByCx3qg"]9x!3 hijOM4mdJ 8Qu)rȾM 5jiFsx:=O ts d췼7CĽCwf-.e0]^مX mgn,h*;zrjyINpN ]L]g"ݿ66 ɳ2Nbe\"32B=xGc|FsS WK1%WTBAx Y^\ ۡ!]8,=;5@ZJSԆV j=cq%MJg;# ~"9}ympK7L2!2F*ȮخLǥPji$KMjo*ݍE]':F=nL{ L`2"WA\/e"t+nv8ºZ\ؽ|lppϖ(Du81ڢ>E=yXCd%|WF\1Pe}z$. 8?| Bϕq\Q8Zrڣ%V\ ; B\rC!QO_ܓ!bK{aNA\iJ"cVvk7;کϥ126Bȋ#B42ifɦ3v]gp8BTCYT3=ʊ SR-&e.!j/GƠU2F>8^֓_Y"2f] 9m^Mn=wyMKxwDw)gJ,6FlVDUfƐz[g~3 Dt_]Un.F 3E՜)s !T8{ {0)u$W>^#Xiop'J3T-g34BQ1Ew;&{naV`CTSdvnks=7 1nB4;m!F1;Si'T^{/^hNkhǨ]3:0qk yb.vq]symТ3KVsMD(ݫlveݎi WS/nu*&Idp#b7&{;,4 aZffG1P8iR|/١BhSSTn D8Bl66 jUeOn. |6B!? 爣j}`M4z,vo01Yg!ӁYbGK1=sԃ1GtXuK#q{~V˩Ȱ#b}Ǎ;cRgl>ڍ6fB!/';0J((owzz u\n4 9.f;2iSԵ4O3Tnj:w`m,a]DZKtLcxrا88C/4BU[pԯ.N/]u\(?&2׍!:#IřbaF_:kU6ݐ.RqZc~ l/mgI>5H ?F̹F,_Ș?a.;!v΁`zYEvj7yWԾ9PDX.v,58s˯X-[m9PMI4zj|ͽ.N/:Dmuym!N!#4ҴXlE-FzP5}daV^{P禬o2SflֲT.M{ QN7ߧ&ssحiڵ-Sz#8Șᅯ[+/vėdsN58KQ2NTX3z"ߐޜnNh|Xܭ8㶞?൳݉A~O:=$B&&u?OrɛG Sj- IDAT$΀W !}8mǦ[Ӿin> Jb)e^jx134)A֍5B&0aGռOf[Ew"cpأ:uNS/-+8B!A1CJt;}%F^;8N\g#n/!"e)?jodvz͋y1h"{$*ELjoԭnK36@y+'+d{MPue͓nmI JCX9A-+{)Nun{ UCYdwuO]~_WEdC#sIBȲB?cv{;e-c^엝 :f%cde:TB]ٝ6F;lvcV-ٓ/|qG+}݉+)MP?g-E!p88Kr:VkXYYLzB/dm:g-&J3:(vS ߻v&ttL-6h{*8ؓZeq2)ꥭnGh~9NdL)""{cTL6]gi+u\|v QKb{nrsm53:/cb>'? q45D4Bٓ94͐Ӟdy|F+$Z},~-zqa.jVݞ<YU,o 㴺^ɉ12iʌ%{vfΟp[@!䠘#dV;A(N2R/1݌ A6H0GYz=]0vkXŮO+oK՛jlL_pDv7]k18~y ~|f_Nvtؾw6,v9+›"ϲ٧vrtޠaF{"vg1jJnv+jd\e>[P-۫NCl"Gm'#첧_"cVh^DF{ȏDxKXbaF;*Poj 56vMQؘֆcu!Ǡr;;>fW_j~4<N>E !\XBڟD7vGYDx$;PljegNQ/Mb^Ϯs[fvxP3~Uўfl֥Oq"?t40wzBasɨե oD]3Htsw;oQg'E]Lb{xࣟ1B~վiš%N0ݡn'PeqY#/(jg ΠkA9`n+޴ƌؐnEʀra͍}f'r;jIl~]&.'i7H|eo\?L5q-ketPGEǴV0\Do+Y=7"vk͍PaPRoBmNWDwKp/eW6-12 <85AMOw!y >#vnQU3Ԛ}v|n5|?'O)By.NWv=EořVStLo;ړq`6蘤5M,8d3tr_٢:%=n07k߷d(//ͱ1W{ m:e_">5![C1qHyh7RUv/EA:م1?ш1ETn<VUGƠ^Ê /e*)vLa8Ens6e.{]}_,{*p-:hokZ Un Frg: & s>ϮW w"B}g&!'y'W{oDȬvz-l+!ۥվ:KSehquB;1P\ riKAQq?#'BF(j¹װ6&6I6;=!W]pDI_Xb{űރ=W26%ڎl1g&ڎ0Lj!=\5oѮLWLKj{MoU\̔ɾ O?z%Gh_ 7j҂$ 1Ӏ(8N!g?B6;B>p^jfQi]x0)xPhLM7%lj5GE>(On1j?#zEv>!C!p~bh~}.hC]بr!un:r1BEX N4^R+ņZlIgs(89[2V^hkhTf8A|B7;!I<{ƒ4E0Vo qmq+ċq͔ V,~׽xGLK65A]#3u-oG].πOd}u+#iٱ0 !#c:EtlkV\f2tm֋[+yS2-wsK\xf$WڡDDU ^3Wt)W!3L׽tNc,!<Ͼ8IS D^b' t߃A,[_Cvc7yq3Jhd fWjTh:}Td/떻+[hu>~?vB!f{q熨J) Ev/N[ :1qky1uŚW3C47/49ʚnn͞5@4:u\~oJd\!?в{FG{kl6A鵭&b|v("9_sk=K٥>GwN!q8lk.%&f|8=cKv>vg@.uג5׵W\46kn2%>Qt_"sWy@=HT+yfw\gOO"ry35hD4룊jN-^ R2#deim(FgՊ+:BfL ~ \]NO^&7W6@"lOv8?dG\ۢ䶕yeXϠ!59?X~"E+6B5d*>S|v/BF?:me]fvwE Bta:4ƢB3!cVtf&ıɦ] :Zc?FƊqcTF{2pk+"OpuZnFroܵ8 WVdsIrم}s \#{ !5[!3sU$*  ݵE!%,[[*) [be]}.l='縘d.OLjW:|G}mDMP-sUhpf f;`f'  6jQ^D#7"e=.llQjxќn Ӄuf**LXƨG*!<; vožjk"=,@~7ᠡkۑq=w>N˽2ڑ."=ϜA\u ,kv^&˹v^n1?1ۄB^*f}5bC]cՎTt1:J&sâ^+x ~,>5u/Az*zj3]406#'2br{#dv߄^q{1197 Pn沋Wlq/żvMPl?#=۠IQv\2^1OrюzSTRcCn!<;|8Wkc42՞dOXǃ?zފu'7Ϟ Ax4e}AjTL=n\˱IMByivK̝` \CԵ\1v)w;#ds^R۟kmpZyƧn&T6~"wMP]HEwK1U7 ߚcE܄^mߺQ&V&V~5vH֐{vʝ^, h 5vYwskF! >~7/j"dLtJha"f)£ksڃ㼆u:. Y{g~-i`ƠbG[`+拧!!vYiI3z?bG&I`EN\CgȞ Gn@=J+Z,j~0\sUj@tvLO_XS)[hbcvb՞ a<F3Ԑ7L͖3U?&_;[!ƨ06@ GA6A%q1҆tjЋ'GM4cBEt`By}'8 Po5F~NQ4@7NODvu2((_Xs4FiQv91+עc,W ͸jcc)[TD컬!ۨߌx`hXw3 iGZ l\.{Z$zEnv]-t/Iݔ뱖Dɧ VhTZp Nl'doi17([a'(~[~~ +"f4AFh؍A.'Qծ7jjm3ukӱ)*!ӏp;1~S>nQ;u^iAjisis_pޝ&oÚqƠ- oZ9 2G{,7J2DtP8E\'7L!#>(oD<<2{J4f#eڡ;nڥvilPtR~ϖ8ڭP5>7D`E\j|:ޣ^pjɫ#5sסLV7SBNuS϶̦C{i2kjZd捆k^cR jdn|qz Ȝl1js|(y[4B!v!|q3DoZݴ͞[;=)n&}t1J/~mP|z7K-wRM̓R&{ў9jrD{˾.N B^QwG{֤|5LVu;٧hI\1f12J7qV:".jqю+م3 {f| !g?P{ilT}`ǰż16F:٭tGIޮ` l8.:wk1 h,ךn#j /N6#B!v wq:䶿1:%39W>! j.84zՎYLծYA36b8fF.{%:+jwV T)Q6/=-MPŴLp nv.-1"{^m60F ߛbb ŵH]ۓשQpfDv{脳}}4O!9pf u|%) U^qI݅]6x5ӕ6@-e"{ e\LܪؘI`vm.3FB!s)06I없}r:۫oW>]# p7cd.bܥkyuVn:ȳj.n"dZj0`y.F|~ٞ"By^¯^v'BF.s*X#Ȭi%]4A *m|Mo5z3TKy7+qȮczto4!!2&6Y~*QTdFq]ޞtSl.֭v!MM#cb,kfQ/kSt[5WVs]R`ꨫY!俳Za cnNS.1]xHg~yj1-QDʘJLEĹ$lF8A݋)沫m";aStʍPQnZkjǨq$]}O˟ƨjhLwt1B ׮7uf6FEC!]f1Ry%^џ7eZNE쭃3&ƈ^Dw˚B*p$-? g,1}r:]Źwvp^n IDAT#f9ۓy{iivOunzc?E_ڃWk%b'>'jD,0@ fn 8.wP[v+}PlS!4MP KڳF%Wt&,8"s8>cv*zGb9ej_sF! f_㸋2!̚yh۵Ȯ%}| eYIc]{鞣j[ӗ}cc`le4B\XWs.| H !Ruqxܗ{֣;MRG{Y5x]Wvg=N,Ύ F|LӾ.> 42 ڭ"b{)kh*k7(}mdt z|_0;{fe[y"6A?45_&쥁]q(4NYFc ^w2]:FqW&a:VnTwA%Kl5p5n!<? K3 ;X!pwb7 8:tk 1?+ڌ~͐U90k5 P>qsZyPlE.jd\ijGe'BsSn78@XohW=B0q4NY|W;BjۑkҤ;F,/d^4/= ڼ`JT pxBhU?,*/ KޚPt)كB32 %C:Y ZdQΑ V+ެe\Wk~٫}҂*9p."jpN!~1t=f4G]L*W{E @v[}d1zg,{ip;4;۫F7{Qh|1 LNuDv5@jٟ !}˳[IlN8ܧKXD)]:ۧ81m'K]G+9*|ncCz-g3UohM.s (DleT5xsc]+Kug-J?Z&z|ܽhY؍N7v* W=FcT%6 ZnfDxhir4 ]^N!E Ufl"gQQAխ(@E ,:k\踽zWy.6?mlj 3}cnsg@BNΚ1>VxۭwQ2s$w;W*] jjE]iYXŸ5 5ւύ?-nmDƠϞ& z2@òؘ&$-r^bd%\{;G7--F”aS)(Cʊ3|1JFS',,OA4568QxFs)Vy6!sg4/@;Y`;u#bHꥏ'SQrF%gQ29Lt/E}ep7-;tof&; _q'Cs@q:/NOxFB!!D|׆Cj;Q G]9b;:_ dJzWCkP]Tfesu=Ec 9,=d[no8YJNtL//4AM֭nͷ^rBw5 *b{̛z,V焆oF{-܍Nv* QW+nB^̀_#>ө3 ק}:wEHj"b=n,;)|&zN* `. z i>9)qAӍ\ x⧿䠑ByV${=.pt<ƻI}D#KuWgޕ".O`{hHY}`^h4WSbe_"Y+=KhVF#Ԑfd⻕5qy:4Pd7Rj㵳Y!M#ۧ&ӆDGX.fKmVkXӋf׶ưj`glJ! >Y_hd僐~ jk7cjv ܃(ut52.bd<N>F|8B!ϻ{ECBΘ.wnG= lvV(bꕳȎXiz)cmZ+]. VӆFfK;0];ƗƴQU'ˍdrgp'##rFLCVc*虣嶇ᖷ#]B;!C~k~)>`l>Ckd3!3 Leݺ(gY0d Pos恟OKMӞ}j|~#!<㻃]:ܻUp3\]Oo!Z7 NrߔJMVlH_+ ^ğ)@Kh?RC=Cۏk?4=iIphP;-"*y4rqouE3I=gRձ<>f8oQ$YK3ush'r@_:b{R44Jfrg݋ibvWeS>:tv',8rI!B'_=v!CsnҥACҚpwvKkbWURoENBKNkG?'G/W8 p\r}0ӓVATw'{16S})q݆k؏vVܱX\BNAǗT "Q]UZ_P!*be]c!K #(.pBcoL=0Ю.}y:KNho뱯؎4jUg :1 䀰Ҡ+K.€1O'7Fd[;B\_1e ``ݝ>Wklv߇]0Amxݚ^qZz]ZBLWYV/!r(~SQV\ӵGv{j'^1_nUdou|f-]X2[{;Bt+tiMON!~A־ Fnީ Y\_^{kf;9YP`އ8GA|?<_3X¹SF4~J7QmOAmX q#DNX_r جrXSjkmrDlZ^$7<4Cg6.B9A?lpLQh.?ۮ[]R岋ha!ښn g>{kV7!geWq1[ßr@I!ܦq (% } ݊R_i{}l>5gϬQf'ð"Zl7-ո= "۫>#lFN.vdEG]rw8/0WkrVl&2^UoPK9>lqsHGB!6!|W#(k[! >7׍v7} !} 7^ UD'Lv4O#~s* !ZX"^+Tp9܅nRj5bzdL0)Ͼ:p8B{g4AMԋ_d1& =+] 0]:ECxmpSO0gDst ,k1ڣr{%´ゆFu,|y-QOv$?B9?!_?H#H&VF5g${"{gIW%Gk_\>'hgσ;~hpWXŸح\su?~w>B!/A8 FĽ7Nޭv-RB!S u$r|tسX=uvjn6[a9C%WutGQeqJ4>~tg8jxw=Y  bxy 'x:^zb{︜:qZ8m:ii-\O_2Fz\ɊO\ Mw?agD! k< 0 a {"[F10h?Ls0V.ttL_(i\΀`B!/{=xh{=fF+lWQ2hj'=)*fU+u4Xr/:&NؕWrAKnVs8ܧicZُAuobk}3q{j F M7p1E:{mŀmb^s]>yj>8w/c!܂;W7 vwv Riㅋ}nl*ϜNC)NF_&;.f[|RShvzpjt]WVyJ5RN˳!MB!ժ Ϟ*"~ao{ΟK )5wy1ܞ(}=!juJT'&AḎ1k8e ~ugҜM}7\d4l7L˹/+izkiJ&b!CXBWN)~aGPmQ4Lie ! ^̸K1\AYkqA50ljڥv˥[[;w4qOH"'E !*׆*7G];'Ͻ)#fvQ%C3 :%f}xTŁDpn'k\cnuؘN7bpkzS R7wvvьw&]w<^㟭o>}!g5z!N%7^^~5V.]H/OVk y}5woQe9`{0G[VրBd|;N!gd>nrK= }CEp/9ۧ-RwIST!'}>fbcSp/lv>޶\S;zts9gɧ!BՑa I.d o+:~ vȾw0~a+fO={u?먗c1͓:ZzB!>Hz!ݍw^!/;Ia%v%Ӌv!ϦhN'!voono]ݍcؘXh6ҎvE%Ө79pq| ħ`!B!/$~8 &h8a4Bgّ :B^R [sf= StQ2=v@EҫZ%Bf(vaN<7f&%2cI`OuTfc΀Lj !ByX#xUFloh[ N#v3k}iԤB!ϥy!?(Gj;+E/»6Ǿ4UR#uQ䳗\:*& [3\.Sӟ#>";!ByeB{|~/sK4~klrk>گv K=r39زx#Bm >Ră71Nfu4^>Jl7cy)ٵ}B4I4j=x,8ګOw0Ȯ |)B!Wڣv\]D^j/[ ϋ!J 0~SrJ]ʜ ߖfwju J=PSolB!? uo1:v)P IDATItDxWq2^sCIX$7:ڭƧ^Sb=s\9CB!XF>kq!VמBT]ZwG/K#B`{s}.b/jqehl>++O'\SNN31vB!sXv%z$Zn B^MG?Eʼ>ς:m: ޥy^LF]$;g]/4=Il1-N]gO.ͮTߝ=cw!B!mоl0&2ۣ3rcOӔӽ5>Ȝ):$B αխĩaV[u:ddiTr$XKg/:57s-sְ5P4]-pBH˞]፷"?\+rO]g(+ 3iӫm>%C4SB!\گ cG^:*^,j5*aYv]d~ZwDKڭ2S7^-]8Gs0i 6[kq4rК=?QϖukG&j`p G!,$>z/)~#&2Ipw!gMRnr}kGl.3ß7B!Bn*?⮁Li9 "cE$hy`W Y$C5[- |V4HEqyIQFv"Q尟<@qGӛ;`NuZ3 g57cCf{iP͠fEr7Aek~{`CBR4+Bo~eplLtop{E.7c Ⓩ(B!8,!d38 hk - Qݜv=p[cD=2ôQXQj:ӣ`/ϙԘuiw?^;߽I0h?N3B!υC<8Gάv;`iFè !B9PhZ$"\E*si wI;IlKEr׽? m\Uz|grhkrP8UY^#.4g+ K"( ϱ2r^QΊ"G";vB! ާN!B+:-6 a4S|ߜA/K9(%[縉nc˗;=΁ ɖ>L|\F1>e=G!众MN eB;B!B!8,}qbH\P"j: 91Ff{j/5?0@\lbrf};'L"d9sr{^/VD,%ccc}`./xO`ְ޿ћsF O#'B!B!9qXB#cNLSK Qh\iHeZ˓TZ44?uخ눐;ܧb^zZc: &׹iPj[z<8E)AcC~;4B#B!B!<CZmg< ȳ d6\f2oCsZ1%:Y䋗"Gb?4JnG};:k "{t˗Ο| @^ Sg#ki> aƴ=iOu#B!B!9>5nWnli' ٺ1f12 މYjWk!3c3Gr}84+_|79ڽe7ƸyK>>wz\C..6B!B!8@iyN;tCa-C-OXg#"B!B!<7[}vcT/&du`[a&O/Ă]DD+܋Ѣ\ [*1٭ ,[ !B!B#AU1pzB!$bsMq,in7%',.Z'G{Jb{,Y>r~@ ծ^ OF'BrkAsOO1#d`䵣]HE̫[bӯuыr^#Fy̧)6>|fn{)Kn|~)ѽ0`F6tlB!B!8h=0 qZxtQcl9Aqܵ=tx{3`Co^kڒW~~@Hhe&NJq1}α1n!B!ByA~ .{jtwۉ!ӧq,n~@< +BMbcv33Fd}Y#Hcbx;yAS5v-}m'%z{~^^[/k C7B Ș)}s-!B!B!/W0~υ7ܾk&ƃnćpf %58n MV|IS=D3>KP=6<6;k| ;آ,5gwJ71B!B!8ַb-7xto3D^pol?_lwvOﭵ| 4E=\-Qa A'^nv}ndO1>il7%pq-!B!B!/!_wӦq1]*LN6z v{G"cgI"d;2fZ@>~؉A#vb~ '|EdXQd#{rKq1VSY/fogM}aEHG(os !B!Byta%2`s9qVOQ5!ӽ( 3fшYU,[G̫Wij .i޲ eɘQ2c5݊k;c0Jn@Ul٧ؘ%Cn!B!Byo͚^]GwwBcX Qnp\Q2Bp!(';rZ].C>!VTWls?%ӽQ#~DD/][n̗1?@rO ؘۭs-!B!B!@w[V4~w~-Q(r64L b:ڧӹߎk6b.lw{4pSTמ΀ϩ6ip"cCj,a=q1WcB!B!ro^]MQ׃ !2DTZ( g.sycʥn9ŴiyrR6{POJ+ þ uqV{MdO?p"cf lJ!B!BapO{v t16f0awPX:B&a4GcX嵊KP:`*kܨF"i\ca49sSX PG}s \N!B!Bȁݦ?W烣HEȨ&ڹY V=>vL4;΀O"B!B!Xʵ:4EV@؎~@=9Pc>tCјyCTv]o:z׮,]o!js#Tkz.牕ǤnMkqf\ QB-CwJl79B!B!m\ηwYNj7DӾn/:aͽ5rG97]*1-JSUE)iF{`b;=q_N!B!Bȁk=ΘӾC78'WtJslw-~OCn9-g{x1sAisك6Bey,ͯcṆ˽n4B]${?%݉qB0God}LE9*F~nvB!B!Bx?\\Xe\[NvxN)]Y72o"n8:f)6Fłm艾 7be} "^Yv-(Ί6[!osGtB!B!r_wqX MQ Vfvq&=Y˥W#:Xܞ'If~ҧؘiG)" ZV rZ+ ;R1}vOp_U_ohcioDL"fl#n!B!B9p/"1=}r#]u԰3'Zܕ= 0v^7Ew5x(=x(GZ< /v dw#cȾ~)#c!B!B_wsDDȌb{ =v;``|ۣCPӦal-;Ppǫ)f3.hB,=NJu1I`GnM)/7B{1%fp_] M~B!B![K%1BSB@j;݊).n>MI -BFRܭؘD`WXnw9Zqѹkڭv=}|vo'_{jۍyl.f'B!B!䖰~!2":&tQDV;1 NKZvKtޓz 76Ng_j/6B 1}!] E ]䲟|BB!B![|WnfʲMnFٵ.fleBXj ;L-6^CƨVLT f[v3pgBxjoV,L!}v+'$_]OC!B!B-?$`-IDAT]1pA$_lyIq2;݆2q@~qfQ;Fǔ\q{.O.vjOb}3ާB!B![e}c;7CvB;ke\ϒa9ý>AD$7Rw>O!?r=կ+Fnl>nj-}rbȘu+.f+V2WxEvB!B!Bn!!џŤ1j&t"%GǸ Gpi螸ڵ#:{0V>a?>r_;}VzITO0Z{IcT\L/Dpu=BN!B!B-dҿw |HBp~y-; ;v9 ,(>\\E6; "{+1}D"}}s9쏁pkD!B!B-? .qZ`\[e^ݴ%v`E,uj6t?lvp{a7c~ٷ~\vB!B!;z3"KBIIAK%Ö%lxka"%sϋ|ECwcJvwE5x]xٝ܆o2?f۴]=a<kSKQ_G+>ڽ! 71mWCY iQmLy=uT{e}gоOV"AȾU7->]^gŧ"~Bvxܺ;1 {Y<YZaj#n]9p ܋gM}_HLe1vh_M/@-!{mؾ&ٯ."."?+euo>iOLga dY~O̫F%uU~{;nMٳזe#z_>ٗEؾt",Qē^!'NoُFa ^ls~}P>f)[:wMa~Գp} է&٧ۏ ꇦ{w#'G1SIU.fY^!G_E&~:E/*d} }Qy>1jdj[Lgj"Uq&O4{Qdbη! tr_2\<)"UV̢=!{9x9͞Sal6ԫ52ٟ/a/lb{V%S "Lߜ!7e4DȾY~zquq8⋏7#NGމX拈8[D|}>˿fl{uǨ<*ϳ屹oF7PzwGU%l?$h/؋i}w!U_E<N޿[wEmОA|GE+p^wj&{6x>.ofj T{ʘkYny'jb_ p[_x{Y>?X,6\l?p}u hQ^澵]S]=핉,ANdNA{^S|ޅ:6/O?l?ن0\/c6GV#SϮbpjxM%} }PSLo:ٯ#]]EW('Bv%NSv.yvva,uzچ-M͗lȴ_r:+FL/Iy0/ߛϖՎ}{kb6~`/`T'Uu6~d(Ophr~w'O52'8c 6վZ}W6|D{Y+Sh?jjo_>Q3ɞzZӲ Im'{_H?-#h~)ޅYo{){}h~`:b:h?}4iGSiC&ژ=W]~,瑞=-$h?%}^{9^k-E;x\1SGgY?/m*zb riWw-?WN>ty&d[J~z)^qrYL>>h?$peL;n,E-NZzp7{EO*{&WA{ob}U&d?8{#KOy'V%SLdRft?ۜGq>aSr=绺ٳ}rj: `OM_^G\E<'v@~W%}o|{Mud{w>xX*{voؾ4;w/}О?Op?ԎP=~L/{v] w애}/U1Ia~}<[?`@ӺJnU2q|?hM ٧&#&ѳ#c1SNzz/=-'ٗ4{o/GA_K|oR{#v=Q_d_}S/<=_W<$Յȗߥ͢tԩ*}{V!3*J{oIqeML^b\ O}*`vJq[EݾmT RC=XUO륲}"d5~ɠ}b}vO_wS"8Z%h^Nq絈;|-K׻LS#9쫒9P5|Oհ=cG}iOuo&󐽘b0ғ_)vĝ{]wĢŸ%1qv|yQŽ h_KO0=Wer˾dBu~dŞ8x|틾*9ﯣ>^mϤ=7ʰ}"ԽA!O+{y;;pce/S{=n7~U٬^'3G}9BȐT]{L1Yoia>c/jbF:`|.@AwT fQ?@5ha_OVǔU1OOz>bz/G<}쉀x!_)>#c|7l/UɋcL1=`t=W|. JM!uݮýGl{Ď|'[:ʘ>P bz=W"|ڿi?u.M] }^Ȕ2r}s8.fbiZXx!հi/Z4rp}^[_DL>ө8ͯw4^pNkKN/gϾ_һr߹4V'ѥto1Y3c1QSvOĬS뮇z_G?S:l?wS 2ݡ{D%xO~-hLuU Njuj@2i7^='gR%l==m}źw7UAVqrwT+p(B i4{WT{Wr=~}qu#$\{m/Q]dje"TJ>US?Pxo?\w}>.K5f* ח[bxgBu'hgomb8>M:"cA:@W7'hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hvh hS֢IENDB`Atomes-GNU-1.1.14/data/pixmaps/convert.png000066400000000000000000000011631457665371200202560ustar00rootroot00000000000000PNG  IHDR;֕JbKGD pHYs  tIME  22VpIDAT(ύ;hSay$b"]ivRoi",(١.,B3(x:XuZ mǍކtr眏b*D/h}d rx8tHG4yn*t`TV&;2NT<Lee5 ԁ[BO.:f%T"0 C6l*k]ރ*MW˞HB)SYǶuD۰㑳'wZxT!ٙ$s/)2&|wD b)nVV|)M` i`X_}YO3; ZT+=3ndRef/ξn,.k1~=od?w׈7W穒 1BR5~ w`t`db87 𐔅3]{LJㄾPL؝J]ߋ<ίj5hBefu׽h„ ÷:IENDB`Atomes-GNU-1.1.14/data/pixmaps/dots/000077500000000000000000000000001457665371200170405ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/pixmaps/dots/dots-a.png000066400000000000000000000003641457665371200207400ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME ">UIDATH D_+1zYe@3)&RJ2݂-GLjٽ w @8o4d 5R;KUC:u( efr7/\h>T:8IENDB`Atomes-GNU-1.1.14/data/pixmaps/dots/dots-b.png000066400000000000000000000004261457665371200207400ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME %VIDATH픱0DYZm4ҨqFjrہ\Q" 3H) w*w?l Vz9gܝZ+Zk*!B;˲{'u[;"R|SG s{zC:<0E" 0ϳocoy}IENDB`Atomes-GNU-1.1.14/data/pixmaps/dots/dots-c.png000066400000000000000000000003631457665371200207410ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME *f>zjIDATHA ! E_TnpA2bRnEYH One,3̞ثa1FT;c ^9gB;q9O)QJAUZk??Z/ogte+}B31q3IENDB`Atomes-GNU-1.1.14/data/pixmaps/dots/dots-d.png000066400000000000000000000004041457665371200207360ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME lIDATH1 0Cv.1@cF B^fuc/, n5j!rΔR<# Ix)R$1MJI8d:u۶h uҾԋt㥇PĽTJxIENDB`Atomes-GNU-1.1.14/data/pixmaps/dots/dots-e.png000066400000000000000000000004231457665371200207400ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME qIDATH10C c`" Q:KB Re[!B?]wu=1FrLIJ,m" I8(03wQM &OXk18 P11T~Z9lW үYW6TaIENDB`Atomes-GNU-1.1.14/data/pixmaps/dots/dots-f.png000066400000000000000000000002361457665371200207430ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME 'e+IDATHc`` eY߿&4` ^ IENDB`Atomes-GNU-1.1.14/data/pixmaps/dots/dots-g.png000066400000000000000000000002301457665371200207360ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME *b%IDATH @#\h~T /.P6P0bIENDB`Atomes-GNU-1.1.14/data/pixmaps/dots/dots-h.png000066400000000000000000000002261457665371200207440ustar00rootroot00000000000000PNG  IHDR< =bKGD pHYs  tIME  eD#IDATH@c'߀$5 璚#IENDB`Atomes-GNU-1.1.14/data/pixmaps/eps.png000066400000000000000000000127201457665371200173660ustar00rootroot00000000000000PNG  IHDR22?gAMA a :iCCPPhotoshop ICC profileHwTTϽwz0)C 7Da`(34!EDA"""` `QQy3Vt彗g}k=g}ֺtX 4Jc `23B=ÀH>nL"7w+7tI؂dPĩق }F1(1E";cX| v[="ޚ%qQ-["LqEVaf"+IĦ"&BD)+Rn|nbң2ޜT@`d0l[zZ ?KF\[fFf_nM{H? }_z=YQmv|c34 )[W%I Ȱ316rX7(ݝ ⺱SӅ|zfšyq_0sxpєqyv\7GSa؟8"Q>j1>s@7|8ՉŹ,߳e%9-$H*P*@#`l=p0VHiA>@ vjP @h'@8 .:n``a!2D UH 2!y@PAB&*: :]B=h~L2 p"΃ p\ u6<?g! DCJiA^&2L#PEGQި(j5jU:jGnFQ3Oh2Z mC#щlt݈nC_BF`0FcDa1k0Vy f 3bXl `{ǰCq[3yq<\ww7Zx;| ŗ]8~ M!8Ʉ*B !HT'\b8 q$C'bHBvay=+2Mv&G&Ec[ [bDDĐ I* Zc0&8(&iYH~Ho(%46h0װu wKDŽ7EGGDDōFG7FϮX{xULQ̝:+sV^]*uՙXXf8t\DѸ@f=s6'~_ ˍ̮`Oq8圉D]SINII\7n5ewrm\J`ᔅԈ4\Z\) /ד>aQ1n3|?~c&2S@L uYY5YoóOHrrsNy};_-cZuuk/\?kÑ)*0-(/x)bSWr±^$E[nEmnfmOk%%%JY׾1ꛅ ˬir]+wZiYYGgʿs{?T'U߮qiݧo۾C*זԾ?=xΫ^P֡ 2mjTl,ixwxHȑ&JG˚faԱc7sŨZr}wN>8(mP{nLGRHgT)S]]m?x3g]8wn| ƺc\x'ߥ+=/_u=wvWO]c\n}Ϫ'l:o\:xviMoܺ~{;˾;y/Ylx~XHQc?:b=rf}Icda)iDӤ)ϩV<|~W_}oοDΌ\«ï-_w>~f~#zGPQc'O%wu cHRMz&u0`:pQ<bKGD pHYs^tIME A IDAThݚ}\ysٝw"/ šr! )JQ~D-0RmU, ??)Y lXx׎7^wv>y\Ϯg?m͑ܝ{93k2rww{gڽAD:nZVOMM>/Y˗/upp~`Klk-q!J3 yJ+R֢p%(Q2JbHZ/EBZ|8KMzM7DP`dd[o0 Tl4,Y:|q La2L""a9|0hٰaC{iÝVYRrJ%v؁Gu7~zN<ɡCk^%ɝ%BhF5ccc[tuum61I9mjJoo/[lرch#K5B!! cd2={u.\h 8o̧b͙8w"Boo/>}z^b\Ә[VPrbY_?ҌNnq8vKFX,fbbb^P(>2]3]]]KtK.?oکǚ"cΞ=۶׸.vB@oooBfF* \|>5ǵN" all7λA Jw}Nj󋮮Fzȃ>#7nL$5bHX\5&cϜ9C*O2p̔JLK??> Ƙпvvve^K)Hڟ( ʀ_iNfIENDB`Atomes-GNU-1.1.14/data/pixmaps/field/000077500000000000000000000000001457665371200171525ustar00rootroot00000000000000Atomes-GNU-1.1.14/data/pixmaps/field/an.png000066400000000000000000000306071457665371200202640ustar00rootroot00000000000000PNG  IHDR(bKGD pHYs  tIME@Za IDATxwxTU{BZ],.*k ,]+UQ׆ETX WAj=?fnq33so3S|WBD֚@CCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBCCBC@5'aRcw҂N'{#9IxIk9pl^R|_ٶh1VOT7q JeIcx 5z&!CCUxy4,& ;2$ H A! EEp3sq&&EkWLU'dH:xD^THИmY1s5)4!NXxtd @ƆG@Bv";UpUf9+nIB>N dÅ6T2:v|tٝ2S^κ1ZP#yEιbM_mWv^ڕS(Hɐ_*DR9%` =7 a-HhJ$!7PѧM_-+uד^$WJ$XRH 44B0Q'hĩDƉL:QPUUklMC|]ڞ,C]-*Eb6}"{pV\LÀ:5lW}LkpmRqitMNJMQ;7 PUt:]y}Xk? ZRjJWKh=D\Y+Q E[Wd\ɺ_ȶnegv7M Sm=ސʔr9…ZkBtLv,_Z/~ ]*\bM,u6"|Y^D¯hlhpvRB;^KaFb{Ae_={$-ʩzBBgC !+2P[VFVZ'صKkx=m?vS$ /4'b0Bk Rg Oj7)^c"=\E"@񱧼ĩcp,F9ԔVԹ4!S` HK$Ro MKd9=EYږ h;Ա'ߣ7z(8PyPR ϥ`|{f;;D۱Wc犷ݵzI#)cG ZzM.JH7mzٔ+چWM?InEXv猲o#Qׄ ;s!ÄH< d8z4߹>Q)h+ JcO:Ґٍ' Ɵs>@8S vBRB$%~=>^.5>.&r&68(/P/FRtÑӰ~IQ+#ط;] zߐ)ZM KPiMLi8K+H~AO ]\bkjW=&C8"/~\E KQף|-$(!bm-m)ؿh;Pi&Az" X{g@,mjl{qJ"!=?>~&į^|x:o9I<8D8L4I$TuBZ-$p s.:'z=Ӑr;THK B!L7^zm +QkxK7dՉtD]=ѯDdCİM:Æ˯U=H6dڗJ]xex%鋑zlH]{j GgJI:(X0_2[ڇ RnX0a*t@2tz#?ȒM4RJڋ+5Q|#Vl\{E@g2STĐ#u≜xIh$ % b]j{{gRDE]^$[$a|+#]+ ˰ibӷ1A7Ɓ9H'(LhZ"6vgQny<}5"HQ[ɊܻjooKQ֐`s0BQ<;w&ۚ+ޝ'V]{3܂"dÎ#+X4֪0PSg0.dV>E! / .w6}F~.?~y??谣GlWPj(4 ِ.sq'*/J}茞V)/HtK>%Ji ̖">_Hw&? }鄞4d&{# R|hAʔ [ٜpɿE`,35%E:i& !#_Tt2qs84)4!3j"nާò| n]H|-ޝnZPh A% ۉ;ϐ#< ۢ9o/8AnMNCBPU[j4ؔ)q2jxM MM4fW ݼ鍡CBl ^ZR%QF_ ?Tzk3_}1&4!~v~ l3ҩ#hB;<5AZR1 l!N<&׆KcpBw Ja2`ʖ*(~n; X0G8k4)4!ᩯo5Uemg2NV#_ݘ>ד`/ [?n0|dӿaƍϢweTm2NslHsZ),iNDwM\r]аwxkt+m?ő>76j nOԦϛax3͓ C[vo*^8w2]J聁NR1XeBNji~^Ğx0t5W=$I&JƍbSK8is^"nş>PBk.矗dc.~&*腱M :ҡ uG`2#!5\{~at Gg@y@v2wpGb4>'Ɛ;nߦvrV7.ι5*NÌwJQpa͇o.A-@NHcF!V%lO[51ɇ:" s' +郑Bd!D[>P_*RR Pnϋ4!߼t(H 'i䑨KVX]E Mp1Av$K/J l*!,DT5IJa'=瑕+iB|gFE4d@2~mp[S12\9唃PUW\)o|Dtn#|[2)- Br $MC!sNgGgݘH=;ZR y9bA}Q8Ob+ HvI >E%  ~I[awsq뗟St E.r*}vEA[s= *R>8Tn;oLfC HW d#'2B Dts>%)L PZdpI &0I±h-=Si .tXLH@X@;y)(*:.7;ѭ}RˈbĶ 90lhI ]_/ޚx.9+vңgKiܱ(ĿwCTr6#8`5.+>Í AO#KclG(I79 KB-MÕ> ͩT2l F%yW-[V;lE)FO^Ko4 VU[ROh1|.&M&iBt`-_.s}E;:LNز>(?.g oLxw =ڕt<0ҝ$Uh'+$1o*{ tz1ƻaH'a=yIᤇødbig}{#0ߖ'2Q_mO44 oF 6UiIz vk3SLK.?BQz)q10j(.]*IMEA-R4z[Go#].$%[?c6߮X/4!~!.ν{>1sl9NY8f<654WiAj5ԍdL>sx\~s RH.b:a7kcH 5aLw3:ћǘ{$&_䠐CO?]N4k~]E譙-v28j4lYK|-9HNkQ̸9_())ӧO /𐉶7رC}ݬX;3)SvXj73aNޜ"k JĚ1?pNµQL9LI Q)k@rY՚j'(#Cu jWCMļUDw[םɔKO?T{(ι{X$ݻW<|\~vmiiie?U6KySF E@34[mLJ=wZ˴Iu%MR<`9Nѱz [soMx˘p}VU>@O|I'56MÐf2yy37JxpV|kիWYf駟rs饗2~]yyx73gF)SpK-N:@kl-Ņ [ʤ"#)'PU¨^o>vK)a\\܌9׾s$vd'-'԰tuENz~m8묳4iFsG1o_^̛7?H$رc7ncǎEuk׮-⫯b˖-=> &h+M᮫5+)Ee`J ?1_5tOkaS9k!boNtƜ-ʼn$B~iHx =6rD/=.lEƍG}ŋٲe }ceȑ >!J%%%^˗f\.<ǏwoV?Pra10XYX qWo{%CUk6. 3ΔK!vUԉonlY,N-}*4/"D(fZ"2B%էh x^[|rV\ɖ-[p:ߟ={ҳgOڵ+f_ 8^***(++cϞ=ܹ;vP__Oqq1Ç裏㎣LUUe㯈wĚ;SZg ltf<SF P~`=ؔ|)7b]q=cJ 9p13b, ;y(fb"ͻ խzuXA<gΝbÆ lݺ2*++^jb*u$!  dggGQQ]t_~ߟ}>xRy1wIfl'yG {es?S$Bk`oGbpa!╛_1kFWd s(_.k6y$wrA*=s^0$ 2Nffo6ksb)k2Ɯ1I04mq?JP])jF>vG 'B{q쵘2$'] 6;G9b$lX Z{5kx~vY'ŭO%ohrhlEgIØ$gB1ID o'R:S؍\Lg],sdYoSxC`Ƶd*FHvy+p )B\Aev>ĸFJs&qoQ Tq́f$$!!a$o Eb(WIDAT LRC$T{[,ޘ'>+ө\Ż.\AKd's#=C<h4 /cĤ/Ü=%EF? ,+Q4Q~TKq7L<[ͯDכe,J <]&'=4-PKԽp&2e|C G #-zq:H)|`kC:4T%߅lr"0ge` 7?8(xϹ}XWnǒ7U"&sagX8f&Z-ej7Pd˷GqwMC] E/ [pS)1oJxЃ4؊\LNd Kf1GfmH$Uؽ۝%w[$ 0?Fk/Wsrsr4a Ofl$ܸ%؄i oɅdta膣pޚ[p Nu;G;'si؋ iE45U'c 5k8ޞhXr33>yoP& F.?~b;z ”G0V1pԿ`0qXm8{9,.},s:TODQBļ~{kH$x1#rssg}6 ~x<vY-|=҈ <ă (a>7 zH8{[]ɢhiE8 )W/ZZKff&vbĉCM wtј%M4n%+g&++;wܘ1cĒ%Kݻ7۶m;y =/}5o(n쩤dRQbTlP])eԐw{ UUYhxز![dBUHD䈐3`/:=% Nd :OT<@C@S)@)t/G xX.Z >1~x,Yž={M]9t)ef~ H{f.rjEܓJԟNϥ̩qθ1/"Į1WY`Ɣ3RGHD}($ 5cȤ'ρ`1O9ƭ ={2Jmm-zӧXr :1l|}"BŐ4K& 3REEBF–חgFT6x(i"O`6drA2fd46l Kv.:YoA 2(jKsF~~`%LY-.2*ּOw3ؐti@UbllČߟfmBT6K~a)u7aQzKXzDd&{1|W\2IRpmDL,Ā>? ϞI. VڿP,s5l3Sń"6|ɍV\?LO]HPKfdd}2VUJK,>g7+O%Ο qC٘٨V?{*m⟽ݑO1·8྽89=}g-2999x^v߿sNگ>U:|RA7 >V:v{Л2AHjEEP0k"vF$U;rEs̩{(nscޜDIl~}ö40Q!M.j7%w1w9uLY9lns6l;wdժUa,˿|_ @׮]ҥaչ0_Z8k|_jT*W)UIĬ# # S~h lRU`[Nx;$H!^x){6:dC6Z1rܟ2zn߉aO$#: h'U\5/&Ï '}[$Σ#@-(ϕ>}vpfJFA7K 3QIa| U$ &Guգ'|V+mB|_`OMH:#k1CLY0ڗ{@d=l@ufdDs);o>i&x<<ݠ0pB1ydbznr:Ayy*V% 3;љ|_gk8&c=[@zkIgAgt#[yչɡmSs{> IgY$$d$LNCIR=tIAfqEfРAnnk}}ĉqTUUüyZn&S:`:1?:YoF֛K}1gtŔ.k%{ێF@қ dɢkbȁp<$ 􆟬!zDY yyyҲeˤ[o'X,Fff&>=Fz`A:Έ$@#z1٥ nbE)5uc"* lZ*zYB$b5\R& qJcM{jBI."D +K\zǩb;wyUߒ&O ),$%G@#s [vqrtb#T%D(E  zΪ5PbJ5>U CZ}Rm@VV ?DBA5K=H T`f[xmٖ̒߫;_y &Q X!ˮG]1?7@"z5Hy3j<5& F(a7';B4N+B"j('H1xiCO"my9xIVkRɧ໒驕&J% !;;g_b'0aS^ID!!JB¹йsQ5oT+ŠUͥ1*E;U5b]]Yހ(a7"XOx%67U%[)ѥ FɥGn&!HWqIBCB wIENDB`Atomes-GNU-1.1.14/data/pixmaps/field/bd.png000066400000000000000000000107171457665371200202530ustar00rootroot00000000000000PNG  IHDRobKGD pHYs  tIME;p\IDATxyp]u]ަI^m^rؗKJVBi! .SC Cap I-mlKekv޻X f.2ϾW|~||A-ADAADADAADADAADADAADADAADADAADADAADADAADADAADADAADADAADADAADADA0Ң;[[K&0,if1y4%raԊeFO?Ɨ^f. &Wgz2'w.\v"p֟e~н* (b(ȘK.)ɠ+n6'q!|DؼvoHcP*I`0!¬P3C|Xnz&׋gC˾C`P"AB AFиaf( eǧ|2SG9 Es]~sKLĤJ (!T(_Ał!Rd\A2V,NFA8euowL*H]`D2J[)bK{&GwwCyFʛn"p؉kջVD=TCPft]%驓&)8߽btgPy7 7F+^]A~}op|d#'rG󕋾@c>Q|s4L"CTX aEP(Rb6ayA~;66e~=xtӊIy554 cxSر7(qkh72!*f})gPQ`"&i KNT)EHb?u\HUӳw;Co!;$#vZO,K"bџe®H`08f8ўrx\N o77/[Cn#G UH6GZBX,qm߉"]}خ&U@QAηᩕ+K%+1 u.D1ZXaadaR8f {Chl ,&aRYCEÉP,u̔]icWіEqhޗ'ҏG_AƧ- yG¦Mqw{)Xqj ;bA\yhÎS5q2ӎD2}c k%ߵk.={ncezᇩŠ""0DEkmp,dI;pMȡ9*cg&0IbPOͼ%_d1m[v9ӱRi@ô^NU5LWGR }>wbgك~OOj_pqF(r\5u>dL0HcR*1\_iW-@". 0#ts=TϨ3F}l:bi+;ۈ]uvrF.9}ϬYNJٳe-8mAVia_zL%ew֬ IA]!p(Tdl6K2-& 4F~ >q #۩o"flv)c:#X9d3V+P~0$rm4(PR\p).=Tz\Ĵ+UX:.O=-HU)X(z^^Dmkg|D{P$Q5IN3Er]V0(+_ɵ<Ĭa'cuQ*Ϫ`>eQvJbRX4+V=%_YFرiҐG b1lP^ST|O^%`ru?Q(0#sԠg,:a`WN"v%ʊcX1ec6:5'X$f,T6t͡z ޒM;8lh|?Kּz"hnrX@A҄qU0(Ԅ GQg轃PH0Q0Ic 'RX-G6&J`A0[1 ?*?{0s{7ɣ2PRUu\pE"d{{Qs̀$jxT*5M㐞7TkxbSe;g*SbcRf`S?aXp ?ϨVҼ5(xe21Lm#uۧ=К?f}Z]EWV';\V̊Lf~$Aߵ!}Da~Q_Y:zeu6"6>Z{h-]#!Q]Gn$(=t ^%Q}>gkqDQxCi\4:Ȏ "{cL;9k|+`( E.+6SM-|Wбh/㢽W!9h7X7uJD0cݛwviP86}̜6Xˍ憗Nvr^ܾSO (ws(7(}`x:jf‹kg2əh y[@ywxN/'8kD"`ϽA>g\q4f^AY J\`w^˶p(yxS\b߁X&."5x=/v\a?90s"FjmckeG1h>/d\^ wi6䊑/._,cRL+Z(E {w:!-AI, >}h§Wh"Y}:㾇Ϟ~XةX4paF{.Z;nP,[4n7No/<\|џ266o.8XL,G(>MK1>)¿k8v|QQLD^|hg.3`-a \ ^ۜ%V}V.؏`5D2Tj|7zzSnW=?'ߏ0As$011(OPa)C7*xW20O(D>7c2YX-Ҍf1`i[ +|?_ c7ۅiг$A3f}3=˄!{9"BqRP^4]}TvȆuA'_|!r g-\(M[V쳬}5vnق՟/eb4_1 s|!J.c۶mV54SN裏ƆYD~  " "  " "  " "  " "  " "  " "  " "  " "  " "  " "  " "  " "  " " &IENDB`Atomes-GNU-1.1.14/data/pixmaps/field/di.png000066400000000000000000000245631457665371200202660ustar00rootroot00000000000000PNG  IHDRtU9bKGD pHYs  tIME;$1C!0 IDATxwUƿsι}P`  X5XbIPcohT/ [ϼܻ5tQ^f͌RP(n  !=u0t"pAW}I~$*>3FfK1MuvoEt Mp7?}iJş/gO=[}JJÇW?݆-6D+ J%*>ڈⰢӇwrI < U*`x|x<5V>$FYtm'dЌdz NS Bqxrkcqrݵx˹d6+w)rɋ^AThNkZڋMGre'_^ @C(~T6_1XZW~*)I1|p\ :=ݼrCQ%u-d3a@=JJYqHrKbJJyf:+>ߞSot>ȫ 7̠`W#nG4>8[ї Lοc9o~=5]uNo q|K7l {,fFKd(ﬣ~:r%uVcwt/­1 ''U_%: C(XnFC0j#;=,,tk k7ZP Z;^ǝ5}7=R~iCBB!BhÙBiAq]"s_F,EmK_n'bAm6.;Bvd(B,6tG,,V8,Vsfmg^Bŷܲ~s"i f!h:Bb(Q8x iihb)ø0t$fȇ`ChMqU!c۲et֟Cϗl(HW+ {{-1@8BH)0h%5ͪm/cŁk|EaU^@|b9۩ rRb0 ၵnA8(jR5t6\ޙ0QvֶyTtXu] F" tAm]->|YsoBPJ cJFon&e-,ˑ?~ٜ;D^Zݽw>L"ԉ ÓsD"t=J*Um~ )%%%xF٭>P|,d``<1/^ñ چ "K3ÂL24ao 9^PVMGV4k;Un6[/ #~SN_^~ģ1/F˞|Dv 3؍4Hi"Э^U3E6~cg<N#5,#DKi)q@ ~BE^3m~ETH!FKJ@$&`KINtf&YĦ%} w{}Z.W|U͚6uu`q&'- $!ĤFBTB $ȇq8>|6VUWFG`"@RO" _JtA&'2GBmh(+rCC|%a4 E^!FbT{h d КZ0;Ь HCA\21ӨMrx'.Lv(\N.o~Kgǎ=rk+ճ?# F!bmt Nhk.$4cRG$;IG"uhOϹƽ1' ri4m#  ІI%Ajq:?B&9hz !%ih 0^3g& '&M"3zvnZ ~$%pD*qO,,&zw0iZombTzC+KYfbJuO]$G[HqHwKfC,4Îm|݊ B^#_Uju!5D.?* M øѣTA Nni6vtJ~aZ9ğ(|ڮܔC(XTՊMyiq.d(bjI YihlZRq"3+bǰR\Z1ZlpBG3XP%8|aY֑׶[[j(A(R%81vi1t{#[[޸L[Q]5\#_{5߿?yyy 6#G2rb_q _JۻqH6~锖}v6ơoIEEa#ppqlj;C\RTVV2o< n ##ӧO?Tg軂IId 6hHKK3f .eee_ɓ'3uTYXXOQWW'9j( os1{LPB 0pCcGXι\.:,tR'i'N /{Zɓy !!6JO)B b7lN!p"߶m~I&wyGlڴc#Ƚپ};gѢE裏fSNGSP5brs# aADt|N:IXB\qr-|ɲjwaܸq\x]w>ZĮÃ$"lS9m6sK.:>`DuVʄ Çl٢ZĮ\tM~픕b "n@#Ǫ$Y"ime}ᮻ:M7ݤjZ4h]HHNYDWIZs=,X}NK|:#kj8tn3'x"vmDj~~^Kz 7W mn,Y_|b "J2Apo bʔ)bر̟?_ոb  &7מW'Z^%\믿e*{,x1T:M ۷=s_iiiaŪۤ"g}u8#lWMLLwЄ XfužDҀ|:{"k:(/.s ;uCMJMF~h!YN[[nvB!o߮}+ݎ[[FQ_T6''Gl6T+co?x %NL сI'&b+ɰcDFQZZj^o#Ď֊ >b$`+ia_qs'/׮ݔ4jjjT+ ?)$ldV򰐃A?,B r0 X`j<8. M[[yž2u}0tbpDC{F®Jtbڭ6j` ?R_['{ABРj^lkruB :ntl()mZ]8k]zV,_-L$ 1BQήl}P^:Z[s}dcN<:ƶWd]KۛeG'Oˍuw A{-wz8x,Ģѓe לC Y xy3(n]Jbqhu0=QR=Mh8xp`]!*1S=N,]˦XV;y2_4 {l2u$g_:(]`0jU5sA}% а#hk|o"֘tBF,W<>ȼOsv6l 6iKT*)ձ#p*o`u$U=D8#ARz`ܴi1l0};_/KZ cŚ=W4UhFWW_lB ׽Xt& {y[ tmAN?r=r6o].\k*A(B^9xHqN]7ľ3X5ĴT4 tK؇2@7fw3]\lX\IXtY@hH3 ; vh߲Gr3IMNا˓fꫯVBwX̳K~MщEI-FE!~-%d&-&aO5:KT"5C eu4$кN5玉뜧rٯ_?>sƏ{A\IDAT{Ír x4bڝ5-'ah[ *ZMđ8KT:3f#D&f`W#rJ~sf;U`9sLjjjnW57x{ $ Zz t"i,--'YXY+jwaGF#tB7s2&k#ՀXK=q{H͚5K_e˖طX'k}h8zGAIFBĎM'+ ϿD}=<"{\.tG~p8ٳg+A( z_fUT@6lC>OSO#|s濵L$1|h".\( P584=q-eXw ҭN;Og*:(mA;nᷯ^Frj QgL; @Bq o8R1ב:y\"|H:1i ENI/Ng$)a(}ASG ?(LRH:0i"D%!b#g~sR(A7H4n/K$:rQ:tc9 HUv4coiW]%t5VC#m_m($5x-SHa@24 N91T7JW_ySv4'C^AҊI!JPwaԱ*a(AxyzrS%;vÍ+rFT?.$-%D\ʑR1ښm?m&Mcz7]" H)~lvʜ۩~-c!&GDʑR6aڵn\XHG'JT#ښ[YTTI|j* Z?oϸVT;&HՔȥOoIRlCq餎س/WP[A?\2NJwّ'Ďo9R~o-?4.Itd;zNi͎yws9gDbo)ShA[{x}ֻVA0ii HAFf7wU8.Lj:]daN:Qٝ $f'tZVIqMAW]}TE %HU=&Xבz-CDw& F e|Z[=Td.~QN"% %CˑG'&H}f0R#E!(GG/u:ʫXnj#]'/lݒVġH-xtaD'ֈBcNRC#a Q⣁ K+{Uhv΄iĝ?G>y/+sbX/щ$6H9#]%; Y)Zs'G%ׅF,Aġal 1oFu׍,Ofm52  0i^ȿȽDмi;*T+A:v.f1sz$=>\QV .W{B֥G>ÎFIq*d%CO[y rw/|WJyi*\%CM&ӄxzy,Vq葜7y!/!%]LJIpTuc /Uyc&]H1"!0JΚ@Tļ\ |ض'"7'%4荼 n >M|^/Wϓu^I}"I+t`?3`( E-4(&@' T8>x(BD`bw7fdoLZ1#AjU*B474G9Z'I<#k+:" Q nm m.|M>:br1zSƝ p@" ΐ펜 ى'dfe)A(AMӸY' $P}Uh7ZЍ%TW! "h2wϠ(+X$Qǜ)]dD ,\&$D]J(9Y2`>ʊL; _NdŊ9ZXNS_e6W}n#`Ű9HPC,v+$ p>PC U.͂H klڹW\п%bBUPBD(bBR,a"Z2L=C,tޘ |A]+ -&v@QVY[ႚz_PM]" tf cf{Y+ N/TS_Mn]6Ch/X5&[49 T_m_k Ε[ "8/ؔ)|-&{x@Mc idQV[[`(dEjbY(y'ە/0`I*7'$K$/plǮ#5^B_k|Q?3< A_.ܹ?08?|cҽ{x222xǙ8q1:0~-'3{!o wl-g26W^MUUSN=:iBjj*3gΔA}AY8뮷g óbJlRSX?(**j}[5ޘk >B%* P T)_8LiS$p\ٳйs555ƈx⍯DFQ$WWk4ن TRW:8ͩDƈb\l1 C/⁩7IܢD"''(f@+*w{(bB x U]X2X}m6^͑H!&&2ctt _p d,|DRbB]HIJJD]t!S%`^63Cۤ/8Ver3FHG붊SSOLNo|U)bIHA^ll!:/(.w/q!_AOL,%(>>ي3BJJ!:/w[zQȏ}Aetκq#K=~MFm{6S\!pΩ9)-Ո7_X%aO}Unrչ+Ș?lW씏!..f=K7}fUa )fZ {F\'h>YQ| gl1,yDxKex7︱FF{Yމ.#' {\o]:%'xF0(_z'15~gb?gllmLLLliMaaah|.~s,bLDE!+VzFsҐem[CbYo`3Ks0f@ xw•\kQ꼧ZBRx 歹S7=3..=D>]}w?fWO,Q]09PN)cHJDe;5|5h:ccF ኎m = w;sɫ`T4#ۇI\\\,Y(J6`ΘPQ v)ܼA _mLmoe [DK遙Nؐe s_:_[?p״5%%Ennn + ۫ g Oֳ@0 Ɏld7F~efn>XC :4KkLܛX8灞GRJpH"ǷaޙSW+&kuwG!o% e0&}|7*Uh$D‚TJ!D4Oω )@n%DN悐ۉr2SRai Kd25 f&}Nc p]"i^R1PJ9gz!#G0 -%^Z鴠ძ-l.>c(;2?l&)&l$pf+{Bȭ3_U5=:* ֿLxGLt_ nT*( D\vN=Vښodj3Bl.A `p^ uݻ&d>_D4bC1G\//?k/L&Ð83S^F ɿ z_0jweΝ :狖8w{޽ . b͚5޽WN;4uqqq-#q?H/\6߀`t<(J.Յk+e6BTo%ZS/$ŢbD`܇ +>zRdkBnV\=>Dz_Cلko |*]V>}:3f{=⾨q9[n}ǎ;8sqqq*%{$&&6c.߬NΜ~ک=].n?һh1X190٢M$Im5Z[-]_*َ浵lu¾s`&; PI"B$|9.<]_OFF/nwYf1w\nviܸq"77;wJ~ kx׏Zj7o˗/ݺu{iW,n>\3 bD6ّLf$I!Z-C y+m[/sǶv]X~:Cdd$=rb7!6<\Ri̚5K̙3oY0l0OnndXhH$I:v]cq뭷6i3""Z(CM]HW \J'^ؾ+ͷ=;=]l'c&;GRJ q s;(dY桇͛ǃ>ӛrrrի߿?%%%Ӿmn)AD8"趂zI+ϑx j$59k7^oVꫯ/_΢E曅iM/4l  ӾiF-g~%ֿ@-ߌ,@u.AOYx5G}˭vL6fg"N='or}MxHQF2yDe%D:~: lr9H+VO>ooR5yyyDDD̥gsJ M/mef;o־3Y"X[H[~\2#dTu }y"k˖6Aox |T~%@¤K)5jl2~ö}dee~zqt vDp5)%8gHMN>Μ)ěçtUNmsW蓈YgF[n5UU̗.z_@B}A5E$@^<~O^|EfΜ_:u*Nn- +S|||caH8^_5 -ݡ˥R@ Zȇ, ?ĎD42H Bwp֧ P(t}W9$/keoaZߝ8qtM7quXaȑ /@~~> bʕdffңG6n?_"ZDh|c ĝ7^)?` O|Ӄ3>Ï@fD'dP艙>u^?uزnqKZM jt_?犹Zt͞=[ի7pCM4Iڴi/{&!!gy 6p}evFhKՅx'Kt]#Jo_C,ШC$\dE‰L )胅3<3:QVXxL s ˇ_/Mȅ'H1o<֮]{XԵkWnRRRbڴiR>}kl9ҾQ"ŵ5F"y%鱛DF,KR})ҋ@V/ab0#yz ~=I *Uh6w?1p}&LOST[ -#F7\y/p奤G"HSV/Lȥ[gGkpáO'^KB< ȘQ5/&X3,{ [ Ca̙deebŊ6ploRGI\Y"iޛ +7 2f}р:6$N &"^iWe߯{iiil۶~ɱQXX(Ǝ[wTD7nx0`('3SpT*?_Mf:B& >+Ȁ x,m"z6h/, zt"#BdꋉذEL.뾧kѣ1c]w]M-%8#8=gt;$U+V76$˥'V$\x>_KOL ߣ?#M#j*^~u?_3~UHн{6Tp4 /o>v.%˾ե}˭v$\("4L$XL':b9s#Mp?_p.ZTTT響%Bs;67̘!=خO:~ RJ4rk)*eh`"N.dD"D*!^=5$[8GLVmLLL'B||<>gAwDv.\tWw@  %zˋ';ZDN[h@N b盧ș|&?%Fوea S_ Gkv;6yۤKzZ[ğ>[z%gd[ ]J~)Bv`L˙|cE u5egQ &CZDzܲ%2D8;2L&WM*=I3ou(l8 [YڢyP <*fpr|ǭJTi$iQZT&%I3/Z%jB$v}Ȃ0#aҗR\E.FzE_I2˳Vl6fgg֦:bQKbђ}p4ZB" Q}6#׆{)L:1fjv !رc hTiX"t|4U| 6 v:@{7vG8p[M@)S0z6MG߿hz5jT tP'˿ 8S6lh5 /2#1bјkxK/Ĉ#/5j$頟y.#*ԉ oWL Ċ {CPZ?38?yZǍ'럆3gC {w_GO0x{?C~G? T_F裏24U7o4mڴ]bs~[zܓ}ɇޟW]u!.kΝ;kxtUcyB?[{!3 "2E8N:yƌsL 7ȑ#ퟆdӁ}x 7z:ln?ji/5e&#pשc{f AOm ߗR.K-^ͷpuc>uѨ@TFE oe|/#'М"h47WHdb IO ?كNf_wɓ`$~^ WCE 9 b<j*4]vz=>ri7j:n7MKd,\oRuCPF5[iaD q5:jШ3_{v7ph$%%Q]];l"yj +LB޺d.ƒ;,mD> A3ДRD())1z> Nϟ@|X=ڌPơMy/>R2I,Bd,"H2\fFy3m Aє|J#F]-[ī'1 n4% Լyg=x1E>W$73Xַ/w&Ry ?є|&[)3SX}}ԥP]]_D~fW\}II5Sp͔)FCit|&!**Bњ6&*QX:;8LTmS4z6gm!Y[W V5necҾо">}t *x (Θ#MVk1摖 KOD7Vw^"yEk 3 lYAhZ7=Ϣ 24C/:~aAAa#W4iOEN92lB ZjMf #!.^~%| uy1ڜʶȂI!bJbU{ Ud-GH {7'vB79"ՉBZX |AOו'9*%1t`+%hVP۴o7<*KT! /l}U=%*ryُoƌF{7z?|8L(8X6uECe߸쒋Y BcҾYDHJJMTEUMN>=IEG^aï]ppñzC\F&=bXA*~I⤮,wz]GB"aC\ b޳O4v8qX)AVSK߱[~}5]sxxX醪oh3d=B\A]W̜ogW EIFFF7WW`_X<c,c18oH*|kt & MqqR^ :9oҨj<{'k$l=TiiWTPRE2GX(6&_nƋ/> t4oԬrQPPЪYqe݅l!$ŌNԅ1ٍ9<~%-AVlV'qj/0ǝi|fxd~pocyC&!$$$Y14HAwHi\i穙$ Z!BzjDg=37#?)%7`mBkA#4J Yk~r.|ը~ZA y=bKa}@rb<6-X'rrcDtPFFEEQZZrG +EWWbk^&$!A\,\0/>OUV"YƈhDHMM|xAy)婥-Obmzݣ Wj&B5Rӑ7wX-r*XK4 : bW_M(ɇgPGLV5̊»sgkk'lIXZ-(Y Zs_cqX 9}iTVVʹflal-~FUяs.B vL%H/`X,B9t8H hDCO% c璱m'r_i.1'DKGpC?_AB` [1~:qqq&IWi۶ sNACƌ}LJYDGk`dvs^˂ {F_XJQ-VpA*$3 [ #4\ ɄM C‘[FqIɞN똟@zB!\ľ6Lhrd1~nAPvito_uRePC>bTƂ?ѓ7eEsʫFM4Ouq~KrΪTR_f&+/BP=eݚX${I*SATdAGfD+M~UP$1"tM21A\F !ɽ@Z,l|1zz9穊A|Å'C,(edmǓ̌qwsII*>)^ø~a |͒WnI=8궞X%eAis?0.Ofu#H* ]Al|%&3}G{}!?eOu2"OY!aA(ne*̀G{ zoƢ~WA64sC]IT7IX`H}Y:'.ӈ?qlUUkH({gڞ*A-ĨQRSً |.g,yj>iWL$3NG+UePpQSxHŅs$C\qi$=*Ѕk\9T1\0,X <|LB?df"Z^߳z_v1#!(.(99x<㉎$IR pQS(v/# aG`@Be8Km$6/㛷ͮuDrȑtOUjlqW老8qؗNNtʼn96.q_p2%Eܻ>մAOKDG 4ηa[oǯ^9pXN$-!l+Mq3f*Yw⚩b.[.f~~!:84ġ%xWV}U-}!a@B$Yg@'!QG!sg8n5f~r4ti@KH5)DPl8niyEh+<,9)1t+-@9ӿ 'fWP:zT|=fI. hE&aFL$5Nc4@ SK821h (S o^31 ^&qܣwFq}Q&kh0bÑPYt _vVyOHӔbb V9Iɞ-ᒳMf3#gϒnY5p 7(#u8Pp ~" q UYa!_IE6ULjUioR(.v7 b`2l?g_`^} Y/Z1L6M >\,_F=ˊv./UMDălcs7m-c+]O}aAE+N?LyV~OR kc8geD_7;+MٷG򎹋ݸ(Y(td7׿:’ L~z6nH.>zw>[A021wf Aewzb!';w%MQח{B/x1l'_{O__B C!' ,-.41jibchxu߅7)&#eE|l=E<0텤cRh߮]#3 Rp˱Bd$ uuU㱕dbX~6Ne(ڵnrA>3F# 'N~1EtroQj{WyLEhaytm>(ޙ8z1Ԙw<;dkK5^Ƥ }-9{^80}x32,(nA1^_wE]-2ģ+9jp`+yg_ O̞>Y?7deh "[ZO٪* 74k&> 9x˽9%GA_[~\' V(K.^NcߜA'cT8xazO}#G^i R&69{p[@Ƣ =ݵPvl2m6-[FVV;wO>tMEQe|+<:RhXܦFz?$IBqpVd.Q 60Y }+F%b?!E$Ӣ_t Ą57E7#nՅ`Maݹw`O΋!55Us=6O>.٧ n֬YґCČ(y;[AV#ngly{i`ҥ-z]:v|rvZ`QKu.k5@YyŨo~:!;h͡HQ8]݉~|wCnn޽;YYYCߒO>~n:I+6loOk׊Gb`97 䶗WBgcp`?@+>' Zso!&)xd u.@°T JQnhOh &M"++6oK/$EFCk׎9sH}z׳xVtYY٨QF1r@ߛn$w{fIPpE rUSD=%؊SRɵJ{w~]8~zXډ疤2}i_Ұx uVUVO'=nvo`ߋ6ml6gUF /F`h{Q UY6)j1L赱қvF)فہ)5anCo{3//)֊_ !Cwy'"رcbƍ,Yg]{6 He!$[^l;9{5|ƣDGEOOS5/n[ ?b#8U.!󖮫!##GZUV\.2~ÿAƍtC$)ͯ۝ &x]N%'pl㗆4)ΜjXX/|J wU>Zs n֢1@ i d^1XV)>鷿;EaС_~Lg%ix]~-@QpĚyӥC:y-7@8+y5jKMqB\{bէ6缯3g 6G,]AÆ=__ Y^Ie^}ZZgOY~gELٸ2qޛb_>yyyնG=s e?SNegWbgn`爱saj`^Iuv-︩NaTx4m T]X*.8}~Pkd2aY|yȨQt+V"##CvNÇӯ_? v7[7-`bc碯?9[I9{F "o)5Os?9zS8Z'8wbL>o}ODDDom6|sGuumo|}ͨΛ?3 Zsb(O[8+2d).K_nS+no&8q^zubɓ̘1C~TWWӱcGƎ{N7.,,l%K^ H5qR,[$ہ~F1)eYp^U9Q+ЬY3믿&>>TNrr21?)**kaŊm6lԓO>)~c ~~?됕љt#n*ŝñcߴiߺAA7On=A ʑd-ûXG eŃsT6W+6yҤI# 2d/9>L^ 6i ܣdC.ED([6'"ğ1|sʬ%lHÕLVVx駹[~^HH!,iSӱSW8KvmڥncƌYfX,f̘#2w6APUgŸ"hfsvpnG3|2̘1?̔)Sp8眱6XKh*# {6`rUPx\\ Ihxidb6v;훶{^N_e_~$$$Ю]nf 22)S%KѣG; ٧h+ȄG(8* ]wzu+uInDRR_}?uT`;=,,l~߄ #A$,GtPUcɔ)SDyy9s, P O{N?LEC`Æ b>l0/ٿ?{nIJʥAPP/1b ÖڴiSi͚5߿]7χ{PH*j|[oemݺcǎG:w̠AѣXp(((*bPZ֭[E֭s=--M̝;˗STTD&MhժJ9#E…| rT U1D.] k-ODdu|+f ө,5f&M\/eϺu!gQG.B!FPp1p{k\}jS-Egƍcǎ]p5GِI%-y,"5O hZĶC<9ঌnbTTT$5aÆѼy jʋ>1x(4#Od  U384xv B0̘1セH=\HhnhE&P鿍}km0@dB?!yNU.ׯW.%yy"o C&?ˌD' 43}>zRd:O'ȌPt$ƒH#ӦtԵ۷~z",ҥZi0 _{߈n'Ar#CzѷdmLB`PTpaPj$IEZ3-}/0CB w nۓe0Kh@N{0Wصc*bp̚5KK(rQp4O$d@khm\9fZWI"#._@84U Scq!23J Ϩ&,@+1vGsԖm޽{_,^{UJ2re53 !^mwxϊR֭[|+mZu,SS;Vժ( Vx`{RsPݤ/+Vn9,tV-YK'GG`:]ӂbPk>7W 8|.o۔/UZ&oRXkE{y5bYơl1~x&MDN.Uºi^p ? B<HᗟY ^Q-0̃;`@¹]Cx 2wNCm(€`ӦM%V(Ed# z7]sJs8L1֗F6_QB!^LHL!P4 CnqoBn\-Op0,@XB8p 5 dO,Ao9)yP_ Rls lA/v0Ġ93 3b ,I@KÌ軶E# ݃mZBEǭRt::tx饗hݺm Y">9D_ ^_))Q9 qk? fruZI2Bݰ!ucwӺͿW).( GA^Iw*ʄ[kƹ. 8ZUɚ|:Ynz䑫rMU 7|ݻ/drmܹ"}TZX$ch{ݑLՖ&p(Ijx޳Z(qbgi[(4ܥRxa;YYP֥6 _<zWİi&q뭷W_^T|(**[?$^U(;YA!^𐊋VZ`nfPDNɔT9C$!{M}ԷhS)-Qh11uJP<;Rз"ȏSГI~j-ɓ'իWsNl6w_ң%-h1\ԭ[ؗG1rp 5{& =}S珌&&$M }w.J]vfeM#upj%T18΄W|XvF@C@kz6SVhpxzBqޟȚ66-@=.MdĽ0"'14YGstD!РC׷ RFWmX)Eg'F2zb:vVkRGOO ?u^/GpZsdLLx&M4ja֬Y_g;|bn4:VNCt/ވrlkwRbqP$ljyMss^RwĚqO,NJſ} RFN%Mf}Z:$pD]]áCDϞ=y79r9@({}}]Z4Ģ% . Hݴˮ,𐋇t pˌ׸sĈZ` ss"/B+.#6$,8w?;RiamQ!^~yDD]ç~*֬Y~78PzAB ɗ; ңRP )˭$EifL\:;^xV%'t:!Տû+۩D-2obs# SEQ{Ζesvؖ.)k|kocTo:DE-cdH?c&DbJstr& hFHayb3R_˝7TQ[ŰuVjҥ9$ykd}ڶĽz#iri9R?/{uA(—Ӧo֗-Q׹#y^"=]M%Q`Xԩ0`Y7sCom!49c\bv Ji<\Hz2~D Ғ#' ah{_)E6nG6-b:ˬ( sYVњhoKw{z?;^;6+"qct8D曋hzxv;XaO#z3Uj'<ш؏+{/S2jkbXtxٰaY͏ZRf٫ڟ) Z( #2qRQ$ xE)$o(~d 'LMH~t~a ɽ+3f!N-T+q9Đ#ƌs=?o 55TwU> 8=#̙*{UWV2ĆT'~C1:<.8oF&'9{a)=Wp',Ņk׿cl> ]@0hoRWU.K4d!fOʠ\Ool cX:ht!Dt ım ǬC5Ii=Lf(bU+q)İeѥK?5\C=ch#~_ ZcǞ[gIlimcԧILDzisM"[a/s|Mz*-EtTrwa}~Ǎ5bHII=z`޼y}z*f|uMp Ah͡2ѭჂSXpYJpU(==7̤G^چEKWW?چ> FՏGxeZ `qմ`?#:2\Ņ{~|x+mBlKah. }P MnГPrwu!NKy3Xhv޴, ɬ}P<:0iCGq IPO}rkn* (I&K{?u_f$ ! OdJK:+\U8N`Ko:A PGz7}-.;)#ppHQ`#$N)ڕl&3s}R*%//Onݚ?[n?2G?`l &;® qW^|lS?Zޔb+P }`,ZsA͂h]&;MPlCkT#s6<;xw`JRp lOGf~OfEdM_@ݨlkXJkܢLlh\©OԨ*s8xa_0E\{&2; x9r>F)uD &,۴WLYMP A B jf{opVQzk.ؒ~Ttjk@luxlWxc k. &Q:N2'凭$"cϛb!lr<[ K.cƌ!55( p+ņ^L-j.~`zIJݔ.]]˒8sw5TTT%>;1G=1tÙ:'QIFl'8y%laoYѣGKffJbM)>.dlհo {a e'K#^4=,,tl/.߮YLzo rHk%BOB UV59ӏJ#b 0@v6m$ɲ̬k>0_Mt{w),.{؈Tkp +c.`soŐu%kM.c۹хnsN}0{lkm6B#zcyǣ$|hWGX(l[dB 7&мZކ>]M/Q͏%bta5-+aU10ah޼9qͯamBКC L{?L8ˋk J3yŧ{'I19U)9@_a0M{j(#b KyO:eU69J =$??'杇Δ Jc\M[^x+Wcl> ]@0 l7z)9PWe64)ު5Ex<f,J> cduG7qu2R}uh H-B8qY 7 ӿG7? Y$({YN`C OZW۱*8]`2ƇoS, $Ʌ$:%nK< ł]LzuZ`Wl<7Slk!ƨu2MF$YFg2Hl2 ;N?Kfb k?Yz<Q.nW(JOi}m[׹o).FG1{pmfָ~,*:NDxX%Ӟ=O #kHZVad&dI":$YgB6mgr8ïN1"ZBq1F ^l=o"鐴Fd WU.GWQ_K^oQݢ+{pFM$Ъ)>OCH IHLaqI8nr"kAŽsW^wmp;yYFB0H&Im=W : u#.Kl\ٸ,Y8Oa/90vzUwWc o/ IcAqAk]U0/ēc2v;Oz];]@lM׻MrYJqUdHN+uj?M+Uh5"iۉYYi.;'BX&1U{A( 8S3u?u{Se޶]{|Ȟl4@dǁVJ5a4z\ *v+dY&&&N]? YYbϾC8\nc6$ձTT.TT‡"іzIENDB`Atomes-GNU-1.1.14/data/pixmaps/gr.png000066400000000000000000000010361457665371200172050ustar00rootroot00000000000000PNG  IHDRatEXtSoftwarewww.inkscape.org<IDAT8OkQoK&#UdjT)(J~j?,F.YBەC pQLu6Ĥls{UZMJD ZkR(Fއe((I-ڹ}߿jWZc6"RbDpfb`'BO⓫ʎ#ErⶶqS:@5o3q7^$0ldjNnMͮ&|:E@DIn0c3`̙s}ԌL+$QE0{]I)h;ܝ3O8VQ6l桸XjsܚT`1GWŵ /K֪Nب$ EI |}^!"v%{Ta٥D2W }.aZ{]vX9,XA~d2YYyƹݪ“d?0 rٌĖ RJ%lEuaמ(5niy%K1Roȼߏa oסőKIENDB`Atomes-GNU-1.1.14/data/pixmaps/jpg.png000066400000000000000000000066021457665371200173610ustar00rootroot00000000000000PNG  IHDR22?bKGD pHYs  tIME A IDAThŚm\Wy/I;!/$@7qBR$i((jP* TU*B[$:/DQh;zw۽~83kRtwܙ{??yfy۷O !$I4|!:62L;pkCa-I|ahh(oT#ιӤf|c{kZ{#;v`5 +뾵4M1Ɛ)i`1:<{ں2Q0Ƭ^[hH0 e.yW~|뭷/_|ͧ|$&BtM*pW_uƯFFq-3J1!tZyZF #o' C9 SSSgd2Ow}Ƴo1]!%H+187B *IM`Kќ`1t__sM7o3??SSS'O:xP]wU Ε@8!Ho)ImR%KjR @kD3"@){H1RU)(5c6&Iګ]):Yy)K,|ßů wm;{HL+o opDaĮ6\ k-82&^C+͢\5VHM (H'Otj&/:x! _97q޿e6]Վ3J) ?ۆGFFu?xg3x-_G$Xg9M\Vqv,bq[RΗ^zI-[d!=CJMX Hֺv|h$͖y(b~~~Ԗe@ڣ;0'?wp1Εd؋}!>$Mli&M,ݙt;Eu_k]V.Q(PE>#D5ſ=Cj(:ן[!AإX}-褷皪 $>ѬY['|r6DJX9:uL#\BgZZb9؄?Z&dăqx冭;wovMձ|1Va՛RJ@_c:ÿ_޿s=8+*[w˕׊zp89Rl6$Fztbsٱm۶Bȅ6NuIN@{)+pk< \"y-T*QTVː^S8C"۶mWHgzn4=z|>Y@' 5(JUuCP;j LquZӛk_7|M6\-W>=()l aJ0>  =撃HaPhW75` `6XP{((Y|P/D'օZBy)!`XaFLCb!,PK}"a 8>:DW]24 !axoLڃ@7KP`a*5MsVHklaDB&+:3e85c&P5R$uB\j`4#(7`=u9sGWr<he@ ('0SRPກQ C}#8s_n(ԺuTkd %h[rYO!'= @WF0l`!i a(}J BOfvQKt{g4gd@37sۮGyYTA=52p%0Hgj@ j s v UK_L/CR\?f1gVZ{Uf6DT=,s/z_:kI sEuH 8~zv9aDsi6uPBԼ?%K֭^k`*y 4d!s0[. j;Ɓ3n8w2`o/#rvYvկjl\zG)Q{'ar]Mkw15&58t2+Yl,,/K~;ӊ4upK*_^'M2З#8}'fR/#cl:V ˎ3;G&g8z߯}~_w?|K>/;|} |߾1_ }WB)~W?^UKrjZ}kGZhjy/祑5œBwI4 ||V?!, { c[ɯs[7G/]~}SOuc?}IcZ}~= |#zwW>PߧibJ,~n}릢~'m~E l"!FἏ+,㉍1.GN,bnlNXr{Kcb/W 8/##~Z^~`ya}.1KKtⅅ m/@xbB"ac @v4XzL9N2JEƜR%9tϴ^K|TM٩MNʹP?-wjhTr)Vz2jZ[+j/[cǝ6 noC)|ʩ~Kt-nvǯ}F7keJ/lW[D匌Hx#kdV|9GeN9YdQrvP`>!~9O\/o95o(k[,^>mDrV-$v͟[ntPHǥSzݥt|&{12z.w̙ΦW؅B>M(5AbTFc/e]<+g2fkm&!N)T%y v p&7Ӣ^,+xZ~fvkޛ<_Hr+IgGqڎct%8O նn&fQ|&H 4mP@ ?c Q['و-u9oj6n9/]uB!˟0ڙM:l\BDdG~Ӥ+c-Yi nH6Vjm3kᒓeZB@jGQ޹̲CrU3s&%8(įٍ+ld*툾LpT a_\B C$^az7J^Fw]tB I4SqϥӆT˗Xy` [j _IB:Qԃn,yAJο¤^gW xCܷCb|^poT01NzTzeVgU@yiTPHOȳp*,b F, ji`T $6oEzIwEPo[zG]0,Q7Bd8hRIW/PT O;,̃Fn_!JPC"BM{Al@d`"Iuj^<9^. 4. V"m#IBؔ*V̹uQj'Hӥ  n$qr%d\`TOp*'s)n 7$R[@ǡ@ʵ%oD@*5DDFD$IO`^b ]5`bSj"8:EMKo$@0ޅ6BD wat<:ay`,}d$K%eqz$ƫ@]7Õ+* uPHN/G`ho+1^(y|ySP-Yێorڨѧ`0d'Z FAq5ܤ#Sh؜qmXF݀B@{pO/',@DT9eaTocE 5br@MxlPV#뇖%~Q8NUwK6l!R jm06߭V>F N0jwD%'3t"T^cD~4s# #Q xp=A7R_HBm3 <RiAFBpt=>t8_n('.G{ @49; S91.~&AݐLra變l!~D8P`QRu,/% qE < ]AP-s\Y]|oZӡ1V\6QE:kd7 #|.ҏFp61_ )!T~pZꥦ UA0ʅQID%e,F .B5B8"P#A0cgu%)?rLOa!,<43'Qe\9mTF y)W]"NH6R'0Ct$E!Fٙ+kHwNoNj*ިAkBU#'4(A/0WMeHu%W KD np9 ebWc w8wZ K+ORV9_j*7INuU'B? 8&d`1o]%gOu] ݳ(XQCkDje*^3hb,*c:hS-4(Q8RRډ˛$4͉K3r( .G/Y( C@(x=`%Fa zj,`r ~ &]5 GHcLZq\5Ĕޤri:$(MY`ߔ}t5;khIa0y(!S* LtI\&=9khtLP *֨o Ѽ"3~7 >݆K37K=YVE;B>nNXb,O%UOAE:۔)UYY{ME>rez;YwFBV}6>q0@Qk`A)U.샋k;Z隈JkÔH9̀Um_u#V7vY/pb_yԋ8a01vHzM0Wkр*<[QaT9KgDĊ/Txh;+4 ܟ#RC jEB:ѣ1[R3mWv%?GMDCE K$S>rh`r~b,Bv 0@#S ,кmGȮv$R|`tfxs:r_Du [.74(5h72O}$._ej@H+uaXvIl7[oڂ=a\B+cj4"Qt+Y$< n!ڬ0͊Vv")ƃ!Z7+ڣH̐#Jnha-e!ZkhSVXrரϻ:$=عa/TRb|q , 503Xp6 6ն2\b"譬 T 4٨A{ @h5'0`]Ò_;^B`<j E4tS`u(?؀9@T i闖\pHi-.#hH*2BD7kEP4m. E! jD* .4.Ym";gMF 4G9kkp/?M i4[3#U DT^"JX},!ej.(/G:uTrFs'%P0 U'p(n#Ѿ؟Sf5.^8j./IBDj9`ze$~lV>̦& .MM3d@R݄иEY1Cd#uZ_֩S|<7u`7h]Lн1e Ӳ d@T]BF#QH^![E,ki[#\UmB~z"'A])(DDf Ѯ _ّK6h[.5eNBwV\˓)bt*(Ǎ]#DE.$ټʴ׭9d螡촍BG_m`W{ER-"@4BX5 p=/)6Q>h!!Dlt\Xg:iu&A7:5( C(!E 2zB*ʊQ`7f3Nǁz *N5e P7OL[7jj2)}$j:;QOqfd䷣ `xN</jl"^4 2JxӨ@7@hУ^XR;N _|.k׀$1M#VI~C^w l Lq,hEmZ!SfGhIC<^FSaL!?iMu)_.Tב&Y6M剆! %ERշ"2&k_Y_~,Q քa|_#kм묧AnL* Z QOAq* z n&V5hh71XVѡ`?XE1x |G4unQ -H?juHVsh`;MO}JKК:4;@ -$J!d޵ F*nuSe䀛ZL1VbB7k`ՅDJS'?2e,Jy%IT5gJ[5$ɟG$C5\,V ?X k.CEs~{#x'-;v }A_#G өpt >HJ 74-aҵwJ-q=LpEM4MmiLKTͿfٖ\IBR$BIh2.nCz#q Z:J.g u8pH{]|Cup* ~tn- oc*dLn)|>ܸ:w5Աjˠ}H=XLMOr72Fozs +tpD0*9"H}׼љTqPBAΈҀ#^% [z s`_jЀ Mԩ8Lg] 6)Btߤ]`ukut]'Cul${Cȃ64u⼙E!A,PQH_3y4bbhNOb˒vA4KF( :F!:mhwFHvt>atf+Uw}:֬2\|ըbCmQ!Lʲ9Q&S{MA1JȄ޷ՅVZI\&JY:tOhJE-f:tUO(IT:H=nhXNv뀎pg,PB]ǥtyuuBRQD2@@@yEoQSz GuKrHf 4C>U3ԩO|4q4 Bxnjg |ɦT9LGPmoLX^|Г UY[⽸穣D#VrEaP9HpnC,[a 5n~ޣe'~|ئQ6Q'mNdpj$Exߑ7n̨-9 U#ttn4jG+#dnp)Q;!)5.A&Q <.VaL5r܆Zqڨ:wCF_BqGYCNCȊ!jDs gC0 V koڻEWiLtJßIxJgT^B\/hXNK!Buo0:Ԕ&b`niΝ~cX =Ә#bLP($XD ٓgC QD,CTW;@JnMIL'*ᴃ|dDwy%ԦSC G$,ai[U(#[$DECGCĆh{:,[Ӏ2tG. ߃$x"I2zSn[>hk@ ߀CO;ȧ|g}eď؀4TbQ2UN!] Fym}!c< wDFS3Xܳ̕i)HI8 #fC|Gzr#K%ԜPUrD%"0Ě5$TŭЉ93YGB#):h hʒ0c#2Kڈ(X;r5zƸd,WLy蔶vm:|!ɻNh=iw@7S)k>8 gSvF`e[!=$y1M).LuL?7&-Vz=ѯGajB zp:gbXUr܏?vn@,J?m ~Ai!HV ߹)h;TWetxAk& )HCҺYf^5Lt~E曁iWV/NLANO^!(tt8ÉUNygR43G"_ȼu' uꙐMȃۄŌ;hT_UQKDa_+rS A@0E=tkk2{h|K൝[DngNFcZѸobXNZ:]N硞}:DCTθ<]f^g󙤗D(6ѱc!X t/tș۳0HRBðPp?㊡g)x1@oo4~prC4m.^OiO뀝'6p)\v=M%&!нf{g:HIsZ$ئ4rAnF/Rgg?5vƦ(&8Q54o=GɮahX |?5'-wӬ -/劓<-/B!TOwuuZ^ V=[/\ ,cKLr8h2$H]ܜnP$Ă*omj5Τߩ4hG!1>}Wb UPrZE _W56azTXtRaw profile type iptcx=I 0 g FH@:xp+-[>dOɶ.8k?[1&JMoT\0ܧ1iCCPICC profilex}=H@_SKT ␡:Y q*BZu0 GbYWWAqtrRtZxp܏wwQe5 hmfRI1_ï#(eJR%x?GZgaSy8ʲJ|N.Ь;4O3p `z[u[SɐMٕ4bx?o}@[k@Jp|3~9r iTXtXML:com.adobe.xmp bKGD5 pHYs  tIME 8l2ktEXtCommentCreated with GIMPW IDATxy$].ŖVefk-%$Kdˀa0 2x3x9:`Y΀Y omx9yd ,ktKjZԖRUg1(oͨn 8Uq-ߏ9van=p{FGG=UU!"8ض 4i~T*=l6D"W$q˲<u]8۶aYt]GF6(`ayގ<, A,X?GE:ưw^d2 I "dYiz0MaVhy\8NMvyyk <ȑ#L&v:d2FQOeOEA"E6eWr~PUx|;A /`kk ijt]GEDRߜHJ{/˲E333XYYp] Àad2ٳgbCuh4t8O0ht…?8//Xw`C62^ di FeYeYڷC0 ^7|>&]׷k ךnccc7ZT  2mC$qH>|>Y,LDg466.;"d ϱm10 zF\.?7uH$L&yޡn=fd2T*L&PF>Zݮ}Fu n6R( CCC0wy ,.3L& Xl .!H_e~mnn:Ο? 8$!NC0mۿl&L@fdRN$j~dddo:, u]i~TNY /Y>i] xpӯ Oz<˗(Jffff|iW; .O>_ppg^ g* << ={XlJUdx$ò,(2I"8:|I, ]8gi/К\Iﱩ`B6p%mfH4SB"(,7qbbe٘,|&y_"2 h>hdX۶|^Tl(+䃤2NhŐNO y_x<838;_4jO펮*C˲PV(jBӴe<\.m_Onڠ l~ d2&IE90yIJ1 ?9l6{oFnd2$i(?."<DzG?"ߏU9;gWz=$  N;333={|?zF?/N' 9z=s}Uk 333KkkkH{^y&,",mY ۶@ aɲ Z>ۿ%DQttR@yVvsF18c9>zSڋ>IxAX8EQީ(v]x 0GV˗ӧOhLO J+(8ػjNVVfutttTE$ XkK^ѵ6$'Ը4M}{{rsυo{:am{Hc#:4jZG.'C>O[QnLQ鏔J%wzzz]t oy[ I%"RwbnQza8Z84,9o-:<^$<ϗST]CX%Qd0q /..bmm͏Б`-Sւtd+kR$KH$={E]0m?,qbcbb=@MT.] #A5EB໸RQQxDYdE# z5 c 0HSSSw[$Ir (")2𚦉n˴Z q0 B] YQ^At.t:'''$I@<ҮHA=A@^VҒu̙/noo7)%)n5[0&"(]M{E9ԫ ___ˡh6n"6Dn4%v,..Vew~_:$˲G_qӊPeaߐ$:wڻ߯Gp(h$v Hzl|kkkodʢkkk_t:u *Raup- bBsDQIe^%âze!Hkq[a0<<1i]|`TM4}XD$8("!͢\.l:J/H@_x]&,,H,&DQz8a0Ru$B","{cE@?i۶|^>0cߡGKe2 :^4oR3I 0m۶YD'Jaff\n Ng 튐̙3PK$jC*rRg'v]3M˲U*bA<4k@HlbssYXXXm Da B>9{y??o?TUEلm;Tj\%=iQAEd,Bi^`ܶmZ-iH4}NȴvX|Ķm-d]z}aև2aUT*Oz=nllD"1NB,ݓ#")Oa^~Ji~mF"Ԕd>PN!LI#S}U8>|^/T%k7R$!IOQwqx<_7خzb`:x ZÞ={:5X`GOdEYdQw:eȒׂxG}ЍZW,/Iy u ڂcQQDPQ8n||zb>yrhk}pI#職K I}ٳs]W"c B I~!3n% #L.Hܬ(KM7݄{'qhZz#h0:[[[uO*XEQ~Z]@ EҊZxFҎo>yt:Z ,˞Y^^^r]D)c0ʹ k o^t陙_NR0(ʮu \M ;Ll8LLL`nn'_&Ɔ߇%&^w$vj*j(%#KtĕLAwvN_X7 c/8r4&t* =tD `WVV"EYd vMIq<󰹹-7I2M,B4??;TnR1˲!-Š]+:uG_YYyoO򱺺>}krnpw!׊x##L9^$IRXbw&}C###,--amm//^2<7s-$dS,n60 .FRyyau]lg ݮyeYh47lv$I1A~Ovz8ضv$9:P{( b1u/J TT5\uWVVP(L6٭IӢ; yٳCLMOO6lQsT#Q5F4z=z>6 9a@4:u dZm )Dޗi`gS,ugYA F_q Fz4MC.5dT_ۭVku{{[ǵEFYdE x_5M{Eu0 ^(~hHJih6|ixh4Xyt#hd2#Gt:r>&`tt MaG^c}}zgYYYi.EB1d[\*BR8YG #\.ckk CCC~BP$I똛@a,-M]~d"?dYf)wGղ׿.F}j|dnO&Ò$q LS*yKh}{#`߾}Q("cbbT*!NR)[^=ͼc=wԹx,Qץ/Mߦi_LFVC7K_#UYiTշi1(ȑ\1(@^OI#}vZ&b,bkk\kaׄoDYdEٿ ]Q(w+yCuضMT*-J0(I? ߒf)r^$4 B'`@FuĉF qȇkw V)3O$yضmT*r-$j5vmb0MR)?7dyu,ê~RQ|>|{/~7vauu> х`=8jz:O&Cx@{[z  /H>FGGP,DM|hg6ih4V766^z\ Ya*JWңg9ro.2zK.ձ k6_4MsvԢEΟxZQΘv A011.$I8m\я,",-u]'ONNuxxأwDLrH_T)eYmޜ/4믿>9>>|^H$.9{SP.Jd],l6G}UTjW F>",QeX,q^x}\Iy8cy IDAT߃n&,v|||XUSU%st 7}ob׏|8bnI::FH~@O~AR,wb,Vki8j]VOaPK+ICIEQGFF qK;d -RI$,r >O$Ү6662UƂ,Z4%q ,:h4P. YzmH4z W3($I{쟮*,>G9 @BW}$IN# q#Njlll~ӛtgGFFv|>T*e_Fmnnbqqahh\۶=imM9 f[R.}YiAKK-"|n` M͉Fdw&jxG>rl6r7$CrkVcDD","{2̨,.QS Aqd2Fo֟5VP:rL&(@0%?}\KKK0Mr_~sگ6S2ο"nV"ر?e1>>LJ?a`{{ۯm Q8pD^dYIw:F9_1 FyOA`u]uX,o5G><x'4Nclְ3D6BJ9+vFmhfDV q]w(n*q9!aԲ,{oɓ'O^eݫ`0R {^, ?\z曯;tuDG>O>Hc{{.]BF,p:E.U'Jf g2P;###]w(RE#CCCX^^SHz6Ν;箮dݗFGGsKKKY%u H@:)r~d`WvBȚ^ZZZ8y3!ױy^"LGw4q|1ۃg]iBŐH$ؾ$X3," K@`TrE77I'bEK!Nn7r<୥IQh-"CW\%keY&)0 o)s0oL~sj$RD6~ĉRn\.СCX^^L$ twg8H1 < ;eMzNSxddG8unnll< 4 6A1/ޯlJ믍3a K Bp3L;z꯼+8xtdZkh–^6y~q ضjWRѽ^:,&&&P,^(Vaaa>u?IQ]zH$|E+k*Nd;=>UAO'JӉx |k2!5~@H;444(CGH/,`ʓ$IeBa.L*f Y3,ă]k\.w4 qEQ|O, 0nyssl>?p=^:kb4&&&F1 WհdxZdTA`\󊢸_Ν2"/'{$IhYX^^F*ƆbYsss#6j-T*G? *`sK_DŽy_Ae/N'+JWj$F#",7EqiO^p#5wy'8VVVp)X\)z~ҹ4_%I(&DE($Ic/_7-b7?dDRvwH#ZbzzzcCarrv{w:a~jIPDRt1,O>#iW_kZ)ZW0`o`t]W2t:uq zIwرw={[W٣ $i` &I&1AM>T*j%EQ;c䤛doQL&133rzCzee=q׫jjjQIbmr|NONN8<57B|\x(bYtQBR1(BTd\.x<>`1_|=z @ɵFw'n*#wjj.\ #p",@ҮH݁pFP^z%LNN !ySSS8~8Lģ>Z6ǖxБ.L&t]SRPu Tj8a:H>˲ggƤVj[RbH^?e۶s3anaYZ&sL" Ic*D?9SSSH?0QJ&>*؏y7tӞm6L\ۭolltΟ?WTA ~Eh;ZT(bwuκl֏|(,677|?KKKm ;RUUAPuQ )( :ig666 L&3(Jl&41xHξ1AYdyt}o- À ;}?+;DNmmm鸢6=&"#EYd !G/XNRzz)$ lmms""򢻢tA&Ӓ; EQ=Ǡ]A%'Ve9~6H p%$ 4] iT*r/2z<0Mӏ r9qAyqrj&te_kIc`?+Are魭4ɤS\\]9",^?xiO98Ilmma{{{@.Bڄ0q5T ҥK~z> #Q4,w4xU6] !+V\.ݡ!D>ʯhG;]Md4MkZÇ鑹"} dY9I z v= xlagZ%s1Tv53WoW;d_D4M0$'&8~ҥcPj \eYضɲT*߿].]X/"dYƞ={tP.zSO= !(J_e8\!8tR0_/ LA1 o4Gz y'v:I)AJkVHD<PRUuY\&v1EYdE t|$R|,=;W&+~޽vdF'O 9F*rQaǕJOexP/ʡuEIK+/:ͦe<ali\.'4\Σj5΢hQYH$PVwD: )y??V|0L2 # ٤{-s#FZŋ<677nC-H$cNj,rLtt]A]133?~g7zޓZ}% D<$HD\y˲\u}bBzVWWa;j\.?lI"i5Ϳ`W2lJ ]}}q4h=A^ Q _yaEU̽mې$i+dni9r1;AL&0 #x'P$(RF$$",!akk \n9a?ffWK{ ]u!K"%t 1L 9T=͞-J?rx w~C埋I_UJ%| _TuqT*\\5 c8{@H2 /~ x,˂[Zi0oYCx{@>qf:Kꃑ1VAr${$I;mkrX!m9r&yg%I8H$ܑ84bIdgU$8u+ 6$9&4

(X, pq,S2<'''PQȐ5A$Eh@$%Uɲct^7a{UQ_P!__@V>zFX^^~u]I kZzΎ[4QV籴qottWzXUy J4V#H>v[߭ [C]0vnDN %덬1:BB^ #$$2I&D&Gٳg199 AtW^yek_=Ajtby7q%zO4k#X<<4 0 7$0 @S0"A}hE?0tà=Ǻ5 AiNvеDHT4}rO'+)2ynTϟ@xU","ߘg^(f ˲|+jP*K.=Y x僺W{ buu799y\wR$O httPT@KpHR^LUU8tzYt:]0ޱ y !DE 8|O铏W<3REt:j ey|WVVpq>}I("z< mwؽ^ny%s,<eA4lĕ % 8z77==i(IJ011j:;[ "jAnZQc{&nftpͯ~O焮_nP;tD#,"g8VVVv%lz=T*=q8ͩTJ%g !`:yo`;Y(LXS v~:Yi@Mܫ ]{ČDXAyi奐Q$", q؞Y/_~,Hܣ(Jlfff@1ܹs>(#Pl6rvܹ˶mJ;:\Hu]'"˲mql۶G@ !DeY5ɱT:kxx'X,vrL_mrqb9[.N ]S(?β,,ReUU< V^YY!q& ,tnw05MضL&MuUUǏ9qē*ʗY}yFw?|vY.bg"F) %_[fff~yjj##P([n>ϣQ0EZ-t:looC4 &Ae:JB}INyExbJe _?Sf'=Y8'!u`T(}c^otiz86ϲ,g1 IDATaaaP(L&ɲYOQk*a \{l6(JWS"ݚi;iA$ IP*077秵c<\^^?pC,"uC@Ht߿(8$I:440+l}jZҥKjΔR@  n?M7$MNNΥR,!!D_?Lb޽x{ރ>0 cƆA,Ӟi7qqdu]g=c4fjV)ɲfy~Gqݴ$ߎ={S/'/~WJ}M) [__ojiJ$mh@uɤ/KR/>Ih2/\pp.i%-Qױ722 /2FFFP(*+#m#HY*°,/---JSʠVD:","{D@Hz}}?,r,T92MNi/M j:F\A$qםO={V뮻=33sͯV8v^|EcŐH$d2:S8H?u]9L²?5  8 tgɟI|COT5.]~䃮T*Ss8c0 b1A80{w"`}uMd7[[[xi_ˤ$ QZF۶K+++d fffgffFDQܓd,$:B7 0 gN_ܹs~$,Dz,*Vd} ^.ZeUU+X,"俷D9)NaKKKkv/gp/>亮E&c|x?o߾d2$I8<$ISO=۶,2@EQ}Çey у={ tPɎ^Kň3nMj U V,..>ẮBzO Fnn<Z2 F1NPـ0˲SJK|Ò$i@[j?"?"̑#G~}bbb_6TUg2]w݅Ng}^oZĉ7$;oDfDFDFH QP{U/f-&cIY%CK#EI^lIcͱ͑MyG6O+bUo/*T%$rc/C$[E9yJEwr%XGGGw7s3 z~ rR,J?d2$Id2JJ>2m۶t1;"HOukzns d/0ʬy %p ]8Nw0 |޽{٣T!$B^ ZVŋ8:N!'mƹs?l0txT*oW8f»ώNR=#8}4zOP(… h4e,߁۶ Yx8n}{{NB$! L" CUUyG[zH!C?S z' @eQd(hr)]+%#4.effgffvH @6%!(Ғ!tw:ePrD.QL`G077۷ociiǠ.#m~~qGτa@1IJu]GVC2D݆ *:SQR=z;8|izzsa$Ix"q(3Dpd2j57i9$]ŭͫ|^W% {cXK;ԍHtbT*@t鱫]'HT*r@+4s$JLË v4eY;fҗv$I"#5d$J$T.xq>ٗJH$vyTU~p}{j;ŋ7nx|G$kA@vȿժ[ymr|SSSB.Yws~N#xDQu;w/Z-h+aǴ7KR)'od; ѣp-loo{y<#⸑;9Dz` s~vvF(rX>VnFM0X3Ev?? n||<-IC_hhZrPQ@vI^2sl烕 f^hZ4**;( l61O{ZFݾYTp4M4M֖@:(#~Inc#Jool$R&"QkU]fDzg ^~&h].o߾;{jd ~~ =^|EP풴鑒@3Ċ[0p?;666700|_~J4qڵƩSN[D/h0< D罎"0^KKK[̞I`xx8-qA,JR4M rmH@$ KUU(EQz$4`&^@DW_8{۽, n8$I B]a;a"VrP˒~SD"!E-˒JiwL,ԆNJ1M-css922[躎 bcc $!ckk Ba=Ͽ%Zmedߋkබ^W`0 Sߖe!,OƾڱqU0vK\}xIm]wEQvoFu]dxB088m۲mX[[ç?iƝ.H#6 tgOLL山tl'(xQ.ݎ@^GXĵk:= hHBO?/R ^`+HuE"J%YvDtH@𬯯7VVVpg;de9A(ah6in1b&ݏGREX&] z%}2D^wȱT*X\\=}L#>E,K6tiƉ'z*=&xNDt:Ӣ~~;䡇: DQtUD^G8& B$4yg Ҧ`g;GH%ȥNMM 6=eƭ\.ww: 4UhB'eY˲j H$&Ey< zZUzVRk5% {9;(:b1Tѽ;Ȳv\%s>яh\n߸qCTU @4h9RT,ɺ#d.4 rٱr4 BaK9W~g~/;E\Ʊ#<3Q$B? z9s;?@8ɤ(ê5y6 b N>ѫoP Ħ~]vF압(17objj tv 1V]#Iz~\._/A-:N#̳)BN^B?0Za֌l~BˋB 000EQV3&dhIÝN(t:L&FAxq`7GÀ@4 >ÿ855uՑ5㡇B<K/mw슀[n5ygu]7Xpi;s̎nl{ɿ]4+r?5v-JEﳗvKn](JVUmJrNRDG\$wL$,P(dG8s(Aw ;viz)Ry$I 'ĩSD\ymz=xv'%rQmZ-J%ƍN~.&v EQP l6\.J|ݟ>鴘L&rϲlxNSSS33, L]AsTҒ/21$HD$'qd?] $yf ֎@uw@'W*,,,,`:F B= FpuB-Bg ^tI6Ew0fffq]L"4X!ukT>^_WPT\0h4\N [\$6龩ꪇe'׫ة G? h4a?qV5tLU^_J74=&vToѮџM&GC$#ntzo2zGh?O@nr˂ |8+9akW*uv`Xw#I1ko(TUA%RF}NǪVSN=O<$}H$D4R$ wWxDEghhȉb.eGN?oy{pa݁$cM\ f0A ~.C۶~s]:.f񁁁*∢HTzưr X9^?|…g =]e4BKd҄j2%5IH2 Nrmnn>tTa%q|t:Tx ;HW*ke.KǶmtQ2z0 dYn1??PZuEMӞ.QhrfggGMM:VyE$Ae8pSSS8y$r;vE׾g[˲,<1#5ha}c BX,888`u l<(>G'ˤe6( RkGÇ MP*000[m1( $dկ~ݵ zEX/dsnDjK4 >fH$ripp_3=2^UסhHӨ=cXl6p_l<ǀ B.4HJ$5VUSSSxG|#8h@~.c7yO(w{4}Qtiuz*D"Vi2.I%s]@"vGh6uȑ#oE;9cccGPNhBc͛7qQcnnQT~嗿j\('" >k t<5M*JX,h۶ƯڶBoG$"~~DU8IJ/㤌V%!48HdOZ4mJ2xxK܂*dp x<V۶me!czzկ~4HON򺽵uP(,FR*L0qD"C[[[6ntPUD8U!>I;mhGt "prlHn{}4H!!칹#o^a5A,e9&wCL<;:N8`/0^"DZUUAu],x^G>,u n] C3~hw\9cccw>?o 8CRבdzdY̩ n0D$EQmF*m_inᘦBl6;*rW Ol ߼yH$h4.QUXl*y4Nۅ$EaUt::=SOazz.\ Аu^ tGd(RQ&3F7VЉX?ijO0$jٳty-o|yB8y x"zu>hryt666^VxƤ:SzYKkZL&P%(˜,j\n @褖(H$qocaIkGw >&89 X,d2 EQi#Z"c||Wpv{硻Bddri+=nl6ŮT;9}0~ǽ@+TɘiT*$}kAӴ +V*{QRm! D"eYE!s$;3@aDܪgZࠛj,C.ǰ^F. DX~^,B044m{ضm\t ٟu1$Igv߻wx9:::;00UU].}݇%dR&aV%;"2Qײ,Y=ZQ,,, Lbcc/f>N$ !O*d/Z-keerʣcF:;#s7h;T*}T*əL}fDQ\qjcD1P(i-m{cgH˜ nb'8x`tzzz$LڪMhcOj\.YcKjd0#b u(88* M,m4Cb(";9? lG'n,>f_|SrY)L2E'g?%;I^Yڟ0 J%B!4 nkkka|||Nl\y\~}P(x<ΩzhEW{cx*<Ts&h6qy7]$Is8G&ap_KR=H?C?'xfyu@hS;⟡i$nq,(Gh@BZN'^p9YZZTbߟH$e@8XZ-wE3 M|T,D%I 1  YgYǦcW^mOi@<CO8iZgsssx788@&M[r,'/Q*jكFvMfLRfNy7VO$C Dc~" L&s]-j9w`S ~~qo9 I1iӧO̙3t:}Z2 >w:!kvr|>$IF pVAQȲ Mϩ*o߾rRJB q/; Yh4p1|%!zHSNJxqȑ#?000.?`0_|cccz*kLw*Roqjzzzljjj;"3(CH?@B #[57{y.]imPR###ĻeY TۥR-"NބNY6v  ~m0nZۊLNA$WMlce 1EQA=0l6MMӚ_`$>gmm .tz;APV166ֳ|TTA2v-B,H?Ï9 H˲[#]~[5$J1l(;I9AmxЉ'zvtG&Nؓ8<t0>>>H$&bƍh4ŬW봱5w?300p.[C0wq~zbbb&N;hԭ aȏDQK/BMӐdp 4WmrIE\.۷o>}%055Fx<2MԫHGVVVzM `߾}X[[sPXn}?}TAs:JR%}wL*;5d;nK곁G?uPf DT%jX$9x z 3dO".mZښgii gΜ.\V=%IB8F"ST2L\|TDwABai˲l>Ӯ`GM8}{tOCUU<xWf Ip 8\"xX4;Ε7x d"giiH$4Mi64 CCCI^<w+Ux.ׂ `D&bu\E%HEd(6+"$m(G{#]2^oWqKz ,'is&^<BCCC>)@{"T#) >4M# m=]:=FF>HnϞ={% VR|k .;t$I`E֍ @RiWՕp8gYW:ϊ êf24Q> rjjj6NKH$}CxW\/]g / 66q8ivZa[(O"Jj]3Az$ h6VVlYC/s `tqBp)lmmq=r"n:;vG>N(Fy`I<? =d~̊ Lbmm =ҩW:&(@Yzv ۶khsl6Dd`f$|G<F>?eYdD2886gqʁ~罅cX>? tR/I'|Xh!DlrBJZB%dN$? p(%##aN.Yqznn!b17a 4"c~_V[Z^^~OBELvIU*62)rȶmTULNNҜGŏdF"رc;044ԣv# ɓX]]uGP&JVWWM˲he'"\?}?AA8οb%}x饗z:V i"7D4E<G&$I; Ij\NiQvڳ}:dJCĮ}nM > 뾟m(YϐwǧL&:<dOٲ,U%N8%*)H&[Xo0킏Gn+r: O?x1v04MCZu^{|~/YaOvA': 9vXfׇ~4i@~MQTP0|s>?o nRF/kEQP(H$Rh4Z4D]-*qu\.\.$K^d6}w(,5 )˲EZr얗*LtUhkv *A;"Dbdhq7$^ ]oi2zV(sB4RoA%-I&#eYv4MEXFv=[>Drv(moo_?fGdY 7ʝ7]3NnԱyOV\''':˲XSq­[_۶E40|~ǽ @4fffQ,/P(V^H nZnY^,5LS,vS/I4M.HyMut:\\;]?}BT*fc6pl:`Ư-˲lơCjV#d^@`p?~;6dܹy>?q9sn~雵Z=6^(qٟD"i0MsB1Sh6KyϥYB>+a];Y+WISv킏!4oPUtdQu"ǗUb "ƞK7qhw(*}!OR#GHrѫJ3 CēoV:R,S@Z`8~vvׯ=Za$Id2V={vFJXx<>2<<ћ7o^r1b~?رcHO? N k/v:Ba7 ;j(g`㸏9Z&zV0\{%IrhNtγDfo-ITUuǭm`;cXvүJnkf뺮ٶmi\v$\<Sou;=|a$o|:t{KpƍQTW_}JV;C/'d*˲822OUU$geYv;,T txGTrkvԇpM֭T*xGk(J(կ>Bl۶v'HȊyZ-Y_r+bL&\& /a`0"~w~%Pӏv,EbؿJ&ǕH.///RPEѦ4M5#xi;H$b%NubѢG. x# 0 VVVnG?w64 4{QeGnUdxu@h!]`GOHdc z)j :L$^%;nex'"w:bZZZڕ{xT*2keqܸq+g}68Nq8~xȑ#&~48pۇ\|Nܛoyaqqh1NyY0lG9Y{"ȞEѕF%qrd7eY~i,nb; 4 nj@e8Ӿ1`ٻ+b5~`H$lh4% z{:$/N`^ ?z={<h6믿<SUcpءeڌ;~U. uJ)849VU6O'rI~tV4!L0 \~Y]!,nqXYYO+s"~~`+W`yy5@/G% qG1NlF r \O8FX,`0M(F!IR((666A]뎦i033sVassE?noo/^^U~`LB4M(5ع}?4M,r}u\ IDATe|>iej@#Gm;$d%a1~^#ǹP(t:b0vHxL|?Ƭm.ZT*V^z"xi$IWضbI>|l6 zJEȑ#k3vUV/^<ɀJb^N;b8*j8_ujJi\7XǒɤB(\2P*iɓV}+=ٻz>`; 4`cx ,E4###q~ 8fihZ8GyS-K 9;jn߾}sssu Fh@Jn͛7OSmFD'E`8OLLR2 YrzYt0>>0F!"n޼qW zqHhYo4Ǐ~+;6z~GT$MysMt:.;%+YyמD1qGr%^|Eb?![E[XjAT269 1ncip6EBJRŋ ^,7ASUu^s]#2$ 89Ut>pqlllW^.\p78=&mx>4&:F?3,;b1# nsR۷8h4htZNqʕ+vgH$bB! h4 L@E=3=|&^{|~) lW|>!wǫOF S4MPU\ǹ]Dy.&W؎f,| Jx4r@.sUO鴭( OQ+.a0m潼8Xհ 9G=::z,JYz ۷oC4 ^#Hs#XG !!@Cw,R~=@HbT*V'.PPhW5c]YJMji?%S.qaMțlN8ǁi8};j(]MbD";dNY ` غcllLhŁ~X,nFlnnn5SSS??::X,&elbCJ(?B|;=;"˗//t- ӝtxQ)/A;0idXZZz=Htȑ|Ѩ[MnxAqr9w/Sw/t߯-KOUEf&hB>xq5 p q-4(䜫jT*RTƸP(dif:tLfAiszP(Ν{w|4P($Q=\.dA @<y^[{ɤE;-ɲ캵={###|4JA \:ҡac@? n~!Wt0 EOV(' }7$I:ۭ E hm˲*dY:000j ]`YwXȲ~$ ͛xΝ+R{GK$A|Rj}E::l,3۶l6oPb޳+wJ/>eg_YYC&Ǭv(Ni{ů۶-$q6u]$I=dApdfmmN&?dT&CLvPU{^cmmsϽLu/D"p8CFv:- fR)irrshԢ;8 Hđ$)+KD 7 TUE~t@? $YY]hZJ.m> ~Xׯ_zݻ$s7i~@RpѲa۶h4\p@(.]Jd@hh4DW\$Ib(0M7nZV _P(@G?B͛?sXqk/R cPIAlXe Rłz4MCR3pN{z cXh4ZGY5O*EZ`DQv*ѝ'N B~qli37`ebIA>EpV766^D"۶˷BeezzAXeh,.. :z~_C d2m>TFa3`qLLL|.$cXQ)LBuBK.] Jy7x* ZM R6!& 4)KRy,ITjz 2O k If1>>@ zb\.yuG2$I"GJ8od2Np8z|>ׯcmmmĄiY6[upht<V?8 [, > ]4 jrueui%k%{666DkME$۷=G"Nm| 8]DF0552Cp*Y<$ pSSSEQ`ca|h6\p.2 ১ㄟgדe+++~:= qn6eY B(Z}_z?,B333Mx?o) =&rD u쥫B_)(/gϞ/vۋaQK"FW'''?d,"G&;8s Љ4?' RB6z ^cii @Qb1LLL`~~a`yybZ Nu4 kr6mT*d2J%,-- Nۖe4Mt6 fw:6MSjZAML(N2( ckw_Lj ]MǮZ]]}jUA#_SdgfZֿ1Mꂐc"(4MQTӜX,okk@dG"8D"GWӝ>zপ*`۶Ǝ(:Ew?"yM% ̙3%n ַ.כňD"IUUVt2WeYlJÃh&cTH@bmHPLػw;HwHWFEA~|Gywfu @w~~;dmm777Mf)RHfYf%I^z?c#UJ0~G?355oppU!; ,q̙ 9ͯ AKJ\.iY`"a$U$i=r#Pr"S:"Ģ'g}X?#B*KKKX__qB=ImۼeYb4i&4o7 ' E%n^:JHdtNjrsV^楴emLN"eW @E`M(9ȲLR]"BEc~l'8/IC__jhQXf2VWW{:!H0Dr=#W)hd2s6Q.ٕ+W8o.ٶM {E$In惍FchrrNh4j0 YOR<ypl@=9r $IB}?.YvRt+%~&yPUu9NH$#58DTOYN8@`G .ARBŔgRWszzZǎ=DQ5ǻ#_;i6th4Q],(;$:DtG?6|D‰'ex$v7aKZbt: -@V]"U\.ZV|(Q e?7[ͥ 3wjZQ8-J;&$!ƍqw[+w|$,ױޣe|?biO}S8qΝ;}bѿ yb1qy9>I~$7/yjJΧp8ܳKsP}ƍr$x|$L?D?uu]wj ;“TgDS9԰ 4w_H$ :tꞫ^ǃ=H9XNN*JۧO> os>~& \6l$zT!IҎ$8ز,ʕ+_^]]@%ydƛo9'z|~~Gp,shWrCrO:+%J{l䞐_}֭oj}o߾x< a ݁Q?$|`W^nLWFFFP*Vi> }Z|FjJvE>MiUTe41@{GCk_['I&/YO"<@&QS{I={`hh_򗡪'ϲ, DQr9cbS1$@?o?u0яNݷfIRh^q`dY) XNc/,,,2Öe$I"{N{?DPlӀ|Y{$+lnFFFzϤ+r\v4Ls=jM1Y_~?{o%Y>efdF.dUuUw7M !X0}` x|x`2}Ǿ aFMknuڲ2rXW9yjʌ勌y}o~$x~7~PT IN:|Od1q8x^pU:` Aat5nrr,!ǃ x衇64MvKdY2B$M ?ErtzTH$lvڅ~>A*C=XZZ*:$ ;ӔBr-7Ǐ|3<<|'z8hiعDo>|~#%34ŋOvT* ؒHVC>0vy0#0 @k+ N }7ZUU2IhI%N {7pG_8:$=躮722rԔNm"K ˙(JXXX:u8b ynLe}28R}hvv6t]UUޡ!/)h4BiyT)AA|qޖR`vy'y{}HtX wq>4M}8sL_NcL/IPVr\+z~$i'`!OѣGo7MS;DŐd1EQGϠЎ(fiΪyRצiBexc t HRu6}f=='E>,*J =sT*9.\T*5pIGFaƋ v[( i0٬?Lq\t mcddO~ g03!XYYvKҽ϶Z;"&'']Vb7ܴn"NDz7mj9$C Fv;n/?tONNjD‹bDW3bǦigA6E^GUkRj\ ˲/~L&2j=;9VA.&s~Bj́T*w}}})&,y.<-Ljks1__nϟLMM/lVTU#O|XXXӧvM9Ϧ)+,*ZySAA=w^b?I C͠<EQX,τ 䳆JRUU=eOk4<۵e6ٳv(Jv}ߣ{offl  B:,-nR,Lkd;a#0#W&q]ןG8V V {S!7ض\.SN'tR277G|\ $۶J #H$"R Mo 7vQVMx1UUNj#FcW=ѿ Y`B"9 \4Mٳ_r91JallFDqm7@FpЕl˲Pqox((YQ^щ9N C'o~ַ'EL*!fI: - {YҭfZv%N驪WEIӴZE|:Nz9@H`cttt2HX,ȑ#h4wo2#di,ֶk\+AvrPJKFAC;Vѩj!j taEhzzN{pK IDATO06M-mAt5r,N>'^gd0^#N#fLjZY^p`+۶{ib=(v?#0xIU59صk;m;!P |O&XLR%kxwxǽo65&a@G BX0BYKݻE"]d3tRBV9(V*˲KKKpbXTUU^$EӴw@ /v೟,an~ZOJ eYMaiXĐl;NWUU}hXop {vu?܀(N2HxGQ|C=LbrrtڿVRFGGqžU|$ߛj %N;OASUUN:X,Jm4?H<7ǁ$IH&@?Vض훒sdcic %HED.Cp?>>Gud{^;G#0#W!s,vm{YXJz<뺾cG$A+HFP(P{/;ӲvЯ*c AI_E>!MZͧj̆ǂVbFxZ.*91լjȶ~xxxassӗ%xȲ1~8q~> oT*Ғ344䩪|aH$2(*,( _.NjZ)Bk=Fx[ߊ~|zZ/ѨCϔ Z-˃ntjakk cccvIMn'ǎ@թkz54~Fa nl(˗/QJm\/$Ixyozw7``=-0j5lll`uuT?uϽJ|>$A{ LCʴ266IM$VZ"B>AŲt3:!"3*5*INt BAؽ{UU# KP/qpU-y?_.\ry4@Yz$zO>|&9(GdOĕy$#Z-o۶ @`.R iwFGGsRU!sv|IvE3 ;Frq3!AQױd(] ] a4?<^ȣ T*L`iXH,b1nob\.<"|rD3X!;/|{A62 nVm8qv7sަĉ'fqAy^^/t:ĕJ%\wub,kڥMvYVPWҸȚ/rL&3iC DHi08uԉ-7LBQO ]|OVU^[[ۿ5W۶nz\U#0@h7^:Q A6AnЮ"oo3N>rM5::34$2 IDh6I !6Iɍr;7wfij+B%n@ f fl6G4MX,B8NbP՚Hm2D>+WsAUC#V'TUD"7s@mVVWDZ/[G9^x;c۶w-?MӢh4X[[ZL$๮ٶ}0l6[__Jh (@tصdDQYDi.IhUU^:޽l!BQ躎cǎu]8qa׈8vT*Iy4 îjx!\` ^y$IiIn}*u䞈G)68$R/#玎~Hwh`}}>H$D\]˲FaUL@qY#<4M‚F^>Kz֋V+J0 \W\A,A'Mӄ(Gh:==qmCežavmmm|LQA,=aܳ>{oaLft\bEBFaƫ4H2%IrA`tt(<_]]=L&kl6NKk*q&e&nj\.cqqkkkZMK}},PՐdءj_#!Ni0MsqӵZ r^CCCoWU_ȲE!npSY677^.CMd2=`?A!"JAuLLLhn3Ulvpu:ZrJ,;,Iu,j7r666' <\.n%@=ڵk;KKNVaT7|>t%$v/%wqxy}ٳgSO4M`hhWCeh׿D"8qF ^tSI,V4 (E'۷o8X ɟ#cn7H@9gW*fY*5r#&&&R)?;Xx0Hq`asssVpu&'3 9Y\UU=vފ0ͅkt=¹0#0^=ZG=;ΎC### Y4iPwT 333h4tZA+ueP(L|PDKj۬yhw|;\oTigӫ^N۶=H$0::v04eYPc{I ӻmZPaX^^nW*+ͅRt)J{]<;~dȵ *|xl <E惤3*F%?M>z xn~ 24Ms3 JMR\Yߚn,$8O=s=s u]# v-2/R;`Ue&(f#GEQqq>A:B=ҏ~vlRARX*q"vލH$|>ﻊCDjjکi6e8h4| <"i~RӴdٜiBNӤԩz.*$Iza: NưFaƫض\YY9tV㪪^/K߬Ipxxد@ҕP: H$qLOOqe"A(\Du, D"?ؿ?*|I|k_d} Qzfo3HE3JFcJ︐nP(4j?R 8S*#OG5tAԴK]njp?###>|9t:M]U4g-ͦu=<ul6}Z2h4<2rȑ b2 ~ @ѣW\)꺮'亢n/|Fa+dX,>W,D".8۶VI ˲n2M#EM\qĭhVwSV'#tH6ZK_Ȳn _a6N8˲p),//ot]%Zdx5O$eP(@u?) `zVe[%U (h4`*^Z' ȲtпrS0 }0h*7@Si *kyzp{)׾F"TUűcǠ:NKeY8xkfgg{NHi𖗗W{~tky>d.۶Qݭؘ9W-tɀ $0#Wg᭯?"akkKm9<<|[4}BӣmHo}}ZHUUj2$K'Q":m?xq=zw~wpI|߆a@y[HB[(( b{}}t>L*9$ i`g1&YŎyM7axxdҧ1EQzH8u BTXą zeiH>SOS|Fa dnN,zy|&M4$kt2Njz>0BWMFy %t:4mܧaF!qt%Vq{D"~>濷 ?S(, |yAW.n}}ɽ{q/h Xd2 Axu݈p@WaƳLY4鹆GDQ,[<FXڗ p\Y8Jqy̐@;l6 u{/x6ylA2LMUrl(722EQ( ;<*\OAwx/QnS`iZ݊j,L0yCw,m^P 'Lh4"2')HSSS?;:: Funvv;3< @goW.l۶lW`&DQxq3MlpN aFa `"*Et:kxJ($0 f'|,[@߄Lxuh<2Nti^l8('˲f6(FEQY.xpIHL&t: 0A^49=ɳ{pN^%IB<bD7Z 9߾!mۏZZY4H6Xen8$@X,r97 x &}Md˲H$~j:N4॓gA g9þ}w:FGG8~8vڅg}~hT*a~~~{}Я|*u7 wNU2 DQ$}C{,頮 @hX5f4MK4Aeגeٽ;44$t70 Wkp]x  i4lj۷mLyޗJ8Je!L GaF @ GMFSl6i65PT+*hdE'WT$)i$<8Nj\\LxNǭjLf2),+IeWEZ˗aO1#={8nEJATBH'\z"CĬ;;7<@ n#қ=JBn ShzbUU\ћf}aaasTrYu> [[[dߞCCC(G't孝$EiPJǎ{4[[U'uTI ]٦aNӊCAݗFu]+i_v/D X$IRtX  6$vo|}Gb׮]8wk-...}[züx1fc~ߌ+W 4M4 J?=v 资!x6Fث_d2!zAQ +0 fggױ]o`?NUUg/*j{鴗N!z<_jyǏVպ2"aFajiO%4աu[`nn?zN _%#*Iu|^* 2M*J;?y^}A^@?e)l6fsL&dY:$b,yⓟd_{t(>hR\.pC!fB@Gx@jwdnY ?Y]~ j>s :̙38/˸t7ͧ?4M|X<쵑N5drN|S;Jzrٳ,Sv'''߼ߩG{TpOSȹw]Lާ Mb~~,~4p8sUUd2ʲѮ(EK 3JtQM"y/Lh{0~Z0#0 @yv:kfm~RqUUA$K8 L_ 41*+{rTzT*0US^AE({V{u:t$ٴB=L}XZYeePWMOO9B$ʅBA@>gxrLU͑AUU~SSSE‚e/b~~VJ9Ɠ*d0vEfK9L&GE>|ŗem{,9YKi> R1d9۶v#ׄ8~ʹ .,߈>fHRܫ:$IbGCw?<ק;o6 KKKw($TaFa `߁`,w~~ȈSK((t:ugiVz]vT*l[V&kl7Zc >XvYoccAv'f1&OtMmcIG5Bsx9cٶl~:*p'PA}ߗ0qA 1KIc? DZ۶GS2$vJN8[n޽{J*x:y˲ 2fgg/^?>*ܓ'O&Vlu]d2oFI8q?o4OZV4"r\"lmmuɤx=a}}{;M4~t]TUg }=zt:=66v뎪XYY]|b?A뺸tb<Ñ#G|NV;Hx.apg1aFaj Tu{q,--' j4u HEA<$I}ߤñk.AT*q\xqquui\l_'4&^<Bhu'X.O+r @dz踗@rZ,@oRp7;USzN0=fcbUN0Msi *虤 ̝/ My~"Ld<Zbqq;yWWWK7WI@b1|Ct]ҴqѲ,2}qljtE~[a,% L"H`%@jammm>wB9f0o'IGecdd7 }766O<R155MPSeYF<NRJa@Faƫ IiPگ 9 }udd]~<>>'&&b###6H$J0??{Ы QpH"JQ0PQ|@{2ڤG= H\Sқ{;["/JIzϥAwy$#H$F5M{1Myx}z[tΞ={y]hpNg`J=[nlltK>gl6]v%٬M5Ǝ0 eq0wuBhi;-M>Ѩ<,ceeedw!#0U @s0UA Ziڶms w5M/_F"i)F,DžeV>zklN6iENhK4-@=V*o||ł^N(t:W"BRD"[hԡiDtMK~9+Ri]\p8Auß;tF sA(8}t !*Uհ% Z-DQT9A@H"@h4n<ۨXt",I1WЮud2:OI}WԱns=ϳ8޷o߇u]u@+I{n1L~ʕ+y景OMMcjj*544D"ѧtvHAQ\t mcll R vtXuȶ s>"0 ߀&ER u]r9*kN3M3taFaBF) k%/7b&9.bMh(M[VP(,Yv 9۝@NjMѸ|Div(Ab#}0C[G˙L&]ڍFz @6hƇ8.f4m?Q@i'ɾi4Aݻ<|pjddvEމDcccV~eP(z\͹':3ϜY\\\׵f^anvi0M '6N133]nQTPͅB!wʕҊoAC/v<GFF~=HX__5$,ht]h4sHGcl6XџO߇d|͸뮻8|_!m'&&D9YvbEwv#0#WdD쟗JA>HIѝZ2j/IYA*q/I 07{MӐfF1׏:_%|}Imm4=EQ|pvpt]AWIj~Ʋ,nc%ܜd<_Z__3xPe HPH$‰Qr/G$yti{u j/\׵-˲<ϳȈ?ݻwox\R j՗2&ѐ$z]^^~jvvvZ6p-=.$h.S8&2kb'2O $l{f  jאn p~)t+|OJ&.b1=z}[▗nTgfϞ=SSSL&w6wRe,z'kףG, P&jyg~ٞ0#0 @t,^wx) lnn)n ۶$l"NsxIz7 _̋/xAd(?zv? .ZݏrZ,FyCCCJxulh4}Z|>Z4td^w־gS ;_Q@KEzG}/PO&$Irܰi1MӸD"M| (yP:ɥI.Lt]?,e<6X,㯍Fb$yG4Fyk`Yl6 0s4ɸdNaABͽǑJ\F\zͻEМ^oeYFjqoE0·aVX[[v L¶mus$r+AӰ\&igguh Aw={n4-N֓C,=<*\ Nrsss9Cd NaX@w#z'ϟ4V:M9"` J]Ba JugR</g4=jvR,+xOu]Y)[^ɶ>ha… eLRU&Fqu<,--PD̃޷]lnP K<:?jPVqEj5?%I (^&4Ik$`;B""H$TIni IDATSl3bth4P*i[ң(q$ KXe-xD"b"TUuYYYj&2jkv5}#Оea#}GFFp7UU144D%t[* nT誻$ISgʃ<4\Y2>+鄈Gy^<RlŜ Z-lmmassEK:ZnjoJ9q,^18ymA9iNXr5\j:\V9(Z/=nkc`阬 hg} A]9z{kkkŶ.ӃĄB<@hcJުt'^#Wa`}}}>vg7֋(0#0^(RW0MsveevA;\zkF}q-IUUE<G2u]G&˗O///5jm1iu] qj8xD"t\~ a؇(d28tpd.ccc$nWh?oƿl4/JRպ1޻.7(y|3vuH>EAT"*PDrkkk?WPгp@ze?׿xhMbv};ZD <8' 1L.qb$9ϠeiA $OP nir9}R}WBjYA4HWA; n&*W*N=GDQ|GDQgWk%Cxܧ] .\xAIp=0#W3e/a!"$u]Mϼ2&ualHzNNŚb1Ȳ ˲' m_lB U.]tѣMb: )iVjk6gz'RcF.(JG23Mu-^7>>0Fbc8Љ1M!q9b1߇EQ6ilYJ2L|A9نNMMcOfZ |v~ΙeY9pSR(X`0T*fRdq {ww+++ɓ'(o;CBB> ㉷giwT*|x{tRUw:'N^@%z jAQla{i.^/}KC_[TH.?5ILMJI4 {y… Wѯh2_KRJ&>w؀, :'Sv|>_,v'4I4v=Lrr-~8 Ǔ=sH{u lg|>Og x@$VUUm ίJ|y9YZcF#dubFGGxԻݮY}-lnnINip8lAi,NNuT*|, jAjw L&mq9u>Z-^\\AvXB^_䀜x%atpw"0xcg?b`C$4 ;%v=׿$ٳgo}k4Mr`t:o߾dH$540?? ,J{ :Ǐ۾}x>t-Q1F]=f:4F-fӶz>MPT/\ CYDE:^[nO@[x<W\F!pL`p>"jbddPN; I)UYu$I㮻zK/405$!B4=C >/SUUCyMx@l60RAUU&RY2B 퐜={'OD^GA2u~e d2jjjw>؎͛7l6Uh0`\._ L!#@>=FjnkP7* r PVz} h n,~=Fh4ww6xv v4M &$I>rȿ7"dzNADtT*gϞ}YQ]|1' lh gϞ/|V$!N~2R.!" In/ONN>LăϼУPVQB!b)UUZmep{kKOʲlC,8p8IzbbX `Fv6L'Ah\WifX3 mv_zycSZE 42jիWJbQ99;4nMtCMv靄\.t6(b32Y؀$I8{,(2 2GF>{Z֗Mt[Vů 㓓j<>>>v5C2 :Zr}߾}i1Z;;;4k% LBܼ>t:m0){׮]Cr(])|r b^P!lUa|*"T*lnn /^̝:ujkvvvҲ8/dS}inw?! NBVit\YMq4 >MZBv yp8fi"ro@4]+fXXXK=ztdds\Aݵd2MGNvJE[XX(wz ȚuxDPs`Y/q t:n{wYi ~,ˇNDPAR Icw|||f߾}JR}a}jχ>C.bѺv7+ߐGQH$PžVQbuuٳgѯh15'''iddvb3R>e; $B8FZO9$IH1t[n[?ZhN޼O-..dYn~LMznݼy3 -Li׫#ѣD"~:GXP񙙙zӧw~zr+(Xe;sLe|ɓ'O vx&"0fff<04ΎR( 4o}aǝ <1(Ѓ,D[,mVĉܼyJ@0 }yy&`05 #{3,tj]a 766.>|.0,_ǰni>Xrh4uvccc[YٕuI wYeIdnlllo0dLOOR6uD@eY&-T*accC ÈNcB}KEQggg?422bw%L&:dz~!%c5N]Ƒ#G~ctt4Il'Z FHľޢ(>`ww_h4lM|`l¹Cr-~tHXeYl3UrzLA@V3fffA+vA*2|\.a>i,;?ż`PT*:-`%=B!T*!uxt!t]b13NV?KRmYOFhL$IA!@I~jf?[R)5w}YAoP@.6DagI9eEiCckwhlRP(뭹*rMiFV[jkSSSo IWa{5 ND9H/LWN4͏ !$GJmll,_[)v9==-FiEQMFm!Q<(C=7N~Hd[ vj5,//|gn[et]Z{ MIUUMVSDdž1јkIbѫjd29x%omrn[n@@VVV4Ͳ,Ӳ,J%!tP,!",Wٕh4bᵵfD}C)2dYF$Gwzn4XYYA,,3 <ӑH$L&T*~bb[T.  \#MLL# uiPc~~`rrDv>DphD"6y_OSF;;;(v7X,bgg(ڣ&###x8e ܚ|z7zƏ+b1+lJ5#qww|$GQ4zc1V4b?\g""{Z֧q.‰۫m'[c eycdrVwaӘWZVkrrE0bGwkk:wRXlYMDb~.tMz<:>ʱ6om~[[ NoddDS`FPSٿ5J_A!N4=0MKFr-& ?(;eyYpOD"$>L6VWWJP(t_oѤR7}6VZ-\t4c;ѱ1{$4*ѨJ_ HPH{SŎ-lvLn^Rg b:x#|;22bvx"Do5kVWWQ1>>ڒfoU>EQWIϱX,__@>Q, ""~qzjڿNRnnaajl6;*rXx`0?A m |gggn[0`U.!/,<8y$2`&4JR3?:$]]]ݨT*stTU54::ȝ+ `_F8FkZW}>50Ktzv}}}wm{H/i^NߏUFFV/; g툄{:^eYit]d0>L&q}`&}e_^UsNkff#L`ݨR=/| Peo {nz/z_&/ FeY n"B4M$z 5-fGX'zg9i?\2[n֏.8qb4/t:-`dww`dp"D}vvrw\u4 333XYYA:>lllP(ƍh6vGDu~hUUDD"!MOOt> c4z&fD";v D>fwEbD( ":੧ɇ!BG_Ӽ~>_[ZZ: :-ǎbbB `0x@UUSe$g:Gt:(J}|7b1`krj\4Ex+[Ej\ɲ,$#311C$ѯ\6=` 6D+JF,s&^fNMMYSC1=Vjo}['82i[F7aC$4t:>-"@ju0Oy(wONN;22WUy]+ibaax<}vN~aiw{]xa &,kXGt?zr-Q' 9yfgii˲P,~:*b؀a_( \x`=NyBO,;v ѣG^z RKmh4jiZ\j4ͦ>55ߍƢѨM>XPCŲ,N.WT5ckk zOE,cddHGO  Ɖxc?\v(n+W<{TJeY^ IDATt:O&bCk16nw6" `Vեn>7Az3Gu! "~Pd|47@,y{pxN%l=,Ai4OhaKۆ8H3A.VA~^G.k|k_no[lxdr$yo0TX'+A,w wpUu]|D4Q=ztxv!c{{)ReF'+l& B p4[n[. DsέXjl,JGqخKH{ S 8B!;^ڜ]x^Z-fLMM!]z"jΜ9cfdz#ZB&Q*Z ###;΂ڮNߏ^`O+h4T*u떸re|/ Fԙv/( @u]l.--}oϨ:NlP+U,..>!YgPQUOa.mtɲla}}j?KB ܶ6_c"8tl6ORHN dK>x^(}衇9s2CL'@]"H.ETU$ ReuNpe]׻vi$y>`Ф*ImYx ÀX`3t{t:eY,a4 7n܀,H$h6v"y<Z-;ȓ neo' BgeYN&GN[n[?@ϟU?o/d$ŧ`Orlyʻc@v׋jj$nkćB!;v dlt0!FQ1^‚lEQ8rŮ]iPVVV6o>&LmhT\p1gW`v7&J vZH78%w]G O9Ӛ< a"\.R<~1d RU z %!(u^- Ǯx h4?R`X !7d;FH$VT08ƒMŐv~E]no 0Őf>h(J܋.\Xbzl6TK䃿/.?/| 6续BON###\ߩh$IBFTBՂiPU>@oq4MAmjiBaO⶙ItHv-r˭9Bˀ)͛8PbI'{Vzv" @w͡H$bwQviZ-m>Az> ߏo|#Z:N:ZfCv\.#H o9;5MT*looϟznnn\ckk뉭- Ţ ' ^WUs_*{1ht(h<#b\HG|D"`0eu;v:6D;+W,r~n`nYvA{ճ&n /x|d^- q{q/q{ ɊՁ$}{˷nt]g :pʲ &K4 V8p(+ώiKJ$M&^V Mg>躎\.g ^^n pLrJ%t:=@>-1iX勅Bayccp/|̵[n[?Dg paǫ|>{?mnnָn~U[(J<O<,vȶ?LG~V3pVWWh4II}X,N?|ſ."߫@~,Jx q-r-$DrJ$I8r"~l#v(uHAdd||^u\__X15u mJe4Mx6 ׯcB6Oӧmת#G8x ".^u[vV[C#6bZ]͛g.\\כ=q$b:ԍLt<.:NgʂiIGNK n|,Ks[ s)6,XYYYpyċ&c}}T4]tEQNiNp""w<x쏅_B(zF|=;aX,n EQ(J\叝>}OJR#e|އx9&fY֣XIR4>z;;;?Ύd+H$//XNVNX^^(vhg^`.JawwuǃMܳvKpm3Z[n[?{ E3MrJيիfX]]a]\Ǿh4N `v=iF]fXDZ(bټh4Xq"bddf^ Y]v] J|'1??o0AztlZpFllln:u… ggVLt"r< }>_1q3V% +{$}o:Uv:Jp8lM:-\ AaA+"tSV 댒޹7YUUnZTsw&Я7y%CDÔ7:ߏ%]^B 9Du]V/zɓnyfi@m=r'"-#¼L&c+=H R ׮]}eeY^/ml6:NNL:23==m댆u@I 8gr9}#p^(vm=ȇxt@vE~[nV?lVj.,,`ii>pj^-bhZXZZj///?i=fnB!_6}$IV@ =,=IKL]ʲlId!xlMR@߬8?u;Uɓv8nL,n#;*JX[[+>O݈gYIarikk/E(VwU+<޸q#777oy[ޚJQbLӴ5:ccczA<x_X(>-˲fӰ!˲8f^o6s)17| x7H~ z:m(X]]E0D,넮N}7 c䮻Ĺs>AA9/pɉ1-"qu+++<k;x0}VatttM"V']j(f}'[(Ndj&lWb6J`G hۨT*ʍ_| s|ˑ;7n-r-0+}c.b Lv]jG jϞӌeYmnݨչwż ~kkK BX,~_`nrbY2i`Ie@ղޔi kvvv /VWW`@[!!nՔ나ommiVр,=#ڼC ʼnCO,ɓ'OD" GǏb1jCipz=쨔>*˲IM,eM?Y׃z c+sY!x YpxCԩSݵWU鵤Y)­[6MSCCsj7uAtf4p8|iw'I)Be+NJku8{TRӧx#)IMhYlVX__7xo8t@ ~;; ,e< nmlB~Ȇؾ='HdHXNr}{ƍDwHB#xQt?-Pu]@JvH[iz6y  h`ggBh4f8IgΜA*B\|n$%Ev7%=cknjĕ{9| tfNdc/g2[n֏< sss}h4~ * h4 }PwD G1liiiIϦb1(A6@Ӵ>7zvu]D @TB<X)G<G$(( #/Izs+MXf>vvvEy:RQ,z|V,;\*^@rr !V 1nG#J$G(s$!H$'# lNu$Ɍiݖe|B;cHiF3`p('0s&p< 2K_B Ii0 R d@ೝ6b1h>}_i|S4\~^xx $nkM:\.ہT lPg677_z.2&=K>r-rkHli}{~e!Nhٲ,lmmaaa(bgg`fu7j l ˲nv}) cW 4aEQvn Cc2o&w%;^"\B$}E4#F,o\92{X2{iѺnkaa!wcccP}>Z($K$,//c9}VH$270"jvIbh@Q>ǯ9{ދ?a-o(xg :"H(3l.loo_:qĕ!é1{g-r-^9a?@ ?eSlEXD..]I!FlB ^=voD"%?8|I;Jat钽X]L,2П<`,̲,4mYc|?YUUvͺ9-OB,xw:h%,P|HlBj`Vs?Et9LY0z V Vo@ZQ9vH6l%n[n}Z޸q`YhZd2" X `zA{HR`61h$W=V٠)h0Lbjj]$dB9>bnk"~YnR(BUߓ7l¡ib;d,uP:XWb uBz+Q tqs@ugϞ=qu=LÉư{˗O9sm\ … HRX\\zy~fqqxٌܱv=Acܹsښ7Xau@#`In,gh a=*0 -DXBa3JMx?:f&Ο?oU9$b}xEݏXXXXps|t1p[n[nJdnCSvMrp5vn+%X|ao}+"^|EzDݶ ‹z}4M4Ml&U%B mt:q$ 倰ôV (Vuc;:Pk\t2AYq K:r-r! 2A DXDX޺uO}OMLL4C` lUUTU?˭XsVA uib; j(vj[zux uxŧF>v"!d/ȲM>(%ITUr-r$ }] V^[ևE)ܼ[n`ÝreqckkkgLx0|>^6#*kJd=jPհZ@vjHuZv[V% ciP(B!B!Ȳbh4PDZlV!@UUh%x<B!h),//kwwlw{8u>pNr-r5 Npx .vB\ t:} + #h5Mx<@ ƗžR~J}d2v Qn#aw FNv/ %i_fü Op^X7Mh+N#`DLCzpMx^>8;;SpXAh %ZVoIdhhhh zRvkٮ?G݌v χ qB!q,//qqe](|}}x<k=L]%B5EX,֗ͱGE`*7nx4q{dYC !^P(TUt혷# D"`}ccc0 lﵦiBe֕f][nep /7JŌF}z hQ(lp{{a *02bBPX/ xvttSC%PZ jTJ7 ffd2l6bP(t(T*&NK~-j@p=Ye\ŒT*|p8mN\4mafǰ~o߾]todf8pQUU?  6|@y<hf~V#ijZw}}ZVEu3]XY]HhZBCed2oWg|>__O0WUlooΜ9`0h|>K$w<,Qg=F="eҵ  [zO W4KYn9ZYerp8Ç#hFTUEXbJ@ 0pOZ-$Ix<mܮ\[n[?@L"΃],,,i*w@KqEQP(S+|{^aA~x1Kd$I8 ]ח9`4M~h7M6`k6TUU* O+o BSӭVWa.M,[,G Ðt]H;ΖP(M" H+DsҥK|@ؿ"GBA5owB0bc\.wt:u+8#, Kף|04Mh4:|<#V8|0^z%{qvDq7:^,O1^ zb8$I<(~zbb"A"P9s2F\. YK@_ y^iq||>; hRe/Ql5:~@w7e}/]|[nk@@WZe,KRZ po,(cǎ;;;o *~A98v܊ U#s\NDQ;h966/FdTXzRw[eZz}Zi;;;_ }]LLLur@$0fffDϓ29  vww/12a\5 TVrD{VVVV 0M@4M:l6-T*x.//~U.+}fa+Y l!],l$ITU}(&o)Ms~t2666SN=~+fǖ/R7aݘd2`0h]|>ȲlgPjP(D1`&k68tc&JzfJr>r-r˭WYîZXP px-0|"n[:i"X.|( 7VV+%ɻ}>_#cAZuSV*Qv2c4\WD4{{or!p̬:[,{E z΅!o浣GGUUBnf4M+ m ɓ*akkJX,/Jn1(0n֟y1Ɲ/ݲnP6199x<UU?ZZ+ 5 Z \ΘynmJRBQߟm\mj5٩9M״r|||:YP(NLL Mxst<^/m tOlgT*!H@e[BVׅ\.w\.W%{oZm[n[n5 NNtӥLpò,҉ö ^w fq!kdd3W^]ܿn+Bk#2B<;;;}֭"r{ɟ'n FX̞g<,aQcii/kCZ6koطoߛc ;>o.H^[[[/Bx3pҁ>DI䥥/%L&sod;~؝RSNjZbggW^}1 ( bFXXX6BoXR3:;|^KKK;@cWBAtS׮]FPő7>1x6#MVVV0;; u?dY 6A# uEivnt,4 j&33QƠ1İ\r-r5& ȷ0?a滝ҷ ѣ?].3xyB~$d`rL&NmIF|>_\.TU+Hwb~px% f]$SiPE^:< LgwvyAOjz鼾Z}-0L&X,񉝝IEQ,EQ$z]rp͈^CS͉! V4M+Nggg<11a*R`ccCp™ӧO/q05%NDG<t:}<9Bmnn"HYw).%|e~~~^m6EҜȐ$ID"p8,)4SE`GHAbhXt Sl.klVH|~A{9]4>t[n[nV$Nc{{ F`x+rz"PH') ,|l6hX >fړzz4M0޽WzB`͵3iȁ6}FEQ;`ǁJӿ-Zef?2jLD(躾Á[W aѸX䁷9x<3~G>U8rܙkw1js ]v"aǚ`{=pu>~a  h4}css:{sΝ[Gs%W,`fO,E"%WHĢ{2 !Ng=ǚFD"K/{g:Ò>V eattPm @$T*e_@Z&5vM~?o ىϵ˗/_ȝS%n[n(4jy(3o*z)CQֲc>2RbȲpi_֚9 SK}r|% .F>]vqiYZ#. #f\DOf_-w(z=`}lƃ%`,a.^&Gԡ!kU>^ [[[g#+n1v<vxxp511!crro~Q(/uٳΝ;;' 5qOaubbFFF}>`rrW\ PU`FEQmeaqqrXmO> >ãt|vvv099i[6~XeWP(PN $Ixdkr|LLLMoz"N:eذΝ;sV{ l3 $s痰ɤR%I$/س6?椣a BmjAh}L kϳMiŢMMZdY6B;Kn4 C[n[nZUU!x>.btaa;efd2d2icXSϞHz;W a dHaQnLj6YVvmY’.EQH$ {1y57z" IǃX,CҥKh6v׆^*^/+ ðt]dE<av[T*zvX XdHOlPt`,--BXK`Fk,Z!M7?99Fy>}z|ʕ+ƹsџzmp> QIUUʯ >.~cݣ$2+#wuU-lYjXcHf9ˬsYdz3,0100323 ؇-ɒ-KjUGTQY-`"#nf}pw 8w#8zOvxѹ,eY.fc4ԩcquxR<][[[/-//W91J@" + +=a~񳄐ax;4>$NN]v@Xdy=vt:r(%$i;Mm.b1/u0 ~^;¿ށebvvvb}}q8[,k Z7f30} ԧ>DX,^βrIٓP(osLe< h~4UUX L۠ +++K)ҾUCq${rzzfC9{ィj8{, ` pG8^._9<:6>D"d2(Tfc*r|#xQT| `ޙl xm`ffB({O>:2",1 ):u R 82?F\.UE^P{oy[ggg?$bnn|<677O<90@(.>L2H@T*%;9UUH)E,s9ew.677.zނ胱,Ȝ 뺟eӥRM&>aS6css ӡ7-7 e83=Ǒ|zA#$"aVXaM@&''}9==(oHDEgzm\zj7L~̌L&>dYn݌ +ۏ$o0bL&1ь@iưxX,F{o V|ݨSDS,E~iO([[xއ'N@$VVV/|v DãfYr<;gkC9q `ۅa4Ε+WCިfAQ0# +?$ckk SSS z 0'ěUUm{H$,R95H6FzUUQ(2۱`,HB6#"3D-`wxkrgVP|πW.D5 d:>L&+a%D,LV:Aem{H;NeZ ?P''x~˨jmW\AAѻ(8y$$Iµkl6cEXr#;1Ji;xi,MZ^L48tЇiE~(=܃+ >2 <㋋mu˴nQ}ȑw%I|`'I|d#MZ֊8H$'$DƍXZZyL&3rah@j5څ5&ra#%^Ƒ IDAT7pCnNC= +^MӠ:LJx"@1If}82EX =8E%KE$Iur9/Jl6_h4OZ`Tw2=""Ire0NN,..gu1>>˲}q:ru>;σ^NF@K{L&ܦo0Pn---,"/f27u'8 @uA ]3@̆'!cLJ otIhw`uEqsw+(X]]?Almmٳ0MsHp^Vq5xl6I4`9 v!۶QJ Y-˲Y,Kz8N,edA8v]^\.7͎Pd>/rllQ!f|Y9r,Z]z=J%BH$L&u166擔ޅ׎ )޵k׾| +vmd26hklؘ?@R^A(Ţ("+" ϣVa`wt:痖7FYh$#/@,rT*x<eAdpĉ̷!sd2!&6nK"t]`n_޾:vcmmdllD"eY&hީ)l~~z/ HCp}'<9EJEHym*ؽ v8qQ3򱶶&8xeQ#|<eyr@$ .o_֐>#yr9_d2iZ]ݫxApHhX4xe~ ,˰,  /:r~D2 ǁc$NMӄ'._\p烑[# +_dss+l6qub1$} qn'xx z3Гؘ 4Mc䇦R))LޝH$ǵZj.f.DE`\'#$x_ bQA#۩j>nN3qwŢbZo:<0G}TglFc~ǏܪS9R3OǙʕ+yٳg_T*̾(ByZ$IB> ^u zkو#;w<`Hd2izGpkpwF]ZZZ9Q,eFV;H$jHC](F>>.,hFP.|SZ؟x# +T &vwwQ,V% 8msu177`/1tPհ1L&&Ljz}ckk3RY,ˎmvW8+G)!;-Nx4QUG$q>cLO t`68G9DpBRԛeYΉ`quAT*(?{?je0Bk3`loo?kN_|СGjjJYɓ8{>R˃QBo>ڲ,t]=zi EDMq 9?Ğ?`bmm R{~qqq{~~"G" NXlQ]A zX~_O;v~pnnsss u魬x=zEQE"xHD{u2Nnnll855u(TE$۶m"I{STZUUOQvy4 RiWpD*2/X^ #!d2yfccd2FL@M#mXWZx8ԩS=vؘFpFN>7nH>Fpuh4vOFx0 `D)( #?{<~.ة`_#Q<ƨ_/Rj 4u1D"o?tr97$AUUAQҍ7~ad7qwn_m*oj0"ȯ]j5ի^z57iQI^VXaVX? ܏" z<ȉbj,k)= t2`ΎeaaZ vmIX.6771>>z'eYˍ:Qu]۶1 FxﱝkqRB,13=\vwwa=qQy#$"$l-Fdf_̒W$w.T j(,avwwt( ><_ēv'''),%[ 0??]Di_@>*lee=d[" $ 2\E"Pq2 .3̾nǭ8}monn"d*APβ,"H !"g ;Ƌ/vd3d29v{Wo`xQ$=݂.y!+ + (`Y j7,N34r@AeY$ 4MDQ#͢^͊HRhۨT*4 `Cx~]|j'<,rZ4hQaR7MBU!r}nQǨ pu,,,]z"[y>F|.cǎ B-WGeP;=zjJR)<am;ٳg__Nrwizzz>JH$2`$O!h4>fĚr9DQ lnn#A:j>8'|'c~iلyu![¢P(C8rP.ilI#"X T V v'SmVA$q__*\=yJ:G"!9j6x'nw<$%`A?__}݇D"^/˲a,錴桇;N\zvzި@=ض̛ ]l6jPՌ 5;efffD"ORY3¥z}-N{llM&<72+]S]QV~zmeem 'OhPpSlOUl,1\]]5VWWE;{s\$ǢX,池ˠ3yzXZZǴx1¾gYD"QL$si5ƍC&R<(MTUٿb=@J~}R.\xڵk›((u0#$aVXa& qh4WWe6eY~Ɔarvu72R&yyzz:5??XLE1^0 w{{[]]}:ϟ9sH* ,,H`bbB;;;u~h4+"DR `~~~(:\.]ױn pIl'ϣmAm$~*"NB𖷼[[[x"%`cW~߿e2 MbM>V񟙟d2r4uX׀^z+H(B%g<xO<}Y"|#?j>Gصcvӣ $'J/AO##VGH< + *a G0~xRs9@"s!Fl45$2^x+Ν{maa!ywD.LR 0Vw62̐%,cעxR}ob10 =T*xWJpwX,}{t]˗Z6DBؿ~T \\&!'*>#p[]4@_Wq*dwwbXu yU%m6/HwbuAt]ip+ʅ\.w*)I55{v:ܸqQfJ( &''|gL&nG^TT)7~2#b܃,aVg쳁}.vmwϲ,wKt]NϾ1`D' u4q? + z i$IL挦iQ~p!py77n{gr~~b1L& oˈHF6<,&LĵkאJރ%Rj5!G0`<9;ysbwTF#.T fs_E$z=FFDs`'Aoj&=.\x6g}udY~)LGQ/8Z?z7ގvH$)"y?l}mnn>=_TN q4</\.nJr4͆VU~3rimANѱU'~AO|\ 2"I%ѩy$U$ؚ mVGŊq~OyȴftdECe(r#G -//r`ɉdtHsY"("@"^@:ޜ>"'& /6F("rdY:qDX,P( N0 Zku2~i,˂PUR ReX5D:4M%bww裏~uG> |8!+ +X%⋯\n!e{mCE?ٚD^Uq04 ;< g7*^N^=1qF'Zο]X. FD5 mxG fܬ? 04Mg=BAC ߭w> 0AvW_4鴟:PuuZ-?xgJFf>,[O)g#W[[[ݯ|+Yz$7"ݯ(&aii L:A( MR  K0)\pŋWyL&=f$Iw9.E˲)D"쳏WZGPl7t[ծV/KGʕq;<$Aணk\UU^A~aaa៵Z-v^@l[(++xDZhf?Qs/ ']pۂ(F~q5DLAɨ7НнA!9v+ѽ7OZ"UU#c4N#Jakkrsl6:~n| %#S+<Μ9s8 ~É[ Vz"(pK7Y9((bRk5 + OD"H$h6hp] -uWxoT!r44t<4Md1[V,OATBE$ARS7mBIwns)and2P]uq9y+dlll6KU \Z_~X^^edw vp U*Bvt:UUL&l1dj=@D 鱵u.σeX5dzk?{4͡I<%]i\^T*i'?ɞ4Nd([;ls$¿PM95fi? mXaVXaNzNt]&Nn0Kd28i$N9Nh4>W/ @9ŃU2xje2f]$$'N:6hBv+nH$fZ v-"rjj^;ƒis˓ɠ/vM4ps}>Et#Ș$Ib^@@= [ <##A.QNv63 &4MqvU_4_̤nNͺdfgg}B˿=k88F3 TePyJ#ȞC3A%Wygb3'R }`3 +3^XxG,X,H-TUt|ffS>w=\YQ*`E>T*qT*s=?WZ]]]]mfȐ#}"@%R}X5{WS<2$ R 4qP{rXjv Z"^>ߤ~RԷgW +gd!Z.S6z|7_^ HӰ, lgTvk0.`x 8O`vAaJ)<X<a"k^h4Ffqљ+WH|IqP?ܣNif"(7EcT*Ȳ}t:+++d[; JFB*w[⏑X h]Cip2QJqPSבNxݱZַph`wA'@ ( ].)O}X%; w@mlre/HcjxuNHۍڶ z c=@X^^f((Q#o4MCDXu[~ x56r `D^{noD"rp BhmYVק%I.>~Z"ǯFH6HRG btA)A4 ^d(RUUi,hb1H$4L#G2Jvu]ٳg_~'l5wrρ:⠠RhwڈUDq^OٸL-MQ yԲ,\.G-BG27|銎9Wf2d2}Έ+ t=H4nܸ}ܹob_0xS&_A'@i 2Pg[7_GJ!C TʝLRõv|,5w? RHJ7C鞱ONEeE?Hcp@![=w# + +ﺤ\.'Kl{<< vndۙ;a;ŠĶmZbrz3"sBp:fIO==zpСO 37(l&b!I,b{zСz2GxKƭ[{MGӴ%_eE0.2T2,K?}*|w@NgY u{F_AE7Io;>O݈;Oo5/v!zAex]4(}AMr `rg{u}]CR$QzaB<E!$у={D<"L|iW*8/jF͠~$ Dd"q" JP?T% D?{rbwOv@ buF [/[C4;gn-}aZ͟xجjsa'$ +LMMunW<+yu D BXlhWcaexMe;jNHD"uY= ^b"D<J7 ZBQ(<Rqkpz6 P rT|ݟ}'Yݾ7>w^@$=)sAkF` 0\$, ~D$@Am& IHXa=џV)pE{c7:ߍExkkʪŒ&7l =b=ӆ 4뙦ކ9 {4fl `,ٲEK,UIUKeV"~Gčw#$&'eU|/ƍ{O ~B;897UTPՠN0åRn7-,,8TJzײ,xrl`.?Ƒm۳DqRha\ߟ1yLLDcA2NqLOO~6T?{Mqu<*}`p< )(qS;,C@2D2 D1?.PxqI2Mgz>ϧ㒗'ֽc:_C!|5oep9)ˮ\; Yt,D H2 ӇPc} 2X&m}>M]9s r aU'bItQ6ǔ%N3@Bu,AzS9w IDATu``Bqxй+(2PPL^$R]w|cs14z-Qk 򠵲32֋2!_Dln퇒- VNQ?sa8zTӶmYfIrjyjW1[ϖY,oZObT.?G&^/R0r ^׏)cEʫH^dbqszz!)_v]\`yk6SSSW:E.玲W'MVC%Pc$$zJ> CaHv\~ibww2flJ2 ?? iXIYiE'UОSH𦿗-  hZFB!Rʋ/'xrrz=z@}R!oVŋmۊnyt1^:a2B  S RF =-JYq`5DdVG=~ڷo6JDvqVn4FɜHȼR/I>?nx`L _sW@W"bƇ|Oѩpʧ]@MbVsЯA^5<</3P|`4 |zoЍU+]KWR*aRJMO^QeM}T* eX,X,rXm~nwC9<o0kZP`bss3mDQ:$+e!6TnUL_ 4](nyE,{'@LUҮ:MTOAN?0RQ,y8VUJypwwC,\b!%f}X[[xq#}#4ͩg}!ZfByJpǏOuVׯ_--(WH`0 y7o6[T8f(2uZv ~?0$VպaNEq*ۀb447V\.YU&gBUyKgWWWo$c a[*J_2 .|?!)~%J%y_δQ.OA7ʀ 9 ?(l`g f ۲K,C5TsA\TCq((! #1XZrCP9v7E <bg|"41 2/^L}N:p%P`J%zO? ^T&[>;#+5 .|ߏ+j+&''߾`v˲ZxV;R(UQzf>M۶ZeYv״ru1 8(z]6-oLyww5 vK>OEdW1aM\~]q΢^P(@y<, n鎏}c)He`%nV*fJ@"!Feꇰm*J8===[*XPcWTpW Ng[[[;ʮoPO0Ν;wu]ϲ,\v mcvvrrA败\EP&gVKA+WpZ5DC2=-i8?VTFy:`q|'> bssklv z^=zէ w?H@0Q Z-JPq!R`h 099YPTA(࡯k& PtJ܉Ln&]+|4 \|A Dĕn\,\.K>ԵMLLѣX]]^Z]RT`ǩ`0ޞWKt] ǀQ? dfX^˴`0r4/aW,,r$ f"`|SRdN #Y0`(N '{͌*s0\V`"&az?76ohI@e/6G8-{yWW?}}wXŸ90/m5K@c9h 0 ◝KbJ.wX9X],A;<7}_EyT333<;;%z|t](cKR RZ/~#r7׷w8 ܪ-6E(RzxGR5Ga-&5^n*/ JT;lfG"OBcrY Ѫy 1U,goIQ:9 q!PKRR Exψ 9jR`&OCKa9UxW*47}'J4`.@?t}6Wpn"0ش~r]?}ǯ'~Scp|":Tgj9s JdB.bmXC 0Mkp=J~KǷ(CX?w}2Nğ韦_]TR+eTP,Q*Ptp{o&iWDRZ={9O3{aRvv3Vwy?,..~BJyT*uKj̒p8Du h۴rW4j#~!R 2&s}}Oz.Ij:]jU ϲ•)4 kwDy?J5cSILfMǏ<ϓɋ]b(ZrRd|lnnn˗RJ)-˒=^___` a: fɀ0@VnN|HSwR㇑BXX`.,`FGya$-aiB2Xr|1ȄM4 BEq- ]glzӯ Zזăk`AqnI( mlsi^[C a&8f$Q%Ɵ*@ۛ= SDh 4Ec #c]d0k?= t{ p#@pyp@=:XQ?Vƿ'2i;~d^s۟vpLu! n8p=j ҍk]{ҡ4 o:Wc6#.Crx|@VWN"",,,nC:QzqG׾5,--XUFx<v155Oy&&''S+ 3 b:ApVannj6}+bDR`55yX,h6^)?av$/011^ciiIeaYXӽD -//SR fSX]]\M?WM(=buukkkKc* $Dd@,QPO8n62nܸNz,;:a`ԏ!DXŵ1])#"gMpSSA!P,QPJ뺑ǥ)%{tAkkkfsK_cPY73̛tf D`$`1ʊA6:4l{A<@2 Goōz$=(2 hX? an0Du5{72/@qx=? k9P'f`)QjaRA`$,ghLA@^Pq#>ǾH<^7` 0 nNuJV]d)QL0m8P aCa 211n;4PW  ȼGjۿx_w]0 DZ7ʵ{8f"f˸;ӀPƥvx'S@f3gΤE*VuzFN'LQ*ҀszS^Ǖ+Wp}@,DZz'8;UQN I/EGT*XZZJjH^,˂T*amm-qD>>֟|A]M?wPoM^KT<mox.VWWdg[gVsfRC%pbgC@!d՝O@ W9  CMu{FB!,Jщ'$%!Znܸ1xG~nc@H0t? K⠅U^cTIsE͚`Ĕ  ݘ;IvG'B12+` a&ds>nK&5уd'Ox?v.}LdIz7d zX^^^[o_zm|MGT@SBElnn}²,,..b}}J(T(#Gd&T^K%[(k̛`[519r)MU|t8v]mIQTeRdN)p%Hb IDAT+Ryφ`޳ .:rYuER:fff2V$tR_{x…rllN>RSjby+'''3+յzE1:1 \Dž[;g բ\ BGp،ͤٶW(d\ǏAVŦi"n?/ch@P!j1=u?sWe8&8(ueUFȁYC $w1iڧ6WϾg8 ύFqdzgoY(BFќ8~Z)(N{wIo{^Jf! ÎHHP>s_HyA`A8~0 Ea#9Ҙ5\ )3F x_yssD5b`HJu.R"j̠ tA8v~W&\)DBVqyG@m0Ѿl|}"J9Y l efϱa}d<8r +O~%>y>,A8t:T )8y4!TvSz:><[{ pZ}ҼT*^bmm ;;;V8vؾJJ%t:b7n21111@4͔ef0??cǎ+ FQ4իA0==pB(lڎERF )*d[ اgf_){5̠ŋe\kzpɼJ+Q̌AƞaZ(00$ɥ0tYlXWH eZ6rtQn%3mAVVVVOK=ЫO '}I"ܷ;S-0$rL;ep>$,M3t@5e"@F`, |ئ7_+gBm5OdتU;$3?? o{ofL9O#Dfs2 b I犯Y'ؓNHlސL'O}h^LFĂ O=C]a^{=uׇg][$ w X*\#(`lobh|HPx z}t]<)뮻KAWjEcrr2G^*~,洳#?]Tuyrrp8YT*)08ۢ\upg5vvvr0jdVC9h!QѵȟqD^"Gyٳg_755uVTU uLSnoh~j3 .ڹ4~ m&1%ݰ9.3q&0K a #g4 b۶P(p$^g>s7cd?Y|7",1q:q čAІFe#3=FRNvUJZNd؅b,#`CXB-od8/!a@=p2D ī]ʙwVgka8< 4 Bd!4brٛa.d򝜖(mmYAHӤC(H qy@ DuWKc(s%c;\ikyH%yU0 ~*"Iׂ@,SQ)Pd8y5iS9 麛!r D:6J{ KT!(U2Ua0L9p*ْf4*2'͞Tr3_&~$@[Ik=02 ($Rn" vx@l#Gl6`pqRڕ˸tz^jئ:ьƕG}wyrvvZmT*E:4M\~kkkxGqmٳЇ>gy׮]c=~VDTXVSG":m!?q01Qt}̤Փ<ɻ)\"R*n[e' ۶ zfڵkH3Fq/ jX UG0 QVn~G]._vQ~9xqUG|T*z뭯j2E mt:;{]oMm2mwlF:2dd⏡lzPm}DBbBVzբg}/b$W`^}'{NXC S8T|O谗Ph?M(v$SeSc8xAŠ{ 8LoV˟˰˷@[u$p4p''2_~ٻ@7d9p+ lS̔ M q?C0p  ծ\]oFv,b*g@X6ô]pAV1,9.(Y9r]d?3$c@vnvߦƘ1 X9 `ܷw8 &8e䥀-e-GL92Si,,+055Id`"]%Ω~ `HPܓG*n F{|ӛ-CoÄ?1 VL؈EɹQrblGQYWR'ZRVJ5ioA/~WX)X:>6&&&2KKKh4X]]M=t^-3n~xΝYT* <(@!y\pZ wun}ݩV^,3U|cx&ƚ,zAp8O<ӧOcyy@fN4`I{@r =J6E42 ἷ,--^7`fJPx̶m\ P& c ?~:jUp灑)X[[ٳgSA>5(5Na#!s!G*[(SNU/ٵZ-Rj,,,GI8@;N(@wj{Ɨ= p"B8jq]nG$cJm @Z^/C[xNF"S0XKk+Nmd% i%M!=2Tr̐[KаBf_a80m]e`J 20]a2`DS_ v=Wp];^_fC. !!ejm Y9n ~a+>пpoLT+8 _d›QxPsCLwq7${9AR R|D[8+'Zp3zBƉ$TSUR4]/dTR0M(jA1 yd| =e@\;!#`U9Ӯ{$  ?iYn'#>j tZ9Ry}I%~8]JG=8Iz"#ȔTeI z6t077"˗qq4T}n^(1R,//G˿_\_911Q,Rª*0>oO+_J,.._*8NZt*XEN u*Txꩧpҥ4;3T*Mozq  L R0255vej5;v }{z:.'Uߓ[[[o,6>߸qW~ Ro5J^8YP0=c0(JBEoxzJJ)ʛoGgff^===V*xe_w܁~xs UͅVOz@zmmEfOSD,0l(n;p_vrOUq'xa8̏ *@@,.8 ,ɳ%cB{=Y@݀٘KGA\mmJRE~׿toQ|kן_=aC `" `$?t~Xv?45dƏPrdO灣!dș^4éŇ XtkB2ipG#[Ҳ@lM@#\ȭ6^}$}?7WD4 FC$XBcJ317lg/t* i== `3(>z@Me\b/J&_GYtjpاNT(,G e"WJ>;)9=_EJf4qM'< Z) Wu:NEבUՉ0 Qm듾ﻺj~衇|r{py|3GPRJGRn|_իWi`O4z=<#q5ϣu]!j!*qmPArAȑ#ٹuccS7TqZ뾳^Rnj) jez 7nȀp= `t#l^7NG@[njsǎZGj3ut]'8Л>7WGh@Ϳi^%Ծ'ڋG8}*XS $Ryk fx_W?qw9AHz3l9ߝFz k#D7kl"EXzh\E )ۻP-E)'CV/ nǀ <`XegS?Аdl:""D τdiͧo_-i~͛kkQ{4Klz(!h0'{f4q*>/CtWf2 ۾- I7.# *&9s ! :R4 07~}/J% AH{ob} L*-t+0We @e w ۈ:ۈ.F%R>i>״νo!O\`~!Ë{?}hU`[̍T&B{NX$~T@sd͗Q&310vQө\c7Tm+Gl$e ɪLȐ$I:[_U5T[+`_;0Q #ȩ~iS`H?Hb9N xi_Vرc1{wFnKKK?ӬE`|'O6#G^=#=PTU~X]]MG]J mݟ!/UɊ~60*%}ĉx[ނV~|3N+#zj~VF(BNi]z=.+\VE^{Z]~r\/y\( D먮˲,?z+VVV^5 Z a@vffnN;;;hZۃyw/CU>Ę ucǎSNJSѣGA n^'qTԔYThY4 h6]ݢl~?Ea fuv^^csqyg0 @P7J+ҕ0H0tMx*v6 R0BtVїɆUzDШ)!coIj2g!N( vOUcRwFn\Fu5Ya:4n{`0caÛ8ALB1jf~sW#fnʝsS@؍.2p] 6.b*THSoe=NYՊp,a>G_&Q 2(FAH "R%" (i`  &,IMA֎ߺUH9T70cſҢH{ -~MM{RR@zz(_lFgy?d`=Dh xgg0l?TpF \cZF~5O> Ψ[yȨG;D f ̴ZCBwVAOfHbeX*"ٲ2^BT2<9xø[>2?g" fwvv(Dc QmJ'||8AJ) :ͩl"NT^Q!vvvt%+󰳳qƾ_v5屡*.A`{{W\c=<zիp-\.T5i\5{+3bJj`zjRRT@Tt8'O*uRT*X,T**\;v zzj ~/eafff5xuLOO}jv:NZF4_ЩTuͦ`~-gΜ92==-jʇ1T}LJURxV5)v3P/O+sOXƩJֳEEx3Cn&;6_*uma]Bo pgړ&j!ks)J$~<9J1$NrFa/իAn iZ*r4 ضyzYtp!amm fJEIhT*^"P2 t: `]Jo:r#&2qdR= *Wqr0}Ӄ -jvK7 <Þ;]{`I@DHT"-)vY%ʼn]Dme'.+dKA;0l=={ݗ}o~s"#cNUOrﳴVP;JIWS'PNGobʟ! CNS$ L ~:'ҧ=]K:r"P]xA @qg~҆j1s! Ź(!Fo2fMQa-h\b n E)0b{lXxt*Ft1餉rApjVE`T`,HF!a8D7$& Vuc ]YUݷntjˏy9&H@tش-J^vGJVG 06 I0"DAHET?>u'?Һ+QC@׻jTȆ1BSzXy,z)waqKs|"dǴl3FVdko@3ͯ:}R40ڗ"yph l(y\tǩf0eAXaj F)L8BGM>QXߖA|<U^"s>F.[iXi$1=$|#ʜw0P+ρ`x,<VWsG6gTt2fi{c"ݾG&`JKYV>ƕo@F~Ԍ_.xk[!?@̏ө0 )'Ǟ'oeAU sx?zb?{׼Ggj$lm`hO--6/ٌvEa?AԊ)MlX y B{yL-dcN B[x"!W9D~ XA.d w_Q.8[Dj5D xzk@a838d)ox?V#F1!&k6.w7 PQ ?JEzp}hC=.fZip @&y8`NnrE4MۻIu3TvaY".X71==zJVt=\l6 .|}eee?'۷TTRT)]R~//<<6VWWDŴq'Б`>}/_FR{#y'?Oc߾}xކ'xٳh4}6h߾}߹F㻻Z*kcmWr9y;Ir5a~O} f9`6*Jf4"%]=>dVaHq.sːe֩w004]͢$GQw (a"$\2*CCI)E$s""F5fVgڵOTQD+[sWRQOf.eΰ9qxk]M=bz FC a I&6N " ]8R\{FD#h߄p܊]J+\}XxH(c0'QH=RE=Ӕ=#2) TO|Y3[Fu8 )X#=ʱid=0Q{D2Yž[/Y,M0 (m28}(3le=)Q.T۸pЊOM)='0AG,C|/Jz`,ogF h~Qk- [03{F+W[+O0HX٩q0KD~{7@ıRF;2h_D DQ!e_ۙI^x @3 7Rp Dȇoæ+0Yx SG.!-p͗E9{g &F]z.|D TRiXTΰ.'x??7oӟt-D:$'%a}o xtJz!")Lz1;k+vOACA@.|Ǒ#Gpض fN>EQAbcc0s޷@V#"ta5y'a6RJt]|sùs2u {m.1 $Տ ZAFõkx1 >{9loo'F|"Z ϡ^T*e>7vp;~j5soN Cؘޏ.IT#1`3`AAЇig[0"a ]'%,jlDaW"hMN+X²K|+kgv8f8o`dc5!7A_eBs *sFOAk] `2_Q!=u7ܩx~kc?ˬS [ebؿK@\IiD$#2{ymƀHBJ?9ӍHp3@+ػ:`m vWF&"}~ubĻ@{UV w;CFg}905Ø2輆y G@$Ŵ%\JKKK`flmmhL #"evuaIQx},// ?ttv(zvmmB;u0 3*Huʕ)MUTR=&ߟ,EϺqvww133-E"k!sxÇVBX6\~=99t?:RNf\t\^|>,6+uڙ^/ee]\v /p)<ØױWnOLW`qt]+'$*WB-k7T@\A&a2G 4 E;^(L4Y/IM>ZW;$ٚ-*|~O['FQ7xJhx [GaMiuLTNzz1 "D{] :YApiD ^&$ f)):gGͫKM=dwr8 X#EsdmÙ :_ [4(d(hkoaнg@БDg9J&nȨ@opgA.0Co-^875`-?.V_#,V`aI$!2;v6л;~Jp$8#< L.|OZgTƵwb 2oƧ>)&v?>O]zWjAr56'$I #>y"+F>5*sCu;N/Eg=Jjt~=t{@GF@W={ٳg-,,|\.'N9;=|2.]ׯ멧[+^wG]u`V.SzXN{b\Ma֭[X__O)Lsssx;ށa_N#zKX[[L?&M5tjRy07I:}YLMMazzz S+^id! SK%|g`ZrF9l\Cc"(8 @Lo"Xǁo`b޺C+'n{$%w1 #ҹ*ݡeF2~ tҙK#- ־;opCV pb` @9b@*Ӏ3ʓC8Jʚ;W&Qmx01dR t౗|$! 7d"q ih:"mXɠ t iNR݅#R4+ױs]e UQFي?52G&G8񄵫pKim堺-h\8ôa~BX/`;@~]z/ȀQ,CfU<ƙ h&z'5@(n$rӻ 9Ꟑn#qx`y+av/r:i8U鵟aFr=)`*ٕOBhlmaqj98!K ٹ'4F   a~ *L6,CH>a/n6b^:M䣭G{^].iLgtwwb' J^| -n}/~:~9rz׻PT`'|[[[i -Z4OU41:FuʶmLOO#XBll[Z5}ƍ6 }\'&]`lnnիW{VYsssV*wbz׻P.o}+" ^<{|c=z=+M' Ͱ~d 0wRSx۷oZSÇV *42+lai:7kn''s. =WMk!NȆU ;p43Y P. Sp ux©-GB@$T#i;qNtwi"F~:8ѩ×mU9kwf&.{uB,, bŨ*Q@93`诙$2g/#gl35p%kn8$Z7)62\ IdhwHE{tWg&8,eeTPD?"ko"c zL 5aN:iN|6͍Fq"iJ6gFIV ,u)dSQV|cN`fDi0*=Ř(̟sogۃNg}fmfVCm&mw8l m$ׂv^hpS;U/?=߼Y94q,04 ,JpxIzaC. cn8"Q 6.v0IcrULنއ1 2O:`e`9j*@Upp* 2JHqqɳE{\Aj4ڹIwZ]g weeeСCC㰢.ׁ1&yo~D4a6wR /~WF(WqPl6jVvS}3333R mJW"{j6˗/^p"&"i+'NxѣGOj1 ;Q À8C==pϟ˗өJ>D*ԉmC]檸z>nwYYOzl A QߏP6sHC"^FkJ"(o"0" â~0BGr3"S4mkm]$a@;HM'L*LZɤ'%%5vcQ;E9N+$`c9Ӹ%FS1 o]$,@  YJ' "od? #C^)hP! ⠧&Ud`iChVЏo&QkNTN(0)xX2d`%`,膉#p0 Ȁ{ZT`)D$N2g.E]KɆY:U, +X$UTS|hI52Rb8wzπa@d9y?N T7[O~t L .# !Umxʇg3cYsX/ѯAG2e~2&U sS7;U%aE`"K2 yqeQعvo,  gXT8-9I2m^ IDATp2dI|} v[oO>%4h\. " kwHB qtiHyM zaoj4lMyܰ4M,b]< eؔ~b䷮MF~:aq]dex~T*=lY;Γr"w80 t]\~i^cT*xߟReo|V+!wJ(ovBjԶI/X\\L>Y[[[3' 8y<0T)"K2^/>|xRt:i3:Զz= ( 3c~~[[[ 灙U=W*=O:5SVv]W !Rwy{{כ^S+˲jKKK}6ommX,²,bjj*#B}Gí[.=f'F?\$H07JY9~e,?i*JJ_\Nu baX1$D%1 }Wl ! "4M_HA pZI(&.\ =D녞k8ւ.RL8)(5G)Z` |G Z!S&ǃs3ɄH-SԲs$)Gq-eQ ,13-إ{GH omێ;b͌QG*U~ )"j`e$ 2RZ0 K;ƜI1)(0k2b6ȃ'%.at.* 0j`Ή)8X_9 ~J#*uTDv0͚!$a†={eH aW3~}y"yv#H 15`0S͙6{Fs[w=UJ ?"4NL;*0ߥg[?t9nOsWYti#5.~kE4ge@G,eBJ`2v{" &qNy0Uٰr}kDͬ ҂QTP; 1PUdоFx,o\"Ean`YG.tXF8,# :7r6ow].o@H[[[aY/ +U(_^phwwmeYx ) ᩧ88x {1|CpU4 \x1 Sq S*^A}eض6N~U!rSŢ(AM{s> [R*5qZ4*y^{Ln&籶:y) qL۶*,CVjx{{FE;z:N:YfZBy7mlllX,Ӛ;Y*#yP/R h6NC'qTC.vwwaYV_fc@kkW7go֛rn& L,%—CUuJ!ھo^UF4P합0lMGmL!1` !&첰+pwU)_#b4<ʕi=5JVSzXԬ@ǻX;g2 kW ~c |o8CcDU ؊} ;cT0&'8afqQ."Á`F<2& 3Nҿ {{kUA4XDmaVL>X mhBԄ`0|T* y̢Q9a \9'8(gAg2K?o4tUR]jr:QM 1e涳MZtݖ[N]_O?t >*$֩.v^di˦iɓKI;(pe\za4}ȑ#xQi8tj^^@)U*QUƣ((&6z!R&dfpLK Xzp]7EQP(<]RXK}LOOc8ª؀z=̬lhÇSEѡ0 iT[qt:W?Pס]۷o#"߿Z--u~R)ꥀ2}Qt]yJSn7ICQ *L.]YSWO"&bBH‚;H@ áׄԪcmwwpƷRkU4B5izJfwD&y Ok R4r U}7"oo'ΓD?hGp eZp c-,Lц",h21Bcgҩz:w v/hDd}x%>NL7aqlpdFw^p w!> <Oji>& B|>C6,,PJa: $]ww]ƥ1Q%j"9DkQ!β#~7wK@,"_ f%Jd \̌6E~dA2"f5') NLT:M2g.( MS"`6`ֳ0|qc|EJ AӍإZ|ل ~?D⿱ ?aoų,{i^uO4ijDb:i ;}yi%") ޭk`:揽l 1swh1s`eӚ1ܹR@Z># BQ@#&5w.ߓ@K/]R+9#SiáH8_~F_qӧOuqjzzz.)Z ^ !yX]]j&ibffy{pYe]"ض4e\}򡃐#G EZJ#8Rn:m)رcX׬Q: P+W !ߏD1& 7 cZ']assavʊ^5 pMT*8p "kɉ?y,)8n?|Y,1;;jB~STJ9aMǾ\.Yg}a$/>g#K 7^Nu#wHDʚr'9wU5e}Dw*%Q)~4o$UF4F@,˵˄LI"Bf#5Ogz ==FޞӦdXNz"Ƈ!'~O$,aS 6-H! KѪԧQ  80$, 2]nS~[0 X,xX!M/C>?6BԱi>AT4.Ѹj.H#af.LN20- {PV&d2]1*@Mf:9M 9@\z(>.wE ~gΜ(X< eQ_v3=> b!ӧO_XX8ŤU4)177Bg3k~1 N'!:]Hun:trNzƜT1R.]Ju=l˗1 $5? C󼴘ÇQ(2ӂrv3gGI%h&Wr^y036"n߾k׮@¶m<L[n _B :U-|Mבh4˿܄xgw[m>?(j(gQLCNZ IM, `oDA\TpeEmD°dŰQ}<.VȈÙ=<#a8epoRtx DzIo\+*[tmNy2kwIw!4{I0]Byn^ E{Ȯ,\•o> (:?8>l,_Gڇ5;m$]rwEۍR0[ F!o\GHL[ fA^z%NW(DZ=655u:.SCX8X[[?yd<#͡P(`ss3 9o&g>ש@sssT*$|@"z>SZ?^V+딦I | ilB|0ѧ/2˖v&heY8p@ dUW 7~yii /}Kvv8u,d9jba02 BeRȱhh[{+O2 3M#m;r'r'm;m۟F.vK9Zgy94;>`6^M-&f8Y>>[agEj W k<˕,׌g,I]fQA@f<61ΜGE$CPI&@a:r)r@3TԍZ NDu9mˠ{1Mˬa&8wpVG:q8((u&dy ϥs8vsԜ|P[`h'?C o_Ci(0r3V:U2"{=I&>rZ7`}@ , ۰˥4&:q$OaJ|rb:J/qQnʦ'sֆWZK-jN  Ā 1D |X^‚=!p$cM 61-TO_ D}ߌw' =-6JSB *`[Ѹ3ŶNqp ZSR;dH-\yRI>[%-JM2Z΀>zvvv033۶S-n8|pN @ĝ@?8<σ뺨T*hZy&vvvvyD')5i6xW1;;Z{~h8ڵk0M3uBw4P۔ϟ:>rQaqqqLpQ.]VP_8 -'ƓDY~W? M4ȶquq4ͰVn셳B(\şI%XG)4o>N{=@kʿA36L( @|ho\@CiY~>tQCWo~ ^[z}!/%;NZ(`=]B Uj3g̨T*V>I3ynF?z(BoNP{}N$Tp*fopA&"Xҟ2RW0ސJ>{ԶZ N>V 58}:~k݊' ˘j5HYY}(g a:ΒMhS7Dg2+ !P?n?p3z|1[Au1 mgEU.!d?{n&,f/{+prO4J +lkV׼ P焹I]ֳ<f]x IDAT4训 :r -0Я=h[8Uf o~ D/;z+HKN*@BĚ 4V_Bw)0) a@2\H34}?{$ aX)shH\5t^GW@d O Fi de|0o3 2`X[g)uTd:I.9RP80'/'Jfqv{RׄƧj^OE_Ȟ~4Fu k:Bto>]9Z}_/T5M6*KGAQ"x:䦒ٜ5@[3c9ĎǣHBUF&~V"P p`p2HH?Lۻx M&|ѣ |mGa{7Is`+ fNeYxUAkS@/&AVlmWJBnt9!& ㍽}u@hY_V۶N;n.-0nܸߺu뛇~^Jyݿ GZX:r{{R7o`doo;;;n͑n-D CSNvJ%e Ӥ(8* R0 SqtvQVQya!D3:+"41{]x0`60lsӁ1j3b}Ə̣VƜJ@ErI/b{v5-!D>0νa +Y# e"HCԞ 1{ svw9ǂůjۺШ,g@0>ȇ5wd;iBw531{ܾ+D"ri ^jKG~os4arḰ%za:G7gpa,+ݗ^]lMмhmy2l`5g k2-Hzu^&F^ :rSv@&wr!a$XSQJzH)X^&j& a UP)R~eñdP76upc[^ 4j9>4)kghLTR2w{kD,L=!2hϯO~Ifz7AkmPRZxF?9OQʽ# u7vV@ 0qS?k0H,4 +Q 92 eRܦ<ش!'AlX/&[1\$hHUA(ME(v)[i&E:(OX̀~ fiھU= G%͚dVQY:g 80wso+_5DlW@& Ъ cBG'WhE؃ zXU5 е[y9sǏjU ׭xwޓ-fJ]___O? 0P,bz333xWKwEE""8p C Wtr'=$0kQ I)Z,lq ":CM>Ժ3iu%x[F.W$@ྉHJ,Q%/ixv{,{F݋n5mY"%S$H) ؁Bk}o~Ē_DF@9y*Q̌wﻗeYlKY!P,DX+Du?t0e"n`¦PslB;ϢIп/ xf9LrӨ6q3̀=qρ B^3f6_䦦4~ 0H\}V2&o c$'0X8+]fTFn( q{̈́%U2kG_ ;R  [+l m X>CQZelq0`,]ZhQDKs\ Hv%~a=Dg`h^<<,qh\B+,ނt['XK W[+( 3o :&"6w! ;5{ݞĈs^K?]m*wu\l3[7Ah(,3ST zLH3c| >5o@W]]ya= &:E;+$(\L2"Q:/,fe2\"YYz9^Mz?pѠO  XB*(| #CPHl*L*Ro]TNiKjV 0tp r@%#Any^<{ kB0~`¼SQ;ƥc"ЭѬɧgEskkh$/2@$!@Ltt]=x/jm2.FUyNPDxTۗs{$D/o)*f @ tssB7o %:947OTA< a HAv[p\}2pABD2^YOd;a w ].4n={5^lU`wwt"ksQ[Iug+$CU0~"2 Эr9|u:I Yz+6ԕ틷0 *ehѵ´Q =Jb+/8gT&o@k+ad kwN/eU$aa6 rIrl-2Ѿ UVua~hӆ^I|+NDu(8F%=T9 =o"㒺mpZ2q4@baA#"\xikYm=5aV%8+ _tw.e5I&>zA/As_K$=fm;KDhTuzB#dSk)\Ma;0(l ҆y3;;{`bb=bu݈AqhsssϜ;w~yGx6*EhϜ9w'N, iZ0;;ZK0 +ȺBů[v]lllCلm)60 ƞ={/ǎpo]ױk.?>T1p=?VVVpexbHԬA=4;F ۫21$"*6778u]4MTUJUzU]122)%V77ͮ_òL*l@dk+C( H$bJҔDL%\$Mq(^Gkzm q<Ҙg-(v?OH!0JhPɰ3-D^,ȠJLiR%5}`W1j5#5y HwVn~( GI@@gu,%0w@lf V3lC]'Z뿒0݇tza D1ǐN=ѝh=~ ,q2 ]nSu.3p| ݄fai e=pansgMM$,׉ v'C7Kƽ >wSG I 0k'B ntXښ0x'9h$tk7 Ps[&t~CUR"*z؞vPr\fI*Qyp }FU&uM .½@PgBɕT!%@:Q|ej4 ޸`NlRF KwԨ @:KYsA څ0yh$SC.ci~ŧu`A3?+Ko3/H|vN Hr q1/ٳgn]5)p]6._xчKAX6nӧO_\XXS.ܹsE){@4 b#TU*Skְw^xח|,l:t(IZ9,--@\. `jhZvp]7Đ zw=ogϞE\N,CBDI2 [m;sa|Ͷ_?Pi%zL{dU),T]"CLjʔOS(_)Aqidk fu+' ';y9> czʻ<*ćI3wfH \^',"-0K$f݂UJ]`tk*Ӛ'] E)rgڋG~ϬQ} M 4Hҏ~40Y:,U6_~k-yTa֜_" *aARXew(tHHH4}׸'ya11!ԻM:UuIpr34~OcU~+P֯ i{$AwNXY/A'4@zV$j#-3Lŕ+c]{nˮy[_"q Y~Rd1B<=xOC=q[O**#|@k`+ Wrm羠bה/?~Ѱz9yBAj>DƟm{ҶmC s[cǾD)>ӅOCqLI)~0ٶ MmQngx =z43nr9%uZXX& y@!8uT2b6*n qxDMϲ'5!J!r>Ca'(`Kθ}lqBYQ{=AG52hPr~3>̡DVe0㑞P1Ʈ+ 4/=hM5Pck Pzخ0<ŠlݰRSO`xgǝUǮQ0O3ű)QȎ5)6eYFy/<:Dn }X/No/l!.sh< b ?r({ּl7|#s*Rөf"{2Boт ÃaA? .cc!% d;[XM,: iF=v@4/{[?aB]zuF?5@]_tv-;=Ǭ,&$"D/766įGRU lIxkkܳ>:4Q,m4dfݻ1??u--n\WbK[u6#;'=~0MBp]o=xo|Ri[Y@`6뮄Ξ=bc[.|奺ՐՎwKW:+^394 T牒{@1V@N=8&pPPRŸuCжȜPE6zF DJս`A)`Ezһ/Nc etj\$>GpT_M'֗m/DwCinkA~w;%Z90Q)})Xe-B2uOb蟆z(Ot)ka6Y< >F(k:8:IDI7ƮRUuyN#~|d9: t0sW96Mt/ƚnc"dBSGx|3(KO䃄~my IDAT鬞=xO8 ` 0H g(a໱_0FŪ1 V5A?'שe൶`T)7ܵ{NU}f2:F& h4-Yh.^r``j:f~.*ŢaRAtOò63 e3;y. ϝ W\oܱu?Gе"B3ahoblX=wu[a+ǾSȫ`BƎ^550A*Z61թEΉltT6eK /ʳr@?ywڶg]EH)1:: q`Y& 7$00pWS$??;&C=TರЗoQTh4pi4\w,%ٞT6z* }epIU|k{40󁋚yv7}9tD2 ~TzDWLtVD>߱E.>ܨoG࣐R+Tf _"pR4/]SoWyieDC llʮ녣0!]]{.Shc.kx7J-ԟggQLk,DE}8l Y ñmURKlHaxX_ $fy{g3Otf 8$ʡ z.aY} FkI+T/_)Q:uԈ4VmfYh#p+32XzCS#K rJ=5%Yz ~5r8k'+`[Clx,@P'0ؤ5s8oe oH&U{-p {\7d7^S|; H&sP*2m =P ,=!H xםR飺j:ʣbqurwR !077Vۗ:fAŋ!z6 3222WE+49<`qq`aa!ٶ,Կ3* VVVUv[+ǿKؒ@Fr;hêT P嬩}F*.Ia_W`p@O!w[6f'Qe"&0QQI2"\ߕ9vp =,1z%654bf@SmZʓ~&X֣1"qJz ,=4:x`tD4M0 dE/B-fy^{. 4KgD^01 \ / y2|2ұOc}0O ^pPA @B20f,֔sS1M yq8X}`>/aBҪTiu:ρ0Jw'܏Ġy| @D2rRd dAeSìJ^('K4=qUKI|l\z<|2pxqU.6X@TGԂm;(<F]g:qh뽻B"CЄ?Vnk` zvkbhoZdIe)TQBmF,|2du?Ri][t-0 e#\7dous:r^Wc``^w3VU)H61 Zud3,EQx- XFD`:un9)e!.U(DIŋ]__022}%&a`ǎxb*W0dEZXXXz'U bl n(x㍇FGG(6BӴh.Ռ)%Zrgy>,<4Z\M UnrrV+͆/Ʋ3Ebjvt ;R3-"'] (:.*HLsd_Yyjj$`lf]P"ދx5td %.nq v[Vۑe'eL* s]K5fΔa:F_@Y.^s `I2βyN7?Mkz]^渢 LB4AʈEe|Jfs_]? 3]PGR$oEy)8BW҇!kxv87a#>9~ DkE }EP^WmpoSeQgX;U>cyג>fP(Me5NUc D}(:4#l>Kn^D+8LD_C(T1F$kaQ T#`hh @ 4Ӏ&1v.YD# IW&S)̜ HQ` k. t•϶`/z^]Ǽɡ5.>銳bٙzW t:^z~u:VK-!ЫUA }73 yy$m yS*8"m+%xΝM]vRVm'`A ӧpª봴tA1%ajj Ν8Iq&z_z/K+Hϻ$uݔ婧z7uuMj:4MpT~8y$\Uc>JRb_\ږڛde lDIsM\{a$1%S0Q&ZN pжs;z$ ITQ5^tc'Ilj, /[$*sYyW9@D] Dɻ{x(M ܔ:Z+$tw­χ9Rd f wQ#ps" *Jr4ӄ'A, 78TS4z#ALA3||ƅQX݉~-1tVOXz`-iF{D]I[rX0wc$YtJ;q(iΩ'cmaV9 !6T_Hh܄t υ6 ){9筏'KK0}oV+ |~PGz+SzfT/|)؆,:(~ wBs*bLtrtJ+s^ m8ߩZ"(@ @4{c s09;ǹfx Mc aR0}T9*PLœÉLg<ܨMA?4jR%/r`vKj62VP^v&D^E7#p_'2u]RJ99 4 q11jG `ssvj۳D }CGy;w\.ۺh$RJw̒FxuuO<Ν;߿wR1,RCCCXXXH njH@ Sp=]; #R= Vҁcwɒ1 0Nm"s F$@t )bPX+5=bYRœ*.X=fcЌ0Qk-E,2 ^¼^P8*"TWE᜖ği#Zq!slf؏qy5 u#%0h;'܂7I&3 c &'ћ~$e -rD{OƑQzۥ7D~ {GI"I_1j>U33,hr-,rF 8U0ޜOY]8Hd phEu`T*h2V1屽h /l4Gy^΂;<} H_ġw}l3P=}峐CֽFuzguCKY?{? P`q>fו8%}KJeI3SJܸ'? &(D2l&0+$%,3 ] adYJ7,6^*w5`8gώϕIdJFȜuPtʠ=tKiVv|(3L9e}0z]QQt^A4]6N3lM$30M J(71 NDiuVZahP*&⨠M#5cmb`@o[Á,QA[~M|gofM$)[V¦nh4kqUW ~y9Ղ|߼ouR%~~^u2Q$o:tkPD$|F#8})I^v iYuɓO8pq;MӬj*PA }_?v۱\MJISݞ_Tdȸ%gU JYP H316nEv"3~"mK~'_3(;ӮASY}~4є"wgәԭٯ',M5;WWf, Fi\@4ZdIJהM^4'^yJ)dF6P# K#Ee9Ÿ)o)}6ҖzV:F^,i'^xԩz!ɼ#:d*!i H`÷n3XJCir~~Ri Nk VX%:QAY%кDﬠN 3:vB9i[0E"38 y" ݕSp+(TzÑ û_s@(g~o;ǝ'QuݮΆh@:NEvű}ЄJ,Nsճ(CvM6.DNͮt{IDX=w=$t !(?IB%4W_B7A8r3qC:/d{?4ZFV9 qESwL1@^x|YJ8$.?}80$ n-<4sQRrtȁ!|p !SHkAa]hp]kk2[bQlk*1P00=MTBƶCJ7?!0Lj:<=tʹ5Qek >l*!|C_IP~8< \bj[g>Z"(/GJHd XRQ̯qq=aTW+E$]NE g.LR2]QH  3趖6!pσe97|RA,#FC7(_bBʬA/yt;`Nj53Ǭ?H ss؍;җ`3, g2*ؒYꨀ dLB)z CVI/x[$p8)DOi<*H`lp|gO+|`YE3GBD.`P(BQσ!0sR4+9NۼZKC$LI慧0vBӭ@m=R'Q(Ӯ^腊"I|N2R0#Р$rqOAv&R}u( rͽzQGkn8_bOtԁq]?5n ՈěABF*֗$Qu# i;nw#hnLR-(`,sQsЈ; [fMBΡtRz Dat'U[_4F NZZu2C;Sߚd>־1&F5.x:? 4~+v v-^'3'eKN?;D1t/< #[j1R.VPq3 X< d!HNJ3|= s>W+@ pl,-a)ts X O"R#4!H{/m1> !aobÁp@S9 Z{Ε=8P}E}y,ISTg@H@ٔW r$RQn:e ٠F!ePƉ3HS]wHS#sY>Ϲٱcplp]VO>V30_o6 f ._6 [5 nYtkCU!j?8U/Ez4>sD03$HH0]8vY0t2ZXJ,=yc`^_+TS(cl&8s`Ww!M˶E{0n~\ 0ܽOEo_YvÀ r655"0^TIRpt*S!XDzN_o!m,A,Ay^﷗Vo 1zG>!zb8B~L Pwk5p!C u4Uq&cր ̀94 <)F 0dbeHff;L IDAT8%֟8Xz\3!4::Eg!u\Qd(c2fM ǣ=*2X룷 -d 1<{'DϹWW U,+7| ~s RxB췑fMh&7{psO?.bq<Ao` aAͳGҋf{du.đ^ae n.'s2" )ݍ{uG 8CJE.940X m "˜(IfoM?fcdmx־Li\L=<`|tOUeBʑ#Σ .ͬ8Z~o~vTM l+e^8DR5[WfOb)CG ^Lj{^frXuǏ]w4[,xqVsȑFiu02\,Swڣ:i]g B)X!hV 2*28S~R:e0HE:6"Ɂ>!iD ?R@BH3 c pp:.,& T'C)z'Ah>(kFeu;K}c7ح 0Xu+n#!JAJ8P DZ-6b:z0^2thXfiw! eBMNfx!o$a,̡D'4<0Jm, ~1>fPۍBm4,(c=Q*#qAS)q1aFКnABK;B@Bf V4'QS^1$$zI.`kD* Qqp>ۣ a0o|p6jN JO\;X$ڛpW0!p.IyR/͐0&h/走*#>;=) tûѿgȋ~ Dx3=?s9ݓˇ[ҎbGB{4}'`aAX-2):!,QTfXqdRB"4`3b 6k51h>kC߀B)Hי4H JWd  B3@ ,A)H3B3Z{o9['?Y9XLsSUalB":rOxȌ>M h;npen:{O˩C?];Y9#M B#Du<4"G% 0*uJ7'1<τ?g3 cU ZՕX /8SKd uBeeeF~W#UK7+ t-̛#eP 4`yY!! V7b^V O'4]t:ẳ)gJ/Y#k e<7.\<4M߮D -d4M:#9tҵٔ|L=c^$[Y@3J 2*ozԤM{NdPPr¾ۄ3 VBz.$8/JgE{@fzPP,^S$S c{9y}stZ Ebfȅ{;':H BټHu?~i?VW19j_=HՍ9..?8 #pg) 2qcFo["Ikyr%piN枴N}B}aB3ln{B/Q`h$t!F(bń^@iص(ӰIT!6KV.c߁0n .ړe~P aU`Ber/0z=,~g qQ {gcV,XbO۪ܲ.@e6]w f!׌.qE1a: >$ӠЕ`CF-kd AZa7~q 2++] 68 B ;ܤ39U; qFWuЫE23fwkV&+ }e@j_7~VMx.} x$p[D::uםػh6:TfK҄ D,:VhHB0! (%)h@>8h*ҞRMԨVLt Eh#Վa'=̀Q`hlj ]Y` A{ kuhep ;3``x|d>rHy5%3I_.~?G+Bľ A/v ޅ@@THwwl)A}l=ߖ .W m^e^dNu5 𓕲[H]W 2Wȋ{ BK`+w Ð1 9LK9H=TfjP8).- Vox%ij*3eF dS=n5~m^/H跆{MC85 %Ӓ!%oWR@6Z} 29 *6濉ez%X^nҭ f$5hߖ4p%ۅ=@]`x0 ̉^nFwl-5"*ĬUIh34s{Oy<:Ց[+5.j{XJ9Z[?˂W_ ay-A`wwT@{P54)z^vc$ tC {hB)\9sthAjtbdF~ۇx7FA{ &]gaq_=}Vz^ |};غ| ^ɐ pި94e>0<+go?*dA@\t Ll8[Q+0!؆aqaJ:3:O} r+e =7cm[tf#tO4,is%(lr3W幻] 1RX_'_}60 N Qm#I_ ^ĕ8A @{Ѐ|`4~;Io ]C4ס-0[zQ>ꗞ/DB@0!,,X1 sRot/'o~A LԛڜCX-?l9@ tYL#(_: I*;~u%-ކBx&GʨTgQ_ nkAІmtv^eWV7| t7îM(r8n20 fAB]ĦYFe0UpoKZIҸ< U!BBX(Vy$Wawh-h:7,}b̬̌T*Jh hbXdY`^{n۫=ed , Y4UI5*KY9w=gss{U%Y{o}Vs}%W&pWp'5oh.(5+DmI/ѵ4*Gkn#~c ү͗L-וj  vҧIq?־坯>=#%| =Y#xIX' @DpV4l7 _v;RHNS<ȓ ݡgv :5A+ IeTJ!=ޅG]0z:\{->9}6jW= qa!-HR"l'[|=5 r 5rLP|!]11Ch"ftbʢ䣫;A ##.QΐZ_GVn5j!c8D$i+KGf$($-V{r|Sp!,@J-hS|y1zcd'cokҼ+ hY Bs]_%9}K " Ez4t@Y}y#}esJ`/v1_5̪IaZٜxnn~~IILV*X  cPJ:'눠TSz| {[Ϥ1k mVE5{XGf 8`x ;nX$;@Egto3%.O/Y*dzksh:^LW;?(סU[@Dm`Oh*' U4m" N$^Ql y95R<'{@ߓe:ǻW5!$DE^XaM >5tS%(&!՚$,'SI6a T?Г-}:>>vr_8f$zbOTBovoS1s л"@H"$:Ì@?wĭD@2BԚvq6b1D F>A]lKRk5y%KntI.F83R#A{pɨŭWdWփ?%uҭu~O H츒,Q97hc<>yru??F=ZjQ5 c=j[c1«}/{!$" 5:~֑ cDpW֐ZwO0FAÓˣ Sh\R n$9ut?34`vP&V,%h-Hq E|M 뙷 [DCca55w=G}|.'ݞ<\|nFP>+3O3ڋ&ͯ [8mDU}',%AAR(a]N̈#>/Xy7I'1XgUcX@& !Cz-ta݄ʷH-p|qyy*Py6 cf ?q/qw1x/B b^UQlŽd}Z7݇بACz_[dRbWbIֹ9>h$#QkVQBg.Qe=y}q_FilK{\FlcVM:fאnϦwL|kSG}9@#?ե&+O  YA>QmNZ+PIF3%%A=$q.m'dU)qnx!oH󋇖n.a}G̑w}ߏҕ&VhքQҫB!rTtx}=: " @#$̷wYm]{逘섇|Ⰳ9ɍw BJp~d.*SkB|w6α@egq.6 J_Ÿ" h4ְY_͝`@fBۋP>Rpyx -Ljk},0ҟi/~"K'@t +PZfgAHB33Q߽a4z?*gd+p +5~ q[HTls\V[l!>{c CmsN|ds/-^{dwpXb'4p QG22*=$@)IagT ӑ[4G*h IDATBSdia$z[^9ُ2ԝ;h$ $]  ^B ܥ5wӫ!VlʲvkՋ C7pޘ.KK7A>X+k6åGSu@!¥<$7H'[1foc^}M22ntQ &9i 4܎A9s׽ƫɩ]==[nH!rP 흃pjh QkhwKA=ԋ #o@~5 mF\~oA+SϏ—% scP-;"XdKdV$pIګ%W&3LsZ`p % NrZ,sp6Mßgl"&(oOȩ9Cp<ʭ19DGc!-HԜ7fLAtJRZ*sJ F2 )]+]?^]yM'۹7~BB++h3 F !ĉD)x4|3V^3OWgoZ[vjx.5`CpS<%D1c0a ca0)|p-/^K@_[jg+ew'rkG?0'}SipJtMA3C3Ai?C)1;5gjy2oYzv'||K~_۪ \Jj]_u שT[j?ܑ5%uӂ9&4c=5\VB/D@_U:yDBB0 `:ky?:EGgS5;H8aMGA :v-ү](WϜ8N nk`s%,c8B{vg=l*kR>'ư0\gͼ8$ݳU?aw`~HwNLvr0Tķ55AsN !dp ZIӦpkG~OHm2kh<γ(Ui9j(:m'ݎcu5Y9mr:`yl}c&F \^b>IGZţdif+'):afd/Z 1ҵOr~E}>>}Ѭ! ښu E8EKNނ6b8Sj;Y"uO <qBzU ׫H> Vn iZE, ΄LCKM 'H!x&UwuN[{l] |~'U})nq-@?k4.]V6ҽXz,!Qk?}, [\x*5|\$N0Qe0׃븦`o d 2a Uī9{ҙPG^ENdYWzV$Fo"25vX)CBVb!hsSG],w$ yŒT/Ȋ=N ]ȑ/$*A\BP c!y@:%J%5Ȋ[㝭;$[}`# thV\ V-3$;A$ Qe#lCWNʳyN(Z {+*"k=$}o?d8hj_9O҅kp-j?!K,Kk*EzGdS>tbr2zWoLn0itrP 6o B5leg*!.݌/'Az i^;7Qz;]Q8BD ݚr [g'h`5u-tI,:Qhmq 6Z#/c`|#k#I(v6.D(6A9UzҊmVJ@;~AяE |ffl,s(%KSmz4ͳ`-Lu p_B^K^{H\kVnޑxfHF L Ԫ ZhKj7ɒNʑPiN b~eQ+ ~Ɠs4 QC)ƥ U ]'5?`.'HVo ݔǏV-9A˴3iSؑXyD1׈74ʌB\c86"Z(dJ1 ׶S(|"=[͉Î_Ţ#皂5όuHg#$C_O' " NGHmt wbgN*\Hժ !Gn0Zg>Fcz(:ZHYXgA h7ȍ_ְ+9ĭsv0vR4WKB^L3FA*گlHX'\&l3Ea@Mȏʀem5yGYao "{@euj 2<aJ漗dfA}-$Eђ:O}TXtCQxֆRk @׿=^νHU7hD AH]} Vc\ҿWMa0Q%StJmRT):fdΙgR 6kSM4dy/0,c!=cI$I0Tч:m8f!WZ9m&3aV;QlW/*V)/$cB8a (s&8a;0 vc#!]3B*\EVQ1]P,'\Kwx n+:8qswPQB6 &$8n=m$7eM8`eAŬ3:9_h)1iUΘc2,O0Y}LP8w'Lԡu6B0ԭ#XE^!Uw @-8C.:mFMRI"8 rUfCP1qĈb`3qq=pH;B(p‰5ОkI̯=꾪7Ğ$KڲVԬD'Hi@R Ҭ81OM@p$ %x.0'pӪhK }G>/Pῼas)Qw޶4/_ߪz&T;bހT{LGi`)eၤ;H  7^Ɂh%õ&IRړgUyɾ/JA)ybo-%<݊_쵑 bmez֡mʫM*قEV65od@:+M FeѾK-OXۡJi&1~?-} ƍ,2@KنU fΘ3k~+:WM? &ѽ%,{ @kUBU;gݧid j8XP&ܥ@OO7${!v, elU$ib8q^K[] :iPe:YhE2 BD&Bʪ"sdr10f_}8$)RgT6c"VQe% XI`Z;?9 V~3LIK3<& r8#d.RGjHlu 2OfMO1b-WY9VdF}Ւj>ɫA֯s͚GܻM? ġE9 /i׼1\žf]zkۆPU; ;|00# =? ͺ@%Q ;*m}4fQbھm+8yŅ RG芃@-p9N'筯-i/=91e6|ÑS{=}9 W70zs'58fs_?U_Oq\ [ Ph{@вV4" IXÏc |oag6v4H%jVښe/ܿͿ}x}[xlEdB<-?iUM)m|C&yK"P,,L uXځ0J S8VA̤kbIY~UdFKՌʞhwo{_^e4KP9 ^HdZW r$:;)e\^6U7l = (D3X`ڔ{^ 5a{dq]6m̭(ZJAތƮ 4ka 5b*jU]l;bq4雱Loh<T̽,,2zZ lP~NjR>sS93 fVSgyBvM4 tޏ'!Ieqzllu}2߰4{K"on Q.J@BZ5ѸiK^4'yaN 6~?ṋL^/±C=X*k5\+&T5j̙tvU?47Uȸo*t4㱪p|vCZ Fh@$$QZ\jDcs΃Idc.z.ʁiXYX[vnb,V]dq[uZ 7$CR1T^ℱ7Gj c8|# Hѷw,v7B ? 5ȧgQ[SGUe s:7ȍ׷Oy5@CF(tJ>XJDiuPQ7Yl% پ0 S*>qm tf he DZabF8hV*r,TjH)#eiJyH͗| •AֺUp<n(8!ǥe6E!!0Uj2|RRх2eҙB2PYO(%k DҼլ*,"{=EͫVpbf;e#M 75@'1$$ tq]^_D !D{@I&6CZT$b/[ח1d#Dgyfo g&j7SVͳ]0!\]%ͺft.œy+d\ࣘ!SC"msZ g/&XkA/V}0Xh€`sLL~z=W`g_GaqN`5c0JR|1 y ĵFF {_ab$86-hQ@iG.g*LJ.ZaaN NȬMCJ8}I=:I؀D8`ĸ%^ 8agxB4$ڛZuG L"N)>"$??,Q a@zHx~hz={@orvgK*B9P*¸Q#dA2|O `YB@~*dTӃ6<848P&zm&6-5LI,8TR(b|(mcQ6 fRgjϯ}YWuR|f  p࣐3"y&+EӤ*ĺ@$ TRxx_zXXKl*5ݬ ʘۯJ\5W 9K l<-jlogJ0|6hiX>hEٵ%2hL*H4g\6@M1S1\?M8¹'Rz?=.KZ'4k(WzKt.ZF3XVQ& eP^)RxodUR[gʈF4MiVPf&MC%txxiocтG-݈d`1:ƽ]`i^x jqKj^śJy~gO5{ԍPԡO:=0\gx %K톀xyߑE8/\DBuSSqML'&93"3q|.r&n03j43ꁀ `%l|"\ñ ]!Q:JU^\s 5yF|T1bPZӖ8'R?ϔK\kHƥuDq3$2;]7{8}69zyN[p7f N` =z?酟h7!) V ȍ׷Ӌg8ћ 1jysIRBmW_+Fk١9\|` e7;ߒkbj3s]Y dbqUne ,8F;жbqZ.ipAE?Zk w/ įTgfThk_p%x@@z TrK/ܨ,zq!8S|Ei5+SucF$ ID{5xor!1WQVqˮmI_Du7FYg&]p֋` {׀C2*\,3 IDATۑU*Y@ ͯBiP?ܭh'`AlZ/_l/yNĈz+Nq5Q8A"rQjJJL;brh6,MET*=K7" Z33Is:ۑ/80'{ n}pٕw@bv0޿˟Pq$ 9jt{.o:H8GE9p:]!%j4JJcf3B&F^}%\GGV"wNll(G,qlAF|-ګ2DhEtuL>!!L9f-tM˕P@Zy`8z KB(HIh]lkhD1?"81f} ٪p\/Ϊa+AT̑[g g <Vĉ. Qb)uGLUXhKZk 4C\HS>cN^}VWL%Ino> !7\3[鯥$BSPI!=C p}7 eb LJ8%vM%D!Z!E9TˏYd N3ZX 8@U, hn/Y.+IM6vo+zU2ޱTG"+twaUI_ZzӮbPo$]I 1$rһ) ^04]vùgtЈzFyvV@ ^yY޳I?Ŧv%m0~D\?6 Lq(f\LQj 40(b]C"%Fw;Иo 4k5%^4N nQĘ|4Z <ApMQA DS;Q3c S04QVy옃Ƕވ}47Ȩ|Eho #c6; s@ ^**Co֍֦m<1@-N7Sx} 7w/>(JQ j>LB ݫظԄjr%uAE6Kɶo~}2F n do|-}=U 4,IޢP["I&iy2?;+{< D]F|ψieQt)0mx.5Ԥ{de!Wdy!&L h`[ dlpK[Q7 4 " Bz(8 MuFW+ĝfi4ʩ>b+>EvPpi6̃lVC0.E0ϰN.𯐕6 yhlDXǕ 6b \" c ֳOSO1Nl@r%=7Za SSn\T%wI` I[t8ٛeQŻ֏{)17xT֓9^+p$sأO}p/FȽһZ=QPe;DZ#R`$d[\5N<{3*r|.tQDwjڑFR(YJ^)Q UH ;{O|yJ7%g+{A_Gd񞈊[쎔V׾hk4o8þRZ;RYz-x#iK4^;GH8]Cki*ޗ 2Wtyhģ]\9Arww]! |o2([Xod=mTYq-ӵ#V-8Ñw>EGqQ{x.됖l<1ʝɉb̵RTɀ5\و6iS&13$W"*c4ub/k k!4u}O)$ȴ:$aT\tL1W\H uԉ0aoTmv׷CMfqNfEWf%%p_-4Fژ\0הi4BQjz <|یU/9ڈ},h X!O)n`x}; k,WAHl\JO &=il_z$,|d/ol?FK I4Bs r iܠJB$k.:Y\{"uU<~JvtbĽ+^@o wmS"t翈ѵ'@Ҙ(V 7*{FoukR? B A#7~,g?Z%]*6A~h 7L?۾cR"En_v꠹@_~72M~` *INIЃa,$ڌl:ʞ`tವ\,O91b߅pMUY `zB/uZhI^ӖZ.=|e~m@#g lΞa};8J}b(!.Jc%2[{ J^)e*J'`sF]*ı&?ů";']HP (94㰣~4^'> G4ڥq x֏-.. 0z!\}ς߱Cඍ i_rg$G,l_y+9pc1'm쁯:Hg@*/D7AޒΈdY+@umy}='$3!I^ :'_ MClEFp{{xY5}2jnUjc 6yHTIٺV]>c fNy+(Tc\GۏKx?NB^*j!R!RpY?90 ,>-wq Hȴwu2شZLOz׶A?$֙Oc,3rXE<i5ޕ'ʌp<&Γ=[D?vYԏ܉IqJ"` l>FѻzLQVPxd&#'Q|dɫKGo6 ZIoCث!bJQRtc&]=kM  0cXHDsXɺft򽄥L/ÿCHr&*0^hKSrÔs!ÀT.޻Xa}u;ӧ{.=rIh-E-I(ɉ#H d+(b bDprA,D#˒X$EQȽ{ٝ}ܫ{NW.)qtOO9oU}UI![~v$| v{;CrW`doeR {`FgJ^a{DF$/SK8yr]*)|_`;@.ETkCT&C`P<;ػX܇H9Nϳ݀-ؗ+-WCލ_ԖkHycpj9 Me˭7fˎ*oMP _c8Xˁ _d;}Ib}S7ZqX[~:$\ k @J^$j p1;@ll_h vrMۈOhk@fAUu=a&>&;b߂ 2Bjvox㥴zHdauJiJ3J&q0na0``kP7ߟbuuK2*> -[@:DPiL NB`3ac?@L]:3q;ɿcn,ܶ!Rr[yc?O.jN/}! ܤFS BH.Î{ncπmZbf'KͽnN9q. .s"n0-][Y1HsC^RUhx0wwv *:0 3V&(]hYl8,$~r^ٵV}B%v)Nil8v$EjCRf+/aȯ T!pljU2aۢ dcc3uʌV5-5% Q@ρ$WM;6QU^U\MXI%&B(9Jm\ru#FPM*Q7d* !  Ffo TMgOD=@ƾ5p<>~mPMn^w(W皭ͫXB8e_Ю.3(  +B1kF}'˷,9^pDFJDވPě &ݞ^1QN=_g7L|z1$, D~8`|U&ûn"R|k[|;qsW!S"=a!;O5w"%RcI~V_ukvv)AR_}$v`oea<$k?($ IDATf;ϭ|-k:H\ c:A\sk=d;pQf~<"7@O77 L Ž̎LTO9ށر* ]6ҝN B'Gng:MtU8{K!D# }f sקI<-H:thra@։$"Wɭn:nTk߿/í5[sR0ί-A\c[s9!sSZzЫGAf1i%I"eH =<84bupi> a -(#ʬSQ & Ȇ!0kEs(qABs,CN-jUbO N3vCjBܨ)i[+b쇵ǂ- `87K WM`wpCY( ME!=ޫ,;y?;Fy"YvMg2-5.Ԣ7j ʇ=aQ(|[7voMO,3+=~98 8U : ǂ3cS磩wC-iWn0ӷ_ j qEVC{Tghv v R lp5C W agr}Hyǥ{`3n.v Տ%sg~ Ÿg .ؠ3;҂J+A=L=l~іo_mQ\VlG:NI5w?gawZ \6@kh,>՜C7@D:x,ۃ/c4=G.=fp6JY,UYo:OX]GAaOs ;S'iChjF"p.x{ _ mz{jG .[ʯwW4pѨyD?Oiq)InS_}8{eKl7s`_|mBd* YW6 4X)?]vX@iƊ?|, `SxҘȏ6Do5*l8:2I+Ĕ%0,.dYABii)jU[uXR#l$#GDhhIq"i\W9>7x\~@;|[r[6Բ'*ŌD|8[)?+1ʇ33+kw}P[#<Ѐ~ F W*+B>AX씼8B:0'Q(mQ.ҕ WD}5Eo(dkzw-!ê31!-R1:- rL:gsb4'ilYC%5IW xb'pTŎF]NWzC=" G{9EՓYj?F*/4`ҁz^Paa&߁G˕w{ 'XZWOccqYMlJ30XSN~& %܊Cm9Ύ5v[v}Ad5;I.l]XAYa>_@B'5jo*P5[f0a:rfqKlsyϴysa@:l䙰GQqi_L!S{H u;~]>֫)*ũIqJsOjpYj\hKlG[PE[f*3G1c]R/Wnc%ֈ yBd! aYm_ytģ["A&?>}t>哋XH" PzϜ{Jcyw̤mvXel'v'VZl†TuF!@e|eaNIB3.k{yBCݛk/\^ k,uʹ 6'5SPуVSZEjB4i6TVM%3vj"b IL* cG{ 7;'zCUU53edFjC51lZ8kepX($Ր8$0W"_J+&LK !IBMP*Uѓ0o yá)dkɅƊ8ܸka:~!,=>`P*o ҶO*V̾+5P"[k"rhexJ9( ,iZh\"911X.T^Q =IQxe)?Wa ZBW&#n1: i}G: \Fb`κV@-`g|̣w1}D> VRa`ѬyCa672LRh"#rIW{'G mM5hf t=݃pVSūȮ "}<UE*PB<=WABeUv Q`]fk @_" ;3@&&@ ~Ǣ߄? q6CQ1JoN&g㫜n l|o'5S1D ]6#tca}ax^qLxO of3 s?' QHT?4~9w5l7\ڻ!.dsC#R >Ng yO yqY lNMfb']?+AcǽCf´pN߃jBpz\]J-6mU"dnR3 ++]7#CV]ZU%`,@$DTR_/m7Ҭր ] JS!e!h"Q h0 d( @ñϝdRo`WFoVU4Vs*͠#lpۧ?`qQiHJDE=>Ҽs eue YY+n{IA甔]j*1q&z{]t# X n0^QJ+Ut(~G^* ^X0,v4P(4$VB&@i@Ak[WI60glϥ8qe29̥,s8 X~\=?0d.e]3X2 6neiv\UI)7VO]xQQ;b7 ۑ>/lR@ I¿bpu|~VPҽP4C$¾$QKt- JS0>&' M5.^\a-P 4y5߬ f|y07ntΣaEWϟ iG.ukna5Vp T9N$麠`$mhPE 8(CX1pd%ᅲzUw1>F7`&B!DTozujcmh렜f7KRܐ$&w|>me[ Nu"p\8"~(x$"kDqYDo츠?dmujMEtZkrILjrJL.qHlPXhk-B@i6<ۗ* EκE0Bz5jhApb ςP' -x;xB8o) ߵh6nܵx|SK:}s*C'BTkE_Ȭ'_Yvoj*1m:,vg4Ѩ0֬޶ñWN L1l(U|+Uj vyZĻ_m1WwNBq~aNC+C5CŏB1+UI\2),LvjFYKWX\iBZ>DtD@V"jЮjQŝp+NKxX"0I}SejK'( g[LU&]vlč3{P*^Ed< P;a@U' 7UKbp#2Sϔ߬nN_Ҋ'!6?T2gsb3<@޾TBa%;.v٪v);|@,Fu s]K`&)PwV%}]콣qL@}Z$,ҙjM}KKOC k/knR;>}|A?YIBܜHfEzʋ?d>DV^VM'I%&J12Z'׮T3RP빦*vY(ʃ<4\0\ӫ/5k qCF]I5 zyqdnO@@V7 B e(C JFJ;MKk*n*ÐX b x8>HŎB(Ni*m1m90V?m(cec!fsBXGcYS\!q .倛5ZU!D!m8QDhҶQ>Tͨ?b1u} 5*^%YSCiz# )JBhT}MgmAAA5 ]WǾUtbI*5*.olzo9\XP 8ikBqWlbzCxⴑK|ߖUcƝu'χ8s<@@9x(Xݴxpjh?h_qxґcn{dF¥ KzJBֶ IIniZv{ޜQU<(ZhJ,X5f]! {t+##£,!pڤ"# Y  a\V3"6#o ݢ/fWtf-qIm2*9̜Y9!G-d]׳n5Y=ΧTH@x5u;ZUZ!ծ>D:lb_)֊Ji$fzCM~cL|tK"qQ& ǥM|wy: G=Kn?%q]碏@w\;ܩ%͍ qFH, )~s#Li]'Io Lja8e @*1)fPT kJBDJy?;RR ZA p!Q$|!IWjjč^'W, 0<HκCv,B طpr $o~QURI$P"iFC+! 4M;ٙmCoThzsNS!5ߞ%H;{ ?[b :@+ߔ~x*XqȬ] Kƿ~3|Kuc }'BEn2Fc>un:3WL5HGШV|LIWaϋtZz*/`0ַkm9dz0=!CODx7[VӨWjE¸zSI! Kk+Dsd_7d}[h)d6rmJr͐2-6;( \}+&S)b_L6ٿς!-"oge6&WJq Rqlkr{+@۹744K8̱m R5% 暞&*Y\ZdP2H51{}陪MT7ovݖ*ewDDOYKPqDD)u%*BO~wKO!#nc FL"4Lv`5jB@*8"՘^UR?y>̈\c%5^97*.gʌe1VJ˹gy5(_e/Q dY#*R$ =jBҬ)iTw՗`XNSfYXD y"&1@Z'JUJ8f"}ey^c }O~,w6q&7N|%d»_{ե]ΞEąE{P%) ,4q\#_)zޖTcPZuΆBK<,d±ʮU e%Wf&Pz-Cyyyd~OyFJN::o]R8{&Bp`o|aGx7I \xr}_۞`<{1EG#Zڲ a[VBD9A~!*fb2#x劙7s W l)eCo.e3!/V>&K)S+3Z[jfi 3U0Q %`Ug{p V=(,}@L@Cf*/\Zc_| }RC>~>E:SrQ}.>Z}9n>X-|Kum8$ġVe"a 8P -TɕWS|L!^P8ҼFB>Yڹʭ9Z5G %dҮ+O`Z殃nߛم>qx<MKӲU*( VIHxu# 4$ sMX3!7ZɵᥫNڳCۅʥ4ȻD D5p2 ̾ݦQ#% +#-7pz4t.8NG佳`*O=]IY=5Kr'lD *y_H"B%V`8NϾ`|LxlvYr l8fV]S%q^pucUݞ +SR9郱@/j1ZTNPV!ݴ4w?RU$ -E_h6 oNj$c|շ[|ͽj˿xL0Ь)T IDAT?ޅLn5)\.{< y9e@%03ǽ-72L5ሀmIc* j8R0n!}; $V f yV6fg.gf9g2R 0 ࿠^|2Wn)&[Dn7#|3ɜĴL< kxv!ydC-YNE<>lgc`pvu5;^bG7$!. .Vr_䵋mF8κF=us1E*UBB(HZ(( rXYiiP>k ݴȌq"R]DhAţgC,vϠk f `m!✒ZE!( 5!jRpgʍ5 cDRȌ[MCA0R[XP2eq9>Ic@~Άr Yu5IF?R$ƈSBsSy\qQ3*FN%^0&84@Bl<_APutH-B^8`y^cUϋaHn#Tc/[xt~`dyfxfҴh#d( W+S|P[ VN8oEFkB%!\i<V  |RϨW aK77`#Aw<QS 8oʓgB tvkxt1J. ḰJ,9z]te CGGh#"`K`<$VT2 qVp@3d0~f#!E{ fw h~;aYvX g8C>Ϟo6;l+ >~<%9~g gV~G8ІUk_K޽_B;ȯV$)/Jwb aLtXΞ =ԎY`" 'FJ*@Tb@ pĹ[ _"]$8+ -77gxL@n*O F] .e86<8=/ hk%ٿR}cFυPtG* ˀ]O6zzsT=lo+yZE!" YGb0m*$dSx"f~>3> p,co٨)+2JcЩҨW} _uUhd(rB zRda3'(03BD (viF5Qh7t.MuSbz<ذX po2KP8oV)+!=/ܬ#rUEJq*U)~;K΃f[vl[MBfɜ.Uk :hZܿ]IS넙]ɇw O4Μ!$` rEҥ__REL@-)k# OP0>6g޶ I (%"[ iFSK&h5Bʻ,54Jҵ/>oOj O+a-T]f~xTF1,mTB5CB1*1acsrԋc`¬n>82}X&'GXYh5*I1+p_Y-a#[D%mzBZ?ȿ0Ε2#ޖEuxjȯ@2#Gw%ZB99bHYWkuo5KK,đ?Mx=C`~kk"lW>7Ҩz'h5;|̂pMx $P[%sEK);!/}C&AdCq!10CGp/iZUWnʋ/ Y(gNf$\ՕpV Q]%?(^X 1;t6|,~A {)(@Y%R_E# +Tl@7xֻaMhw!73XKh7΅86Ƅ@´L's_ė+ J 3<ae7dD|M;A &o)菼9\SA)B/q,sWl7<|?*\L\31AnyD@ fPvA߷xYp|3%|+I;d<%?q++vz^y|˿xسs0"h,K0+>^1Pa N. GޞӬ)45t&x 1RnYi>; \|#|S nxP񃯞t|5QH"LЬ6v6waڝuK_oz#͵KozpFu^ Us`;6@`<Y}e7Mcʷs'C4* KRUIoe_7+#x o;k_;=87@8ŪnQfMqIڶmEW`c#Ef+KַT*?oBm8`0,@kD!8T8Q45ZAwȸKZ?ͼq@6t-i '@w&Y0NwOWՁ?4đBꕥƩ:p$߮7-H"f,3agT>9f÷NqbQAx; W_:xRzfg@FyvvsETcG& Y|hZȬorф">Ʃ/h"| NX3%IH:AŹ\ӊ0&Zz ߂_ivmG{6L@?3Q2UxG7 -{OR!;wXW5N f?1ٽo84 +  ]oNIq^t4OzͷvieY|YYݥZRaF!0f`< 8`<3' &f!c5nuz׬ܗw=}ι7FTTeUVw97}Yp˃iuDia: 8>sh}?J'\T9R[!ϿR$:ѧa}G᫗µy cÕ;>Jg87$܁lnn#Z{ڦ'ƥ&Qhuv\ GG@Dc ,,mS1zHS, Y {|Ja)%eMJVw<~ x$OC$rߟQdpf5F{_k\׸5G?Gc8w9r:í[g>spxM=*B0lᇩ]2~{w:lc(*GR#wT]j+Z19-E }u!@+as>Q#:O\VGPjNGpRXY#GD7Q@,*Vqꈃ* G2;EuDzC|c~J@rX֮NG#xhifv%jcE9(˲)w?00sGS 4]J6.{IεA^BD4?wʼnyF%ru "Q8}n8l8ԚDadD ׈!ϐs9v:D\J!hV*D$ hɽdQ gRm 9홙y%+Bu%£-{ZqB Z"z] tt7 "*4f[{ڳBf{ݖfd\׸5w>i=wwO=$ݻoNw1Lu[?=} S fUVtN;5~k΍VCCbϮrC}΁ fϺ(zBW^ t{%W9,[ci=2{T:a52GQ9P×zşm v7ҺBPH^=$= 4 l0\ާHR# &D瘛X^Mpg%AR֥V) 2#32vWcцb鉴 ]1ƹM>lg#68Թzcc(RaVolZwM5Jy'u$P~_Co']eխ;6ۘw$qk\x1m>* 8{_\" ׁW^ ͽ{?4|ywO?67)E1O `bBݎZuM 1;q׺5@PDBB]1jNJ:=bƒz& }gePx w,~@!hOp0NL1'~Q14*CN#+ @Ǝ·|V4aBy({}` a H~z6rmqc)Lus%m?&{$XG 6T t{mdd-s'ʠ^[!W )d]Q*}\ f`a(S~ c>G2Yp٨ T*K1jmjL9U&J닔&fuCaҘ8wdMduI\Pxt{D{[T>>֤dЊKnb ~J\cG%eu FgY!nv9ݷ\\MpbA:l˄[)}s{9\O^cbV; dM<87qk\׸ oCp]v5\% |NeNu;U\ Rꯟ( A 37!J`vFz2݊09"KdݎSJc f&$Ej!JNGۧtp)hHdnUY} 1@ rZL nmW= ,=IM ȩc} 43:S^{'D YU)^x<cwtr<+ E(E mA ՒVgl[ k[ u4Ү%0z?1n9乲 IDATiΝ `Hj DwVb}E. e%ȏ6ʾG1jB5vWcmKй*EnלpnJgT!g8Ȑջ4DY&E:v_|hڑ?05qk\zFzjQpw̅ 7z {]><4;ZTߜ΂lhM׿ 5%q3si~G7P|̆Шek"6u=]Mn3 S%#йMnWcp,i[mUUZd 9fm7FYI1ϭ0v\ \MN@2]`DM֞3g=n&Y5M.i ; ִqINu5Hki"B}}1R$Op_VJ´< TKKQ[]mHڻJۀMHF:CaL@À# -GqGx#J6"(1(G4GZA{@Y~7۲3M)(g(rfȨI!ͤІ(GRɡX趉^:H(h+7XT!:[vv;?2-Vc3GNw%c}ypčϜuJ6LEt8'Z*Oܣ&H m(K"0ehBY+0#Nah8A/qk\׸.Pm©#H{e4]-tR:0Q5qk\zփ1c8N3 9r8֊ V2ߣQ,^\{(A?0Y^0ِY6om|81'ur҆\V mh8xwd=ϝR#-l.U r-1<;Јd @5qk\c1@<ϛpgpׯK+n=Rq|˷?.))sjT;=)p[JzKNYS;FUT( ~3</Οu;!\KqrChw|~xwA hr9_g%_ G2K`AZ 7HT'8{AJnlڠRtpz%[\H)1?/5n& ŨhZ&JfgO[άJ'e1uY:8'RBڜbsxFq <Ɋq In-e|A2\dxzDZK5P8,mv;͊@&p(C/0VL?&jgk+-M"ڤ3Ib/=v 7WyPBi TK"Q=5 @YSKJyFmH4+1H[3җ R0׸c~JfR ƱYc6fe+5t; ^dOߣ µET(2/R/7=[tdfTg2vw Ay3>Ԃ8 c2qk\Qwĉ";0}s7xaFV1^~0WƯIogaZԋ9 nR[hZ.P0N hAg!p)Fpیg-\ =*9"u!Ǫ]ra*evPG(9KhWR/8I"u 6;^^ˠ? '|B&?wJ?ݣ|sMM@(g]0 \2lo+|ź6%foP:kx0HQ6v4N sP.px= &5ŵ2C1'`ָ2S+kܸ#nED{VG0pRci#ytJi~Z O~$0X3޼om] Sʀ3rW &&}Zӄ>)?$՛k yW PX;i 9plS.%:Oj0 ŵ6j@ 8\`Di(Y]^OgΨfۻ ϶r9/+/ EzOsO˳" g1ʙ8wusv>E׸5k_wNO?R .m?2n1O3>%\aQx)C.76'תnAh̼ /tfhı &YR(8:4UfӸz'Ƒi9γg8 37I}"9C霋v%2aر9Z{ p|FK<#nbH(6nsj]pt~k)BTwpfD5HaD02f'jh!љ3YRz/spjen_csh]ad{ݗav6h:QR3=x.525k4 rٍ(iܿ5ͥWi>eV8 F# Lqlk_ۇ֨٦\NځQrpv)_NG0vN<ܮC9m٦”DKc7M69U!Jdj],-%Q tmru];:#qnV[ٍ AxШIAYZDFu7o.3凰:IXѵsU $_Lpg8:+Qucqk\cHܹz_dt)'f=޴ј}%uJmJN?|50|'6,Y0VV6*Vlian^eKik0J%|2QhV9&mj:7w`6) xR%NY{\ mHZmg.Y8N\간}52h0 1GfB0NT hT976)q۷q ٩*%4CcXH-4|-|!@OS'Ov70}Z@ѹ4f&*%zJ "cQ ;t]]aDFJNkC&pwnD g4 s<}1xGVȱRh8?UK6cy>XQ Ihc45fy8[K1~* 1׸5q}Q Ï^/ |/&yHh~9|sd IQsn{JrLavNcĕ~bd:t{[5z4 JP 96dͬ#=iNlP fWx;Xn\(xpf'< bn45E!d4\+$+^ N4cmK;8,}Zpv4Եǥz7r>B> &s՚1,H$124zrJdi*N({M1T p|^- 'Ɛ/`E02ڣ.%t{궲 a]H̰(1V0;NL)dMOA,61^&w5C"^ 0?)ů_wI4]sa6i~hPr><be DL4"޷Ivz21ݔhT1F F=4)|>`O q?  r! ? ,HI Ei==p? Kjgm.H.P>C4~ɕFwY1TЗ76)UާMȅsD 9w?quTI]I2qLc}meSa'ƺ Qz7"lKT:Td\׸uʺ6:{ νk!܊lr׶`\H@l*4o]ɺfQ)RPc]1^ Ѵ\&9(~)΀W/͋==urL<me#H-+vO#QDOpFf|G{ fLZMgih´aki?C)I i74-;plP+9m`>U*j%8n_VJp$试 HPdDZȈ}xDkBl_79Fay mXʙOˆy&JFk)jQB)-k4syCS0K:cfN?9#c2qk\:z4s؏ϠX" n[ҭGgr`ƑX9@3o}vr ?bļ,/N{( OyV_AkHAtDX0r\լ*tQLIZDwm`U٤0)/7x10g:@o`pg%Ȁplqb0Q(Hh:ćWdi'=yИe+!M.UaDuQlpn- j%+1!4vw77pWoy)ɽmT66gAk9aq$юP&X~/~ހ4mF6Fx_8h\JSӘҮKۄ~)lQ>%0'щHXFLi56}agWɻ2pg#^R sPȑsHϥ6)AqFd]=r'R3=AȰK /MYtJI];ڙ+ 0x!F&>+Q&Z'acbh P9(8m(Ɏ=ؠ!0xm3AI~.w)s4yEΕna)*LՉ:W׮cD mtΠtq01(+} UUx60 v:n *>e;͔9`m+o zy/?$%猋ze:qxe?\>q@1׸5qȀ2DOi DҒƥK0|xvmT_qdN9ib0O>o=ZE(66ZƤT ƣ'65 Sur@ to-^="] wGA.B JƉVU*p#+E/`aJO:QIEiG1OS9rZS-Tp+hE(u.ݍN݁AYU凝`sCp%hBH i |øƲ`H?$ NlilqΝp9=5. 1YnIk&jXg-; yJ=yt8NF6794p^tPV@pbN Z ;hP(cM(HI 70ءA<hD1p^ٴfoG13Or'FK~{#{&x78,~Ċ z}ݎF(N<;m`3)Jf 0( qBA>{E1sA1Ӕfv^W%vL֗<&YH0-W#eTDϬo.&pc2qk\KL1l vw"ir(Hmn輶 RLkLY (En>gZIr>Gİ| _A;A͔\[0YH~@5yMIAm9pNtB4l<6PB,0,1Ȍ@NqH8m]exM@gθ;wv`0H70(a)FKs2I`` B/Fج셽ؕdjU=n%P'!mK[K &'bQ\;瑈T(9r9=7Y8 ~C`v}OxDv:Q~56?M r^D,WZG'F8b%Ьl{ֲ6$ ,Hz*'d@;˱Cr:sk0ݐ(,C֞4a7b=bAVNHrb1P0WF&ByYe~7ƙcΟ[ UAy(y{ _u]oGJ-]td\׸hR>s`iIƍ70L3u L`LДWk`}ebLiK_g)B} 3iN„RBn$OB(8f'.Ͻ7Ǔ:%/mz+1`eKAuZmI#HļQVpV@~Egx\& p89fϺp+X1hJX" )Y@ZK,%(c̍Z3fMm!ks Ǿ/amu) dnňD6Ce-mn1.cm R~ 7u$Y֪ ĆnGڭ8,+Ġ' P?hiYkC  ) $4I9̣-c YS\8$3wiըrs#B W56JQXZOaguN CmkERf]3{SQl٢ Lhcs๧=\A0VmJ[}5n9ϑxgθڷ!i}a 6wWi+ 1=ya~Jf5ik{m+J"g$?Ea$)= gq c2qk\ >k=~G&pē(Z-7K7oz$cnX|&1 ޸'<pVOh6R ? 4 +.D.M=L}ُvah'`ӵ!~hR&InYͥ3C.%}~Ƈ^qjAQy#:=HN͑@gP̧eodyrAבa4mE/+0ZgۃsѸR<۲2%8+"䭨ހ1K֮β#H?0QXTWhV]} :ļ@)8,kw;)C#jr4kCg.4mfs.5ݾn[c1I `^g9@ϻ"* b.엉Ș}n 0hXv`y=ɂ/ݢtTGֻnHdoA4؄t(:oM#7XF*֞dM .bIbດ S.p%3NzI^}w})I#1ݔp䨃L8i+u(}u >QږBo)|lp^8!0Rt̳G],'j2BOtX }RC+b1%!(1|+KA6t| F)Z{ Ow,bڦOOHs6;oG3MKchc5m>;+68gY3]oH}?"o4+־קm,dS%2ۑ A`nf ݍAnvQ@)oG΀mZIc&4I+ K jeNAZ(}.H7u0)32H)?w}$w/' I׸5[ɟqT*9ަ4^x/1*>O %?ђDJCkWYHK*E-ϣyM+i=Y8ٟ-tN i3wV Lw`0䘨 (e{]y;06GΣ08)I 8(8ΞA ѻ;?{QkO#V^$M[ UD1Ouc02h4ˆ@ zeq1k]\rxMo`be͖BccN`M+cSEKiXL#66A :=6>(6Ge2q(6cل;N@$N%mk,̥jsBZ{=z] d 5):sAަ֮R@?+J#hQ KY6&H5p;k z|,=h_ 0Ӥ@#M /x6e=3ԏwcEH4m8Ęj t1[}cc0z s{ Wr1P0>}ɣM%je.['ij3Y%,7P9ιМa Az0$N[1Ā1n)H Y}?Nk4S-Vt٥С(xąkee t0;!qO54$cNWc6^v #js1C9ᘟ9*\RXZO`@aeh$je.:5%a}&pNz>\(iBOG7c^VP;?{9 ]r,Q h=Oa9VЕHlɁ늫Z]TGC`nTnq%>}΁\@1v*]fv_tgX^K:~5w_PsVġ%I|7 ըF5*|hm܄sVxgi7 ͇ox0r?NgdZ.fj'F9(,{gN|;1 WWXl.4tdvd5ϙAC1i ŃqfܡXД,ɬB>8p'8PBmtXY5t;k :};͚ע?Տwu*{YqQ($3dzSGx6S5(\67n t|51P*  HX~OĶi8l-C/\ISY.-+,0=YO<! {K~$et.L;L7ȂIkGlZS ťo<Xg舍ejL_yd0Ⱦ]84jl+rR*(Gq2rılٜO4«{#oA30zyf9>jTըo=|_.Kرj]I3x~\ap o;-G?eNhmJ=č9Yx"qbFQp&7#l c1m-Dj*E̬:kCiܴV x^^ؔKqHل3.vbuzkeg+X/d(*EF=!(:]K5& SX.'ɚC%|gM@!inJ/'ֶ V6p[#^nܒu͋:]DuO(:vZ~^3VV?'51/RmlE}PtżLmDUUK[)jFeߌ| 9Ms+)<%r)beMv1o'tB͋oNH}UwuN`Ghim\ c}'5 UTmhuEgpv!YgكKK5\Ml IDAT470^AB.dY ]7gΎÕ O9-c睡JUqk#TT|e|Oۍň'_ea9qp|ǹ+2b+u30(쟕im ZŚ1ԸwaE(鿾.:1헺6vGDzJr4)Pqk=angJffg:ڤY&9NC|fyVײ^om-O70;MvU=SϬ[=Wrz\2]KJ*z_Do]L,|z@ei5̦.$1<9>~o'fpaj{^(VP O_ wR5;Y@6V\\t'i4^(`s:X5nCU\E7m~nS m}G=Z˕=XlfN*nC%d5D&Ɯ4DVH@G/k߿1g@yB@ِX%h16%4;b4qJđ3U^Ggw(k4 fu)lM?Xoθ𥳐lBh?SyONJyL9+k y $~h _^cI?f .VԭZ|.oo;csKyxE6@:us*{?l]z7_K x~vW~_\o^jͲI$m~ʥVSE3Ch\u\Sk'ـB;;Biww&aᲂ3MȄv$@ ,)Y7F[+z=1MWzO[XoX^LcXZ2╷›\^hS)|n'e<fzM!'`yXOYYO͎l] R0uS 쎹ZqSר4yXErr{wssOi?y_0}q[݌iv,#ni5abLnL?9,ܷPIoe< ,d'.d- h8}1bn!- zb^sZYw3 YQ{N(NQpe%Qv¹+!Ij ;ge9tʚ.cReSdX87y IGF[$ b};7@3#wlyXm*se,F~h)QyW.?g);d%9qbYVt^۰Z+Zhv,'ll=08s`/~b@k5Rhx9ZYxҏK! }ڷ=qI`_^OAB3s8e?`=01?uE񃿃RvGBz89$2!& #2QjTg=N*GP W_|zi0YxUR^XH&IZ'U̸GH\2SQ}?sv&Q,F'~8NJ&&}@ qIav"BNFt,׎q!0hW:'ʂa::2쬏;,_' cm\ܖhBfC63En8 )i|&]%Y "ܘR!u -Te]aBHlH? R[NXHF[QyF=IϬGPbJ5+Y[ DkZŵwOPa 7 o]XHhoLWȕ*+XM=r'Fj5U ? ӸZ8v 뫉h!ҩV#!Ho8,0(ַqzK0ͮRHJf\ 9W(L`p/ t2jWd'^hqol%׸)#d w})G-͐ɶc\!r-nj;3餖b=QnASpm]roVZ|s{>!ϿE+:.gv/Fm3#2QjTz|09k.,/5\m[vzS(K@-֖Ûk.S.;6ǃ4jI3UөuL)UŦcOFLc9P_o{sW"zhAǝihiTIc3;yI"Zi\f'&Dz؃s6dzZ=4l+.xvד"Vh\żl`2Wvϰ0@Ǜ9f96ꆃs"$4ł$ESx(J[ [Ŗ}ve݅/id`Èڨ fP.rD_v,{\t*_18ࡵ\4˩su<h#a6sYOxi3GdTըFpFD37 Zeinbd ƾ~c߬˙ @oenʕn7`~2kSG0G6yҮIg tR{>S1ec[3ʆ-8:Z[YRٖ V0= hoᆰQOr̎wtG2L tՕ؈KOt}>so++i%GߓC;Hez~}7jj34[!}=Ǿ88|Z+}uGdTըF'ͯOp n7K_z!aƉDϿ1n³9~%k],\y% MLQb+:](MO=$qoŧjY}C V ~N3-VG:HPr S.JK}P/KCW2^‘}ɸ$m-?tzoM`{Iߺ}(L{0=)._M~MRLbTVZ;3S6GQdEx(.X+e8ӅjI3<:(/5Xn*16iKPJaJQp-枃ƍj;?4U>;Ig]<ۡRtʹ7z& -(03.rQ@2^$q*΂yMyAiF(rL/4#XC ,4[ o0Qu9㢵XmfP-'N:LYؔkfhtlY_7Ø0Rk8}>ʮBNsRĉݪ͆RAZ,h%vb1x)ʵ{yWOSqeqLI^k fB]jόC @t/HL5%/u#ҒDht*nMaPjV8m%9F6;VTwXߒG[?ƧjM~7~$$Q7\[?pa1Gm (-@ȨF5Qi)?(,aqK/[Ddv[a 7/UsWJ B:A(چrAoRJuAfC4[CZ)꽤Z⯿,M[xn(ll܋~󒤎LS5jYLC`~> o倇1F%vlhK7'ݔ"qjVsm]@ EE)Ѿqt4ہڬVi [܏J.~>e-X\n{OṊV¹ň]oPc4NPPQbc(I Gb#nbZ5;b?Ŗ MNdH@ڶIsLlU7 _w #á=z'6+4 iX[;k S5'4IWao0t |EINz}7RTLT bkwEoTs};ӷzQ @t]q3oQ k,bLtm& &g I4+j Ē>6>o'ג75@ے;m EňF[q}=L;#@1χ*}.GJsO-p)4В:=ehw@o)fnb%l\9דM]Ӓ)M3( 庽plPŖjRAg/GF ¡Z+#L4^n L.ҽt`hQaFIN /O Jes_.R=Ūܰ%pGy$޲Ӽ1v& /@D'8ZQ=XU_?yb{)Nvf0cs2`ne,d8S`ە]+VAQ -#ŽbzL+i}[X&z@sʊ s. 9{[]]6ʚN.vȩjpJ4pk5 o;4PJce9%I,xG-;avR@m $GHX=Gl]ц\4a:MM/r[ 3{>lo/}}1N;Dj꺄Nn5eh8ٕ XarRDganySȨF5Q[?9qCT*`-*c/qiv |:~'3GӳVJF]I3ٿGtsQ \[YAgKMW8W.ސ66,^\g4s9SQqPӳ .?fC/g󽁰ՊkB&ݻsj2`V)j2YsU`h:P:kTKAO#}CKo|mg[nqs9c".ON~",༻A6"74 KqO+ԙ~(Fpu5arL6Z (HFQ %-;Eb^&г(Ԯn -=fkeϿ{u>P@Sw۷)<,4EY⢤\+aQ\N@aװ"aliudS 70qW"q,qU⹊'}\m&iþ#^$Iۙa:|^ۤK6S|%je +T;>`[ /;pH |-[Dże%P$3^(Ց-OYXV柅O|E|q%xb 7_4N:um[<,L43Qb)ϻр 6 ըF5wgyLMC!_ iaڕe\Z&+{XY;罃U]$Q={f%fߍy6ƛBa,g"db[$x"(zWL-B1 Ҍk wiL|_4ܽz|elzòZH4Eo.1wi I7JAp5bf•7Hn\OiZPb{({K1Xa_K}L1F&_y7k0,}"9]6ހZ9m"8h%KST4Qյ.l/Ǭ ^ ~rDo\x6  yVD>qnλhEay\{WF¡=.{*Ԯ5͹\ɱS3RA9L|@C\e4ذRT|]%zϭ*q44ږN4XРӶk< r94[zWgv/啷Bl*.oװk%םds9=crL잫R:eYNxR\Õ՜ώq^Tz}C?ʈ燂ǾI51 4Z}6YYwI3nJ !J41Si?Z=tzvjC9' G"rPv;$RB T#{=B: Mn& ȨF5Q[}4LJ?O$(^}5⭷ Lߗ ^/P9|rbLRAlaea1VW wޢ } usvt4$ܴÉCբp(v0V71xJI1QuxaSKw7$^b^Kh-D0vMpgYNsЎ4y_(d 3ηdչ+!G8R:LT:c,=E {sŜP#JܿZ`7Ҽw*C{\\i tnN#$NH3'Qt!O #,Y ZX,", K14󌚴-Ghmt|Iz"aJ6{ﮭ N.4'z \j9RSKbkku>GVcx4ڒr1Brx y|?>+NVq,[P&kI"3^@!觋(kR+d@F5QjT|dϞK p_ل\][Ծ9oO88q}W"ӧ^fې_jYUvpME Zy N SErA#<ۏFt|婖-Nb!Gm(ߦI6\鼟MIK+29ȩ#+k4;F;2qVb~kD'pXyfaYXW-+&نcH+=@ZgtV[^?TGҩkJ{;1(s蘬i$h8Lg]3SI*>M>Pf[vƥh F;;o$pto|q0pX͸*NHͯWl>66s??ShOڣ\ԃcK4i c'k~anBf]GMa/aAV XFdTըF[|^sOԇ f`x[*{D榤єI"-ZEu|~ʕ&n"}(E'Ӵ!_2bN hy-afsq,b Bͺ]ed9&1g`5pVW E;o?C/,чތ[;aj,M*m$]CiPK.nvfnT%؛hi6vc(azȑ}ʟ ZTиTKSG|9ĸzB_ `>(uIx8yX\ԬoKᐓ<^QoVcAjfC@ݜ;mc9pdagơVB?M?O Cقj]xFM)(6DKږn&Wnt(9o@1=Zt<<,ި/([g{?h UWl"LDľ4 7{8+-$OK ,AjzoS5 ըF5zJ"?beu^yϙ3;>{c*LɃG&k&fZlOQDfz\3;W 8to{`g>`@ HX%Rɶ$8bRq*)ɱDzˉ-qU`'H-(HB!.@b ٗo}{ﳽo>ڳ[,\zAUH]KUۡS+jHH\J̄ln":Kpv-29&jiYPa At]wY#ñ9>0,)fr<\_Wk=A7ؑ3GRƉ}NjhOUny2|#%ZT{z2gg'AP8\욡G7=F!#- VRj%E+<^=I?(6?g{?dV1L2_NneH؊I"Z:}^)hըF5Q ˿_P5*n\qy'?4C ?V Tg6E_Q-4:,lOaR8I n>֓^X6050dn2|[ nl茢:L [ [KqG d(`*nV^-vvX4ĩw_.RG|5tHz+sEe)ՒW6 R랾LM&)OkCHߒ)U5'D{R.acXJ4Z s }GڄT @ni֔`rc-!56ۂnKX \WDQb|3Q[5Ìg9,Ajѿl~緖iv >zčuw#>XDݡVQE^sc齶}>(^`cKh(~Fe6) qls5^R03dV"6Uxx[.,=C"~4 e+\'Η.$Cݦ᥋1@Ҵuc=(HRR)42YwHMV'__KHSWn[}\d&uߓr:F\AoZE;Mdx5RP >vUM z3^ӣdTըF-Gf 0Ŀ`~%Mc66L3/dÊ=8l<2)ZA1_e1 ZW_7$1~#IB.e }oXv92R(OgMl=rr8e&~yS%\9ʳ>4 q D=4UVؾ9||vېv3^TJR :\|˥+1zt>Ztmw } )|\4_9 oQ ^ IF/d t8Za6«: IDATCؽ}6XK^!QNP.{ HóHCQ,R2,N;9[|¯jʞŸuYȷxWl %[ WҬn>H(jYPgO;JAji-5I釆(z;[>e4rt֥ZCZM{n};%h{O/xDE74[SU:Z40k۩eԣbAr[6v,LRe~RF r={/]!Ql5Dg>J-iijd2+M DsQI><A@y{'͑}}ˤyJRY(tX-sp #}d.owIS  ըF5>~?c.\r_{N[Q[S$L*_nv_wDK6Njk!- śۺf?."PM4(mV%1M 8^rkt)a"8toxX0G$,S ͑YKkh-5}9l$UcP,w_iUЅ:ùWeB_)υ,͸ sS8 39ra{!7?-Uߧ W}$ڵc=ء[.pzam82rbѥeCMVV(K@d}_H~Pos.jkt:V2(-kyjHRi" mw?yCK-;u]B,ۦ6Ryi_ds= o<;`q%<`Ah r23v`rL{}`\̬s[MZHW4Glp=@x-6ٱb mu$Mؼ 4bS3 &eIN;'66TޫV~~εdH j%KZ^OIR˫b)ip8} U%C>"SczU5Kt_\ς6lqҷ8sw,'os#A{]-]9_1̖vVn[fO;GVj'Cfub:@YRdE7^4;}fy*g簱23q-2@皸$=n+ӻT$ygƗ͹8bP*(XըF5B=@?[G09w(]~=?\;oz:|lQ羓7Z]G6JЙ-#_J_Fx mDJpѳW44iɯFPݘv^|k_j!WZKc3,Z{t|(+ [.ވHz'7&j2T A`jQ1V,:%MڕFW^C˹KdﵜtkEWbњg_ s3 Y(6w ł>V#Ȝtf`?3t/_ .TPo2V,7LM8\YNtp{l,ͺܛi ͋I˕y><&6ߤl0|?xqi*= i"a+)3wԚ}^#W kW#є38QdTը?"0>~cR?SOto85[Mk{uM-|(FhLڑ^UVX_i\)}=;s歷O(i nF<{+sUd0VKf~Woqo`8KB(hi>X6ijiMTji]z_[ّ̈Vײ Q@K@O9,8 "Lh ҄GRAO=ϕBqqe~yʅ(&rfvP7D?=֍,VܤK)en- "(YRFҽ{Et:qEFp'\GTJ57鰾ՐM=D]3Qsx"p›qRa2)V߳hm9-HS+–޻PSa.H줗iif8vtlj-xՈ1VJX#n4;$`ۉ8㰽g ?P`qƥ^Ք2D I4\4~=D&_,uia_P#" 8yfܗe1;?xxUl˽<# Ҍs׬Kj1cN vO>Ìu0@`jT՟Cqr'8A\ /x?ݶzF&PqoZ?=sk[!ß_pYN|eg_ijrWyA|E0Q2l,DEUV=m>\[k0t99}&4=CQ474X@uV7~%Dk'L 19WK=K&sc̹ "F[«x w'vZ k9ZMk sZxy(TLΞhv +h=zŴtli*_`5achˍ}'"JQ0U5Ks.cA\g*԰N}*BQS*+Ll'VclKN3%5Ak뀧d((3l7ιM9+B̩ZI3.\ߩVч 2(8k alyB4 wA9jM9\]Ix)iLS.V$~AjUZF:=yűʶ{ ^KgiDZb]>XPCŵ՘ Lssũma|ARAnx5/]'蜾<3|a:fIS{HhU$24Ͷ|fz3$Ndf[)i*%Q)dTը_c:WV:O=^xbz0oz䃇=0z fl1Z#g}elciH_1/ک1ArA<:x'~݂WX.rڗi5alY~Z-;fGܭ$IjVJ2 !_'=WVx%⤕d7sͮ5bKЖu|0mxrQQ:Y@&MCo<աm1-{m͌~!ppi bnL=JcjRV2x÷Xn+k6EɺX?{>RR"n7"@sS.5jI i%Zd!KRP|jM,8=C2tcK{9ߏWĤ&#Hy&Cn'LЅVsĻ5M:KB{^RL T*ib aHFD ϗJٙ~= bqs>^~)A%i\T2QĢŤn !MS~w*Jutem+es7}'dTը T<_f|XۆWSy~i@6Nu8x-5إY׾z]5>@PAkc`iVtNsT Tv 7>^XKeG- fP-nOIGY(y^&q9VdClD׾=xƚ s8>vQc>p;Y:hAS.^HHh[JCmr 7\kHRyzGN3Eg[jYj:=C"kfjLR<rk.e!zc'i]yҁr[(|Y\&|ETT!P^(81o./5)Ł!Jݞ3>,R^k̄k"ӗswy4#M}(fJZCMQ$<%\VP1̝\p6(ӷTned(҃K7-w\>QQا)BNӰ'IsS.) $MZ:*2Jb{4uKt:Kcl>xscspYg tud:ᏝĜc]=QjTb}ؘ'>QW%Բ /ran>^C8Nod'] T+IajkL?F{&st;HIhݫW!S\xB+BfL)8h6w2;J5-LIH$qV^ѡ{LݫQc'Q~a$9cR|9R.gqVLXqo8x q ې1Q=ZfgPͫ!)QK/Sgp-&6(3wnián+jB[6v'\-ˢȩ%^voZx'\ja{UG[6*Uw^xbJ0Sr6 DxgHZvVr=:TdJzf?q<|)0ouPr4s͘ Cʠ,{u+a*ʾqp -͜*U**T_F(y=5kӓaD+i}O1VѬ奈ל7=w+ZaaZܷ%5ng i( =}vSƒZIp%k2DVbXIל=3w0Z <(!MAA몡dBycK3[?C pUU7+L+O&Ma Mrfæfz\Թ?x%WFˊ<\ D#h&w¯ŋ!uo`-r!jT՟dCB(??J(c:ti-Gz#!@rp)+$RU}%̇?/sbyCٍwwx YA.CD2V\S*}fPjʅ}ρO/Q]ta${[sn߲۲tGΞaQ~sV*7ʠP/ 5)$ZuYn7 u$JR\G]$6vu3%1-̓"tnW3.3𺴖'pмt#>Z>&-iW͠oh=ߣ1rs#a)قMd}K!W2Ywv.n05&z1з /ϩ .Zq&nyq-Y݁2JEűOH=F!_"ZϨ`KU-.O>ΫiLtZkzkf-)aeAhiuS\Q(PxիK3.2;ܵN:DG}_1U׼J0^S\O1F~r7?{Œ]ã{7Cカ=>ﲾrdef԰Jɏ;Ce 腖( EY6{'%\=vB&U~='穔\./K9wMÕ.Z3QNpjIS}%Vܤ  S3B@F5QOZ3=OĉiI3_]4?<ͼxc{܊pVc#G]#S㎭[*h>l62X? f_#sl_gbX݂hwp3}v3Ǽ, \/|dFɺh5ALP?xǚ~aa: 90\oVņ$:E]-iJG. ^  cqe%xbrX(ee3YJS$_e`c/wnu fna&ȖYc=֖4=>T4~ѡ6`@gZdͣlUk+ɡ ͔^h)Dxe9fnʕMnH8Xr'ܒ|73=(k@$4xVRΓ BO>;Cp}q%XJIH6L섦^wacڂ´ ͝4ɦzIb o}"ٱoyRfL'X7yFКrtؼ3aP~i Qbch#[*@_ v/*NȜŌҖٹ_Θ"MeHFXsD du+,Zuyg;ZS_Y6{^ar̥Tϰ/G\_Ok\[K8T^WiMg(\')ʆFK{iajܑ 0~i!48QjT2|v2~Q.pҥŧ?}$}V>H gj??VӳX?_l- '~4߉S3]u^nl16{ZRU;+7㏕HRS/ECŝЍޜL{|eYTьGݔNL,7m>7PKA~feZZqmV#eq=jVʑyrA3^sdZxEZpt:G+B@r,+ ad q%+,BFszW/>NO{Wܝ‹_{mÍ$۶zrarD$IW|fǰrs=>rL9)Δj!.NvQ*pϮqTN(s ^vB9$4zJKkHM++ 腖zc9a/ IDAT 4ׯ|@{|+Z/Or^ear}M,]ƫ:;x }'ߓ)>7w{OgB BPsk2YYfz 5l,KIbu3ag:.ID0txMՃi2_6 x^0=5r/ߌ޲lr?quO=M#5{mA;Ua!L86/KS!;f'eE~ BU(n( /5jH0[wrQ ad&דK~J&\ OvT$朆 ku+%5dpdlZ@NS(yۡn3SK01й وO[̵Ύ> ӥaO?f'ei%Nc?,+y [3t^Tp80;|aj 2]2]$ʌ%4:}Kx`s=A}h|NOܺz4jTwqZ'IOΜcm~=_΅ o{h/O}rIJB a @v*%UɅ\i\IYeӟB;WtAعN$Q,PDo onlBn0^s߷-eͲ;1ůn<Ӆ[cO3b HdRх~=R,Z8{ҧ s!v #(U6h^Ҹ1 r^`EkcGȆuS0T>X+s y<'Zrh+._s޳wdJSs;m~F  ] R0tQ,S2ڎmloĹp<.lE<0h8:aRZ++^=p{H}"A07pdVS!q0bHr$FkX;HS#Njj\&+q]+[))F-݁IgѐQ7aidgp]G[l0.vfkdM[Z(Z]̝eq !O5{\Hen+3lqVG*?r7f'\#V4`O yq9 R)ݳՇv.w7#g~js^cViaRHf70( Ւi!Pm8mV.iP"27Ck\J񅀭 i*g~mÿBN. 7 ׯEoLO@j>~G;ћAYECZA+C4g8w2@F5Qu~n~LOy|L/E^@=nu1<4_*eHTʰx{^YYu`]/XCqn͝OyLz8 N,ֶRn'> }ֶS=q/VhBq'[Ḥ_]OY6v lJ!WWb!:R*(&jZIS 5@C/Ͻ5͔3$&Xg{M?L vm%īJh{wf'5xt2a([IjI2s(dY/ AWfKh( }Tը{8H/1!¯XY_^]b?@<4Y^ն+f#lpyF8 cZcN HoVީW sS {_58(kWη鮔k~N2."NڷB2~(':&MPZf&&dF6H Og[/F %uNY FJ !qvq?]DZRd\-#. 9QwNqilG ^(`KqzK(qkb:m[ܼqi,θLd\YL3ew vi[_ۚ8{Ϝz.2,^Mܶ[wf=}cy##P-4r%{ZvpCKԑZJl4Z)ݾ&_]Mbi"͔~G>skPj>pfIJƊ|R}:-iP:B;Y|91=p3Pj+,ǒn,iX߾Hoj;a7!(f\2t)_̑SczhkyE88PN&ϳnAd!_. eWom\Y4Clď<=Y^Bo)5#n>f ϱy^[9H |Y$OHu;M#^ģdTը{PIͧ><_^'I ++/3]C+pqb?$(|?H3lG$Yk wΛ5Uzh-"IffR8=ꯂ| WWD,ol5dvߍL48N:wͻ6S Րvfp(snRr e zUh E=KqbnEœ臆nQMTƊzqDDi0_Gi`o#XBr}-:Y`vʥ1gzi_{Xf'[ľ7%5ƉR,,y{FJ'2D=Ca.Nʖ 9nt0kĢn{E<3r vF*٠:|f$RV%=-5Iے}J}{@3KZ(Ŋ?v\ğZY~vjHR1kNo1L ~ȬKOj uGT˒h4@6|` ׯcf|W1Fi #Kw 4!̖wg0q ;7%k:Sv 3 jEKFe4jTʨ Ţ|}G1 ݆ \Ν>>Bʵҭ[<`Plt3u4fQ_͟4ce3_6پ'BBT5g?N{󯳻4EĞˍ 9 LrXvdAi V;ee+k4nʉ`UP`:GʘHp %uzƞ kS=OGGm7_."rkzU СGr7Z6SIyh}G8\Z\W̺M9TJ҈c!N& U uje-[l 'Ou=0llfBq-a$gqd8,l;@aZf8Z1^{ ,\TݿDֵq"A|@t#!ba5wI 7֓yf};ee#味 .! ƚzE601D @וZ.)VyH2WɯɅiu-^8X"WڙԻ(N%bz|_gC9滊UlzE lhy9dv!-VQKiNOum-KY(qW_{zg'v O7 Xl%;_ рmXU4xBI3f т|;4ۆVIS<ֆzU7M7{/%q2@F5Q?]q4=??fr%/'>WXpanA;b #j_5QS*߂yNH N}_!U͞L'<70 TLկ~a繟#6nMe-P^V]::rta |_ j%ק^@؞" ӔO51!Z Lt3aK#kq*Tق\{(^0&Ie@cUSc`@;t]BKb{#(h^^{jw <Ȯ~w{{AR(REŶh'X&ؙ3ēJ&JR585*g9$Jr8Z#[6j_(q'@b߁F7z7{_wH?ީ($sk޸͍4X@=n),+ 6 P.j].c{XNCȅ 1Ij}a$wO8Y290=pxﶴ,_J~W'>9k p$W^< ;%atߜ vM:gǼ$K=A+Σsw'_eIޥ5fJsÈP9&Xrl׀t3.hC@ppܻL)ϩyZ ]snJj)GybaB=~gZGNma kX5 ;~7&&XLi49͹sG?zuǰZvG0b_>h~j~ kX\N1PBZZK=vjͶk# ~8Ҭ훕]W|Sk6M4xERkt#ww݁nt wd+=w wqSTzG&Dh.X~ut3̩K?]!jIgF|.%&^s/â7)JmPN$ ICB.\OyKE(O @Z~9|Cnحl|sYb~07dPʼ/9 VײRn;ඟ$2[D(}}P=m!N%aZylRR-ЕnWTk}F$Q|>V_r߼sFo!VQ nl؈d]Jjl녖MC?JNO ╦w0H[ Y7̌< 7VߏĵNJf+efee@'ov3xtxD(BD˴{Di%)_{C?D={.e(׾(ȇ`F_WY w}#p|ÕjbU`.EZh,(`n{rAP#oڦ!Ѻ H4dXְkB=kk"t+}VG>xXnoJ㡑Ey""\XNt MӳTj39*n3UxnrYLP~o߈d IDATC{ޙR5DDyqfJBnu:oĕ*L،2Ls2|$% Scyp.q q*Oٰz/\4inRA6yZ©KGt3lSz#k&Ea)5Db?#G$l.W7SR+cE߲ܢ]Mp'jIS)mZi = -S!? H;m["nmPxcq? d-Jje$y;` +φ; \RL//[Q;R(>8 #MD4ZRR2=Ⱦ9An{BG*hC Bf*,x.-M%kZ]1X{hMùfd̈́)G^"x֙AA)>'ZYf g%7 \OYde9/wc|rWAJ$]p!z54Q=C/f =,ǖ͖!M>@)mj @3V:Ƣ-&3rAqq!AkR{wA0z_15]A6$xڭ7S<Y_JZ=P MDCH78'3#c,D&ϻN a kX/4|6~yRNpg#^yx<<3 wz$ <-ÏUZӗ#wcP*l>i4:>w1A/WJJҏKtz/qsM7VɌY6؛;!6C(ԫ]i=}O}rE_j7ZNh#{YX_jb*nNKo^4_ydB_/y"\E=| :tW:ϲ+zea9!M%#ʐ+$4oz m:\.op`ej%ydM`[Rw&w$]Y>g8&&$.-x=53;6Ij 2XM1;ne2lx~a!,k S-&խkiuc;)$#KXzh%PG }?R$|Jf>̏9Y>LP*=\')0ZBw ۵5wwA2F\z}9Z"iAX{819c+uHa_k1ƾTS3D@5a !ۻx3>!<M8w^z| _۵Zcq+vÇ&sMsQZR'7FV4gD|ǧ[{j JtX|^mMioEKV ^n i6ZC/44چ=plwP x=6E)(:xQj }}*Q%,j(RkyT+1?cD(Joe(GɇhTn&i1eM8L U=I[Dָ &4^F5M|kh%V4 uxݧZ.Hu!lyʼn4Ɗh^T:LPTxZY{\86ĞѲ|8% x&Ĺ>Ibiuq^@2"dk?BoYC05Q()u3a6bzW#;v` BpR4$V}Y_3iE/vSc.ᇫXdY\jҭ^Fe6pSPPU\>ǖąO}fK}BWRhEl}fJ{QZF1ddc5R 4[(^ǰqt?&f[kiP-k-%qS&f`[& HDυ協=3.VR|em/?zrM#b]Y.%)w.v.4?*ղRҬ] :$Mݾ#:c>?x%,pְ5?nM31; H˵kp Oy.ߞh[:u'FHo.v5n Y CjU(hfQWƙ]5=1Q"[Vq490Ywp62Qd27鰴fXHб,{)giҁYf]Yw04J/EM?\,TPx e|z5 ִTTl4qs }W x$nOpjpi!a.rB%ԋ]. %#$o3:Qi3mՄf=ߥP*(©H\i=O6νPU,Gcnui|*E^61^ ccf+Wczc𜿞5)7JLF[vOQ.HCf3tlnrJB{:`rTG, [ON% Y]![u&7DqZB{NbY},R.qv _]F dw(:#Je3 #dE뙥 L4PKE+Mn؁HcH{VNyϬO,<{ׅM3;FGXM~F(&iAtl>^BÁ.T(wBI x%~T ^U4QA%.N,e)F!Xk]NX.jNxixFH!Mmj> b]z!6o̲W͹|6υeW6RrrEwZYI9CԶA'+E *r7Х9b\9P9(Gmes{?C1z4qq,:͖ay=Ek=ɐorllj1vYf'6[XMc{UKz`. {VJ꩕kFٕϹph(nKWCvQPj ְ'zLOkQ(qlv y&ĉ_ަ0Ƽ1/9z;ힵkYZKN^LI:@5r4yZE;3?Дz@ 2~eB3I'MecNFJi iڵ~_`flAg'ǭsm+M9O|#: 65V.n\:QB%Q4]GĝZ+Y& NG/vTK[mD= ·#4vVf{؞pa!yB;o<QN]Q,Iڥb|;*(:ڤ{1belja ;9ّ{bm(fZ {խ\鞫vZ m.z[֛)oH ۧ3F{}yVtra kXE=xcl'FΜqy?k-`"'YѪg+%m" clե94dVK{g]ZYʊrIk\R,j]u &,*<ſGxBz}C4/ n1n槽AӲ](%y)- jOCiޥDߡۯ& 5ۆՔ~tb(uyED\md] )9gtB4Z VVC|afj<Gs^h*Ք" Y;` kX/8'wkME W*^ztk95?ʓκn/{reHEzUȡy2Q햋yS@xBYGM- K _sON|]^ ^if٭-ʬq3;yқ:t68X:;踃;h))%I /| )"K?ps9.w! %LSizGG4+)b E}_jFO*[Z+%*"T iSK0aJYN^IY(In߼\c p]ifFѪB/3- )Q(I/Kvl73qqĆ5 $ #\OYZMffv¥oq n)Ju,`{0\3;`w{cE_(w V.ܷVÑ~blV5#SIh\OH4o#"Gӗ"_*E!轳n{/ԴՄF[n߲ge~ڥZ¶</"/4փkh6d닦[]Ec@{*eiqIW$52tba9 B-~}71iYe,2d'f臥۳4;Fr:y/ȡ(O䗢cU z'bۜ>g.Ͼ+' ߵ(吤Z)>ͻ01LwED{t8.a!6ƒӷ , pְ5yxmgl]~3g~~ʎaeg wW>xp y'di&w״5h:**ՙw,.^;i'N1]4(Xo#V|.εo`안9&>]vΘo}pK+7c>ˆR7,6ot{{]ŭ\ȆYxQ{7@\xuSCpuQ|YYWXID f|fK92#ǹ2n]x{Ͽ>MÃ87چW$N_8s f;~ ZB85kbk=BjrRk.zOA2F6#MX?N"ԕk)|gS,SR!ӿh 5oi3'Ɯu^-e@ )*,j:G߿ Pk5[)J͖mN *-W['Cq+Xr-d%)VW,wϸ4;VW sDu$piXXN5<gtDпÃBV62S8S}x|tюdv4\R)&P? :lu *ǂֹN/=c|x  q\^wD 2I*)ZFńQA|{'0q [L TJqSdqrk D7^[ٗgy;#\]L0ZX qub0@5a F=|_E_Ǩ!1Qr̙Soƿ^Z3 b.ߣTҊ3}Cot翹"N h[}ŏHoyd}%cbt+/[ף; IDAT j)WhVE7R,%C$XQl9y1텖JIsfJ$hvEh e;-fe@oe;ɹ nH nX~|,Өo/3|%5]՛);~F %G:rcG\_(+ρD+au1mXN^χGl5".db|eh9+9zZ-i4nG?}C,MSQKgz]1i$\yw3^(E?Mӻk2=xWa4!j~ćQTĉ|1YkjBYr4,n DapJD+Fbrr&4kK9#n+$ŘsyS,l!xiκs5W{Z_'G )~j Q"&3@5a K\- eZK2>ZY%AUpq6lEsQߗyo#7 7VED!Ւff‘d9 *Mp@$:ӣ7}x:"Dg© m m=26R $b&N bGHe+}6"NJӋL3nZ7L=❨;O9~?l i7:AbO5 ebKJ[rc9;+aoLiܷZ &SX!sssJEZY4{\޻_[E=PCK|O2SoDw}(-z-kݙytHZ,')OD=fʀ &#U ot="A95Jszi"Kݧ>{cq)ISZ h(uu`neKj\lpe%h"͚x|P.9W+?c0?rQ'4;vgT8БLuZ4S uw?Jq[iW]K{F}6nykg 'L`m3kK='ws[Bf#kT Ւ̕i܏>7쎢XpJc!&QtۊօM7ҋNte#ɬ7{ɜ{﹒3ђ6)/{==ɨ6I=V.uH+eOO촻fpuI(x{f[,j>06P -t0޳TRVSFm`"wAE=e3.~Iv =_YK=϶fpbD ZQ vWٱ[|Q͖h j;YP =WRQS;x)C2Qv^M#A#=F([{05p~&:NDwQJ&10ZV/S)-'\d.Uٯ8lEsѶxAkaSq*ϼySҕJ?Ϳjs/>Hhr:B%be18\>v,1bn% qJ)T,u%],o- a3z $/0t!.>d1^Ź%Lĵm5a kXou~a#G~q`sΞmP4XboΆjNW'G5@5 Rq1^,X0GUl-0\l>WK#vPDaFhy=o[j twٵO r-ObZBcS'Md4DlgR\I025ٲzd^ޢÇ}d_KEFjH]zYX(v[N_fK7 u=Al…"to@rUVN8vEPnM fbآ1BBk8}9~͆^ 3yGH]wN=.wyK,וuCx5fjL塴8܃eAj֛)qZL=^1Ԍc=?TL.%8vtW2<.Xr.J/س8TԢӓ͸Rp:Yo9y1z3NHh)jU "B;ߓ+]w 2 mGgh-al<j_q] <5Z˵8PI_~*x8Ty_)02G'iζ4"_ǩ{wE͞l5B<mLjɶQl9}9Pcޞh-K/eATӯV#>tyN`l%m\)\&T8 n945-ł3 `ٖɻ ʊJY(a;*Ʒ$&I-ϟ8W7۲S>.~@oyʽ53!Kw!{jEp=ӌ- K1H($\ݞnR ,n6z.XI>Zħ5VKhμ W{_ݷǻF' S#v 0rxGgYH= ^>dȨwL:Yf)=Ccohw=-I ~%I+ee "NDPRG|Wz[~d3W$u,ߓn!iv) |u=6B4"􄫞 ;=˅5g.4d3Z,~q%ͶceJQ[m0WQ,*aJ06kFhV7R>ÊhYPSekn R*j U7Rg#mC̭lHjzc8w?4ݞ9]Dg͎$erTPP.J.]uk@A$ ZW a|<{yBV,&4mzMS){ E6 b,3:4 ]Cs]$a#O_ZMYoO1h-*ЊN %µS\Zh>UY~qqVfgy܄Pbe Q-ǡJ (6ZXmX\KSu|>!I%eפ{g E4:ĉ :w>@&F( +)I*ׇ͔Ȱ5aycnNw8p'(Lj"Õ+JsmO3Gm@as~VǘbLlЍZ>r~ėr|נ3Q w"I%4{eI=ݾaupZ<8_(k\]\Hxcn&@^U2L5L'wwxZK3ܝjǡݒY4♈+ / yC2a kXoJ3[k##?&ll./; )W)[K6m_jnS{EBAgR+k2;l6f|Ce$/I%Mg|Zse=˯}Ş; -_O[s3㒣P*hAt4Q`;g֥\Rqݸſ@r&i]2kC%gjVg޴xP$ -o{ݜ8񺃵gL-v m+>?2RQK޳vScB*"Yx:e;ܽsw<G[N봻Y0[l wr}_|oK]#+7btZ#eKњ ł]O46߄{}qceb3Zenҥ5L啳ZIs];Vuf~Fz% t1ÂܗcmCw.D+up ?P܎reQf A`zĨibJY%2Ex} u+ rP#?_}seC5;y[E zk7#jEqpcb$e6oj;w= 'j%Ϛ0@ވF ׳)3'CV7 d#Ɍy_hy q+K wbQ=2ֹ1w?>3h$V72a kXz8cnj.ap<ԭiz:xm[@훓|zU3;.$@sGxǽa6#JwnB|eI^fBUGϷ3咦ӓ $N8ϚRIzO[sbH[?(bQ&+k&G5QlN_ٷ˕tߧ^r&]j#wJ݌S*S8L<>OTPx38Ք ==b ȍhPlP`&J,bjOSJ CLzz*b֨M#ދc6[f'+4T=G4I8s9f.w Ҿux qs+HMÁV4BENY^Oya\kY\Ldyf=[js(456̈́e3@zlDl-,U=,P #;` (2@7v=R-ߒQfS74iƢ zןcݯR@!K7L{ܔrFsC_v?2>KroOngvzJ)3 $ԸKb+>p%ȪFlYmgCygբ-7GE!vrpaPn_fy0va kXC=$?߅lllO3?o׺\݊z܊~x g\GW/$DuKQd[Hɶ\hى+sb;䕬8_\bz/V;ؖ-[TebI,с;c{gH kaޙ}~[4 )6yO`?gOFw^FClBdI BjR%bc\WzJ#ZJ0wP+QJgNDl{Is żdtf׸1q8jV53娖UqlS19~|ށ'4s-s{$3iO3!e3){M)&kߍ?=~ h4KqGr!7n{>'f: 43)_^\f%͎bl%yLdOl5?'X $ _n=}l*gk+Nڥ^}OKt=Xd{m.+oIחE) ?Ư{ %k.bfYq%qyĞ)g쥘}ՒE3":+*]G\ M{]6\ER8o(Wa63H>|(5\y7TJfcf ԵRvxN7kǚZC {rQ[|N^32ǬAAFjyIi&TB 4 5%%7dcGlk{mm{Ch?q]db)ɘ9;sžlq%䲩 |bonR.n V$$4ZX 8i-.̮N ڥKhHcD' ez\^d2N-cCVgTQ ݥ rM]غQ_.#N/, UdhCm cŠѾn{Ϥg"֛ ߳L?w(i(uӵnNRzWvO8=0 6϶^k{O~LO|~0Y#3ڃ;6˵S3&; :\flиŔ$w \;k}K~ݻ ('v`-ť%IR|лИBZ=kV3E:$&ȰR8 i6'Ӛ Ds~6!QZKYojLQ'W  JI01dR(6akbqkhKU&|/U-[ʯNƹՄg"l[)f阕Z@PZk(NTB&F @̱Pd12`WNu"@چޖDV)kuZ[+83 9ojp#oJā>JxlTMH_ɢ62v}O#{yqYX'ݢ4<\W浲saϢR(e McWu29b2"lJ/:  DZ,@..lIz?L^mbeb^gY6{S7Nj)CUTi*}}V0e@uL :wWz|!=Yg#>\<*E~vOZad1\Tk7UDA'& S_7u9!ans0R: Qw ޠ.& ۗw6VޗYhaf1X2ı @^ƿٽ]T)ɴ__}( ͻuczO46כO?T1f$ IJyM΂^]Ob'W>N#{s3ybiA1'ze==t iM zy].7=D7ٰEiBO;Qoc;g~TAiC)iW\7 ;nWTJ>W896:q*plTIc?% Px9i" s=G3ZCq~6s4g2 Ƈm%RA^6YuE>瓟P*m/|I'LRc&Q J1/yL_?}sxNFI κ?#?3BrE&P:gb'6R_Em a'_/zXJ?dfu)PW6+MB/|Ƈ-X▾Kys]6Kk)2 EjiUVSF%wQʸ[jY+@.ؼҌ+Ht,c]$9FԨ1]C]<^Ab{뻋LNjpktH:t"-OQݎ֦`H 퉕2}陈ݓ+>)q@ʊDSZRеf;idw*9}^(esz eidrd.,)rM⸗yf:m~,CFklV.NG)3 Ad?6Ɲ,o_֡WBmMhDUqmzK#-)-#o&]@tVK!jqvzlVj T$)eF{)"7dv1adЦ{_|>l!'ȍA{%jj-ELb4c =Rv$t`v)]l+4v756-qU$Z jk)J͐"mAF%.-I`ߴrjm3#Ƈl-s e47Քz=?09l@a`([5B Y'Fls~z|jzAOhuDS BXs!w6Ͷ\8e%v vciC 1&b~mu4n?1pqиiSx J;]}Q^k{ys?w|ͦi+6LMA8QO 349{6/~{;y_I)b8Gq;?~ @ )99lVGԮ GW.yc /wh ̕o^'n~Gtۙu_|c62ϟu'x0:`Fa:of@DZ?XbZ݃𓋧㵡֩CCgU:̜EK;I5< )ajƺpb&tƒ;d]٣Wx7\eY&N'J$VOM9:fv)bfǘ@I~b@]Ԩer{(7QQ 8L}9%2u g.81s1':,Q #^]W S'и)D32`qC${:\\L'zt(6:|IO=Wc:piȠԨE٢7Ea΋|i7qxE g"oEI 8dykkfzv\ft;&]ep%NJVG_N\Ku-X.Xrtse4FS'a'NE86=sO/Jy5秐MY21bW(䲩][`p=(pn%kHI) Yv<VmV=l+j4TPsR.fbN^yzK=_|tW5? aall˴DcKPHzk&pl --9wPZJS;ڑQuXP,=n^k\0ښ4rf G^KC~]/4Z[,{i^7){u(҉(iظ[)G+!/II:x.`=Czbt~ qmN*-FBoL7, =21|mE@36hiI4nb[sͥ9֪4aѓ7ٰ}9IW=')%c6JA)j Ņu%<p%S..hK;*6y_o웾~]݀meMt7$5m1}G %Y53*Rm . {9:R4q-ۿ!N`0pnwK-윰r-&weň=I,wV^RV6m~Ik}%o:\zRe˱ =ÆLRNo#gcŖ&j"1 Elf0o=Wd׳t)dv.;]sPѥ[}Gr3.dž dbf~yfC:ltO{Jɾ)vnVwAcїl]dff*ѫ&ʦjqj5̃yjMK^C&fn)>a4+6VJ'Tt&tB3XZKJ ~~%ݳ%Ic%\os!ZNG.~p:k,{޵X֙=4 @^'!}=X8r< TCCry唱t)tIěΨٯϾ̗?x(ֹ02z3yh,WdJw :m`xWKՒ{K -Op/pLH>Nq!;?$U&ѾW\lк%W|əK cF0[ot4GY|>›}n3^ZuOӚwtaO|62owϝM٫XKkbkF&yeˉS-$hPZ=ef^S9fCS|8;Np[3>l15j&1R̊$FئXrxMye(ҎtY #gOefяJ/=憝k ,YnN>+BdnJC.6k šHN[S?z&$L[fRpa>LJMsMAu脦:"s@> V)ew62] +71o<&Qj)<~5;4AܤKe FX36u,|Փ-NLؘ~Q(͎eU?Rγ4ډKh cvISm[`KZCp$bs`f>\W簝,;$1ñkm >=]GhjLJnpt^ΓؖqL!kI&؂ThVpm(n LX>'>Gl{}˗RR?ؘߨ˿ٱ#Y8&Aqmso> }p\(Taa7hݍ8O":mZ 2¡1Q]Dy`tH%ZzKԛFm7yLd:)^Ω(59_0>rْh9r^mRe:'˴ڝOS$UPki"T+$d߰ePaNX]ᤛ.=S:hvS13ax$vǚFΖN9fR*%MJѺ ZDS#6',$R⻆E- VyP|f#ft"cE*Nw|/%'m\a{tw<M7/q@Lz(Vin6t(4;Z]V7{`]{535_%k 3I1f*2q;YZh{6sbv=fI㍖0ͯ.%[EDR\\HXorMq`M"۰ÍrMqBĎ12_1* RFW资 {FY$JC \@Y226d&yZS+FMuC}2mOW&m}tHT7Rˆ^fO #hkۤ[dήcXd(iRȌ=p `s7/s=Q%5Yg$9v&"5Ef &vSꍔTgzؘEo+_;?&ғ5߉͇Q !;w>=02׹ZWsmcz^UєqCNu 3$+iFqOܴ5z.̈́[~a3x8t>o7h:lj F}I+0jɢeb) bKJRbI5a_^0.a 6R*hik }%4gFn7O>Iºᄗ_;F͞`Y$0SZʵqV6[̵H!ZŸ?;S{Mg?_~*o>W|PN21a?sfW@_DYJy|O0ѭ߿.,,4Z _VqL$f\JLNU:PB>/夡u908hM'q AaEhίS|xƳ+&lGMzRNU|ϟYYoUu/Fiɴ' +jo2[ֆ̵L9 U~ӑ.$y#MB` :yPuO5Fi :kG9ㄑ:fj Z{+ME!>蠕M PWnrȵyhh|qVNjj=h#5g5Obeb.>Aa78beOuo*OY,#rW!>cgcHP)jҜķ5Ԏ|3v8YfPYXٛkKg9@=2:ܥ΋F/r/Xo)t/ $պ&Nvo5M)e^ oܮe}y`}!.so]<p[wd{?_8z^uDxO~r9[@d=G g.%↝n/IVJXZL /U?J `n{ce}Fs$֌֓}'ӛ2{{R'0<2 h]89*7 J[o 8݆u~2+kNcg#(:VzxXgEY4;Mz[_Ll Tͯ$&-ҙEYN m,",֔K+e ?qLnԈJ]: 8MTKf'; mK9BUy#X K{iHgR)a>aåEc8Ֆ"I^#skuK1S# kuE_LJEɻ&s@ܰy//pFJiGQض$N4=P)4s+;ra~1җLBh}n/o[cRK~>x/Q%g NĶj.-$L :؂{]VSځFlr+v1'Uj*sbrw~jf dyHt}7ݚc<윸:TcMdE2/Lcvh %5}}w8q>ƶc( wѲ<+9%v߹{?{ w;;:puj`膡Ώn!׮7K [&f¡~g`zZq]?ʣ&OC/22kN[<;y8;Z0>$X^\ZLu=i mO 9:`e]16`e0hܒEe"q9DgGgYo J;=]X= [;Ԍ ^]![ܼ?|(*tY-I%Ln,h#ä :/H;4ZzCkX$$rogk)/pi[iՔ;nht(f  @>zGm5;#l`VxchBl{=?z:{S)^CAʥK ##} 7M@ԹKi\p!'RJ:pߘogB<?ͷ\MއrAw9Y%ߓXL k~IC}\z8?37M6H=.s*xץQ[&'8}bChYwhG[M5#y/aYM_3bfcѧ,=@ }ϲ-t)}ڃeIY[\%:}–[J.'Fl+2(6`N޼:flt ] Raw!'{;'OYTD9>/M':2[_bE!'SC5+If2i^bzw]\H2o A&{)˯cǰ5^]2;XWtBLcqpQk._j{FT`iq,KyktBCdRfS:ҩw29fbzt$X3})7) #Y53oL"A)M8PAd|EWXE|4 pmѣ}/ʒՔAM,)И"ԆHYM{- _']HKb SF/MUztD)=zS1W+mNJ[uev:+Rz@ʅ){~vRL?G{ oxztzz=Yb^E@dc"}9FFrm<\PtS}~ڷVKZyf% #^$Przb!\Y kL#1~:h6ae9EXXus<yG\f:Zͅ*[HOR4:6Q|:4hդƈM)fګ+c+5Z4\uS[0855`2<_O]>Qr-%JVO}*(RP M u+)g.&X #6{2n[]-P(IdEypSgh5bpxݛLog3 sSH"C/KVi3zyQļ\Lܙ#&iDn匇^k-Uc1yp0:IS}a.aC*OSS9?\bSb$ #x<&'cB#:D1W|f 7Spd4){1F|l[G#l3xqJ$ XB_*|Gz?{k~obDŽ)-]5H|g='#8G?|!}qFvݻ AHWh.p![ny oS(29*cYNoZ]H ΁d|kJZ\022h?gc8. - ̓ńuP< 4MAAჿQ!u C¬W/AlLa(8濶i7kXKs|2?zzphI5YaJ;04NYNpl3 Znetu3>v/d 94nyҗOZkv YH|:4wE?q 6w Kq)da.w^}p,JE a kz>%lUtFWSfeI,Cv0!oUpؙ::<' *5 [ fYulMϜ4t(֤Ή&h,ilwOؽɤqƇlWS;qńጢT0b^@cWorY"m7:9)lK`jq|k5T] e(HRIއBN3AjfKS2\vD fY"9;Z^f,-3hfRIS۾ ܽ~c.%bqnte`;0 #3Mx%&Ql,ϙoaq=^3ɑM%]{٥uU ѥn&ʒip]mYr#9Ap.bR\ }k /($ C2HJysw˶wdhj393;a4:1Z67[/sż]V|E#o< nصŇ`q~&/=T)v\r;Қ;:ǞC{l':q-{htHTVɡϝ~:x߹~G[ul>fgf;O|zq^%ClP8?8k}+}qI/7Fa-ץpn !f|dM{猦T nrjt&G3B?v֤L\)Ųo׾/5ǀ&{_dr /}F_ZW2pR+4 8fr¯ 봖8w%w&*6o}"I4u_Ybtn?R*8NGq)6(.Jk>gf4{㵴ך%4g9<}3զH kWXLCLO4ѵ<>uJS5 k^WXHG)YQqCD@Oq fZX}::QzuivJWghh"$Tb(>v] ME t 5K1P'ӹfnJ|$UF>3eH. ʍb+: nNeuо=?~@d3va\)T'G@Y+֧Ƨ x'g}揊WGkޮZ~8#?Jn}j_+%t%cۥd*hhnV>лW~3_)Tk^{]q?ߵ/Z]y[^B:r*NeDu(X280;[fiSi JFQ't ܰRRcIѱ~†UVD5ƉK&SmN-(BqO,Wu']:sm9GYe(CbE]ZgsfPTK Mcs|;iFQilcN;9Q<,uE k@u[-@p02Q=fͶ3WP">'tˈR"k'WA 9ev=i s R Ov} IDAT.`s+ 'Wf]VH$$IFf'8 xbKEQNOMO@LJ}3ᙚ y|omN.!HR}V7)DGQ*sA0cZ#3ht#_=RfgŤ TV(^j![+S4+^"޳.(^khi=mF-ѲVZvqC4MWጻbB ƧVuLΆؖĈ ]C;+>7knܶ.] iB3 ݭƲQPV8xe|:. P!cSӄ: U%j`v(3gnRH$p%3 iX•x::fͻq50Z_/GM~.83]}N>䵯6w=azU4Mh׽iįbL)76Жqy\[8r Zk&& RK~eD4!<וՆo]Ϳ~_'/}Kg{u m?_~5ΤS~CxǶ׹hH9̗4u=Ase/+_т`…9!As?{8^_hrاDÛߓwWk7ق.ȕCnTe !fdL %Z5lT .<r쒕GxٜظK &2EΏ? ܺIuGdIx|n=c|M nf+E( clS(k  CQ-zJ } }މ 3KwRIH8>1Rr$A(1292ij~+-AcNs r+b ۢ#~ jN\&kgfV%3{P"WFC;_P-6PWnSWm)-h^bpGרW756[lTs5:;iYR`vܣؖEiN2]}dLu~8SVzDLU*[`P:vgnl3QvUy}ǽΣf΀܄b#+ܪ0ŊQg|Zٟ7ˢ)L4f5iا(153p\Y㘚r9cwٺ"Zs2ytڴ4DÇ`{tu726۞ޞ_ H"x%K08#|GJ@?yZZ3EVeGR(KW ϏIV%MMi:3=YEc%> ,]D62!Ly|GSa"W۬6eyJcÊ+*iE֤/=9glO>*aqi4^J|ytѳO54v^W,K'S[oj/@F:K7+ M 54adpDbu*aԊc=mm5W>k M2Ϟ%n[تS>͇Զl{ݶ܍xc=x|7wݹtΤOo$;?q=7l<"P<:;/#&u%P`>>/v~ ߰m]LH@>)&+\{i]&wpp4W?Y'yr%t{c09ik"Nx_ޖ!9QҜ6p &TK ""X2WZO{M|>dEGB4cʑ쥼EB>>zlk)c,kWժ2|Big- ٦\Œh[0J%4:Rq%ٴoC]Jzl:WR%NP@èbu.Bt㪟TRa1KIh2p"*x/T$sulu] Z3zNwk@]i#_HҔػsܿ}wtGj?߷?SgGyᚲiyd`Sڀlz&|G-#v_ن^5{ j@4Viz5n]_]dkn~]go8 ~t{9Ґf.{ Ҳ .0y/B* HCXpw0yɆ2UnF6"Oxc_tJI:ڤ81KC.sEeOjժlZhj33hUw_~?}sd\;7PDs :D%R*ME(睫o|^UguI(%sYq-꼬Riթh(*P91d`Z;ii0`b¨̈S(8UQiٖ1P<U^vχ}G]Y {稻`zN6ui3}Isd:p|q:ruRʚ48L1dV!9Bdr:8*WB,S(aIYz>m?q|2ؖKyJP}dkcr֢2wy s5!=^a KљtY$yҖ%O2Wh6Y5nY>)9^̟ THF/dR_HL.4Et<59&`"fz:$5PRr$nPexҤW<bއ?a9 pбҿ/)@]зdSQ;r8@lWڋ.R?t=fZ~лw=難L}jMQ~q|?vđiq??q_sJ ۋnyQnͅklRS~85_<_מߞBDꇆ*::BVx>M+L1!}riN/O *Z 6 L!5P՞˪bS&UiXFakl IFCL29c2l%,$oSͪ I&r9I@'4JX-E]@ss|i(3Z)0r|А~H+LZ4\9&c>)hok GQ:lZC>^-tA Iv.b 4NeK "޿e 21`^˃>WZgT\bQjz5 *$-uc`֤\qpwP q"/r*^ZDdLPH@WyOɗF^3:?*j_,%̈́R27 ~3~s4+\"T< ){[PMEָ 03#Ҡ/U9$fi3_( *4 =>Riə  iJj@ami4XmR,]LzSWpcrlW/]ߒ+9nk4k"/29Y['ї**TvG6uACK ]W26%[2fJ5cN$5U\EL8T=+\8}xv+`/v=/ʥC#L,B'zVTG91mJ~Oسgu=__7.LN/[ ~@=(HTO6+ٰr((ׄ -jD `.onxcincQ2&.Mz; \OMΒHp7ږ_T>t,hBVYpԍ~W]o˜VxL4+XjN{ԧ4 رKsz#8mlqk|rzqTi_q[_Dȱirg)Uu%rcb.HO%4Ʀ= uM>fܠSxNQlJ\ˌr,jS"-0SJlWQ.:Ȟl=T/p=ߠiJ¡k.IҐɤuZ< ,C 5)| jS`* 9 Ej:&g-u?WvtsQ*Z./5w͍ЯbH*.h_n[`ʬȐ!:^] ?ᕛ~G1%[Oq[|WEn6 eXgB(TU3SQ%ER6ɘvb6#W3MDO BTѩF?r*CRqbYc2qXեhY{*`j\H&g%][sF[N:!4G<&C&:L7ai*Д\b~7 ?^gOg`lx{? >ũ+.zE"`~ܻD>1loZfgűb*ۛ-g2etgvxFy/4al؁}ﱆfyʵ󑝳?===_y֛}"so@~cl4Acc==ij="mY Tn_{+R 4u<K|£AI9n45 l|e>M:+-8FI [_>e*&%nžc.{4e'U8rƻ(10+/IGpU#x@s\!D ʔ1͎x̃dL0Лl Ǜ )Cr~NWh(M++Mem{]}MLM𫨚%yqLR@o40BW)H@?/{StB6M;Ų48^j-&5&f1B)kQC>H'5V7VkE|71:2ܒڢc~˶>LQ(r_[m: ~`_Z$ W+yjN!gkzFr28[~\dJE:!"1 Ba t]X |VUQ,gr*]PkէC,C38mZzPSc#*)jnb~>7 BA{Ew`bl[>mGzZ=<0\ٰfp=j/f;x쬏̾+ʖm%4-:E^,(N8qcǂ󆦆D5Y)cy?/ݴ6og~,D*?[齼}'߫%%o|槟b{~[׵X{=ZZ {ǣ{%NzHJ%?S_6*k)OHMR$N]cQqCnTBt K?ȐO_]GZ7f_ LB9ZU xؔJ*61ˡB)>Q׿",:Jj k:n \($KTa %?}sコ2L̟.r\ȗCcYfU3+5i֚D{UQUW;7+A|#|c, CYe5\O]/IMo)ƬenhQ`}L9xZBIw$Pԍ}Qqn;p ;*&SZ?WmQ($#nQdLwJӢ-񳶥Sݠ>:>8F2}kbAēF +PrLؖ`b&@h:R2WjJ|h(ĠkeI<`Bb  ͨ!MAn2 +y܋hD}ـs&M)T6T\v$WS"gJ _EԬ\1$WElYk/hs@Vv>[_m w⭏Pv4\OhLeG:<Ʀ+xM["\A*H%Il}f6#R)J-/Pg IቀVAMRY%k$Z?4q<#jz;SM+ꞙɩ{0n bs|$ LIeb fhBV.,:=}=#pxaZwunS;~Y.\޳.\4X~ 9Wls=Bs}k;?{g\We^|nd:"$X<hyY iѯ7xCks Qa$ |>BRj k9e?WwԿQH{#H סr hMոGKg^,E:22ro mi i0Gʤag:B KWTa= IDAT, |ϡy 앛 N)?e 45%m(|Q9 "TQ'<@=N&Rŗ #:(Դ)c>JiW 5 `T `eX ho)|r^ %zUt'dP]_!(t(C6[ 5JEA+C:Z )I'hLR&lZcrV60908h(žfU1I2!kH4M`iўXH"}h+\kNjaA }6>^Z!mZ6Ͼy|"}z?`nSy]s>ITv?[DsJwjb,]+j Zȯ_xꡧ$@w"]g;fV~%ÙDs"З>tv5{?;3"WoiƞVYQ^|r~x%'vֶ5k$rEpb d@=?[g7`o-~ʡ^&*IU٧ަ<x+hXnws%L7te4E߇Qub )ebI9 's{ 9\\S\6˯OHόpŊ3>9+ԡMiҠc>-Xi;QX2.:cL%I4e7vut]O.|]MK3 _be/cpԧ׬eTkH u RY:{LV)"\'\J{(;J\00+IY.I%d:i(AkO >kWFilЮxL,B ]  Vyl[ ,WBb 6a\F&%[* p*f:_1O}IٖXQxd]IRP.jq 3.0%Rf!9+w-o5Wa|qG)u*SԲ\D@, T蒆e*hfz. ͚E7>Œ y-յVq$#> g6LR뮲A콼wW\Y:F۲B7֦ :62P\@X>r0DZ{ߓδ NA.SDML?wv%z7| !V::z~·ߞ j@{gvviimZxi@X 89y?LoS{W޶0-plدBL>ֲ ,L zжf mSNкy^$zBL@^TBr //zg}n ]ZZ,Hr5%'~eE股i\BiḪ1ھzc:^`K"(՚ns25әڦaSͤ^M_# 8̍xӂ/͛SDŽ0X_MO&&|> @!':Ox]T>>5_#1CNݚ%d`, BZ :,RyVBJڤ5$a@')g8P΅C)%{4f5t]D@E9>tn8\OF ֊jjaf*B7\sTb{JDƈ4p:\GYJ*2 94Psu!L̨)i0lJ׮]oY@%>G:E-!-:]-O bV[ q-[N*4y7%Ula{󘆐lA(%֮05htԥ52QU K ~ 0 ބ!L5*!p1[ BMC yߟמU\Isؽ[_MMj\ٿ ӐHʕ oG&}d45em:JQMaH6ej29OwpvZbZU(\%Y[7ɗBFjxcuݚ9+š=rձA$cJJa[5\|a2 OK&ŊʧXһ.fR[=KkMp& /9tk_p ^rUJP,~S|3񺍮i->wgeYa} :m) HCSC}˺S凾!{EwC~r!Yե>tSQTbzBAI(H}=BoImV줮ىyOnf@ #N^Wē) 3KmVŊjwhlv 9p¥BJn;@ْ%lKu4kV_fCWK:")Z4,8̉Q[J ;aJ<\9*qlSWs51-Z&k?I׽*52_9"CT`UX0&?AaF=KʐE\W?.cChZHsN3FUgN'!f c1H$+ rrspR.ˬ*:eD3lj8+GH:ItݞFIG&*nSEZ9'H42Ivf5PM^3)].8T@WA*و32+saаs.)tb+wi7);YEB,Q鯉353 +,ff+ـq:ቀ6%o.qFx:auJTͅ8C>rH")[,uTIKACibjB 5wXX C /zB`T r q TFeRT"e>دZs=45֚:=^Fzj6X#ndR,+],#]EcuALS\17E$q\ǽSO.U)}rY68@UkPtv15M_ /T(YiyH;Ԯתh=KCe Ww/ܒ蒋ʥr?G{ilc_)辣3)]S}-M:So/MXֲ,w `Ҁ@导SqJR,Jmg΂xw6pǗw|9_۞ߞ(??K^"/}w#8= d]&g]@dRF#u x٬b"an1KPjBE60t^R-ofZv$s|UilZ tNQnqX&Rr6GJ[؝o'P_:LTrRaZxWr %vu/ϵI9We^a[m=!m&-  -`' )Ult\IG}m 5 GCbj.@NK.P6H'3Ãċ37PYEjiT61kAk"H_-MSmKKiXu:qŒ_>JG lJ&Z,GժI'T@jeU[Q΍{A.$ C0 eD]pE=͗$U& /5n5o~<,#]U/4:D͙BgazL4hQqzU7xʀI4RII6u̇ QȮ2ȗe5 +: UG)F)HK:+e4^|Yhj1p=l!SȤDY$ZU{ɦENWe$7H*nH]@09,ovsغܟllKf~[>q W!5dj3N) <2p 龯ݷ醏PrgUϢЎ :e kwwEG;:S)ʋԫm,n@^mlsc޿9!Ux=}=C{'4^hyzNK.obD:BN8tw~'JNz홐x}/?U>BJ򹀺=,EjT,h4S*NLN5X\@ dt*>nDcSKjU&Q|`,upʤJ10Ә]?% Dž]^uu*q\Q#BB.N!vj\M7ϚC`,e=nR,iՓTQ [p쨋\%w KC1DsF}FgMP'o7Pji!Hg%9;Jزn#p&6@w!^2H[wxSdw nKYlS9i1ꨔr390Wī5ٌXkmY{dJjl>D놑DH2i7f[L!q 8qnC?@2kMEUNH$Ya.&[.IJq44M.Jlݚ?#\8 % A2_myХ1a[! CxY@A(UT3uLE{ԥ$:(`p<^Jg1 4hxkN &ߢu炀1^xͪBMB)5$#J=Jɱ!=ieZ6&vj'{?siIrYc*7]WCU}JE+XɦfX! N 0+l;3 r;:60ņyFZ$ău:3<~{7R6(hY&7נ "Z!']kN~W°͸P@3|,>N,.иf=Iُcش*F<Gh&a8d6QH ]q[ut6 @Q㨧2FmZ趇W).~vT)kbCQ}1QNWRi4Z`u4ZDQQN-&FJ|MBG= ֋:SXeh5Ċɏ|NCZ[lj6JTj.BMNaM6H) T*!ӣ;<+erEjO2Wd6+ٸ&6hFvŲ}#/F|9x /)jW*}9 O-h@4 .cz.Os=J[dпg3̏(Bڹ8 HsLYφD5)b+ #逎f㴈L&A% rR6γ#KT&Y!'*Jg0Xn3Okju%VSEz߾u檗\~85>/k"P-+z6n>Gf;z:䂆1 [ \ۚ,d54ftpL4V+,yUn>/֟ڝ筶B)gbz\1y5ƾoi|+V>:w |={~{7#:IA/Gko׿iӡ "Y*a6/5I*}7*tb) ny.3Y⊎5>a.dɘc^-jt*W%H$rC6--8B>i{,f,NOP s$bQ2ы ҧ-4mN!wkB_yn|etR;+%ٔ%rKTqѬ+( \QAݢCxhG6?]&Q-A0hNz'lyHdR(2 AܤѰ)jG4hz4A)#7pb`Uի>[+>9u)KYaC!c갺 ԕֈY󖟖 fJ'7H d6E(Cyf/mp=U%섵lC' 8Sѧ(KmmtҧT:k^a[B5RR*Ͽv5 ]5(s*K\4cSbuar|C%u%m4M53Atj VuGQLjYnlH5dBCv|E fsfKk <K> Y^m-­jWu)ݔchEe*@ A- {uޟg̙>#,Wlcl00vB $!<77M`D0w4h4^Nk33Z}DyeNY߷TSEe\AٴG\☖9'jǖGmsG IDAT~ƭaϯOAf;X,\}c v@7ܒIk2kXuRQjzP݅"t Q=YICa҅ 䋪kܠ44F&̀W-h[] *un?*4g4m*C.Sg &_*o@CƝ3E}̢NӄgWI9c2>pd#b*>CK(SrIuS.#Yq7=Wu˭zP-QT|Y9Uu ]hj?UH \{el4=H-\?0!^Qzqx3 bF q7[ SKa+uKtLr!%H#ը/c1(a!w8劬k3yc;&"*UsTUMAcJg" MbY (Ģ /mQ<:4`|TȪ'yךQKnd\5 S%44Eii`Jiʝn ҨP FɼNbJeU3aY;rɪ-t9Ӹ7k\k |%Qהv_s=u=8d"#NB.3IDkbCLx*Qޕu0\Ko zmت n~U<2289,SЖFɀÃnJ n0uBC%{\$K,K9x΁~o~t~WנOӼNN?L4K?$d 7w^[‰{g-mwi%oGv5 d[8OL1mS>/Y}o^/`,U-{hŢ8ptZ awhnǷOv̆˯2vdi?SԜch`B_ӵ?_Ǟ_EtG?yxb=d2ױz#Yc|@\ ewp*N,ݶ b3ꏅ2 9k&a݄}T\C@QHBq8$Ut,|š(Dt _TOMLaKckZ ec.`~ 5mѻNJr}MiUe*U:ˠ㥽.z U9/Relfw5i:5vؐqfh/> ]YF SӠTHXH 0 ~lGRv$ɘඛt3gZk2 hI1L{ ⣨qcQhPϤu>T|+0R~!ce* n%?D{CUW {LtSG$Z :u"gOch9E,66Q߯YnJj5n1H%TJFEэ y  GGp)~e-3X<ڼæ͠oЛ8vsLgb%V,NFģ.+ZD^%bqЈ[߅ʄO"ì l&s&d@M_ S 0: qYcx+ lZzkr]U_ߟ,u+ZuA(x:bR@*_ t=5(YHŲ 0t1jKG֠C *:\浝 :0;DiW1O:Zc*.Ǧr`9hi0̒zf%ɘ H'Uk-~JŵUmKTZvKD2+n?Əolʜ_x˅ :Ȑ9968S)5KV/5{AwoyxOleyٷ=_׶M^wuug}&Ϯ®wM˜Sq559etKwp:kfIoo /遞;gN@9~ R,zsF7"<ӡ)ݪS$pf40PVPBh4h1!#g> :R')ŭκ%;!yCLJiBԮLP&m)1g$@G<:sAnH4&'!\T ًRR<96衡:EF&k4bYRHް>:+ɸoe!yW$$q.__n7CFaԳeIU,Fbb)`x#j|]SzT vd%΂NBY32FGqb9,?NEn)z: Zt\Oo2Y4?C#5Q /H, 1-Og| r!cCMA-Vp'B ȱ)]}i>TƩPBSP75h*}gxgbk⨦ œomH'UݲDBjUǍ(0o lԯB1rmvVhh1>a3[.tNGNSZ k$ХJ ,11 M:ȼO0bץN+ے]Rm4F<hL!SE,Ȥt6msV%X3@>&^*W k{#=\V-VxѯMȌk@$r4]jL| H(aQ,bZw A]ٖ'U "}B-;[ԟw쯒H|nlH.z,F]HP1vЫH[Vkܐ6 hLϽJ )iUW2]NOŽ]7~X|<#KOԩb?Xt썣}GO =Lmio##AY*~{W{⎏nMh\<8<=4~;. 'I|Ϫq7oT\౐+LG>:;9 i֍u_Lh}.(̭ј@8h15 qu,B@KFGh!fи褯84y7h_d"z{]\IJ,Iř^؎*B_jLp-,AKF'*kL¢ nm'h G$DJhDbw->pGK\&BWFƛ*Ag=<8U4*R2k.f"L7t&4 qu&r>kZĒFNWUr^12}tXђFDUW}E&_b]  CA zk7{e"m񛏿G/ |q=D)& ~RhjbI@)qf!9O4t eI$愺!8دNUϟ/@IL$?Vz%\<$@i0.[ب&c\%S PB(zF6͈LO3J':8r\x }-ﺥI@}/_6KlՆUiQB]+ő#)75MOtauKˆi@}_ϼK&,Y8 J?ׯ*d*y̏dwwpƭYϯ"xOl\e"Sh%iݙZ-f-Z-6=F_u%Ų,v4,7]:¯n5 OpiH ?4$>X Ru$S>BpLzxMuJ^&k"l02S,L5igeJh. e4M"wAJzhB=!_^J$dp ;MU}U݋!;/"|< IHY 8t,684T%M :ȴkզ_${Eb0y F_sI-LTCH!}ZY:N%AĢٌP)l9:-0|O*ZW42-ONRuA| % ]UV2bc|e2paNrlcbcA®)SqM#;$4 XVGf-wX \O2 ( MhG^0ͱҤԤ3t0U:LVODU:XgQuUHISMK,O~c™UmUW]}:kftVwN,Lu!}*]U^ڧrw&}>6~[[1-Mg-< 裏;M'4Ztڳ*Xr˞*B)`t2`"C#2)jVh~hu$6Ô|Yy^Suz8l sP ]j"rl%y˵q2erw;N۽vP2*02J"FL"&yD9ҵT@9׽Ukکw;B!ù3g|= 1 0 o`_tEwtLlCu .`֑=Yo+gyEޟ'#';[b7 d٪eGi#)#c?꼰O'X|ISЇ 76q֍ϯS|nyn|5LBhR~ >>8-MzKB`(96sYb^;W ,>46r*ro)eֈS KEXxY.h*= T.5ܺQ2w+V-fG<38V2l[&..2hkR R9`tgS?.:=9ږ\+Ѝ+׿ݷ6u[LN4v)oWiΨ| ,Q]181T(KS߇*S4]ި@ ,sj9-Mt(;ZKՕaJ<ȍĜcfppԈ͵Giv>H-|b tfCA7a~R >2=9Tڸ='%>w v>(dKh<#!ޖz#ISHft ]G䪔c.nGau vUՒU WŔ3OU@B@,:EFrae GvN0(+U҈1u\C.JjQv϶Nj u=J5q.~ټrcfqombźi왼v{Iˬ[Χv9#tcᤁs ׾Z5/)uzê̂|'t]?>s O[r|_Hս#D"Ax HXihD-wZK4qlZkrȄWf7>.d<ѶФc_u(&O BX!?16,p0ϮJ.lӴ:[-jƳ 5/t] Fe*1f(1T!`%NE^)x"c02,^ ];ﺒE)}^8@ +b_^ |9>ð/]STt>82vuqF&Ul7 z͈- Tkb ӏNX*:b \_P0Eٮ2͏(^gհ)IwG}ețQa, ;CA|;/k$ٔ!N4dݺ"3IRN^RNN>[CeJo{0rEɗ|+S(+e=&!Y*o7H.ؼ!0 Ѕ:FBS $TQAxQK UGU FYT$.fp|u~TՋM쪚FJ^wl8_2 75htduI_()t4m7[UL8kM O47juq=(٪MOC)}e].`:nB\'2ɐ~X|4F0v [Ty-sxT]KM]_R*D9Pᗾ|89_-T[BHrŀZS"=!lw(W'|ZD1 p)Uӏ?:^x =Q??>[sh~Q7}cS<_Yn$9mU=o0}pD=TnH9wݥxZbm:W*lN|⛟xΫX6Vn+mnCҊXS%1k0S1q%wNѶҽk!d,\z 4g%xIxB:`Y 5e?+^j-[Oth"PZF*RǣUZai"7fuvjQ|aJOIk.Հ<7`jd]-:M :GdEɗm~wߍk,z:-cHѲФceGѥ&9cS> Ic$-Z:Z㹀v\2ȭ64sAH<*RʈE]h^~؊_ǠbZHv45(D3 XlW ]PN,_d Ã^9ZVfXAA#)T2kl IDAT/xy4&t*M\l78|Lѿ0"g번|%&VF0st[ B: hQp%?kܨ; ]w6T%YouPJ\uE@csNdzJjx乗Gi2AZl"4,62*F" >6&ħ ɏCpR<UTT_jf8YfT"]'2>MXf΢p(69bE4jؐlC-jBtRcAͷT$tlG4l2uDY+#1@=Rnk?߾okΙN;ܫ^z}ނy1N#`lx,/7Z}lܺsh 2{{KttH2<vLey.i٬3S[2nIg˩oRBw#va$LII8Jhv%cS>Fԯdmp չ/4_#zB("*t` P ߾rIȤ_碿Iȁ#.z=2Uc"ኸƋ;m& Ŋ_(j̜hsls]BPu%H ЀC[>1JJ1"J@^W?8 ^C0;'JGf8 5iI'@#%iJk4\rZ PQJf,!+g`g+cQY yģ!0#Rq:|& @b}DѝC ^ȕ|~Ә8ny{J?ndwz Kz4|O*pRX3Ih{~0ͫkTzCsj\_ݼL#9hAdt MX Ty,UKfTI(Zl p]Ƌv] I"DmG51Oc CptbDHS[lXS#EMA R{;ٹu V*\ Drγ/oJXت_Ϯ'9B=E:&{T=D*2v0GEX:2J=+TQCnP"XPVEИGs8i m,) w~ UϣXD/*Zj\LCQث{4$U\{Z;&c5:;]Arɹx7!ږǶhOK7DQ;9gW?ow'F&?|B7toth vzޭ;N(X|qꏾGoo/rVU.bwū͞%=aӮ lR' pƭ;__M4ǟ朗)N{{\/DEZ i"%&}|v+>k=ytͺ`!{d :VZZxT]io65@S xe k#HtfӼ6Oց3'ʡG[U'Up˒5K-"I< rNT^#,055HvFųGkVMKNXP՞="^kWI:.S|H JG'}ZE&Y2qE Ptffu-싨RsȥP] 0]'Y,n\чZhGbQeQD!D8Tx_]WYO6J\Vq^j(W'yt"FҰL-,TALhFTJUT}ԫSݚ@U rP7SvP>ژNv쯲fu)NIwY8J"kaH`jTw-w]jrce84eʂdD_!e1-POAM(!B֕5P*̇~K+n)\YXNBYMmIπ5mq놢S k_)CUL,POvqMeٶ.ԞA-K~rĥͨ3kͶ-R1|)'3Z^U=?TU8d 㸽mi?v?H[?閆Jsn/,O'~oOyv@Bڜѹ>Yn6e #--œ^g>XґG_ʗ!i3MB[GL'Sk[ ݻRmܺq|z~ F_.Sݽ8PB XD[nH-t}24,kG/A>4*&r]gft@ȂNC %=&],\LJ;uK+J_cs͍#ܪ@Hq {,2i:XRDno 6)Ѿ*:WEmZ@8)݂aG^""}bQkms{ N\B(ށ WZd*mYXDuP3-vK%X2dwKJYANBB@_ÿQ432ThH$EVCzK2&X:/VnSlнrDQzy0GHYpbfĦ23'.tKeɑK盡;v`"jjs$O\WS^tudHXy\BocWZDmR IРbk9'sڅ||-%`C8r El.JTE ,j骻kXVVM ʹlK15\<`oK,*0 M9t  >M Y LQd=kpSqDSʊ (Ml`ڣJwZ5hnͱTp\HF,5vd={ḩI?PL}\:Q3иOhL[D#w;tEXDiOIu MNtQyWux,LG]ޘ>M zͮ LXfor0-r^6i\ueq6+œ| ʞ? phkG+wn߼z{ZD#-:0;КP>nStQc~R[M'ćZ+bK3i4h1{~d+%- OGj2WC{uJ%$α~k8U|#_ #bՄ Fgk=XTPB4 M<'ChEF{JO,_sFʺ@7HwU |ˬ?}=T a@y~kXe~Cbĩ$SkKY+tp}6= MƖUT^9ݽU3<&Z`Ck@t?0sctJ'4UƓ2%[Qզ/wdubeQԭ=_e ǔQEbΠU{ lh4٧>J|/>[('^!o~Cءc|/~Y~m_œ @^ً xק v8?~y9ozכOm~[g3u]|_\t w{W}઱=m}JWJoW]J>Rӵ7 .*Rp os)~w޿ Jh~| z~_sLAv(~Z[XL{%G>U0{l-I+/sҡZ.vjςN)8#"Xhﰋ/%]-@K4L T:e8iƣ!veJbs|uE١Na[]j?HYt.xYigwʢ2*5M0ly{ViE&r>~N!FGI#S?"M (e:ڃcNF6YjPh\S8JNQw©w]adB# ʒccK6ͶmLkTglXpVCij4xec<`~u"aF{*0۠38'z/ MSg sEŗ/|<\oOOBfSLfd ERkSRDLxypEGdRd,`e0Tg;v]h=ABLp ,ɉ<~R]Ѻ*e(=<5-9,19cgzѣD$BFb˷+Ģ&&r>vq~- Vio6ii0R(٘}4 Q-0: X&F\#"L6MҕH enͿn5ԾmY&z,{D2!|jUוtdܟS>ךn(&v v:@ Y/ɘƊE&G=^08+@`Vi(0)\4 5=-W>uM+N惓~VӠ>JՖ) !ŒROrrlmF< ɼo_" )`ϟ{Ro|lg;|].7&.d!Wp/{eiv #nxw]?{WƖF`q+b|ʠR㉅hUj[CX{ȸ8=!meˀxKOf))e{AwDaپ?*#?zĹO"8|t֍7ϯkd6JvQZ[hkz2>MA!ɑ D,4My襐KLF'J 3<|5Kc,6H4 fPq&S(L|uk d`dkC˪mӓr BTQ W/A-]vȺ1NB&^#S,3ENiQg<㟋&ƚ3ʱFHuT>bY2QpE:yvĵIȋz8uuh׎"^|9T>lwlC+R9`|ʧEg~1TŠ٨#Rr>W3<&_ N Lom=@&W\=\_'hD,a2'y7gt^0&ؾ'|mC.Olpث'"On ]4i 4:Z>K5|ke _͢nCWY9{]vtؒ֬Aߠw܍iq%|@ )4 j j6⮧t(GÎfsH%VŚ`iȴ SIɘcǼv3WZQ8s_Bc:tCm{NdeihB}.0iE^jt9!*Zu/ƲHTۋ} nѐl dUu~7|5 0"zvx9XT(ʒTuX=X 'f|CyC♡&\~iݳLJ]bV͑KT%t VDq>&ehPKFsFgX\tb4P.kN !e/ tJ*][] ЄF|.?Ag~ %ܐG4b f0hFi.NMHQv''\lrv CsGH;TL3dtxcDLiFj5ZiG25 U[bے҈O ‰kO{7/-[TE:S-S 4H%2py9 ~%4xqGq/ק}wDCƖFg揿cw77%I`ԗKbwEfy7_ce۲gl\ ݘ..Y$v+޷5u8&'IO?twgoTӴjT)>ݛ>0v- ,_ 7=?o^y|q `ۏ5=䑱kG~4}ǾXp5M3#(b_|EG#0PHq#k:-w Jϲdرy cg IDATN7/g.6A$_}ew!b'!BWTg_>c">]Pij.+*<DLMB0BҺҢuI/]Z ,S&cӅa_2Nn38p$D+]CE161<)'!A<Ӫx WN@.]ƴO\KJv{ H9xf86(u:,]kZ?wti}yPQVu:Qa,'Z{ٵk1E050`fztNRZY*IM&8M瑀Иs,BۂxP(. u ssdCիeCIMty$A6'd7T&>0trD7R)WWk3O?Zw"6Wy*HYβ1~*E8bL\/=*UtqE]XuqSf38yO v̹_kc嵓E/c!>8pgf%gxɏj$`l4v]}#hIUW 2iﵙr ~B%Y1M&Mr@.P,ub[ J] Y:LOpC*aC yIJ9rݥbsMKҠ"-%f}-;!B˧lH'tjpd*JtXJ5Q)|:eq_pB̼w dx̣)fˢ9)G B!QR(^PXLf}M$ NJ8z-!6شLF&] '.(+^C_d.Z5hD쓳>L;, Z7Fif=UlN<@upaaƧq%:-RM+"f);lޙ`>鱣7DgA*aйP!f}9م1V7=q×9 llQIܰ×Sq%[[lhINu.\^*o;[\Ote/%o|+m}\O$S&fQ;'X-7 >j.σjeX<l=  :*t t323:i-Sj|ɶM6W3Wa}C0io6;W]QGj55#ҙ*S>M1GKR ktIP o}8!Tǻf~i5ǸZq||*t2sΖ{yj\8}}KO't2 Oy%symXuu\cV%(=|8œOֵɠ|m: =~Z+\޼nzBGaƒ9WOǒRv4CQK`IQm#)UY,ڑn2UkN:yYRt2M)%>;,LUqnrlAQ]+tX$jz;Jm ՋSJ@ڿK7_)~(Am"9Ͽ9K3>Im"m;RUGŊ4T(=#hpuI'p6VpPb_}*uȽMѱyVk{/P-Ѓ6y قC]VrTZT6`&XJs]ɅrU81CǞӴ|7O1*ٗw,%=]iHGX2Sg >RJ/$ _f>\q@Ry}tT$?\C 8sMT"{y{Ncѐ d>I{}aшHbOoO V s󹹳'oO/|s˼qW]c3s=I8NbqK&msmGd+ϖ/޷+95,i ^rUq 08 V% aEhKT{ݎpH04ꑌ4'UQ +e$`Je>MQaڜ48?ţ*FZsI56%*1qǃID2KzkeT| !::|wl=:,mosEbL.]W͚^IV *LJ{zx YczR7`.8<&-&01МTѦ 5m05R-3LC\A<,?I;D>s9 rkT ִI"n/| yQ-m._w1ӐZݯD3~ WA=ִysqs &n,OzضM' U]`le[5$.5vs$y~zIvN5;C[6|etSWEA:mгgڷܻ쎝yǕ޿\ќ05}I/j׷YenڸK tuX>'p|_* S(xMx/wcM3jc.pC*~^GjN:E2 83Vض+9j!WP ͊VskvWq$^lcce5rx~cEK6= 5m|quvL7J#WhǬB  xiЗKG_Ȼwmvn@yn~!Ĵ~:'sR̜Yh>_>=aސZ:$WX]'d:StRja-7_ x]mO`{ F BED4wYti=1Ȩw^¸˥}!.H.x /}F26-, nNU' 6Y:u'y:6e7B(AjGR|<Иk1tB8F;qtJevX{' [SZLQg߄Â=o{mwI' * {5wL+w3)>҃ÒlB!+3>*4tEٜؾr>aNșHXyvNﻴ'B7,-\\?!ekm"pT*WU)]mGz[N]'u><:/T5'4C*5}B䝀W/T)Bu-r񸏽D>{Q\P\^bj+V q2ϝo]'sNjo{io2Ͼ ᐁj#Q#Sw o/.*~ZW`[@ 4 C @iQʒxDmSg|xZio1ZLI .9lۨܿ l!tvə!=}!| ,=_`5_ֵ-A,\_|$₈^J/[B$=&W ޫE ku 7p+{Opxxx*Jfxm[Ѱ$O=u ;aYW ԱZ`I]_|ZF$RCi !Ų$0H5riO$E6$eGҖ2d}r!A0\!WnA!^VK#:M|^{$|^]`%wR߶*/٫XRBǃQ*ϕrho6޵t$ܮ+u>`9|@$}qĥ` =^t]#ٺ! mF@t}u"h^.K?*VqEZ F&?wdzG2 t"V rdN>q,bz"} HKXX7C0 05ZYZY T_LΔK"o?0N<<ʺ&C)EEAgޫq%Xz7{_ +ˆDN]Gz1x,6ŔU9ʟjR]7877Du^/d@R*1{"k\̚_ז \ЪM&=6SY&>s>&=|/PRntb li*{ BtxZDŽi W!U rE:oDI&unYnR,Wb9 _4'̻ "\y%s 9 FzM@8"̸k36 ,cJ/J-[uiԪ@m6p7W:7ۀDV !RPl3;ii C; =I׮0uB<_%D{mw>/&zw.Z<ɕQOR-\j rŀQ.8r*ZYo{4UTIoqdqJ L+R *"UšlQՊepH0i":Uh D3w/r@mtkRYuQJ\ѭ/w"%tXԂ+.O?w+ʲYu+ڕ"=-2TH}Bw,S9zARL+th>v䱯!p>r=:!u,,K`!/,A{I4Wr`{i"aGb\>I{<aqa;/'Fm!AMQUlA UUUj(IL@Ĺ쁬9sTA]H~0f=QY:/~dW# ַEJOloH=ȽR}ؖ %evPK^nٶQ"5hILyJhKdG^$xXM4~ ylE*ܧR;EC&ͨ:8T%&^g~&G>"Q/ZXX!G+jV 0k#,A-q|!# 9$d :-> ݨ.l] uB,w B&g9ߕTR 8T՝jvY_q7?VϛZUeT#wN8Wswu;yt@@ {::r=uqH=RRdxyš=P;"ǝ$ BT5CTBi}nCőuŨ%_TTq6L)}Dk5{C!S ;2f4q04IW czk.PJu2!Z&kz<_[Bwy7GB\KDei7$} ,?yr]-a!g&# ۪4`>/I'%peuG)SaA| <*UՑ}-;QG"t75`njhA|95Pmú C4öw, y OLCuj^Aeձ~pGHT3C.;t`>/IW<'uK@ej%[z@g4 *-%}%2aCA])U)M=-7&ik^Wrt3P5#m9fۛ/7F: >uGJt9ŊJ/UKZ6XwU6ު.Ǘ4{&b1;CF{p ˧n jm m8:K K,|VOybkČO$,DT%m;#E%训&vtND;@Z/U %ܷ0{Y :\RqhT7XVeG/R͡;~HH0>a`o%&p^]޸(%\hN44 LJ+XFjHm._:]%!|eTI̕A*Dőw5gG<INmbxmVP9v:X߫rmAkJlj9Rw2|q1~*л΢K&:+4; IOU. hI;/WnW7+\Ao XF&sÞ/ZI#T,8j^baƧ}ʖ{lRMR(TVxN{ڤwEOa*߫zLeWT ೙/ x2w})3s|xۙY8\;wƍ7ojvdtnt BsKK% 4h8^Q+s9tbYر^G dScWqA1yI3J qmMb9TwM!*"e`°úvKJ%-cGNy\0p5miԗh<]ۚX3 r4#y?;N4e߲ޢ\v{ 3x@?EN/pgTU42HU5 4bYk'5Ɖsʾ{#b`EY6&F\^0{A3 ؼ*Vh.y1^}F\fP9;ri j09:4ȭ33yCZG y<1ͪ9a ~M7+ xNI-:\yݛCM@ruܲWx IDAT4CX ݽt|wcFsBkmckZK; ɯ}w{ tmUxt(̵J]Z Ha@LܞU4z 1[oM0 ONU $v+!'HFsѱ >= {j?d)b w({΃- tB57ʝi(Hg6{@oBb۝2nWIڃgɝ 6![lݠV!BۙyRyuBx`fKFK,CG2W?$0n*cQU5 > 9 ڬG8zGck$REҷS{߿ ~V Ke@fk[@ +3n%hX Ѽ۾m R]Ol za 0ط-ĺsj+y8DUG `BgR xGroZ #Q@/%e^@BSU=))#\0W*cbƣCcZ`>܉*j?mKY&u>M pȄGBPT ֯XVZdFLiu'Emo?_s_îJ(_4? V/ACck6C,@J;bl&I2_.rt` Yuδ7[ۓMf¶^ArC\Ţ$R窣G|9Y(_G Z!`XBG{"V߰D]9倒+ TO/K%ՎuM]~%V̚ŢUI, ѰPQCy9CJNҒRV")*Z,O9[l"!AYڷP  \}61pCdJ2#KfsJUBe *M:% ; I55DE{aƭ +U{!hN?\u Tq봤LMU(KfcZWK~G^cTcrQ`H'@,L8txS)@:ݶ"m:Y$.:T]u|$tҽa@OE2a+T<_TTV75d0r~:}YCtŢfwEzcI W #>Ŋ\6ASLW#^I6Fb:7(0"hk1cO*a]i󡹌gxOEGAkʬSKgN\phI\Z0l1iMBQ25-P*nD-ҭ(مWUg.d+Y$"X(L&QT30[ywI[Kz (I 2CƦ}JUyê[ 0VGp/0 `{f0}?af03oV fg3QV!Tf0K .~4>ۀ=`لC(3|x'p_f0O fFc@pFB_rLI~xTܸg60=z ZWem;(@eyӛDzo!/,~jgv%<' UV&U@2ZU"&M9ЫSOWiFU[$˒tIXxEuՊ0fl#$Y0RcKqb]}PMܓ,=v\Y_!jURJZ*^'-&׵0P2:W=mUM]qOuOi#,U'DRWhfeWk0T5GȞ,CnrnU;GZ<؍8>Sn@>-&VB99ujS-̬(tjs⼣eyښmbmk(1p$Lڹ~KУ"wl/ +Ǻ_rdoXVطh>Ct[W?\i-42;ӱU3XaSJYH\Qy9('e=ki™/_7^,C:[YEݐY~}a`ۜ.fA,,p*RC3X.C4:$:ۺ^i^&f}Rqlep ss\25lKun"-- ӅB@߆ k`<S{VvtI4bВdsrMP D¢-K3%$ɸKei[Pǝ\nlKhEG1&.[^ #C5l.z]n<<8c خ 'L)G_Zfہ4peu'OOF?xJSQ+ f^GCN/9jo?%x-ٟ_6~EԠyࡆ׀nYɵ6V:BN\St9ᩧ ve.!~N".Ν Dê0-K;B)\>7`*%];Й*mW `bƂvSd\(I|>!061mm ìst;!Iم@YF {H9U%\!DҖ4F[eNXTW![|Tm>8o9KYH,uMIn8F&=\ӋO YSnrvHуt+Y<{G]V /`! (hnJ3VvJU`*!m+:j6,:[a2볐(kHؠ-%bUB_2UŶ4+]PE-uT ώ-f5-:q̂JJwVHz_0+V\ΧqM :ZL^谡Z$ yePTX8٫u-*UT'*crp`St^~^[A >.?U&? 20`8 ? ,Expov~ozZav,Dm_xQv'l)4:+2 |@O+1噁Ge? >_(b?1?+3җ5QxkuXw5iUr[hiس;/邘,?V!~%d| RR+qaKr_D|>5КRa]$Հ!y>pL뮈JjFTk%e0iM/*"WY:zYM΁\g!Ui@qRjwT_\:=\_&E.%I:0\KE [l0:2xB!ڄ[J} %G: ^!gºgE.T`9ii=(&>t"B2y::ۄʰگTNGxAlMCļB,Uc]fBXwVo›=6DBXU!T%WeF&=GJ+;AJ=a% /XRZ?Zclgb=A0yT!l@腁cd#ݷ`a ʽ\QbB}8L 9tfcEn(%^,j]WQs'됽\\94u8|#/WoYo5>r,賾â\ ɸZ),58sd) ! y 4E=_T7 ,(椁pùhqϸxFÊ0e3Wu[[wf0;̫oQ'|&UTli'32KRf0S '̬@oӷ =i!0K~(ཙoe3o!c!5S`\1?!3" 4"廔yt8Of34>=71~e3jZ6]yxa==} K~!5^WjNk쪵 {g=7dN7W+Lu>;0 ̝к7F,ۛMP4hĨ q+Հ|AjMƵa1<2te.0}JeޣgOfey*bC.cJ81393>,Q fO/д-E0iyZ0`čDvtȖ{# |[޻(с%@Yk5n?z;8}$HyxO_SZk6:`7}6[4'MwX|y X:/\:J kz\1-}T**r%Tѿ%TQ|Q ʳ >ш+i|Vd]ɆN'f)R آ[ɗ[j18j*ݬWænmm&b@w|󔧻9'/:7\LSu?\+%D\hU-*obuZzQ0jE_\%Yb/}¶q}ع9ϥ}B<{R_q뇅 ܷ΃:m\w P*{U@̾r!E!Eo| |qxtЦ{s{ڔ~" С !jc3>ث^ q=WkV\8C^m\=W [0 ,YB-pEm֝[ZD"W sM?Ny >d6 a&ш p(6W\o=Q -5sV[`pU^ 8;{,C#"r d݄\զY&S%ض°ù+sMv^[2ЋBU'XfyfOy|d@xErh@3@D3@73mjԠ8r˚]wNX #Tq-3"%_G"[fgP@^0̼; ?hf0~(Wm/=o @9 Z(=N6~U]u@ڸ7@W:ŏmm4YN^[Zilko4$.Wɛ_gvczWZAeyqT+IK]0>;YjJrrڲކ NQ2B Pxヱ>c[&V6#@(y)RC'5;^-/u%CUw:"a%04J璈5syb)'J9U˖ Nѹǥ(ʭVuG=@l*t&% 9!u:eSb#iZ拾*Z (coYb9)&`:<4V:!I_nhuNӑIDAT{ CƣB[Ok#rh:*=_ wؙWPy.)x )]}W+>&qP'ތAEVڋ@uwncUލu"z8ĬU+1 bh(zjV`wCꊘ8Ig*gTTHHh@Vչ-yΡi\[Dp=0yivK(3@J–g׈\AmB(zŲdf)@?P瘭[Ω]<<1 e V?r+"y-QJPtn`fNgاom|T;o}40hy>3 w;8Ţ; "z^AiN(j:-L x0A~ uOk(.V~8_~\4=`fAwQ6iGoj`nXw@j Ð|SLbJAKLXDnX,=5Eb}8$8~9irԜrQ ؽ&jҳ-D{Zӌ C(CVm}gݛmXldshghcSGTnCqңpfEǪJ #@qƫN@01spGZho68}aj6 9%gc֔A{ԁdBG"Q@o!.)(@Ttk٤Z1%NFdTѣ\єP5Cl ڻ{Xj깛' $K[[8B!$ Yxa2O^A'q`G"YHE6ldO5o7-U QRUzCog)W4IO`aZÇ}ݎQoKl\oUP~<ʂF*Փ2vBZ%&E:Z3ֶ"\(2.°J(C.1班hv(ڔhw:}Cԝ^f'''}"bsWW"6m%6({j>UQɕ[ܼ֕@Ṝ&5t&]a= }@mjd(W-~:kst7B|zz+FݓDFyb>3%OL l3DD2tv?|0Ѭ}Ni+4Dk&Ϡf ڈmi1']ḡy}meop+sT aa\׸!xe?ߢ\… oO'?$'{N_ogWd]޿#㒻V&MӱA0Ȍ\Z $֮RN24$g8R6yμel~p Q>`qFéE Ga;c.>87coA? MݭnԢ'M*r\:c Os~x㨵LB,'`l$~i) :6Fc mvɂ@ uArSnp~CTZBI ȏapv3 Lr., o[?Apw;B+!8C$W#o*qJ\" /#nCu pl@)G2Cw$V֫jt]nbLŞwR\1t*w߰1[pS~$p.iн]vo%/(VJCզ<䢎tIM|4@* t ai#tjtv{ĝkIB>{LY"՛!6kC=!hx:=ڎocoǘ*M6Q0VDۨ`,Nh HRVG2xqrb7k\סs;1?΁0CՊq"F Sx|V2)wL/-v+ L!nIr9/ z4b36q{etPz=~iD^̀L $ū> i\\8OE զč;x1J'_Z T#Dԓ%5Ŝmn =d(n\ypj?F_2^ZPoڷLf}GK[L#VxwHğuoӕa͖)AJnO,Ⱥh=N WqFf^F 0 ^e S2x2a£dV-{njl @5qpA:Ű*LSկ΃hZ @@^Xpsg)4l㭯9x nҥI&5x Qƒ BZ 3u6JKC5ݾB#lA8'ZRyW ( mͪkϚK~g@&pc-"*gPub D .`orN\ZM$jӠƫQLMA%tθPpB!u bvIVB ' Cq!7EC>#cȸ.>D"UXی0Y B9ߨxYi™-)96 1+f&a3p(ӧڤ#` P58> ]# At O;^F3S\Ka Gf >+$ug5wĿj]I;wn8:qW7V,w yݖ(֊NxEO aSk*܍t$?#6#n "mE 9|V`~JëOnD'+?zb{ %A`YluڮP'uxYbUhwI^)`8mV7id[du1oaf*^uq$hut. 61}j-nOAV :ti @5qڂx:z lY,/wmAG_2oj쟞FEMSJZ7: 6gxaBv$bN B`DQ {7R*|,('[e&w"LdrH7N\< s/ 7|fdaIDݹ4lh'?i"rx\rgT7sJ9/="ug1"!<Ҏco%v\p4-]c(zH_@6MR^7PĎ輕LsgJSz_黼0`6EN)Yo'9;,mFa] >03+H~ i#},èO[>/M=Ifg :[u|}n&לMqi,3!m`f,7=nphnõ9nM./ّ0,G&K࡛虖nENY p(I[FGbi5why %O@*g *Z]j S`\ @++!>AZMTQ$[/f-r3qMfG֒]aKsrƓunWmFIZ;J#՛! Y)%L)r&UID Ggtb @5q  ;^kbz%p\ KKM]gয়ܿ;28vO"R6Cv=&~xNޣɠ:fA _vEj 5%O HK?O?a †+(cHx"d(0C n<Q=Õ!.Tmw6 w!;ZjC# cD) -I07/pvƈz{6l ,Hd:>tٓ&8'a4Ȝ ~< @p,AMs-G@'.tQ`zB{k֗R42dFx1`VMDOڝ}2Q ~N,86fWkJX&W@\? 78g5/@9  ri=0P":N?ǧWi#nGp,!~e'pڤMd 7=XR0xWÂς m0:;ۋXlS>muf Ku^p#^c1ue){3Inm1ugHgx2 Y)Og=--]$>OȦ96>7ٮ&  lu~>WS,M:'eĵ|Y)lY$6hުN,S~i 4vL/nXJH;9r{{FԶ0VG@ff[&֓p?$@u9 YF՛ $e(c&wB[d%lɣ4v](~/eqBIL1u=x}e[icµBH9]R&͎&޳gCnUa8V4/`~JC!+v| _NC3R+xjy[)'x8'z OI: vI9\lP6" ܞ0ױ8a'{v(k[tN0tڬ͖uh6*C Ta?mrOiȸliYۊQo*& 9n'vWHo5|=8a ۝;lu -|d03Iqqk\:J0OE?>ʊbQT}?Dp&rئ@-(7P$?ڌ=A@QpN#ЁœϘ|0l7|޻}lsP ݇Ttl^c;Y#!U0 m :9 UY!l *M@|Pc it=GCB1'!05cpSC&O/mLj!bi&{H^\ ]b ..!4\฾ҋ ??EO eRRdQcH'QDmu KsT1݉|MWKάyar:]Jp8^{}!PQ6NpLE y/Miq蓗$+hh: 4}}SAɲ Js@Ϸ!qbtX D6+8سHqIP7-!쎟?eRqi9ʝ] g5 Ph8 қe~@4VfKs|/hu_Xb,tLp5_lKs\_glK[0U#"8)14RA<.NXZ A>KAȴ -x)IENDB`Atomes-GNU-1.1.14/data/pixmaps/logo.png000066400000000000000000012051741457665371200175470ustar00rootroot00000000000000PNG  IHDR %+zTXtRaw profile type exifxڭir,ns^gxKSw;޳}խT$A ӝrV{47E׫V6Uou|~_7 7a]1^>.۟A ;_JkDQ~^_w_/d,9GoV;߷ϭ&{N/|ȘI!y>ǔ?L?xcHr|N)|d\.|`1ʴUq?yꏯ-zqۈ/znfG̹~M{;8g>:X&?Yrab9h|qz=5pFK=ȌE$^?} ߁w/W5?Qc\QgZ9}],H_1eE q_ia+X^~~.1K[I/|d`{++j@39gp+Rf1TY{7{cAOP4X cyTr)+2jZ %VYnڬ'LN={<;ƘqgulϱHWYujNnSȻnm=N8ɧzϸM7rnǪ}ϫV-JOcxApRfX́7 fVnR5ޡ*JdEV'rÏrn.պ?Wi?ViX߬b O*-[=izx,uϭw]J#gBcne\B#G̙ΦVlB">iQ;$FeX{UβN/f}׳nӌei$")jOthyq㕸GrmǛI.,+Z~nQMӸKwǭBg=Yu51X`9@7m9<P 8[5[쁸=%AUܑ,$_& %PkY7 c^&~#.+! 3كuC CV C**A GR-hj$b^[;J "_k$l@`67:zD`& *wH|1 % &PG, w )]pz޺m-/U(k21X#Jx%&]uX\@})quf5 &N6q  u%Sg0iYJ&R6! _`_ȂjxYIV{ e^|S뾸,Jz!#pJ][ޒ.%3{`*Y%s_fAӀ9R49R-ɗD2,D#jh & ZNEJ!/LG!~8'yuV c;,HiTh'YAJ 8%1gF , ׮`uF$bjH-έH53AyњFs#.P c8"kAJ<w_^ FOlSyпmK$![æQ0FeBj{L$;ɾFRӋ', 4.U"l;/ 6jTs.c]p R)S-ɕPߛࡨT߅n4y.ō#u hEtR %Ql' q!=ږH\%КX56s֙` %ɺvBSt)9}QjaIGm9`p* ޅRA[ aMZ}s T `Dh\?e|(@^YI@]7PHPi x ,(l a%& )ݗ:uղj]!k6q`0d'=t טu$+ 2DXĵaI w|2x9a"Jbl{F/"bDE9@@7FFb+j R?(  Ry4"P|  PGT?Xo6F ca hL+V,`dAý8 "b<:cP! ;!:7Ƞ5k*LAȋ ʠhn!Hǁx)3<9##֤\mvD"vP78WD5pB1+1¬)]U= ($KD|ipTpo* !M^ `\ʘ7 ^d#n-r`lhh.: M$30*nF&l) GJJM+̉K=reA&|aߙx$`!0B$-ythO);U"l 6D&S^W{?3QO|镥;d" Y(rUXTHekGRjrk2ZiEnYi %4y4p,dcuLzJm/nLySu3SM3`?\@a/JF>)5)x?r&Bq.bAHShm5bX1CR>^ E&~D j5>TH9XC(yqo Z+j Ӱex.Z C-$_"B!=,kjB}=@Y7BSZdL55[./S`^?nm>P0 6m8ew9 @YBI$Oh?DWx.9mQf#ml̀S+I4rkRp0;E^/%mC j&MF, peF5H?M"A@HYl4yM~E0p+ >gq6IzmP*Ah_Yw*"Ru_, SՍ*ҡ=?.*,דBޔ s 9('Q1`#dš0Hȵ7eQ4 D ;%P`x 5>= 30-3+WzdGzF{TY>@*͔AôQ{vCr\-6 Mp bV =*g> ij H@_[ ‚O]!i#BH xA5}UWj$2| $s +% qjGT1b9$j{䠶cL1Cp"B1ZI'  R "nD,En`7W7{IC}J \;Эf3eU]ȪqFCQ[skN, ԉ[p^5Ie94_` ƨhvyCak?HF5r;NYASMe 7RRYBRA-}ķ?jnBF (Z}Ѝ"kHD5b7Єu[$m›jsT!TBE#0g< EEuSL 5/jymS# /;KK2%c`{(mm A&(LuӒYԱZFYvN0K/#kjTHQ:<Q1hALHFkDtr)6cഴpwpG6_rSoՖGQLDtG $uG~~"ӄI"Uo IK!:mxXoL$et,CZd)&ɫ"wOcBZpThc 1.^(0 u{K,XjR? ),*kbZм qQFx& AOHi ÕuSk+^"Agv:o -=Aj⇆/&p-+6bz2V86ېj`D8xU)D3Qy;˧RrU[&$ mEr uDjEmY 9nh;F"1๴·*yݗgBA&0eDܮZz}.Z9P; >O s)Т -pu'u$/s['M|%yuHtce&81V@u9:qxuw2'A1a"wݎlvOHm{l!{!:zJ2iUbjbTV.NP]j]5P3B^:: c౒> \"W2ZXKxfJrAs88#EJw֐XYwײl]KFL!P6++:hsS#<ٴtڷQQO3j/ 1vP iO-*mcz( Я ?՛!FrB#NSLFdY*~L .Q.Cn_ ?XzT>U$Ѽ;?dwk72Q0`dJVɓP |I{cC[;;c%:n>&xr0ɖjwRINH j۴#hHNJx7Ul$j, ١Fip ~]Q&LD՘nD]5*pm Қ}uFqPֺӸ8n&}ԲSX±+ ) ҮMvt=@!P3"<37ձ4@a)) iNb\-GWW_Z[I &-ό> w>)8tRjUih:$H΋lB D5 $J:qAŴ"`ɂ@[̓bFxCzO7[ U!Ccr6rԏ>In΂R:7Ò Zf &\Svnnݲ>۶2$6{emkʶGEς-Ґ85oUvYYhi$أ{SgmԘ)RR3y>;eڀBu{jSUgP !|5Al>ڃ&l…cx/6F6ŃQI4\ O1]>F%R6"uԻd}?-?(:܈l }#fadɮ|[h"]YAQv DPvKMmO=_ig>(v>mbd>6臯ph(ՀUu|2ʰ)0 29U"] ɘ'Ĭv͜jdm$jƁ 3tJĎ.Iٜ9)5ȼЁI될X(36”#GUBkhâ[ҩ!oO,mdNT4 ptrWtk~#W1H6X &r~#j1>#QL,*TεpnA0=PSqeFRu\ ncͲ:͖n5 riZ\H 4 =ė;(#@M ލE':tcۇS)#דt,iV,)*z]*8>:jAff|R]9&gBN(s1`S$lLb-kԫb]'N19=SGKL@aVC]Ԅ6'jMݽk;j\dU VcڃQE wFo jk/O5OPBsE9jy1ffoԨG JzA 謣zԯ}m$Iӓ2@R.uXdmH$tImCF=' su\Zt-=y i?;4lJ8EyDb10}O "Uy3$2tG) >K?.F}t`w|Yr:hǵgQ;cD7w}%:^zm:8p=8JrKuetU3AD*񆺉j#]Z OO8. ߑl+?D鍣wsP?bPgt@rV NL;k"-!%J\4x~JQjYh @\XtmL~#fhW—6^Y7 r9=B3\J4#} b.>SU[-7e˧ԦEs] rN3"ѫ>;Ri'.T! kz7=q]ezTXtRaw profile type iptcx=JI@ q|df<c ](rϐ)hqpá\ jŴ#IV'hyiCCPICC profilex}=H@_[RZ bATQP VhIC(X:8* nnN.RBௗjvfdBV+BAϊb >y?GDɛ 3L7,uMKOe%I!>'5ď\]~\t3F&=G%m,1+*$qLQ5g]V8oqVUּ'a8-/qX"DQʰU#D~/K&9Q nĸN/1wFͶmq+ԁOk--vto-M.w']2$G  }SBno}>*uE^xwW{oirk| iTXtXML:com.adobe.xmp UbKGD pHYs  tIME  .*0tEXtCommentCreated with GIMPW IDATxy$].ŖVefk-%$Kdˀa0 2x3x9:`Y΀Y omx9yd ,ktKjZԖRUg1(oͨn 8Uq-ߏ9van=p{FGG=UU!"8ض 4i~T*=l6D"W$q˲<u]8۶aYt]GF6(`ayގ<, A,X?GE:ưw^d2 I "dYiz0MaVhy\8NMvyyk <ȑ#L&v:d2FQOeOEA"E6eWr~PUx|;A /`kk ijt]GEDRߜHJ{/˲E333XYYp] Àad2ٳgbCuh4t8O0ht…?8//Xw`C62^ di FeYeYڷC0 ^7|>&]׷k ךnccc7ZT  2mC$qH>|>Y,LDg466.;"d ϱm10 zF\.?7uH$L&yޡn=fd2T*L&PF>Zݮ}Fu n6R( CCC0wy ,.3L& Xl .!H_e~mnn:Ο? 8$!NC0mۿl&L@fdRN$j~dddo:, u]i~TNY /Y>i] xpӯ Oz<˗(Jffff|iW; .O>_ppg^ g* << ={XlJUdx$ò,(2I"8:|I, ]8gi/К\Iﱩ`B6p%mfH4SB"(,7qbbe٘,|&y_"2 h>hdX۶|^Tl(+䃤2NhŐNO y_x<838;_4jO펮*C˲PV(jBӴe<\.m_Onڠ l~ d2&IE90yIJ1 ?9l6{oFnd2$i(?."<DzG?"ߏU9;gWz=$  N;333={|?zF?/N' 9z=s}Uk 333KkkkH{^y&,",mY ۶@ aɲ Z>ۿ%DQttR@yVvsF18c9>zSڋ>IxAX8EQީ(v]x 0GV˗ӧOhLO J+(8ػjNVVfutttTE$ XkK^ѵ6$'Ը4M}{{rsυo{:am{Hc#:4jZG.'C>O[QnLQ鏔J%wzzz]t oy[ I%"RwbnQza8Z84,9o-:<^$<ϗST]CX%Qd0q /..bmm͏Б`-Sւtd+kR$KH$={E]0m?,qbcbb=@MT.] #A5EB໸RQQxDYdE# z5 c 0HSSSw[$Ir (")2𚦉n˴Z q0 B] YQ^At.t:'''$I@<ҮHA=A@^VҒu̙/noo7)%)n5[0&"(]M{E9ԫ ___ˡh6n"6Dn4%v,..Vew~_:$˲G_qӊPeaߐ$:wڻ߯Gp(h$v Hzl|kkkodʢkkk_t:u *Raup- bBsDQIe^%âze!Hkq[a0<<1i]|`TM4}XD$8("!͢\.l:J/H@_x]&,,H,&DQz8a0Ru$B","{cE@?i۶|^>0cߡGKe2 :^4oR3I 0m۶YD'Jaff\n Ng 튐̙3PK$jC*rRg'v]3M˲U*bA<4k@HlbssYXXXm Da B>9{y??o?TUEلm;Tj\%=iQAEd,Bi^`ܶmZ-iH4}NȴvX|Ķm-d]z}aև2aUT*Oz=nllD"1NB,ݓ#")Oa^~Ji~mF"Ԕd>PN!LI#S}U8>|^/T%k7R$!IOQwqx<_7خzb`:x ZÞ={:5X`GOdEYdQw:eȒׂxG}ЍZW,/Iy u ڂcQQDPQ8n||zb>yrhk}pI#職K I}ٳs]W"c B I~!3n% #L.Hܬ(KM7݄{'qhZz#h0:[[[uO*XEQ~Z]@ EҊZxFҎo>yt:Z ,˞Y^^^r]D)c0ʹ k o^t陙_NR0(ʮu \M ;Ll8LLL`nn'_&Ɔ߇%&^w$vj*j(%#KtĕLAwvN_X7 c/8r4&t* =tD `WVV"EYd vMIq<󰹹-7I2M,B4??;TnR1˲!-Š]+:uG_YYyoO򱺺>}krnpw!׊x##L9^$IRXbw&}C###,--amm//^2<7s-$dS,n60 .FRyyau]lg ݮyeYh47lv$I1A~Ovz8ضv$9:P{( b1u/J TT5\uWVVP(L6٭IӢ; yٳCLMOO6lQsT#Q5F4z=z>6 9a@4:u dZm )Dޗi`gS,ugYA F_q Fz4MC.5dT_ۭVku{{[ǵEFYdE x_5M{Eu0 ^(~hHJih6|ixh4Xyt#hd2#Gt:r>&`tt MaG^c}}zgYYYi.EB1d[\*BR8YG #\.ckk CCC~BP$I똛@a,-M]~d"?dYf)wGղ׿.F}j|dnO&Ò$q LS*yKh}{#`߾}Q("cbbT*!NR)[^=ͼc=wԹx,Qץ/Mߦi_LFVC7K_#UYiTշi1(ȑ\1(@^OI#}vZ&b,bkk\kaׄoDYdEٿ ]Q(w+yCuضMT*-J0(I? ߒf)r^$4 B'`@FuĉF qȇkw V)3O$yضmT*r-$j5vmb0MR)?7dyu,ê~RQ|>|{/~7vauu> х`=8jz:O&Cx@{[z  /H>FGGP,DM|hg6ih4V766^z\ Ya*JWңg9ro.2zK.ձ k6_4MsvԢEΟxZQΘv A011.$I8m\я,",-u]'ONNuxxأwDLrH_T)eYmޜ/4믿>9>>|^H$.9{SP.Jd],l6G}UTjW F>",QeX,q^x}\Iy8cy IDAT߃n&,v|||XUSU%st 7}ob׏|8bnI::FH~@O~AR,wb,Vki8j]VOaPK+ICIEQGFF qK;d -RI$,r >O$Ү6662UƂ,Z4%q ,:h4P. YzmH4z W3($I{쟮*,>G9 @BW}$IN# q#Njlll~ӛtgGFFv|>T*e_Fmnnbqqahh\۶=imM9 f[R.}YiAKK-"|n` M͉Fdw&jxG>rl6r7$CrkVcDD","{2̨,.QS Aqd2Fo֟5VP:rL&(@0%?}\KKK0Mr_~sگ6S2ο"nV"ر?e1>>LJ?a`{{ۯm Q8pD^dYIw:F9_1 FyOA`u]uX,o5G><x'4Nclְ3D6BJ9+vFmhfDV q]w(n*q9!aԲ,{oɓ'O^eݫ`0R {^, ?\z曯;tuDG>O>Hc{{.]BF,p:E.U'Jf g2P;###]w(RE#CCCX^^SHz6Ν;箮dݗFGGsKKKY%u H@:)r~d`WvBȚ^ZZZ8y3!ױy^"LGw4q|1ۃg]iBŐH$ؾ$X3," K@`TrE77I'bEK!Nn7r<୥IQh-"CW\%keY&)0 o)s0oL~sj$RD6~ĉRn\.СCX^^L$ twg8H1 < ;eMzNSxddG8unnll< 4 6A1/ޯlJ믍3a K Bp3L;z꯼+8xtdZkh–^6y~q ضjWRѽ^:,&&&P,^(Vaaa>u?IQ]zH$|E+k*Nd;=>UAO'JӉx |k2!5~@H;444(CGH/,`ʓ$IeBa.L*f Y3,ă]k\.w4 qEQ|O, 0nyssl>?p=^:kb4&&&F1 WհdxZdTA`\󊢸_Ν2"/'{$IhYX^^F*ƆbYsss#6j-T*G? *`sK_DŽy_Ae/N'+JWj$F#",7EqiO^p#5wy'8VVVp)X\)z~ҹ4_%I(&DE($Ic/_7-b7?dDRvwH#ZbzzzcCarrv{w:a~jIPDRt1,O>#iW_kZ)ZW0`o`t]W2t:uq zIwرw={[W٣ $i` &I&1AM>T*j%EQ;c䤛doQL&133rzCzee=q׫jjjQIbmr|NONN8<57B|\x(bYtQBR1(BTd\.x<>`1_|=z @ɵFw'n*#wjj.\ #p",@ҮH݁pFP^z%LNN !ySSS8~8Lģ>Z6ǖxБ.L&t]SRPu Tj8a:H>˲ggƤVj[RbH^?e۶s3anaYZ&sL" Ic*D?9SSSH?0QJ&>*؏y7tӞm6L\ۭolltΟ?WTA ~Eh;ZT(bwuκl֏|(,677|?KKKm ;RUUAPuQ )( :ig666 L&3(Jl&41xHξ1AYdyt}o- À ;}?+;DNmmm鸢6=&"#EYd !G/XNRzz)$ lmms""򢻢tA&Ӓ; EQ=Ǡ]A%'Ve9~6H p%$ 4] iT*r/2z<0Mӏ r9qAyqrj&te_kIc`?+Are魭4ɤS\\]9",^?xiO98Ilmma{{{@.Bڄ0q5T ҥK~z> #Q4,w4xU6] !+V\.ݡ!D>ʯhG;]Md4MkZÇ鑹"} dY9I z v= xlagZ%s1Tv53WoW;d_D4M0$'&8~ҥcPj \eYضɲT*߿].]X/"dYƞ={tP.zSO= !(J_e8\!8tR0_/ LA1 o4Gz y'v:I)AJkVHD<PRUuY\&v1EYdE t|$R|,=;W&+~޽vdF'O 9F*rQaǕJOexP/ʡuEIK+/:ͦe<ali\.'4\Σj5΢hQYH$PVwD: )y??V|0L2 # ٤{-s#FZŋ<677nC-H$cNj,rLtt]A]133?~g7zޓZ}% D<$HD\y˲\u}bBzVWWa;j\.?lI"i5Ϳ`W2lJ ]}}q4h=A^ Q _yaEU̽mې$i+dni9r1;AL&0 #x'P$(RF$$",!akk \n9a?ffWK{ ]u!K"%t 1L 9T=͞-J?rx w~C埋I_UJ%| _TuqT*\\5 c8{@H2 /~ x,˂[Zi0oYCx{@>qf:Kꃑ1VAr${$I;mkrX!m9r&yg%I8H$ܑ84bIdgU$8u+ 6$9&4

(X, pq,S2<'''PQȐ5A$Eh@$%Uɲct^7a{UQ_P!__@V>zFX^^~u]I kZzΎ[4QV籴qottWzXUy J4V#H>v[߭ [C]0vnDN %덬1:BB^ #$$2I&D&Gٳg199 AtW^yek_=Ajtby7q%zO4k#X<<4 0 7$0 @S0"A}hE?0tà=Ǻ5 AiNvеDHT4}rO'+)2ynTϟ@xU","ߘg^(f ˲|+jP*K.=Y x僺W{ buu799y\wR$O httPT@KpHR^LUU8tzYt:]0ޱ y !DE 8|O铏W<3REt:j ey|WVVpq>}I("z< mwؽ^ny%s,<eA4lĕ % 8z77==i(IJ011j:;[ "jAnZQc{&nftpͯ~O焮_nP;tD#,"g8VVVv%lz=T*=q8ͩTJ%g !`:yo`;Y(LXS v~:Yi@Mܫ ]{ČDXAyi奐Q$", q؞Y/_~,Hܣ(Jlfff@1ܹs>(#Pl6rvܹ˶mJ;:\Hu]'"˲mql۶G@ !DeY5ɱT:kxx'X,vrL_mrqb9[.N ]S(?β,,ReUU< V^YY!q& ,tnw05MضL&MuUUǏ9qē*ʗY}yFw?|vY.bg"F) %_[fff~yjj##P([n>ϣQ0EZ-t:looC4 &Ae:JB}INyExbJe _?Sf'=Y8'!u`T(}c^otiz86ϲ,g1 IDATaaaP(L&ɲYOQk*a \{l6(JWS"ݚi;iA$ IP*077秵c<\^^?pC,"uC@Ht߿(8$I:440+l}jZҥKjΔR@  n?M7$MNNΥR,!!D_?Lb޽x{ރ>0 cƆA,Ӟi7qqdu]g=c4fjV)ɲfy~Gqݴ$ߎ={S/'/~WJ}M) [__ojiJ$mh@uɤ/KR/>Ih2/\pp.i%-Qױ722 /2FFFP(*+#m#HY*°,/---JSʠVD:","{D@Hz}}?,r,T92MNi/M j:F\A$qםO={V뮻=33sͯV8v^|EcŐH$d2:S8H?u]9L²?5  8 tgɟI|COT5.]~䃮T*Ss8c0 b1A80{w"`}uMd7[[[xi_ˤ$ QZF۶K+++d fffgffFDQܓd,$:B7 0 gN_ܹs~$,Dz,*Vd} ^.ZeUU+X,"俷D9)NaKKKkv/gp/>亮E&c|x?o߾d2$I8<$ISO=۶,2@EQ}Çey у={ tPɎ^Kň3nMj U V,..>ẮBzO Fnn<Z2 F1NPـ0˲SJK|Ò$i@[j?"?"̑#G~}bbb_6TUg2]w݅Ng}^oZĉ7$;oDfDFDFH QP{U/f-&cIY%CK#EI^lIcͱ͑MyG6O+bUo/*T%$rc/C$[E9yJEwr%XGGGw7s3 z~ rR,J?d2$Id2JJ>2m۶t1;"HOukzns d/0ʬy %p ]8Nw0 |޽{٣T!$B^ ZVŋ8:N!'mƹs?l0txT*oW8f»ώNR=#8}4zOP(… h4e,߁۶ Yx8n}{{NB$! L" CUUyG[zH!C?S z' @eQd(hr)]+%#4.effgffvH @6%!(Ғ!tw:ePrD.QL`G077۷ociiǠ.#m~~qGτa@1IJu]GVC2D݆ *:SQR=z;8|izzsa$Ix"q(3Dpd2j57i9$]ŭͫ|^W% {cXK;ԍHtbT*@t鱫]'HT*r@+4s$JLË v4eY;fҗv$I"#5d$J$T.xq>ٗJH$vyTU~p}{j;ŋ7nx|G$kA@vȿժ[ymr|SSSB.Yws~N#xDQu;w/Z-h+aǴ7KR)'od; ѣp-loo{y<#⸑;9Dz` s~vvF(rX>VnFM0X3Ev?? n||<-IC_hhZrPQ@vI^2sl烕 f^hZ4**;( l61O{ZFݾYTp4M4M֖@:(#~Inc#Jool$R&"QkU]fDzg ^~&h].o߾;{jd ~~ =^|EP풴鑒@3Ċ[0p?;666700|_~J4qڵƩSN[D/h0< D罎"0^KKK[̞I`xx8-qA,JR4M rmH@$ KUU(EQz$4`&^@DW_8{۽, n8$I B]a;a"VrP˒~SD"!E-˒JiwL,ԆNJ1M-css922[躎 bcc $!ckk Ba=Ͽ%Zmedߋkබ^W`0 Sߖe!,OƾڱqU0vK\}xIm]wEQvoFu]dxB088m۲mX[[ç?iƝ.H#6 tgOLL山tl'(xQ.ݎ@^GXĵk:= hHBO?/R ^`+HuE"J%YvDtH@𬯯7VVVpg;de9A(ah6in1b&ݏGREX&] z%}2D^wȱT*X\\=}L#>E,K6tiƉ'z*=&xNDt:Ӣ~~;䡇: DQtUD^G8& B$4yg Ҧ`g;GH%ȥNMM 6=eƭ\.ww: 4UhB'eY˲j H$&Ey< zZUzVRk5% {9;(:b1Tѽ;Ȳv\%s>яh\n߸qCTU @4h9RT,ɺ#d.4 rٱr4 BaK9W~g~/;E\Ʊ#<3Q$B? z9s;?@8ɤ(ê5y6 b N>ѫoP Ħ~]vF압(17objj tv 1V]#Iz~\._/A-:N#̳)BN^B?0Za֌l~BˋB 000EQV3&dhIÝN(t:L&FAxq`7GÀ@4 >ÿ855uՑ5㡇B<K/mw슀[n5ygu]7Xpi;s̎nl{ɿ]4+r?5v-JEﳗvKn](JVUmJrNRDG\$wL$,P(dG8s(Aw ;viz)Ry$I 'ĩSD\ymz=xv'%rQmZ-J%ƍN~.&v EQP l6\.J|ݟ>鴘L&rϲlxNSSS33, L]AsTҒ/21$HD$'qd?] $yf ֎@uw@'W*,,,,`:F B= FpuB-Bg ^tI6Ew0fffq]L"4X!ukT>^_WPT\0h4\N [\$6龩ꪇe'׫ة G? h4a?qV5tLU^_J74=&vToѮџM&GC$#ntzo2zGh?O@nr˂ |8+9akW*uv`Xw#I1ko(TUA%RF}NǪVSN=O<$}H$D4R$ wWxDEghhȉb.eGN?oy{pa݁$cM\ f0A ~.C۶~s]:.f񁁁*∢HTzưr X9^?|…g =]e4BKd҄j2%5IH2 Nrmnn>tTa%q|t:Tx ;HW*ke.KǶmtQ2z0 dYn1??PZuEMӞ.QhrfggGMM:VyE$Ae8pSSS8y$r;vE׾g[˲,<1#5ha}c BX,888`u l<(>G'ˤe6( RkGÇ MP*000[m1( $dկ~ݵ zEX/dsnDjK4 >fH$ripp_3=2^UסhHӨ=cXl6p_l<ǀ B.4HJ$5VUSSSxG|#8h@~.c7yO(w{4}Qtiuz*D"Vi2.I%s]@"vGh6uȑ#oE;9cccGPNhBc͛7qQcnnQT~嗿j\('" >k t<5M*JX,h۶ƯڶBoG$"~~DU8IJ/㤌V%!48HdOZ4mJ2xxK܂*dp x<V۶me!czzկ~4HON򺽵uP(,FR*L0qD"C[[[6ntPUD8U!>I;mhGt "prlHn{}4H!!칹#o^a5A,e9&wCL<;:N8`/0^"DZUUAu],x^G>,u n] C3~hw\9cccw>?o 8CRבdzdY̩ n0D$EQmF*m_inᘦBl6;*rW Ol ߼yH$h4.QUXl*y4Nۅ$EaUt::=SOazz.\ Аu^ tGd(RQ&3F7VЉX?ijO0$jٳty-o|yB8y x"zu>hryt666^VxƤ:SzYKkZL&P%(˜,j\n @褖(H$qocaIkGw >&89 X,d2 EQi#Z"c||Wpv{硻Bddri+=nl6ŮT;9}0~ǽ@+TɘiT*$}kAӴ +V*{QRm! D"eYE!s$;3@aDܪgZࠛj,C.ǰ^F. DX~^,B044m{ضm\t ٟu1$Igv߻wx9:::;00UU].}݇%dR&aV%;"2Qײ,Y=ZQ,,, Lbcc/f>N$ !O*d/Z-keerʣcF:;#s7h;T*}T*əL}fDQ\qjcD1P(i-m{cgH˜ nb'8x`tzzz$LڪMhcOj\.YcKjd0#b u(88* M,m4Cb(";9? lG'n,>f_|SrY)L2E'g?%;I^Yڟ0 J%B!4 nkkka|||Nl\y\~}P(x<ΩzhEW{cx*<Ts&h6qy7]$Is8G&ap_KR=H?C?'xfyu@hS;⟡i$nq,(Gh@BZN'^p9YZZTbߟH$e@8XZ-wE3 M|T,D%I 1  YgYǦcW^mOi@<CO8iZgsssx788@&M[r,'/Q*jكFvMfLRfNy7VO$C Dc~" L&s]-j9w`S ~~qo9 I1iӧO̙3t:}Z2 >w:!kvr|>$IF pVAQȲ Mϩ*o߾rRJB q/; Yh4p1|%!zHSNJxqȑ#?000.?`0_|cccz*kLw*Roqjzzzljjj;"3(CH?@B #[57{y.]imPR###ĻeY TۥR-"NބNY6v  ~m0nZۊLNA$WMlce 1EQA=0l6MMӚ_`$>gmm .tz;APV166ֳ|TTA2v-B,H?Ï9 H˲[#]~[5$J1l(;I9AmxЉ'zvtG&Nؓ8<t0>>>H$&bƍh4ŬW봱5w?300p.[C0wq~zbbb&N;hԭ aȏDQK/BMӐdp 4WmrIE\.۷o>}%055Fx<2MԫHGVVVzM `߾}X[[sPXn}?}TAs:JR%}wL*;5d;nK곁G?uPf DT%jX$9x z 3dO".mZښgii gΜ.\V=%IB8F"ST2L\|TDwABai˲l>Ӯ`GM8}{tOCUU<xWf Ip 8\"xX4;Ε7x d"giiH$4Mi64 CCCI^<w+Ux.ׂ `D&bu\E%HEd(6+"$m(G{#]2^oWqKz ,'is&^<BCCC>)@{"T#) >4M# m=]:=FF>HnϞ={% VR|k .;t$I`E֍ @RiWՕp8gYW:ϊ êf24Q> rjjj6NKH$}CxW\/]g / 66q8ivZa[(O"Jj]3Az$ h6VVlYC/s `tqBp)lmmq=r"n:;vG>N(Fy`I<? =d~̊ Lbmm =ҩW:&(@Yzv ۶khsl6Dd`f$|G<F>?eYdD2886gqʁ~罅cX>? tR/I'|Xh!DlrBJZB%dN$? p(%##aN.Yqznn!b17a 4"c~_V[Z^^~OBELvIU*62)rȶmTULNNҜGŏdF"رc;044ԣv# ɓX]]uGP&JVWWM˲he'"\?}?AA8οb%}x饗z:V i"7D4E<G&$I; Ij\NiQvڳ}:dJCĮ}nM > 뾟m(YϐwǧL&:<dOٲ,U%N8%*)H&[Xo0킏Gn+r: O?x1v04MCZu^{|~/YaOvA': 9vXfׇ~4i@~MQTP0|s>?o nRF/kEQP(H$Rh4Z4D]-*qu\.\.$K^d6}w(,5 )˲EZr얗*LtUhkv *A;"Dbdhq7$^ ]oi2zV(sB4RoA%-I&#eYv4MEXFv=[>Drv(moo_?fGdY 7ʝ7]3NnԱyOV\''':˲XSq­[_۶E40|~ǽ @4fffQ,/P(V^H nZnY^,5LS,vS/I4M.HyMut:\\;]?}BT*fc6pl:`Ư-˲lơCjV#d^@`p?~;6dܹy>?q9sn~雵Z=6^(qٟD"i0MsB1Sh6KyϥYB>+a];Y+WISv킏!4oPUtdQu"ǗUb "ƞK7qhw(*}!OR#GHrѫJ3 CēoV:R,S@Z`8~vvׯ=Za$Id2V={vFJXx<>2<<ћ7o^r1b~?رcHO? N k/v:Ba7 ;j(g`㸏9Z&zV0\{%IrhNtγDfo-ITUuǭm`;cXvүJnkf뺮ٶmi\v$\<Sou;=|a$o|:t{KpƍQTW_}JV;C/'d*˲822OUU$geYv;,T txGTrkvԇpM֭T*xGk(J(կ>Bl۶v'HȊyZ-Y_r+bL&\& /a`0"~w~%Pӏv,EbؿJ&ǕH.///RPEѦ4M5#xi;H$b%NubѢG. x# 0 VVVnG?w64 4{QeGnUdxu@h!]`GOHdc z)j :L$^%;nex'"w:bZZZڕ{xT*2keqܸq+g}68Nq8~xȑ#&~48pۇ\|Nܛoyaqqh1NyY0lG9Y{"ȞEѕF%qrd7eY~i,nb; 4 nj@e8Ӿ1`ٻ+b5~`H$lh4% z{:$/N`^ ?z={<h6믿<SUcpءeڌ;~U. uJ)849VU6O'rI~tV4!L0 \~Y]!,nqXYYO+s"~~`+W`yy5@/G% qG1NlF r \O8FX,`0M(F!IR((666A]뎦i033sVassE?noo/^^U~`LB4M(5ع}?4M,r}u\ IDATe|>iej@#Gm;$d%a1~^#ǹP(t:b0vHxL|?Ƭm.ZT*V^z"xi$IWضbI>|l6 zJEȑ#k3vUV/^<ɀJb^N;b8*j8_ujJi\7XǒɤB(\2P*iɓV}+=ٻz>`; 4`cx ,E4###q~ 8fihZ8GyS-K 9;jn߾}sssu Fh@Jn͛7OSmFD'E`8OLLR2 YrzYt0>>0F!"n޼qW zqHhYo4Ǐ~+;6z~GT$MysMt:.;%+YyמD1qGr%^|Eb?![E[XjAT269 1ncip6EBJRŋ ^,7ASUu^s]#2$ 89Ut>pqlllW^.\p78=&mx>4&:F?3,;b1# nsR۷8h4htZNqʕ+vgH$bB! h4 L@E=3=|&^{|~) lW|>!wǫOF S4MPU\ǹ]Dy.&W؎f,| Jx4r@.sUO鴭( OQ+.a0m潼8Xհ 9G=::z,JYz ۷oC4 ^#Hs#XG !!@Cw,R~=@HbT*V'.PPhW5c]YJMji?%S.qaMțlN8ǁi8};j(]MbD";dNY ` غcllLhŁ~X,nFlnnn5SSS??::X,&elbCJ(?B|;=;"˗//t- ӝtxQ)/A;0idXZZz=Htȑ|Ѩ[MnxAqr9w/Sw/t߯-KOUEf&hB>xq5 p q-4(䜫jT*RTƸP(dif:tLfAiszP(Ν{w|4P($Q=\.dA @<y^[{ɤE;-ɲ캵={###|4JA \:ҡac@? n~!Wt0 EOV(' }7$I:ۭ E hm˲*dY:000j ]`YwXȲ~$ ͛xΝ+R{GK$A|Rj}E::l,3۶l6oPb޳+wJ/>eg_YYC&Ǭv(Ni{ů۶-$q6u]$I=dApdfmmN&?dT&CLvPU{^cmmsϽLu/D"p8CFv:- fR)irrshԢ;8 Hđ$)+KD 7 TUE~t@? $YY]hZJ.m> ~Xׯ_zݻ$s7i~@RpѲa۶h4\p@(.]Jd@hh4DW\$Ib(0M7nZV _P(@G?B͛?sXqk/R cPIAlXe Rłz4MCR3pN{z cXh4ZGY5O*EZ`DQv*ѝ'N B~qli37`ebIA>EpV766^D"۶˷BeezzAXeh,.. :z~_C d2m>TFa3`qLLL|.$cXQ)LBuBK.] Jy7x* ZM R6!& 4)KRy,ITjz 2O k If1>>@ zb\.yuG2$I"GJ8od2Np8z|>ׯcmmmĄiY6[upht<V?8 [, > ]4 jrueui%k%{666DkME$۷=G"Nm| 8]DF0552Cp*Y<$ pSSSEQ`ca|h6\p.2 ১ㄟgדe+++~:= qn6eY B(Z}_z?,B333Mx?o) =&rD u쥫B_)(/gϞ/vۋaQK"FW'''?d,"G&;8s Љ4?' RB6z ^cii @Qb1LLL`~~a`yybZ Nu4 kr6mT*d2J%,-- Nۖe4Mt6 fw:6MSjZAML(N2( ckw_Lj ]MǮZ]]}jUA#_SdgfZֿ1Mꂐc"(4MQTӜX,okk@dG"8D"GWӝ>zপ*`۶Ǝ(:Ew?"yM% ̙3%n ַ.כňD"IUUVt2WeYlJÃh&cTH@bmHPLػw;HwHWFEA~|Gywfu @w~~;dmm777Mf)RHfYf%I^z?c#UJ0~G?355oppU!; ,q̙ 9ͯ AKJ\.iY`"a$U$i=r#Pr"S:"Ģ'g}X?#B*KKKX__qB=ImۼeYb4i&4o7 ' E%n^:JHdtNjrsV^楴emLN"eW @E`M(9ȲLR]"BEc~l'8/IC__jhQXf2VWW{:!H0Dr=#W)hd2s6Q.ٕ+W8o.ٶM {E$In惍FchrrNh4j0 YOR<ypl@=9r $IB}?.YvRt+%~&yPUu9NH$#58DTOYN8@`G .ARBŔgRWszzZǎ=DQ5ǻ#_;i6th4Q],(;$:DtG?6|D‰'ex$v7aKZbt: -@V]"U\.ZV|(Q e?7[ͥ 3wjZQ8-J;&$!ƍqw[+w|$,ױޣe|?biO}S8qΝ;}bѿ yb1qy9>I~$7/yjJΧp8ܳKsP}ƍr$x|$L?D?uu]wj ;“TgDS9԰ 4w_H$ :tꞫ^ǃ=H9XNN*JۧO> os>~& \6l$zT!IҎ$8ز,ʕ+_^]]@%ydƛo9'z|~~Gp,shWrCrO:+%J{l䞐_}֭oj}o߾x< a ݁Q?$|`W^nLWFFFP*Vi> }Z|FjJvE>MiUTe41@{GCk_['I&/YO"<@&QS{I={`hh_򗡪'ϲ, DQr9cbS1$@?o?u0яNݷfIRh^q`dY) XNc/,,,2Öe$I"{N{?DPlӀ|Y{$+lnFFFzϤ+r\v4Ls=jM1Y_~?{o%Y>efdF.dUuUw7M !X0}` x|x`2}Ǿ aFMknuڲ2rXW9yjʌ勌y}o~$x~7~PT IN:|Od1q8x^pU:` Aat5nrr,!ǃ x衇64MvKdY2B$M ?ErtzTH$lvڅ~>A*C=XZZ*:$ ;ӔBr-7Ǐ|3<<|'z8hiعDo>|~#%34ŋOvT* ؒHVC>0vy0#0 @k+ N }7ZUU2IhI%N {7pG_8:$=躮722rԔNm"K ˙(JXXX:u8b ynLe}28R}hvv6t]UUޡ!/)h4BiyT)AA|qޖR`vy'y{}HtX wq>4M}8sL_NcL/IPVr\+z~$i'`!OѣGo7MS;DŐd1EQGϠЎ(fiΪyRצiBexc t HRu6}f=='E>,*J =sT*9.\T*5pIGFaƋ v[( i0٬?Lq\t mcddO~ g03!XYYvKҽ϶Z;"&'']Vb7ܴn"NDz7mj9$C Fv;n/?tONNjD‹bDW3bǦigA6E^GUkRj\ ˲/~L&2j=;9VA.&s~Bj́T*w}}})&,y.<-Ljks1__nϟLMM/lVTU#O|XXXӧvM9Ϧ)+,*ZySAA=w^b?I C͠<EQX,τ 䳆JRUU=eOk4<۵e6ٳv(Jv}ߣ{offl  B:,-nR,Lkd;a#0#W&q]ןG8V V {S!7ض\.SN'tR277G|\ $۶J #H$"R Mo 7vQVMx1UUNj#FcW=ѿ Y`B"9 \4Mٳ_r91JallFDqm7@FpЕl˲Pqox((YQ^щ9N C'o~ַ'EL*!fI: - {YҭfZv%N驪WEIӴZE|:Nz9@H`cttt2HX,ȑ#h4wo2#di,ֶk\+AvrPJKFAC;Vѩj!j taEhzzN{pK IDATO06M-mAt5r,N>'^gd0^#N#fLjZY^p`+۶{ib=(v?#0xIU59صk;m;!P |O&XLR%kxwxǽo65&a@G BX0BYKݻE"]d3tRBV9(V*˲KKKpbXTUU^$EӴw@ /v೟,an~ZOJ eYMaiXĐl;NWUU}hXop {vu?܀(N2HxGQ|C=LbrrtڿVRFGGqžU|$ߛj %N;OASUUN:X,Jm4?H<7ǁ$IH&@?Vض훒sdcic %HED.Cp?>>Gud{^;G#0#W!s,vm{YXJz<뺾cG$A+HFP(P{/;ӲvЯ*c AI_E>!MZͧj̆ǂVbFxZ.*91լjȶ~xxxassӗ%xȲ1~8q~> oT*Ғ344䩪|aH$2(*,( _.NjZ)Bk=Fx[ߊ~|zZ/ѨCϔ Z-˃ntjakk cccvIMn'ǎ@թkz54~Fa nl(˗/QJm\/$Ixyozw7``=-0j5lll`uuT?uϽJ|>$A{ LCʴ266IM$VZ"B>AŲt3:!"3*5*INt BAؽ{UU# KP/qpU-y?_.\ry4@Yz$zO>|&9(GdOĕy$#Z-o۶ @`.R iwFGGsRU!sv|IvE3 ;Frq3!AQױd(] ] a4?<^ȣ T*L`iXH,b1nob\.<"|rD3X!;/|{A62 nVm8qv7sަĉ'fqAy^^/t:ĕJ%\wub,kڥMvYVPWҸȚ/rL&3iC DHi08uԉ-7LBQO ]|OVU^[[ۿ5W۶nz\U#0@h7^:Q A6AnЮ"oo3N>rM5::34$2 IDh6I !6Iɍr;7wfij+B%n@ f fl6G4MX,B8NbP՚Hm2D>+WsAUC#V'TUD"7s@mVVWDZ/[G9^x;c۶w-?MӢh4X[[ZL$๮ٶ}0l6[__Jh (@tصdDQYDi.IhUU^:޽l!BQ躎cǎu]8qa׈8vT*Iy4 îjx!\` ^y$IiIn}*u䞈G)68$R/#玎~Hwh`}}>H$D\]˲FaUL@qY#<4M‚F^>Kz֋V+J0 \W\A,A'Mӄ(Gh:==qmCežavmmm|LQA,=aܳ>{oaLft\bEBFaƫ4H2%IrA`tt(<_]]=L&kl6NKk*q&e&nj\.cqqkkkZMK}},PՐdءj_#!Ni0MsqӵZ r^CCCoWU_ȲE!npSY677^.CMd2=`?A!"JAuLLLhn3Ulvpu:ZrJ,;,Iu,j7r666' <\.n%@=ڵk;KKNVaT7|>t%$v/%wqxy}ٳgSO4M`hhWCeh׿D"8qF ^tSI,V4 (E'۷o8X ɟ#cn7H@9gW*fY*5r#&&&R)?;Xx0Hq`asssVpu&'3 9Y\UU=vފ0ͅkt=¹0#0^=ZG=;ΎC### Y4iPwT 333h4tZA+ueP(L|PDKj۬yhw|;\oTigӫ^N۶=H$0::v04eYPc{I ӻmZPaX^^nW*+ͅRt)J{]<;~dȵ *|xl <E惤3*F%?M>z xn~ 24Ms3 JMR\Yߚn,$8O=s=s u]# v-2/R;`Ue&(f#GEQqq>A:B=ҏ~vlRARX*q"vލH$|>ﻊCDjjکi6e8h4| <"i~RӴdٜiBNӤԩz.*$Iza: NưFaƫض\YY9tV㪪^/K߬Ipxxد@ҕP: H$qLOOqe"A(\Du, D"?ؿ?*|I|k_d} Qzfo3HE3JFcJ︐nP(4j?R 8S*#OG5tAԴK]njp?###>|9t:M]U4g-ͦu=<ul6}Z2h4<2rȑ b2 ~ @ѣW\)꺮'亢n/|Fa+dX,>W,D".8۶VI ˲n2M#EM\qĭhVwSV'#tH6ZK_Ȳn _a6N8˲p),//ot]%Zdx5O$eP(@u?) `zVe[%U (h4`*^Z' ȲtпrS0 }0h*7@Si *kyzp{)׾F"TUűcǠ:NKeY8xkfgg{NHi𖗗W{~tky>d.۶Qݭؘ9W-tɀ $0#Wg᭯?"akkKm9<<|[4}BӣmHo}}ZHUUj2$K'Q":m?xq=zw~wpI|߆a@y[HB[(( b{}}t>L*9$ i`g1&YŎyM7axxdҧ1EQzH8u BTXą zeiH>SOS|Fa dnN,zy|&M4$kt2Njz>0BWMFy %t:4mܧaF!qt%Vq{D"~>濷 ?S(, |yAW.n}}ɽ{q/h Xd2 Axu݈p@WaƳLY4鹆GDQ,[<FXڗ p\Y8Jqy̐@;l6 u{/x6ylA2LMUrl(722EQ( ;<*\OAwx/QnS`iZ݊j,L0yCw,m^P 'Lh4"2')HSSS?;:: Funvv;3< @goW.l۶lW`&DQxq3MlpN aFa `"*Et:kxJ($0 f'|,[@߄Lxuh<2Nti^l8('˲f6(FEQY.xpIHL&t: 0A^49=ɳ{pN^%IB<bD7Z 9߾!mۏZZY4H6Xen8$@X,r97 x &}Md˲H$~j:N4॓gA g9þ}w:FGG8~8vڅg}~hT*a~~~{}Я|*u7 wNU2 DQ$}C{,頮 @hX5f4MK4Aeגeٽ;44$t70 Wkp]x  i4lj۷mLyޗJ8Je!L GaF @ GMFSl6i65PT+*hdE'WT$)i$<8Nj\\LxNǭjLf2),+IeWEZ˗aO1#={8nEJATBH'\z"CĬ;;7<@ n#қ=JBn ShzbUU\ћf}aaasTrYu> [[[dߞCCC(G't孝$EiPJǎ{4[[U'uTI ]٦aNӊCAݗFu]+i_v/D X$IRtX  6$vo|}Gb׮]8wk-...}[züx1fc~ߌ+W 4M4 J?=v 资!x6Fث_d2!zAQ +0 fggױ]o`?NUUg/*j{鴗N!z<_jyǏVպ2"aFajiO%4աu[`nn?zN _%#*Iu|^* 2M*J;?y^}A^@?e)l6fsL&dY:$b,yⓟd_{t(>hR\.pC!fB@Gx@jwdnY ?Y]~ j>s :̙38/˸t7ͧ?4M|X<쵑N5drN|S;Jzrٳ,Sv'''߼ߩG{TpOSȹw]Lާ Mb~~,~4p8sUUd2ʲѮ(EK 3JtQM"y/Lh{0~Z0#0 @yv:kfm~RqUUA$K8 L_ 41*+{rTzT*0US^AE({V{u:t$ٴB=L}XZYeePWMOO9B$ʅBA@>gxrLU͑AUU~SSSE‚e/b~~VJ9Ɠ*d0vEfK9L&GE>|ŗem{,9YKi> R1d9۶v#ׄ8~ʹ .,߈>fHRܫ:$IbGCw?<ק;o6 KKKw($TaFa `߁`,w~~ȈSK((t:ugiVz]vT*l[V&kl7Zc >XvYoccAv'f1&OtMmcIG5Bsx9cٶl~:*p'PA}ߗ0qA 1KIc? DZ۶GS2$vJN8[n޽{J*x:y˲ 2fgg/^?>*ܓ'O&Vlu]d2oFI8q?o4OZV4"r\"lmmuɤx=a}}{;M4~t]TUg }=zt:=66v뎪XYY]|b?A뺸tb<Ñ#G|NV;Hx.apg1aFaj Tu{q,--' j4u HEA<$I}ߤñk.AT*q\xqquui\l_'4&^<Bhu'X.O+r @dz踗@rZ,@oRp7;USzN0=fcbUN0Msi *虤 ̝/ My~"Ld<Zbqq;yWWWK7WI@b1|Ct]ҴqѲ,2}qljtE~[a,% L"H`%@jammm>wB9f0o'IGecdd7 }766O<R155MPSeYF<NRJa@Faƫ IiPگ 9 }udd]~<>>'&&b###6H$J0??{Ы QpH"JQ0PQ|@{2ڤG= H\Sқ{;["/JIzϥAwy$#H$F5M{1Myx}z[tΞ={y]hpNg`J=[nlltK>gl6]v%٬M5Ǝ0 eq0wuBhi;-M>Ѩ<,ceeedw!#0U @s0UA Ziڶms w5M/_F"i)F,DžeV>zklN6iENhK4-@=V*o||ł^N(t:W"BRD"[hԡiDtMK~9+Ri]\p8Auß;tF sA(8}t !*Uհ% Z-DQT9A@H"@h4n<ۨXt",I1WЮud2:OI}WԱns=ϳ8޷o߇u]u@+I{n1L~ʕ+y景OMMcjj*544D"ѧtvHAQ\t mcll R vtXuȶ s>"0 ߀&ER u]r9*kN3M3taFaBF) k%/7b&9.bMh(M[VP(,Yv 9۝@NjMѸ|Div(Ab#}0C[G˙L&]ڍFz @6hƇ8.f4m?Q@i'ɾi4Aݻ<|pjddvEމDcccV~eP(z\͹':3ϜY\\\׵f^anvi0M '6N133]nQTPͅB!wʕҊoAC/v<GFF~=HX__5$,ht]h4sHGcl6XџO߇d|͸뮻8|_!m'&&D9YvbEwv#0#WdD쟗JA>HIѝZ2j/IYA*q/I 07{MӐfF1׏:_%|}Imm4=EQ|pvpt]AWIj~Ʋ,nc%ܜd<_Z__3xPe HPH$‰Qr/G$yti{u j/\׵-˲<ϳȈ?ݻwox\R j՗2&ѐ$z]^^~jvvvZ6p-=.$h.S8&2kb'2O $l{f  jאn p~)t+|OJ&.b1=z}[▗nTgfϞ=SSSL&w6wRe,z'kףG, P&jyg~ٞ0#0 @t,^wx) lnn)n ۶$l"NsxIz7 _̋/xAd(?zv? .ZݏrZ,FyCCCJxulh4}Z|>Z4td^w־gS ;_Q@KEzG}/PO&$Irܰi1MӸD"M| (yP:ɥI.Lt]?,e<6X,㯍Fb$yG4Fyk`Yl6 0s4ɸdNaABͽǑJ\F\zͻEМ^oeYFjqoE0·aVX[[v L¶mus$r+AӰ\&igguh Aw={n4-N֓C,=<*\ Nrsss9Cd NaX@w#z'ϟ4V:M9"` J]Ba JugR</g4=jvR,+xOu]Y)[^ɶ>ha… eLRU&Fqu<,--PD̃޷]lnP K<:?jPVqEj5?%I (^&4Ik$`;B""H$TIni IDATSl3bth4P*i[ң(q$ KXe-xD"b"TUuYYYj&2jkv5}#Оea#}GFFp7UU144D%t[* nT誻$ISgʃ<4\Y2>+鄈Gy^<RlŜ Z-lmmassEK:ZnjoJ9q,^18ymA9iNXr5\j:\V9(Z/=nkc`阬 hg} A]9z{kkkŶ.ӃĄB<@hcJުt'^#Wa`}}}>vg7֋(0#0^(RW0MsveevA;\zkF}q-IUUE<G2u]G&˗O///5jm1iu] qj8xD"t\~ a؇(d28tpd.ccc$nWh?oƿl4/JRպ1޻.7(y|3vuH>EAT"*PDrkkk?WPгp@ze?׿xhMbv};ZD <8' 1L.qb$9ϠeiA $OP nir9}R}WBjYA4HWA; n&*W*N=GDQ|GDQgWk%Cxܧ] .\xAIp=0#W3e/a!"$u]Mϼ2&ualHzNNŚb1Ȳ ˲' m_lB U.]tѣMb: )iVjk6gz'RcF.(JG23Mu-^7>>0Fbc8Љ1M!q9b1߇EQ6ilYJ2L|A9نNMMcOfZ |v~ΙeY9pSR(X`0T*fRdq {ww+++ɓ'(o;CBB> ㉷giwT*|x{tRUw:'N^@%z jAQla{i.^/}KC_[TH.?5ILMJI4 {y… Wѯh2_KRJ&>w؀, :'Sv|>_,v'4I4v=Lrr-~8 Ǔ=sH{u lg|>Og x@$VUUm ίJ|y9YZcF#dubFGGxԻݮY}-lnnINip8lAi,NNuT*|, jAjw L&mq9u>Z-^\\AvXB^_䀜x%atpw"0xcg?b`C$4 ;%v=׿$ٳgo}k4Mr`t:o߾dH$540?? ,J{ :Ǐ۾}x>t-Q1F]=f:4F-fӶz>MPT/\ CYDE:^[nO@[x<W\F!pL`p>"jbddPN; I)UYu$I㮻zK/405$!B4=C >/SUUCyMx@l60RAUU&RY2B 퐜={'OD^GA2u~e d2jjjw>؎͛7l6Uh0`\._ L!#@>=FjnkP7* r PVz} h n,~=Fh4ww6xv v4M &$I>rȿ7"dzNADtT*gϞ}YQ]|1' lh gϞ/|V$!N~2R.!" In/ONN>LăϼУPVQB!b)UUZmep{kKOʲlC,8p8IzbbX `Fv6L'Ah\WifX3 mv_zycSZE 42jիWJbQ99;4nMtCMv靄\.t6(b32Y؀$I8{,(2 2GF>{Z֗Mt[Vů 㓓j<>>>v5C2 :Zr}߾}i1Z;;;4k% LBܼ>t:m0){׮]Cr(])|r b^P!lUa|*"T*lnn /^̝:ujkvvvҲ8/dS}inw?! NBVit\YMq4 >MZBv yp8fi"ro@4]+fXXXK=ztdds\Aݵd2MGNvJE[XX(wz ȚuxDPs`Y/q t:n{wYi ~,ˇNDPAR Icw|||f߾}JR}a}jχ>C.bѺv7+ߐGQH$PžVQbuuٳgѯh15'''iddvb3R>e; $B8FZO9$IH1t[n[?ZhN޼O-..dYn~LMznݼy3 -Li׫#ѣD"~:GXP񙙙zӧw~zr+(Xe;sLe|ɓ'O vx&"0fff<04ΎR( 4o}aǝ <1(Ѓ,D[,mVĉܼyJ@0 }yy&`05 #{3,tj]a 766.>|.0,_ǰni>Xrh4uvccc[YٕuI wYeIdnlllo0dLOOR6uD@eY&-T*accC ÈNcB}KEQggg?422bw%L&:dz~!%c5N]Ƒ#G~ctt4Il'Z FHľޢ(>`ww_h4lM|`l¹Cr-~tHXeYl3UrzLA@V3fffA+vA*2|\.a>i,;?ż`PT*:-`%=B!T*!uxt!t]b13NV?KRmYOFhL$IA!@I~jf?[R)5w}YAoP@.6DagI9eEiCckwhlRP(뭹*rMiFV[jkSSSo IWa{5 ND9H/LWN4͏ !$GJmll,_[)v9==-FiEQMFm!Q<(C=7N~Hd[ vj5,//|gn[et]Z{ MIUUMVSDdž1јkIbѫjd29x%omrn[n@@VVV4Ͳ,Ӳ,J%!tP,!",Wٕh4bᵵfD}C)2dYF$Gwzn4XYYA,,3 <ӑH$L&T*~bb[T.  \#MLL# uiPc~~`rrDv>DphD"6y_OSF;;;(v7X,bgg(ڣ&###x8e ܚ|z7zƏ+b1+lJ5#qww|$GQ4zc1V4b?\g""{Z֧q.‰۫m'[c eycdrVwaӘWZVkrrE0bGwkk:wRXlYMDb~.tMz<:>ʱ6om~[[ NoddDS`FPSٿ5J_A!N4=0MKFr-& ?(;eyYpOD"$>L6VWWJP(t_oѤR7}6VZ-\t4c;ѱ1{$4*ѨJ_ HPH{SŎ-lvLn^Rg b:x#|;22bvx"Do5kVWWQ1>>ڒfoU>EQWIϱX,__@>Q, ""~qzjڿNRnnaajl6;*rXx`0?A m |gggn[0`U.!/,<8y$2`&4JR3?:$]]]ݨT*stTU54::ȝ+ `_F8FkZW}>50Ktzv}}}wm{H/i^NߏUFFV/; g툄{:^eYit]d0>L&q}`&}e_^UsNkff#L`ݨR=/| Peo {nz/z_&/ FeY n"B4M$z 5-fGX'zg9i?\2[n֏.8qb4/t:-`dww`dp"D}vvrw\u4 333XYYA:>lllP(ƍh6vGDu~hUUDD"!MOOt> c4z&fD";v D>fwEbD( ":੧ɇ!BG_Ӽ~>_[ZZ: :-ǎbbB `0x@UUSe$g:Gt:(J}|7b1`krj\4Ex+[Ej\ɲ,$#311C$ѯ\6=` 6D+JF,s&^fNMMYSC1=Vjo}['82i[F7aC$4t:>-"@ju0Oy(wONN;22WUy]+ibaax<}vN~aiw{]xa &,kXGt?zr-Q' 9yfgii˲P,~:*b؀a_( \x`=NyBO,;v ѣG^z RKmh4jiZ\j4ͦ>55ߍƢѨM>XPCŲ,N.WT5ckk zOE,cddHGO  Ɖxc?\v(n+W<{TJeY^ IDATt:O&bCk16nw6" `Vեn>7Az3Gu! "~Pd|47@,y{pxN%l=,Ai4OhaKۆ8H3A.VA~^G.k|k_no[lxdr$yo0TX'+A,w wpUu]|D4Q=ztxv!c{{)ReF'+l& B p4[n[. DsέXjl,JGqخKH{ S 8B!;^ڜ]x^Z-fLMM!]z"jΜ9cfdz#ZB&Q*Z ###;΂ڮNߏ^`O+h4T*u떸re|/ Fԙv/( @u]l.--}oϨ:NlP+U,..>!YgPQUOa.mtɲla}}j?KB ܶ6_c"8tl6ORHN dK>x^(}衇9s2CL'@]"H.ETU$ ReuNpe]׻vi$y>`Ф*ImYx ÀX`3t{t:eY,a4 7n܀,H$h6v"y<Z-;ȓ neo' BgeYN&GN[n[?@ϟU?o/d$ŧ`Orlyʻc@v׋jj$nkćB!;v dlt0!FQ1^‚lEQ8rŮ]iPVVV6o>&LmhT\p1gW`v7&J vZH78%w]G O9Ӛ< a"\.R<~1d RU z %!(u^- Ǯx h4?R`X !7d;FH$VT08ƒMŐv~E]no 0Őf>h(J܋.\Xbzl6TK䃿/.?/| 6续BON###\ߩh$IBFTBՂiPU>@oq4MAmjiBaO⶙ItHv-r˭9Bˀ)͛8PbI'{Vzv" @w͡H$bwQviZ-m>Az> ߏo|#Z:N:ZfCv\.#H o9;5MT*looϟznnn\ckk뉭- Ţ ' ^WUs_*{1ht(h<#b\HG|D"`0eu;v:6D;+W,r~n`nYvA{ճ&n /x|d^- q{q/q{ ɊՁ$}{˷nt]g :pʲ &K4 V8p(+ώiKJ$M&^V Mg>躎\.g ^^n pLrJ%t:=@>-1iX勅Bayccp/|̵[n[?Dg paǫ|>{?mnnָn~U[(J<O<,vȶ?LG~V3pVWWh4II}X,N?|ſ."߫@~,Jx q-r-$DrJ$I8r"~l#v(uHAdd||^u\__X15u mJe4Mx6 ׯcB6Oӧmת#G8x ".^u[vV[C#6bZ]͛g.\\כ=q$b:ԍLt<.:NgʂiIGNK n|,Ks[ s)6,XYYYpyċ&c}}T4]tEQNiNp""w<x쏅_B(zF|=;aX,n EQ(J\叝>}OJR#e|އx9&fY֣XIR4>z;;;?Ύd+H$//XNVNX^^(vhg^`.JawwuǃMܳvKpm3Z[n[?{ E3MrJيիfX]]a]\Ǿh4N `v=iF]fXDZ(bټh4Xq"bddf^ Y]v] J|'1??o0AztlZpFllln:u… ggVLt"r< }>_1q3V% +{$}o:Uv:Jp8lM:-\ AaA+"tSV 댒޹7YUUnZTsw&Я7y%CDÔ7:ߏ%]^B 9Du]V/zɓnyfi@m=r'"-#¼L&c+=H R ׮]}eeY^/ml6:NNL:23==m댆u@I 8gr9}#p^(vm=ȇxt@vE~[nV?lVj.,,`ii>pj^-bhZXZZj///?i=fnB!_6}$IV@ =,=IKL]ʲlId!xlMR@߬8?u;Uɓv8nL,n#;*JX[[+>O݈gYIarikk/E(VwU+<޸q#777oy[ޚJQbLӴ5:ccczA<x_X(>-˲fӰ!˲8f^o6s)17| x7H~ z:m(X]]E0D,넮N}7 c䮻Ĺs>AA9/pɉ1-"qu+++<k;x0}VatttM"V']j(f}'[(Ndj&lWb6J`G hۨT*ʍ_| s|ˑ;7n-r-0+}c.b Lv]jG jϞӌeYmnݨչwż ~kkK BX,~_`nrbY2i`Ie@ղޔi kvvv /VWW`@[!!nՔ나ommiVр,=#ڼC ʼnCO,ɓ'OD" GǏb1jCipz=쨔>*˲IM,eM?Y׃z c+sY!x YpxCԩSݵWU鵤Y)­[6MSCCsj7uAtf4p8|iw'I)Be+NJku8{TRӧx#)IMhYlVX__7xo8t@ ~;; ,e< nmlB~Ȇؾ='HdHXNr}{ƍDwHB#xQt?-Pu]@JvH[iz6y  h`ggBh4f8IgΜA*B\|n$%Ev7%=cknjĕ{9| tfNdc/g2[n֏< sss}h4~ * h4 }PwD G1liiiIϦb1(A6@Ӵ>7zvu]D @TB<X)G<G$(( #/Izs+MXf>vvvEy:RQ,z|V,;\*^@rr !V 1nG#J$G(s$!H$'# lNu$Ɍiݖe|B;cHiF3`p('0s&p< 2K_B Ii0 R d@ೝ6b1h>}_i|S4\~^xx $nkM:\.ہT lPg677_z.2&=K>r-rkHli}{~e!Nhٲ,lmmaaa(bgg`fu7j l ˲nv}) cW 4aEQvn Cc2o&w%;^"\B$}E4#F,o\92{X2{iѺnkaa!wcccP}>Z($K$,//c9}VH$270"jvIbh@Q>ǯ9{ދ?a-o(xg :"H(3l.loo_:qĕ!é1{g-r-^9a?@ ?eSlEXD..]I!FlB ^=voD"%?8|I;Jat钽X]L,2П<`,̲,4mYc|?YUUvͺ9-OB,xw:h%,P|HlBj`Vs?Et9LY0z V Vo@ZQ9vH6l%n[n}Z޸q`YhZd2" X `zA{HR`61h$W=V٠)h0Lbjj]$dB9>bnk"~YnR(BUߓ7l¡ib;d,uP:XWb uBz+Q tqs@ugϞ=qu=LÉư{˗O9sm\ … HRX\\zy~fqqxٌܱv=Acܹsښ7Xau@#`In,gh a=*0 -DXBa3JMx?:f&Ο?oU9$b}xEݏXXXXps|t1p[n[nJdnCSvMrp5vn+%X|ao}+"^|EzDݶ ‹z}4M4Ml&U%B mt:q$ 倰ôV (Vuc;:Pk\t2AYq K:r-r! 2A DXDX޺uO}OMLL4C` lUUTU?˭XsVA uib; j(vj[zux uxŧF>v"!d/ȲM>(%ITUr-r$ }] V^[ևE)ܼ[n`ÝreqckkkgLx0|>^6#*kJd=jPհZ@vjHuZv[V% ciP(B!B!Ȳbh4PDZlV!@UUh%x<B!h),//kwwlw{8u>pNr-r5 Npx .vB\ t:} + #h5Mx<@ ƗžR~J}d2v Qn#aw FNv/ %i_fü Op^X7Mh+N#`DLCzpMx^>8;;SpXAh %ZVoIdhhhh zRvkٮ?G݌v χ qB!q,//qqe](|}}x<k=L]%B5EX,֗ͱGE`*7nx4q{dYC !^P(TUt혷# D"`}ccc0 lﵦiBe֕f][nep /7JŌF}z hQ(lp{{a *02bBPX/ xvttSC%PZ jTJ7 ffd2l6bP(t(T*&NK~-j@p=Ye\ŒT*|p8mN\4mafǰ~o߾]todf8pQUU?  6|@y<hf~V#ijZw}}ZVEu3]XY]HhZBCed2oWg|>__O0WUlooΜ9`0h|>K$w<,Qg=F="eҵ  [zO W4KYn9ZYerp8Ç#hFTUEXbJ@ 0pOZ-$Ix<mܮ\[n[?@L"΃],,,i*w@KqEQP(S+|{^aA~x1Kd$I8 ]ח9`4M~h7M6`k6TUU* O+o BSӭVWa.M,[,G Ðt]H;ΖP(M" H+DsҥK|@ؿ"GBA5owB0bc\.wt:u+8#, Kף|04Mh4:|<#V8|0^z%{qvDq7:^,O1^ zb8$I<(~zbb"A"P9s2F\. YK@_ y^iq||>; hRe/Ql5:~@w7e}/]|[nk@@WZe,KRZ po,(cǎ;;;o *~A98v܊ U#s\NDQ;h966/FdTXzRw[eZz}Zi;;;_ }]LLLur@$0fffDϓ29  vww/12a\5 TVrD{VVVV 0M@4M:l6-T*x.//~U.+}fa+Y l!],l$ITU}(&o)Ms~t2666SN=~+fǖ/R7aݘd2`0h]|>ȲlgPjP(D1`&k68tc&JzfJr>r-r˭WYîZXP px-0|"n[:i"X.|( 7VV+%ɻ}>_#cAZuSV*Qv2c4\WD4{{or!p̬:[,{E z΅!o浣GGUUBnf4M+ m ɓ*akkJX,/Jn1(0n֟y1Ɲ/ݲnP6199x<UU?ZZ+ 5 Z \ΘynmJRBQߟm\mj5٩9M״r|||:YP(NLL Mxst<^/m tOlgT*!H@e[BVׅ\.w\.W%{oZm[n[n5 NNtӥLpò,҉ö ^w fq!kdd3W^]ܿn+Bk#2B<;;;}֭"r{ɟ'n FX̞g<,aQcii/kCZ6koطoߛc ;>o.H^[[[/Bx3pҁ>DI䥥/%L&sod;~؝RSNjZbggW^}1 ( bFXXX6BoXR3:;|^KKK;@cWBAtS׮]FPő7>1x6#MVVV0;; u?dY 6A# uEivnt,4 j&33QƠ1İ\r-r5& ȷ0?a滝ҷ ѣ?].3xyB~$d`rL&NmIF|>_\.TU+Hwb~px% f]$SiPE^:< LgwvyAOjz鼾Z}-0L&X,񉝝IEQ,EQ$z]rp͈^CS͉! V4M+Nggg<11a*R`ccCp™ӧO/q05%NDG<t:}<9Bmnn"HYw).%|e~~~^m6EҜȐ$ID"p8,)4SE`GHAbhXt Sl.klVH|~A{9]4>t[n[nV$Nc{{ F`x+rz"PH') ,|l6hX >fړzz4M0޽WzB`͵3iȁ6}FEQ;`ǁJӿ-Zef?2jLD(躾Á[W aѸX䁷9x<3~G>U8rܙkw1js ]v"aǚ`{=pu>~a  h4}css:{sΝ[Gs%W,`fO,E"%WHĢ{2 !Ng=ǚFD"K/{g:Ò>V eattPm @$T*e_@Z&5vM~?o ىϵ˗/_ȝS%n[n(4jy(3o*z)CQֲc>2RbȲpi_֚9 SK}r|% .F>]vqiYZ#. #f\DOf_-w(z=`}lƃ%`,a.^&Gԡ!kU>^ [[[g#+n1v<vxxp511!crro~Q(/uٳΝ;;' 5qOaubbFFF}>`rrW\ PU`FEQmeaqqrXmO> >ãt|vvv099i[6~XeWP(PN $Ixdkr|LLLMoz"N:eذΝ;sV{ l3 $s痰ɤR%I$/س6?椣a BmjAh}L kϳMiŢMMZdY6B;Kn4 C[n[nZUU!x>.btaa;efd2d2icXSϞHz;W a dHaQnLj6YVvmY’.EQH$ {1y57z" IǃX,CҥKh6v׆^*^/+ ðt]dE<av[T*zvX XdHOlPt`,--BXK`Fk,Z!M7?99Fy>}z|ʕ+ƹsџzmp> QIUUʯ >.~cݣ$2+#wuU-lYjXcHf9ˬsYdz3,0100323 ؇-ɒ-KjUGTQY-`"#nf}pw 8w#8zOvxѹ,eY.fc4ԩcquxR<][[[/-//W91J@" + +=a~񳄐ax;4>$NN]v@Xdy=vt:r(%$i;Mm.b1/u0 ~^;¿ށebvvvb}}q8[,k Z7f30} ԧ>DX,^βrIٓP(osLe< h~4UUX L۠ +++K)ҾUCq${rzzfC9{ィj8{, ` pG8^._9<:6>D"d2(Tfc*r|#xQT| `ޙl xm`ffB({O>:2",1 ):u R 82?F\.UE^P{oy[ggg?$bnn|<677O<90@(.>L2H@T*%;9UUH)E,s9ew.677.zނ胱,Ȝ 뺟eӥRM&>aS6css ӡ7-7 e83=Ǒ|zA#$"aVXaM@&''}9==(oHDEgzm\zj7L~̌L&>dYn݌ +ۏ$o0bL&1ь@iưxX,F{o V|ݨSDS,E~iO([[xއ'N@$VVV/|v DãfYr<;gkC9q `ۅa4Ε+WCިfAQ0# +?$ckk SSS z 0'ěUUm{H$,R95H6FzUUQ(2۱`,HB6#"3D-`wxkrgVP|πW.D5 d:>L&+a%D,LV:Aem{H;NeZ ?P''x~˨jmW\AAѻ(8y$$Iµkl6cEXr#;1Ji;xi,MZ^L48tЇiE~(=܃+ >2 <㋋mu˴nQ}ȑw%I|`'I|d#MZ֊8H$'$DƍXZZyL&3rah@j5څ5&ra#%^Ƒ IDAT7pCnNC= +^MӠ:LJx"@1If}82EX =8E%KE$Iur9/Jl6_h4OZ`Tw2=""Ire0NN,..gu1>>˲}q:ru>;σ^NF@K{L&ܦo0Pn---,"/f27u'8 @uA ]3@̆'!cLJ otIhw`uEqsw+(X]]?Almmٳ0MsHp^Vq5xl6I4`9 v!۶QJ Y-˲Y,Kz8N,edA8v]^\.7͎Pd>/rllQ!f|Y9r,Z]z=J%BH$L&u166擔ޅ׎ )޵k׾| +vmd26hklؘ?@R^A(Ţ("+" ϣVa`wt:痖7FYh$#/@,rT*x<eAdpĉ̷!sd2!&6nK"t]`n_޾:vcmmdllD"eY&hީ)l~~z/ HCp}'<9EJEHym*ؽ v8qQ3򱶶&8xeQ#|<eyr@$ .o_֐>#yr9_d2iZ]ݫxApHhX4xe~ ,˰,  /:r~D2 ǁc$NMӄ'._\p烑[# +_dss+l6qub1$} qn'xx z3Гؘ 4Mc䇦R))LޝH$ǵZj.f.DE`\'#$x_ bQA#۩j>nN3qwŢbZo:<0G}TglFc~ǏܪS9R3OǙʕ+yٳg_T*̾(ByZ$IB> ^u zkو#;w<`Hd2izGpkpwF]ZZZ9Q,eFV;H$jHC](F>>.,hFP.|SZ؟x# +T &vwwQ,V% 8msu177`/1tPհ1L&&Ljz}ckk3RY,ˎmvW8+G)!;-Nx4QUG$q>cLO t`68G9DpBRԛeYΉ`quAT*(?{?je0Bk3`loo?kN_|СGjjJYɓ8{>R˃QBo>ڲ,t]=zi EDMq 9?Ğ?`bmm R{~qqq{~~"G" NXlQ]A zX~_O;v~pnnsss u魬x=zEQE"xHD{u2Nnnll855u(TE$۶m"I{STZUUOQvy4 RiWpD*2/X^ #!d2yfccd2FL@M#mXWZx8ԩS=vؘFpFN>7nH>Fpuh4vOFx0 `D)( #?{<~.ة`_#Q<ƨ_/Rj 4u1D"o?tr97$AUUAQҍ7~ad7qwn_m*oj0"ȯ]j5ի^z57iQI^VXaVX? ܏" z<ȉbj,k)= t2`ΎeaaZ vmIX.6771>>z'eYˍ:Qu]۶1 FxﱝkqRB,13=\vwwa=qQy#$"$l-Fdf_̒W$w.T j(,avwwt( ><_ēv'''),%[ 0??]Di_@>*lee=d[" $ 2\E"Pq2 .3̾nǭ8}monn"d*APβ,"H !"g ;Ƌ/vd3d29v{Wo`xQ$=݂.y!+ + (`Y j7,N34r@AeY$ 4MDQ#͢^͊HRhۨT*4 `Cx~]|j'<,rZ4hQaR7MBU!r}nQǨ pu,,,]z"[y>F|.cǎ B-WGeP;=zjJR)<am;ٳg__Nrwizzz>JH$2`$O!h4>fĚr9DQ lnn#A:j>8'|'c~iلyu![¢P(C8rP.ilI#"X T V v'SmVA$q__*\=yJ:G"!9j6x'nw<$%`A?__}݇D"^/˲a,錴桇;N\zvzި@=ض̛ ]l6jPՌ 5;efffD"ORY3¥z}-N{llM&<72+]S]QV~zmeem 'OhPpSlOUl,1\]]5VWWE;{s\$ǢX,池ˠ3yzXZZǴx1¾gYD"QL$si5ƍC&R<(MTUٿb=@J~}R.\xڵk›((u0#$aVXa& qh4WWe6eY~Ɔarvu72R&yyzz:5??XLE1^0 w{{[]]}:ϟ9sH* ,,H`bbB;;;u~h4+"DR `~~~(:\.]ױn pIl'ϣmAm$~*"NB𖷼[[[x"%`cW~߿e2 MbM>V񟙟d2r4uX׀^z+H(B%g<xO<}Y"|#?j>Gصcvӣ $'J/AO##VGH< + *a G0~xRs9@"s!Fl45$2^x+Ν{maa!ywD.LR 0Vw62̐%,cעxR}ob10 =T*xWJpwX,}{t]˗Z6DBؿ~T \\&!'*>#p[]4@_Wq*dwwbXu yU%m6/HwbuAt]ip+ʅ\.w*)I55{v:ܸqQfJ( &''|gL&nG^TT)7~2#b܃,aVg쳁}.vmwϲ,wKt]NϾ1`D' u4q? + z i$IL挦iQ~p!py77n{gr~~b1L& oˈHF6<,&LĵkאJރ%Rj5!G0`<9;ysbwTF#.T fs_E$z=FFDs`'Aoj&=.\x6g}udY~)LGQ/8Z?z7ގvH$)"y?l}mnn>=_TN q4</\.nJr4͆VU~3rimANѱU'~AO|\ 2"I%ѩy$U$ؚ mVGŊq~OyȴftdECe(r#G -//r`ɉdtHsY"("@"^@:ޜ>"'& /6F("rdY:qDX,P( N0 Zku2~i,˂PUR ReX5D:4M%bww裏~uG> |8!+ +X%⋯\n!e{mCE?ٚD^Uq04 ;< g7*^N^=1qF'Zο]X. FD5 mxG fܬ? 04Mg=BAC ߭w> 0AvW_4鴟:PuuZ-?xgJFf>,[O)g#W[[[ݯ|+Yz$7"ݯ(&aii L:A( MR  K0)\pŋWyL&=f$Iw9.E˲)D"쳏WZGPl7t[ծV/KGʕq;<$Aணk\UU^A~aaa៵Z-v^@l[(++xDZhf?Qs/ ']pۂ(F~q5DLAɨ7НнA!9v+ѽ7OZ"UU#c4N#Jakkrsl6:~n| %#S+<Μ9s8 ~É[ Vz"(pK7Y9((bRk5 + OD"H$h6hp] -uWxoT!r44t<4Md1[V,OATBE$ARS7mBIwns)and2P]uq9y+dlll6KU \Z_~X^^edw vp U*Bvt:UUL&l1dj=@D 鱵u.σeX5dzk?{4͡I<%]i\^T*i'?ɞ4Nd([;ls$¿PM95fi? mXaVXaNzNt]&Nn0Kd28i$N9Nh4>W/ @9ŃU2xje2f]$$'N:6hBv+nH$fZ v-"rjj^;ƒis˓ɠ/vM4ps}>Et#Ș$Ib^@@= [ <##A.QNv63 &4MqvU_4_̤nNͺdfgg}B˿=k88F3 TePyJ#ȞC3A%Wygb3'R }`3 +3^XxG,X,H-TUt|ffS>w=\YQ*`E>T*qT*s=?WZ]]]]mfȐ#}"@%R}X5{WS<2$ R 4qP{rXjv Z"^>ߤ~RԷgW +gd!Z.S6z|7_^ HӰ, lgTvk0.`x 8O`vAaJ)<X<a"k^h4Ffqљ+WH|IqP?ܣNif"(7EcT*Ȳ}t:+++d[; JFB*w[⏑X h]Cip2QJqPSבNxݱZַph`wA'@ ( ].)O}X%; w@mlre/HcjxuNHۍڶ z c=@X^^f((Q#o4MCDXu[~ x56r `D^{noD"rp BhmYVק%I.>~Z"ǯFH6HRG btA)A4 ^d(RUUi,hb1H$4L#G2Jvu]ٳg_~'l5wrρ:⠠RhwڈUDq^OٸL-MQ yԲ,\.G-BG27|銎9Wf2d2}Έ+ t=H4nܸ}ܹob_0xS&_A'@i 2Pg[7_GJ!C TʝLRõv|,5w? RHJ7C鞱ONEeE?Hcp@![=w# + +ﺤ\.'Kl{<< vndۙ;a;ŠĶmZbrz3"sBp:fIO==zpСO 37(l&b!I,b{zСz2GxKƭ[{MGӴ%_eE0.2T2,K?}*|w@NgY u{F_AE7Io;>O݈;Oo5/v!zAex]4(}AMr `rg{u}]CR$QzaB<E!$у={D<"L|iW*8/jF͠~$ Dd"q" JP?T% D?{rbwOv@ buF [/[C4;gn-}aZ͟xجjsa'$ +LMMunW<+yu D BXlhWcaexMe;jNHD"uY= ^b"D<J7 ZBQ(<Rqkpz6 P rT|ݟ}'Yݾ7>w^@$=)sAkF` 0\$, ~D$@Am& IHXa=џV)pE{c7:ߍExkkʪŒ&7l =b=ӆ 4뙦ކ9 {4fl `,ٲEK,UIUKeV"~Gčw#$&'eU|/ƍ{O ~B;897UTPՠN0åRn7-,,8TJzײ,xrl`.?Ƒm۳DqRha\ߟ1yLLDcA2NqLOO~6T?{Mqu<*}`p< )(qS;,C@2D2 D1?.PxqI2Mgz>ϧ㒗'ֽc:_C!|5oep9)ˮ\; Yt,D H2 ӇPc} 2X&m}>M]9s r aU'bItQ6ǔ%N3@Bu,AzS9w IDATu``Bqxй+(2PPL^$R]w|cs14z-Qk 򠵲32֋2!_Dln퇒- VNQ?sa8zTӶmYfIrjyjW1[ϖY,oZObT.?G&^/R0r ^׏)cEʫH^dbqszz!)_v]\`yk6SSSW:E.玲W'MVC%Pc$$zJ> CaHv\~ibww2flJ2 ?? iXIYiE'UОSH𦿗-  hZFB!Rʋ/'xrrz=z@}R!oVŋmۊnyt1^:a2B  S RF =-JYq`5DdVG=~ڷo6JDvqVn4FɜHȼR/I>?nx`L _sW@W"bƇ|Oѩpʧ]@MbVsЯA^5<</3P|`4 |zoЍU+]KWR*aRJMO^QeM}T* eX,X,rXm~nwC9<o0kZP`bss3mDQ:$+e!6TnUL_ 4](nyE,{'@LUҮ:MTOAN?0RQ,y8VUJypwwC,\b!%f}X[[xq#}#4ͩg}!ZfByJpǏOuVׯ_--(WH`0 y7o6[T8f(2uZv ~?0$VպaNEq*ۀb447V\.YU&gBUyKgWWWo$c a[*J_2 .|?!)~%J%y_δQ.OA7ʀ 9 ?(l`g f ۲K,C5TsA\TCq((! #1XZrCP9v7E <bg|"41 2/^L}N:p%P`J%zO? ^T&[>;#+5 .|ߏ+j+&''߾`v˲ZxV;R(UQzf>M۶ZeYv״ru1 8(z]6-oLyww5 vK>OEdW1aM\~]q΢^P(@y<, n鎏}c)He`%nV*fJ@"!Feꇰm*J8===[*XPcWTpW Ng[[[;ʮoPO0Ν;wu]ϲ,\v mcvvrrA败\EP&gVKA+WpZ5DC2=-i8?VTFy:`q|'> bssklv z^=zէ w?H@0Q Z-JPq!R`h 099YPTA(࡯k& PtJ܉Ln&]+|4 \|A Dĕn\,\.K>ԵMLLѣX]]^Z]RT`ǩ`0ޞWKt] ǀQ? dfX^˴`0r4/aW,,r$ f"`|SRdN #Y0`(N '{͌*s0\V`"&az?76ohI@e/6G8-{yWW?}}wXŸ90/m5K@c9h 0 ◝KbJ.wX9X],A;<7}_EyT333<;;%z|t](cKR RZ/~#r7׷w8 ܪ-6E(RzxGR5Ga-&5^n*/ JT;lfG"OBcrY Ѫy 1U,goIQ:9 q!PKRR Exψ 9jR`&OCKa9UxW*47}'J4`.@?t}6Wpn"0ش~r]?}ǯ'~Scp|":Tgj9s JdB.bmXC 0Mkp=J~KǷ(CX?w}2Nğ韦_]TR+eTP,Q*Ptp{o&iWDRZ={9O3{aRvv3Vwy?,..~BJyT*uKj̒p8Du h۴rW4j#~!R 2&s}}Oz.Ij:]jU ϲ•)4 kwDy?J5cSILfMǏ<ϓɋ]b(ZrRd|lnnn˗RJ)-˒=^___` a: fɀ0@VnN|HSwR㇑BXX`.,`FGya$-aiB2Xr|1ȄM4 BEq- ]glzӯ Zזăk`AqnI( mlsi^[C a&8f$Q%Ɵ*@ۛ= SDh 4Ec #c]d0k?= t{ p#@pyp@=:XQ?Vƿ'2i;~d^s۟vpLu! n8p=j ҍk]{ҡ4 o:Wc6#.Crx|@VWN"",,,nC:QzqG׾5,--XUFx<v155Oy&&''S+ 3 b:ApVannj6}+bDR`55yX,h6^)?av$/011^ciiIeaYXӽD -//SR fSX]]\M?WM(=buukkkKc* $Dd@,QPO8n62nܸNz,;:a`ԏ!DXŵ1])#"gMpSSA!P,QPJ뺑ǥ)%{tAkkkfsK_cPY73̛tf D`$`1ʊA6:4l{A<@2 Goōz$=(2 hX? an0Du5{72/@qx=? k9P'f`)QjaRA`$,ghLA@^Pq#>ǾH<^7` 0 nNuJV]d)QL0m8P aCa 211n;4PW  ȼGjۿx_w]0 DZ7ʵ{8f"f˸;ӀPƥvx'S@f3gΤE*VuzFN'LQ*ҀszS^Ǖ+Wp}@,DZz'8;UQN I/EGT*XZZJjH^,˂T*amm-qD>>֟|A]M?wPoM^KT<mox.VWWdg[gVsfRC%pbgC@!d՝O@ W9  CMu{FB!,Jщ'$%!Znܸ1xG~nc@H0t? K⠅U^cTIsE͚`Ĕ  ݘ;IvG'B12+` a&ds>nK&5уd'Ox?v.}LdIz7d zX^^^[o_zm|MGT@SBElnn}²,,..b}}J(T(#Gd&T^K%[(k̛`[519r)MU|t8v]mIQTeRdN)p%Hb IDAT+Ryφ`޳ .:rYuER:fff2V$tR_{x…rllN>RSjby+'''3+յzE1:1 \Dž[;g բ\ BGp،ͤٶW(d\ǏAVŦi"n?/ch@P!j1=u?sWe8&8(ueUFȁYC $w1iڧ6WϾg8 ύFqdzgoY(BFќ8~Z)(N{wIo{^Jf! ÎHHP>s_HyA`A8~0 Ea#9Ҙ5\ )3F x_yssD5b`HJu.R"j̠ tA8v~W&\)DBVqyG@m0Ѿl|}"J9Y l efϱa}d<8r +O~%>y>,A8t:T )8y4!TvSz:><[{ pZ}ҼT*^bmm ;;;V8vؾJJ%t:b7n21111@4͔ef0??cǎ+ FQ4իA0==pB(lڎERF )*d[ اgf_){5̠ŋe\kzpɼJ+Q̌AƞaZ(00$ɥ0tYlXWH eZ6rtQn%3mAVVVVOK=ЫO '}I"ܷ;S-0$rL;ep>$,M3t@5e"@F`, |ئ7_+gBm5OdتU;$3?? o{ofL9O#Dfs2 b I犯Y'ؓNHlސL'O}h^LFĂ O=C]a^{=uׇg][$ w X*\#(`lobh|HPx z}t]<)뮻KAWjEcrr2G^*~,洳#?]Tuyrrp8YT*)08ۢ\upg5vvvr0jdVC9h!QѵȟqD^"Gyٳg_755uVTU uLSnoh~j3 .ڹ4~ m&1%ݰ9.3q&0K a #g4 b۶P(p$^g>s7cd?Y|7",1q:q čAІFe#3=FRNvUJZNd؅b,#`CXB-od8/!a@=p2D ī]ʙwVgka8< 4 Bd!4brٛa.d򝜖(mmYAHӤC(H qy@ DuWKc(s%c;\ikyH%yU0 ~*"Iׂ@,SQ)Pd8y5iS9 麛!r D:6J{ KT!(U2Ua0L9p*ْf4*2'͞Tr3_&~$@[Ik=02 ($Rn" vx@l#Gl6`pqRڕ˸tz^jئ:ьƕG}wyrvvZmT*E:4M\~kkkxGqmٳЇ>gy׮]c=~VDTXVSG":m!?q01Qt}̤Փ<ɻ)\"R*n[e' ۶ zfڵkH3Fq/ jX UG0 QVn~G]._vQ~9xqUG|T*z뭯j2E mt:;{]oMm2mwlF:2dd⏡lzPm}DBbBVzբg}/b$W`^}'{NXC S8T|O谗Ph?M(v$SeSc8xAŠ{ 8LoV˟˰˷@[u$p4p''2_~ٻ@7d9p+ lS̔ M q?C0p  ծ\]oFv,b*g@X6ô]pAV1,9.(Y9r]d?3$c@vnvߦƘ1 X9 `ܷw8 &8e䥀-e-GL92Si,,+055Id`"]%Ω~ `HPܓG*n F{|ӛ-CoÄ?1 VL؈EɹQrblGQYWR'ZRVJ5ioA/~WX)X:>6&&&2KKKh4X]]M=t^-3n~xΝYT* <(@!y\pZ wun}ݩV^,3U|cx&ƚ,zAp8O<ӧOcyy@fN4`I{@r =J6E42 ἷ,--^7`fJPx̶m\ P& c ?~:jUp灑)X[[ٳgSA>5(5Na#!s!G*[(SNU/ٵZ-Rj,,,GI8@;N(@wj{Ɨ= p"B8jq]nG$cJm @Z^/C[xNF"S0XKk+Nmd% i%M!=2Tr̐[KаBf_a80m]e`J 20]a2`DS_ v=Wp];^_fC. !!ejm Y9n ~a+>пpoLT+8 _d›QxPsCLwq7${9AR R|D[8+'Zp3zBƉ$TSUR4]/dTR0M(jA1 yd| =e@\;!#`U9Ӯ{$  ?iYn'#>j tZ9Ry}I%~8]JG=8Iz"#ȔTeI z6t077"˗qq4T}n^(1R,//G˿_\_911Q,Rª*0>oO+_J,.._*8NZt*XEN u*Txꩧpҥ4;3T*Mozq  L R0255vej5;v }{z:.'Uߓ[[[o,6>߸qW~ Ro5J^8YP0=c0(JBEoxzJJ)ʛoGgff^===V*xe_w܁~xs UͅVOz@zmmEfOSD,0l(n;p_vrOUq'xa8̏ *@@,.8 ,ɳ%cB{=Y@݀٘KGA\mmJRE~׿toQ|kן_=aC `" `$?t~Xv?45dƏPrdO灣!dș^4éŇ XtkB2ipG#[Ҳ@lM@#\ȭ6^}$}?7WD4 FC$XBcJ317lg/t* i== `3(>z@Me\b/J&_GYtjpاNT(,G e"WJ>;)9=_EJf4qM'< Z) Wu:NEבUՉ0 Qm듾ﻺj~衇|r{py|3GPRJGRn|_իWi`O4z=<#q5ϣu]!j!*qmPArAȑ#ٹuccS7TqZ뾳^Rnj) jez 7nȀp= `t#l^7NG@[njsǎZGj3ut]'8Л>7WGh@Ϳi^%Ծ'ڋG8}*XS $Ryk fx_W?qw9AHz3l9ߝFz k#D7kl"EXzh\E )ۻP-E)'CV/ nǀ <`XegS?Аdl:""D τdiͧo_-i~͛kkQ{4Klz(!h0'{f4q*>/CtWf2 ۾- I7.# *&9s ! :R4 07~}/J% AH{ob} L*-t+0We @e w ۈ:ۈ.F%R>i>״νo!O\`~!Ë{?}hU`[̍T&B{NX$~T@sd͗Q&310vQө\c7Tm+Gl$e ɪLȐ$I:[_U5T[+`_;0Q #ȩ~iS`H?Hb9N xi_Vرc1{wFnKKK?ӬE`|'O6#G^=#=PTU~X]]MG]J mݟ!/UɊ~60*%}ĉx[ނV~|3N+#zj~VF(BNi]z=.+\VE^{Z]~r\/y\( D먮˲,?z+VVV^5 Z a@vffnN;;;hZۃyw/CU>Ę ucǎSNJSѣGA n^'qTԔYThY4 h6]ݢl~?Ea fuv^^csqyg0 @P7J+ҕ0H0tMx*v6 R0BtVїɆUzDШ)!coIj2g!N( vOUcRwFn\Fu5Ya:4n{`0caÛ8ALB1jf~sW#fnʝsS@؍.2p] 6.b*THSoe=NYՊp,a>G_&Q 2(FAH "R%" (i`  &,IMA֎ߺUH9T70cſҢH{ -~MM{RR@zz(_lFgy?d`=Dh xgg0l?TpF \cZF~5O> Ψ[yȨG;D f ̴ZCBwVAOfHbeX*"ٲ2^BT2<9xø[>2?g" fwvv(Dc QmJ'||8AJ) :ͩl"NT^Q!vvvt%+󰳳qƾ_v5屡*.A`{{W\c=<zիp-\.T5i\5{+3bJj`zjRRT@Tt8'O*uRT*X,T**\;v zzj ~/eafff5xuLOO}jv:NZF4_ЩTuͦ`~-gΜ92==-jʇ1T}LJURxV5)v3P/O+sOXƩJֳEEx3Cn&;6_*uma]Bo pgړ&j!ks)J$~<9J1$NrFa/իAn iZ*r4 ضyzYtp!amm fJEIhT*^"P2 t: `]Jo:r#&2qdR= *Wqr0}Ӄ -jvK7 <Þ;]{`I@DHT"-)vY%ʼn]Dme'.+dKA;0l=={ݗ}o~s"#cNUOrﳴVP;JIWS'PNGobʟ! CNS$ L ~:'ҧ=]K:r"P]xA @qg~҆j1s! Ź(!Fo2fMQa-h\b n E)0b{lXxt*Ft1餉rApjVE`T`,HF!a8D7$& Vuc ]YUݷntjˏy9&H@tش-J^vGJVG 06 I0"DAHET?>u'?Һ+QC@׻jTȆ1BSzXy,z)waqKs|"dǴl3FVdko@3ͯ:}R40ڗ"yph l(y\tǩf0eAXaj F)L8BGM>QXߖA|<U^"s>F.[iXi$1=$|#ʜw0P+ρ`x,<VWsG6gTt2fi{c"ݾG&`JKYV>ƕo@F~Ԍ_.xk[!?@̏ө0 )'Ǟ'oeAU sx?zb?{׼Ggj$lm`hO--6/ٌvEa?AԊ)MlX y B{yL-dcN B[x"!W9D~ XA.d w_Q.8[Dj5D xzk@a838d)ox?V#F1!&k6.w7 PQ ?JEzp}hC=.fZip @&y8`NnrE4MۻIu3TvaY".X71==zJVt=\l6 .|}eee?'۷TTRT)]R~//<<6VWWDŴq'Б`>}/_FR{#y'?Oc߾}xކ'xٳh4}6h߾}߹F㻻Z*kcmWr9y;Ir5a~O} f9`6*Jf4"%]=>dVaHq.sːe֩w004]͢$GQw (a"$\2*CCI)E$s""F5fVgڵOTQD+[sWRQOf.eΰ9qxk]M=bz FC a I&6N " ]8R\{FD#h߄p܊]J+\}XxH(c0'QH=RE=Ӕ=#2) TO|Y3[Fu8 )X#=ʱid=0Q{D2Yž[/Y,M0 (m28}(3le=)Q.T۸pЊOM)='0AG,C|/Jz`,ogF h~Qk- [03{F+W[+O0HX٩q0KD~{7@ıRF;2h_D DQ!e_ۙI^x @3 7Rp Dȇoæ+0Yx SG.!-p͗E9{g &F]z.|D TRiXTΰ.'x??7oӟt-D:$'%a}o xtJz!")Lz1;k+vOACA@.|Ǒ#Gpض fN>EQAbcc0s޷@V#"ta5y'a6RJt]|sùs2u {m.1 $Տ ZAFõkx1 >{9loo'F|"Z ϡ^T*e>7vp;~j5soN Cؘޏ.IT#1`3`AAЇig[0"a ]'%,jlDaW"hMN+X²K|+kgv8f8o`dc5!7A_eBs *sFOAk] `2_Q!=u7ܩx~kc?ˬS [ebؿK@\IiD$#2{ymƀHBJ?9ӍHp3@+ػ:`m vWF&"}~ubĻ@{UV w;CFg}905Ø2輆y G@$Ŵ%\JKKK`flmmhL #"evuaIQx},// ?ttv(zvmmB;u0 3*Huʕ)MUTR=&ߟ,EϺqvww133-E"k!sxÇVBX6\~=99t?:RNf\t\^|>,6+uڙ^/ee]\v /p)<ØױWnOLW`qt]+'$*WB-k7T@\A&a2G 4 E;^(L4Y/IM>ZW;$ٚ-*|~O['FQ7xJhx [GaMiuLTNzz1 "D{] :YApiD ^&$ f)):gGͫKM=dwr8 X#EsdmÙ :_ [4(d(hkoaнg@БDg9J&nȨ@opgA.0Co-^875`-?.V_#,V`aI$!2;v6л;~Jp$8#< L.|OZgTƵwb 2oƧ>)&v?>O]zWjAr56'$I #>y"+F>5*sCu;N/Eg=Jjt~=t{@GF@W={ٳg-,,|\.'N9;=|2.]ׯ멧[+^wG]u`V.SzXN{b\Ma֭[X__O)Lsssx;ށa_N#zKX[[L?&M5tjRy07I:}YLMMazzz S+^id! SK%|g`ZrF9l\Cc"(8 @Lo"Xǁo`b޺C+'n{$%w1 #ҹ*ݡeF2~ tҙK#- ־;opCV pb` @9b@*Ӏ3ʓC8Jʚ;W&Qmx01dR t౗|$! 7d"q ih:"mXɠ t iNR݅#R4+ױs]e UQFي?52G&G8񄵫pKim堺-h\8ôa~BX/`;@~]z/ȀQ,CfU<ƙ h&z'5@(n$rӻ 9Ꟑn#qx`y+av/r:i8U鵟aFr=)`*ٕOBhlmaqj98!K ٹ'4F   a~ *L6,CH>a/n6b^:M䣭G{^].iLgtwwb' J^| -n}/~:~9rz׻PT`'|[[[i -Z4OU41:FuʶmLOO#XBll[Z5}ƍ6 }\'&]`lnnիW{VYsssV*wbz׻P.o}+" ^<{|c=z=+M' Ͱ~d 0wRSx۷oZSÇV *42+lai:7kn''s. =WMk!NȆU ;p43Y P. Sp ux©-GB@$T#i;qNtwi"F~:8ѩ×mU9kwf&.{uB,, bŨ*Q@93`诙$2g/#gl35p%kn8$Z7)62\ IdhwHE{tWg&8,eeTPD?"ko"c zL 5aN:iN|6͍Fq"iJ6gFIV ,u)dSQV|cN`fDi0*=Ř(̟sogۃNg}fmfVCm&mw8l m$ׂv^hpS;U/?=߼Y94q,04 ,JpxIzaC. cn8"Q 6.v0IcrULنއ1 2O:`e`9j*@Upp* 2JHqqɳE{\Aj4ڹIwZ]g weeeСCC㰢.ׁ1&yo~D4a6wR /~WF(WqPl6jVvS}3333R mJW"{j6˗/^p"&"i+'NxѣGOj1 ;Q À8C==pϟ˗өJ>D*ԉmC]檸z>nwYYOzl A QߏP6sHC"^FkJ"(o"0" â~0BGr3"S4mkm]$a@;HM'L*LZɤ'%%5vcQ;E9N+$`c9Ӹ%FS1 o]$,@  YJ' "od? #C^)hP! ⠧&Ud`iChVЏo&QkNTN(0)xX2d`%`,膉#p0 Ȁ{ZT`)D$N2g.E]KɆY:U, +X$UTS|hI52Rb8wzπa@d9y?N T7[O~t L .# !Umxʇg3cYsX/ѯAG2e~2&U sS7;U%aE`"K2 yqeQعvo,  gXT8-9I2m^ IDATp2dI|} v[oO>%4h\. " kwHB qtiHyM zaoj4lMyܰ4M,b]< eؔ~b䷮MF~:aq]dex~T*=lY;Γr"w80 t]\~i^cT*xߟReo|V+!wJ(ovBjԶI/X\\L>Y[[[3' 8y<0T)"K2^/>|xRt:i3:Զz= ( 3c~~[[[ 灙U=W*=O:5SVv]W !Rwy{{כ^S+˲jKKK}6ommX,²,bjj*#B}Gí[.=f'F?\$H07JY9~e,?i*JJ_\Nu baX1$D%1 }Wl ! "4M_HA pZI(&.\ =D녞k8ւ.RL8)(5G)Z` |G Z!S&ǃs3ɄH-SԲs$)Gq-eQ ,13-إ{GH omێ;b͌QG*U~ )"j`e$ 2RZ0 K;ƜI1)(0k2b6ȃ'%.at.* 0j`Ή)8X_9 ~J#*uTDv0͚!$a†={eH aW3~}y"yv#H 15`0S͙6{Fs[w=UJ ?"4NL;*0ߥg[?t9nOsWYti#5.~kE4ge@G,eBJ`2v{" &qNy0Uٰr}kDͬ ҂QTP; 1PUdоFx,o\"Ean`YG.tXF8,# :7r6ow].o@H[[[aY/ +U(_^phwwmeYx ) ᩧ88x {1|CpU4 \x1 Sq S*^A}eض6N~U!rSŢ(AM{s> [R*5qZ4*y^{Ln&籶:y) qL۶*,CVjx{{FE;z:N:YfZBy7mlllX,Ӛ;Y*#yP/R h6NC'qTC.vwwaYV_fc@kkW7go֛rn& L,%—CUuJ!ھo^UF4P합0lMGmL!1` !&첰+pwU)_#b4<ʕi=5JVSzXԬ@ǻX;g2 kW ~c |o8CcDU ؊} ;cT0&'8afqQ."Á`F<2& 3Nҿ {{kUA4XDmaVL>X mhBԄ`0|T* y̢Q9a \9'8(gAg2K?o4tUR]jr:QM 1e涳MZtݖ[N]_O?t >*$֩.v^di˦iɓKI;(pe\za4}ȑ#xQi8tj^^@)U*QUƣ((&6z!R&dfpLK Xzp]7EQP(<]RXK}LOOc8ª؀z=̬lhÇSEѡ0 iT[qt:W?Pס]۷o#"߿Z--u~R)ꥀ2}Qt]yJSn7ICQ *L.]YSWO"&bBH‚;H@ áׄԪcmwwpƷRkU4B5izJfwD&y Ok R4r U}7"oo'ΓD?hGp eZp c-,Lц",h21Bcgҩz:w v/hDd}x%>NL7aqlpdFw^p w!> <Oji>& B|>C6,,PJa: $]ww]ƥ1Q%j"9DkQ!β#~7wK@,"_ f%Jd \̌6E~dA2"f5') NLT:M2g.( MS"`6`ֳ0|qc|EJ AӍإZ|ل ~?D⿱ ?aoų,{i^uO4ijDb:i ;}yi%") ޭk`:揽l 1swh1s`eӚ1ܹR@Z># BQ@#&5w.ߓ@K/]R+9#SiáH8_~F_qӧOuqjzzz.)Z ^ !yX]]j&ibffy{pYe]"ض4e\}򡃐#G EZJ#8Rn:m)رcX׬Q: P+W !ߏD1& 7 cZ']assavʊ^5 pMT*8p "kɉ?y,)8n?|Y,1;;jB~STJ9aMǾ\.Yg}a$/>g#K 7^Nu#wHDʚr'9wU5e}Dw*%Q)~4o$UF4F@,˵˄LI"Bf#5Ogz ==FޞӦdXNz"Ƈ!'~O$,aS 6-H! KѪԧQ  80$, 2]nS~[0 X,xX!M/C>?6BԱi>AT4.Ѹj.H#af.LN20- {PV&d2]1*@Mf:9M 9@\z(>.wE ~gΜ(X< eQ_v3=> b!ӧO_XX8ŤU4)177Bg3k~1 N'!:]Hun:trNzƜT1R.]Ju=l˗1 $5? C󼴘ÇQ(2ӂrv3gGI%h&Wr^y036"n߾k׮@¶m<L[n _B :U-|Mבh4˿܄xgw[m>?(j(gQLCNZ IM, `oDA\TpeEmD°dŰQ}<.VȈÙ=<#a8epoRtx DzIo\+*[tmNy2kwIw!4{I0]Byn^ E{Ȯ,\•o> (:?8>l,_Gڇ5;m$]rwEۍR0[ F!o\GHL[ fA^z%NW(DZ=655u:.SCX8X[[?yd<#͡P(`ss3 9o&g>ש@sssT*$|@"z>SZ?^V+딦I | ilB|0ѧ/2˖v&heY8p@ dUW 7~yii /}Kvv8u,d9jba02 BeRȱhh[{+O2 3M#m;r'r'm;m۟F.vK9Zgy94;>`6^M-&f8Y>>[agEj W k<˕,׌g,I]fQA@f<61ΜGE$CPI&@a:r)r@3TԍZ NDu9mˠ{1Mˬa&8wpVG:q8((u&dy ϥs8vsԜ|P[`h'?C o_Ci(0r3V:U2"{=I&>rZ7`}@ , ۰˥4&:q$OaJ|rb:J/qQnʦ'sֆWZK-jN  Ā 1D |X^‚=!p$cM 61-TO_ D}ߌw' =-6JSB *`[Ѹ3ŶNqp ZSR;dH-\yRI>[%-JM2Z΀>zvvv033۶S-n8|pN @ĝ@?8<σ뺨T*hZy&vvvvyD')5i6xW1;;Z{~h8ڵk0M3uBw4P۔ϟ:>rQaqqqLpQ.]VP_8 -'ƓDY~W? M4ȶquq4ͰVn셳B(\şI%XG)4o>N{=@kʿA36L( @|ho\@CiY~>tQCWo~ ^[z}!/%;NZ(`=]B Uj3g̨T*V>I3ynF?z(BoNP{}N$Tp*fopA&"Xҟ2RW0ސJ>{ԶZ N>V 58}:~k݊' ˘j5HYY}(g a:ΒMhS7Dg2+ !P?n?p3z|1[Au1 mgEU.!d?{n&,f/{+prO4J +lkV׼ P焹I]ֳ<f]x IDAT4训 :r -0Я=h[8Uf o~ D/;z+HKN*@BĚ 4V_Bw)0) a@2\H34}?{$ aX)shH\5t^GW@d O Fi de|0o3 2`X[g)uTd:I.9RP80'/'Jfqv{RׄƧj^OE_Ȟ~4Fu k:Bto>]9Z}_/T5M6*KGAQ"x:䦒ٜ5@[3c9ĎǣHBUF&~V"P p`p2HH?Lۻx M&|ѣ |mGa{7Is`+ fNeYxUAkS@/&AVlmWJBnt9!& ㍽}u@hY_V۶N;n.-0nܸߺu뛇~^Jyݿ GZX:r{{R7o`doo;;;n͑n-D CSNvJ%e Ӥ(8* R0 SqtvQVQya!D3:+"41{]x0`60lsӁ1j3b}Ə̣VƜJ@ErI/b{v5-!D>0νa +Y# e"HCԞ 1{ svw9ǂůjۺШ,g@0>ȇ5wd;iBw531{ܾ+D"ri ^jKG~os4arḰ%za:G7gpa,+ݗ^]lMмhmy2l`5g k2-Hzu^&F^ :rSv@&wr!a$XSQJzH)X^&j& a UP)R~eñdP76upc[^ 4j9>4)kghLTR2w{kD,L=!2hϯO~Ifz7AkmPRZxF?9OQʽ# u7vV@ 0qS?k0H,4 +Q 92 eRܦ<ش!'AlX/&[1\$hHUA(ME(v)[i&E:(OX̀~ fiھU= G%͚dVQY:g 80wso+_5DlW@& Ъ cBG'WhE؃ zXU5 е[y9sǏjU ׭xwޓ-fJ]___O? 0P,bz333xWKwEE""8p C Wtr'=$0kQ I)Z,lq ":CM>Ժ3iu%x[F.W$@ྉHJ,Q%/ixv{,{F݋n5mY"%S$H) ؁Bk}o~Ē_DF@9y*Q̌wﻗeYlKY!P,DX+Du?t0e"n`¦PslB;ϢIп/ xf9LrӨ6q3̀=qρ B^3f6_䦦4~ 0H\}V2&o c$'0X8+]fTFn( q{̈́%U2kG_ ;R  [+l m X>CQZelq0`,]ZhQDKs\ Hv%~a=Dg`h^<<,qh\B+,ނt['XK W[+( 3o :&"6w! ;5{ݞĈs^K?]m*wu\l3[7Ah(,3ST zLH3c| >5o@W]]ya= &:E;+$(\L2"Q:/,fe2\"YYz9^Mz?pѠO  XB*(| #CPHl*L*Ro]TNiKjV 0tp r@%#Any^<{ kB0~`¼SQ;ƥc"ЭѬɧgEskkh$/2@$!@Ltt]=x/jm2.FUyNPDxTۗs{$D/o)*f @ tssB7o %:947OTA< a HAv[p\}2pABD2^YOd;a w ].4n={5^lU`wwt"ksQ[Iug+$CU0~"2 Эr9|u:I Yz+6ԕ틷0 *ehѵ´Q =Jb+/8gT&o@k+ad kwN/eU$aa6 rIrl-2Ѿ UVua~hӆ^I|+NDu(8F%=T9 =o"㒺mpZ2q4@baA#"\xikYm=5aV%8+ _tw.e5I&>zA/As_K$=fm;KDhTuzB#dSk)\Ma;0(l ҆y3;;{`bb=bu݈AqhsssϜ;w~yGx6*EhϜ9w'N, iZ0;;ZK0 +ȺBů[v]lllCلm)60 ƞ={/ǎpo]ױk.?>T1p=?VVVpexbHԬA=4;F ۫21$"*6778u]4MTUJUzU]122)%V77ͮ_òL*l@dk+C( H$bJҔDL%\$Mq(^Gkzm q<Ҙg-(v?OH!0JhPɰ3-D^,ȠJLiR%5}`W1j5#5y HwVn~( GI@@gu,%0w@lf V3lC]'Z뿒0݇tza D1ǐN=ѝh=~ ,q2 ]nSu.3p| ݄fai e=pansgMM$,׉ v'C7Kƽ >wSG I 0k'B ntXښ0x'9h$tk7 Ps[&t~CUR"*z؞vPr\fI*Qyp }FU&uM .½@PgBɕT!%@:Q|ej4 ޸`NlRF KwԨ @:KYsA څ0yh$SC.ci~ŧu`A3?+Ko3/H|vN Hr q1/ٳgn]5)p]6._xчKAX6nӧO_\XXS.ܹsE){@4 b#TU*Skְw^xח|,l:t(IZ9,--@\. `jhZvp]7Đ zw=ogϞE\N,CBDI2 [m;sa|Ͷ_?Pi%zL{dU),T]"CLjʔOS(_)Aqidk fu+' ';y9> czʻ<*ćI3wfH \^',"-0K$f݂UJ]`tk*Ӛ'] E)rgڋG~ϬQ} M 4Hҏ~40Y:,U6_~k-yTa֜_" *aARXew(tHHH4}׸'ya11!ԻM:UuIpr34~OcU~+P֯ i{$AwNXY/A'4@zV$j#-3Lŕ+c]{nˮy[_"q Y~Rd1B<=xOC=q[O**#|@k`+ Wrm羠bה/?~Ѱz9yBAj>DƟm{ҶmC s[cǾD)>ӅOCqLI)~0ٶ MmQngx =z43nr9%uZXX& y@!8uT2b6*n qxDMϲ'5!J!r>Ca'(`Kθ}lqBYQ{=AG52hPr~3>̡DVe0㑞P1Ʈ+ 4/=hM5Pck Pzخ0<ŠlݰRSO`xgǝUǮQ0O3ű)QȎ5)6eYFy/<:Dn }X/No/l!.sh< b ?r({ּl7|#s*Rөf"{2Boт ÃaA? .cc!% d;[XM,: iF=v@4/{[?aB]zuF?5@]_tv-;=Ǭ,&$"D/766įGRU lIxkkܳ>:4Q,m4dfݻ1??u--n\WbK[u6#;'=~0MBp]o=xo|Ri[Y@`6뮄Ξ=bc[.|奺ՐՎwKW:+^394 T牒{@1V@N=8&pPPRŸuCжȜPE6zF DJս`A)`Ezһ/Nc etj\$>GpT_M'֗m/DwCinkA~w;%Z90Q)})Xe-B2uOb蟆z(Ot)ka6Y< >F(k:8:IDI7ƮRUuyN#~|d9: t0sW96Mt/ƚnc"dBSGx|3(KO䃄~my IDAT鬞=xO8 ` 0H g(a໱_0FŪ1 V5A?'שe൶`T)7ܵ{NU}f2:F& h4-Yh.^r``j:f~.*ŢaRAtOò63 e3;y. ϝ W\oܱu?Gе"B3ahoblX=wu[a+ǾSȫ`BƎ^550A*Z61թEΉltT6eK /ʳr@?ywڶg]EH)1:: q`Y& 7$00pWS$??;&C=TರЗoQTh4pi4\w,%ٞT6z* }epIU|k{40󁋚yv7}9tD2 ~TzDWLtVD>߱E.>ܨoG࣐R+Tf _"pR4/]SoWyieDC llʮ녣0!]]{.Shc.kx7J-ԟggQLk,DE}8l Y ñmURKlHaxX_ $fy{g3Otf 8$ʡ z.aY} FkI+T/_)Q:uԈ4VmfYh#p+32XzCS#K rJ=5%Yz ~5r8k'+`[Clx,@P'0ؤ5s8oe oH&U{-p {\7d7^S|; H&sP*2m =P ,=!H xםR飺j:ʣbqurwR !077Vۗ:fAŋ!z6 3222WE+49<`qq`aa!ٶ,Կ3* VVVUv[+ǿKؒ@Fr;hêT P嬩}F*.Ia_W`p@O!w[6f'Qe"&0QQI2"\ߕ9vp =,1z%654bf@SmZʓ~&X֣1"qJz ,=4:x`tD4M0 dE/B-fy^{. 4KgD^01 \ / y2|2ұOc}0O ^pPA @B20f,֔sS1M yq8X}`>/aBҪTiu:ρ0Jw'܏Ġy| @D2rRd dAeSìJ^('K4=qUKI|l\z<|2pxqU.6X@TGԂm;(<F]g:qh뽻B"CЄ?Vnk` zvkbhoZdIe)TQBmF,|2du?Ri][t-0 e#\7dous:r^Wc``^w3VU)H61 Zud3,EQx- XFD`:un9)e!.U(DIŋ]__022}%&a`ǎxb*W0dEZXXXz'U bl n(x㍇FGG(6BӴh.Ռ)%Zrgy>,<4Z\M UnrrV+͆/Ʋ3Ebjvt ;R3-"'] (:.*HLsd_Yyjj$`lf]P"ދx5td %.nq v[Vۑe'eL* s]K5fΔa:F_@Y.^s `I2βyN7?Mkz]^渢 LB4AʈEe|Jfs_]? 3]PGR$oEy)8BW҇!kxv87a#>9~ DkE }EP^WmpoSeQgX;U>cyג>fP(Me5NUc D}(:4#l>Kn^D+8LD_C(T1F$kaQ T#`hh @ 4Ӏ&1v.YD# IW&S)̜ HQ` k. t•϶`/z^]Ǽɡ5.>銳bٙzW t:^z~u:VK-!ЫUA }73 yy$m yS*8"m+%xΝM]vRVm'`A ӧpª봴tA1%ajj Ν8Iq&z_z/K+Hϻ$uݔ婧z7uuMj:4MpT~8y$\Uc>JRb_\ږڛde lDIsM\{a$1%S0Q&ZN pжs;z$ ITQ5^tc'Ilj, /[$*sYyW9@D] Dɻ{x(M ܔ:Z+$tw­χ9Rd f wQ#ps" *Jr4ӄ'A, 78TS4z#ALA3||ƅQX݉~-1tVOXz`-iF{D]I[rX0wc$YtJ;q(iΩ'cmaV9 !6T_Hh܄t υ6 ){9筏'KK0}oV+ |~PGz+SzfT/|)؆,:(~ wBs*bLtrtJ+s^ m8ߩZ"(@ @4{c s09;ǹfx Mc aR0}T9*PLœÉLg<ܨMA?4jR%/r`vKj62VP^v&D^E7#p_'2u]RJ99 4 q11jG `ssvj۳D }CGy;w\.ۺh$RJw̒FxuuO<Ν;߿wR1,RCCCXXXH njH@ Sp=]; #R= Vҁcwɒ1 0Nm"s F$@t )bPX+5=bYRœ*.X=fcЌ0Qk-E,2 ^¼^P8*"TWE᜖ği#Zq!slf؏qy5 u#%0h;'܂7I&3 c &'ћ~$e -rD{OƑQzۥ7D~ {GI"I_1j>U33,hr-,rF 8U0ޜOY]8Hd phEu`T*h2V1屽h /l4Gy^΂;<} H_ġw}l3P=}峐CֽFuzguCKY?{? P`q>fו8%}KJeI3SJܸ'? &(D2l&0+$%,3 ] adYJ7,6^*w5`8gώϕIdJFȜuPtʠ=tKiVv|(3L9e}0z]QQt^A4]6N3lM$30M J(71 NDiuVZahP*&⨠M#5cmb`@o[Á,QA[~M|gofM$)[V¦nh4kqUW ~y9Ղ|߼ouR%~~^u2Q$o:tkPD$|F#8})I^v iYuɓO8pq;MӬj*PA }_?v۱\MJISݞ_Tdȸ%gU JYP H316nEv"3~"mK~'_3(;ӮASY}~4є"wgәԭٯ',M5;WWf, Fi\@4ZdIJהM^4'^yJ)dF6P# K#Ee9Ÿ)o)}6ҖzV:F^,i'^xԩz!ɼ#:d*!i H`÷n3XJCir~~Ri Nk VX%:QAY%кDﬠN 3:vB9i[0E"38 y" ݕSp+(TzÑ û_s@(g~o;ǝ'QuݮΆh@:NEvű}ЄJ,Nsճ(CvM6.DNͮt{IDX=w=$t !(?IB%4W_B7A8r3qC:/d{?4ZFV9 qESwL1@^x|YJ8$.?}80$ n-<4sQRrtȁ!|p !SHkAa]hp]kk2[bQlk*1P00=MTBƶCJ7?!0Lj:<=tʹ5Qek >l*!|C_IP~8< \bj[g>Z"(/GJHd XRQ̯qq=aTW+E$]NE g.LR2]QH  3趖6!pσe97|RA,#FC7(_bBʬA/yt;`Nj53Ǭ?H ss؍;җ`3, g2*ؒYꨀ dLB)z CVI/x[$p8)DOi<*H`lp|gO+|`YE3GBD.`P(BQσ!0sR4+9NۼZKC$LI慧0vBӭ@m=R'Q(Ӯ^腊"I|N2R0#Р$rqOAv&R}u( rͽzQGkn8_bOtԁq]?5n ՈěABF*֗$Qu# i;nw#hnLR-(`,sQsЈ; [fMBΡtRz Dat'U[_4F NZZu2C;Sߚd>־1&F5.x:? 4~+v v-^'3'eKN?;D1t/< #[j1R.VPq3 X< d!HNJ3|= s>W+@ pl,-a)ts X O"R#4!H{/m1> !aobÁp@S9 Z{Ε=8P}E}y,ISTg@H@ٔW r$RQn:e ٠F!ePƉ3HS]wHS#sY>Ϲٱcplp]VO>V30_o6 f ._6 [5 nYtkCU!j?8U/Ez4>sD03$HH0]8vY0t2ZXJ,=yc`^_+TS(cl&8s`Ww!M˶E{0n~\ 0ܽOEo_YvÀ r655"0^TIRpt*S!XDzN_o!m,A,Ay^﷗Vo 1zG>!zb8B~L Pwk5p!C u4Uq&cր ̀94 <)F 0dbeHff;L IDAT8%֟8Xz\3!4::Eg!u\Qd(c2fM ǣ=*2X룷 -d 1<{'DϹWW U,+7| ~s RxB췑fMh&7{psO?.bq<Ao` aAͳGҋf{du.đ^ae n.'s2" )ݍ{uG 8CJE.940X m "˜(IfoM?fcdmx־Li\L=<`|tOUeBʑ#Σ .ͬ8Z~o~vTM l+e^8DR5[WfOb)CG ^Lj{^frXuǏ]w4[,xqVsȑFiu02\,Swڣ:i]g B)X!hV 2*28S~R:e0HE:6"Ɂ>!iD ?R@BH3 c pp:.,& T'C)z'Ah>(kFeu;K}c7ح 0Xu+n#!JAJ8P DZ-6b:z0^2thXfiw! eBMNfx!o$a,̡D'4<0Jm, ~1>fPۍBm4,(c=Q*#qAS)q1aFКnABK;B@Bf V4'QS^1$$zI.`kD* Qqp>ۣ a0o|p6jN JO\;X$ڛpW0!p.IyR/͐0&h/走*#>;=) tûѿgȋ~ Dx3=?s9ݓˇ[ҎbGB{4}'`aAX-2):!,QTfXqdRB"4`3b 6k51h>kC߀B)Hי4H JWd  B3@ ,A)H3B3Z{o9['?Y9XLsSUalB":rOxȌ>M h;npen:{O˩C?];Y9#M B#Du<4"G% 0*uJ7'1<τ?g3 cU ZՕX /8SKd uBeeeF~W#UK7+ t-̛#eP 4`yY!! V7b^V O'4]t:ẳ)gJ/Y#k e<7.\<4M߮D -d4M:#9tҵٔ|L=c^$[Y@3J 2*ozԤM{NdPPr¾ۄ3 VBz.$8/JgE{@fzPP,^S$S c{9y}stZ Ebfȅ{;':H BټHu?~i?VW19j_=HՍ9..?8 #pg) 2qcFo["Ikyr%piN枴N}B}aB3ln{B/Q`h$t!F(bń^@iص(ӰIT!6KV.c߁0n .ړe~P aU`Ber/0z=,~g qQ {gcV,XbO۪ܲ.@e6]w f!׌.qE1a: >$ӠЕ`CF-kd AZa7~q 2++] 68 B ;ܤ39U; qFWuЫE23fwkV&+ }e@j_7~VMx.} x$p[D::uםػh6:TfK҄ D,:VhHB0! (%)h@>8h*ҞRMԨVLt Eh#Վa'=̀Q`hlj ]Y` A{ kuhep ;3``x|d>rHy5%3I_.~?G+Bľ A/v ޅ@@THwwl)A}l=ߖ .W m^e^dNu5 𓕲[H]W 2Wȋ{ BK`+w Ð1 9LK9H=TfjP8).- Vox%ij*3eF dS=n5~m^/H跆{MC85 %Ӓ!%oWR@6Z} 29 *6濉ez%X^nҭ f$5hߖ4p%ۅ=@]`x0 ̉^nFwl-5"*ĬUIh34s{Oy<:Ց[+5.j{XJ9Z[?˂W_ ay-A`wwT@{P54)z^vc$ tC {hB)\9sthAjtbdF~ۇx7FA{ &]gaq_=}Vz^ |};غ| ^ɐ pި94e>0<+go?*dA@\t Ll8[Q+0!؆aqaJ:3:O} r+e =7cm[tf#tO4,is%(lr3W幻] 1RX_'_}60 N Qm#I_ ^ĕ8A @{Ѐ|`4~;Io ]C4ס-0[zQ>ꗞ/DB@0!,,X1 sRot/'o~A LԛڜCX-?l9@ tYL#(_: I*;~u%-ކBx&GʨTgQ_ nkAІmtv^eWV7| t7îM(r8n20 fAB]ĦYFe0UpoKZIҸ< U!BBX(Vy$Wawh-h:7,}b̬̌T*Jh hbXdY`^{n۫=ed , Y4UI5*KY9w=gss{U%Y{o}Vs}%W&pWp'5oh.(5+DmI/ѵ4*Gkn#~c ү͗L-וj  vҧIq?־坯>=#%| =Y#xIX' @DpV4l7 _v;RHNS<ȓ ݡgv :5A+ IeTJ!=ޅG]0z:\{->9}6jW= qa!-HR"l'[|=5 r 5rLP|!]11Ch"ftbʢ䣫;A ##.QΐZ_GVn5j!c8D$i+KGf$($-V{r|Sp!,@J-hS|y1zcd'cokҼ+ hY Bs]_%9}K " Ez4t@Y}y#}esJ`/v1_5̪IaZٜxnn~~IILV*X  cPJ:'눠TSz| {[Ϥ1k mVE5{XGf 8`x ;nX$;@Egto3%.O/Y*dzksh:^LW;?(סU[@Dm`Oh*' U4m" N$^Ql y95R<'{@ߓe:ǻW5!$DE^XaM >5tS%(&!՚$,'SI6a T?Г-}:>>vr_8f$zbOTBovoS1s л"@H"$:Ì@?wĭD@2BԚvq6b1D F>A]lKRk5y%KntI.F83R#A{pɨŭWdWփ?%uҭu~O H츒,Q97hc<>yru??F=ZjQ5 c=j[c1«}/{!$" 5:~֑ cDpW֐ZwO0FAÓˣ Sh\R n$9ut?34`vP&V,%h-Hq E|M 뙷 [DCca55w=G}|.'ݞ<\|nFP>+3O3ڋ&ͯ [8mDU}',%AAR(a]N̈#>/Xy7I'1XgUcX@& !Cz-ta݄ʷH-p|qyy*Py6 cf ?q/qw1x/B b^UQlŽd}Z7݇بACz_[dRbWbIֹ9>h$#QkVQBg.Qe=y}q_FilK{\FlcVM:fאnϦwL|kSG}9@#?ե&+O  YA>QmNZ+PIF3%%A=$q.m'dU)qnx!oH󋇖n.a}G̑w}ߏҕ&VhքQҫB!rTtx}=: " @#$̷wYm]{逘섇|Ⰳ9ɍw BJp~d.*SkB|w6α@egq.6 J_Ÿ" h4ְY_͝`@fBۋP>Rpyx -Ljk},0ҟi/~"K'@t +PZfgAHB33Q߽a4z?*gd+p +5~ q[HTls\V[l!>{c CmsN|ds/-^{dwpXb'4p QG22*=$@)IagT ӑ[4G*h IDATBSdia$z[^9ُ2ԝ;h$ $]  ^B ܥ5wӫ!VlʲvkՋ C7pޘ.KK7A>X+k6åGSu@!¥<$7H'[1foc^}M22ntQ &9i 4܎A9s׽ƫɩ]==[nH!rP 흃pjh QkhwKA=ԋ #o@~5 mF\~oA+SϏ—% scP-;"XdKdV$pIګ%W&3LsZ`p % NrZ,sp6Mßgl"&(oOȩ9Cp<ʭ19DGc!-HԜ7fLAtJRZ*sJ F2 )]+]?^]yM'۹7~BB++h3 F !ĉD)x4|3V^3OWgoZ[vjx.5`CpS<%D1c0a ca0)|p-/^K@_[jg+ew'rkG?0'}SipJtMA3C3Ai?C)1;5gjy2oYzv'||K~_۪ \Jj]_u שT[j?ܑ5%uӂ9&4c=5\VB/D@_U:yDBB0 `:ky?:EGgS5;H8aMGA :v-ү](WϜ8N nk`s%,c8B{vg=l*kR>'ư0\gͼ8$ݳU?aw`~HwNLvr0Tķ55AsN !dp ZIӦpkG~OHm2kh<γ(Ui9j(:m'ݎcu5Y9mr:`yl}c&F \^b>IGZţdif+'):afd/Z 1ҵOr~E}>>}Ѭ! ښu E8EKNނ6b8Sj;Y"uO <qBzU ׫H> Vn iZE, ΄LCKM 'H!x&UwuN[{l] |~'U})nq-@?k4.]V6ҽXz,!Qk?}, [\x*5|\$N0Qe0׃븦`o d 2a Uī9{ҙPG^ENdYWzV$Fo"25vX)CBVb!hsSG],w$ yŒT/Ȋ=N ]ȑ/$*A\BP c!y@:%J%5Ȋ[㝭;$[}`# thV\ V-3$;A$ Qe#lCWNʳyN(Z {+*"k=$}o?d8hj_9O҅kp-j?!K,Kk*EzGdS>tbr2zWoLn0itrP 6o B5leg*!.݌/'Az i^;7Qz;]Q8BD ݚr [g'h`5u-tI,:Qhmq 6Z#/c`|#k#I(v6.D(6A9UzҊmVJ@;~AяE |ffl,s(%KSmz4ͳ`-Lu p_B^K^{H\kVnޑxfHF L Ԫ ZhKj7ɒNʑPiN b~eQ+ ~Ɠs4 QC)ƥ U ]'5?`.'HVo ݔǏV-9A˴3iSؑXyD1׈74ʌB\c86"Z(dJ1 ׶S(|"=[͉Î_Ţ#皂5όuHg#$C_O' " NGHmt wbgN*\Hժ !Gn0Zg>Fcz(:ZHYXgA h7ȍ_ְ+9ĭsv0vR4WKB^L3FA*گlHX'\&l3Ea@Mȏʀem5yGYao "{@euj 2<aJ漗dfA}-$Eђ:O}TXtCQxֆRk @׿=^νHU7hD AH]} Vc\ҿWMa0Q%StJmRT):fdΙgR 6kSM4dy/0,c!=cI$I0Tч:m8f!WZ9m&3aV;QlW/*V)/$cB8a (s&8a;0 vc#!]3B*\EVQ1]P,'\Kwx n+:8qswPQB6 &$8n=m$7eM8`eAŬ3:9_h)1iUΘc2,O0Y}LP8w'Lԡu6B0ԭ#XE^!Uw @-8C.:mFMRI"8 rUfCP1qĈb`3qq=pH;B(p‰5ОkI̯=꾪7Ğ$KڲVԬD'Hi@R Ҭ81OM@p$ %x.0'pӪhK }G>/Pῼas)Qw޶4/_ߪz&T;bހT{LGi`)eၤ;H  7^Ɂh%õ&IRړgUyɾ/JA)ybo-%<݊_쵑 bmez֡mʫM*قEV65od@:+M FeѾK-OXۡJi&1~?-} ƍ,2@KنU fΘ3k~+:WM? &ѽ%,{ @kUBU;gݧid j8XP&ܥ@OO7${!v, elU$ib8q^K[] :iPe:YhE2 BD&Bʪ"sdr10f_}8$)RgT6c"VQe% XI`Z;?9 V~3LIK3<& r8#d.RGjHlu 2OfMO1b-WY9VdF}Ւj>ɫA֯s͚GܻM? ġE9 /i׼1\žf]zkۆPU; ;|00# =? ͺ@%Q ;*m}4fQbھm+8yŅ RG芃@-p9N'筯-i/=91e6|ÑS{=}9 W70zs'58fs_?U_Oq\ [ Ph{@вV4" IXÏc |oag6v4H%jVښe/ܿͿ}x}[xlEdB<-?iUM)m|C&yK"P,,L uXځ0J S8VA̤kbIY~UdFKՌʞhwo{_^e4KP9 ^HdZW r$:;)e\^6U7l = (D3X`ڔ{^ 5a{dq]6m̭(ZJAތƮ 4ka 5b*jU]l;bq4雱Loh<T̽,,2zZ lP~NjR>sS93 fVSgyBvM4 tޏ'!Ieqzllu}2߰4{K"on Q.J@BZ5ѸiK^4'yaN 6~?ṋL^/±C=X*k5\+&T5j̙tvU?47Uȸo*t4㱪p|vCZ Fh@$$QZ\jDcs΃Idc.z.ʁiXYX[vnb,V]dq[uZ 7$CR1T^ℱ7Gj c8|# Hѷw,v7B ? 5ȧgQ[SGUe s:7ȍ׷Oy5@CF(tJ>XJDiuPQ7Yl% پ0 S*>qm tf he DZabF8hV*r,TjH)#eiJyH͗| •AֺUp<n(8!ǥe6E!!0Uj2|RRх2eҙB2PYO(%k DҼլ*,"{=EͫVpbf;e#M 75@'1$$ tq]^_D !D{@I&6CZT$b/[ח1d#Dgyfo g&j7SVͳ]0!\]%ͺft.œy+d\ࣘ!SC"msZ g/&XkA/V}0Xh€`sLL~z=W`g_GaqN`5c0JR|1 y ĵFF {_ab$86-hQ@iG.g*LJ.ZaaN NȬMCJ8}I=:I؀D8`ĸ%^ 8agxB4$ڛZuG L"N)>"$??,Q a@zHx~hz={@orvgK*B9P*¸Q#dA2|O `YB@~*dTӃ6<848P&zm&6-5LI,8TR(b|(mcQ6 fRgjϯ}YWuR|f  p࣐3"y&+EӤ*ĺ@$ TRxx_zXXKl*5ݬ ʘۯJ\5W 9K l<-jlogJ0|6hiX>hEٵ%2hL*H4g\6@M1S1\?M8¹'Rz?=.KZ'4k(WzKt.ZF3XVQ& eP^)RxodUR[gʈF4MiVPf&MC%txxiocтG-݈d`1:ƽ]`i^x jqKj^śJy~gO5{ԍPԡO:=0\gx %K톀xyߑE8/\DBuSSqML'&93"3q|.r&n03j43ꁀ `%l|"\ñ ]!Q:JU^\s 5yF|T1bPZӖ8'R?ϔK\kHƥuDq3$2;]7{8}69zyN[p7f N` =z?酟h7!) V ȍ׷Ӌg8ћ 1jysIRBmW_+Fk١9\|` e7;ߒkbj3s]Y dbqUne ,8F;жbqZ.ipAE?Zk w/ įTgfThk_p%x@@z TrK/ܨ,zq!8S|Ei5+SucF$ ID{5xor!1WQVqˮmI_Du7FYg&]p֋` {׀C2*\,3 IDATۑU*Y@ ͯBiP?ܭh'`AlZ/_l/yNĈz+Nq5Q8A"rQjJJL;brh6,MET*=K7" Z33Is:ۑ/80'{ n}pٕw@bv0޿˟Pq$ 9jt{.o:H8GE9p:]!%j4JJcf3B&F^}%\GGV"wNll(G,qlAF|-ګ2DhEtuL>!!L9f-tM˕P@Zy`8z KB(HIh]lkhD1?"81f} ٪p\/Ϊa+AT̑[g g <Vĉ. Qb)uGLUXhKZk 4C\HS>cN^}VWL%Ino> !7\3[鯥$BSPI!=C p}7 eb LJ8%vM%D!Z!E9TˏYd N3ZX 8@U, hn/Y.+IM6vo+zU2ޱTG"+twaUI_ZzӮbPo$]I 1$rһ) ^04]vùgtЈzFyvV@ ^yY޳I?Ŧv%m0~D\?6 Lq(f\LQj 40(b]C"%Fw;Иo 4k5%^4N nQĘ|4Z <ApMQA DS;Q3c S04QVy옃Ƕވ}47Ȩ|Eho #c6; s@ ^**Co֍֦m<1@-N7Sx} 7w/>(JQ j>LB ݫظԄjr%uAE6Kɶo~}2F n do|-}=U 4,IޢP["I&iy2?;+{< D]F|ψieQt)0mx.5Ԥ{de!Wdy!&L h`[ dlpK[Q7 4 " Bz(8 MuFW+ĝfi4ʩ>b+>EvPpi6̃lVC0.E0ϰN.𯐕6 yhlDXǕ 6b \" c ֳOSO1Nl@r%=7Za SSn\T%wI` I[t8ٛeQŻ֏{)17xT֓9^+p$sأO}p/FȽһZ=QPe;DZ#R`$d[\5N<{3*r|.tQDwjڑFR(YJ^)Q UH ;{O|yJ7%g+{A_Gd񞈊[쎔V׾hk4o8þRZ;RYz-x#iK4^;GH8]Cki*ޗ 2Wtyhģ]\9Arww]! |o2([Xod=mTYq-ӵ#V-8Ñw>EGqQ{x.됖l<1ʝɉb̵RTɀ5\و6iS&13$W"*c4ub/k k!4u}O)$ȴ:$aT\tL1W\H uԉ0aoTmv׷CMfqNfEWf%%p_-4Fژ\0הi4BQjz <|یU/9ڈ},h X!O)n`x}; k,WAHl\JO &=il_z$,|d/ol?FK I4Bs r iܠJB$k.:Y\{"uU<~JvtbĽ+^@o wmS"t翈ѵ'@Ҙ(V 7*{FoukR? B A#7~,g?Z%]*6A~h 7L?۾cR"En_v꠹@_~72M~` *INIЃa,$ڌl:ʞ`tವ\,O91b߅pMUY `zB/uZhI^ӖZ.=|e~m@#g lΞa};8J}b(!.Jc%2[{ J^)e*J'`sF]*ı&?ů";']HP (94㰣~4^'> G4ڥq x֏-.. 0z!\}ς߱Cඍ i_rg$G,l_y+9pc1'm쁯:Hg@*/D7AޒΈdY+@umy}='$3!I^ :'_ MClEFp{{xY5}2jnUjc 6yHTIٺV]>c fNy+(Tc\GۏKx?NB^*j!R!RpY?90 ,>-wq Hȴwu2شZLOz׶A?$֙Oc,3rXE<i5ޕ'ʌp<&Γ=[D?vYԏ܉IqJ"` l>FѻzLQVPxd&#'Q|dɫKGo6 ZIoCث!bJQRtc&]=kM  0cXHDsXɺft򽄥L/ÿCHr&*0^hKSrÔs!ÀT.޻Xa}u;ӧ{.=rIh-E-I(ɉ#H d+(b bDprA,D#˒X$EQȽ{ٝ}ܫ{NW.)qtOO9oU}UI![~v$| v{;CrW`doeR {`FgJ^a{DF$/SK8yr]*)|_`;@.ETkCT&C`P<;ػX܇H9Nϳ݀-ؗ+-WCލ_ԖkHycpj9 Me˭7fˎ*oMP _c8Xˁ _d;}Ib}S7ZqX[~:$\ k @J^$j p1;@ll_h vrMۈOhk@fAUu=a&>&;b߂ 2Bjvox㥴zHdauJiJ3J&q0na0``kP7ߟbuuK2*> -[@:DPiL NB`3ac?@L]:3q;ɿcn,ܶ!Rr[yc?O.jN/}! ܤFS BH.Î{ncπmZbf'KͽnN9q. .s"n0-][Y1HsC^RUhx0wwv *:0 3V&(]hYl8,$~r^ٵV}B%v)Nil8v$EjCRf+/aȯ T!pljU2aۢ dcc3uʌV5-5% Q@ρ$WM;6QU^U\MXI%&B(9Jm\ru#FPM*Q7d* !  Ffo TMgOD=@ƾ5p<>~mPMn^w(W皭ͫXB8e_Ю.3(  +B1kF}'˷,9^pDFJDވPě &ݞ^1QN=_g7L|z1$, D~8`|U&ûn"R|k[|;qsW!S"=a!;O5w"%RcI~V_ukvv)AR_}$v`oea<$k?($ IDATf;ϭ|-k:H\ c:A\sk=d;pQf~<"7@O77 L Ž̎LTO9ށر* ]6ҝN B'Gng:MtU8{K!D# }f sקI<-H:thra@։$"Wɭn:nTk߿/í5[sR0ί-A\c[s9!sSZzЫGAf1i%I"eH =<84bupi> a -(#ʬSQ & Ȇ!0kEs(qABs,CN-jUbO N3vCjBܨ)i[+b쇵ǂ- `87K WM`wpCY( ME!=ޫ,;y?;Fy"YvMg2-5.Ԣ7j ʇ=aQ(|[7voMO,3+=~98 8U : ǂ3cS磩wC-iWn0ӷ_ j qEVC{Tghv v R lp5C W agr}Hyǥ{`3n.v Տ%sg~ Ÿg .ؠ3;҂J+A=L=l~іo_mQ\VlG:NI5w?gawZ \6@kh,>՜C7@D:x,ۃ/c4=G.=fp6JY,UYo:OX]GAaOs ;S'iChjF"p.x{ _ mz{jG .[ʯwW4pѨyD?Oiq)InS_}8{eKl7s`_|mBd* YW6 4X)?]vX@iƊ?|, `SxҘȏ6Do5*l8:2I+Ĕ%0,.dYABii)jU[uXR#l$#GDhhIq"i\W9>7x\~@;|[r[6Բ'*ŌD|8[)?+1ʇ33+kw}P[#<Ѐ~ F W*+B>AX씼8B:0'Q(mQ.ҕ WD}5Eo(dkzw-!ê31!-R1:- rL:gsb4'ilYC%5IW xb'pTŎF]NWzC=" G{9EՓYj?F*/4`ҁz^Paa&߁G˕w{ 'XZWOccqYMlJ30XSN~& %܊Cm9Ύ5v[v}Ad5;I.l]XAYa>_@B'5jo*P5[f0a:rfqKlsyϴysa@:l䙰GQqi_L!S{H u;~]>֫)*ũIqJsOjpYj\hKlG[PE[f*3G1c]R/Wnc%ֈ yBd! aYm_ytģ["A&?>}t>哋XH" PzϜ{Jcyw̤mvXel'v'VZl†TuF!@e|eaNIB3.k{yBCݛk/\^ k,uʹ 6'5SPуVSZEjB4i6TVM%3vj"b IL* cG{ 7;'zCUU53edFjC51lZ8kepX($Ր8$0W"_J+&LK !IBMP*Uѓ0o yá)dkɅƊ8ܸka:~!,=>`P*o ҶO*V̾+5P"[k"rhexJ9( ,iZh\"911X.T^Q =IQxe)?Wa ZBW&#n1: i}G: \Fb`κV@-`g|̣w1}D> VRa`ѬyCa672LRh"#rIW{'G mM5hf t=݃pVSūȮ "}<UE*PB<=WABeUv Q`]fk @_" ;3@&&@ ~Ǣ߄? q6CQ1JoN&g㫜n l|o'5S1D ]6#tca}ax^qLxO of3 s?' QHT?4~9w5l7\ڻ!.dsC#R >Ng yO yqY lNMfb']?+AcǽCf´pN߃jBpz\]J-6mU"dnR3 ++]7#CV]ZU%`,@$DTR_/m7Ҭր ] JS!e!h"Q h0 d( @ñϝdRo`WFoVU4Vs*͠#lpۧ?`qQiHJDE=>Ҽs eue YY+n{IA甔]j*1q&z{]t# X n0^QJ+Ut(~G^* ^X0,v4P(4$VB&@i@Ak[WI60glϥ8qe29̥,s8 X~\=?0d.e]3X2 6neiv\UI)7VO]xQQ;b7 ۑ>/lR@ I¿bpu|~VPҽP4C$¾$QKt- JS0>&' M5.^\a-P 4y5߬ f|y07ntΣaEWϟ iG.ukna5Vp T9N$麠`$mhPE 8(CX1pd%ᅲzUw1>F7`&B!DTozujcmh렜f7KRܐ$&w|>me[ Nu"p\8"~(x$"kDqYDo츠?dmujMEtZkrILjrJL.qHlPXhk-B@i6<ۗ* EκE0Bz5jhApb ςP' -x;xB8o) ߵh6nܵx|SK:}s*C'BTkE_Ȭ'_Yvoj*1m:,vg4Ѩ0֬޶ñWN L1l(U|+Uj vyZĻ_m1WwNBq~aNC+C5CŏB1+UI\2),LvjFYKWX\iBZ>DtD@V"jЮjQŝp+NKxX"0I}SejK'( g[LU&]vlč3{P*^Ed< P;a@U' 7UKbp#2Sϔ߬nN_Ҋ'!6?T2gsb3<@޾TBa%;.v٪v);|@,Fu s]K`&)PwV%}]콣qL@}Z$,ҙjM}KKOC k/knR;>}|A?YIBܜHfEzʋ?d>DV^VM'I%&J12Z'׮T3RP빦*vY(ʃ<4\0\ӫ/5k qCF]I5 zyqdnO@@V7 B e(C JFJ;MKk*n*ÐX b x8>HŎB(Ni*m1m90V?m(cec!fsBXGcYS\!q .倛5ZU!D!m8QDhҶQ>Tͨ?b1u} 5*^%YSCiz# )JBhT}MgmAAA5 ]WǾUtbI*5*.olzo9\XP 8ikBqWlbzCxⴑK|ߖUcƝu'χ8s<@@9x(Xݴxpjh?h_qxґcn{dF¥ KzJBֶ IIniZv{ޜQU<(ZhJ,X5f]! {t+##£,!pڤ"# Y  a\V3"6#o ݢ/fWtf-qIm2*9̜Y9!G-d]׳n5Y=ΧTH@x5u;ZUZ!ծ>D:lb_)֊Ji$fzCM~cL|tK"qQ& ǥM|wy: G=Kn?%q]碏@w\;ܩ%͍ qFH, )~s#Li]'Io Lja8e @*1)fPT kJBDJy?;RR ZA p!Q$|!IWjjč^'W, 0<HκCv,B طpr $o~QURI$P"iFC+! 4M;ٙmCoThzsNS!5ߞ%H;{ ?[b :@+ߔ~x*XqȬ] Kƿ~3|Kuc }'BEn2Fc>un:3WL5HGШV|LIWaϋtZz*/`0ַkm9dz0=!CODx7[VӨWjE¸zSI! Kk+Dsd_7d}[h)d6rmJr͐2-6;( \}+&S)b_L6ٿς!-"oge6&WJq Rqlkr{+@۹744K8̱m R5% 暞&*Y\ZdP2H51{}陪MT7ovݖ*ewDDOYKPqDD)u%*BO~wKO!#nc FL"4Lv`5jB@*8"՘^UR?y>̈\c%5^97*.gʌe1VJ˹gy5(_e/Q dY#*R$ =jBҬ)iTw՗`XNSfYXD y"&1@Z'JUJ8f"}ey^c }O~,w6q&7N|%d»_{ե]ΞEąE{P%) ,4q\#_)zޖTcPZuΆBK<,d±ʮU e%Wf&Pz-Cyyyd~OyFJN::o]R8{&Bp`o|aGx7I \xr}_۞`<{1EG#Zڲ a[VBD9A~!*fb2#x劙7s W l)eCo.e3!/V>&K)S+3Z[jfi 3U0Q %`Ug{p V=(,}@L@Cf*/\Zc_| }RC>~>E:SrQ}.>Z}9n>X-|Kum8$ġVe"a 8P -TɕWS|L!^P8ҼFB>Yڹʭ9Z5G %dҮ+O`Z殃nߛم>qx<MKӲU*( VIHxu# 4$ sMX3!7ZɵᥫNڳCۅʥ4ȻD D5p2 ̾ݦQ#% +#-7pz4t.8NG佳`*O=]IY=5Kr'lD *y_H"B%V`8NϾ`|LxlvYr l8fV]S%q^pucUݞ +SR9郱@/j1ZTNPV!ݴ4w?RU$ -E_h6 oNj$c|շ[|ͽj˿xL0Ь)T IDAT?ޅLn5)\.{< y9e@%03ǽ-72L5ሀmIc* j8R0n!}; $V f yV6fg.gf9g2R 0 ࿠^|2Wn)&[Dn7#|3ɜĴL< kxv!ydC-YNE<>lgc`pvu5;^bG7$!. .Vr_䵋mF8κF=us1E*UBB(HZ(( rXYiiP>k ݴȌq"R]DhAţgC,vϠk f `m!✒ZE!( 5!jRpgʍ5 cDRȌ[MCA0R[XP2eq9>Ic@~Άr Yu5IF?R$ƈSBsSy\qQ3*FN%^0&84@Bl<_APutH-B^8`y^cUϋaHn#Tc/[xt~`dyfxfҴh#d( W+S|P[ VN8oEFkB%!\i<V  |RϨW aK77`#Aw<QS 8oʓgB tvkxt1J. ḰJ,9z]te CGGh#"`K`<$VT2 qVp@3d0~f#!E{ fw h~;aYvX g8C>Ϟo6;l+ >~<%9~g gV~G8ІUk_K޽_B;ȯV$)/Jwb aLtXΞ =ԎY`" 'FJ*@Tb@ pĹ[ _"]$8+ -77gxL@n*O F] .e86<8=/ hk%ٿR}cFυPtG* ˀ]O6zzsT=lo+yZE!" YGb0m*$dSx"f~>3> p,co٨)+2JcЩҨW} _uUhd(rB zRda3'(03BD (viF5Qh7t.MuSbz<ذX po2KP8oV)+!=/ܬ#rUEJq*U)~;K΃f[vl[MBfɜ.Uk :hZܿ]IS넙]ɇw O4Μ!$` rEҥ__REL@-)k# OP0>6g޶ I (%"[ iFSK&h5Bʻ,54Jҵ/>oOj O+a-T]f~xTF1,mTB5CB1*1acsrԋc`¬n>82}X&'GXYh5*I1+p_Y-a#[D%mzBZ?ȿ0Ε2#ޖEuxjȯ@2#Gw%ZB99bHYWkuo5KK,đ?Mx=C`~kk"lW>7Ҩz'h5;|̂pMx $P[%sEK);!/}C&AdCq!10CGp/iZUWnʋ/ Y(gNf$\ՕpV Q]%?(^X 1;t6|,~A {)(@Y%R_E# +Tl@7xֻaMhw!73XKh7΅86Ƅ@´L's_ė+ J 3<ae7dD|M;A &o)菼9\SA)B/q,sWl7<|?*\L\31AnyD@ fPvA߷xYp|3%|+I;d<%?q++vz^y|˿xسs0"h,K0+>^1Pa N. GޞӬ)45t&x 1RnYi>; \|#|S nxP񃯞t|5QH"LЬ6v6waڝuK_oz#͵KozpFu^ Us`;6@`<Y}e7Mcʷs'C4* KRUIoe_7+#x o;k_;=87@8ŪnQfMqIڶmEW`c#Ef+KַT*?oBm8`0,@kD!8T8Q45ZAwȸKZ?ͼq@6t-i '@w&Y0NwOWՁ?4đBꕥƩ:p$߮7-H"f,3agT>9f÷NqbQAx; W_:xRzfg@FyvvsETcG& Y|hZȬorф">Ʃ/h"| NX3%IH:AŹ\ӊ0&Zz ߂_ivmG{6L@?3Q2UxG7 -{OR!;wXW5N f?1ٽo84 +  ]oNIq^t4OzͷvieY|YYݥZRaF!0f`< 8`<3' &f!c5nuz׬ܗw=}ι7FTTeUVw97}Yp˃iuDia: 8>sh}?J'\T9R[!ϿR$:ѧa}G᫗µy cÕ;>Jg87$܁lnn#Z{ڦ'ƥ&Qhuv\ GG@Dc ,,mS1zHS, Y {|Ja)%eMJVw<~ x$OC$rߟQdpf5F{_k\׸5G?Gc8w9r:í[g>spxM=*B0lᇩ]2~{w:lc(*GR#wT]j+Z19-E }u!@+as>Q#:O\VGPjNGpRXY#GD7Q@,*Vqꈃ* G2;EuDzC|c~J@rX֮NG#xhifv%jcE9(˲)w?00sGS 4]J6.{IεA^BD4?wʼnyF%ru "Q8}n8l8ԚDadD ׈!ϐs9v:D\J!hV*D$ hɽdQ gRm 9홙y%+Bu%£-{ZqB Z"z] tt7 "*4f[{ڳBf{ݖfd\׸5w>i=wwO=$ݻoNw1Lu[?=} S fUVtN;5~k΍VCCbϮrC}΁ fϺ(zBW^ t{%W9,[ci=2{T:a52GQ9P×zşm v7ҺBPH^=$= 4 l0\ާHR# &D瘛X^Mpg%AR֥V) 2#32vWcцb鉴 ]1ƹM>lg#68Թzcc(RaVolZwM5Jy'u$P~_Co']eխ;6ۘw$qk\x1m>* 8{_\" ׁW^ ͽ{?4|ywO?67)E1O `bBݎZuM 1;q׺5@PDBB]1jNJ:=bƒz& }gePx w,~@!hOp0NL1'~Q14*CN#+ @Ǝ·|V4aBy({}` a H~z6rmqc)Lus%m?&{$XG 6T t{mdd-s'ʠ^[!W )d]Q*}\ f`a(S~ c>G2Yp٨ T*K1jmjL9U&J닔&fuCaҘ8wdMduI\Pxt{D{[T>>֤dЊKnb ~J\cG%eu FgY!nv9ݷ\\MpbA:l˄[)}s{9\O^cbV; dM<87qk\׸ oCp]v5\% |NeNu;U\ Rꯟ( A 37!J`vFz2݊09"KdݎSJc f&$Ej!JNGۧtp)hHdnUY} 1@ rZL nmW= ,=IM ȩc} 43:S^{'D YU)^x<cwtr<+ E(E mA ՒVgl[ k[ u4Ү%0z?1n9乲 IDATiΝ `Hj DwVb}E. e%ȏ6ʾG1jB5vWcmKй*EnלpnJgT!g8Ȑջ4DY&E:v_|hڑ?05qk\zFzjQpw̅ 7z {]><4;ZTߜ΂lhM׿ 5%q3si~G7P|̆Шek"6u=]Mn3 S%#йMnWcp,i[mUUZd 9fm7FYI1ϭ0v\ \MN@2]`DM֞3g=n&Y5M.i ; ִqINu5Hki"B}}1R$Op_VJ´< TKKQ[]mHڻJۀMHF:CaL@À# -GqGx#J6"(1(G4GZA{@Y~7۲3M)(g(rfȨI!ͤІ(GRɡX趉^:H(h+7XT!:[vv;?2-Vc3GNw%c}ypčϜuJ6LEt8'Z*Oܣ&H m(K"0ehBY+0#Nah8A/qk\׸.Pm©#H{e4]-tR:0Q5qk\zփ1c8N3 9r8֊ V2ߣQ,^\{(A?0Y^0ِY6om|81'ur҆\V mh8xwd=ϝR#-l.U r-1<;Јd @5qk\c1@<ϛpgpׯK+n=Rq|˷?.))sjT;=)p[JzKNYS;FUT( ~3</Οu;!\KqrChw|~xwA hr9_g%_ G2K`AZ 7HT'8{AJnlڠRtpz%[\H)1?/5n& ŨhZ&JfgO[άJ'e1uY:8'RBڜbsxFq <Ɋq In-e|A2\dxzDZK5P8,mv;͊@&p(C/0VL?&jgk+-M"ڤ3Ib/=v 7WyPBi TK"Q=5 @YSKJyFmH4+1H[3җ R0׸c~JfR ƱYc6fe+5t; ^dOߣ µET(2/R/7=[tdfTg2vw Ay3>Ԃ8 c2qk\Qwĉ";0}s7xaFV1^~0WƯIogaZԋ9 nR[hZ.P0N hAg!p)Fpیg-\ =*9"u!Ǫ]ra*evPG(9KhWR/8I"u 6;^^ˠ? '|B&?wJ?ݣ|sMM@(g]0 \2lo+|ź6%foP:kx0HQ6v4N sP.px= &5ŵ2C1'`ָ2S+kܸ#nED{VG0pRci#ytJi~Z O~$0X3޼om] Sʀ3rW &&}Zӄ>)?$՛k yW PX;i 9plS.%:Oj0 ŵ6j@ 8\`Di(Y]^OgΨfۻ ϶r9/+/ EzOsO˳" g1ʙ8wusv>E׸5k_wNO?R .m?2n1O3>%\aQx)C.76'תnAh̼ /tfhı &YR(8:4UfӸz'Ƒi9γg8 37I}"9C霋v%2aر9Z{ p|FK<#nbH(6nsj]pt~k)BTwpfD5HaD02f'jh!љ3YRz/spjen_csh]ad{ݗav6h:QR3=x.525k4 rٍ(iܿ5ͥWi>eV8 F# Lqlk_ۇ֨٦\NځQrpv)_NG0vN<ܮC9m٦”DKc7M69U!Jdj],-%Q tmru];:#qnV[ٍ AxШIAYZDFu7o.3凰:IXѵsU $_Lpg8:+Qucqk\cHܹz_dt)'f=޴ј}%uJmJN?|50|'6,Y0VV6*Vlian^eKik0J%|2QhV9&mj:7w`6) xR%NY{\ mHZmg.Y8N\간}52h0 1GfB0NT hT976)q۷q ٩*%4CcXH-4|-|!@OS'Ov70}Z@ѹ4f&*%zJ "cQ ;t]]aDFJNkC&pwnD g4 s<}1xGVȱRh8?UK6cy>XQ Ihc45fy8[K1~* 1׸5q}Q Ï^/ |/&yHh~9|sd IQsn{JrLavNcĕ~bd:t{[5z4 JP 96dͬ#=iNlP fWx;Xn\(xpf'< bn45E!d4\+$+^ N4cmK;8,}Zpv4Եǥz7r>B> &s՚1,H$124zrJdi*N({M1T p|^- 'Ɛ/`E02ڣ.%t{궲 a]H̰(1V0;NL)dMOA,61^&w5C"^ 0?)ů_wI4]sa6i~hPr><be DL4"޷Ivz21ݔhT1F F=4)|>`O q?  r! ? ,HI Ei==p? Kjgm.H.P>C4~ɕFwY1TЗ76)UާMȅsD 9w?quTI]I2qLc}meSa'ƺ Qz7"lKT:Td\׸uʺ6:{ νk!܊lr׶`\H@l*4o]ɺfQ)RPc]1^ Ѵ\&9(~)΀W/͋==urL<me#H-+vO#QDOpFf|G{ fLZMgih´aki?C)I i74-;plP+9m`>U*j%8n_VJp$试 HPdDZȈ}xDkBl_79Fay mXʙOˆy&JFk)jQB)-k4syCS0K:cfN?9#c2qk\:z4s؏ϠX" n[ҭGgr`ƑX9@3o}vr ?bļ,/N{( OyV_AkHAtDX0r\լ*tQLIZDwm`U٤0)/7x10g:@o`pg%Ȁplqb0Q(Hh:ćWdi'=yИe+!M.UaDuQlpn- j%+1!4vw77pWoy)ɽmT66gAk9aq$юP&X~/~ހ4mF6Fx_8h\JSӘҮKۄ~)lQ>%0'щHXFLi56}agWɻ2pg#^R sPȑsHϥ6)AqFd]=r'R3=AȰK /MYtJI];ڙ+ 0x!F&>+Q&Z'acbh P9(8m(Ɏ=ؠ!0xm3AI~.w)s4yEΕna)*LՉ:W׮cD mtΠtq01(+} UUx60 v:n *>e;͔9`m+o zy/?$%猋ze:qxe?\>q@1׸5qȀ2DOi DҒƥK0|xvmT_qdN9ib0O>o=ZE(66ZƤT ƣ'65 Sur@ to-^="] wGA.B JƉVU*p#+E/`aJO:QIEiG1OS9rZS-Tp+hE(u.ݍN݁AYU凝`sCp%hBH i |øƲ`H?$ NlilqΝp9=5. 1YnIk&jXg-; yJ=yt8NF6794p^tPV@pbN Z ;hP(cM(HI 70ءA<hD1p^ٴfoG13Or'FK~{#{&x78,~Ċ z}ݎF(N<;m`3)Jf 0( qBA>{E1sA1Ӕfv^W%vL֗<&YH0-W#eTDϬo.&pc2qk\KL1l vw"ir(Hmn輶 RLkLY (En>gZIr>Gİ| _A;A͔\[0YH~@5yMIAm9pNtB4l<6PB,0,1Ȍ@NqH8m]exM@gθ;wv`0H70(a)FKs2I`` B/Fج셽ؕdjU=n%P'!mK[K &'bQ\;瑈T(9r9=7Y8 ~C`v}OxDv:Q~56?M r^D,WZG'F8b%Ьl{ֲ6$ ,Hz*'d@;˱Cr:sk0ݐ(,C֞4a7b=bAVNHrb1P0WF&ByYe~7ƙcΟ[ UAy(y{ _u]oGJ-]td\׸hR>s`iIƍ70L3u L`LДWk`}ebLiK_g)B} 3iN„RBn$OB(8f'.Ͻ7Ǔ:%/mz+1`eKAuZmI#HļQVpV@~Egx\& p89fϺp+X1hJX" )Y@ZK,%(c̍Z3fMm!ks Ǿ/amu) dnňD6Ce-mn1.cm R~ 7u$Y֪ ĆnGڭ8,+Ġ' P?hiYkC  ) $4I9̣-c YS\8$3wiըrs#B W56JQXZOaguN CmkERf]3{SQl٢ Lhcs๧=\A0VmJ[}5n9ϑxgθڷ!i}a 6wWi+ 1=ya~Jf5ik{m+J"g$?Ea$)= gq c2qk\ >k=~G&pē(Z-7K7oz$cnX|&1 ޸'<pVOh6R ? 4 +.D.M=L}ُvah'`ӵ!~hR&InYͥ3C.%}~Ƈ^qjAQy#:=HN͑@gP̧eodyrAבa4mE/+0ZgۃsѸR<۲2%8+"䭨ހ1K֮β#H?0QXTWhV]} :ļ@)8,kw;)C#jr4kCg.4mfs.5ݾn[c1I `^g9@ϻ"* b.엉Ș}n 0hXv`y=ɂ/ݢtTGֻnHdoA4؄t(:oM#7XF*֞dM .bIbດ S.p%3NzI^}w})I#1ݔp䨃L8i+u(}u >QږBo)|lp^8!0Rt̳G],'j2BOtX }RC+b1%!(1|+KA6t| F)Z{ Ow,bڦOOHs6;oG3MKchc5m>;+68gY3]oH}?"o4+־קm,dS%2ۑ A`nf ݍAnvQ@)oG΀mZIc&4I+ K jeNAZ(}.H7u0)32H)?w}$w/' I׸5[ɟqT*9ަ4^x/1*>O %?ђDJCkWYHK*E-ϣyM+i=Y8ٟ-tN i3wV Lw`0䘨 (e{]y;06GΣ08)I 8(8ΞA ѻ;?{QkO#V^$M[ UD1Ouc02h4ˆ@ zeq1k]\rxMo`be͖BccN`M+cSEKiXL#66A :=6>(6Ge2q(6cل;N@$N%mk,̥jsBZ{=z] d 5):sAަ֮R@?+J#hQ KY6&H5p;k z|,=h_ 0Ӥ@#M /x6e=3ԏwcEH4m8Ęj t1[}cc0z s{ Wr1P0>}ɣM%je.['ij3Y%,7P9ιМa Az0$N[1Ā1n)H Y}?Nk4S-Vt٥С(xąkee t0;!qO54$cNWc6^v #js1C9ᘟ9*\RXZO`@aeh$je.:5%a}&pNz>\(iBOG7c^VP;?{9 ]r,Q h=Oa9VЕHlɁ늫Z]TGC`nTnq%>}΁\@1v*]fv_tgX^K:~5w_PsVġ%I|7 ըF5*|hm܄sVxgi7 ͇ox0r?NgdZ.fj'F9(,{gN|;1 WWXl.4tdvd5ϙAC1i ŃqfܡXД,ɬB>8p'8PBmtXY5t;k :};͚ע?Տwu*{YqQ($3dzSGx6S5(\67n t|51P*  HX~OĶi8l-C/\ISY.-+,0=YO<! {K~$et.L;L7ȂIkGlZS ťo<Xg舍ejL_yd0Ⱦ]84jl+rR*(Gq2rılٜO4«{#oA30zyf9>jTըo=|_.Kرj]I3x~\ap o;-G?eNhmJ=č9Yx"qbFQp&7#l c1m-Dj*E̬:kCiܴV x^^ؔKqHل3.vbuzkeg+X/d(*EF=!(:]K5& SX.'ɚC%|gM@!inJ/'ֶ V6p[#^nܒu͋:]DuO(:vZ~^3VV?'51/RmlE}PtżLmDUUK[)jFeߌ| 9Ms+)<%r)beMv1o'tB͋oNH}UwuN`Ghim\ c}'5 UTmhuEgpv!YgكKK5\Ml IDAT470^AB.dY ]7gΎÕ O9-c睡JUqk#TT|e|Oۍň'_ea9qp|ǹ+2b+u30(쟕im ZŚ1ԸwaE(鿾.:1헺6vGDzJr4)Pqk=angJffg:ڤY&9NC|fyVײ^om-O70;MvU=SϬ[=Wrz\2]KJ*z_Do]L,|z@ei5̦.$1<9>~o'fpaj{^(VP O_ wR5;Y@6V\\t'i4^(`s:X5nCU\E7m~nS m}G=Z˕=XlfN*nC%d5D&Ɯ4DVH@G/k߿1g@yB@ِX%h16%4;b4qJđ3U^Ggw(k4 fu)lM?Xoθ𥳐lBh?SyONJyL9+k y $~h _^cI?f .VԭZ|.oo;csKyxE6@:us*{?l]z7_K x~vW~_\o^jͲI$m~ʥVSE3Ch\u\Sk'ـB;;Biww&aᲂ3MȄv$@ ,)Y7F[+z=1MWzO[XoX^LcXZ2╷›\^hS)|n'e<fzM!'`yXOYYO͎l] R0uS 쎹ZqSר4yXErr{wssOi?y_0}q[݌iv,#ni5abLnL?9,ܷPIoe< ,d'.d- h8}1bn!- zb^sZYw3 YQ{N(NQpe%Qv¹+!Ij ;ge9tʚ.cReSdX87y IGF[$ b};7@3#wlyXm*se,F~h)QyW.?g);d%9qbYVt^۰Z+Zhv,'ll=08s`/~b@k5Rhx9ZYxҏK! }ڷ=qI`_^OAB3s8e?`=01?uE񃿃RvGBz89$2!& #2QjTg=N*GP W_|zi0YxUR^XH&IZ'U̸GH\2SQ}?sv&Q,F'~8NJ&&}@ qIav"BNFt,׎q!0hW:'ʂa::2쬏;,_' cm\ܖhBfC63En8 )i|&]%Y "ܘR!u -Te]aBHlH? R[NXHF[QyF=IϬGPbJ5+Y[ DkZŵwOPa 7 o]XHhoLWȕ*+XM=r'Fj5U ? ӸZ8v 뫉h!ҩV#!Ho8,0(ַqzK0ͮRHJf\ 9W(L`p/ t2jWd'^hqol%׸)#d w})G-͐ɶc\!r-nj;3餖b=QnASpm]roVZ|s{>!ϿE+:.gv/Fm3#2QjTz|09k.,/5\m[vzS(K@-֖Ûk.S.;6ǃ4jI3UөuL)UŦcOFLc9P_o{sW"zhAǝihiTIc3;yI"Zi\f'&Dz؃s6dzZ=4l+.xvד"Vh\żl`2Wvϰ0@Ǜ9f96ꆃs"$4ł$ESx(J[ [Ŗ}ve݅/id`Èڨ fP.rD_v,{\t*_18ࡵ\4˩su<h#a6sYOxi3GdTըFpFD37 Zeinbd ƾ~c߬˙ @oenʕn7`~2kSG0G6yҮIg tR{>S1ec[3ʆ-8:Z[YRٖ V0= hoᆰQOr̎wtG2L tՕ؈KOt}>so++i%GߓC;Hez~}7jj34[!}=Ǿ88|Z+}uGdTըF'ͯOp n7K_z!aƉDϿ1n³9~%k],\y% MLQb+:](MO=$qoŧjY}C V ~N3-VG:HPr S.JK}P/KCW2^‘}ɸ$m-?tzoM`{Iߺ}(L{0=)._M~MRLbTVZ;3S6GQdEx(.X+e8ӅjI3<:(/5Xn*16iKPJaJQp-枃ƍj;?4U>;Ig]<ۡRtʹ7z& -(03.rQ@2^$q*΂yMyAiF(rL/4#XC ,4[ o0Qu9㢵XmfP-'N:LYؔkfhtlY_7Ø0Rk8}>ʮBNsRĉݪ͆RAZ,h%vb1x)ʵ{yWOSqeqLI^k fB]jόC @t/HL5%/u#ҒDht*nMaPjV8m%9F6;VTwXߒG[?ƧjM~7~$$Q7\[?pa1Gm (-@ȨF5Qi)?(,aqK/[Ddv[a 7/UsWJ B:A(چrAoRJuAfC4[CZ)꽤Z⯿,M[xn(ll܋~󒤎LS5jYLC`~> o倇1F%vlhK7'ݔ"qjVsm]@ EE)Ѿqt4ہڬVi [܏J.~>e-X\n{OṊV¹ň]oPc4NPPQbc(I Gb#nbZ5;b?Ŗ MNdH@ڶIsLlU7 _w #á=z'6+4 iX[;k S5'4IWao0t |EINz}7RTLT bkwEoTs};ӷzQ @t]q3oQ k,bLtm& &g I4+j Ē>6>o'ג75@ے;m EňF[q}=L;#@1χ*}.GJsO-p)4В:=ehw@o)fnb%l\9דM]Ӓ)M3( 庽plPŖjRAg/GF ¡Z+#L4^n L.ҽt`hQaFIN /O Jes_.R=Ūܰ%pGy$޲Ӽ1v& /@D'8ZQ=XU_?yb{)Nvf0cs2`ne,d8S`ە]+VAQ -#ŽbzL+i}[X&z@sʊ s. 9{[]]6ʚN.vȩjpJ4pk5 o;4PJce9%I,xG-;avR@m $GHX=Gl]ц\4a:MM/r[ 3{>lo/}}1N;Dj꺄Nn5eh8ٕ XarRDganySȨF5Q[?9qCT*`-*c/qiv |:~'3GӳVJF]I3ٿGtsQ \[YAgKMW8W.ސ66,^\g4s9SQqPӳ .?fC/g󽁰ՊkB&ݻsj2`V)j2YsU`h:P:kTKAO#}CKo|mg[nqs9c".ON~",༻A6"74 KqO+ԙ~(Fpu5arL6Z (HFQ %-;Eb^&г(Ԯn -=fkeϿ{u>P@Sw۷)<,4EY⢤\+aQ\N@aװ"aliudS 70qW"q,qU⹊'}\m&iþ#^$Iۙa:|^ۤK6S|%je +T;>`[ /;pH |-[Dże%P$3^(Ց-OYXV柅O|E|q%xb 7_4N:um[<,L43Qb)ϻр 6 ըF5wgyLMC!_ iaڕe\Z&+{XY;罃U]$Q={f%fߍy6ƛBa,g"db[$x"(zWL-B1 Ҍk wiL|_4ܽz|elzòZH4Eo.1wi I7JAp5bf•7Hn\OiZPb{({K1Xa_K}L1F&_y7k0,}"9]6ހZ9m"8h%KST4Qյ.l/Ǭ ^ ~rDo\x6  yVD>qnλhEay\{WF¡=.{*Ԯ5͹\ɱS3RA9L|@C\e4ذRT|]%zϭ*q44ږN4XРӶk< r94[zWgv/啷Bl*.oװk%םds9=crL잫R:eYNxR\Õ՜ώq^Tz}C?ʈ燂ǾI51 4Z}6YYwI3nJ !J41Si?Z=tzvjC9' G"rPv;$RB T#{=B: Mn& ȨF5Q[}4LJ?O$(^}5⭷ Lߗ ^/P9|rbLRAlaea1VW wޢ } usvt4$ܴÉCբp(v0V71xJI1QuxaSKw7$^b^Kh-D0vMpgYNsЎ4y_(d 3ηdչ+!G8R:LT:c,=E {sŜP#JܿZ`7Ҽw*C{\\i tnN#$NH3'Qt!O #,Y ZX,", K14󌚴-Ghmt|Iz"aJ6{ﮭ N.4'z \j9RSKbkku>GVcx4ڒr1Brx y|?>+NVq,[P&kI"3^@!觋(kR+d@F5QjT|dϞK p_ل\][Ծ9oO88q}W"ӧ^fې_jYUvpME Zy N SErA#<ۏFt|婖-Nb!Gm(ߦI6\鼟MIK+29ȩ#+k4;F;2qVb~kD'pXyfaYXW-+&نcH+=@ZgtV[^?TGҩkJ{;1(s蘬i$h8Lg]3SI*>M>Pf[vƥh F;;o$pto|q0pX͸*NHͯWl>66s??ShOڣ\ԃcK4i c'k~anBf]GMa/aAV XFdTըF[|^sOԇ f`x[*{D榤єI"-ZEu|~ʕ&n"}(E'Ӵ!_2bN hy-afsq,b Bͺ]ed9&1g`5pVW E;o?C/,чތ[;aj,M*m$]CiPK.nvfnT%؛hi6vc(azȑ}ʟ ZTиTKSG|9ĸzB_ `>(uIx8yX\ԬoKᐓ<^QoVcAjfC@ݜ;mc9pdagơVB?M?O Cقj]xFM)(6DKږn&Wnt(9o@1=Zt<<,ި/([g{?h UWl"LDľ4 7{8+-$OK ,AjzoS5 ըF5zJ"?beu^yϙ3;>{c*LɃG&k&fZlOQDfz\3;W 8to{`g>`@ HX%Rɶ$8bRq*)ɱDzˉ-qU`'H-(HB!.@b ٗo}{ﳽo>ڳ[,\zAUH]KUۡS+jHH\J̄ln":Kpv-29&jiYPa At]wY#ñ9>0,)fr<\_Wk=A7ؑ3GRƉ}NjhOUny2|#%ZT{z2gg'AP8\욡G7=F!#- VRj%E+<^=I?(6?g{?dV1L2_NneH؊I"Z:}^)hըF5Q ˿_P5*n\qy'?4C ?V Tg6E_Q-4:,lOaR8I n>֓^X6050dn2|[ nl茢:L [ [KqG d(`*nV^-vvX4ĩw_.RG|5tHz+sEe)ՒW6 R랾LM&)OkCHߒ)U5'D{R.acXJ4Z s }GڄT @ni֔`rc-!56ۂnKX \WDQb|3Q[5Ìg9,Ajѿl~緖iv >zčuw#>XDݡVQE^sc齶}>(^`cKh(~Fe6) qls5^R03dV"6Uxx[.,=C"~4 e+\'Η.$Cݦ᥋1@Ҵuc=(HRR)42YwHMV'__KHSWn[}\d&uߓr:F\AoZE;Mdx5RP >vUM z3^ӣdTըF-Gf 0Ŀ`~%Mc66L3/dÊ=8l<2)ZA1_e1 ZW_7$1~#IB.e }oXv92R(OgMl=rr8e&~yS%\9ʳ>4 q D=4UVؾ9||vېv3^TJR :\|˥+1zt>Ztmw } )|\4_9 oQ ^ IF/d t8Za6«: IDATCؽ}6XK^!QNP.{ HóHCQ,R2,N;9[|¯jʞŸuYȷxWl %[ WҬn>H(jYPgO;JAji-5I釆(z;[>e4rt֥ZCZM{n};%h{O/xDE74[SU:Z40k۩eԣbAr[6v,LRe~RF r={/]!Ql5Dg>J-iijd2+M DsQI><A@y{'͑}}ˤyJRY(tX-sp #}d.owIS  ըF5>~?c.\r_{N[Q[S$L*_nv_wDK6Njk!- śۺf?."PM4(mV%1M 8^rkt)a"8toxX0G$,S ͑YKkh-5}9l$UcP,w_iUЅ:ùWeB_)υ,͸ sS8 39ra{!7?-Uߧ W}$ڵc=ء[.pzam82rbѥeCMVV(K@d}_H~Pos.jkt:V2(-kyjHRi" mw?yCK-;u]B,ۦ6Ryi_ds= o<;`q%<`Ah r23v`rL{}`\̬s[MZHW4Glp=@x-6ٱb mu$Mؼ 4bS3 &eIN;'66TޫV~~εdH j%KZ^OIR˫b)ip8} U%C>"SczU5Kt_\ς6lqҷ8sw,'os#A{]-]9_1̖vVn[fO;GVj'Cfub:@YRdE7^4;}fy*g簱23q-2@皸$=n+ӻT$ygƗ͹8bP*(XըF5B=@?[G09w(]~=?\;oz:|lQ羓7Z]G6JЙ-#_J_Fx mDJpѳW44iɯFPݘv^|k_j!WZKc3,Z{t|(+ [.ވHz'7&j2T A`jQ1V,:%MڕFW^C˹KdﵜtkEWbњg_ s3 Y(6w ł>V#Ȝtf`?3t/_ .TPo2V,7LM8\YNtp{l,ͺܛi ͋I˕y><&6ߤl0|?xqi*= i"a+)3wԚ}^#W kW#є38QdTը?"0>~cR?SOto85[Mk{uM-|(FhLڑ^UVX_i\)}=;s歷O(i nF<{+sUd0VKf~Woqo`8KB(hi>X6ijiMTji]z_[ّ̈Vײ Q@K@O9,8 "Lh ҄GRAO=ϕBqqe~yʅ(&rfvP7D?=֍,VܤK)en- "(YRFҽ{Et:qEFp'\GTJ57鰾ՐM=D]3Qsx"p›qRa2)V߳hm9-HS+–޻PSa.H줗iif8vtlj-xՈ1VJX#n4;$`ۉ8㰽g ?P`qƥ^Ք2D I4\4~=D&_,uia_P#" 8yfܗe1;?xxUl˽<# Ҍs׬Kj1cN vO>Ìu0@`jT՟Cqr'8A\ /x?ݶzF&PqoZ?=sk[!ß_pYN|eg_ijrWyA|E0Q2l,DEUV=m>\[k0t99}&4=CQ474X@uV7~%Dk'L 19WK=K&sc̹ "F[«x w'vZ k9ZMk sZxy(TLΞhv +h=zŴtli*_`5achˍ}'"JQ0U5Ks.cA\g*԰N}*BQS*+Ll'VclKN3%5Ak뀧d((3l7ιM9+B̩ZI3.\ߩVч 2(8k alyB4 wA9jM9\]Ix)iLS.V$~AjUZF:=yűʶ{ ^KgiDZb]>XPCŵ՘ Lssũma|ARAnx5/]'蜾<3|a:fIS{HhU$24Ͷ|fz3$Ndf[)i*%Q)dTը_c:WV:O=^xbz0oz䃇=0z fl1Z#g}elciH_1/ک1ArA<:x'~݂WX.rڗi5alY~Z-;fGܭ$IjVJ2 !_'=WVx%⤕d7sͮ5bKЖu|0mxrQQ:Y@&MCo<աm1-{m͌~!ppi bnL=JcjRV2x÷Xn+k6EɺX?{>RR"n7"@sS.5jI i%Zd!KRP|jM,8=C2tcK{9ߏWĤ&#Hy&Cn'LЅVsĻ5M:KB{^RL T*ib aHFD ϗJٙ~= bqs>^~)A%i\T2QĢŤn !MS~w*Jutem+es7}'dTը T<_f|XۆWSy~i@6Nu8x-5إY׾z]5>@PAkc`iVtNsT Tv 7>^XKeG- fP-nOIGY(y^&q9VdClD׾=xƚ s8>vQc>p;Y:hAS.^HHh[JCmr 7\kHRyzGN3Eg[jYj:=C"kfjLR<rk.e!zc'i]yҁr[(|Y\&|ETT!P^(81o./5)Ł!Jݞ3>,R^k̄k"ӗswy4#M}(fJZCMQ$<%\VP1̝\p6(ӷTned(҃K7-w\>QQا)BNӰ'IsS.) $MZ:*2Jb{4uKt:Kcl>xscspYg tud:ᏝĜc]=QjTb}ؘ'>QW%Բ /ran>^C8Nod'] T+IajkL?F{&st;HIhݫW!S\xB+BfL)8h6w2;J5-LIH$qV^ѡ{LݫQc'Q~a$9cR|9R.gqVLXqo8x q ې1Q=ZfgPͫ!)QK/Sgp-&6(3wnián+jB[6v'\-ˢȩ%^voZx'\ja{UG[6*Uw^xbJ0Sr6 DxgHZvVr=:TdJzf?q<|)0ouPr4s͘ Cʠ,{u+a*ʾqp -͜*U**T_F(y=5kӓaD+i}O1VѬ奈ל7=w+ZaaZܷ%5ng i( =}vSƒZIp%k2DVbXIל=3w0Z <(!MAA몡dBycK3[?C pUU7+L+O&Ma Mrfæfz\Թ?x%WFˊ<\ D#h&w¯ŋ!uo`-r!jT՟dCB(??J(c:ti-Gz#!@rp)+$RU}%̇?/sbyCٍwwx YA.CD2V\S*}fPjʅ}ρO/Q]ta${[sn߲۲tGΞaQ~sV*7ʠP/ 5)$ZuYn7 u$JR\G]$6vu3%1-̓"tnW3.3𺴖'pмt#>Z>&-iW͠oh=ߣ1rs#a)قMd}K!W2Ywv.n05&z1з /ϩ .Zq&nyq-Y݁2JEűOH=F!_"ZϨ`KU-.O>ΫiLtZkzkf-)aeAhiuS\Q(PxիK3.2;ܵN:DG}_1U׼J0^S\O1F~r7?{Œ]ã{7Cカ=>ﲾrdef԰Jɏ;Ce 腖( EY6{'%\=vB&U~='穔\./K9wMÕ.Z3QNpjIS}%Vܤ  S3B@F5QOZ3=OĉiI3_]4?<ͼxc{܊pVc#G]#S㎭[*h>l62X? f_#sl_gbX݂hwp3}v3Ǽ, \/|dFɺh5ALP?xǚ~aa: 90\oVņ$:E]-iJG. ^  cqe%xbrX(ee3YJS$_e`c/wnu fna&ȖYc=֖4=>T4~ѡ6`@gZdͣlUk+ɡ ͔^h)Dxe9fnʕMnH8Xr'ܒ|73=(k@$4xVRΓ BO>;Cp}q%XJIH6L섦^wacڂ´ ͝4ɦzIb o}"ٱoyRfL'X7yFКrtؼ3aP~i Qbch#[*@_ v/*NȜŌҖٹ_Θ"MeHFXsD du+,Zuyg;ZS_Y6{^ar̥Tϰ/G\_Ok\[K8T^WiMg(\')ʆFK{iajܑ 0~i!48QjT2|v2~Q.pҥŧ?}$}V>H gj??VӳX?_l- '~4߉S3]u^nl16{ZRU;+7㏕HRS/ECŝЍޜL{|eYTьGݔNL,7m>7PKA~feZZqmV#eq=jVʑyrA3^sdZxEZpt:G+B@r,+ ad q%+,BFszW/>NO{Wܝ‹_{mÍ$۶zrarD$IW|fǰrs=>rL9)Δj!.NvQ*pϮqTN(s ^vB9$4zJKkHM++ 腖zc9a/ IDAT 4ׯ|@{|+Z/Or^ear}M,]ƫ:;x }'ߓ)>7w{OgB BPsk2YYfz 5l,KIbu3ag:.ID0txMՃi2_6 x^0=5r/ߌ޲lr?quO=M#5{mA;Ua!L86/KS!;f'eE~ BU(n( /5jH0[wrQ ad&דK~J&\ OvT$朆 ku+%5dpdlZ@NS(yۡn3SK01й وO[̵Ύ> ӥaO?f'ei%Nc?,+y [3t^Tp80;|aj 2]2]$ʌ%4:}Kx`s=A}h|NOܺz4jTwqZ'IOΜcm~=_΅ o{h/O}rIJB a @v*%UɅ\i\IYeӟB;WtAعN$Q,PDo onlBn0^s߷-eͲ;1ůn<Ӆ[cO3b HdRх~=R,Z8{ҧ s!v #(U6h^Ҹ1 r^`EkcGȆuS0T>X+s y<'Zrh+._s޳wdJSs;m~F  ] R0tQ,S2ڎmloĹp<.lE<0h8:aRZ++^=p{H}"A07pdVS!q0bHr$FkX;HS#Njj\&+q]+[))F-݁IgѐQ7aidgp]G[l0.vfkdM[Z(Z]̝eq !O5{\Hen+3lqVG*?r7f'\#V4`O yq9 R)ݳՇv.w7#g~js^cViaRHf70( Ւi!Pm8mV.iP"27Ck\J񅀭 i*g~mÿBN. 7 ׯEoLO@j>~G;ћAYECZA+C4g8w2@F5Qu~n~LOy|L/E^@=nu1<4_*eHTʰx{^YYu`]/XCqn͝OyLz8 N,ֶRn'> }ֶS=q/VhBq'[Ḥ_]OY6v lJ!WWb!:R*(&jZIS 5@C/Ͻ5͔3$&Xg{M?L vm%īJh{wf'5xt2a([IjI2s(dY/ AWfKh( }Tը{8H/1!¯XY_^]b?@<4Y^ն+f#lpyF8 cZcN HoVީW sS {_58(kWη鮔k~N2."NڷB2~(':&MPZf&&dF6H Og[/F %uNY FJ !qvq?]DZRd\-#. 9QwNqilG ^(`KqzK(qkb:m[ܼqi,θLd\YL3ew vi[_ۚ8{Ϝz.2,^Mܶ[wf=}cy##P-4r%{ZvpCKԑZJl4Z)ݾ&_]Mbi"͔~G>skPj>pfIJƊ|R}:-iP:B;Y|91=p3Pj+,ǒn,iX߾Hoj;a7!(f\2t)_̑SczhkyE88PN&ϳnAd!_. eWom\Y4Clď<=Y^Bo)5#n>f ϱy^[9H |Y$OHu;M#^ģdTը{PIͧ><_^'I ++/3]C+pqb?$(|?H3lG$Yk wΛ5Uzh-"IffR8=ꯂ| WWD,ol5dvߍL48N:wͻ6S Րvfp(snRr e zUh E=KqbnEœ臆nQMTƊzqDDi0_Gi`o#XBr}-:Y`vʥ1gzi_{Xf'[ľ7%5ƉR,,y{FJ'2D=Ca.Nʖ 9nt0kĢn{E<3r vF*٠:|f$RV%=-5Iے}J}{@3KZ(Ŋ?v\ğZY~vjHR1kNo1L ~ȬKOj uGT˒h4@6|` ׯcf|W1Fi #Kw 4!̖wg0q ;7%k:Sv 3 jEKFe4jTʨ Ţ|}G1 ݆ \Ν>>Bʵҭ[<`Plt3u4fQ_͟4ce3_6پ'BBT5g?N{󯳻4EĞˍ 9 LrXvdAi V;ee+k4nʉ`UP`:GʘHp %uzƞ kS=OGGm7_."rkzU СGr7Z6SIyh}G8\Z\W̺M9TJ҈c!N& U uje-[l 'Ou=0llfBq-a$gqd8,l;@aZf8Z1^{ ,\TݿDֵq"A|@t#!ba5wI 7֓yf};ee#味 .! ƚzE601D @וZ.)VyH2WɯɅiu-^8X"WڙԻ(N%bz|_gC9滊UlzE lhy9dv!-VQKiNOum-KY(qW_{zg'v O7 Xl%;_ рmXU4xBI3f т|;4ۆVIS<ֆzU7M7{/%q2@F5Q?]q4=??fr%/'>WXpanA;b #j_5QS*߂yNH N}_!U͞L'<70 TLկ~a繟#6nMe-P^V]::rta |_ j%ק^@؞" ӔO51!Z Lt3aK#kq*Tق\{(^0&Ie@cUSc`@;t]BKb{#(h^^{jw <Ȯ~w{{AR(REŶh'X&ؙ3ēJ&JR585*g9$Jr8Z#[6j_(q'@b߁F7z7{_wH?ީ($sk޸͍4X@=n),+ 6 P.j].c{XNCȅ 1Ij}a$wO8Y290=pxﶴ,_J~W'>9k p$W^< ;%atߜ vM:gǼ$K=A+Σsw'_eIޥ5fJsÈP9&Xrl׀t3.hC@ppܻL)ϩyZ ]snJj)GybaB=~gZGNma kX5 ;~7&&XLi49͹sG?zuǰZvG0b_>h~j~ kX\N1PBZZK=vjͶk# ~8Ҭ훕]W|Sk6M4xERkt#ww݁nt wd+=w wqSTzG&Dh.X~ut3̩K?]!jIgF|.%&^s/â7)JmPN$ ICB.\OyKE(O @Z~9|Cnحl|sYb~07dPʼ/9 VײRn;ඟ$2[D(}}P=m!N%aZylRR-ЕnWTk}F$Q|>V_r߼sFo!VQ nl؈d]Jjl녖MC?JNO ╦w0H[ Y7̌< 7VߏĵNJf+efee@'ov3xtxD(BD˴{Di%)_{C?D={.e(׾(ȇ`F_WY w}#p|ÕjbU`.EZh,(`n{rAP#oڦ!Ѻ H4dXְkB=kk"t+}VG>xXnoJ㡑Ey""\XNt MӳTj39*n3UxnrYLP~o߈d IDATC{ޙR5DDyqfJBnu:oĕ*L،2Ls2|$% Scyp.q q*Oٰz/\4inRA6yZ©KGt3lSz#k&Ea)5Db?#G$l.W7SR+cE߲ܢ]Mp'jIS)mZi = -S!? H;m["nmPxcq? d-Jje$y;` +φ; \RL//[Q;R(>8 #MD4ZRR2=Ⱦ9An{BG*hC Bf*,x.-M%kZ]1X{hMùfd̈́)G^"x֙AA)>'ZYf g%7 \OYde9/wc|rWAJ$]p!z54Q=C/f =,ǖ͖!M>@)mj @3V:Ƣ-&3rAqq!AkR{wA0z_15]A6$xڭ7S<Y_JZ=P MDCH78'3#c,D&ϻN a kX/4|6~yRNpg#^yx<<3 wz$ <-ÏUZӗ#wcP*l>i4:>w1A/WJJҏKtz/qsM7VɌY6؛;!6C(ԫ]i=}O}rE_j7ZNh#{YX_jb*nNKo^4_ydB_/y"\E=| :tW:ϲ+zea9!M%#ʐ+$4oz m:\.op`ej%ydM`[Rw&w$]Y>g8&&$.-x=53;6Ij 2XM1;ne2lx~a!,k S-&խkiuc;)$#KXzh%PG }?R$|Jf>̏9Y>LP*=\')0ZBw ۵5wwA2F\z}9Z"iAX{819c+uHa_k1ƾTS3D@5a !ۻx3>!<M8w^z| _۵Zcq+vÇ&sMsQZR'7FV4gD|ǧ[{j JtX|^mMioEKV ^n i6ZC/44چ=plwP x=6E)(:xQj }}*Q%,j(RkyT+1?cD(Joe(GɇhTn&i1eM8L U=I[Dָ &4^F5M|kh%V4 uxݧZ.Hu!lyʼn4Ɗh^T:LPTxZY{\86ĞѲ|8% x&Ĺ>Ibiuq^@2"dk?BoYC05Q()u3a6bzW#;v` BpR4$V}Y_3iE/vSc.ᇫXdY\jҭ^Fe6pSPPU\>ǖąO}fK}BWRhEl}fJ{QZF1ddc5R 4[(^ǰqt?&f[kiP-k-%qS&f`[& HDυ協=3.VR|em/?zrM#b]Y.%)w.v.4?*ղRҬ] :$Mݾ#:c>?x%,pְ5?nM31; H˵kp Oy.ߞh[:u'FHo.v5n Y CjU(hfQWƙ]5=1Q"[Vq490Ywp62Qd27鰴fXHб,{)giҁYf]Yw04J/EM?\,TPx e|z5 ִTTl4qs }W x$nOpjpi!a.rB%ԋ]. %#$o3:Qi3mՄf=ߥP*(©H\i=O6νPU,Gcnui|*E^61^ ccf+Wczc𜿞5)7JLF[vOQ.HCf3tlnrJB{:`rTG, [ON% Y]![u&7DqZB{NbY},R.qv _]F dw(:#Je3 #dE뙥 L4PKE+Mn؁HcH{VNyϬO,<{ׅM3;FGXM~F(&iAtl>^BÁ.T(wBI x%~T ^U4QA%.N,e)F!Xk]NX.jNxixFH!Mmj> b]z!6o̲W͹|6υeW6RrrEwZYI9CԶA'+E *r7Х9b\9P9(Gmes{?C1z4qq,:͖ay=Ek=ɐorllj1vYf'6[XMc{UKz`. {VJ꩕kFٕϹph(nKWCvQPj ְ'zLOkQ(qlv y&ĉ_ަ0Ƽ1/9z;ힵkYZKN^LI:@5r4yZE;3?Дz@ 2~eB3I'MecNFJi iڵ~_`flAg'ǭsm+M9O|#: 65V.n\:QB%Q4]GĝZ+Y& NG/vTK[mD= ·#4vVf{؞pa!yB;o<QN]Q,Iڥb|;*(:ڤ{1belja ;9ّ{bm(fZ {խ\鞫vZ m.z[֛)oH ۧ3F{}yVtra kXE=xcl'FΜqy?k-`"'YѪg+%m" clե94dVK{g]ZYʊrIk\R,j]u &,*<ſGxBz}C4/ n1n槽AӲ](%y)- jOCiޥDߡۯ& 5ۆՔ~tb(uyED\md] )9gtB4Z VVC|afj<Gs^h*Ք" Y;` kX/8'wkME W*^ztk95?ʓκn/{reHEzUȡy2Q햋yS@xBYGM- K _sON|]^ ^if٭-ʬq3;yқ:t68X:;踃;h))%I /| )"K?ps9.w! %LSizGG4+)b E}_jFO*[Z+%*"T iSK0aJYN^IY(In߼\c p]ifFѪB/3- )Q(I/Kvl73qqĆ5 $ #\OYZMffv¥oq n)Ju,`{0\3;`w{cE_(w V.ܷVÑ~blV5#SIh\OH4o#"Gӗ"_*E!轳n{/ԴՄF[n߲ge~ڥZ¶</"/4փkh6d닦[]Ec@{*eiqIW$52tba9 B-~}71iYe,2d'f臥۳4;Fr:y/ȡ(O䗢cU z'bۜ>g.Ͼ+' ߵ(吤Z)>ͻ01LwED{t8.a!6ƒӷ , pְ5yxmgl]~3g~~ʎaeg wW>xp y'di&w״5h:**ՙw,.^;i'N1]4(Xo#V|.εo`안9&>]vΘo}pK+7c>ˆR7,6ot{{]ŭ\ȆYxQ{7@\xuSCpuQ|YYWXID f|fK92#ǹ2n]x{Ͽ>MÃ87چW$N_8s f;~ ZB85kbk=BjrRk.zOA2F6#MX?N"ԕk)|gS,SR!ӿh 5oi3'Ɯu^-e@ )*,j:G߿ Pk5[)J͖mN *-W['Cq+Xr-d%)VW,wϸ4;VW sDu$piXXN5<gtDпÃBV62S8S}x|tюdv4\R)&P? :lu *ǂֹN/=c|x  q\^wD 2I*)ZFńQA|{'0q [L TJqSdqrk D7^[ٗgy;#\]L0ZX qub0@5a F=|_E_Ǩ!1Qr̙Soƿ^Z3 b.ߣTҊ3}Cot翹"N h[}ŏHoyd}%cbt+/[ף; IDAT j)WhVE7R,%C$XQl9y1텖JIsfJ$hvEh e;-fe@oe;ɹ nH nX~|,Өo/3|%5]՛);~F %G:rcG\_(+ρD+au1mXN^χGl5".db|eh9+9zZ-i4nG?}C,MSQKgz]1i$\yw3^(E?Mӻk2=xWa4!j~ćQTĉ|1YkjBYr4,n DapJD+Fbrr&4kK9#n+$ŘsyS,l!xiκs5W{Z_'G )~j Q"&3@5a K\- eZK2>ZY%AUpq6lEsQߗyo#7 7VED!Ւff‘d9 *Mp@$:ӣ7}x:"Dg© m m=26R $b&N bGHe+}6"NJӋL3nZ7L=❨;O9~?l i7:AbO5 ebKJ[rc9;+aoLiܷZ &SX!sssJEZY4{\޻_[E=PCK|O2SoDw}(-z-kݙytHZ,')OD=fʀ &#U ot="A95Jszi"Kݧ>{cq)ISZ h(uu`neKj\lpe%h"͚x|P.9W+?c0?rQ'4;vgT8БLuZ4S uw?Jq[iW]K{F}6nykg 'L`m3kK='ws[Bf#kT Ւ̕i܏>7쎢XpJc!&QtۊօM7ҋNte#ɬ7{ɜ{﹒3ђ6)/{==ɨ6I=V.uH+eOO촻fpuI(x{f[,j>06P -t0޳TRVSFm`"wAE=e3.~Iv =_YK=϶fpbD ZQ vWٱ[|Q͖h j;YP =WRQS;x)C2Qv^M#A#=F([{05p~&:NDwQJ&10ZV/S)-'\d.Uٯ8lEsѶxAkaSq*ϼySҕJ?Ϳjs/>Hhr:B%be18\>v,1bn% qJ)T,u%],o- a3z $/0t!.>d1^Ź%Lĵm5a kXou~a#G~q`sΞmP4XboΆjNW'G5@5 Rq1^,X0GUl-0\l>WK#vPDaFhy=o[j twٵO r-ObZBcS'Md4DlgR\I025ٲzd^ޢÇ}d_KEFjH]zYX(v[N_fK7 u=Al…"to@rUVN8vEPnM fbآ1BBk8}9~͆^ 3yGH]wN=.wyK,וuCx5fjL塴8܃eAj֛)qZL=^1Ԍc=?TL.%8vtW2<.Xr.J/س8TԢӓ͸Rp:Yo9y1z3NHh)jU "B;ߓ+]w 2 mGgh-al<j_q] <5Z˵8PI_~*x8Ty_)02G'iζ4"_ǩ{wE͞l5B<mLjɶQl9}9Pcޞh-K/eATӯV#>tyN`l%m\)\&T8 n945-ł3 `ٖɻ ʊJY(a;*Ʒ$&I-ϟ8W7۲S>.~@oyʽ53!Kw!{jEp=ӌ- K1H($\ݞnR ,n6z.XI>Zħ5VKhμ W{_ݷǻF' S#v 0rxGgYH= ^>dȨwL:Yf)=Ccohw=-I ~%I+ee "NDPRG|Wz[~d3W$u,ߓn!iv) |u=6B4"􄫞 ;=˅5g.4d3Z,~q%ͶceJQ[m0WQ,*aJ06kFhV7R>ÊhYPSekn R*j U7Rg#mC̭lHjzc8w?4ݞ9]Dg͎$erTPP.J.]uk@A$ ZW a|<{yBV,&4mzMS){ E6 b,3:4 ]Cs]$a#O_ZMYoO1h-*ЊN %µS\Zh>UY~qqVfgy܄Pbe Q-ǡJ (6ZXmX\KSu|>!I%eפ{g E4:ĉ :w>@&F( +)I*ׇ͔Ȱ5aycnNw8p'(Lj"Õ+JsmO3Gm@as~VǘbLlЍZ>r~ėr|נ3Q w"I%4{eI=ݾaupZ<8_(k\]\Hxcn&@^U2L5L'wwxZK3ܝjǡݒY4♈+ / yC2a kXoJ3[k##?&ll./; )W)[K6m_jnS{EBAgR+k2;l6f|Ce$/I%Mg|Zse=˯}Ş; -_O[s3㒣P*hAt4Q`;g֥\Rqݸſ@r&i]2kC%gjVg޴xP$ -o{ݜ8񺃵gL-v m+>?2RQK޳vScB*"Yx:e;ܽsw<G[N봻Y0[l wr}_|oK]#+7btZ#eKњ ł]O46߄{}qceb3Zenҥ5L啳ZIs];Vuf~Fz% t1ÂܗcmCw.D+up ?P܎reQf A`zĨibJY%2Ex} u+ rP#?_}seC5;y[E zk7#jEqpcb$e6oj;w= 'j%Ϛ0@ވF ׳)3'CV7 d#Ɍy_hy q+K wbQ=2ֹ1w?>3h$V72a kXz8cnj.ap<ԭiz:xm[@훓|zU3;.$@sGxǽa6#JwnB|eI^fBUGϷ3咦ӓ $N8ϚRIzO[sbH[?(bQ&+k&G5QlN_ٷ˕tߧ^r&]j#wJ݌S*S8L<>OTPx38Ք ==b ȍhPlP`&J,bjOSJ CLzz*b֨M#ދc6[f'+4T=G4I8s9f.w Ҿux qs+HMÁV4BENY^Oya\kY\Ldyf=[js(456̈́e3@zlDl-,U=,P #;` (2@7v=R-ߒQfS74iƢ zןcݯR@!K7L{ܔrFsC_v?2>KroOngvzJ)3 $ԸKb+>p%ȪFlYmgCygբ-7GE!vrpaPn_fy0va kXC=$?߅lllO3?o׺\݊z܊~x g\GW/opKRNuBrW֧ǝ^ܒv0= Ox1S%8V(jFVL"ʚ卄ѡ?jsJRnIƉQg^^ߘfpJg\8}+^|K)Wnǭ@͹" Py3':qyS{Vlr-5wlxŊ7vd}{1coUO+a@ 6HS˥Ŕ^( K P1#sa݌`{:#ui?9ÉC>˥o<5 %ilF=DYz"w2*}_aPX_<چB(">GreIRljTDX墦1E֢P.*:=Ѡh-f kjue$'zYo ^XzeQk| U5#|^/@zYQ)_J̸ˉC[Q%~kaQ*G=DWmfz ݞ"xvvF_ɈB$tr=HS##ڼfMsp/_ IDATqG E0,g:P xL:o9Qd)5~n;Y.j^ ;ش7P+-AÃ,loz!I|PJal)$ӳ*Ƈ\#B*;־k2M>x=l|*%wԫq]4"ٺ6;c6q9hAcPhqOsW1WFso5Or]ZˆJiEae0֢_\s^>| ^߱W{W{c<?0Zܹ?K\sŽiq+yq܏?>xaZeXX* 4Qlabˆ}p[%jz"Z<{Edc;c>լ!wr틱Bon+¢1f;czמz_TK}.cuy;3Y =AzE箧 jM PJjDs%ezFԍp <>Nh ۙdFGמ^֬mf QĚXae6321Ev /Zk~OwA&zL)ݰeKs>"T>_[3)Gؐ#%VMQbYyx1fm(}%,eȽ72qiVСYo&\w^^OϿRi(EcEm+o `F`֬@tP$9?M%Ȱ^w}*/@nϞH7RĩbJj`ݱ*HSv UʚzU1;i*7E|5Rw紋ܥ*W*_)mM fʕ1 zp!a1:P߬j̹+r.Fga2parag=q$)/B76N,7%ʼnC>ᛪu]f<Ɔj>lro\dnR2"|KS5[HBrJD4 PȵcKq!NNQIe7_Fj1>ha#rP>N(@#E[x!'= 5(LGcޫo XRJycY.ĉejlG\.v21޴٩RA硅zOhMc^w;>~ɵ䓟Q/4-@Htܼo @?ʾӮJ3ÚjI{YZ4zLV4?}…%֛;bS څxfܥVV}*!c$XiV2FQT v2i PMQƅZJK''ǔ fu#゗ ShpM4Y Vw_Nvh E%z#g9Z-ڲ\G' FkEÆ{y}5G _p- &\ٟ:8뙑@QU9Jj={Gjwo\Sw {'M;H*"Ȳrbe4IE7@q(}S.xBN0ƄI:0Ν%<.^ib f=zpu7 ï} -/M^Z&Gnݐ@';k >p g?]"NvbA3獘j79oaP.I.t0yr\dq쀤<(TQT4ZBRB7qbYoa}Kt;n)ĉq V/cy#cjNůYodOOE)[1|(sn{ͫMmHҝ0dzc<‹dS.*.-f72n?3;0\u(VAեc=s \[ɇ:94Z3pyd;?A[_}SG',,+'C}/${ 4;F]_CI)GV{7i+n&F%2PHSo&pR;s;[Xuz V[7ڑSuIJR)fzwzܡR#TPi{>堞Žt7'p 34;n8z!<!bvنB#c&TԔ)XT[z%Φv3(\X/Jic Jƶ8Di%Gߕ̓TO_ehĢPQDƵXbOjgP*(͐o-k_7:@8y7MY u;@O̠ۗl,-9ݕƢ^T okٱI ե;74zƁY<ע$9_SQDhj5{@yW\Ғ׻0|LT7GpͲOi+˖( r_PT ƅndv,qW(d0 sM겤gق)fqMHbjԝ9A`|Xt)B0XB2 |w.A#E%NGěӛQղ>ndtk3JAs75d[$Qb90?|4˅Gxh8 2adh-Kk:& Ѭ:ppG+ҋd󱶕,j7r~_Y#+g U5J ͌FNVT ŕ;8=q<0-m.lCKoyګn߄(>6NsАVR E#.>8Oce<8iyGkf6;-tY#(> ~p[zEcO0%Nl1^lgtBYU> Oƾ]>Tu ?EC1nHPJz^;eZB'4xZ?0\ӹ=hN?j.#7Z%EX(&b2x{ u- "Mq#KA!$ Cїp;O ;ыd{*wFaqŴ;TRY5~ _{K1 5V3{>zw{HI+r17XRC=PhT2ǹUYz$?S1DY|O#mN\_$ǣ+ԯ3WN2(ipCeXYOp@Yʉ\+ XXΨ}^ pzԹ}wqC;u+kbP- Eox@:3c &빊h,y٫ګ=r00g|kM~ ϳ?;13c/cO*H |(Z Yۏ$??u[-SӅUt-VQc*MMUt#Vl[Zsp克z4TFbAݒİCݐJ5I.o:hn/ei/u{ht,=T[$dvgbX0}'piI;ix]=_q񋇨N(ߋ/\H]xܻaŵzU[^q^W@% ѾICsn)B]c;َ6~.<3U [j|5OыŊTosiR>Rsrt/R\5Z(fмljӢXZ9an{p>ll<-H>Ȩ7 YȈv%7?_8\Rd)hs:<|}ǃ[!`f>F|㞚F<س^՜$ZšTg)fU2̨gl[Es [VګګɌ_qG,ŋ˻wy 0|-'1[ Jܠ>?ad*U$A bSXZ7{۽h6Cnl{)sc|HD^Z\=k#CK)VR&ݗ4]<81I)^n|:&qJG;~(x-kr1\'E5&cGa4CU& Oqʿ6!^x3DKZ,t iRJ؉N:\_M94罪bs0>'w6ީܭ N<š|.8dʦw effe}o)(}g.G=HdY~l$Ƈ4p.ѣrwӯBPp OR ƱPJM'MPա\B@RH%>c('zpp}kyj̑{ Cns 7w4'_qGcYo Wƞ{V{ 784z#C̹@j껭- = 1;#?R3fPͷ#TK~vȦ9:|!{if8>?̚kIuٜ)Rq #!t݄V;!iƆ[Tҳ]c +/>P.*F@`*At;њM;ϟ_[s/ܡêTp5adRp1-%%%:cfܣP +rQI7-@DE!ؿW>t[MNF1 +< 2L1]zƹ o#uV.K FN*A&1Ld-zEw4#A1P\0Ul D[FjҔ 9BtdjǖҨdrTE>6ۈ_ IDAT[:4@WZ>^d)r,BJ啍Ji'V`1E u9;6 ;zJLveG`]E|[ DXuB{F(S߄nL)*Q((/PV8o|jfԥd迗d## G: g^z5PR.(elH3RʾlonUd`dٍ? gF+#r`mKr`zlۚ*,/\{V?u}_~gŢIjc\Fb <>P&p-p\Zm%HVN6B Z8o$z5mMy5IQ)XOh&G]yw@Ct6mXh81Xc.^(Cdj@_'`tjwZOIFyIҊȌ'27FƝ]Fp|Fb7ʄ !(4ŢZ'T1ywZ~N.Qբ[$4g \KxNB ^Wη.+lrKlm/מl=ӽQ8;.2gLDZ֔ a$ ZPҜM͹'R(+NG:ɥ&-! o7_+bw:=P)]UK7gZEsrMb!pBP6oPcsF z;DM2\IoyCUn+^{7tm%es6HEV+H\;te*Y]7ĝ()\h$~ytRA'1}n gmXX8q]K? rGit/!0y8!P8T=#uNF}nF{l5W#tPqP#e52mCAVFLxA {eeVZi- cCP\֚m;j+ҿ/$LkƜ|SzSN;)|s6Y5tL!P|Řv;r1Y2y/r?7ll[8v<'n+9kA9<#Ep+̸éK QW,YQSp-^oySs{[dS@=Oaro^oƆ^=ы,'^=}vнjY Q4l6-IjpWJӖP #Ce7{dj I3-j{)Is]$Yam5E(18(ͦš5Z2LW>.c.L̏}_T{&ƠZR9+''x;#'t_gckhS_aQv۰޷HC)F*l-b_ޞ?4Vh #5#u}COjè$u1N_Y ѯ5-' &=6/)^.ٙqf [ѐ+KPQwk?\5ʲq 틓Ⱥqg .M&HÍ ѲtGOKEƶp ,O>B{FUີ &u,Jӝf:VR2Qb_ur뫒cy͎h~W@ [Må &w lwDc[ AIi늣X\W<R6(=:]#@cdo3)e#opC<<I*^d2;R*:Ⳳ 15R\p+Eo;d0cTHvBw-XyHtn 5f̾<"&r7]:BauexXhqˁW\GNϐf/O {W{ݾ Nό|yÃ?;H o<NG3't5é3t7%Gn{+2Iwgw}ii?P>4?iۆ~eU{?~JgӸ!.RnU6%"}B S(ھNE=LtD|EhԂ5.\Wo)Oyx_,Mӧ"Mţ6L:y$q} <_ RFR+'SS",k >0Q h Gn5(_m%ҝa1W(SPO8}N/%Bٹqc2}CY:}.[-C1 hpƬneL9υ했xG"佁onKsA1[[m-=>n,of,mn[:$k~O HL 1qsr+^S*9&D"چ8 mr;dpC$d'ɳ>Fj ۊKx|Bh\s_IE6 oNy*|׃4׶7OI|"sOu_4~Vo(C-qz'5{j.\K@i&FO;Y<קxy t@a"KmhĢSQ h#ҕfyB+2P@ά}ñt!>v_b7ЅA0u#6|X_P:}[^3+K)v^[!icr C74{ﹿ!o7ujY̘usif 4숔yػxQ*hK(iqq8X N7Xod)4V4/L&*EĈB9JAθx-ejQlt92_wq*]ܡ2FIT"6v Vq,y$(E_p+NI͍T;!ME׌lrl<@c1:|zg=o/2:O͏r;_w%ƺ%9JaVLj}ߍ|_N;?oֶ2=`,8Z6))zEؿee^2We{"X^Mx|E ?X׮Ex.["I!N\_K_qp^^큐]$C#ܜ{\zʰi>Pan;Q.*qOouRqi0PA2|ᆵ(4/Y KkcD _'E'viuyn(/(ʃµma2c)4Y?9[]U@9?u҃,ZWn'`O[KcH~mFom-б%̳[k'ĝGI/FPhز9{>s-Xg|h KkfAd <--od7<ܛ[|-f\Ɔ 5<]/[̄K)xBS\ʹCx/>xՊCp[r&Q4H.wؼu&a,팅&3{]Z )s9E,bA@c_[UQ3-lolz^d(Dr >pOrJ.?iut' VZW&p24ğ?x(d_$t -;SS%O=3Rssx|L7t ,Q_H3.$b}xFF 軒@j`Z@Hd*~УT]kR6 r~'^|%;*͌KjV62:}Sv7d5)EyZ唣 ;:ϕL3WuBC)zɈnc{y1!$Z&\./tZi6//R+uM)Geבs\ԏTѱbP:BYZ7\89q.@jS\{lgL8o4xzA޾BOVV]_"GΖ{06$tBZK!PlNG49zB;"=cZ wn]ʐeh?IٌPL?̼@$divb˙ I dJizw?sx[<(77n(_٫ګbfÐ$k2.wa iA/-cT>KdRF=PI C<LmEwKV7(ó_fo@*&ꆩx_w2927갹_&uנ6 a溤gp쯽pYp"I"S~~Rԩ]ƆW*kv%]д%;h_UԊvZܘҋ [Kq~|ȧܹ4"݅Սs. C[Պ<9R d4?{m]y~~n/ TUB*%@06 =mc7=qXnϴn{֌x66c  LF!$UN/n>7s{U*H_sZo޻{y19yo}v26,tţA7R-G-n_sN_~:j%Ͻ;t[5R?^gQG?a1pcNHޗ$AX|7{ ks!)^qK}S_((?716h϶aWsaLzwΎ, g7szS1޶^(xd&7V/Z w-5@DY~}BbNҬTiAh-^jաV!qz\Z#f<1̶T¶nC{"XbB`4*?/!N 6LL![?bGކ܊(Y$LLɋ7Q9*![ g&&Ю{7t }G6umb M.G'z"+jnv([m9E5ԗ!M?s-,M4e|F6ٹ凛q@ޢqr96-)ω蠅hzO44pBydhMb i(ZE׶ #b::`Mqf1)E7OO1q,-{jm3_ JO8%NZdv IDAT|c/]>d"fYwә7֭Dx߳_b|?cڃx%K19zGt?n Za4Lp4}"xlD4Tgxٳlr727@R o3\ |78DՏy2&bZ"j*%Y}o)'Dk1}ٌ ƈ"1~Uah՜ w/j5 –*8}ʮ ,g l۶мJ9j nuj/fB ?FFkqW&>w4!OYJxwdK3>AՄ{9$ רqٵUҪ Y9tF(\XI& /cQԨmEaalL_kV(Z6(N$Gf~Y&<ϕpmqHqeӎگS+ ^CR"cViYZ6GFI:X-zZ2?PoNH{, ʑ(}K%!DR~sg~Y4 &",?_J7d߸l[.tr FmAC"vla|R"~U\vqRh5u\(ILޔUdX 5o{Rh -(@86D_bgVӗ1,8,G(@|3O Ã2slNE> XBn^5?l̅eX{xv7Y9:A3p|Y,z z{7!?`ɹ"QZ/]8˥$asK8d0HM6pfqYOlOP_KSř0u*[\|Fh@Őe^2T"őaf߸hu31-ǿ7>9Gdlj wt)'9ߵ vXؐM[ 0g]Bks5NM~d,4&M c9f"X`cOQ,$t*cQk5"`߈J=4C69Y Jx~U-~M/񺛿I&s jp7ܓ_-ד- (ȱ-p,El$> s1WoulN:L1?"uZS+zɐޢGοK A$hu:ϷqRFcR0\׹S QNH9ϧׯφ\wVE=,պrp+o"Qe?l@Dt:)Z5~tCm%ɼZ'ls Bٜ峩<^o\_Q6 !]8OT*LOC6# ͮ.=ZJcbfKs=N8s 3DyG%%d' n;N%Ik \Be_cZfc}o>B?BXe+sD> q v^9~Rǭro(`U>*c/+fb{" غd=p]ݡxS(r8;$\$>;Vj.Qmpмp6hu ~@EGR[܎EymWSK GfnʉU-LCxPLxqפr|Ncg i~a,Yo]bhI`fV'ͱبMIu)J%: zV"[OzKJ~?>ܙdQ*5ZVyTA+ٔOGz+ p2BINcb1-s=n%CR'Ck(M7W(zJ~ӸsU_kBV1{iY٩T_;xl7mz[oq^ŧZma[zS7}M(AP1`U،3 MZ&nHw*0oWfB!7 O & va9ƹNvO_Y6vȍaq%E]bNŐS! k1; aiIۻHխn]ڃ yneo/ry'Y ?o@DTy;10 [m,NRJRO]A Y0)?HK1w6ݠwm1&b`bt g4壟S؊G_8D Y[^!$?ݢl@Ҡ!J 2Ae"QI88vJ-b|-܄q.aGz7 "HPT{=i +Qa-I?P_J+[Z=0s4m./4,Kl (bl}\ 22!|!_VfVM=`M6#퍲eAօ1g{06 $<OT3M?!$urOQI31+=(p i )cj>fWVKbOL ˒Kio^og3̘5ajB>ע2ut6|&8_i- ~J)ؿ3Y(XJ .jJy͖QN a-31Ѻ0seZlސ6%ԛqZ4QkVbrMܣ#2):Qk˚yta:߭kNE̞oO!YB~P%Q.|1 ;$!>\eFYQ:Ng8A "b[EpoD_2{T2Ql&5-ߢHr` oŪl:: ψD?5Ľ+ ŜP7Lso݁kz>|jtջHZ#!p'΅3Y/&zfQޢ t(#CM>g&#n?um65v\>Mi5~܂ŕU,(ma4٬Pl)YOW`XPo)Ӷl4tҁ8bAŘĘ(iV[B҈RdK՘tL)- *07}]XmLm;LJͪY,ކ!k}p6 =IV,RQDy}|pA)`bs4}MX3+ f=Žy\I{, I-zҭnu[WA@y[R)f˖P0Fo@@6jB?/~}2a5R~1x\L_Biq[4weB2бNB wD"-.\yg\*L&Ŝ8,W$԰l[9?qK1' >T`/nNf"߭._4F]GۣTMPJu(B4Zbe\Hu:>Tz_Juepۼ\s{Gv݄*Y81!qdP硿bEr7Kߧ7y}R'׉V ffx(k|P\'9~:Y3 Z.o7I +rh wܹf8,I/oؠwBm5njemgoQ2z`ڳ9AV-ĚozESRLa8*'w9b>~ *Y#|L} ŕ^K,.8[1:òuh[9B,lK,~{hd=ŞT1NCY%SA͡0/ ²yJLz[--4H][xyƝNK;ɾ 2`tRe5qJ4[B@5&f#4ťjIadc˕ku\[񖥙_"nj7VؠMߨ Zٌ-Y<{$)j w}s#RJȸy$D,%ϺxpؠEOIkS Kh8!㊆õEͶ$/8Yc 2B[Y%;Er0hF1H7=M dxB-[$L-dҐAA4#Z7;e+c" Y \y-U>\kk&t~֕ؠl#9iV)}~X R*ZA)td3~D.+{i1 Y״o_ p˗kǘy~3bk'Hխn]e '#VW_`x CCV菾a2qp:ll -Ŗ!8?uj-apA'g'Nh۠yh}SUcybXB 0mk G^r- A 1' mHޝ뿯6Gqa)#cNH`ֶ} SbNsWacit~OԡxMhl{jf"ζ=3EZKtfd=eşs/o=,XE>/ķ9Ѥ2%  r~w4(TXKVHobsLqP1BnCpSaӸybFoɓ9Lsy/r%Z7VBi8v&,RBsa:ft&Ma1\3ϑ ˆfSN86xȣ ]6)jLh!TJ鉰:F\F"[bǖ0rb߸9˚XS%-W [,9Ud\Vq]Oa]FlJ;z&82aA^kXmEpa6}.IB6زLY\tU!5}yFP::VpmFl!#z(Zk$l҂\9zaRI鄕vnu[ݺ1 1??AkzzX]] ܞaDqG={OFrx8i_iFmc>pK)/Մo1 Pؒ~k 㹿@_YlVc.żx6H <M5&e)2ZDݕzC46'.W'^ޠː"z+usCB<(EJ ]u|T25bY=`06P*5 54uH_*:k[^M*N8Ia$@խnuz(ȇ>4Ǐa|m?O(Nú\q!7 Xolav;)R+*- ;ܳM^pRwh:6M߰VY;],5alqq6"Isɀ}.;8/\̧P7:[YlيGk1>j4-¹v.N pq&&Bc-98<~{Z׸\~X۶blM_N@Uޗ q> .=rY؝]ls8۸cQ}=l#Ig<N:I/g3W32OpA2DP_NqMWԛ `]#6Gdx GEiGM?0 ܼݠM+,Ri _,Nhl)NؙZ™ յKPUC i0rNdS+C!s*2c )i!Qp 1A`X\;)_~ZWKn* 9gY\($ ROmĻi΍{6q%RIHplk{tH?[B=6  ѥ7|=m;bz8^&udhism7Z2`rM!o(5;#ȮuT ;li j#GuRi*uw𚉪=S!BSK߃ 4:"ّkVźԥ\Щ@2YkMZABOF+X\v[fpm~{?[\Iҗ쵐;ڔ H>BH eL-_h4j bF-\Wqj-&Nw+j0ۯHEsKT>1OUwHÏ7)E11_ޠ? }% ?rdlH; jfSX=o+^7b=;2PoYx.iۓ{-69Oq\'}[FKܕOG hzK=z,˯}>ܡ!bLSˬ]Wt'==u-N @~NW )O/~$YπQϯ9<I]u$x0,ĬvnR$Njg[ܲ7ÖAavؑ$lFSX_YK ;Pw#n>+%Rm}J# uc|l.NE<8rKp&or&"T);eJ(Jxq0Mg.> KPHi]^x^g8y=$I9Y قFVVy| ]yӽ8 Ɯch %qr.w`}]V\A<֩$M]\Md#Iq0#auM'\W p\^9OOB!ؠ%i*r;lWӣ!72%)8փލo׍\6 VBaHq'>˖R8括VVc>u=扉~ï(d LܶzՕ;pooNܟ)5x*4(@>[g7|ǂ=[mJyK՞&[~8L֦80I/VYi64!˧dO: ٶEp&{{ӣlVmv1b#:w]J\ch4 4eл\< KMCD#0$Soسfj>s 005WyCkW4 nx'?:A:!)MmzPjLNЇB>Kӱg"&"-و[D1z-j7||E7}Jq=aiT^Kl0kj]J[l%; k;<+Ɯ6$eyjMl-iaIѝ$(Tk^mKVWޭnu[WEA.uZZ9q"ap4_bs7,u7r=./ 1F( F7L'Žga%~/Ҷڍٖ"WT"J&[끲\/'̆{]yOnҭ̄)9L'՘;[26sn*Č}j2t[Z'4(Wo65f83-?0g1㰴pq&sϮSqhu8j%A=We@Ka.7}{憓yɭ7&[L^a#hR Ms-'KCoC/юi47WF!MWv [wx' bdb2iJ|kj5reFW폥 Mڑñ(U5 ˳!K4#oS-L-5/ Wvc?@XEo.0XhKlFwNtP KA pBH,vb}ˇfKq)䤡mk}j!53ث`JIOe C(^ VfB- l ZTb7I6PòN`uM\i>^C^3}? Q"~o_H>~hX^Qx=nky1B-G(0NZcmؖ"NuzxlJ5X_ڙ'4[##uudXXI8?i2 Ӳ 4e8~!;Du!,NODm]KC3^y])C~X7h Vu˿|wCO:m  Pw8 !U fDNp"6s[~˹fJPG(4$B!Iy˜C 9б 6 _ l,E&Oð*ŕ{3Նt8@PdP_=5xk 7$]bnN ]GVfو;pxoj6B%ƴBo0=~w = n7%"hlMC1o}Mb$@Z Y,0:boxuɦ o>o1 =B;WR[A G⍳( i]q A&%FY!c| 4RAjU{r;-Zaې者-rYiF+l+PF͕T-C6[myI_רltvb`r_3rFLQ:gz,sc>}%! 2<~ԧGcA]ՆBUDȘ _~HH@H6RQdWS@Hf=z+\xN:=EфȻjD+bNϓ#\@RWcV*17F)R$d:BiOW;7! ?Plv5J4ZPm^ww$ 3!υf0rE╇/v_Jm &7oA ͢U sKW!,-zL@H7RbǘMaM'}sY~ # aی Y!~a,ż˯}8D26&(T{E*(oAIX#lOM+;(b0WɸBŻ~ )+kIf_[yis֏$z5l_#끗Rݶ='HnBowzTk Ok' Ќ$FlV׹ b3o1:`W"C!H]R$a߸ɸuw\VPTbV:tq3oZV0=@HL2Sx?Tdj." By{e^=u?>a\yo ⹐oZTCq#8ӣ cc ׬CA±eqZ97eHM/C^_wcC]e9|DjMB-GOʱX?ۖ+[fxea"T2+~ S*ZBoixd@4} Vխn]wY7Q bs~5LZMPZnB.,Ēǡaj> LG o/~CeZ]t%Ji׵-_(0V@4O%2b"[*XMoXCͿ$')38GPlO_ Wq#nYVBI&J5!JG6֎QULzE\ 4PFiŇ*Ws+dizL!gQIc df_FWA[[P| ^sO5ȧ)֪ 5n)X||-D33<ϋDD_*W$!>uQ*R|o  '*:ZCj±/!,͓eX! &,DD4BQ$%Mz$MS]i]{(_c$BEc9z"$X櫏70-TF:A/p'Ҽ^$򶋙JSmˠ&Nby-施.ق.[dbI|BXҌ49%M jA(OnVgOdM[bWҜ,$?쒠> /Ƕ6$룧h'^̄d] aA+_K ` ƐE Q$Cs Bi-dWC0ZSyPJɀzFfxhFpDg8C V VmrRLX1 =ue><'w,`P,3K+kvL\qةޡ4 3t"K? #R-J%(YwjY4)]wT*&2f82Y41d#>bVc+:IO=ƩEmp#ͺRıyyx%wgi5?'y=>=?_uCNAr>~z?m`O6ՄZ@)Il%жqj,Ô1oӣEQj;-O@WԩİlDfCy6O unbKz[FQq5Dԓ p$kx8mYYwIO?$O*~w $(Ơ?q~iv)NޔJB`iYy5bˈ̂η`&d>sZܗ]Nf; ղ&O%X6Z ʰv IDAT~ѲH`ԥ4d>S\|`c`!b* oWżN{'TC%c N] cͅ鈑~I68p 1{qW4IWb|3ԍ+i}V: 1}R`U%[wL$p,cK狥i5(oy[9֓g%h7%M!QE1660Q /)-x9邓RZk@|.@gu@ ݬКJupiʸbޑ,T-4΄'|i4 /nR*jXt(٠u&5rV6(ZDi(f#ZVXXFpL@;~h8u1$1FKNEBӣt:=|2|}qٜ>^=wWEu䧤Z" k:v7Et)\R^έRieu3eلU˚Wy8+#@7;VIpaե_T.{0ObN@W"T P:hO 9B`!C}Ve8zÞ^Z@U([qR}; + fmfm0-TLPM1ָ6~P>=h33Pոn',D|⽹n3F-.̈́21W"Fv8qgeBz{"bM:&N6qG<bN=EWx/G3I Imc J l]aDeɚqc&ew&W) gDޒN49Ӓ x!oڰ"%G{asϫR1(T9`*t WLþ,-: /{l]Cb>.$ǡT CaFmUA(6/|ߟN~]wқꌫc#piΏ7m/=fAxⳮ?^dr&HC®Tܵ__?ĶqU28[jeݭ+]qJv]7OKIoHrdQ /P=F[Fnslá.ϿaM18t˷e4 c&:uȽlBZ ˺Z2bK;ZO/לS )뭘٥eD_Ys:[cd_y82| >#e%Wf됍c+cl"nc֩y9F6P S I ^[:y[^P.&nj+kR BG,{E q{7hDRԔ:HY-Mn68~: NdĊ?hu$(=Wcp MT/7]w.V=cgj[ C*%z@pvhҸn. s%Ȁ B204 e}ۭMYgq/!uXmW3F2tQN}\fNVwy-fˈ`"1?P酈{PȌ ~NoR6k6k@ B~ 4 gy߼$Oʖ,VА4:(/tص'!)tes/{ vǶS~(Nug-큺/}ŇޗgVZq 17\(D̛j"ʑE3cS,ӧ żazZ{#t M t__|7'G@6#̷ZO6_}%!XZqq #;'Mg" msj.~lVRD kvN8Y;$u"W8C6< VFx!K1MCQr19w53ۍpVbPE$fnĿ>~a(P3q^JO?V&NH+5 ]1p[2= DU.hڗI6j)ڛu+$H-M:MM# 3Y%w`rҜ0u4l[7r}dc3h `:F06$fEͱ!߷Օk-CXx4nukh\DgX0>t[109bsXaph/i\_B: yD߰L_J'|/kscI:SJ@K[$ @Vo_\k>՘Zj㢿Mȹ+!cV/u$PL^1FB#ژM&9Qc P 4_6I \b0ZKdnC:ö1`_~ET,A\[˟6Yɦ\Щ9& /k$LR%Gc`y>3zy_xC> ;鹈|Vc 'h5( V>Fs&'ɴFZ1_iVf,i/8Q>m}:E . 8nN܍{?$0R#l;}WgmY刌I/Zm*ͥՄ;3L۔ҘHnxpLAh1f"! YnJ&2dB=_ZO 9RŽQ{0$m>Ʋ"Q%~r쁇v:<{ {?SS /mŏ~ ]nF#i6ɶ4aDD:ͅ&vogU X:2?Ft3f"̈́geiI[ڷ׸op#ϒF+lT`똍m ؍BxtCOe:|̧іMhq-nTv{zwkLJJxݮ7%sԖ{ȡ2k'$8'~29ba[ƕAPjX6d6k6H h._>Ic&'wS\Jh}ѩ듭w5[ ם㶸$]`9LuՒuPk]OnpbO !#qVoʮcatNǐM]2/+Q?EPw݀("uqB(yP LyjLEDχzL.?n_Iz۴0k`b⇿$׿ .!HWI_zǯDx^T)4*b98~' )QOnC UlR*tPM,㳗XmjHDLC7b_粶g(d˹kͩ!±8tTP1랯qqP>XmČ|%J8ZّNO!޸N:ɯ=I+&C!1FhO>RZҬՓZvZ?BA,=3orhV1ah [i{ }ei%"QvceD{R.ʽz-5}G8""&=# 9zX=7/)Lpzsa"wv.rTB/h܉~7 YYiX婩/T*1;v|xwj@,?0*e'2k]]&yf e0- 1ns8}9D1abUsq&brؖKFֈ]C#6q0'R><3`6E aj|@e6ɦNp5%(ѐRA Ԏpg`e`sjLǻ7L褹AJj17&>$S+d&eLtJ|էvfOuz'-s%K=s0:|]fh3Ce2"K.ך؍3!Fe-VqQ( >6EjVg-z3* "vf|8˟CV[ P륑K#Z*hfCSb9ϙT( _`4BΥu6;GI5i޸6O?- 4$z;|?T]m ;H96'IqwK,E0Xۻga`lf_S*h^?`\{,bN\س![Zu4#a"N H'6'/D\LslR}L&u-O(W7uGfQQ p8})$6!Yi 9@$:BǶ/v˵>|V2IH_ k;7Ca[r880(ʣHB~kʬYqA>: ZZL G)h\hk9m,KeX,{Lg"xнmٍ^SNw8"\ӭwƏ`L:U:Q,h^6,Eb3h_Y5/A.5 BA~α}Nj'ofp7MGJ8P]z8VFkT\kzj/#K,+m>t~}f3cE.#KmZ9- ~jP%54>׮P * $!~#8?EUCB괡`j.LO*2?:8byŞmvxy6`taoHI" c Q)YT\d8~[?ī{Bn'@DL X[w_|EHbmBuP~:j p3k₧A/류05 ٥X%!5-`Yw]4AA΍/FKKЯZOnF^ D52pcH.W(h N޿>H T,8oQo&L/D5u{ 1cC&٬ڬͺ-ȵ _l?##O}j/[ۂ9 +G Z<--kr?jB˻6Hn6!_;&m 9?86Fl:~j]:fJ=ߗ.^@:3@MHϕCS7 :{0Ж0}†K>a`亵+60 b#o jv>cY"g߁+II`U{4b٢DRO_i +A݄v#3ɨB]PȱPCqymu+8nb&,7ʌٌڽk\8faxiEۯve#7[=Zlwj\:e_qelLKZo 7ypq:owx; "qLn` ?H-֠4cCeݓ]:AE۷4sdiAQRZ NqCzBdU)/' ܥup_?ƾ\Ķ#2 f\cb*k,Dpe6b|²oko?O 9 Zg.;;E>4 v|Ӽg|v?HB|_QmOHtH;'lKrN\9~>4qgn\_#פG?4 QXi@UtmH 4hU ~ꐢp#IZ/4_{ͿslqR|o>"պ^hOwY)8ao.R=kp?QjMt$}cF&y&KkqȪMY/' IDATYuOR.dϿ7'G3oe]D 9vym/ռCy/_2v' Rzזk>?hqBȷX' XI2t,f:56/W,˥R#2; Θ=peZ櫯xleUO"2a:oۭZ x_.64GP/4!_S>y0ՐuR$LĈpyd^Cnu*%`bÏ =ꍗQh_l_ Y\:w <(^B>a`0FuݎĀ$$橭+ Ed3n3vm>rilܜd2bDnNNC|9 :OQZV <ϧ eP=PRȉfݥU9l=EUyBLOҍk5󣼹wVG~&H&j-}/Ne>pZS 9ل$i؅90|N q ,îj]+O؜'3`am_涛$O侲4/Is+1sdY7E+[.$tz<ϰuD$Xޏ1IlWs+E/׸kq86Ibu]q8}\:џ(vHX|MkYH\j1a=WK/{S= *^ ymrPdSk&;I:2`EFOz)8m@p8<186Z6XOK K"`u5m1Q7B6Ad231S.;?Ao /s(A T$y8Rc8 ?s".߶aL ?\fkn&qm̈́l6ih5o_XO>ƿ-צɽ*JJ=aj>bbauB[ZzONE5ضf"o޿7rtgR^\3 q|m.>K)#6cÚ5^"y)ܖ$/+8 ̻'[e6-;/Sg*&Ikxp+Uq ]Ztzu^c\VhxJiعJq3 }6k6nAVm)FFb u# v+=|3{k+hz2h2C;\ ! slCiNJV'!7U^$]'5K2T9b0O0"ZKzY'[.-7w~E & #0 <:5:E~Q'dɣ-pg7}DMPoB,tn¶ڴ,prA'Gaٲ#5v7Iނ L"Ce(L?22`4:q-(5)/fǺ4 ˵Z3a7.ELXc`Ǥږ%?q Of:oZ\]J(4f"XYkB^Q*vY+E'sŹ+&٬ڬͺ nB.\Xe.>X/|= @%2to@gzTh?'3 en-@E ֝ӱt4Pu#Cۃ>u;jQ3,+t2j ,4;ai- $"NBp#OPy(3|cRo% ۔hOr`kZD@ԜCql8ewJyZL_Yq,v`T86Pw[J3e0rq fc%3 Vّb n_:ؘ+{juxlbʲukŀgS*_7xma%a6| řˡzG>QH8܋ux9DISmps'mv`iUlKGTBG+IT/ىavF¹KZ{ 7Rp yC_f c?/_0LVQ NLTωRIJw]p~_0Zƿ-[4V|s;|f}'+/P5g%tZۧ.F\EܒK!'ͭ-I+zy>J)N-PhH4 BtpW7qEJhZͣ1M {ڼIR7[WRT,yHk1-"[etCW^h{"(-暈T{1cf1ؿCi^O/D=ؠX.T|FbmVS(-͞b6k6z)6l6d*?CQ ,2]T <+sՙxfGgvr`);K~h~.z#w2 W ·2Bh=^+*.NG 4ٌ-8;k1Ŝ]F_Ys$CCjf=wc8s%dtPZT c$ ֊x9+K$^V ?HfDBJJi/To%TlȠY'bqn*KT(k,|՚lf}wfj^/][cȣ ٌԙ/MP oz-'%9ڲF-5 XX c#!j7 Q/2+,Sc$$!LƬc;"v 3sURAij fNCx˄LQTm KP`j/;w؅kũ+jYaxu2lp;̞+,aW8zCG_&1W8}sZYbpek td MQjPL.5׶`e}|LSd%E-ǸfbȖgse6vK)"6=\ ) •|Vm̦ZD 0V onooJVbX\I8{5׷|8Ēt+&<ԛ\\K Z׍Z =7=/0Dؤۆmr\HA +b9|+uԦlPD:\o1AZgDG+cZ3Qd6k6ǖزhmpa~y#E{9-d1+.ZHAչXncJٖh!`!a}+ PQG3V26hﶆ-.EA B@CYJe_GwPk&L/ސ~P*hi`Ҋx-#K+C{=a p,SCi(H~R[( t;qכ\:4?Nn||{\zKy S^BK+0^kbbÅig2嘹'0S]qɱZ%XH!'ƶaEmSh uWg"cv\hcɆI" 옰5{9\ i{"JSWnsht|DB3ڏ/aQ\ᇆvAtQ`xuaV;ᕣ秢td\6I zx0xfOds:;|Oi߳z-oqVVapk"-|oU>ƷL ۔ JQtt|HQydi~[ϬT&ew} |NSh=|fn bۘJVVj1ؐE٢R7XN-IJMXZKxl J6~]Pq4Ӌ1.]܃'-FvA?ƶ eK;z˼~0gmav]¦Gj/WdPk&jYYuu3p萦TJطoN"ͺz! ̡V $;ܔ..-ftVGŐE($1t`[2S>JIX&k~R`h] /;R>gYkH֓՞o c}ۅe ?{ŀ>K,b>Mw +5q+8hG#MF]@km)lJg&m 9=H G[+?0ڒeǠNxb^[Zj]n*Iޤ[2*Ib BX'Bٸ:auGYSϟgE|FZwC 3 1ԝ4:bÙ-ӌ%5@;֕وoyqJe!:l .ܰu_ꝘuhENbKsk&7ڄA X'e_?!0%mB'MZSx׹h-FM&m^kvdƶ2*ThcN +d_hKIZ>S'^]x@PU,ۋm)ⵀKw",Cs˰z:uo2Z-#t|jBLWpHGTFP$2 XɆR&MEGkM3i__=A!f* qi"DP-[f % Ӌd3wfԥ|VviP|м M _رE6!>CżW|2U.$(+1χ̯\ yxBL!'k[׹bCI 4["[#6 kUڵ}| $ u~biصŦZm],%4(4#2hy9Yo3:5 0]Zin:20ZD3Qڬڬ{ _ͦ?m[7 ~%+u/yB^;" [,[a)߿YM>'<$1bY ;'$waE ]L;A{!ʔ:"[\b 9uWןKDpyM: C3U,X + O<+ X6X\QJ@HԈ(O(T\бA`7zg"u:q[39vN:cą1g6xT b#XǢʧ4:5#Ce Oz+Ze#Ģ7aCh|Vq5c+˒sŘ[ul4Vgd3vlԤ|!Tp@s6mwW}J(lPZFמ?ȀEVqwDTvJe^:f:2Ykmw)5 '.BbrGUls(5~ օ}S6jS.ZVvq%I?ToX0L{%3+ym1AXj-Aְs¡Rof'aaU6C2xpK F۰pJD&\F1g1':7{ľ{o}}AjnJjH=h<~p_~ѯ~ѡhԢABUP{Vf[ùU'AU|| jEK#dPԠN B_3S4 {7"QuvκX q[@IQ kgS#}D: B789 VjɾNpଶ } t0KՑX$}]A5701, x%ƶk0 Ԡu >z1 9gH~gVnII#>rspz(26eQ+ : _-DH45 =f:>dM yF#efnfӿ) n% PHLޟQDʥN_7 x$o?C-ॉj#^MpyFK'&GZN]Ns:ӆ덩iͰEb| !֫ lbf'>UђhiHz#E ^\Fggibmxn`ޒCil=RXX@FZ.-DKIkT(fp֒`|@5A dw ¹733 Ӕ{M|Oq}{޿iAg iL!( 0h!HP ac;YU;׍ZEѱ|k6U&ǁOԘ땄Ry}nHzKRKp󂍤  HZDk: !g-b޲8iYqrgMU3L߇Xbb6!Q+BzAhbu+A.-b9+ *;C c䰁mjU`FdhwtI7!*Jemݾ*G)8>9$(T` %\ޑ𴃕Rtu|r\ |~a!5$X{n"lC? _΅L1 }k'"cX}|F@p%I ٱ }[A8صJFԺ_f'q~yo"5 9pnDڣܖf@Z&=z^1+ܫ^݆()8AC dt7pA ACKCpQ mu)Y<:IRmڦ>~<z dkޤ&֐RMQyDM6[΀s& <^ 1jPԫ!ZW/bfG l'p⸅Gz "n{+Jd):6naȡѾNK"PNϦ@M:Q*5nݼb,[LF!!O7cD1P̊-q] Ƈ #%B|QIGjV ].#iW?}Ekl`i=7t2=F550=jӕ̕d w0CeG7v)EgK; .YxYXd[ ! 0cox ;+AXau#Pm (mD+K>Xy&k,G!+P aԚ~6!WF* a·+y%0 6~5yfKR&O#Hg8}6Ƞ`%IU#k^7c ,^cj}0F@ۗڑw8m"|CzGfFJ,ٹ9YpiƤ0I퐵fխ$׿`(QϊYBqϺwI>бΎNK@qRճ& Yr5:; /dPԠ^"%~?A6 TXY#<}33{oePQ 5Jo1znрPY>CTMI]XXxHPõUJ$(ą)㹉Y>ñV!Uf(8HKm2y%R ]Đ7W'1a;?8!YaME&B֤L?xyIP%p-jE)IJ;c{[^"|RCV!&aN5]a ]`7xS2#P:ѱ4{ ّVD1U?GM }|G4_@.9QҲa")%d=ƍ (umBri}р,@WPgawD4 *;8mxwLg8\M=.,_F~. )]mBO֒^1PH7 Q.{4q1&G yƭd)ڛ5B X7 !:9Zm֒}kJQVhTZmɡ}e{qV(^vXluh[Il#pI7!)ci=gČ$=tw<^tM)jjNCaa5ƻr]g $N%,8iia:z!( =Dz2-5-1`tB`' 1Cғtƀj#pAS]86rl>6l(o`,0;n"թ B}Uu#YG lLiLMgxi9hC$M &#_/bXX!)4kZ!;4 iv$.1UKWdZכ̾ +"A`/ V_ '[0&/_S-8 ?Ry>+\Ѐ}<ԣьpe * k1vp{USec@H_c l<@ʛBPmѹ]ܸ`=`\ce{]4Ƈ 2@)Irt!cnظ0m"qE mA /JY.oPhi0ģ_< HVkagmKᅭ5ꕚ 5~mCWêXZ!%mrT&z߄G@,!aW !-PH PkrMcd\HD1~`pZdW5 9;)\lU%AJltb@!+ 5^ ~.WR.e)ĕB,OB6aD?ZXQmR>AGg+4MPUf#FBWBzBuHoFlpp34LrivWB*f@g>QOJOG0m_a(/Pr|al@ARDv+[ ^dHo0СM<3Y fOׯ2$huz3C`^86Qg:C$wm|w$ު&),?$Z:&2l7$juէ.!R_'ѡd#g)!])&}~-Y>#p,F0ù oݰy*fZXjn&cX4c!iu3kqm3Cդ Ƞ5A"_9͛o"GP@ڒO2prC-6N/.lŁ"mBh-8jR(()TZ:i<:Qzy>QC_ S.Ж瀔hm)x%; 9gx rh[!ܲB~|j ٱAg)k+|V IF#y^Af2Rd;aMV-AS#l AfVh}M i=4OiQcvxcB1+tNҟZةh2k|ۄ MPqs !uDuJ>^Y_= LN;m|.mnSޏ(5rD1Q:2. JH%Q-q~8aE6Kk1vՆm2&k RrgHGhu u\6P̉ >g8;a;_w15j n["Mv=åu,XJhtB%2Lݥz|A jPzEKzǻ^(2EKU<( k[wy/ |KR>hG]_{`p)fP&c(4C4!ͶBcp]IWi:o.Ҧ3.pm&T=Dr!Z $q,dmER()a[ބ萱jMsr|"%%7ԼN<NyK>-(`QV$;b,#BVcDB1/4eMm$޸b4caH0<Ơjdf.-HFt9ކGOI/lĶ*Wer B#i0=j4wBob\=c&$HX25jp,կCԶ E@uq2ѱھܞDE4v0lV%u"+Eu/n\{y Cw$hb(llX}zB=!QΓE A L҆4mzC᫅k'}GNW<~pu٭B'Za 6Iu'(=2Ku8Q_> @1; Ԡ*m|;Zo~:0-HOSb?^93f|.c lG ү7)@|B&/h^˂FdGj Q4VHyh }q % PB~__\az_O7ܺl=WfZP#L|dg3 8 ޴ 1`y#FE?ch$!g{SЉe b'Q_3m%((8Hڱ.HQ퓇`jxqDwx'Q͞o{K*r)I}OpK3)^#DN$Qd;!NXok" oӪ4\;g#MUw'=Y-+Nț$zfGb.Sm#JM3$lF;s18> wpp?-_;g7~Xޱ`L[Hr)V-Uy{o2Q0 0/FX^ h+N3̆`3Pʋ[)D0Msr9 ׭쐳qڑs& 95۴aXJѳ!_Y$!%my$qE8IÎ(:8ѯ8#-Y%Awb)7Ԡ5W Bv)XJ17|> '?P;d raʬ}2嘨vJMкRʓ7VHf.Y,@)/dj F l{D!r(_v%BԧOt|Z[6$ƶD)1uHIo*GoB2L񓃐jC"f Vbq=M߸d!2PAV"*6!݀3ڡ69gԔ˼f)Dc.SYr3z`H>6Ղ`wOg~.9b殕sK Y& h  ݗ!ŬmS`C=jm$k*'hTE! j|%Ń G>M8/Xεh'=ۣљc=|!җ"Jڄt!R[ yע6#PkHTj>P V SP=7!Ny%PFĢD-zK2Vp|ӯdB8vś*kxt7ԬdӼO9{o ĭ+İ5b[ 3:2CFM$. N!z2eL 0gTDV[RxD*@ydBԮ 5嫤k3.>p|M:,H=޿0Sw;Fa0$B՚oGY(R/Zw4ૅĴJehUo*ԛ ֶ$Ï2BAєhu LUbgg8SpTL~CxJtn2z,աF}a%:t0ף6 _=P& fSY$ !Hq!߳ jPi B e`.Ql>gU,N9]xب&wSyцcs jSHx %qF/ idAY::PCj"{b KL`:u?ȦH lexTYSAgHE]px$Io[x Nm2ȮɁ4T%ꃐ d&:lDH(D7"Ok%8C>+ѱL!nQO%ȺiF(=s?iӍM#1i?/ +u&H ~ҐDƀO/ЎaAj3ڮ 0S)sQ LV=/d)}7<Ot4]LT^<ŵ d{ђVwxPO?Ƞp^i%/>G?Z-Z@ P*Z'()ݠ<hY 4 Ԡڂkяcr&|E|K=]'.Nb"h)҉ \rEnU$i!aDyITDz6R*A!4Wb =9Ժݡj6NSZå :s6TV!iJpNgSK[3`hFlwo]KSt>qoܚlAPȿZ(=: J1}6͎B*d6e [9wwG* t|ڨ&3_u9ct:DzP.haPoh߱mM׶cDB>.FUA5O4+#rmoJyRN("A jP} o1> p>Pgqqv̸ɚ$Q\b#ڂrԈ<&qBfP- $P1c4,l3)tn75զ/k,/H O{RCyV;m?gL̘>Uv$D%^#1_(dOU}'3H35jrh0Lt#Oo{. 1)@>mi$ZEԘ w${Ur9V7]66e L|H`~sئTF{tv@&CVhH<~EZ&2)|J,}S(?LjhQD)'j$j ȥuXA`xpl ~ mBQPA!Z EB7ܭi)5$FE?>N8ll * ~ jP} n'x)dOyH6=jpa juΛ!H)ae#QKg 82Du ^Nŵ1Ɔ Ȝs1?&աf߶t;p#m QMukd)Ȧ4HOx-R&[54 j(Ba*q~G$ulՒI%-<4Ǘ"HE4p3HYk)  nO BVLaW쓧Tڜi)OԴ !^gqM[ ҂7e!=vZr$ӯH(;T}v|q\;Ȩ%C4IRxW9q|@xR'GL|>"~Zpߧ{k!7+/ ~? $ɞ6'I~^ccay yq[,Qj9 K)uxէZ'I-xgiNqZX M̌XN'?݌Qk~8ˤ CFGa6Y1=FgMћR^`Dfh[=%W{; +1R.٬:2=JŽEMa{_o RgƠ_Ԡ5WV= FLs'BrY`h?OZ`bC!eڣ?\[`)4E Y!`10Kow0l$ʷ 9sPЁvO~~9$f}AI?"'D"O)l$- x7a-!L_Ji ?U#kY ? fȦ(^[ӗt!%Xe_G<(= Q.d=iyLTKk mgJ\2ٿb[%^?3lV#$֢{X6Q_ed٦U )qya@J ih Aͷm3_ ;bh ֣2PM{Ga8&mVuge j7'ŏn-!(3uB|j[40`p@X7˦8!XeBB#s_*IK~wĠ1rs,1!e5d # ǣ1ٛV(x` f3c"`tgL<|DX e?|IIENDB`Atomes-GNU-1.1.14/data/pixmaps/mol.png000066400000000000000000000022141457665371200173630ustar00rootroot00000000000000PNG  IHDR sRGBbKGD pHYs  tIME7 IDAT8˕mh[uƟ7M&YoI5mdl@Pa C(t2:DuQABZ &ֺu*5mˢKijޛ fמ/8l;f .,mԚD =^ףW|R)~ӊhh],% Kdmei7h/LO,RX L$MOuBҝnPg[ }E"Xo' 2077g>ƙPc SGN";z6 gbw9ai8;A[[Dt.;hrƉ3a5;%LhЯ/##Kc_]ڼѣ4 i|JDi . 0GN޼J;ޥ{{4Zx^ lcnhوirG0,ě7~b ,ʙ8( /f*˲(HӈbE(r Kሗ-IkR|D4 @g4YI, DQ,ˈFHRp\p8Ö'k:{vr?V;c6NR,TU )\|s^}1UUd2xX`Xd2$ L&(6[ 8/q H$ϴ iLJz/K)Eww:|nAP]]MX*z+/In1o=UR% f h)@fhɿ}vqweًi1rV+՚(ݿj-^JJu6*6Z/tf+luRWG`5% GXVu:G_kwp: U%I 2U[eARkTHzc!2py.{'A{]QMeIENDB`Atomes-GNU-1.1.14/data/pixmaps/molecule-big.png000066400000000000000000000325561457665371200211540ustar00rootroot00000000000000PNG  IHDRdq#|sRGBbKGD pHYs  tIME :0 IDATx}w]UoN:HHB %Tibb"B`APiRK^RLH(@ ɐXkΙI@Hg= g~}_wp+pp0{d24) #Ք6u3f>EƝkg~xɒf]Of30P#e!qDaX{}n<9I]E+Nni r@>d@6K8XeQB[ P|ZMP.;0w{'U.?VX L 1mX,&*%(Dbx8P1xʔ_2nr/81ZZ&!#, ##!!}>\wuti[d{[Kf78v,Q(0r9R$38!  _3RR@0°JUcƜs̙_۰Bw/XbSG6+ m:fRY F vL0IvnBkkmm&{\{+0=@ynkAaaBzQPbP(Ih`LhɣFsLkڵevgпPz茽wz@ySZcYB=s9PSԔF\U҈{iR6A&S5t?xVWKz08׏0 6>L >˟ D$8#vZ@|/Rg c$I0FP&(`(Hbeb)%)!a  c Ix(1<뒝{38m;1#I "s@a`P2,eXJ DĈ" c0Շ>wtwxO"I8'I(!6 #I7դ"X%e L@$ y0As$x ăQ;ud`pbPƜsBqLBBĨF@)HTW$Aq%0U.ćA qBB b{RqKA"("RJLpnLOzZ|p#~ϋ1|?ArJ;s:"7D"@c86$((6T[TXQDT"n e^;a(~g=kѢw* 3f} I eࣈ RQzNJC\-0 TU^zٹ$u ( +I ?|_=ucIjZMP&py}{ cuT$I-c>2T Bb1Ҽ(I']^: )\ 9ucܿ h_'PN7ad$b.Z}\'׀8N 1cq$ C3~J%D&yk%K?2̙=/^(\ZY">0P\%e0(8'`L8DQ01yx u 0847,ڞ`}s-]BԎ3ɨj)`(GN=wk;Ӭ raA{yMM[dSX j CQ"F0r꒏q4fR*lj7"F$c&[\j5͚uod?ܼ #Ec0TZ%UU"Jf?sl6ukt)-r'T?C:+YC1 Uӛ.aD0 *)<(Ja2ˤ]JS3Je)Q*<]oŋP6PHKʃRa(Z,E^L:8hnfag֯6Cƍ Ğ'Tu `}蹮 U**_n(sU |_xWQ )PvTT }(O<G+E:r8D+j)C` cfB3(L47ӟ}nww\j#𪜓tFy(A`j/8: 9{E {{g wqWW1E}HDuZ0lJٙ F&c"5P(0R.?>cVk'k)U*ip28 W0x^Y '}v(ueYW*a=j⳿-/uxI6ˡsSGAkDBg@'rp4ݨV9%5 Ąe, !d*?~qSd|_0~/JFSP=(:k>*Ԉ +wC&m /g=w_B˪gHM"(j1x%5)%&_8r" pر{ypPj>1ZI1A7==@.bLRSI|k_o|~ јKy [su37P|>erlh1J/* &u&W]϶xfpPJE4]bX:Q.…&:R6ꏷ,^%dCP!T6L3Ju+ZG%Wc@xdZ.]wa'o;wis|Ķ-QGn@PGyY,Ņf1g)KŤՕ O~N'ɤ^ -RA D9.h84ؑv T) j3 | _^csPR*ՃܔUuvך0y$17'8yЗɒݝʐDCFv@){ݯH;ǂ HłaC)0ĉ'~O}?ɵku4R,x뗮P8'8=4LF,BdD F ` x`y曟xv< C0MD61[ZaYI[۲̜9;Ϗ4㺠P&N:: )@Ju@Q@4My(`nTXUcX'o ;x^{mɆ[uE f0p-ǡf9'i L3a0&7999G8BFce!nm>[mko 'n1@SA`P08T*9 eP(BZ(Mu~arT >uٳ<6 ~T*>P9I"nSLdqLض 6`Lo3vˊa FWqs $JaP 9"21T-+y)?>2X`c!\NWOBwwBn34]WL*kLj) DbIA~Ð"$I&ӄa bKQjT[#(=) (|ƂU6DMf3R2QmzLs}:AĒI#RKAhDqJOU*oiCv]~G]mIڿ=HJ|B @5Gr;A=dchuմ"ҳ cd#Dr1*c&ZeA~.(nlHV5T?ƪqݔi:݂وwȖ ׾pڣp\63imҤ֍E2W ?7@qpa$$db&#ϝ@#u]UX aFE҂M\ZB-IIFXÊ8# ހ"r@Fc7=4G'o}u@]骋H@#S  r \NEa)Qh Cs9Z9f 'nX{GZ$PE{$T*UJ.ejUש*=U0y{__ct^68s6)%REdAE4QTv JSS&(XJP8G90Ě^Z[1n`c|~P $ڸ}DJdA)auV= D$mG=C4dLttL]]T~f7po>]* Ys!}>$ PaO 9&4MvTe@Kx5MH,~NGq +IPH!"3d2hm |Pa(nٯqZ$w@ЗdW"Lщ*Z.Ixٯ޾?u_^l; 0:@WrPHdW/AH1Lb ͔ȣ$,+%)+}p8F.I% <$sOYEr*5.!am(F H[DOEQvvupß>lp, e u:}E  T~TH˂aY a 9*% ʷBTFp4<(o BF!EGq@ PDa?<ta{{^nNcr^%& @gV4A i&I'v]WwCU0`LJa R kYஉ!J\Iޝ N:cpT2ԩ{ xbzY3˖t׮=A`Z6Ccj`L6 XDz`[ ۮDG(=өR%!t% *C?qFv q'Hjr#P$Q F)` R2LC'R]6ZSuQ#J$&3R bU6%j:i%_xfz1í2Xwe tuOb,D.]Yb0F6+)VUũy0CĘ6 G)R0Ib̀:5q=T`&s7xҀueGvq$K )DD,^(K<< H$9G,O"!2Y ltu}}"m5@cJ7悯L0iҬ9K7oJ#h:b5@"B)3 0,\Nf vj=O< `A0G)!DC0XI7W>TZR;s-rdͪU{X -ѪcD a&ebQH;~= R} @sw"nf–WEun?tUUӧs:;;ڀC^n˕LDRZbJ! ٴ0ݩ8qM*BÒ`(@8 @%``]S%@}Ԁ7gs~{؟ϟֽ.;7߬}v[DBys RBL=gO8$HD>~ Pq^$.xԩJ%Cs)IpG~mwP@*25Orj'>cC$0'W J5)zD,Hr!q0DwaЀla鎝Sl8Ncӧ#\tETI:*\˸ .$12Q;`y=8$ Dn*A9vd+V)y(e +A'"8ԃ1NR ca,1%QD@r;SN9???{xqz0S$I100<-)a([Ҥ"餏=O}j.WjiӦjF D9"1((D)8F@e5G#p]x !0DR$p Asز A A"SNMcf*@gg'<#W;fjrw]tɈXQJ"AC,CB0mY(\Dׯ0K%$QOǤ$:\H8k!(!Z9{cg~I=|m卨orԐ21u0e a"Q$&9c$' 8FQcCCРT"cdS0΁/p cR6v!0i_ߓl}9&|bpGBv/:i޼{\6%UׅElB`Q 0&Ƕdf*5qXa RI !pfdnp2`YEN.P00\f̸u(7d_{횦|~4΃vuqvx_rG>o[:8љL ?p&3I>M{re~ڪZ.mGd0Xi "Nq'.#`=Ƥ8G0*!1Vq͸4ߤeńojrCGvujuˏsN  y⮻.^x!I].6-[S2MB`J2!ՔSUKC9sR 6 S ۩(ң@8& CidzVܓ#:l[{uU%QuMz4_8uew_ys~opŊ70IDATrFҨU0 C*_ !u41rYJPRHe2bO&x{T.1aVcd ɩB P$~wTe|>~+# `5dATl"Ζenl U-F%-J$|T0l@6z7ؤ0bhGJe<~uې/^0Տ,6&dTy.D$h?dX6%֥d(M,0._ 9-JˉGcX؋t+hGlAҍ l۶V!.W'pQG=vecz{_|2\;&>ҶHOFPW=h)ƣO-s+ l1wׇ ==5kny+f2t?B[9ʕ3 >K8R,J!"`ia`iA0"h&BzҒ|,C VIy+Va8)g~ R}˄`h_ޖ.2l|>AqNoYk]]^VF[h:Imm ƞ{dZF:.²)s 4@db '&Vqǒi*-YF$&u@7d&Cp][ߎޔ+H=zRP#EQ*L_`J!m!Gem0ve镕3mk HK.* R٬DZApf%7ZV c2@?d9v[Ƒ׹Hg'xRA(%QF.ı 9j>kQ282l\ l(ӁDjIr[;oM#ټyӟ紷3[֩@jt_Xɻz@)VrjQ9@B aQtb,yG~,o#W҂܄ /wL?7{prRMHP0qld,Шď@q6qO.(@JM#TO~rY=~! !5kO~ ? w!;wuYy͞=f̘9444~̓a.WϘ1c3,^ ?uׯۼy˥L%55FlQa_Fszu jsOt0X`q=+W]v;:knFCH r&Y[V5:U[_ 6a"y$ RI?۰W޵%YItR`3MM8IappPFEL .,ix?s!s…^,b;TxB>>VEe-d2y8RW0Y JYt"Pp]55 *zJ껬15>xN}|KROmy>3g !'3=(фณNMлI45e~:#&H6A!EBJ)7N&u^'j\KQ*'˥,~ 97W[>-mx!̞oϯi )33댽>u5,{yKo\^^AѺV`hhƹ'F0''br|6N!旫aڴ 8轑[u@Y _=coI4Q#wqx5I争\F!VFPJ(j`-ͮ CC-#li@I<}sCaᤓfbpN۾Tj?`cr꩟DvFDu|T'b! Ε@IJR)D 19#:R] 4^~ͽsP^B)e4~iCSx #pY0k8R- }vNOEG5.XzH>J%eJÈp.|I2 /chࠇR hGͥ Ck~#8% 0$qӧijk@E֖a<KX<5†M y$c/7o۰cVxQ9ڮt ^` aܙՙ1J<K~hRr^Xm=KN1TŒ$6ŴkyHs }G CThYxQ2ԺF]` ((Pa!lۆ!NAjA4S6CC@[[2x?A(@aH$%&UDX29!҉F~f6\":.7x5Bba6i j-BDQƵ5o&D={e%IclKкbɉ*a$@tETbm$uC>{6ی?M~cs|hb6v6oI+-qSRY)U KsKl̓t%!  9O g_zSA:eGi6h:0)>U j\k9jU_ -I)a.L/Wh39w.}73jW=)jY*ikTZ]M!}^g'fpPjџ?؟Y(67r1lG>_Lh5jCŒr$K2Tqz/~y0YT0i\VȈK4c6T!ڥtKXZu_IрK&\_E\F `!IʨV_>4TP.+ I 7VwHy{N;ںծmR^)ݙR;:q}>qv=:;kuhA~ 'NV2 %x~ jTڤqQbŢPzw -Kꄝ 2ܓƵChJ%#z9JyY'מI RKRP<0ẞt /jd K%QG}|vaWr/Xpe6,QFjc#_18ա遠.Dއ]qw[\1cG|a)n:)tC4jX2],K_T7pH }ӧdYf7vfϞ7KmA=h'`5FPJM 3fLEߏ:jQFfIZ ST7k*XR$ #'Unq~[3@iO,Zh!7xm~ktO2)21 EtH TI7[U6o&N{=׹uҥjPΆ8Q:tɘ0aٟGVG>}``cp(jhZoumўFcp&T+gvi/{QKq5/b`F0U ݭ.9nW =ygX*DjMD{Z(F9ECwuEp-7/q֬y/MssviPf1k}n7?^xo[рsx-dJ}6W/!o5PiJu>|9qꪫw׼(/( e(~Ż2ss9c==gхKn.% -[:y6oh_.ڀ=zժrt)`ie/4**GqǯU؉-vz+^>TW=vdQkK2ZA8o~>)Sv  3ƌThhF 39vI'I/{[y|/o$`6xZ5is;woơxwYk.yω>v]/}K&]U 0ZZ&-k}/,zw~L_~r`ju`iF#@II!yܸ]6m<.\w% ڰau?>;T{dٙ[f dQ)ӗLW^yn֯ϻ }DIENDB`Atomes-GNU-1.1.14/data/pixmaps/molecule.png000066400000000000000000000020671457665371200204070ustar00rootroot00000000000000PNG  IHDRR;^jsRGBbKGD pHYs  tIME FIDAT8ˍ_L[eƟ9--:iC:X@E662ÔHLtY,[e`\Dxgc31n12?JEI BͶm) sya&z/7WNx(*x;wx¢&޶ZzxuܹS)Ë dƱؔ]Y}4fEjʊ3L#'|XU| Nmq֯"Mbzd'O>U]X82p8m7m!4qKKwle daMOZk6/?7i-4"qpsjJ鬳A][6:6Xٶ<䕖9`(ҷx0K'1X 8R 7yh55`ІAv,,DY0|f, HVV 2: %*d`##a)m>v[~䲀r2EIJudY/7{ȿ^u^`yySتΘz4j|h[;pL 7՘`q~ il,Њdw|b=wpj]9)dg|=P `;Ә dm-zr\)#)B 2X͕VMo2$hA&D=,]7BJr 2;IIx㢔0 c8GyölŶ(_Z+259TNNN'ƒT*iĄN˺B,R7xU ZOzT {uC9hH,S* 0JL&Em\}j?8Ai6~w5,DbǶiMr;lm5:BZZDF\+ͫwܾ4 _K8Ij! x_q~'CKgYX /ã/}kD=$?뮅&^ i_k _|$j&IENDB`Atomes-GNU-1.1.14/data/pixmaps/opengl.png000066400000000000000000000025061457665371200200640ustar00rootroot00000000000000PNG  IHDR%)bKGD pHYs B(xtIME  7 S3IDATHǭVklUΝٝn-PPZh * 1cy5G"RJ-jZy1L11cFb ƄZnvgwvݴԓ?ws=v?;%pR։Cg!Tn,)mht+pǾ"#ވdhILg2 84s9QQjjogO|^Yό"N# Q q@Ze.q"QS {tȮZ$'Q\G&ׯ/MiO?J$ rzv@).11?3ru2-k׮@{;^b7'=ćTO><:c퍷c1/̀g |$4yicw+֣ey Avx(06{ GڻZ﫫[<Þo8:- aR&B)9̓:y˒|<8KŻgJ]x 36I5 53M0%usB0 |(E>$qw0mE]{~S-L{$V9 &SjTĥD|N\(p4KzM|,1$󇭨:yo;)&Q+I1'J wqR;11\F3b9RB Nwgӑ4< ʓԐpZey-m JiWkcb*k1xhSb?sEh(H9`T(OfNQaA3?.ʪ ?3f"h95GӶQ_:ۥ͖-U5Ou lغmgߑ%/GIf<t3M /ق0H(e LGGO>ܜ2dg`BF`!z@Mg#Ce+6\mK"P/?å549M2  (bUdiII[Պ溺V_IENDB`Atomes-GNU-1.1.14/data/pixmaps/pdf.png000066400000000000000000000062311457665371200173500ustar00rootroot00000000000000PNG  IHDR22?bKGD pHYs  tIME A &IDAThŚk]uksx,c(r Vp&QHTCӧURP?C:%JS>Di4ikd_3{{~8>{Gښgkzxܹ3b$! |Hc7nooz!<[$onUMN̬֪sԟ<~y瞽{~Mw 5k6j\UI=i)W\Q,(T*Iyoy\$j5IP,]w9u?pׯ) x#KJ!3b]?dE1pҨ7yO ߚ)l_]IXĉ1<<Ae$P޻(w~`q?=_gr QP\6Vs{O7̙3gϞ۴i&Fc4[ ,IzKvxsX | Ica~ Hw]}ʛo2N0,&R# p 4::}׮]Wa4Rʙ3k |eHSw$WvۏH6Z.35|ns| '8P,,K.oƏ6nϔ͸i%KXds[Ƶg 8>%>~aIc{'Y!:nԃYnfVT8vΝcbbJ(ccc+s/?~겑Š]GrŎko8+oe{HX@/]S$ ;ؾ>6mTU%S.[:44ծG̾#?OEP08HrO:ݴތ l$齬jV;;5G5uS՚3T*Q.*F&Gt4R؁E$wdwcVѯyE+%qk\=1.MWaFZiE{ "^}Jކh"N?NS:$\~O=ϒC l5@uJfgb x,ԃ xpYXBj%Pɏ\pcDHGycqnU%SVS 8J]NAp՗3o[vꍽ=@41m fY% :>(ɲ}늚q|VAA;(<εW^]?!@L͋VOT,RkA@GG4iM(qFcW^[iȵk5o'f#mmp> իmzbkltihU$ɘfC`u)aHk5Qf".cu\WE)л #p]H-ɟ_(׬lI7 dzzzq"XTղTl{qBXՔ/OX+ÿn ,Uc$Ɉ'gꇯ è,{4&`*6fYhEA#T0bE[?ɥտBdIH ee̺ &LMQb(StEI >E9R$*9uΣv6جR1#U%VRJL̑jBt ]R;  H6'j5NҬAdFD&$f1 Ƒ~}K 7SHD{R%CFBH`PQb1eE7ħѯ~Y|TBGjX2Rc…x5b Y6B^ 1m{޽JdlNp~=iǷ~g5>3" CPs T.%tw7|KeFVn;pv>7Ej@GZ (7)X <BPIS"Cʈ)gIcF(K?)+YkւhNr2cTLLn۶sWxDXp`FbN@k2g_{`NJmOIpY$.D>rUL.ik/ ScAe_Y' ƤV0z~bM!jBHH@Ϻ?qhZ~hH5%yZEJ,9fY%-҆Vz|UT($we<L|Ay,H-s)Rsְn8i&fT ܕ|O9֤ UiX-$I$⠨9a1W,ROpY|e*Tlju}T^FC1Ϳg%%(Y0cU5kxX}5dd3Q*,q̣&fbbtjaZ2=0 A+Zzzk5!>e~6Њ['E1V塹N7ޛ[!`)6g"b9*DisM_Z8_iLLL\pb@ ‘Ç?yўrst@.oE 67Jr~˖-ߜ.3#IID(brrR}ݴ)sGIENDB`Atomes-GNU-1.1.14/data/pixmaps/png.png000066400000000000000000000077321457665371200173720ustar00rootroot00000000000000PNG  IHDR22?bKGD pHYs  tIME AgIDATh޵yW}?uOϵ3;;k]:lL0P $ $PIQ#) !\UGPE6E˲% Yڕݙ~gFZRkj^w}wV\ĩjqcR\C)A* ~˽VZ'cPs͹Ds|vv;vm۶uO a~ 10 Ðrl=>>ŗ^z{6m]W @2J. Jƛ` :XLA0ȈٹsKix4@)(7}ho{{ D+X@ո&"Xt=yo\%=Cb8;$uQhD+ш$V@T ($t U9˥@4V& [U̖oH*P(000w]ˣ۫2_n]S P@@hj+PYb8.+FX`D0ւRZhՎ+ f(gpX,dY1Wݻ7ԋoRxYnσUv i[ى1c'3;v<̶mٌ>ZMcP$1>c,ۆ1@o'|uAH.;X "t$cG6qF ZξE8R qZvqhM#>l^K-r1 ,4]<[ >}=/q?4hG+B-됌{ hk}_.?֭[E"7p|}xᵓ@kTǟzVbT,o:w |pRM,YkIRj5:rZ33+]bΝ;E ;){7 W=Gp/ orA>֪V|jvV7ܹ h ͮ.x֭Xc%233Kv+t700,y~qo' سƙړ~0OogDxkx+ɥ=;x>H>(MqD"yu]<#ϊkV-bDT $@=4\U=bU͗]s:;;/喼hfgY1G&tLJhF rV-=V,zSNL&Bl8>ON2AMGVQ/+1MU,~̥͐+{:4T0sS(*A$$[Ů˫FO[n(T06 C77ae[?̼zy It<3xV,"LK>lAn'W 1D&xsbK=F %Ls ܀>IKO=dn[ǺJF`RXkB6'݈ת !;>)z b I:)rNy KR̈Pd<_G>(Bk@lCpikbUZřy^}7 le` 2ĵԜr"t3a(QX, rз z` 5ebT(08fI5҇^B fM>/̈fzҢ'8XßЧRCk T UQ zzNXL ,aՖjxkw(N7b'XRM'yq tQ|H07 :q ?†k-E_}Wag9^*efbMޑn~f{1]7xܚrdǯL6l<6L(N)f%3:"hфw`J[d&f+ؾ>=Q(Zkcb~Y`2(^stD"[c:Sӆn)jIbNP"9)51ҪU []RUE+[R"hfEP݆ólmd<:0k FNc mrQv͑=6Ē1^9')k:NkTQDŽ0,Kk&bܶIH8'!8E)ĄPFe<~ףk&g\b#Vo7o /{?7f^y0K+rtBXd'5ÆP$tR|g.O B8y&KPu@xxժ`LJ3R yL-{~>Nlłpg~L|=}v#s_{',ʂ1VWe $jKݔw"4o}$Y~U.'Z]*d`-QT0SQ&HšP.SC-I߃;m )P)]nOxx@_:dxAE!f:M/piM$Mc3_<ŊZ!li?瘟y܎$ugi}N !Kq:> K vH# E6هuDWW*D\HcZBĒq*́uM5{䭢 |kߴ @ .+R"(<@%ت؅&iR@h߻s:FgΜ趷^igqhWZtXm+t9`/4nkjHsbX슄:_4XWR j*ęY399)~t= uUB_LcoD9uKW $H{GSTǷZU(~46kpDZvr˖-3z׻^TGgh0TA(Vȑ#ax%MIENDB`Atomes-GNU-1.1.14/data/pixmaps/ri.png000066400000000000000000000014571457665371200172160ustar00rootroot00000000000000PNG  IHDRasRGBbKGD pHYs  tIMEdIDAT8ˍKHQFG`pRQD"bܔiMBqU|h'5"E*V0F)3Yi:6 ftV{q ZLL"#oȠټ6^Iҍq~V JOW p6r;ABf0UUyU·/{H&;qq188({~FAБ~b1<]^a墔I {@|uD`{ 4MjCM`4vBB-@ q~q#@Tb$idJ=P\.sGTC#"@+Fc/ vp0fws˔ƼTRՉ?<|m9mA݃Cہ/vV(7B6ey}rp?;h3&54_y`Ig$~ p^ߛ?Vңp}IENDB`Atomes-GNU-1.1.14/data/pixmaps/sp.png000066400000000000000000000004431457665371200172200ustar00rootroot00000000000000PNG  IHDRasRGBbKGD pHYs  tIMEd)IDAT8˥ PG` X{Q0&Z$Kc{%XY=5!_Rf,MJZg,)pyRg뾯HPȷMP=K. 3X 7/aA2qztH۲ٮV9+Uw43q/IENDB`Atomes-GNU-1.1.14/data/pixmaps/sq.png000066400000000000000000000010331457665371200172150ustar00rootroot00000000000000PNG  IHDRatEXtSoftwarewww.inkscape.org<IDAT8NQ)-$)HƦ!mtRu+2u¥OՍ^ąFPvh}LqQx6~|}QUSTUp "1cN`sYUUTnE1Q`rgm '9_UBPZ;Lfnk9no_'~~Hw*&IΌ`Np:y`@;zM|$C(ai#)AdN" @ QD31_oQ{w{!"(y~SU4X0 `]J͌/ nSmo?px>`'hlQbk眛 H.zU/s^axwQTah|}_3IENDB`Atomes-GNU-1.1.14/data/pixmaps/svg.png000066400000000000000000000057561457665371200174110ustar00rootroot00000000000000PNG  IHDR22?bKGD pHYs  tIME A {IDAThݚklu3;>$I)+˥i)T'It-i  >7)}hAM:H D\R UʵBEej%1;;~v/jp1;w O.a'ă3n۶3_nqAx/, MrSSSk'ׯ_X0b: ."~Ӿ~x@ [H/|qL\'J4 A8 ޾֟wSz8Ėa "C+޹[w Bv}R3מ|s;"/ZYFA7ъXǰc 8VCh"h}fCMp$Vc ARi:\۶]P .055-;v-(k VO_=l2_.<,OO/H.nFW6dBքgY+++>|+[ϟ/477㶁hwXp}:W0ri<×hL_=Bѭ2WǗx=Ln` @6%c۶ I/^hvwwӖ@ t M2@ḯ}uT2,5WW~SdS$Iy~?e!I(900{F;ьCɮ,q?ŷ1|d>5FS#dpebWEj&0qM* QU@ 15ih%@wM~!FO/B/*m#E=ڋY]cڬ< ֚IaTU B 7W-sM*mC87]:ލVH^!W0!6X]&+U*:&YiWEq\d2x 2 ,FbD"% ]:g7 @IzNX0  H.N+s,_߳]z-%vsFX(ք$ۍq/ݭ;'"\uwkIO>r&gэ2ޭ+%(ض팻reYz6?v gI*, v+ {n3lV)PM# Rkf`jUٌ0^Qb{(Y(yŢ*gRI=Sˍ2ϳB(ڶecy/`#`{Z :o&x4B@CCØ(xr4ĶmQ`0̕h7rݪS @>4M `xxH$,d2'pihnn ɠ( 'OdnnbH6vH$H$444P(pnl,t]' r5FGG"*x<Ѩ @UUXE*" T*qOq`X,4 UR܍Ai4Möm:::P(022twws '?#@gg'H1z)b2Hsq)p\~~aѨAng|>fffꢭx@ X,*!i@WW$L&Y^^Ʋ,dYFTUell IH466]nY>۶EQ,v$\.@2x<}$qÇ:px]d)T[[\v OSS333,//;MQcMR,--N,sML299,EA%R|Gd2N8ŋH(bYmmmx@eTUuv9 ƹsH$s%{=Emk+uuud2~?|,..*l֡|`jjp4T~z۷EQ> ޽PJ$X\\tڶmdY& u i:@dY4MYXX0 ^$Ia;QE N#Jʑ#G(?Gz 199 /] (ѣGD"X,uG]{att"544H<ܻ:a;r9\.aDxGWn;vǏc6in(cǎ9n`rr3gDzeӌL&DRWʱJ6#RJS,555x<T*E uo9qgϓt;燕K XaVVVrb1$>}zmnYFd2 DQ[n188O>>[( FS]._tV&^}թgD6./Px*3qIENDB`Atomes-GNU-1.1.14/data/pixmaps/td-big.png000066400000000000000000000101141457665371200177400ustar00rootroot00000000000000PNG  IHDRlpr-bKGD pHYs  tIME %/&<IDATx]uwv~hE[Nڲ+Y$v-m @AH[@@Qj&A}ɪQ}`)K_ yhaypQCVc,lKjVrù}gCxg8{νJkD/)pwU&uJGvԀd.J^`S@\~h: !~`β+xM,4MR @ؾO0lSJ)9bYˬ0mg,xЪί&30V &Ǵ`AxxRJ![mREN0'e.աMٖpSoD%&dժ9-\E]0,;ڰ`hްNv[~sj8Z.蕉\8Ύu&Lu~btd+:/}| 9HF5ٶ „91 M \وnjPؾK+?fK'@J}c `(h?*Ŵ v#0T|*;'Nִ7'@KNWJMg]{u6T0b`uk1^:K ('(#r`?]1&h 8}P-ðP0E6.R-ZJCؠe# `%xD.f+f$>0k'ON"/c#a`MTbF@% /aʻA_Ƈ@4QHaWxbit`Tp`boò `ʪCX V v}!{{-աjh-q4P4sX7J.}~9TSx(O\00S P@Ep)PZçB 52^)y(%EwVF+ yִaN~ 3ˁظGL%WJ8`kJuLe]j`a!]!\BG{r^&~W)}VM8t<ԧ&XZY ss-މCJ?ޗ{ꕵ9蓯@a+}޲o΂KKiO|X悀|@>03Q$Ȯ>^̯Z!3̪߳ a{\/NiӨ Ȁq]UF;`aWYj>8WIUB_ O pbN9 TU˅r`imzk(Y с^%(Wh-?ocV_-.6Iv?|بB<{ 33Ր Ȝ ,ϋ7חI6gf(ЪE?I)~+XҊU$xmێQ/3DBj%ՠT$;yuR{귕2nO M9y{@F:0e<P|fg jϒ,J_ s ~Ogh _V%*f^0_,.ukBWS x'fr=z=VN]S SSQ~uJ|݄b+e= ZSQZ^ v8HIv EЩW1u嗻}ŦA,bjHLn10'M۟d,@~5UPZ\X^,R-],rZT&:aT\Za38a]y}O/ZE6EWW)j zXۮSʰe~޴(sŰMʊp}M_Z7;2gg֏‘OQZ.n+FjKK:=[fim*¤4L krFgRvS~Z[3IyZg?kV,,PxϞZy"iV)zȰc_syahͽ{_ w5 7nBF)ݣ;@`|.ԉ1X I83}S.JL5Vq3?ڷtc4W`T.s\r/joY`j-iJpsӨb{%at)V$3[L%nch||,LaosrzgV\vV}/^4>!59 2E`;xj[,Z2r8sVssx\>lj֠LPrۤ5?\^n.ﳊ\$}/74z9 Xn4|ٳ"@K:uoq94ܖ+S4oZL2c{2 (WuVF^|\<~A[٭"'k L3/}cSGgv3r,\ag>|IĬ7vֲVr6&y]{@SS|/Α#-XNw}]kE AY:U,1(ȼH3 ccU}h-;$?+c= Cƀm5iÔe֏1%< :V*G3|lWC*+nLE,f;| >GuPCɰaYi̝J엩%XC n@A^ka'VeЫĝ!9:ɻqQT#ðݼuI('1k荎°F Fav3/pFS%>05f} ӀVhajn,[xi)U%6;M4::\Z/-aBh2JLwV }r ;'0jB¬3g-ϥQy룸,}NQ|n 0|TVRUF?PJ?;,"XC|ܴ2P# qɡ]բ/xwɪW[H9} Y@ `|ddRJ%[Bn'W}݋J 2}Wpҝџ,0aX"g7Վ9~x0qŻ0,c(۷`JȪX]٘ܢ} ih_B)( U**FYW_TL'6K񻒎sF;ncBT"##U;܄$v$`_UJ?hC9"Y>~0F`,`ALLQlX~2f`4`RWJ;$)zOIENDB`Atomes-GNU-1.1.14/data/pixmaps/td.png000066400000000000000000000013651457665371200172110ustar00rootroot00000000000000PNG  IHDR5TbKGD pHYs  tIME !IDAT8ˍMhQ7aL;MڤEPZ)DZjQ.* ܉ڂ  1T .?HAWZP7و .w ?&MIldښV{޽'1@Оs Sj.hh#.J\FG$ZZěW!U͙X qL5ЧJ&|{ݻtbێ3 }R d$uJE* P - Vˢ)%Fk}4ë288WbOI %j0x^0 kk,+ e!X, ɠ* Eq`fϟtW(PMX,s],]GaX4m^ XuiyG* %~^Y#QPpێsxuv6l\VW s9:(&^XV.o|?P}a-Dckhi4/.r=0%V3[ХpiVRn<~s(YeSD/|3}<4?;;D2V<]ϣՁ|p!vkDe:ɚ q G`TU| ޳BCmIENDB`Atomes-GNU-1.1.14/data/pixmaps/tiff.png000066400000000000000000000067551457665371200175420ustar00rootroot00000000000000PNG  IHDR22?bKGD pHYs  tIME A zIDAThŚk]u{s}y/l^F !LcIꖦDHJ_RU/釤*QS)@~( $MPh jŢx<u{{~8޹3s=#G>^^(.8xQJEiljM Brw\bפih___{^!"<s:F?چtppOnFr!=c9k-J;>{~|SP @!ى^\)&k-iENdQo|o޽E5߸xч>7;K}-XW[mxl܄ ҔK* ZlYmbڛz{{|P}ݷxI@~׿ (ˠ4xT"tϠ@4)PZ!jrZ7jI';7}/}:urgΞ=ŞEMkv~.RDQZe*cןyb|y:rp55a-xssscÐ 9=MӯOLLz;}Հ[_j-˝~\Ë# "Wxǘgɧw޼Z317} w݊щ"NSf6y9!5"4Λ{'j  0a h5E!72v~kpsvCOqUxt$(eL`H3nct\RZ'u. 4qFm3LT[qtdΈR'8XIZ($B(ȅM$fR%^HizJŶ}83=[G9>n a6:GgGWo.[a<k(̆E-W}o{xw1s1q*K'$%ttwؽ[ 7! 5 aj6geFnXp.ٗ[)H,\dTW 1a.Ij(NP^8Ses!pr<iwCŖ^COpզ< P#I3 rrVjh5\7]a&4FiaGS -F+~zzƦcu:gRFΤTc3 doDӼ'eǶmlr ]W\]ň+Y8?Ueb:bps ZpdT99zOݾ\{`)c V0>DZsS;PC$DIA$Vh#ޣLA#%*X0;=Ku^H`S/փȯo\B\i^s;1}W(2FE\ `SAV2B;DtBzs ؙoGՆ 5?OcH .QD"!* BYU ނK}`dΈ[>cd}NU/u%m[VD6\~\VE :ސ<#}S1sEf.*‚. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: Atomes-GNU-1.1.14/install-sh000077500000000000000000000357761457665371200155230ustar00rootroot00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: Atomes-GNU-1.1.14/lic000066400000000000000000000012031457665371200141630ustar00rootroot00000000000000/* This file is part of Atomes. Atomes is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Atomes is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Atomes. If not, see */ Atomes-GNU-1.1.14/metadata/000077500000000000000000000000001457665371200152555ustar00rootroot00000000000000Atomes-GNU-1.1.14/metadata/atomes-mime.xml000066400000000000000000000050461457665371200202210ustar00rootroot00000000000000 Atomes Workspace Atomes Project I.S.A.A.C.S. project file XYZ atomic coordinates Protein Data Bank file Protein Data Bank file Crystallographic information CPMD trajectory VASP trajectory Chem3D atomic coordinates DL-POLY History file Atomes-GNU-1.1.14/metadata/atomes.desktop000066400000000000000000000014741457665371200201460ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=atomes GenericName=atomes Comment=An atomic scale toolbox Comment[fr]=Une boite à outils pour la modélisation à l'échelle atomique Keywords=chemistry;physics;atom;molecule;crystal;coordination;polyedra;measure;volume;builder;material; Keywords[fr]=chimie;physique;atome;molécule;cristal;coordination;polyèdre;mesure;volume;constructeur;matériau; Keywords[es]=química;física;átomo;molécula;cristal;coordinación;poliedro;medida;volumen;constructor;material; Icon=atomes Exec=atomes %F Terminal=false MimeType=application/x-awf;application/x-apf;application/x-ipf;application/x-xyz;application/x-pdb;application/x-ent;application/x-cif;application/x-trj;application/x-xdatcar;application/x-c3d;application/x-hist; StartupNotify=true Categories=Education;Science;Chemistry;Physics; Atomes-GNU-1.1.14/metadata/fr.ipcms.atomes.appdata.xml000066400000000000000000000203071457665371200224220ustar00rootroot00000000000000 fr.ipcms.atomes Atomes An atomistic toolbox FSFAP AGPL-3.0-or-later

Atomes: a toolbox to analyze, to visualize and to create/edit three-dimensional atomistic models. It offers a workspace that allows to have many projects opened simultaneously. The different projects in the workspace can exchange data: analysis results, atomic coordinates...

Atomes also provides an advanced input preparation system for further calculations using well known molecular dynamics codes:

  • Classical MD: DLPOLY and LAMMPS
  • ab-initio MD: CPMD and CP2K
  • QM-MM MD: CPMD and CP2K

To prepare the input files for these calculations is likely to be the key, and most complicated step towards MD simulations. Atomes offers a user-friendly assistant to help and guide the scientist step by step to achieve this crucial step.

atomes.desktop A powerful program for 3D atomistic modeling Overview of the Atomes program https://atomes.ipcms.fr/wp-content/uploads/2022/10/atomes-16-9.png Physico-chemical analysis in the Atomes program https://atomes.ipcms.fr/wp-content/uploads/2022/10/calc-16-9.png Visualization tools in the Atomes program https://atomes.ipcms.fr/wp-content/uploads/2022/10/Ni-Phth-16-9.png https://atomes.ipcms.fr/ https://github.com/Slookeur/Atomes/issues/new/choose Dr. Sébastien Le Roux atomes_AT_ipcms.unistra.fr atomes.desktop chemistry physics atom molecule crystal coordination polyhedra measure volume builder material chimie physique atome molécule cristal coordination polyhèdre mesure volume constructeur matériau química física átomo molécula cristal ccoordinación poliedro medida volumen constructor material

Release of version 1.1.14:

- Bug corrections, see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.14

- Improvements, see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.14

Release of version 1.1.13:

- Bug corrections, see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.13

- Improvements, see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.13

Release of version 1.1.12:

- Bug corrections, see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.12

- Improvements, see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.12

Release of version 1.1.11:

- Bug corrections: see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.11

Release of version 1.1.10:

- Bug corrections: see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.10

Release of version 1.1.9:

- Bug corrections: see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.9

Release of version 1.1.8:

- Bug corrections: see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.8

Release of version 1.1.7:

- Bug corrections: see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.7

Release of version 1.1.6:

- Bug corrections: see: https://github.com/Slookeur/Atomes-GNU/releases/tag/v1.1.6

Release of version 1.1.5:

- Bug correction:

  • w_search.c: selection not to crash if atom_win is closed

Release of version 1.1.4:

- Bug corrections:

  • read_coord.c: Windows to handle properly EOL symbols
  • m_curve.c: Windows to not crash when destroying label widget
  • glview.c: correct GWARNING messages on widget scale

Release of version 1.1.3:

- Bug corrections:

  • read_opengl.c: correct 'read_atom_b'
  • initring.c: correct 'send_rings_opengl_'

Release of version 1.1.2:

- Bug corrections:

  • atom_action.c: recompute bonding on passivate
  • bdcall.c: do not trigger menu init on passivate

Release of version 1.1.1:

- Bug correction:

  • workspace.c: double click on workspace

Initial release of the Atomes program v1.1.0 !

Atomes-GNU-1.1.14/metadata/icons/000077500000000000000000000000001457665371200163705ustar00rootroot00000000000000Atomes-GNU-1.1.14/metadata/icons/atomes-coordinates.ico000066400000000000000000002040761457665371200226750ustar00rootroot00000000000000 ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}}vk]J6$  ,BA+ 2KK26QP6 8TT7  :VU9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WVVV+++III JJJ ***###***  {{{777OOO,,, QQQ tttNNN===V9  :Wkkk)))VVV;;;JJJ XXX!!!{{{&&&===888GGG///###DDD666444OOO hhh nnn???000iii ___V9  :W222lll///@@@sssccc ***$$$LLL 000GGG RRRLLL""""""^^^ XXXQQQ ???V9  :W&&&fff 777FFFggg333333555{{{666HHH '''sss KKK111 &&&V9  :W---333zzz444===)))mmm{{{"""!!!TTT<<<---&&&ZZZJJJ///CCC)))@@@777V9  :WTTTlllWWW==={{{%%%"""vvvEEEjjj$$$000gggwww"""ddd^^^ AAAqqq'''(((bbb~~~,,, $$$ooouuu )))uuuDDDooo 333lll555V9  :WXXX |||""" BBB???%%% 000111+++UUU... |||333 SSSGGG### @@@{{{ V9  :Wvvv###|||hhhuuu QQQVVVV9  :W|||!!!444,,,V9  :WhhhgggNNNV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WPPP%%%+++>>>222'''bbbbbb###111 $$$lll444EEEKKK222---!!!???V9  :W 999 :::!!!<<mm*55~ V9  :W~~1zzzzzzzzzzzzzz{{=?@@@@@?@@V9  :WGzzzzzzzzzzlljj)[['zz1@]V9  :W}})zzzzzzssjj&cc(PPW@|V9  :W||zzyyLLmPPm""IU8  :WzzQQZ~ xllS6 :W½00ckkO3 :W77}I.  :WTTA)  :W]]}}7! :Wxx|y___i+  :Wfff}2   :Whhh7$  :Wppp<'  :W}}}}}}}}}}}}~~~nnn@+ :W~~~{{{yyywwwwwwvvvwwwxxxzzz|||~~~oooC- :WrrrF. :WwwwG/ :WzzzI0 :WJ1 :WL3 :WM4  :WN5   :WO5!  :WP6!  :WQ6!  :WQ6"  :WQ8#  :WR8$  :WR7$  :WS8#  :WS9#  :WR9$  :VU9$  8TT9$ 6QT9% 2K U9%  ,BU9%  $6R7% )$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ????Atomes-GNU-1.1.14/metadata/icons/atomes-coordinates.png000066400000000000000000000215371457665371200227060ustar00rootroot00000000000000PNG  IHDR>a pHYsodtEXtSoftwarewww.inkscape.org< IDATx{tT?gg2I&7IHB0/ ^ ꯊ/V[K}. iUuշڋ?@E"H=;sr2LB$_Jf}y~$ Y$I‡D2+lHJh-D "|Eк%E]N"r"CEAo+#".  "WJ n#\`ILFHeR7r[ A4"|3`;uww[<Cpw $IV!Y7o>rĉvN,cڵQB QP@l(t^,HD(eٹv?ɲ $R(,s$ {$2z>=A ڵke9Ȣ; HP(LJf}z=:P(jb2{?y d !h.eYV/ lhhj* ^vAAR0XIéE V+6 tƟ? #E؃! P1x@$B 8R6aY,B[+@.j*I&BgykD =BRǯFҕ+4{׶^׶~mYB,PHv eee&u=nݺr­OxW+0g_|`0hd5#K8 n# |W_hT)C~_}VAB< Ҳg֬Y+ȡxgW KB0j**?YTڲWL!@p\c743aDL]i#b8x8He<& S$O&im?mw~Lx[+>dyEs3ł}ƝI`k0+G?HX &=[}kG dZroUn)RN[|ꏛCd ?煽{ ռGz9{$].AFE\@Y ȗ0+4DR[Jwt"! H#̔(D O>2x|>__ 1BI `VѺKJ*oh،eX\{>~|>@tӸw)Db }dPV|t_[ģ1ib j?ޏR) q?45 ONGd%/#6Y  ۩߱^ZY睇,4?UU lɄhXFt:uu\~u0L #Pi˩܄}&ŋCN,$,jt:Z1^#? j?YsR""_8f^O@at:|0@XrscJ'Nr 1d`Hw9tmJJ;=Jfw7mmX;;1zi_nNg?-FBí="p_z=ITQoLln74*~F);*!~`+^1 CBJj+WQ,7$a[V&.8X~?؃A.;;騪BXtcܕ |w!0 HOEF Ə>9 B!,atvBg'Y~?3*/ѣD._躻)|:ONk)%h#*:5®;l?Ρ@3 Bi&EE Lf3Yf3&|( y`")Cʮ\?9[}_T>C0S,GB wdKDff&F(A)ɤ ?_IF"lit@ܹ'> !AÒ6I`n7ȦN5^"+k ]TMuu@ ! f#ƴ2z=v#;|j/Eimx@LD(x0y@sjj )`!pz6UYYlX"[*CJWZxMd(xyNR*<м5h4fd\RSĪ*F9s DBӍF&\84*j_YkX4/w0R[uH@Ӕ)u:.XȱZV|eOE(Sza@Z@N C_~#@W8"[j7p _ۺ+Y+C!?1$UCᅬ1 ;x^;x[VkWk5ɤM ÍJ i7qVZvǩT~xhȎ'=ߺj thZ;RU+*?zWy:Uz,J9#Ԓ$I>Ly;>3x 1=soJpaD,A1)86 F#$'|)q><*֍MPp%}0Ծ*U)a,$ׁ~xh RbBH"j' `߱Z~yhzʇaxm);r3̾^n, VvvБ N~KIH~_ߦSohg'!Tu0T.h('ZV>/ 4FRw$*o鉢!=94t%{ҏ?NudO KO~rKxhěݻ+W׿{-p7'=t!Il0 tRuO> Bzz:7n$//>.֯_OUUW^y%&MR^^NII ~)[n!??-[G|S`2x$rpÇywikk㪫b ơrd́#c_%K0w\y ?'>}:]]]f$IbҤI,] ܌h1o<|A>C͛F tR\\ݻxU~mxw{wAeu{3z7R;vQG>9$ 8R Z\>N'!p8}ȲC=Ė-[xꩧXh`UVqFF͛ogӦM!3f ߸멫5kO xv?oy믿kLhݤ/_NMM #== hnn/pp멮[o+ //Billd߾}n?RVVFvv6z 2{lB`BDff&B6nHqq1Wfرlٲ ]E)1%7xIxg6m'PSS$//m۶ܹsZZZZ\.ʢIIOO.~!ӧsQZZZgϞ=4662~xV렿kܽhhŋә0aeee;`0Hyy9$܌RqR^R~>|}onn&++K/$n݊`̙x^fΜn,I`ϗ:xh{vb۶muY⋪jjjK8x ofʔ)̙3rnvFͧ~^gѢE|WV{0BjN'|8f̘Ann.999s]w صkEEE X^@@0=jik1zh/Y<ioood޼ytvv{nrssYr%3gsE.f15r: (&Kf,X@GGj~G]]}Ӗ!>[Z}}=B%IĉsZ[[)((@$~rނR^]]6rJ磺ZuڰaSkk+]16BبNnU_Isp  C;&Wuu;vn[m۶բ\lٲETUU";;[XV'x5ߓO>)ƌ#l6p:/UUUZ\x"33Syfɓ'?Xs9pt1qDĊ+Į]7x8v옘4iEEEjl1erbn[̝;WTWW/\8a2DFFp:bǎ'%%%n )fϞzQF *v(((vRuQ:x kgupȻ˗W_M~%%%xb^uƍǢEYZo}cM|ˁpƭ_μy󨩩ᦛnka3c nJss3'N$ HWWyzuHN:/^Lnn.6l૯ꫯnSPPmwΝ;/~h䮻bԩ|G\#Gc˒%K?>qH!{t2?O&NȺu0L!Xl[n套^bRZZJ0dԩ|tvvBII *6˗s1/^w Gj*v;f0uT֭[,˼x^$I"77zz;v 2>*.Rz!Xd ^z)VoLƍݻٽ{7tvv )--E `͈:@ټy3MMM,\SؖǏc6qTWWSXX BGvX,|gp 73}>#?~/rss1 9rIQQ?<@믿^̨QX`|XVHKKcĉرV&O @CC~~azƕW^ɓ`Μ9zj&MtĐwvNu"Bݻ#radddpgxz׮]Kww73gdƍf.b~ww oAcc:xHFFf;v@UU:{.M6op896mj϶zk(//W͛7rJf3ׯW^+e˖%!,zƌsmo[oh"."\,<w|><|9rDO[[:[W_eԨQ8NmFEEg?C3g`2% RTT4H릛nd2 (222ĉŮ]Dmm+EZZzoΜ9СC^XB(l60aذahhh%%%b„ A466Fo38CFaۅ.K_~Yvq'=\kFdffm۶qYg (,5jp\wEEEt -'~󟫼fr=IDATe~f{"ڃ:vXҼ :tY$g}㡴Ȏ/J(--=kCC۷ot2m4K8p$QRR}lݺFEcc#&Lo>ٳѣ@YYjm޼Y6mG%;;l 8vݔ;v `"2'N`Ν2fԹ pr>?f̘9'@iu/:-Yy |H&а Q!ցjTx4 ;NZ9ζ: $HBkQ<.(CS C"5"$ICMC5$ꝧ*#Rz nJfw#ND0H#HD ;†:N DRDt^x# I+ dF~[#e`d#c @'phD}@P!DPf F4H7)ZGANX o QPE3~ޭ D Ӱk BDaF ]?x6, =Q8 = PVF %iCޚ@ =x@P#HD]@C*da#(Z@W % 1 nkBv,`mPBIENDB`Atomes-GNU-1.1.14/metadata/icons/atomes-coordinates.svg000066400000000000000000000264141457665371200227200ustar00rootroot00000000000000 Atomic CoordinatesAtomic Coordinates Atomes-GNU-1.1.14/metadata/icons/atomes-project.ico000066400000000000000000002040761457665371200220310ustar00rootroot00000000000000 ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}}vk]J6$  ,BA+ 2KK26QP6 8TT7  :VU9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :Wrr|}//lV9  :W//s""wV9  :Wzz,,eV9  :W11s""yV9  :W44x""{V9  :W==p oz~V9  :W~BBP23=C~V9  :W|y-33333=CV9  :Wrrdp++f== xx(233333333:=fV9  :W[[22[==dmm(tt-vv 333333333333:=f11ecc~V9  :W^^ ZZJJ=ffvv vvww,3333333333333333=C~((wbbV9  :Wy^^ ^^ YYVVttvv vvzz23333333333333333333=C~%%vdd~V9  :W``7^^ ^^ ^^ WWggvv vv vv 23333333333333333333333:=ezzq %%xV9  :Wgg1^^ ^^ ^^ \\ WWrrvv vvvv*3333333333333333333333333,uu(<<V9  :Wbb&^^ ^^ ^^ ^^ YYddvvvv vv}}03333333333333333333333, wwUUv((V9  :W^^ ^^ ^^ ^^ ^^ ]] XXrrvv vv33333333333333333333, wwvvtt155oV9  :W^^ ^^ ^^ ^^ ^^ ^^ \\ ffww)22222233333333332, wwvvvv!vv"uu,WW}UU{SSt ++{V9  :W__D^^ ^^ ^^ ^^ ^^ ^^ ^^ dd %03333332, wwvvvv!vv"vv#vv"vv vvzz.//t~++~88oV9  :Wff1^^ ^^ ^^ ^^ ^^ ^^ ^^ __ zz'3332({{vv!vv"vv#vv"vv ww"&2V9  :Wgg1^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ dd2* ww"vv!vv ww"-33:V9  :W]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ``yy {{ww"-3333lV9  :W^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeoo-33333:V9  :Wx^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbjjoo&3333333FV9  :W``6^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ffmmppvv(233333333V9  :Wgg0^^ ^^ ^^ ^^ ^^ ^^ ^^ __iinnrrtt2333333333DV9  :Waa!^^ ^^ ^^ ^^ ^^ ^^ ^^ aajjoorrttzz#3333333333V9  :W^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aajjoorruuvv#333333333?V9  :W^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aajjoorrttvv}}#333333333mV9  :Wcc<^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aaiinnrrttvvww%33333333:V9  :Wdd*^^ ^^ ^^ ^^ ^^ \\ aaiikkffmmppssuuvv}}.33333333kV9  :Wcc'^^ ^^ ^^ \\ XXUUkkppqqggjjnnqqttuuvv333333339V9  :Woop[[ ^^ [[ WWTTTTUUjjqqqqllfflloorrsstt{{,33333333EV9  :Wpp|;;aTTTTTTTTTTTTTT^^nnmmhhaaggllooqqrrtt!333333333V9  :W77n))HHISS"TTTTTTTTTTTT[[aa^^ ^^ ``ggkknnooppyy233333333DV9  :W--}SS$TTTTTTVVZZ ^^ ^^ ^^ ^^ ^^ __ddiikkmmnn 3333333333V9  :WRR'TTVV[[ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __bbeeffnn333333333?V9  :W::mTTYY^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __  233333333lV9  :W))OO)]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ oo+33333339V9  :W{{|jj9^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aa xx ww&3333333kV9  :W{{ ~--xww|bb%^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ccuuvv!vvzz2333339V9  :W|bb%^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ZZnnvv vv ww,33333EV9  :Wz]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ [[ __uuvv vv'33333V9  :WeeA]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ VVnnvv!vvzz2333CV9  :Wll=^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ YY__uu vv ww-333V9  :Wbb%^^ ^^ ^^ ^^ ^^ ^^ [[ UUnnvv vv239V9  :W}bb%^^ ^^ ^^ ^^ ^^ UU__uu!ggTiiM23dV9  :Wy]] ^^ ^^ ^^ YYSS'll/??19V9  :WeeA]] ^^ ZZz;; |ZZZaV9  :Wdd?]]//XyzZZxV9  :W""i]]yV9  :WxV9  :WuuV9  :WzzV9  :WzV9  :W::vrrV9  :W::tvvV9  :WU8  :WS6 :WO3 :WI.  :WA)  :W7! :W___i+  :Wfff}2   :Whhh7$  :Wppp<'  :W}}}}}}}}}}}}~~~nnn@+ :W~~~{{{yyywwwwwwvvvwwwxxxzzz|||~~~oooC- :WrrrF. :WwwwG/ :WzzzI0 :WJ1 :WL3 :WM4  :WN5   :WO5!  :WP6!  :WQ6!  :WQ6"  :WQ8#  :WR8$  :WR7$  :WS8#  :WS9#  :WR9$  :VU9$  8TT9$ 6QT9% 2K U9%  ,BU9%  $6R7% )$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ????Atomes-GNU-1.1.14/metadata/icons/atomes-project.png000066400000000000000000000046721457665371200220430ustar00rootroot00000000000000PNG  IHDR00WiCCPICC profile(}=H@HE* vqP,U(BP+`r4iHR\ׂ?Ug]\AIEJ.)ޗT38 edRI!_BD (9]gy9@ʃSbțC`Bo)%N D44NDVlIڝݝ>H6]Xfww9߬:kuyH6M I!_l5sӧ9rO+@Bu)J8==GA@ZTcV[NxGZ%… 'O՜8@^$%D4J266vv h3B !4 EQpG۷o߯Ϟ=K!ĮnI/ʷ躎mr9}=s/]w:򍤥(BP L200OLLԩS? f+tBH)q]x-px_<&­[wc(?|Ege"BEi$i^Zoϛss(y4%i<~ӸA@pu-0ָ:;˛׮a&tqnD<GQӳd4{*E^wpqv !(&ia H|:@W/$W,˟|’m#n AY)idm߶MXlP|o>0|K\-(** ew6x0Zʧg qq> ɺSuoHeP4>[}wX 0kUU%TTP)AQ htؾ^- jSѮĚF}u0MTGe۞ǍuJRAQHvS)cryS:2.Tpe|vPt#P{⠛$-xmwD.!x2&#%kka/.m!k;HzNd74,ﮬ |D,FZe0@`&Be]XRw7_\dyas{f H}ssRJ񁈔D`XӰqdb${O`W0y&|U< =Y`0#Y(E4 \*tycc|}6ַRU jJ/x)8 %&0HɈKUa`fE::oDQTUݑz.Z9|c󘝘`*aL4 bA4kZ J}rG&ڱF{dedFuԻ 1,\zP1S\;~2=G.#Dꀃ| +`6L&F-~>#kKFQRDo)lGߜx\뤵*;\3 NRZ0>lL҇,5o‚kEBxHBub0bcG8(5 3h^"6]V!*n0Zm ^Qu󫫫K@),0 0!Pc} @}HnfkNIENDB`Atomes-GNU-1.1.14/metadata/icons/atomes-project.svg000066400000000000000000000251351457665371200220530ustar00rootroot00000000000000 Atomes-GNU-1.1.14/metadata/icons/atomes-workspace.ico000066400000000000000000002040761457665371200223610ustar00rootroot00000000000000 ((     #&())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))(&"  '19?BCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDCB>91' )8GSZ_abbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbba_YRF8) $6J]mw}}vk]J6$  ,BA+ 2KK26QP6 8TT7  :VU9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :WV9  :Wtt|}00mV9  :W00s""wV9  :W||--fV9  :W22t""yV9  :W55y""|V9  :W>>p!!o{V9  :W~BBP23=CV9  :W{{|y-33333=CV9  :Wmmdp++f== xx(233333333:=gV9  :W[[22[==dmm(tt-vv 333333333333:=g11ecc~V9  :Wrr|}//l^^ ZZJJ=ffvv vvww,3333333333333333=C((wbbV9  :W//s""w{{j^^ ^^ YYVVttvv vvzz23333333333333333333=C~%%vdd~V9  :Wzz,,e\\0^^ ^^ ^^ WWggvv vv vv 23333333333333333333333:=ezzq %%xV9  :W22s""ybb%^^ ^^ ^^ \\ WWrrvv vvvv*3333333333333333333333333,uu(<<V9  :W44x""{``^^ ^^ ^^ ^^ YYddvvvv vv}}03333333333333333333333, wwUUv((V9  :W==p ovV^^ ^^ ^^ ^^ ^^ ]] XXrrvv vv33333333333333333333, wwvvtt155oV9  :W~BBP0"^^ ^^ ^^ ^^ ^^ ^^ \\ ffww)22222233333333332, wwvvvv!vv"uu,WW}UU{SSt ++{V9  :Wyy|y+VV#^^ ^^ ^^ ^^ ^^ ^^ ^^ dd %03333332, wwvvvv!vv"vv#vv"vv vvzz.,,t~++~88oV9  :Wlldp++f== qq%aa^^ ^^ ^^ ^^ ^^ ^^ ^^ __ zz'3332({{vv!vv"vv#vv"vv ww"&2zV9  :W[[22[==dmm(rr,mm`` ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ dd2* ww"vv!vv ww"-338V9  :Wqq|}..l^^ ZZJJ=ffssaa ]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ``yy {{ww"-3333[V9  :W..r!!w{{i^^ ^^ YYVVppgg^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeoo-333334V9  :Wxx++e\\/^^ ^^ ^^ WWbb[[^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbjjoo&33333336V9  :W11s!!ybb%^^ ^^ ^^ [[ RRWW^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ffmmppvv(233333333}}RV9  :W33x!!{``^^ ^^ ^^ \\ TT ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __iinnrrtt2333333333:44fV9  :W<]]//XyzYYwO3 :W!!i]]xI.  :WxA)  :Wtt7! :Wyy___i+  :Wzfff}2   :W99vqqhhh7$  :W99tttppp<'  :W}}}}}}}}}}}}~~~nnn@+ :W~~~{{{yyywwwwwwvvvwwwxxxzzz|||~~~oooC- :WrrrF. :WwwwG/ :WzzzI0 :WJ1 :WL3 :WM4  :WN5   :WO5!  :WP6!  :WQ6!  :WQ6"  :WQ8#  :WR8$  :WR7$  :WS8#  :WS9#  :WR9$  :VU9$  8TT9$ 6QT9% 2K U9%  ,BU9%  $6R7% )$$$M2#  gggC^^^LVVVSPPPYNNN[NNN\MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]MMM]NNN\NNN[MMMYPPPV7*  #&())))))))))))))))))))))))))))))))))))))))))))))))('#    ????Atomes-GNU-1.1.14/metadata/icons/atomes-workspace.png000066400000000000000000000060211457665371200223610ustar00rootroot00000000000000PNG  IHDR00WiCCPICC profile(}=H@HE* vqP,U(BP+`r4iHR\ׂ?Ug]\AIEJ.)ޗT38 edRI!_BD (9]gy9@`J<\urI!ׯ@i{\^{۶msEJ 5 ( 3g>K>@+ mi|עv+ Ytoo+CBwX,ZӁVdhFPP-[[o h\@"4Q!( bQ[fͯnI:^MO:l&}ڵohiJ~&i)%H$֭{W_}nHZlx. LAH) x<뺴Y==={_~_!j!! S]ױmuioo@z$d-nEO0H&7w}vڵhCc" Ybx"TۂR>UU1M۶mٸq;w8w`t)גod2|{7bÚ-[bi҂mAP!iRJ\Mnݺ0grT;;}yڎ 8q6:"ĶmVXaxfŧ8p(Ew~~r7n UkFCDQT4Mt]Uj\Xlikkkp\nDuLgSo/T Y\K5w6CbnN6Ǧ\DN޸A4dնS)7 ٚ͒J&+^50Whjuu,;5(Iɹ.*.ttp=fE:}+3Dzʳ傺--Dem0D^*EAq t߯䆢iO&).!wYÃD`H g(d,aHd`|+##,mnF8p*cr0fOݢ̬x Yp]ut#u/nuA@dY`eɏxͅukfilxYN:MiNN&_xKcYUbj0[$J%}} `0j|LTf2I&5jr⩆|/2ɍA~7xϑn.LN޺OJhlD#&Mf^48̩D.) rh'& )%D˲q:ǧNqqXe  ؚˑ$f{13 򃃬`ݩS=Jj/5Mc>ar16S}څi`,Q:53 L@JEcضaD4v*}؜pƲxqXjYEܲuchUUQUW8C(W]Ѫ*e'd3%KX88aT@͜M1j`>JmJZIjʅjBI)Bڵtu!Xl^M`l|$[(ztd"&}pe%19s"\ Hp9Bv]r7๖H$tvv.J-Q8X5 ^Qu}ҥKg/Z ( ؀Q :Rc >@m=M-?!UpIENDB`Atomes-GNU-1.1.14/metadata/icons/atomes-workspace.svg000066400000000000000000000311771457665371200224060ustar00rootroot00000000000000 Atomes-GNU-1.1.14/metadata/icons/atomes.ico000066400000000000000000001701761457665371200203700ustar00rootroot00000000000000x| h(x      !$'))*)(%"  %).134441.+&" "(.37;>?@><94/)$ ")07=BFIKKJGC>82+% !)18@FLQTVVURNIB;4,%&/8@IPV[_aa`]XSLD;3+# #+5>H=@2ikkjgb\ULD;2)"&0:Rfpturj[6spke]ULB8/'   )@gx|nSwsle\SI@6.& "EmtYysldZPG=5,&   &jsOyrjaXOE<4-'"  \|jwph_VMD=5/*%"  nxR}vng^VMF?94/+(%"  Nxb{tmf^VPIC>:52.+)&$" Y}iztmg`YSNIEA=:741.+)&%"  ]kzuojd^YUPMIFB?<:741/,*(%#! Z}i|wrmhd`\YUROLIFC@=:852/-+(&#! Pxb~zvrnkgda^[XUROLIFDA>;8530.+(&$"   3oxT3333~{xuroligda^[XVSPMJGDA>;9631.+)&%"    _}k133333333}{yvtqnljgdb_\YVSQNKHEB?<:741/,*(%#!  "%'(((&$" :ltTvv333333333333}zyvtqomjheb`]ZWTQNKHFC@=:852/-+(&#!   %(,/12220.*&" Mov]qvv333333333333333}{ywtspnkhfc`^[XUROLIFDA>;8530.+(&$"!%).26:<=>=;84/)# Kjy}pYvv33333333333333333333}|zwvsqnkifda^[XVSPMJGDA>;9631.+)'%#" "#&*.38=ADGIIIFB=81+$ .Yirvwtm`Fvvvv33333333333333333333333~|zxvsqnljgdb_\YVSQNKHEB?<:742/-+*)))+-048=CGLPSUUSQMGA:2+#(@KMFTT vv vvvv333333333333333333333333333|zxvtqomjheb`]ZWTQNKHFC@=;87544458;>CIMSX[^``^[WQJB:1)  &333^^ ^^ S{TTvv vv vv vvvvvvvv333333333333333333333333333333}{ywtspnkhfc`^[XUROLIGDCA@@@ACFJOSY'4%ijjheaZRJA7.%%^^ ^^ ^^ ^^ fTTTTvv vv vv vvvvvvvv3333333333333333333333333333333333}|zwvsqnkifda^[XVSQOMLLLMORU<\iprpj]<qmhbYPF=2)  %^^ ^^ ^^ ^^ TT sTTTTvv vv vv vvvvvvvv33333333333333333333333333333333333333~|zxvsqnljgdb_][YXXXY[]Wo|~qYtnh_VLA6,# %^^ ^^ ^^ ^^ ^^ TTTTTTvvvv vv vv vvvvvvvv33333333333333333333333333333333333333333|zxvtqpmkigeddddf]vy`tmdZOD9.% &^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvvvv vv vv vvvvvvvv33333333333333333333333333333333333333333333}{ywusqponnoVvyYpg\RF;0&333^^ ^^ ^^ ^^ ^^ ^^ TT TTTTvvvv vv vv vvvvvvvv3333333333333333333333333333333333333333333333333~}{zyxx:nq:g]RG;1&333^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvvvv vv vv vvvvvvvv3333333333333333333333333333333333333333333333333333Y{~\g\RF;0&!^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvvvv vv vv vvvvvvvv 3333333333333333333333333333333333333333333333333333333fjdZOD9.% "^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ VV TTXXvvvv vv vv vvvvvvss(33333333333333333333333333333333333333333333333333333vvvvvvp_VKA6," $^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ UUSSiivvvv vv vv vvvvvv||3333333333333333333333333333333333333333333333333333vv vvvvr,PF<2) &^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ZZ SSUUuuvv vv vv vv vvvvuu5333333333333333333333333333333333333333333333333vvvvvvvvpSJ@7.%333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __ WWTTllvvvv vv vv vvvvvvuu'3333333333333333333333333333333333333333333333vvvvvvvvvvvv iJB:1(   ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] TTXXxxvvvv vv vv vvvv63333333333333333333333333333333333333333333vvvvvvvvvvvv vv!|ZA:2*#"^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ZZ RRjjvvvv vv vv vv xx33333333333333333333333333333333333333333vvvvvvvvvvvv vv!vv"vv"o581+$ #^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ VVYYvvvvvv uu!yy-33333333333333333333333333333333333333vvvvvvvvvvvv vv!vv"vv"vv#vv#vV5/)# %^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] RRnnvvvv333333333333333333333333333333333331vvvvvvvvvvvv vv!vv"vv"vv#vv#vv#vv"vv"vv!vvvvvvvvv\1,&" 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __gg35333333333333333334,uuvvvvvvvv vv!vv"vv"vv#vv#vv#vv"vv"vv!vvvvvvvvvvvvy{mU,(# 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ dd*433333333333334,ttvvvvvvvv vv!vv"vv"vv#vv#vv#vv"vv!vv!vvvvvvvvvvvv3vv WelomfX3(#  ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ oo 333333333333-vvvvvv vv!vv"vv"vv#vv#vv#vv"vv!vv!vvvvvvvvvvvv333j`VL:2+%   "^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^"53333335% uu"vv"vv"vv#vv#vv#vv"vv!vv!vvvvvvvvvv333333dYOE;2+$ $^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ jj43334' {{vv#vv#vv"vv"vv!vv!vvvvvvvvvv33333333^SI>4+$ &^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^43-vv#vv"vv!vv vvvvvvvvvv333333333dYMC8.& 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ff ww!vv vvvvvvvvvv33333333333^SG=2)   ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]]cchhvvvvvvvv333333333333dYMB7-$"^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aaggjjttvvvv33333333333333_TH=2( #^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeiillll~~ 333333333333333eZOC8-$ %^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^cchhkkmmooyy6333333333333333aUI>3) 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ffjjllnnppqq 433333333333333333[PD8.%333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbhhkkmmooqqrryy!1433333333333333333bVJ?4* !^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^eeiimmnnpprrrrtt633333333333333333333\QF:/% #^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __ffjjmmooqqrrsstt 4333333333333333333333cXL@5+" &^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aahhkknnooqqssssuutt 43333333333333333333333^RG;1&(^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbhhllnnppqqssttuuvv3333333333333333333333dYMA7," #333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvvv3333333333333333333333_TH=2(&^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvvv333333333333333333333eZOC7-# #+^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvwwvv333333333333333333333aUI>3)  (1^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cciilloopprrssttuuvvvvww333333333333333333333[PD8.% '.7^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ bbhhllnnppqqssttuuvvvvwwww33333333333333333333bVJ?4*  '.6333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ aahhkknnooqqssssuuuuvvwwww33333333333333333333\QF:/%!(/6>^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ccbbffjjmmooqqrrssttuuvvvvwwyy3333333333333333333cXL@5+" ")/7?G^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ __ddhhkkeeeeiimmnnpprrrrttuuuuvvwwvv3333333333333333333^RG;1&")08@HP^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] YY ZZ iikkmmnnooaahhkkmmooqqrrssttuuvvvvwwvv3333333333333333333dYMA7,"  (08@IQY^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ WW TTSSeemmoooopprreeffjjllnnppqqrrttttuuvvvvvv4333333333333333333_TH=2(&.7@IRZb^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]] WW TTTTTTSSllppppqqqqqqmmcchhkkmmooqqqqssttttuuuuvvvv*333333333333333333eZOC7-# "+4>GQZb333^^ ^^ ^^ ^^ ^^ ^^ ^^ WW SSTTTTTTTTSSiiqqqqqqqqqqqqbbeeiillnnooqqqqssttttuuuuuu 4333333333333333333aUI>3) &/: LX\YTTTT^^ ^^ ^^ ^^ TTTTTTTTTTTTTTTTTT``qqqqqqqqppoonnbbggjjllnnooqqqqrrssttttuuxx33333333333333333333[PD8.% )3Ylv|}|TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUqqqqppoonnllkkcccchhjjmmnnooqqqqrrrrssssss"3333333333333333333bVJ?4*  "9fyTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTYYnnnnlljjggbb^^^^ddhhjjllnnooppqqrrrrssssss53333333333333333333\QF:/% +h~TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUeeffaa^^ ^^ ^^ ^^ ^^ddhhjjllmmnnooppqqqqqqrr43333333333333333333cXL@5+" _{|TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTXX \\ ^^ ^^ ^^ ^^ ^^ ^^ ^^ccggiikkllmmnnooooppppss433333333333333333333^RG;1& ArTTTTTTTTTTTTTTTTTTTTTTTTXX ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ]]aaffhhjjkkmmmmnnnnoonn"533333333333333333333dYMA7," [}TTTTTTTTTTTTTTTTTTYY ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ccffhhiijjkklllllloo4333333333333333333333_TH=2( fTTTTTTTTTTTTUUZZ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^^^bbeeffhhhhiiiihh233333333333333333333eZOC7-# jTTTTTTTTVVZZ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^__aabbccccccbb'33333333333333333333aUI>3) jTTTTTTTT]] ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ 43333333333333333333[PD9.%eTTTTTTTT^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ cc3333333333333333333bVJ?4* Y|TTTTTT^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ 3333333333333333333\QF:/%:pTT^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ hh33333333333333333cXL@5+" \z}c@333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ccvv!vv!vv vvvvvv33333333333333333^SG;1&e|~j<421^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ kkvvvvvv vv!vv vvvvvv3333333333333333dYMB7,# bwygA+)(&%$^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ggvvvvvv vv!vv!vvvvvvvv333333333333333_TI=2(Rhsy{ztkX"! 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvvvv!vv!vv vvvvvv33333333333333f[OC8.$ @PURE 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTvvvvvv vv!vv vvvvvv33333333333333aVJ>4)   333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv!vvvvvvvv3333333333333]QF:/% ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTvvvvvv vv!vv vvvvvv333333333333dXLA5+"  ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv vvvvvv333333333333_SH<1'333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv!vv vvvvvv3333333333g[PD8.# 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTTTvvvv vv!vv vvvvvv3333333333cXL@5*!333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTvvvv vv!vv vvvvvv333333333kaUI=2( ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv!vv vvvvvv33333333j^RF;/% ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTTTvvvv vv!vv vvvvvv33333333h]QE9.$ 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv vvvvvvvv333333qg\PD8.$ 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv!vv vvvvvv333333rh\QE9.% 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TT TTTTTTvv vv!vv vv33333{si^RF;/& 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTvv vv!vv xvv 3333|tk`UI=2( ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTTTTTTT vv!vv333~vmbXL@5+! 333^^ ^^ ^^ ^^ ^^ ^^ ^^ ^^ TTvvv m333ype[OC8-# 333^^ ^^ ^^ ^^ ^^ ^^ ^^ hT^b`YH{si^SG;0& 333^^ ^^ ^^ ^^ ^^ R^ox~{sfL}ukaVJ>3( 333^^ ^^ ^^ ^^ Gi{qX~wncXL@5+! ^^ ^^ AktWxoeZNB7,"  "+d}pDoeZOC7,# Nt~andYNC7," a~o2bXLA5+" jwL^TI>3) -ozTYOD:0&.o{TRI?5,# kxMJB90'bp4B:2*" Pvc@92+#frG50*# EnwZ1,(" Lm~u\*'# >cs}xjQ#!CZcge^N  ????????????Atomes-GNU-1.1.14/metadata/icons/atomes.png000066400000000000000000000063141457665371200203720ustar00rootroot00000000000000PNG  IHDR00WiCCPICC profile(}=H@HE* vqP,U(BP+`r4iHR\ׂ?Ug]\AIEJ.)ޗT38 edRI!_BD (9]gy9@s, O p($,= [߼9  T6Eh Ȏz >? b(j{(c<0Fzh#JMTXsbtZ8sFu}jgNR871:Xqg>Y^?> ?MQzC,h0s}ʗ ;EwrzZ?oݱ?*E>GF6/8@~ri"72RmK_i-rkއg`vD.G<ò҇SO|ziC|_d4w䈬W/tl{fQܹZm O:;I!t/i\Zi<˛ ak`տyĮ%Meb3r?҉xy3G$N W<:\`ζֶ XBkdրR1 ;Id|6~B-*?{}ܕ3!vB /%zü6Zb>Ϫn]9QԀq`(&{%}hQBT,(pVB S'Ä.N;]a6 HJ|ķmZ i$ _iE]mKeWt={ NNb8JQ Cv ލ8K\(.CCyDH۞'?ږ ]rQ !ơCtz9B$!p]PXBJA04t%a~+(ƒ[ϿK UI5? 2aWۧk\b(J!uij(J/Jf 0`l,e)IQ.P^tRo)xuxY\"%iJRqm;n/%JPB\zxb}5qoLF@˵dQfP,B.`xȡC -D.mZWŋR66orӕUn: v[Rv_|)Q@+Is_7Էud@RK;{˦yf$Z`#IӕiRWV7/w{zhfo@xٳ3b6E)HMc>#4Hn7msFnaTF/K >n?6q Tp-Wak,:/\ XY&l-kͼnݑ3|iϞZCJJ4a->2$ DæI%c%ȮaPn6gg]mcjY)x{??7XRGo60OHB*2QDuY(} 5 to7rxzyjt4TE1Rr&=jrY}LàxJ!BftHóG,ORa7l/ k:J,M4 nGʭ,ˢZlk408|q`& )Zolp ߍ>Gn|ø$aTMj&~ű1VX/%#N;c4jI46 !;+Bd,00HŵӆM)Ӵ,e1q%G= R: L zkB)JA>OIMGIws:8'}en7uk7 ŁR>b& nc( o^yTu3\> 3O=u^ER]M@vu6s4y[q`+'OPva_ϣTo4Nv~'jn6 Y aa{ ~VW#| 9<|xŋ,>M.#G8p͜gЋRq~piiv󋯾Ϟ{ɣaR`B :̖.#pw'|@> k$ v{&hVΝ/vnky]HSa\w$>5=_ X8+a[wx:/| _y=P[4# B?2\ή&^58: }vw/YkUlp`oeՌ@i-3h/eҠ2x9 jل:)knE`N;UM"*N,xӂ;cͺ3 ådž^ ȕHxA̍{k[ihXbN[;6\` -iYֱ| >g-]6\ >$iMZ "<v+s IENDB`Atomes-GNU-1.1.14/metadata/icons/atomes.svg000066400000000000000000000254271457665371200204130ustar00rootroot00000000000000 Atomes-GNU-1.1.14/missing000077500000000000000000000153361457665371200151040ustar00rootroot00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: Atomes-GNU-1.1.14/src/000077500000000000000000000000001457665371200142645ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/Makefile.am000066400000000000000000000304461457665371200163270ustar00rootroot00000000000000# Setup the name of the program to be generated, using: bin_PROGRAMS = atomes atomes_LDADD = $(GTK_LIBS) $(LIBXML2_LIBS) $(PANGOFT2_LIBS) $(FFMPEG_LIBS) $(GLU_LIBS) $(EPOXY_LIBS) $(INTLLIBS) # Create a variable to store the CFLAGS for all the required libraries LIBS_CFLAGS = $(GTK_CFLAGS) $(LIBXML2_CFLAGS) $(PANGOFT2_CFLAGS) $(FFMPEG_CFLAGS) $(GLU_CFLAGS) $(EPOXY_CFLAGS) # To turn OpenMP on/off OpenMP_FLAGS = -DOPENMP -fopenmp # Use AM_LDFLAGS to define additional linker flags: AM_LDFLAGS = $(OpenMP_FLAGS) # Use AM_CPPFLAGS to define additional preprocessor flags: if NATIVE_WIN32 AM_CPPFLAGS = -DGTK3 -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) else AM_CPPFLAGS = \ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ -DPACKAGE_LIB_DIR=\""$(datadir)/atomes/library"\" \ -DPACKAGE_LOGO=\""$(datadir)/atomes/pixmaps/logo.png"\" \ -DPACKAGE_LAGPL=\""$(datadir)/atomes/pixmaps/logo-agpl.png"\" \ -DPACKAGE_LABOUT=\""$(datadir)/atomes/pixmaps/logo-about.png"\" \ -DPACKAGE_TD=\""$(datadir)/atomes/pixmaps/td.png"\" \ -DPACKAGE_MOL=\""$(datadir)/atomes/pixmaps/molecule.png"\" \ -DPACKAGE_IMP=\""$(datadir)/atomes/pixmaps/import.png"\" \ -DPACKAGE_CON=\""$(datadir)/atomes/pixmaps/convert.png"\" \ -DPACKAGE_IMG=\""$(datadir)/atomes/pixmaps/image.png"\" \ -DPACKAGE_PDF=\""$(datadir)/atomes/pixmaps/pdf.png"\" \ -DPACKAGE_SVG=\""$(datadir)/atomes/pixmaps/svg.png"\" \ -DPACKAGE_EPS=\""$(datadir)/atomes/pixmaps/eps.png"\" \ -DPACKAGE_PNG=\""$(datadir)/atomes/pixmaps/png.png"\" \ -DPACKAGE_JPG=\""$(datadir)/atomes/pixmaps/jpg.png"\" \ -DPACKAGE_BMP=\""$(datadir)/atomes/pixmaps/bmp.png"\" \ -DPACKAGE_TIFF=\""$(datadir)/atomes/pixmaps/tiff.png"\" \ -DPACKAGE_EDIT=\""$(datadir)/atomes/pixmaps/cedit.png"\" \ -DPACKAGE_VOID=\""$(datadir)/atomes/pixmaps/void.png"\" \ -DPACKAGE_GR=\""$(datadir)/atomes/pixmaps/gr.png"\" \ -DPACKAGE_SQ=\""$(datadir)/atomes/pixmaps/sq.png"\" \ -DPACKAGE_AN=\""$(datadir)/atomes/pixmaps/an.png"\" \ -DPACKAGE_BD=\""$(datadir)/atomes/pixmaps/bd.png"\" \ -DPACKAGE_RI=\""$(datadir)/atomes/pixmaps/ri.png"\" \ -DPACKAGE_CH=\""$(datadir)/atomes/pixmaps/ch.png"\" \ -DPACKAGE_SP=\""$(datadir)/atomes/pixmaps/sp.png"\" \ -DPACKAGE_MS=\""$(datadir)/atomes/pixmaps/ms.png"\" \ -DPACKAGE_OGL=\""$(datadir)/atomes/pixmaps/opengl.png"\" \ -DPACKAGE_OGLM=\""$(datadir)/atomes/pixmaps/mol.png"\" \ -DPACKAGE_OGLC=\""$(datadir)/atomes/pixmaps/mol.png"\" \ -DPACKAGE_PRO=\""$(datadir)/atomes/pixmaps/prop.png"\" \ -DPACKAGE_SET=\""$(datadir)/atomes/pixmaps/settings.png"\" \ -DPACKAGE_DOTA=\""$(datadir)/atomes/pixmaps/dots/dots-a.png"\" \ -DPACKAGE_DOTB=\""$(datadir)/atomes/pixmaps/dots/dots-b.png"\" \ -DPACKAGE_DOTC=\""$(datadir)/atomes/pixmaps/dots/dots-c.png"\" \ -DPACKAGE_DOTD=\""$(datadir)/atomes/pixmaps/dots/dots-d.png"\" \ -DPACKAGE_DOTE=\""$(datadir)/atomes/pixmaps/dots/dots-e.png"\" \ -DPACKAGE_DOTF=\""$(datadir)/atomes/pixmaps/dots/dots-f.png"\" \ -DPACKAGE_DOTG=\""$(datadir)/atomes/pixmaps/dots/dots-g.png"\" \ -DPACKAGE_DOTH=\""$(datadir)/atomes/pixmaps/dots/dots-h.png"\" \ -DPACKAGE_DOTI=\""$(datadir)/atomes/pixmaps/dots/dots-i.png"\" \ -DPACKAGE_DFBD=\""$(datadir)/atomes/pixmaps/field/bd.png"\" \ -DPACKAGE_DFAN=\""$(datadir)/atomes/pixmaps/field/an.png"\" \ -DPACKAGE_DFDI=\""$(datadir)/atomes/pixmaps/field/di.png"\" \ -DPACKAGE_DFTD=\""$(datadir)/atomes/pixmaps/field/td.png"\" \ -DPACKAGE_DFIN=\""$(datadir)/atomes/pixmaps/field/in.png"\" \ -DPACKAGE_SGCP=\""$(datadir)/atomes/pixmaps/bravais/Cubic-P.png"\" \ -DPACKAGE_SGCI=\""$(datadir)/atomes/pixmaps/bravais/Cubic-I.png"\" \ -DPACKAGE_SGCF=\""$(datadir)/atomes/pixmaps/bravais/Cubic-F.png"\" \ -DPACKAGE_SGHP=\""$(datadir)/atomes/pixmaps/bravais/Hexagonal.png"\" \ -DPACKAGE_SGTR=\""$(datadir)/atomes/pixmaps/bravais/Trigonal-R.png"\" \ -DPACKAGE_SGTI=\""$(datadir)/atomes/pixmaps/bravais/Tetragonal-I.png"\" \ -DPACKAGE_SGTP=\""$(datadir)/atomes/pixmaps/bravais/Tetragonal-P.png"\" \ -DPACKAGE_SGOP=\""$(datadir)/atomes/pixmaps/bravais/Orthorhombic-P.png"\" \ -DPACKAGE_SGOI=\""$(datadir)/atomes/pixmaps/bravais/Orthorhombic-I.png"\" \ -DPACKAGE_SGOC=\""$(datadir)/atomes/pixmaps/bravais/Orthorhombic-C.png"\" \ -DPACKAGE_SGOF=\""$(datadir)/atomes/pixmaps/bravais/Orthorhombic-F.png"\" \ -DPACKAGE_SGMP=\""$(datadir)/atomes/pixmaps/bravais/Monoclinic-P.png"\" \ -DPACKAGE_SGMI=\""$(datadir)/atomes/pixmaps/bravais/Monoclinic-I.png"\" \ -DPACKAGE_SGTC=\""$(datadir)/atomes/pixmaps/bravais/Triclinic.png"\" \ -DLINUX -DGTK3 -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) endif # Use AM_FFLAGS to define additional Fortran 90 flags: AM_FFLAGS = $(OpenMP_FLAGS) for = fortran/ gui = gui/ work = workspace/ proj = project/ read = project/readers/ calc = calc/ dlpoly = calc/dl_poly/ lammps = calc/lammps/ fields = calc/force_fields/ cpmd = calc/cpmd/ cp2k = calc/cp2k/ curve = curve/ ogl = opengl/ glwin = opengl/win/ gldraw = opengl/draw/ gledit = opengl/edit/ inc = -I$(gui) -I$(work) -I$(proj) -I$(read) -I$(calc) -I$(dlpoly) -I$(lammps) -I$(fields) -I$(cpmd) -I$(cp2k) -I$(curve) -I$(glwin) -I$(gledit) -I$(gldraw) -I$(ogl) -I. includes = $(inc) -DGTK_DISABLE_DEPRECATED # Use AM_CFLAGS to define additional C flags: AM_CFLAGS = $(includes) $(OpenMP_FLAGS) $(LIBS_CFLAGS) atomes_fortran_modules = $(for)parameters.F90 \ $(for)mendeleiev.F90 atomes_fortran_files = $(for)allocbonds.F90 \ $(for)allochem.F90 \ $(for)allocmsd.F90 \ $(for)angles.F90 \ $(for)bonds.F90 \ $(for)c3d.F90 \ $(for)chains.F90 \ $(for)chains_ogl.F90 \ $(for)chemistry.F90 \ $(for)clean.F90 \ $(for)cqvf.F90 \ $(for)dmtx.F90 \ $(for)dvtb.F90 \ $(for)escs.F90 \ $(for)fzbt.F90 \ $(for)gr.F90 \ $(for)grfft.F90 \ $(for)initchains.F90 \ $(for)initrings.F90 \ $(for)lattice.F90 \ $(for)molecules.F90 \ $(for)msd.F90 \ $(for)pdb.F90 \ $(for)prepdata.F90 \ $(for)resrings.F90 \ $(for)rings-guttman.F90 \ $(for)rings-king.F90 \ $(for)rings_ogl.F90 \ $(for)rings-primitive.F90 \ $(for)sk.F90 \ $(for)spherical.F90 \ $(for)sq.F90 \ $(for)threads.F90 \ $(for)trj.F90 \ $(for)utils.F90 \ $(for)vas.F90 \ $(for)writedata.F90 \ $(for)xyz.F90 # Rules to ensure that Fortran modules are compiled before Fortran files atomes_fortran = $(atomes_fortran_modules) $(atomes_fortran_files) $(patsubst %.F90,%.o,$(atomes_fortran_files)): $(patsubst %.F90,%.o,$(atomes_fortran_modules)) atomes_gui = $(gui)bdcall.c \ $(gui)calc_menu.c \ $(gui)callbacks.c \ $(gui)chainscall.c \ $(gui)edit_menu.c \ $(gui)grcall.c \ $(gui)gtk-misc.c \ $(gui)gui.c \ $(gui)initc.c \ $(gui)interface.c \ $(gui)main.c \ $(gui)msdcall.c \ $(gui)ringscall.c \ $(gui)spcall.c \ $(gui)sqcall.c \ $(gui)tools.c \ $(gui)work_menu.c atomes_workspace = $(work)modelinfo.c \ $(work)workinfo.c \ $(work)workspace.c atomes_readers = $(read)read_c3d.c \ $(read)read_cif.c \ $(read)read_coord.c \ $(read)read_hist.c \ $(read)read_isaacs.c \ $(read)read_npt.c \ $(read)read_pdb.c \ $(read)read_trj.c \ $(read)read_vas.c \ $(read)read_xyz.c atomes_project = $(atomes_readers) \ $(proj)close_p.c \ $(proj)debugio.c \ $(proj)init_p.c \ $(proj)open_p.c \ $(proj)project.c \ $(proj)read_bond.c \ $(proj)read_curve.c \ $(proj)read_field.c \ $(proj)read_mol.c \ $(proj)read_opengl.c \ $(proj)read_qm.c \ $(proj)save_bond.c \ $(proj)save_curve.c \ $(proj)save_field.c \ $(proj)save_mol.c \ $(proj)save_opengl.c \ $(proj)save_p.c \ $(proj)save_qm.c \ $(proj)update_p.c atomes_cp2k = $(cp2k)cp2k_basis.c \ $(cp2k)cp2k_files.c \ $(cp2k)cp2k_gth-basis.c \ $(cp2k)cp2k_init.c \ $(cp2k)cp2k_mol.c \ $(cp2k)cp2k_molopt-basis.c \ $(cp2k)cp2k_pot.c \ $(cp2k)cp2k_print.c atomes_cpmd = $(cpmd)cpmd_atoms.c \ $(cpmd)cpmd_init.c \ $(cpmd)cpmd_nose.c \ $(cpmd)cpmd_print.c \ $(cpmd)cpmd_restart.c atomes_dlpoly = $(dlpoly)dlp_active.c \ $(dlpoly)dlp_atom.c \ $(dlpoly)dlp_comp.c \ $(dlpoly)dlp_control.c \ $(dlpoly)dlp_copy.c \ $(dlpoly)dlp_edit.c \ $(dlpoly)dlp_ff_match.c \ $(dlpoly)dlp_field.c \ $(dlpoly)dlp_init.c \ $(dlpoly)dlp_mol.c \ $(dlpoly)dlp_print.c \ $(dlpoly)dlp_viz.c atomes_lammps = $(lammps)la_print.c atomes_calc = $(calc)calc.c $(atomes_cp2k) $(atomes_cpmd) $(atomes_dlpoly) $(atomes_lammps) $(fields)force_fields.c atomes_curve = $(curve)cedit.c \ $(curve)curve.c \ $(curve)cwidget.c \ $(curve)datab.c \ $(curve)draw.c \ $(curve)frame.c \ $(curve)glyph.c \ $(curve)labels.c \ $(curve)legend.c \ $(curve)m_curve.c \ $(curve)show.c \ $(curve)tab-1.c \ $(curve)tab-2.c \ $(curve)tab-3.c \ $(curve)tab-4.c \ $(curve)title.c \ $(curve)w_curve.c \ $(curve)w_data.c \ $(curve)w_img.c \ $(curve)xaxis.c \ $(curve)yaxis.c atomes_glwin = $(glwin)color_box.c \ $(glwin)glwindow.c \ $(glwin)initchain.c \ $(glwin)initcoord.c \ $(glwin)initmol.c \ $(glwin)initring.c \ $(glwin)m_anim.c \ $(glwin)m_atoms.c \ $(glwin)m_axis.c \ $(glwin)m_back.c \ $(glwin)m_bonds.c \ $(glwin)m_box.c \ $(glwin)m_clones.c \ $(glwin)m_coord.c \ $(glwin)m_edit.c \ $(glwin)menu_bar.c \ $(glwin)m_map.c \ $(glwin)m_poly.c \ $(glwin)m_proj.c \ $(glwin)m_quality.c \ $(glwin)m_render.c \ $(glwin)m_rep.c \ $(glwin)m_style.c \ $(glwin)m_tools.c \ $(glwin)popup.c \ $(glwin)w_advance.c \ $(glwin)w_atoms.c \ $(glwin)w_axis.c \ $(glwin)w_bonds.c \ $(glwin)w_box.c \ $(glwin)w_chains.c \ $(glwin)w_colors.c \ $(glwin)w_coord.c \ $(glwin)w_cutoffs.c \ $(glwin)w_encode.c \ $(glwin)w_labels.c \ $(glwin)w_library.c \ $(glwin)w_measures.c \ $(glwin)w_periodic.c \ $(glwin)w_record.c \ $(glwin)w_rings.c \ $(glwin)w_search.c \ $(glwin)w_sequencer.c \ $(glwin)w_spiner.c \ $(glwin)w_volumes.c atomes_gldraw = $(gldraw)d_atoms.c \ $(gldraw)d_axis.c \ $(gldraw)d_bonds.c \ $(gldraw)d_box.c \ $(gldraw)d_label.c \ $(gldraw)d_measures.c \ $(gldraw)d_poly.c \ $(gldraw)d_rings.c \ $(gldraw)d_selection.c \ $(gldraw)image.c \ $(gldraw)movie.c \ $(gldraw)ogl_text.c atomes_gledit = $(gledit)atom_action.c \ $(gledit)atom_coord.c \ $(gledit)atom_edit.c \ $(gledit)atom_geo.c \ $(gledit)atom_insert.c \ $(gledit)atom_move.c \ $(gledit)atom_object.c \ $(gledit)atom_remove.c \ $(gledit)atom_search.c \ $(gledit)atom_species.c \ $(gledit)cbuild_action.c \ $(gledit)cbuild_edit.c \ $(gledit)cbuild_info.c \ $(gledit)cbuild_sg.c \ $(gledit)cell_cut.c \ $(gledit)cell_density.c \ $(gledit)cell_edit.c \ $(gledit)cell_extra.c \ $(gledit)cell_pixel.c \ $(gledit)cell_shift.c \ $(gledit)cell_super.c atomes_opengl = $(atomes_glwin) \ $(atomes_gldraw) \ $(atomes_gledit) \ $(ogl)arcball.c \ $(ogl)glview.c \ $(ogl)ogl_draw.c \ $(ogl)ogl_shaders.c \ $(ogl)ogl_shading.c \ $(ogl)ogl_utils.c \ $(ogl)selection.c atomes_includes = config.h \ version.h \ global.h \ bind.h \ affero.h \ $(gui)callbacks.h \ $(gui)gui.h \ $(gui)interface.h \ $(gui)xmlrw.h \ $(work)workspace.h \ $(proj)project.h \ $(read)readers.h \ $(calc)calc.h \ $(cpmd)cpmd.h \ $(cp2k)cp2k.h \ $(dl_poly)dlp_field.h \ $(field)force_fields.h \ $(curve)cedit.h \ $(curve)curve.h \ $(curve)datab.h \ $(glwin)color_box.h \ $(glwin)glwindow.h \ $(glwin)initcoord.h \ $(glwin)submenus.h \ $(glraw)movie.h \ $(gledit)atom_edit.h \ $(gledit)cbuild_edit.h \ $(gledit)cell_edit.h \ $(ogl)glview.h \ $(ogl)glwin.h \ $(ogl)math_3d.h \ $(ogl)ogl_shading.h clean: -rm -f *.mod -rm -f */*.o -rm -f */*/*.o # List the files required to build the program atomes_SOURCES = \ $(atomes_fortran) \ $(atomes_includes) \ global.c \ $(atomes_gui) \ $(atomes_workspace) \ $(atomes_project) \ $(atomes_calc) \ $(atomes_curve) \ $(atomes_opengl) if NATIVE_WIN32 EXTRA_DIST = atomes.rc.in atomes_LDADD += winatomes.o endif winatomes.o: atomes.rc $(WINDRES) $< $@ Atomes-GNU-1.1.14/src/Makefile.in000066400000000000000000002320221457665371200163320ustar00rootroot00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = atomes$(EXEEXT) @NATIVE_WIN32_TRUE@am__append_1 = winatomes.o subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__objects_1 = $(for)parameters.$(OBJEXT) $(for)mendeleiev.$(OBJEXT) am__objects_2 = $(for)allocbonds.$(OBJEXT) $(for)allochem.$(OBJEXT) \ $(for)allocmsd.$(OBJEXT) $(for)angles.$(OBJEXT) \ $(for)bonds.$(OBJEXT) $(for)c3d.$(OBJEXT) \ $(for)chains.$(OBJEXT) $(for)chains_ogl.$(OBJEXT) \ $(for)chemistry.$(OBJEXT) $(for)clean.$(OBJEXT) \ $(for)cqvf.$(OBJEXT) $(for)dmtx.$(OBJEXT) $(for)dvtb.$(OBJEXT) \ $(for)escs.$(OBJEXT) $(for)fzbt.$(OBJEXT) $(for)gr.$(OBJEXT) \ $(for)grfft.$(OBJEXT) $(for)initchains.$(OBJEXT) \ $(for)initrings.$(OBJEXT) $(for)lattice.$(OBJEXT) \ $(for)molecules.$(OBJEXT) $(for)msd.$(OBJEXT) \ $(for)pdb.$(OBJEXT) $(for)prepdata.$(OBJEXT) \ $(for)resrings.$(OBJEXT) $(for)rings-guttman.$(OBJEXT) \ $(for)rings-king.$(OBJEXT) $(for)rings_ogl.$(OBJEXT) \ $(for)rings-primitive.$(OBJEXT) $(for)sk.$(OBJEXT) \ $(for)spherical.$(OBJEXT) $(for)sq.$(OBJEXT) \ $(for)threads.$(OBJEXT) $(for)trj.$(OBJEXT) \ $(for)utils.$(OBJEXT) $(for)vas.$(OBJEXT) \ $(for)writedata.$(OBJEXT) $(for)xyz.$(OBJEXT) am__objects_3 = $(am__objects_1) $(am__objects_2) am__objects_4 = am__objects_5 = $(gui)bdcall.$(OBJEXT) $(gui)calc_menu.$(OBJEXT) \ $(gui)callbacks.$(OBJEXT) $(gui)chainscall.$(OBJEXT) \ $(gui)edit_menu.$(OBJEXT) $(gui)grcall.$(OBJEXT) \ $(gui)gtk-misc.$(OBJEXT) $(gui)gui.$(OBJEXT) \ $(gui)initc.$(OBJEXT) $(gui)interface.$(OBJEXT) \ $(gui)main.$(OBJEXT) $(gui)msdcall.$(OBJEXT) \ $(gui)ringscall.$(OBJEXT) $(gui)spcall.$(OBJEXT) \ $(gui)sqcall.$(OBJEXT) $(gui)tools.$(OBJEXT) \ $(gui)work_menu.$(OBJEXT) am__objects_6 = $(work)modelinfo.$(OBJEXT) $(work)workinfo.$(OBJEXT) \ $(work)workspace.$(OBJEXT) am__objects_7 = $(read)read_c3d.$(OBJEXT) $(read)read_cif.$(OBJEXT) \ $(read)read_coord.$(OBJEXT) $(read)read_hist.$(OBJEXT) \ $(read)read_isaacs.$(OBJEXT) $(read)read_npt.$(OBJEXT) \ $(read)read_pdb.$(OBJEXT) $(read)read_trj.$(OBJEXT) \ $(read)read_vas.$(OBJEXT) $(read)read_xyz.$(OBJEXT) am__objects_8 = $(am__objects_7) $(proj)close_p.$(OBJEXT) \ $(proj)debugio.$(OBJEXT) $(proj)init_p.$(OBJEXT) \ $(proj)open_p.$(OBJEXT) $(proj)project.$(OBJEXT) \ $(proj)read_bond.$(OBJEXT) $(proj)read_curve.$(OBJEXT) \ $(proj)read_field.$(OBJEXT) $(proj)read_mol.$(OBJEXT) \ $(proj)read_opengl.$(OBJEXT) $(proj)read_qm.$(OBJEXT) \ $(proj)save_bond.$(OBJEXT) $(proj)save_curve.$(OBJEXT) \ $(proj)save_field.$(OBJEXT) $(proj)save_mol.$(OBJEXT) \ $(proj)save_opengl.$(OBJEXT) $(proj)save_p.$(OBJEXT) \ $(proj)save_qm.$(OBJEXT) $(proj)update_p.$(OBJEXT) am__objects_9 = $(cp2k)cp2k_basis.$(OBJEXT) \ $(cp2k)cp2k_files.$(OBJEXT) $(cp2k)cp2k_gth-basis.$(OBJEXT) \ $(cp2k)cp2k_init.$(OBJEXT) $(cp2k)cp2k_mol.$(OBJEXT) \ $(cp2k)cp2k_molopt-basis.$(OBJEXT) $(cp2k)cp2k_pot.$(OBJEXT) \ $(cp2k)cp2k_print.$(OBJEXT) am__objects_10 = $(cpmd)cpmd_atoms.$(OBJEXT) \ $(cpmd)cpmd_init.$(OBJEXT) $(cpmd)cpmd_nose.$(OBJEXT) \ $(cpmd)cpmd_print.$(OBJEXT) $(cpmd)cpmd_restart.$(OBJEXT) am__objects_11 = $(dlpoly)dlp_active.$(OBJEXT) \ $(dlpoly)dlp_atom.$(OBJEXT) $(dlpoly)dlp_comp.$(OBJEXT) \ $(dlpoly)dlp_control.$(OBJEXT) $(dlpoly)dlp_copy.$(OBJEXT) \ $(dlpoly)dlp_edit.$(OBJEXT) $(dlpoly)dlp_ff_match.$(OBJEXT) \ $(dlpoly)dlp_field.$(OBJEXT) $(dlpoly)dlp_init.$(OBJEXT) \ $(dlpoly)dlp_mol.$(OBJEXT) $(dlpoly)dlp_print.$(OBJEXT) \ $(dlpoly)dlp_viz.$(OBJEXT) am__objects_12 = $(lammps)la_print.$(OBJEXT) am__objects_13 = $(calc)calc.$(OBJEXT) $(am__objects_9) \ $(am__objects_10) $(am__objects_11) $(am__objects_12) \ $(fields)force_fields.$(OBJEXT) am__objects_14 = $(curve)cedit.$(OBJEXT) $(curve)curve.$(OBJEXT) \ $(curve)cwidget.$(OBJEXT) $(curve)datab.$(OBJEXT) \ $(curve)draw.$(OBJEXT) $(curve)frame.$(OBJEXT) \ $(curve)glyph.$(OBJEXT) $(curve)labels.$(OBJEXT) \ $(curve)legend.$(OBJEXT) $(curve)m_curve.$(OBJEXT) \ $(curve)show.$(OBJEXT) $(curve)tab-1.$(OBJEXT) \ $(curve)tab-2.$(OBJEXT) $(curve)tab-3.$(OBJEXT) \ $(curve)tab-4.$(OBJEXT) $(curve)title.$(OBJEXT) \ $(curve)w_curve.$(OBJEXT) $(curve)w_data.$(OBJEXT) \ $(curve)w_img.$(OBJEXT) $(curve)xaxis.$(OBJEXT) \ $(curve)yaxis.$(OBJEXT) am__objects_15 = $(glwin)color_box.$(OBJEXT) \ $(glwin)glwindow.$(OBJEXT) $(glwin)initchain.$(OBJEXT) \ $(glwin)initcoord.$(OBJEXT) $(glwin)initmol.$(OBJEXT) \ $(glwin)initring.$(OBJEXT) $(glwin)m_anim.$(OBJEXT) \ $(glwin)m_atoms.$(OBJEXT) $(glwin)m_axis.$(OBJEXT) \ $(glwin)m_back.$(OBJEXT) $(glwin)m_bonds.$(OBJEXT) \ $(glwin)m_box.$(OBJEXT) $(glwin)m_clones.$(OBJEXT) \ $(glwin)m_coord.$(OBJEXT) $(glwin)m_edit.$(OBJEXT) \ $(glwin)menu_bar.$(OBJEXT) $(glwin)m_map.$(OBJEXT) \ $(glwin)m_poly.$(OBJEXT) $(glwin)m_proj.$(OBJEXT) \ $(glwin)m_quality.$(OBJEXT) $(glwin)m_render.$(OBJEXT) \ $(glwin)m_rep.$(OBJEXT) $(glwin)m_style.$(OBJEXT) \ $(glwin)m_tools.$(OBJEXT) $(glwin)popup.$(OBJEXT) \ $(glwin)w_advance.$(OBJEXT) $(glwin)w_atoms.$(OBJEXT) \ $(glwin)w_axis.$(OBJEXT) $(glwin)w_bonds.$(OBJEXT) \ $(glwin)w_box.$(OBJEXT) $(glwin)w_chains.$(OBJEXT) \ $(glwin)w_colors.$(OBJEXT) $(glwin)w_coord.$(OBJEXT) \ $(glwin)w_cutoffs.$(OBJEXT) $(glwin)w_encode.$(OBJEXT) \ $(glwin)w_labels.$(OBJEXT) $(glwin)w_library.$(OBJEXT) \ $(glwin)w_measures.$(OBJEXT) $(glwin)w_periodic.$(OBJEXT) \ $(glwin)w_record.$(OBJEXT) $(glwin)w_rings.$(OBJEXT) \ $(glwin)w_search.$(OBJEXT) $(glwin)w_sequencer.$(OBJEXT) \ $(glwin)w_spiner.$(OBJEXT) $(glwin)w_volumes.$(OBJEXT) am__objects_16 = $(gldraw)d_atoms.$(OBJEXT) $(gldraw)d_axis.$(OBJEXT) \ $(gldraw)d_bonds.$(OBJEXT) $(gldraw)d_box.$(OBJEXT) \ $(gldraw)d_label.$(OBJEXT) $(gldraw)d_measures.$(OBJEXT) \ $(gldraw)d_poly.$(OBJEXT) $(gldraw)d_rings.$(OBJEXT) \ $(gldraw)d_selection.$(OBJEXT) $(gldraw)image.$(OBJEXT) \ $(gldraw)movie.$(OBJEXT) $(gldraw)ogl_text.$(OBJEXT) am__objects_17 = $(gledit)atom_action.$(OBJEXT) \ $(gledit)atom_coord.$(OBJEXT) $(gledit)atom_edit.$(OBJEXT) \ $(gledit)atom_geo.$(OBJEXT) $(gledit)atom_insert.$(OBJEXT) \ $(gledit)atom_move.$(OBJEXT) $(gledit)atom_object.$(OBJEXT) \ $(gledit)atom_remove.$(OBJEXT) $(gledit)atom_search.$(OBJEXT) \ $(gledit)atom_species.$(OBJEXT) \ $(gledit)cbuild_action.$(OBJEXT) \ $(gledit)cbuild_edit.$(OBJEXT) $(gledit)cbuild_info.$(OBJEXT) \ $(gledit)cbuild_sg.$(OBJEXT) $(gledit)cell_cut.$(OBJEXT) \ $(gledit)cell_density.$(OBJEXT) $(gledit)cell_edit.$(OBJEXT) \ $(gledit)cell_extra.$(OBJEXT) $(gledit)cell_pixel.$(OBJEXT) \ $(gledit)cell_shift.$(OBJEXT) $(gledit)cell_super.$(OBJEXT) am__objects_18 = $(am__objects_15) $(am__objects_16) $(am__objects_17) \ $(ogl)arcball.$(OBJEXT) $(ogl)glview.$(OBJEXT) \ $(ogl)ogl_draw.$(OBJEXT) $(ogl)ogl_shaders.$(OBJEXT) \ $(ogl)ogl_shading.$(OBJEXT) $(ogl)ogl_utils.$(OBJEXT) \ $(ogl)selection.$(OBJEXT) am_atomes_OBJECTS = $(am__objects_3) $(am__objects_4) global.$(OBJEXT) \ $(am__objects_5) $(am__objects_6) $(am__objects_8) \ $(am__objects_13) $(am__objects_14) $(am__objects_18) atomes_OBJECTS = $(am_atomes_OBJECTS) am__DEPENDENCIES_1 = atomes_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) $(am__append_1) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/$(calc)calc.Po \ ./$(DEPDIR)/$(cp2k)cp2k_basis.Po \ ./$(DEPDIR)/$(cp2k)cp2k_files.Po \ ./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po \ ./$(DEPDIR)/$(cp2k)cp2k_init.Po ./$(DEPDIR)/$(cp2k)cp2k_mol.Po \ ./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po \ ./$(DEPDIR)/$(cp2k)cp2k_pot.Po \ ./$(DEPDIR)/$(cp2k)cp2k_print.Po \ ./$(DEPDIR)/$(cpmd)cpmd_atoms.Po \ ./$(DEPDIR)/$(cpmd)cpmd_init.Po \ ./$(DEPDIR)/$(cpmd)cpmd_nose.Po \ ./$(DEPDIR)/$(cpmd)cpmd_print.Po \ ./$(DEPDIR)/$(cpmd)cpmd_restart.Po \ ./$(DEPDIR)/$(curve)cedit.Po ./$(DEPDIR)/$(curve)curve.Po \ ./$(DEPDIR)/$(curve)cwidget.Po ./$(DEPDIR)/$(curve)datab.Po \ ./$(DEPDIR)/$(curve)draw.Po ./$(DEPDIR)/$(curve)frame.Po \ ./$(DEPDIR)/$(curve)glyph.Po ./$(DEPDIR)/$(curve)labels.Po \ ./$(DEPDIR)/$(curve)legend.Po ./$(DEPDIR)/$(curve)m_curve.Po \ ./$(DEPDIR)/$(curve)show.Po ./$(DEPDIR)/$(curve)tab-1.Po \ ./$(DEPDIR)/$(curve)tab-2.Po ./$(DEPDIR)/$(curve)tab-3.Po \ ./$(DEPDIR)/$(curve)tab-4.Po ./$(DEPDIR)/$(curve)title.Po \ ./$(DEPDIR)/$(curve)w_curve.Po ./$(DEPDIR)/$(curve)w_data.Po \ ./$(DEPDIR)/$(curve)w_img.Po ./$(DEPDIR)/$(curve)xaxis.Po \ ./$(DEPDIR)/$(curve)yaxis.Po \ ./$(DEPDIR)/$(dlpoly)dlp_active.Po \ ./$(DEPDIR)/$(dlpoly)dlp_atom.Po \ ./$(DEPDIR)/$(dlpoly)dlp_comp.Po \ ./$(DEPDIR)/$(dlpoly)dlp_control.Po \ ./$(DEPDIR)/$(dlpoly)dlp_copy.Po \ ./$(DEPDIR)/$(dlpoly)dlp_edit.Po \ ./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po \ ./$(DEPDIR)/$(dlpoly)dlp_field.Po \ ./$(DEPDIR)/$(dlpoly)dlp_init.Po \ ./$(DEPDIR)/$(dlpoly)dlp_mol.Po \ ./$(DEPDIR)/$(dlpoly)dlp_print.Po \ ./$(DEPDIR)/$(dlpoly)dlp_viz.Po \ ./$(DEPDIR)/$(fields)force_fields.Po \ ./$(DEPDIR)/$(gldraw)d_atoms.Po ./$(DEPDIR)/$(gldraw)d_axis.Po \ ./$(DEPDIR)/$(gldraw)d_bonds.Po ./$(DEPDIR)/$(gldraw)d_box.Po \ ./$(DEPDIR)/$(gldraw)d_label.Po \ ./$(DEPDIR)/$(gldraw)d_measures.Po \ ./$(DEPDIR)/$(gldraw)d_poly.Po ./$(DEPDIR)/$(gldraw)d_rings.Po \ ./$(DEPDIR)/$(gldraw)d_selection.Po \ ./$(DEPDIR)/$(gldraw)image.Po ./$(DEPDIR)/$(gldraw)movie.Po \ ./$(DEPDIR)/$(gldraw)ogl_text.Po \ ./$(DEPDIR)/$(gledit)atom_action.Po \ ./$(DEPDIR)/$(gledit)atom_coord.Po \ ./$(DEPDIR)/$(gledit)atom_edit.Po \ ./$(DEPDIR)/$(gledit)atom_geo.Po \ ./$(DEPDIR)/$(gledit)atom_insert.Po \ ./$(DEPDIR)/$(gledit)atom_move.Po \ ./$(DEPDIR)/$(gledit)atom_object.Po \ ./$(DEPDIR)/$(gledit)atom_remove.Po \ ./$(DEPDIR)/$(gledit)atom_search.Po \ ./$(DEPDIR)/$(gledit)atom_species.Po \ ./$(DEPDIR)/$(gledit)cbuild_action.Po \ ./$(DEPDIR)/$(gledit)cbuild_edit.Po \ ./$(DEPDIR)/$(gledit)cbuild_info.Po \ ./$(DEPDIR)/$(gledit)cbuild_sg.Po \ ./$(DEPDIR)/$(gledit)cell_cut.Po \ ./$(DEPDIR)/$(gledit)cell_density.Po \ ./$(DEPDIR)/$(gledit)cell_edit.Po \ ./$(DEPDIR)/$(gledit)cell_extra.Po \ ./$(DEPDIR)/$(gledit)cell_pixel.Po \ ./$(DEPDIR)/$(gledit)cell_shift.Po \ ./$(DEPDIR)/$(gledit)cell_super.Po \ ./$(DEPDIR)/$(glwin)color_box.Po \ ./$(DEPDIR)/$(glwin)glwindow.Po \ ./$(DEPDIR)/$(glwin)initchain.Po \ ./$(DEPDIR)/$(glwin)initcoord.Po \ ./$(DEPDIR)/$(glwin)initmol.Po ./$(DEPDIR)/$(glwin)initring.Po \ ./$(DEPDIR)/$(glwin)m_anim.Po ./$(DEPDIR)/$(glwin)m_atoms.Po \ ./$(DEPDIR)/$(glwin)m_axis.Po ./$(DEPDIR)/$(glwin)m_back.Po \ ./$(DEPDIR)/$(glwin)m_bonds.Po ./$(DEPDIR)/$(glwin)m_box.Po \ ./$(DEPDIR)/$(glwin)m_clones.Po ./$(DEPDIR)/$(glwin)m_coord.Po \ ./$(DEPDIR)/$(glwin)m_edit.Po ./$(DEPDIR)/$(glwin)m_map.Po \ ./$(DEPDIR)/$(glwin)m_poly.Po ./$(DEPDIR)/$(glwin)m_proj.Po \ ./$(DEPDIR)/$(glwin)m_quality.Po \ ./$(DEPDIR)/$(glwin)m_render.Po ./$(DEPDIR)/$(glwin)m_rep.Po \ ./$(DEPDIR)/$(glwin)m_style.Po ./$(DEPDIR)/$(glwin)m_tools.Po \ ./$(DEPDIR)/$(glwin)menu_bar.Po ./$(DEPDIR)/$(glwin)popup.Po \ ./$(DEPDIR)/$(glwin)w_advance.Po \ ./$(DEPDIR)/$(glwin)w_atoms.Po ./$(DEPDIR)/$(glwin)w_axis.Po \ ./$(DEPDIR)/$(glwin)w_bonds.Po ./$(DEPDIR)/$(glwin)w_box.Po \ ./$(DEPDIR)/$(glwin)w_chains.Po \ ./$(DEPDIR)/$(glwin)w_colors.Po ./$(DEPDIR)/$(glwin)w_coord.Po \ ./$(DEPDIR)/$(glwin)w_cutoffs.Po \ ./$(DEPDIR)/$(glwin)w_encode.Po \ ./$(DEPDIR)/$(glwin)w_labels.Po \ ./$(DEPDIR)/$(glwin)w_library.Po \ ./$(DEPDIR)/$(glwin)w_measures.Po \ ./$(DEPDIR)/$(glwin)w_periodic.Po \ ./$(DEPDIR)/$(glwin)w_record.Po ./$(DEPDIR)/$(glwin)w_rings.Po \ ./$(DEPDIR)/$(glwin)w_search.Po \ ./$(DEPDIR)/$(glwin)w_sequencer.Po \ ./$(DEPDIR)/$(glwin)w_spiner.Po \ ./$(DEPDIR)/$(glwin)w_volumes.Po ./$(DEPDIR)/$(gui)bdcall.Po \ ./$(DEPDIR)/$(gui)calc_menu.Po ./$(DEPDIR)/$(gui)callbacks.Po \ ./$(DEPDIR)/$(gui)chainscall.Po ./$(DEPDIR)/$(gui)edit_menu.Po \ ./$(DEPDIR)/$(gui)grcall.Po ./$(DEPDIR)/$(gui)gtk-misc.Po \ ./$(DEPDIR)/$(gui)gui.Po ./$(DEPDIR)/$(gui)initc.Po \ ./$(DEPDIR)/$(gui)interface.Po ./$(DEPDIR)/$(gui)main.Po \ ./$(DEPDIR)/$(gui)msdcall.Po ./$(DEPDIR)/$(gui)ringscall.Po \ ./$(DEPDIR)/$(gui)spcall.Po ./$(DEPDIR)/$(gui)sqcall.Po \ ./$(DEPDIR)/$(gui)tools.Po ./$(DEPDIR)/$(gui)work_menu.Po \ ./$(DEPDIR)/$(lammps)la_print.Po ./$(DEPDIR)/$(ogl)arcball.Po \ ./$(DEPDIR)/$(ogl)glview.Po ./$(DEPDIR)/$(ogl)ogl_draw.Po \ ./$(DEPDIR)/$(ogl)ogl_shaders.Po \ ./$(DEPDIR)/$(ogl)ogl_shading.Po \ ./$(DEPDIR)/$(ogl)ogl_utils.Po ./$(DEPDIR)/$(ogl)selection.Po \ ./$(DEPDIR)/$(proj)close_p.Po ./$(DEPDIR)/$(proj)debugio.Po \ ./$(DEPDIR)/$(proj)init_p.Po ./$(DEPDIR)/$(proj)open_p.Po \ ./$(DEPDIR)/$(proj)project.Po ./$(DEPDIR)/$(proj)read_bond.Po \ ./$(DEPDIR)/$(proj)read_curve.Po \ ./$(DEPDIR)/$(proj)read_field.Po \ ./$(DEPDIR)/$(proj)read_mol.Po \ ./$(DEPDIR)/$(proj)read_opengl.Po \ ./$(DEPDIR)/$(proj)read_qm.Po ./$(DEPDIR)/$(proj)save_bond.Po \ ./$(DEPDIR)/$(proj)save_curve.Po \ ./$(DEPDIR)/$(proj)save_field.Po \ ./$(DEPDIR)/$(proj)save_mol.Po \ ./$(DEPDIR)/$(proj)save_opengl.Po ./$(DEPDIR)/$(proj)save_p.Po \ ./$(DEPDIR)/$(proj)save_qm.Po ./$(DEPDIR)/$(proj)update_p.Po \ ./$(DEPDIR)/$(read)read_c3d.Po ./$(DEPDIR)/$(read)read_cif.Po \ ./$(DEPDIR)/$(read)read_coord.Po \ ./$(DEPDIR)/$(read)read_hist.Po \ ./$(DEPDIR)/$(read)read_isaacs.Po \ ./$(DEPDIR)/$(read)read_npt.Po ./$(DEPDIR)/$(read)read_pdb.Po \ ./$(DEPDIR)/$(read)read_trj.Po ./$(DEPDIR)/$(read)read_vas.Po \ ./$(DEPDIR)/$(read)read_xyz.Po ./$(DEPDIR)/$(work)modelinfo.Po \ ./$(DEPDIR)/$(work)workinfo.Po ./$(DEPDIR)/$(work)workspace.Po \ ./$(DEPDIR)/global.Po am__mv = mv -f PPFCCOMPILE = $(FC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_FCFLAGS) $(FCFLAGS) AM_V_PPFC = $(am__v_PPFC_@AM_V@) am__v_PPFC_ = $(am__v_PPFC_@AM_DEFAULT_V@) am__v_PPFC_0 = @echo " PPFC " $@; am__v_PPFC_1 = FCLD = $(FC) FCLINK = $(FCLD) $(AM_FCFLAGS) $(FCFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \ $@ AM_V_FCLD = $(am__v_FCLD_@AM_V@) am__v_FCLD_ = $(am__v_FCLD_@AM_DEFAULT_V@) am__v_FCLD_0 = @echo " FCLD " $@; am__v_FCLD_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(atomes_SOURCES) DIST_SOURCES = $(atomes_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ ATOMES_MAJOR_VERSION = @ATOMES_MAJOR_VERSION@ ATOMES_MINOR_VERSION = @ATOMES_MINOR_VERSION@ ATOMES_PATCH_VERSION = @ATOMES_PATCH_VERSION@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EPOXY_CFLAGS = @EPOXY_CFLAGS@ EPOXY_LIBS = @EPOXY_LIBS@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FC = @FC@ FCFLAGS = @FCFLAGS@ FCFLAGS_F90 = @FCFLAGS_F90@ FCFLAGS_f90 = @FCFLAGS_f90@ FCLIBS = @FCLIBS@ FFMPEG_CFLAGS = @FFMPEG_CFLAGS@ FFMPEG_LIBS = @FFMPEG_LIBS@ GETTEXT_PACKAGE = @GETTEXT_PACKAGE@ GLU_CFLAGS = @GLU_CFLAGS@ GLU_LIBS = @GLU_LIBS@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBXML2_CFLAGS = @LIBXML2_CFLAGS@ LIBXML2_LIBS = @LIBXML2_LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PANGOFT2_CFLAGS = @PANGOFT2_CFLAGS@ PANGOFT2_LIBS = @PANGOFT2_LIBS@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UP_APPSTREAM = @UP_APPSTREAM@ UP_DESKTOP = @UP_DESKTOP@ UP_MIME = @UP_MIME@ VERSION = @VERSION@ WINDRES = @WINDRES@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_FC = @ac_ct_FC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ atomes_LDADD = $(GTK_LIBS) $(LIBXML2_LIBS) $(PANGOFT2_LIBS) \ $(FFMPEG_LIBS) $(GLU_LIBS) $(EPOXY_LIBS) $(INTLLIBS) \ $(am__append_1) # Create a variable to store the CFLAGS for all the required libraries LIBS_CFLAGS = $(GTK_CFLAGS) $(LIBXML2_CFLAGS) $(PANGOFT2_CFLAGS) $(FFMPEG_CFLAGS) $(GLU_CFLAGS) $(EPOXY_CFLAGS) # To turn OpenMP on/off OpenMP_FLAGS = -DOPENMP -fopenmp # Use AM_LDFLAGS to define additional linker flags: AM_LDFLAGS = $(OpenMP_FLAGS) @NATIVE_WIN32_FALSE@AM_CPPFLAGS = \ @NATIVE_WIN32_FALSE@ -DPACKAGE_LOCALE_DIR=\""$(prefix)/$(DATADIRNAME)/locale"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_LIB_DIR=\""$(datadir)/atomes/library"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_LOGO=\""$(datadir)/atomes/pixmaps/logo.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_LAGPL=\""$(datadir)/atomes/pixmaps/logo-agpl.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_LABOUT=\""$(datadir)/atomes/pixmaps/logo-about.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_TD=\""$(datadir)/atomes/pixmaps/td.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_MOL=\""$(datadir)/atomes/pixmaps/molecule.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_IMP=\""$(datadir)/atomes/pixmaps/import.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_CON=\""$(datadir)/atomes/pixmaps/convert.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_IMG=\""$(datadir)/atomes/pixmaps/image.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_PDF=\""$(datadir)/atomes/pixmaps/pdf.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SVG=\""$(datadir)/atomes/pixmaps/svg.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_EPS=\""$(datadir)/atomes/pixmaps/eps.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_PNG=\""$(datadir)/atomes/pixmaps/png.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_JPG=\""$(datadir)/atomes/pixmaps/jpg.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_BMP=\""$(datadir)/atomes/pixmaps/bmp.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_TIFF=\""$(datadir)/atomes/pixmaps/tiff.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_EDIT=\""$(datadir)/atomes/pixmaps/cedit.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_VOID=\""$(datadir)/atomes/pixmaps/void.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_GR=\""$(datadir)/atomes/pixmaps/gr.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SQ=\""$(datadir)/atomes/pixmaps/sq.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_AN=\""$(datadir)/atomes/pixmaps/an.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_BD=\""$(datadir)/atomes/pixmaps/bd.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_RI=\""$(datadir)/atomes/pixmaps/ri.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_CH=\""$(datadir)/atomes/pixmaps/ch.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SP=\""$(datadir)/atomes/pixmaps/sp.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_MS=\""$(datadir)/atomes/pixmaps/ms.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_OGL=\""$(datadir)/atomes/pixmaps/opengl.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_OGLM=\""$(datadir)/atomes/pixmaps/mol.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_OGLC=\""$(datadir)/atomes/pixmaps/mol.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_PRO=\""$(datadir)/atomes/pixmaps/prop.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SET=\""$(datadir)/atomes/pixmaps/settings.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DOTA=\""$(datadir)/atomes/pixmaps/dots/dots-a.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DOTB=\""$(datadir)/atomes/pixmaps/dots/dots-b.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DOTC=\""$(datadir)/atomes/pixmaps/dots/dots-c.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DOTD=\""$(datadir)/atomes/pixmaps/dots/dots-d.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DOTE=\""$(datadir)/atomes/pixmaps/dots/dots-e.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DOTF=\""$(datadir)/atomes/pixmaps/dots/dots-f.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DOTG=\""$(datadir)/atomes/pixmaps/dots/dots-g.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DOTH=\""$(datadir)/atomes/pixmaps/dots/dots-h.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DOTI=\""$(datadir)/atomes/pixmaps/dots/dots-i.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DFBD=\""$(datadir)/atomes/pixmaps/field/bd.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DFAN=\""$(datadir)/atomes/pixmaps/field/an.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DFDI=\""$(datadir)/atomes/pixmaps/field/di.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DFTD=\""$(datadir)/atomes/pixmaps/field/td.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_DFIN=\""$(datadir)/atomes/pixmaps/field/in.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGCP=\""$(datadir)/atomes/pixmaps/bravais/Cubic-P.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGCI=\""$(datadir)/atomes/pixmaps/bravais/Cubic-I.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGCF=\""$(datadir)/atomes/pixmaps/bravais/Cubic-F.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGHP=\""$(datadir)/atomes/pixmaps/bravais/Hexagonal.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGTR=\""$(datadir)/atomes/pixmaps/bravais/Trigonal-R.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGTI=\""$(datadir)/atomes/pixmaps/bravais/Tetragonal-I.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGTP=\""$(datadir)/atomes/pixmaps/bravais/Tetragonal-P.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGOP=\""$(datadir)/atomes/pixmaps/bravais/Orthorhombic-P.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGOI=\""$(datadir)/atomes/pixmaps/bravais/Orthorhombic-I.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGOC=\""$(datadir)/atomes/pixmaps/bravais/Orthorhombic-C.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGOF=\""$(datadir)/atomes/pixmaps/bravais/Orthorhombic-F.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGMP=\""$(datadir)/atomes/pixmaps/bravais/Monoclinic-P.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGMI=\""$(datadir)/atomes/pixmaps/bravais/Monoclinic-I.png"\" \ @NATIVE_WIN32_FALSE@ -DPACKAGE_SGTC=\""$(datadir)/atomes/pixmaps/bravais/Triclinic.png"\" \ @NATIVE_WIN32_FALSE@ -DLINUX -DGTK3 -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) # Use AM_CPPFLAGS to define additional preprocessor flags: @NATIVE_WIN32_TRUE@AM_CPPFLAGS = -DGTK3 -DGTKGLAREA -DMENU_ICONS $(OpenMP_FLAGS) # Use AM_FFLAGS to define additional Fortran 90 flags: AM_FFLAGS = $(OpenMP_FLAGS) for = fortran/ gui = gui/ work = workspace/ proj = project/ read = project/readers/ calc = calc/ dlpoly = calc/dl_poly/ lammps = calc/lammps/ fields = calc/force_fields/ cpmd = calc/cpmd/ cp2k = calc/cp2k/ curve = curve/ ogl = opengl/ glwin = opengl/win/ gldraw = opengl/draw/ gledit = opengl/edit/ inc = -I$(gui) -I$(work) -I$(proj) -I$(read) -I$(calc) -I$(dlpoly) -I$(lammps) -I$(fields) -I$(cpmd) -I$(cp2k) -I$(curve) -I$(glwin) -I$(gledit) -I$(gldraw) -I$(ogl) -I. includes = $(inc) -DGTK_DISABLE_DEPRECATED # Use AM_CFLAGS to define additional C flags: AM_CFLAGS = $(includes) $(OpenMP_FLAGS) $(LIBS_CFLAGS) atomes_fortran_modules = $(for)parameters.F90 \ $(for)mendeleiev.F90 atomes_fortran_files = $(for)allocbonds.F90 \ $(for)allochem.F90 \ $(for)allocmsd.F90 \ $(for)angles.F90 \ $(for)bonds.F90 \ $(for)c3d.F90 \ $(for)chains.F90 \ $(for)chains_ogl.F90 \ $(for)chemistry.F90 \ $(for)clean.F90 \ $(for)cqvf.F90 \ $(for)dmtx.F90 \ $(for)dvtb.F90 \ $(for)escs.F90 \ $(for)fzbt.F90 \ $(for)gr.F90 \ $(for)grfft.F90 \ $(for)initchains.F90 \ $(for)initrings.F90 \ $(for)lattice.F90 \ $(for)molecules.F90 \ $(for)msd.F90 \ $(for)pdb.F90 \ $(for)prepdata.F90 \ $(for)resrings.F90 \ $(for)rings-guttman.F90 \ $(for)rings-king.F90 \ $(for)rings_ogl.F90 \ $(for)rings-primitive.F90 \ $(for)sk.F90 \ $(for)spherical.F90 \ $(for)sq.F90 \ $(for)threads.F90 \ $(for)trj.F90 \ $(for)utils.F90 \ $(for)vas.F90 \ $(for)writedata.F90 \ $(for)xyz.F90 # Rules to ensure that Fortran modules are compiled before Fortran files atomes_fortran = $(atomes_fortran_modules) $(atomes_fortran_files) atomes_gui = $(gui)bdcall.c \ $(gui)calc_menu.c \ $(gui)callbacks.c \ $(gui)chainscall.c \ $(gui)edit_menu.c \ $(gui)grcall.c \ $(gui)gtk-misc.c \ $(gui)gui.c \ $(gui)initc.c \ $(gui)interface.c \ $(gui)main.c \ $(gui)msdcall.c \ $(gui)ringscall.c \ $(gui)spcall.c \ $(gui)sqcall.c \ $(gui)tools.c \ $(gui)work_menu.c atomes_workspace = $(work)modelinfo.c \ $(work)workinfo.c \ $(work)workspace.c atomes_readers = $(read)read_c3d.c \ $(read)read_cif.c \ $(read)read_coord.c \ $(read)read_hist.c \ $(read)read_isaacs.c \ $(read)read_npt.c \ $(read)read_pdb.c \ $(read)read_trj.c \ $(read)read_vas.c \ $(read)read_xyz.c atomes_project = $(atomes_readers) \ $(proj)close_p.c \ $(proj)debugio.c \ $(proj)init_p.c \ $(proj)open_p.c \ $(proj)project.c \ $(proj)read_bond.c \ $(proj)read_curve.c \ $(proj)read_field.c \ $(proj)read_mol.c \ $(proj)read_opengl.c \ $(proj)read_qm.c \ $(proj)save_bond.c \ $(proj)save_curve.c \ $(proj)save_field.c \ $(proj)save_mol.c \ $(proj)save_opengl.c \ $(proj)save_p.c \ $(proj)save_qm.c \ $(proj)update_p.c atomes_cp2k = $(cp2k)cp2k_basis.c \ $(cp2k)cp2k_files.c \ $(cp2k)cp2k_gth-basis.c \ $(cp2k)cp2k_init.c \ $(cp2k)cp2k_mol.c \ $(cp2k)cp2k_molopt-basis.c \ $(cp2k)cp2k_pot.c \ $(cp2k)cp2k_print.c atomes_cpmd = $(cpmd)cpmd_atoms.c \ $(cpmd)cpmd_init.c \ $(cpmd)cpmd_nose.c \ $(cpmd)cpmd_print.c \ $(cpmd)cpmd_restart.c atomes_dlpoly = $(dlpoly)dlp_active.c \ $(dlpoly)dlp_atom.c \ $(dlpoly)dlp_comp.c \ $(dlpoly)dlp_control.c \ $(dlpoly)dlp_copy.c \ $(dlpoly)dlp_edit.c \ $(dlpoly)dlp_ff_match.c \ $(dlpoly)dlp_field.c \ $(dlpoly)dlp_init.c \ $(dlpoly)dlp_mol.c \ $(dlpoly)dlp_print.c \ $(dlpoly)dlp_viz.c atomes_lammps = $(lammps)la_print.c atomes_calc = $(calc)calc.c $(atomes_cp2k) $(atomes_cpmd) $(atomes_dlpoly) $(atomes_lammps) $(fields)force_fields.c atomes_curve = $(curve)cedit.c \ $(curve)curve.c \ $(curve)cwidget.c \ $(curve)datab.c \ $(curve)draw.c \ $(curve)frame.c \ $(curve)glyph.c \ $(curve)labels.c \ $(curve)legend.c \ $(curve)m_curve.c \ $(curve)show.c \ $(curve)tab-1.c \ $(curve)tab-2.c \ $(curve)tab-3.c \ $(curve)tab-4.c \ $(curve)title.c \ $(curve)w_curve.c \ $(curve)w_data.c \ $(curve)w_img.c \ $(curve)xaxis.c \ $(curve)yaxis.c atomes_glwin = $(glwin)color_box.c \ $(glwin)glwindow.c \ $(glwin)initchain.c \ $(glwin)initcoord.c \ $(glwin)initmol.c \ $(glwin)initring.c \ $(glwin)m_anim.c \ $(glwin)m_atoms.c \ $(glwin)m_axis.c \ $(glwin)m_back.c \ $(glwin)m_bonds.c \ $(glwin)m_box.c \ $(glwin)m_clones.c \ $(glwin)m_coord.c \ $(glwin)m_edit.c \ $(glwin)menu_bar.c \ $(glwin)m_map.c \ $(glwin)m_poly.c \ $(glwin)m_proj.c \ $(glwin)m_quality.c \ $(glwin)m_render.c \ $(glwin)m_rep.c \ $(glwin)m_style.c \ $(glwin)m_tools.c \ $(glwin)popup.c \ $(glwin)w_advance.c \ $(glwin)w_atoms.c \ $(glwin)w_axis.c \ $(glwin)w_bonds.c \ $(glwin)w_box.c \ $(glwin)w_chains.c \ $(glwin)w_colors.c \ $(glwin)w_coord.c \ $(glwin)w_cutoffs.c \ $(glwin)w_encode.c \ $(glwin)w_labels.c \ $(glwin)w_library.c \ $(glwin)w_measures.c \ $(glwin)w_periodic.c \ $(glwin)w_record.c \ $(glwin)w_rings.c \ $(glwin)w_search.c \ $(glwin)w_sequencer.c \ $(glwin)w_spiner.c \ $(glwin)w_volumes.c atomes_gldraw = $(gldraw)d_atoms.c \ $(gldraw)d_axis.c \ $(gldraw)d_bonds.c \ $(gldraw)d_box.c \ $(gldraw)d_label.c \ $(gldraw)d_measures.c \ $(gldraw)d_poly.c \ $(gldraw)d_rings.c \ $(gldraw)d_selection.c \ $(gldraw)image.c \ $(gldraw)movie.c \ $(gldraw)ogl_text.c atomes_gledit = $(gledit)atom_action.c \ $(gledit)atom_coord.c \ $(gledit)atom_edit.c \ $(gledit)atom_geo.c \ $(gledit)atom_insert.c \ $(gledit)atom_move.c \ $(gledit)atom_object.c \ $(gledit)atom_remove.c \ $(gledit)atom_search.c \ $(gledit)atom_species.c \ $(gledit)cbuild_action.c \ $(gledit)cbuild_edit.c \ $(gledit)cbuild_info.c \ $(gledit)cbuild_sg.c \ $(gledit)cell_cut.c \ $(gledit)cell_density.c \ $(gledit)cell_edit.c \ $(gledit)cell_extra.c \ $(gledit)cell_pixel.c \ $(gledit)cell_shift.c \ $(gledit)cell_super.c atomes_opengl = $(atomes_glwin) \ $(atomes_gldraw) \ $(atomes_gledit) \ $(ogl)arcball.c \ $(ogl)glview.c \ $(ogl)ogl_draw.c \ $(ogl)ogl_shaders.c \ $(ogl)ogl_shading.c \ $(ogl)ogl_utils.c \ $(ogl)selection.c atomes_includes = config.h \ version.h \ global.h \ bind.h \ affero.h \ $(gui)callbacks.h \ $(gui)gui.h \ $(gui)interface.h \ $(gui)xmlrw.h \ $(work)workspace.h \ $(proj)project.h \ $(read)readers.h \ $(calc)calc.h \ $(cpmd)cpmd.h \ $(cp2k)cp2k.h \ $(dl_poly)dlp_field.h \ $(field)force_fields.h \ $(curve)cedit.h \ $(curve)curve.h \ $(curve)datab.h \ $(glwin)color_box.h \ $(glwin)glwindow.h \ $(glwin)initcoord.h \ $(glwin)submenus.h \ $(glraw)movie.h \ $(gledit)atom_edit.h \ $(gledit)cbuild_edit.h \ $(gledit)cell_edit.h \ $(ogl)glview.h \ $(ogl)glwin.h \ $(ogl)math_3d.h \ $(ogl)ogl_shading.h # List the files required to build the program atomes_SOURCES = \ $(atomes_fortran) \ $(atomes_includes) \ global.c \ $(atomes_gui) \ $(atomes_workspace) \ $(atomes_project) \ $(atomes_calc) \ $(atomes_curve) \ $(atomes_opengl) @NATIVE_WIN32_TRUE@EXTRA_DIST = atomes.rc.in all: all-am .SUFFIXES: .SUFFIXES: .F90 .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) atomes$(EXEEXT): $(atomes_OBJECTS) $(atomes_DEPENDENCIES) $(EXTRA_atomes_DEPENDENCIES) @rm -f atomes$(EXEEXT) $(AM_V_FCLD)$(FCLINK) $(atomes_OBJECTS) $(atomes_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(calc)calc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_basis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_files.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_init.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_pot.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cp2k)cp2k_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_init.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_nose.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(cpmd)cpmd_restart.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)cedit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)cwidget.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)datab.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)draw.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)frame.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)glyph.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)labels.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)legend.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)m_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)show.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-1.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-2.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-3.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)tab-4.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)title.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)w_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)w_data.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)w_img.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)xaxis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(curve)yaxis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_active.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_atom.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_comp.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_control.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_copy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_init.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(dlpoly)dlp_viz.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(fields)force_fields.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_axis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_bonds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_label.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_measures.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_poly.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_rings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)d_selection.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)image.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)movie.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gldraw)ogl_text.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_geo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_insert.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_move.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_object.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_remove.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_search.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)atom_species.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_action.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_info.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cbuild_sg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_cut.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_density.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_extra.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_pixel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_shift.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gledit)cell_super.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)color_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)glwindow.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initchain.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initcoord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initmol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)initring.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_anim.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_axis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_back.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_bonds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_clones.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_edit.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_map.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_poly.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_proj.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_quality.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_render.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_rep.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_style.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)m_tools.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)menu_bar.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)popup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_advance.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_atoms.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_axis.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_bonds.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_box.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_chains.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_colors.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_cutoffs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_encode.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_labels.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_library.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_measures.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_periodic.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_record.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_rings.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_search.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_sequencer.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_spiner.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(glwin)w_volumes.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)bdcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)calc_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)callbacks.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)chainscall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)edit_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)grcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)gtk-misc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)gui.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)initc.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)interface.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)main.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)msdcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)ringscall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)spcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)sqcall.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)tools.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(gui)work_menu.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(lammps)la_print.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)arcball.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)glview.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_draw.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_shaders.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_shading.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)ogl_utils.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(ogl)selection.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)close_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)debugio.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)init_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)open_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)project.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_bond.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_opengl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)read_qm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_bond.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_curve.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_mol.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_opengl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)save_qm.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(proj)update_p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_c3d.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_cif.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_coord.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_hist.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_isaacs.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_npt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_pdb.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_trj.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_vas.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(read)read_xyz.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(work)modelinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(work)workinfo.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/$(work)workspace.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/global.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .F90.o: $(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ $< .F90.obj: $(AM_V_PPFC)$(PPFCCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/$(calc)calc.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_files.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_init.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_mol.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_pot.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_atoms.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_init.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_nose.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_restart.Po -rm -f ./$(DEPDIR)/$(curve)cedit.Po -rm -f ./$(DEPDIR)/$(curve)curve.Po -rm -f ./$(DEPDIR)/$(curve)cwidget.Po -rm -f ./$(DEPDIR)/$(curve)datab.Po -rm -f ./$(DEPDIR)/$(curve)draw.Po -rm -f ./$(DEPDIR)/$(curve)frame.Po -rm -f ./$(DEPDIR)/$(curve)glyph.Po -rm -f ./$(DEPDIR)/$(curve)labels.Po -rm -f ./$(DEPDIR)/$(curve)legend.Po -rm -f ./$(DEPDIR)/$(curve)m_curve.Po -rm -f ./$(DEPDIR)/$(curve)show.Po -rm -f ./$(DEPDIR)/$(curve)tab-1.Po -rm -f ./$(DEPDIR)/$(curve)tab-2.Po -rm -f ./$(DEPDIR)/$(curve)tab-3.Po -rm -f ./$(DEPDIR)/$(curve)tab-4.Po -rm -f ./$(DEPDIR)/$(curve)title.Po -rm -f ./$(DEPDIR)/$(curve)w_curve.Po -rm -f ./$(DEPDIR)/$(curve)w_data.Po -rm -f ./$(DEPDIR)/$(curve)w_img.Po -rm -f ./$(DEPDIR)/$(curve)xaxis.Po -rm -f ./$(DEPDIR)/$(curve)yaxis.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_active.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_atom.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_comp.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_control.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_copy.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_edit.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_field.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_init.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_mol.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_print.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_viz.Po -rm -f ./$(DEPDIR)/$(fields)force_fields.Po -rm -f ./$(DEPDIR)/$(gldraw)d_atoms.Po -rm -f ./$(DEPDIR)/$(gldraw)d_axis.Po -rm -f ./$(DEPDIR)/$(gldraw)d_bonds.Po -rm -f ./$(DEPDIR)/$(gldraw)d_box.Po -rm -f ./$(DEPDIR)/$(gldraw)d_label.Po -rm -f ./$(DEPDIR)/$(gldraw)d_measures.Po -rm -f ./$(DEPDIR)/$(gldraw)d_poly.Po -rm -f ./$(DEPDIR)/$(gldraw)d_rings.Po -rm -f ./$(DEPDIR)/$(gldraw)d_selection.Po -rm -f ./$(DEPDIR)/$(gldraw)image.Po -rm -f ./$(DEPDIR)/$(gldraw)movie.Po -rm -f ./$(DEPDIR)/$(gldraw)ogl_text.Po -rm -f ./$(DEPDIR)/$(gledit)atom_action.Po -rm -f ./$(DEPDIR)/$(gledit)atom_coord.Po -rm -f ./$(DEPDIR)/$(gledit)atom_edit.Po -rm -f ./$(DEPDIR)/$(gledit)atom_geo.Po -rm -f ./$(DEPDIR)/$(gledit)atom_insert.Po -rm -f ./$(DEPDIR)/$(gledit)atom_move.Po -rm -f ./$(DEPDIR)/$(gledit)atom_object.Po -rm -f ./$(DEPDIR)/$(gledit)atom_remove.Po -rm -f ./$(DEPDIR)/$(gledit)atom_search.Po -rm -f ./$(DEPDIR)/$(gledit)atom_species.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_action.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_info.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_sg.Po -rm -f ./$(DEPDIR)/$(gledit)cell_cut.Po -rm -f ./$(DEPDIR)/$(gledit)cell_density.Po -rm -f ./$(DEPDIR)/$(gledit)cell_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cell_extra.Po -rm -f ./$(DEPDIR)/$(gledit)cell_pixel.Po -rm -f ./$(DEPDIR)/$(gledit)cell_shift.Po -rm -f ./$(DEPDIR)/$(gledit)cell_super.Po -rm -f ./$(DEPDIR)/$(glwin)color_box.Po -rm -f ./$(DEPDIR)/$(glwin)glwindow.Po -rm -f ./$(DEPDIR)/$(glwin)initchain.Po -rm -f ./$(DEPDIR)/$(glwin)initcoord.Po -rm -f ./$(DEPDIR)/$(glwin)initmol.Po -rm -f ./$(DEPDIR)/$(glwin)initring.Po -rm -f ./$(DEPDIR)/$(glwin)m_anim.Po -rm -f ./$(DEPDIR)/$(glwin)m_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)m_axis.Po -rm -f ./$(DEPDIR)/$(glwin)m_back.Po -rm -f ./$(DEPDIR)/$(glwin)m_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)m_box.Po -rm -f ./$(DEPDIR)/$(glwin)m_clones.Po -rm -f ./$(DEPDIR)/$(glwin)m_coord.Po -rm -f ./$(DEPDIR)/$(glwin)m_edit.Po -rm -f ./$(DEPDIR)/$(glwin)m_map.Po -rm -f ./$(DEPDIR)/$(glwin)m_poly.Po -rm -f ./$(DEPDIR)/$(glwin)m_proj.Po -rm -f ./$(DEPDIR)/$(glwin)m_quality.Po -rm -f ./$(DEPDIR)/$(glwin)m_render.Po -rm -f ./$(DEPDIR)/$(glwin)m_rep.Po -rm -f ./$(DEPDIR)/$(glwin)m_style.Po -rm -f ./$(DEPDIR)/$(glwin)m_tools.Po -rm -f ./$(DEPDIR)/$(glwin)menu_bar.Po -rm -f ./$(DEPDIR)/$(glwin)popup.Po -rm -f ./$(DEPDIR)/$(glwin)w_advance.Po -rm -f ./$(DEPDIR)/$(glwin)w_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)w_axis.Po -rm -f ./$(DEPDIR)/$(glwin)w_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)w_box.Po -rm -f ./$(DEPDIR)/$(glwin)w_chains.Po -rm -f ./$(DEPDIR)/$(glwin)w_colors.Po -rm -f ./$(DEPDIR)/$(glwin)w_coord.Po -rm -f ./$(DEPDIR)/$(glwin)w_cutoffs.Po -rm -f ./$(DEPDIR)/$(glwin)w_encode.Po -rm -f ./$(DEPDIR)/$(glwin)w_labels.Po -rm -f ./$(DEPDIR)/$(glwin)w_library.Po -rm -f ./$(DEPDIR)/$(glwin)w_measures.Po -rm -f ./$(DEPDIR)/$(glwin)w_periodic.Po -rm -f ./$(DEPDIR)/$(glwin)w_record.Po -rm -f ./$(DEPDIR)/$(glwin)w_rings.Po -rm -f ./$(DEPDIR)/$(glwin)w_search.Po -rm -f ./$(DEPDIR)/$(glwin)w_sequencer.Po -rm -f ./$(DEPDIR)/$(glwin)w_spiner.Po -rm -f ./$(DEPDIR)/$(glwin)w_volumes.Po -rm -f ./$(DEPDIR)/$(gui)bdcall.Po -rm -f ./$(DEPDIR)/$(gui)calc_menu.Po -rm -f ./$(DEPDIR)/$(gui)callbacks.Po -rm -f ./$(DEPDIR)/$(gui)chainscall.Po -rm -f ./$(DEPDIR)/$(gui)edit_menu.Po -rm -f ./$(DEPDIR)/$(gui)grcall.Po -rm -f ./$(DEPDIR)/$(gui)gtk-misc.Po -rm -f ./$(DEPDIR)/$(gui)gui.Po -rm -f ./$(DEPDIR)/$(gui)initc.Po -rm -f ./$(DEPDIR)/$(gui)interface.Po -rm -f ./$(DEPDIR)/$(gui)main.Po -rm -f ./$(DEPDIR)/$(gui)msdcall.Po -rm -f ./$(DEPDIR)/$(gui)ringscall.Po -rm -f ./$(DEPDIR)/$(gui)spcall.Po -rm -f ./$(DEPDIR)/$(gui)sqcall.Po -rm -f ./$(DEPDIR)/$(gui)tools.Po -rm -f ./$(DEPDIR)/$(gui)work_menu.Po -rm -f ./$(DEPDIR)/$(lammps)la_print.Po -rm -f ./$(DEPDIR)/$(ogl)arcball.Po -rm -f ./$(DEPDIR)/$(ogl)glview.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_draw.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shaders.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shading.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_utils.Po -rm -f ./$(DEPDIR)/$(ogl)selection.Po -rm -f ./$(DEPDIR)/$(proj)close_p.Po -rm -f ./$(DEPDIR)/$(proj)debugio.Po -rm -f ./$(DEPDIR)/$(proj)init_p.Po -rm -f ./$(DEPDIR)/$(proj)open_p.Po -rm -f ./$(DEPDIR)/$(proj)project.Po -rm -f ./$(DEPDIR)/$(proj)read_bond.Po -rm -f ./$(DEPDIR)/$(proj)read_curve.Po -rm -f ./$(DEPDIR)/$(proj)read_field.Po -rm -f ./$(DEPDIR)/$(proj)read_mol.Po -rm -f ./$(DEPDIR)/$(proj)read_opengl.Po -rm -f ./$(DEPDIR)/$(proj)read_qm.Po -rm -f ./$(DEPDIR)/$(proj)save_bond.Po -rm -f ./$(DEPDIR)/$(proj)save_curve.Po -rm -f ./$(DEPDIR)/$(proj)save_field.Po -rm -f ./$(DEPDIR)/$(proj)save_mol.Po -rm -f ./$(DEPDIR)/$(proj)save_opengl.Po -rm -f ./$(DEPDIR)/$(proj)save_p.Po -rm -f ./$(DEPDIR)/$(proj)save_qm.Po -rm -f ./$(DEPDIR)/$(proj)update_p.Po -rm -f ./$(DEPDIR)/$(read)read_c3d.Po -rm -f ./$(DEPDIR)/$(read)read_cif.Po -rm -f ./$(DEPDIR)/$(read)read_coord.Po -rm -f ./$(DEPDIR)/$(read)read_hist.Po -rm -f ./$(DEPDIR)/$(read)read_isaacs.Po -rm -f ./$(DEPDIR)/$(read)read_npt.Po -rm -f ./$(DEPDIR)/$(read)read_pdb.Po -rm -f ./$(DEPDIR)/$(read)read_trj.Po -rm -f ./$(DEPDIR)/$(read)read_vas.Po -rm -f ./$(DEPDIR)/$(read)read_xyz.Po -rm -f ./$(DEPDIR)/$(work)modelinfo.Po -rm -f ./$(DEPDIR)/$(work)workinfo.Po -rm -f ./$(DEPDIR)/$(work)workspace.Po -rm -f ./$(DEPDIR)/global.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/$(calc)calc.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_files.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_gth-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_init.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_mol.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_molopt-basis.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_pot.Po -rm -f ./$(DEPDIR)/$(cp2k)cp2k_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_atoms.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_init.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_nose.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_print.Po -rm -f ./$(DEPDIR)/$(cpmd)cpmd_restart.Po -rm -f ./$(DEPDIR)/$(curve)cedit.Po -rm -f ./$(DEPDIR)/$(curve)curve.Po -rm -f ./$(DEPDIR)/$(curve)cwidget.Po -rm -f ./$(DEPDIR)/$(curve)datab.Po -rm -f ./$(DEPDIR)/$(curve)draw.Po -rm -f ./$(DEPDIR)/$(curve)frame.Po -rm -f ./$(DEPDIR)/$(curve)glyph.Po -rm -f ./$(DEPDIR)/$(curve)labels.Po -rm -f ./$(DEPDIR)/$(curve)legend.Po -rm -f ./$(DEPDIR)/$(curve)m_curve.Po -rm -f ./$(DEPDIR)/$(curve)show.Po -rm -f ./$(DEPDIR)/$(curve)tab-1.Po -rm -f ./$(DEPDIR)/$(curve)tab-2.Po -rm -f ./$(DEPDIR)/$(curve)tab-3.Po -rm -f ./$(DEPDIR)/$(curve)tab-4.Po -rm -f ./$(DEPDIR)/$(curve)title.Po -rm -f ./$(DEPDIR)/$(curve)w_curve.Po -rm -f ./$(DEPDIR)/$(curve)w_data.Po -rm -f ./$(DEPDIR)/$(curve)w_img.Po -rm -f ./$(DEPDIR)/$(curve)xaxis.Po -rm -f ./$(DEPDIR)/$(curve)yaxis.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_active.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_atom.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_comp.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_control.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_copy.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_edit.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_ff_match.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_field.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_init.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_mol.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_print.Po -rm -f ./$(DEPDIR)/$(dlpoly)dlp_viz.Po -rm -f ./$(DEPDIR)/$(fields)force_fields.Po -rm -f ./$(DEPDIR)/$(gldraw)d_atoms.Po -rm -f ./$(DEPDIR)/$(gldraw)d_axis.Po -rm -f ./$(DEPDIR)/$(gldraw)d_bonds.Po -rm -f ./$(DEPDIR)/$(gldraw)d_box.Po -rm -f ./$(DEPDIR)/$(gldraw)d_label.Po -rm -f ./$(DEPDIR)/$(gldraw)d_measures.Po -rm -f ./$(DEPDIR)/$(gldraw)d_poly.Po -rm -f ./$(DEPDIR)/$(gldraw)d_rings.Po -rm -f ./$(DEPDIR)/$(gldraw)d_selection.Po -rm -f ./$(DEPDIR)/$(gldraw)image.Po -rm -f ./$(DEPDIR)/$(gldraw)movie.Po -rm -f ./$(DEPDIR)/$(gldraw)ogl_text.Po -rm -f ./$(DEPDIR)/$(gledit)atom_action.Po -rm -f ./$(DEPDIR)/$(gledit)atom_coord.Po -rm -f ./$(DEPDIR)/$(gledit)atom_edit.Po -rm -f ./$(DEPDIR)/$(gledit)atom_geo.Po -rm -f ./$(DEPDIR)/$(gledit)atom_insert.Po -rm -f ./$(DEPDIR)/$(gledit)atom_move.Po -rm -f ./$(DEPDIR)/$(gledit)atom_object.Po -rm -f ./$(DEPDIR)/$(gledit)atom_remove.Po -rm -f ./$(DEPDIR)/$(gledit)atom_search.Po -rm -f ./$(DEPDIR)/$(gledit)atom_species.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_action.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_info.Po -rm -f ./$(DEPDIR)/$(gledit)cbuild_sg.Po -rm -f ./$(DEPDIR)/$(gledit)cell_cut.Po -rm -f ./$(DEPDIR)/$(gledit)cell_density.Po -rm -f ./$(DEPDIR)/$(gledit)cell_edit.Po -rm -f ./$(DEPDIR)/$(gledit)cell_extra.Po -rm -f ./$(DEPDIR)/$(gledit)cell_pixel.Po -rm -f ./$(DEPDIR)/$(gledit)cell_shift.Po -rm -f ./$(DEPDIR)/$(gledit)cell_super.Po -rm -f ./$(DEPDIR)/$(glwin)color_box.Po -rm -f ./$(DEPDIR)/$(glwin)glwindow.Po -rm -f ./$(DEPDIR)/$(glwin)initchain.Po -rm -f ./$(DEPDIR)/$(glwin)initcoord.Po -rm -f ./$(DEPDIR)/$(glwin)initmol.Po -rm -f ./$(DEPDIR)/$(glwin)initring.Po -rm -f ./$(DEPDIR)/$(glwin)m_anim.Po -rm -f ./$(DEPDIR)/$(glwin)m_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)m_axis.Po -rm -f ./$(DEPDIR)/$(glwin)m_back.Po -rm -f ./$(DEPDIR)/$(glwin)m_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)m_box.Po -rm -f ./$(DEPDIR)/$(glwin)m_clones.Po -rm -f ./$(DEPDIR)/$(glwin)m_coord.Po -rm -f ./$(DEPDIR)/$(glwin)m_edit.Po -rm -f ./$(DEPDIR)/$(glwin)m_map.Po -rm -f ./$(DEPDIR)/$(glwin)m_poly.Po -rm -f ./$(DEPDIR)/$(glwin)m_proj.Po -rm -f ./$(DEPDIR)/$(glwin)m_quality.Po -rm -f ./$(DEPDIR)/$(glwin)m_render.Po -rm -f ./$(DEPDIR)/$(glwin)m_rep.Po -rm -f ./$(DEPDIR)/$(glwin)m_style.Po -rm -f ./$(DEPDIR)/$(glwin)m_tools.Po -rm -f ./$(DEPDIR)/$(glwin)menu_bar.Po -rm -f ./$(DEPDIR)/$(glwin)popup.Po -rm -f ./$(DEPDIR)/$(glwin)w_advance.Po -rm -f ./$(DEPDIR)/$(glwin)w_atoms.Po -rm -f ./$(DEPDIR)/$(glwin)w_axis.Po -rm -f ./$(DEPDIR)/$(glwin)w_bonds.Po -rm -f ./$(DEPDIR)/$(glwin)w_box.Po -rm -f ./$(DEPDIR)/$(glwin)w_chains.Po -rm -f ./$(DEPDIR)/$(glwin)w_colors.Po -rm -f ./$(DEPDIR)/$(glwin)w_coord.Po -rm -f ./$(DEPDIR)/$(glwin)w_cutoffs.Po -rm -f ./$(DEPDIR)/$(glwin)w_encode.Po -rm -f ./$(DEPDIR)/$(glwin)w_labels.Po -rm -f ./$(DEPDIR)/$(glwin)w_library.Po -rm -f ./$(DEPDIR)/$(glwin)w_measures.Po -rm -f ./$(DEPDIR)/$(glwin)w_periodic.Po -rm -f ./$(DEPDIR)/$(glwin)w_record.Po -rm -f ./$(DEPDIR)/$(glwin)w_rings.Po -rm -f ./$(DEPDIR)/$(glwin)w_search.Po -rm -f ./$(DEPDIR)/$(glwin)w_sequencer.Po -rm -f ./$(DEPDIR)/$(glwin)w_spiner.Po -rm -f ./$(DEPDIR)/$(glwin)w_volumes.Po -rm -f ./$(DEPDIR)/$(gui)bdcall.Po -rm -f ./$(DEPDIR)/$(gui)calc_menu.Po -rm -f ./$(DEPDIR)/$(gui)callbacks.Po -rm -f ./$(DEPDIR)/$(gui)chainscall.Po -rm -f ./$(DEPDIR)/$(gui)edit_menu.Po -rm -f ./$(DEPDIR)/$(gui)grcall.Po -rm -f ./$(DEPDIR)/$(gui)gtk-misc.Po -rm -f ./$(DEPDIR)/$(gui)gui.Po -rm -f ./$(DEPDIR)/$(gui)initc.Po -rm -f ./$(DEPDIR)/$(gui)interface.Po -rm -f ./$(DEPDIR)/$(gui)main.Po -rm -f ./$(DEPDIR)/$(gui)msdcall.Po -rm -f ./$(DEPDIR)/$(gui)ringscall.Po -rm -f ./$(DEPDIR)/$(gui)spcall.Po -rm -f ./$(DEPDIR)/$(gui)sqcall.Po -rm -f ./$(DEPDIR)/$(gui)tools.Po -rm -f ./$(DEPDIR)/$(gui)work_menu.Po -rm -f ./$(DEPDIR)/$(lammps)la_print.Po -rm -f ./$(DEPDIR)/$(ogl)arcball.Po -rm -f ./$(DEPDIR)/$(ogl)glview.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_draw.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shaders.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_shading.Po -rm -f ./$(DEPDIR)/$(ogl)ogl_utils.Po -rm -f ./$(DEPDIR)/$(ogl)selection.Po -rm -f ./$(DEPDIR)/$(proj)close_p.Po -rm -f ./$(DEPDIR)/$(proj)debugio.Po -rm -f ./$(DEPDIR)/$(proj)init_p.Po -rm -f ./$(DEPDIR)/$(proj)open_p.Po -rm -f ./$(DEPDIR)/$(proj)project.Po -rm -f ./$(DEPDIR)/$(proj)read_bond.Po -rm -f ./$(DEPDIR)/$(proj)read_curve.Po -rm -f ./$(DEPDIR)/$(proj)read_field.Po -rm -f ./$(DEPDIR)/$(proj)read_mol.Po -rm -f ./$(DEPDIR)/$(proj)read_opengl.Po -rm -f ./$(DEPDIR)/$(proj)read_qm.Po -rm -f ./$(DEPDIR)/$(proj)save_bond.Po -rm -f ./$(DEPDIR)/$(proj)save_curve.Po -rm -f ./$(DEPDIR)/$(proj)save_field.Po -rm -f ./$(DEPDIR)/$(proj)save_mol.Po -rm -f ./$(DEPDIR)/$(proj)save_opengl.Po -rm -f ./$(DEPDIR)/$(proj)save_p.Po -rm -f ./$(DEPDIR)/$(proj)save_qm.Po -rm -f ./$(DEPDIR)/$(proj)update_p.Po -rm -f ./$(DEPDIR)/$(read)read_c3d.Po -rm -f ./$(DEPDIR)/$(read)read_cif.Po -rm -f ./$(DEPDIR)/$(read)read_coord.Po -rm -f ./$(DEPDIR)/$(read)read_hist.Po -rm -f ./$(DEPDIR)/$(read)read_isaacs.Po -rm -f ./$(DEPDIR)/$(read)read_npt.Po -rm -f ./$(DEPDIR)/$(read)read_pdb.Po -rm -f ./$(DEPDIR)/$(read)read_trj.Po -rm -f ./$(DEPDIR)/$(read)read_vas.Po -rm -f ./$(DEPDIR)/$(read)read_xyz.Po -rm -f ./$(DEPDIR)/$(work)modelinfo.Po -rm -f ./$(DEPDIR)/$(work)workinfo.Po -rm -f ./$(DEPDIR)/$(work)workspace.Po -rm -f ./$(DEPDIR)/global.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-binPROGRAMS .PRECIOUS: Makefile $(patsubst %.F90,%.o,$(atomes_fortran_files)): $(patsubst %.F90,%.o,$(atomes_fortran_modules)) clean: -rm -f *.mod -rm -f */*.o -rm -f */*/*.o winatomes.o: atomes.rc $(WINDRES) $< $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: Atomes-GNU-1.1.14/src/affero.h000066400000000000000000001051741457665371200157070ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file affero.h * @short The text of the Affero GPL v3 license * @author Sébastien Le Roux */ /* * This header file: 'affero.h' * * Contains: - The text of the Affero GPL v3 license */ gchar * affero_license="\n" " GNU AFFERO GENERAL PUBLIC LICENSE\n\n" " Version 3, 19 November 2007\n" "\n" " Copyright (C) 2007 Free Software Foundation, Inc. \n" " Everyone is permitted to copy and distribute verbatim copies\n" " of this license document, but changing it is not allowed.\n" "\n" " Preamble\n" "\n" " The GNU Affero General Public License is a free, copyleft license for\n" "software and other kinds of works, specifically designed to ensure\n" "cooperation with the community in the case of network server software.\n" "\n" " The licenses for most software and other practical works are designed\n" "to take away your freedom to share and change the works. By contrast,\n" "our General Public Licenses are intended to guarantee your freedom to\n" "share and change all versions of a program--to make sure it remains free\n" "software for all its users.\n" "\n" " When we speak of free software, we are referring to freedom, not\n" "price. Our General Public Licenses are designed to make sure that you\n" "have the freedom to distribute copies of free software (and charge for\n" "them if you wish), that you receive source code or can get it if you\n" "want it, that you can change the software or use pieces of it in new\n" "free programs, and that you know you can do these things.\n" "\n" " Developers that use our General Public Licenses protect your rights\n" "with two steps: (1) assert copyright on the software, and (2) offer\n" "you this License which gives you legal permission to copy, distribute\n" "and/or modify the software.\n" "\n" " A secondary benefit of defending all users' freedom is that\n" "improvements made in alternate versions of the program, if they\n" "receive widespread use, become available for other developers to\n" "incorporate. Many developers of free software are heartened and\n" "encouraged by the resulting cooperation. However, in the case of\n" "software used on network servers, this result may fail to come about.\n" "The GNU General Public License permits making a modified version and\n" "letting the public access it on a server without ever releasing its\n" "source code to the public.\n" "\n" " The GNU Affero General Public License is designed specifically to\n" "ensure that, in such cases, the modified source code becomes available\n" "to the community. It requires the operator of a network server to\n" "provide the source code of the modified version running there to the\n" "users of that server. Therefore, public use of a modified version, on\n" "a publicly accessible server, gives the public access to the source\n" "code of the modified version.\n" "\n" " An older license, called the Affero General Public License and\n" "published by Affero, was designed to accomplish similar goals. This is\n" "a different license, not a version of the Affero GPL, but Affero has\n" "released a new version of the Affero GPL which permits relicensing under\n" "this license.\n" "\n" " The precise terms and conditions for copying, distribution and\n" "modification follow.\n" "\n" " TERMS AND CONDITIONS\n" "\n" " 0. Definitions.\n" "\n" " ""This License"" refers to version 3 of the GNU Affero General Public License.\n" "\n" " ""Copyright"" also means copyright-like laws that apply to other kinds of\n" "works, such as semiconductor masks.\n" "\n" " ""The Program"" refers to any copyrightable work licensed under this\n" "License. Each licensee is addressed as ""you"". ""Licensees"" and\n" """recipients"" may be individuals or organizations.\n" "\n" " To ""modify"" a work means to copy from or adapt all or part of the work\n" "in a fashion requiring copyright permission, other than the making of an\n" "exact copy. The resulting work is called a ""modified version"" of the\n" "earlier work or a work ""based on"" the earlier work.\n" "\n" " A ""covered work"" means either the unmodified Program or a work based\n" "on the Program.\n" "\n" " To ""propagate"" a work means to do anything with it that, without\n" "permission, would make you directly or secondarily liable for\n" "infringement under applicable copyright law, except executing it on a\n" "computer or modifying a private copy. Propagation includes copying,\n" "distribution (with or without modification), making available to the\n" "public, and in some countries other activities as well.\n" "\n" " To ""convey"" a work means any kind of propagation that enables other\n" "parties to make or receive copies. Mere interaction with a user through\n" "a computer network, with no transfer of a copy, is not conveying.\n" "\n" " An interactive user interface displays ""Appropriate Legal Notices""\n" "to the extent that it includes a convenient and prominently visible\n" "feature that (1) displays an appropriate copyright notice, and (2)\n" "tells the user that there is no warranty for the work (except to the\n" "extent that warranties are provided), that licensees may convey the\n" "work under this License, and how to view a copy of this License. If\n" "the interface presents a list of user commands or options, such as a\n" "menu, a prominent item in the list meets this criterion.\n" "\n" " 1. Source Code.\n" "\n" " The ""source code"" for a work means the preferred form of the work\n" "for making modifications to it. ""Object code"" means any non-source\n" "form of a work.\n" "\n" " A ""Standard Interface"" means an interface that either is an official\n" "standard defined by a recognized standards body, or, in the case of\n" "interfaces specified for a particular programming language, one that\n" "is widely used among developers working in that language.\n" "\n" " The ""System Libraries"" of an executable work include anything, other\n" "than the work as a whole, that (a) is included in the normal form of\n" "packaging a Major Component, but which is not part of that Major\n" "Component, and (b) serves only to enable use of the work with that\n" "Major Component, or to implement a Standard Interface for which an\n" "implementation is available to the public in source code form. A\n" """Major Component"", in this context, means a major essential component\n" "(kernel, window system, and so on) of the specific operating system\n" "(if any) on which the executable work runs, or a compiler used to\n" "produce the work, or an object code interpreter used to run it.\n" "\n" " The ""Corresponding Source"" for a work in object code form means all\n" "the source code needed to generate, install, and (for an executable\n" "work) run the object code and to modify the work, including scripts to\n" "control those activities. However, it does not include the work's\n" "System Libraries, or general-purpose tools or generally available free\n" "programs which are used unmodified in performing those activities but\n" "which are not part of the work. For example, Corresponding Source\n" "includes interface definition files associated with source files for\n" "the work, and the source code for shared libraries and dynamically\n" "linked subprograms that the work is specifically designed to require,\n" "such as by intimate data communication or control flow between those\n" "subprograms and other parts of the work.\n" "\n" " The Corresponding Source need not include anything that users\n" "can regenerate automatically from other parts of the Corresponding\n" "Source.\n" "\n" " The Corresponding Source for a work in source code form is that\n" "same work.\n" "\n" " 2. Basic Permissions.\n" "\n" " All rights granted under this License are granted for the term of\n" "copyright on the Program, and are irrevocable provided the stated\n" "conditions are met. This License explicitly affirms your unlimited\n" "permission to run the unmodified Program. The output from running a\n" "covered work is covered by this License only if the output, given its\n" "content, constitutes a covered work. This License acknowledges your\n" "rights of fair use or other equivalent, as provided by copyright law.\n" "\n" " You may make, run and propagate covered works that you do not\n" "convey, without conditions so long as your license otherwise remains\n" "in force. You may convey covered works to others for the sole purpose\n" "of having them make modifications exclusively for you, or provide you\n" "with facilities for running those works, provided that you comply with\n" "the terms of this License in conveying all material for which you do\n" "not control copyright. Those thus making or running the covered works\n" "for you must do so exclusively on your behalf, under your direction\n" "and control, on terms that prohibit them from making any copies of\n" "your copyrighted material outside their relationship with you.\n" "\n" " Conveying under any other circumstances is permitted solely under\n" "the conditions stated below. Sublicensing is not allowed; section 10\n" "makes it unnecessary.\n" "\n" " 3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n" "\n" " No covered work shall be deemed part of an effective technological\n" "measure under any applicable law fulfilling obligations under article\n" "11 of the WIPO copyright treaty adopted on 20 December 1996, or\n" "similar laws prohibiting or restricting circumvention of such\n" "measures.\n" "\n" " When you convey a covered work, you waive any legal power to forbid\n" "circumvention of technological measures to the extent such circumvention\n" "is effected by exercising rights under this License with respect to\n" "the covered work, and you disclaim any intention to limit operation or\n" "modification of the work as a means of enforcing, against the work's\n" "users, your or third parties' legal rights to forbid circumvention of\n" "technological measures.\n" "\n" " 4. Conveying Verbatim Copies.\n" "\n" " You may convey verbatim copies of the Program's source code as you\n" "receive it, in any medium, provided that you conspicuously and\n" "appropriately publish on each copy an appropriate copyright notice;\n" "keep intact all notices stating that this License and any\n" "non-permissive terms added in accord with section 7 apply to the code;\n" "keep intact all notices of the absence of any warranty; and give all\n" "recipients a copy of this License along with the Program.\n" "\n" " You may charge any price or no price for each copy that you convey,\n" "and you may offer support or warranty protection for a fee.\n" "\n" " 5. Conveying Modified Source Versions.\n" "\n" " You may convey a work based on the Program, or the modifications to\n" "produce it from the Program, in the form of source code under the\n" "terms of section 4, provided that you also meet all of these conditions:\n" "\n" " a) The work must carry prominent notices stating that you modified\n" " it, and giving a relevant date.\n" "\n" " b) The work must carry prominent notices stating that it is\n" " released under this License and any conditions added under section\n" " 7. This requirement modifies the requirement in section 4 to\n" " ""keep intact all notices"".\n" "\n" " c) You must license the entire work, as a whole, under this\n" " License to anyone who comes into possession of a copy. This\n" " License will therefore apply, along with any applicable section 7\n" " additional terms, to the whole of the work, and all its parts,\n" " regardless of how they are packaged. This License gives no\n" " permission to license the work in any other way, but it does not\n" " invalidate such permission if you have separately received it.\n" "\n" " d) If the work has interactive user interfaces, each must display\n" " Appropriate Legal Notices; however, if the Program has interactive\n" " interfaces that do not display Appropriate Legal Notices, your\n" " work need not make them do so.\n" "\n" " A compilation of a covered work with other separate and independent\n" "works, which are not by their nature extensions of the covered work,\n" "and which are not combined with it such as to form a larger program,\n" "in or on a volume of a storage or distribution medium, is called an\n" """aggregate"" if the compilation and its resulting copyright are not\n" "used to limit the access or legal rights of the compilation's users\n" "beyond what the individual works permit. Inclusion of a covered work\n" "in an aggregate does not cause this License to apply to the other\n" "parts of the aggregate.\n" "\n" " 6. Conveying Non-Source Forms.\n" "\n" " You may convey a covered work in object code form under the terms\n" "of sections 4 and 5, provided that you also convey the\n" "machine-readable Corresponding Source under the terms of this License,\n" "in one of these ways:\n" "\n" " a) Convey the object code in, or embodied in, a physical product\n" " (including a physical distribution medium), accompanied by the\n" " Corresponding Source fixed on a durable physical medium\n" " customarily used for software interchange.\n" "\n" " b) Convey the object code in, or embodied in, a physical product\n" " (including a physical distribution medium), accompanied by a\n" " written offer, valid for at least three years and valid for as\n" " long as you offer spare parts or customer support for that product\n" " model, to give anyone who possesses the object code either (1) a\n" " copy of the Corresponding Source for all the software in the\n" " product that is covered by this License, on a durable physical\n" " medium customarily used for software interchange, for a price no\n" " more than your reasonable cost of physically performing this\n" " conveying of source, or (2) access to copy the\n" " Corresponding Source from a network server at no charge.\n" "\n" " c) Convey individual copies of the object code with a copy of the\n" " written offer to provide the Corresponding Source. This\n" " alternative is allowed only occasionally and noncommercially, and\n" " only if you received the object code with such an offer, in accord\n" " with subsection 6b.\n" "\n" " d) Convey the object code by offering access from a designated\n" " place (gratis or for a charge), and offer equivalent access to the\n" " Corresponding Source in the same way through the same place at no\n" " further charge. You need not require recipients to copy the\n" " Corresponding Source along with the object code. If the place to\n" " copy the object code is a network server, the Corresponding Source\n" " may be on a different server (operated by you or a third party)\n" " that supports equivalent copying facilities, provided you maintain\n" " clear directions next to the object code saying where to find the\n" " Corresponding Source. Regardless of what server hosts the\n" " Corresponding Source, you remain obligated to ensure that it is\n" " available for as long as needed to satisfy these requirements.\n" "\n" " e) Convey the object code using peer-to-peer transmission, provided\n" " you inform other peers where the object code and Corresponding\n" " Source of the work are being offered to the general public at no\n" " charge under subsection 6d.\n" "\n" " A separable portion of the object code, whose source code is excluded\n" "from the Corresponding Source as a System Library, need not be\n" "included in conveying the object code work.\n" "\n" " A ""User Product"" is either (1) a ""consumer product"", which means any\n" "tangible personal property which is normally used for personal, family,\n" "or household purposes, or (2) anything designed or sold for incorporation\n" "into a dwelling. In determining whether a product is a consumer product,\n" "doubtful cases shall be resolved in favor of coverage. For a particular\n" "product received by a particular user, ""normally used"" refers to a\n" "typical or common use of that class of product, regardless of the status\n" "of the particular user or of the way in which the particular user\n" "actually uses, or expects or is expected to use, the product. A product\n" "is a consumer product regardless of whether the product has substantial\n" "commercial, industrial or non-consumer uses, unless such uses represent\n" "the only significant mode of use of the product.\n" "\n" " ""Installation Information"" for a User Product means any methods,\n" "procedures, authorization keys, or other information required to install\n" "and execute modified versions of a covered work in that User Product from\n" "a modified version of its Corresponding Source. The information must\n" "suffice to ensure that the continued functioning of the modified object\n" "code is in no case prevented or interfered with solely because\n" "modification has been made.\n" "\n" " If you convey an object code work under this section in, or with, or\n" "specifically for use in, a User Product, and the conveying occurs as\n" "part of a transaction in which the right of possession and use of the\n" "User Product is transferred to the recipient in perpetuity or for a\n" "fixed term (regardless of how the transaction is characterized), the\n" "Corresponding Source conveyed under this section must be accompanied\n" "by the Installation Information. But this requirement does not apply\n" "if neither you nor any third party retains the ability to install\n" "modified object code on the User Product (for example, the work has\n" "been installed in ROM).\n" "\n" " The requirement to provide Installation Information does not include a\n" "requirement to continue to provide support service, warranty, or updates\n" "for a work that has been modified or installed by the recipient, or for\n" "the User Product in which it has been modified or installed. Access to a\n" "network may be denied when the modification itself materially and\n" "adversely affects the operation of the network or violates the rules and\n" "protocols for communication across the network.\n" "\n" " Corresponding Source conveyed, and Installation Information provided,\n" "in accord with this section must be in a format that is publicly\n" "documented (and with an implementation available to the public in\n" "source code form), and must require no special password or key for\n" "unpacking, reading or copying.\n" "\n" " 7. Additional Terms.\n" "\n" " ""Additional permissions"" are terms that supplement the terms of this\n" "License by making exceptions from one or more of its conditions.\n" "Additional permissions that are applicable to the entire Program shall\n" "be treated as though they were included in this License, to the extent\n" "that they are valid under applicable law. If additional permissions\n" "apply only to part of the Program, that part may be used separately\n" "under those permissions, but the entire Program remains governed by\n" "this License without regard to the additional permissions.\n" "\n" " When you convey a copy of a covered work, you may at your option\n" "remove any additional permissions from that copy, or from any part of\n" "it. (Additional permissions may be written to require their own\n" "removal in certain cases when you modify the work.) You may place\n" "additional permissions on material, added by you to a covered work,\n" "for which you have or can give appropriate copyright permission.\n" "\n" " Notwithstanding any other provision of this License, for material you\n" "add to a covered work, you may (if authorized by the copyright holders of\n" "that material) supplement the terms of this License with terms:\n" "\n" " a) Disclaiming warranty or limiting liability differently from the\n" " terms of sections 15 and 16 of this License; or\n" "\n" " b) Requiring preservation of specified reasonable legal notices or\n" " author attributions in that material or in the Appropriate Legal\n" " Notices displayed by works containing it; or\n" "\n" " c) Prohibiting misrepresentation of the origin of that material, or\n" " requiring that modified versions of such material be marked in\n" " reasonable ways as different from the original version; or\n" "\n" " d) Limiting the use for publicity purposes of names of licensors or\n" " authors of the material; or\n" "\n" " e) Declining to grant rights under trademark law for use of some\n" " trade names, trademarks, or service marks; or\n" "\n" " f) Requiring indemnification of licensors and authors of that\n" " material by anyone who conveys the material (or modified versions of\n" " it) with contractual assumptions of liability to the recipient, for\n" " any liability that these contractual assumptions directly impose on\n" " those licensors and authors.\n" "\n" " All other non-permissive additional terms are considered ""further\n" "restrictions"" within the meaning of section 10. If the Program as you\n" "received it, or any part of it, contains a notice stating that it is\n" "governed by this License along with a term that is a further\n" "restriction, you may remove that term. If a license document contains\n" "a further restriction but permits relicensing or conveying under this\n" "License, you may add to a covered work material governed by the terms\n" "of that license document, provided that the further restriction does\n" "not survive such relicensing or conveying.\n" "\n" " If you add terms to a covered work in accord with this section, you\n" "must place, in the relevant source files, a statement of the\n" "additional terms that apply to those files, or a notice indicating\n" "where to find the applicable terms.\n" "\n" " Additional terms, permissive or non-permissive, may be stated in the\n" "form of a separately written license, or stated as exceptions;\n" "the above requirements apply either way.\n" "\n" " 8. Termination.\n" "\n" " You may not propagate or modify a covered work except as expressly\n" "provided under this License. Any attempt otherwise to propagate or\n" "modify it is void, and will automatically terminate your rights under\n" "this License (including any patent licenses granted under the third\n" "paragraph of section 11).\n" "\n" " However, if you cease all violation of this License, then your\n" "license from a particular copyright holder is reinstated (a)\n" "provisionally, unless and until the copyright holder explicitly and\n" "finally terminates your license, and (b) permanently, if the copyright\n" "holder fails to notify you of the violation by some reasonable means\n" "prior to 60 days after the cessation.\n" "\n" " Moreover, your license from a particular copyright holder is\n" "reinstated permanently if the copyright holder notifies you of the\n" "violation by some reasonable means, this is the first time you have\n" "received notice of violation of this License (for any work) from that\n" "copyright holder, and you cure the violation prior to 30 days after\n" "your receipt of the notice.\n" "\n" " Termination of your rights under this section does not terminate the\n" "licenses of parties who have received copies or rights from you under\n" "this License. If your rights have been terminated and not permanently\n" "reinstated, you do not qualify to receive new licenses for the same\n" "material under section 10.\n" "\n" " 9. Acceptance Not Required for Having Copies.\n" "\n" " You are not required to accept this License in order to receive or\n" "run a copy of the Program. Ancillary propagation of a covered work\n" "occurring solely as a consequence of using peer-to-peer transmission\n" "to receive a copy likewise does not require acceptance. However,\n" "nothing other than this License grants you permission to propagate or\n" "modify any covered work. These actions infringe copyright if you do\n" "not accept this License. Therefore, by modifying or propagating a\n" "covered work, you indicate your acceptance of this License to do so.\n" "\n" " 10. Automatic Licensing of Downstream Recipients.\n" "\n" " Each time you convey a covered work, the recipient automatically\n" "receives a license from the original licensors, to run, modify and\n" "propagate that work, subject to this License. You are not responsible\n" "for enforcing compliance by third parties with this License.\n" "\n" " An ""entity transaction"" is a transaction transferring control of an\n" "organization, or substantially all assets of one, or subdividing an\n" "organization, or merging organizations. If propagation of a covered\n" "work results from an entity transaction, each party to that\n" "transaction who receives a copy of the work also receives whatever\n" "licenses to the work the party's predecessor in interest had or could\n" "give under the previous paragraph, plus a right to possession of the\n" "Corresponding Source of the work from the predecessor in interest, if\n" "the predecessor has it or can get it with reasonable efforts.\n" "\n" " You may not impose any further restrictions on the exercise of the\n" "rights granted or affirmed under this License. For example, you may\n" "not impose a license fee, royalty, or other charge for exercise of\n" "rights granted under this License, and you may not initiate litigation\n" "(including a cross-claim or counterclaim in a lawsuit) alleging that\n" "any patent claim is infringed by making, using, selling, offering for\n" "sale, or importing the Program or any portion of it.\n" "\n" " 11. Patents.\n" "\n" " A ""contributor"" is a copyright holder who authorizes use under this\n" "License of the Program or a work on which the Program is based. The\n" "work thus licensed is called the contributor's ""contributor version"".\n" "\n" " A contributor's ""essential patent claims"" are all patent claims\n" "owned or controlled by the contributor, whether already acquired or\n" "hereafter acquired, that would be infringed by some manner, permitted\n" "by this License, of making, using, or selling its contributor version,\n" "but do not include claims that would be infringed only as a\n" "consequence of further modification of the contributor version. For\n" "purposes of this definition, ""control"" includes the right to grant\n" "patent sublicenses in a manner consistent with the requirements of\n" "this License.\n" "\n" " Each contributor grants you a non-exclusive, worldwide, royalty-free\n" "patent license under the contributor's essential patent claims, to\n" "make, use, sell, offer for sale, import and otherwise run, modify and\n" "propagate the contents of its contributor version.\n" "\n" " In the following three paragraphs, a ""patent license"" is any express\n" "agreement or commitment, however denominated, not to enforce a patent\n" "(such as an express permission to practice a patent or covenant not to\n" "sue for patent infringement). To ""grant"" such a patent license to a\n" "party means to make such an agreement or commitment not to enforce a\n" "patent against the party.\n" "\n" " If you convey a covered work, knowingly relying on a patent license,\n" "and the Corresponding Source of the work is not available for anyone\n" "to copy, free of charge and under the terms of this License, through a\n" "publicly available network server or other readily accessible means,\n" "then you must either (1) cause the Corresponding Source to be so\n" "available, or (2) arrange to deprive yourself of the benefit of the\n" "patent license for this particular work, or (3) arrange, in a manner\n" "consistent with the requirements of this License, to extend the patent\n" "license to downstream recipients. ""Knowingly relying"" means you have\n" "actual knowledge that, but for the patent license, your conveying the\n" "covered work in a country, or your recipient's use of the covered work\n" "in a country, would infringe one or more identifiable patents in that\n" "country that you have reason to believe are valid.\n" "\n" " If, pursuant to or in connection with a single transaction or\n" "arrangement, you convey, or propagate by procuring conveyance of, a\n" "covered work, and grant a patent license to some of the parties\n" "receiving the covered work authorizing them to use, propagate, modify\n" "or convey a specific copy of the covered work, then the patent license\n" "you grant is automatically extended to all recipients of the covered\n" "work and works based on it.\n" "\n" " A patent license is ""discriminatory"" if it does not include within\n" "the scope of its coverage, prohibits the exercise of, or is\n" "conditioned on the non-exercise of one or more of the rights that are\n" "specifically granted under this License. You may not convey a covered\n" "work if you are a party to an arrangement with a third party that is\n" "in the business of distributing software, under which you make payment\n" "to the third party based on the extent of your activity of conveying\n" "the work, and under which the third party grants, to any of the\n" "parties who would receive the covered work from you, a discriminatory\n" "patent license (a) in connection with copies of the covered work\n" "conveyed by you (or copies made from those copies), or (b) primarily\n" "for and in connection with specific products or compilations that\n" "contain the covered work, unless you entered into that arrangement,\n" "or that patent license was granted, prior to 28 March 2007.\n" "\n" " Nothing in this License shall be construed as excluding or limiting\n" "any implied license or other defenses to infringement that may\n" "otherwise be available to you under applicable patent law.\n" "\n" " 12. No Surrender of Others' Freedom.\n" "\n" " If conditions are imposed on you (whether by court order, agreement or\n" "otherwise) that contradict the conditions of this License, they do not\n" "excuse you from the conditions of this License. If you cannot convey a\n" "covered work so as to satisfy simultaneously your obligations under this\n" "License and any other pertinent obligations, then as a consequence you may\n" "not convey it at all. For example, if you agree to terms that obligate you\n" "to collect a royalty for further conveying from those to whom you convey\n" "the Program, the only way you could satisfy both those terms and this\n" "License would be to refrain entirely from conveying the Program.\n" "\n" " 13. Remote Network Interaction; Use with the GNU General Public License.\n" "\n" " Notwithstanding any other provision of this License, if you modify the\n" "Program, your modified version must prominently offer all users\n" "interacting with it remotely through a computer network (if your version\n" "supports such interaction) an opportunity to receive the Corresponding\n" "Source of your version by providing access to the Corresponding Source\n" "from a network server at no charge, through some standard or customary\n" "means of facilitating copying of software. This Corresponding Source\n" "shall include the Corresponding Source for any work covered by version 3\n" "of the GNU General Public License that is incorporated pursuant to the\n" "following paragraph.\n" "\n" " Notwithstanding any other provision of this License, you have\n" "permission to link or combine any covered work with a work licensed\n" "under version 3 of the GNU General Public License into a single\n" "combined work, and to convey the resulting work. The terms of this\n" "License will continue to apply to the part which is the covered work,\n" "but the work with which it is combined will remain governed by version\n" "3 of the GNU General Public License.\n" "\n" " 14. Revised Versions of this License.\n" "\n" " The Free Software Foundation may publish revised and/or new versions of\n" "the GNU Affero General Public License from time to time. Such new versions\n" "will be similar in spirit to the present version, but may differ in detail to\n" "address new problems or concerns.\n" "\n" " Each version is given a distinguishing version number. If the\n" "Program specifies that a certain numbered version of the GNU Affero General\n" "Public License ""or any later version"" applies to it, you have the\n" "option of following the terms and conditions either of that numbered\n" "version or of any later version published by the Free Software\n" "Foundation. If the Program does not specify a version number of the\n" "GNU Affero General Public License, you may choose any version ever published\n" "by the Free Software Foundation.\n" "\n" " If the Program specifies that a proxy can decide which future\n" "versions of the GNU Affero General Public License can be used, that proxy's\n" "public statement of acceptance of a version permanently authorizes you\n" "to choose that version for the Program.\n" "\n" " Later license versions may give you additional or different\n" "permissions. However, no additional obligations are imposed on any\n" "author or copyright holder as a result of your choosing to follow a\n" "later version.\n" "\n" " 15. Disclaimer of Warranty.\n" "\n" " THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\n" "APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\n" "HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ""AS IS"" WITHOUT WARRANTY\n" "OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\n" "THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n" "PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\n" "IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\n" "ALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n" "\n" " 16. Limitation of Liability.\n" "\n" " IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n" "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\n" "THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\n" "GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\n" "USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\n" "DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\n" "PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\n" "EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\n" "SUCH DAMAGES.\n" "\n" " 17. Interpretation of Sections 15 and 16.\n" "\n" " If the disclaimer of warranty and limitation of liability provided\n" "above cannot be given local legal effect according to their terms,\n" "reviewing courts shall apply local law that most closely approximates\n" "an absolute waiver of all civil liability in connection with the\n" "Program, unless a warranty or assumption of liability accompanies a\n" "copy of the Program in return for a fee.\n" "\n" " END OF TERMS AND CONDITIONS\n"; Atomes-GNU-1.1.14/src/atomes.rc000066400000000000000000000025271457665371200161100ustar00rootroot00000000000000/* This file is part of Atomes. Atomes is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Atomes is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Atomes. If not, see */ #include SQUIDER_ICON ICON "../bin/atomes.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION 1,1,13,0 PRODUCTVERSION 1,1,13,0 FILEOS VOS__WINDOWS32 FILETYPE VFT_APP BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "CompanyName", "CNRS - IPCMS - DMO" VALUE "FileDescription", "ATOMES-1.1.13" VALUE "FileVersion", "1.1.13" VALUE "LegalCopyright", "Copyright 2024 Sbastien Le Roux" VALUE "OriginalFileName", "atomes.exe" VALUE "ProductName", "Atomes 1.1.13" VALUE "ProductVersion", "1.1.13" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END Atomes-GNU-1.1.14/src/atomes.rc.in000066400000000000000000000033141457665371200165100ustar00rootroot00000000000000/* This file is part of Atomes. Atomes is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Atomes is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with Atomes. If not, see */ #include ATOMES_ICON ICON "../bin/atomes.ico" VS_VERSION_INFO VERSIONINFO FILEVERSION @ATOMES_MAJOR_VERSION@,@ATOMES_MINOR_VERSION@,@ATOMES_PATCH_VERSION@,0 PRODUCTVERSION @ATOMES_MAJOR_VERSION@,@ATOMES_MINOR_VERSION@,@ATOMES_PATCH_VERSION@,0 FILEOS VOS__WINDOWS32 FILETYPE VFT_APP BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904B0" BEGIN VALUE "CompanyName", "CNRS - IPCMS - DMO" VALUE "FileDescription", "@PACKAGE-@ATOMES_MAJOR_VERSION@.@ATOMES_MINOR_VERSION@.@ATOMES_PATCH_VERSION@" VALUE "FileVersion", "@ATOMES_MAJOR_VERSION@.@ATOMES_MINOR_VERSION@.@ATOMES_PATCH_VERSION@" VALUE "LegalCopyright", "Copyright 2024 Sbastien Le Roux" VALUE "OriginalFileName", "atomes.exe" VALUE "ProductName", "Atomes @ATOMES_MAJOR_VERSION@.@ATOMES_MINOR_VERSION@.@ATOMES_PATCH_VERSION@" VALUE "ProductVersion", "@ATOMES_MAJOR_VERSION@.@ATOMES_MINOR_VERSION@.@ATOMES_PATCH_VERSION@" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END Atomes-GNU-1.1.14/src/bind.h000066400000000000000000000125441457665371200153570ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file bind.h * @short Binding to the Fortran90 subroutines * @author Sébastien Le Roux */ /* * This header file: 'bind.h' * * Contains: - Binding to the Fortran90 subroutines */ #ifndef BIND_H_ #define BIND_H_ extern void send_label_ (int *, int *, char *); extern int write_xyz_ (char *, int *, int *, int *); extern int read_xyz_ (char *, int *, int *); extern int read_c3d_ (char *, int *); extern int write_c3d_ (char *, int *, int *, int *); extern int read_pdb_ (char *, int *); extern int read_trj_ (char *, int *, int *, int *, int *); extern int read_vas_ (char *, int *, int *, int *, int *); extern double fdmax_ (int *); extern double fkmin_ (int *); extern double oglmax_ (); extern double random3_ (int *); extern int smooth_and_save_ (double *, double *, double *, int *, int *, int *); extern double set_mass_ (int *); extern double set_radius_ (int *, int *); extern double set_neutron_ (int *); extern void profree_ (); extern int chemistry_ (); extern void prep_pos_ (int *, int *); extern void prep_spec_ (double *, int *, int *); extern int prep_data_ (); extern int bonds_ (int *, int *, int *); extern int alloc_data_ (int *, int *, int *); extern void read_pos_ (double *, double *, double *); extern void read_data_ (int *, int *); extern void read_chem_ (double *, double *, double *, double *); extern int add_cells_ (int *, int *, int *); extern int shift_box_center_ (int *, int *, double[3], int *); extern void lattice_ (int *, int *, double[3][3], double[3], double[3], int *, int *, int *); extern void sendcuts_ (int *, int *, double *); extern int rundmtx_ (int *, int *, int *); extern int bonding_ (int *, int *, int *, int *, double *, double *, char *); extern int molecules_ (int *, int *); extern int bond_angles_ (int *); extern int bond_diedrals_ (int *); extern int dihedrals_for_mol_ (); extern int initrings_ (int *, int *, int *, int *, int *, int *); extern int initchains_ (int *, int *, int *, int *, int *, int *, int *); extern int g_of_r_ (int *, double *, int *); extern int s_of_q_ (double *, double *, int *); extern int cqvf_ (double *, double *, int *, double *, double *); extern int s_of_k_ (int *, int *); extern int send_gr_ (int *, int *, double *, double *, double *); extern int send_sq_ (int *, int *, double *, double *, double *); extern int g_of_r_fft_ (int *, double *, double *); extern int msd_ (double *, int *); extern int sphericals_ (int *, int *, int *, int *, int *); #endif Atomes-GNU-1.1.14/src/calc/000077500000000000000000000000001457665371200151665ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/calc/calc.c000066400000000000000000000253311457665371200162400ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file calc.c * @short Callbacks used in by the molecular dynamics calculation assistants \n Atom selection structure manipulation tools \n The initialization of the assistants * @author Sébastien Le Roux */ /* * This file: 'calc.c' * * Contains: * - Callbacks used in by the molecular dynamics calculation assistant - Atom selection structure manipulation tools - The initialization of the assistants * * List of functions: void field_question (gchar * question, GCallback handler, gpointer data); void unselect_all_atoms (glwin * view); void restore_ogl_selection (glwin * view); void preserve_ogl_selection (glwin * view); G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data); atom_selection * duplicate_ogl_selection (atom_selection * old_sel); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #define MAXDATAQM 7 extern void create_classical_force_field (int p, int f); extern void create_qm_input_file (int c, int p, int s); extern void create_new_project_using_data (atom_selection * selection); extern int selected_aspec; extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); extern atom_in_selection * new_atom_in_selection (int id, int sp); GtkWidget * qm_assistant; project * qm_proj; glwin * qm_view; coord_info * qm_coord; GtkTextBuffer * qmbuffer[MAXDATAQM+2]; gboolean force_mol = FALSE; int idopt; int icalc; int ident; int icomb; gboolean selection_confirmed; /*! \fn G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data) \brief confirm that the selection is good \param dialog the GtkDialog sending the signal \param response_id the response id \param data the pointer if needed, not in this case */ G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data) { selection_confirmed = (response_id == GTK_RESPONSE_YES) ? TRUE : FALSE; destroy_this_dialog (dialog); } /*! \fn void field_question (gchar * question, GCallback handler, gpointer data) \brief ask the use to confirm something \param question the text to display \param handler the callback to use \param data the data to transmit to the callback */ void field_question (gchar * question, GCallback handler, gpointer data) { GtkWidget * dialog; dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Are you sure ?"); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", question); gtk_window_set_title(GTK_WINDOW(dialog), "Please confirm"); run_this_gtk_dialog (dialog, handler, data); } /*! \fn atom_selection * duplicate_ogl_selection (atom_selection * old_sel) \brief copy an atom selection \param old_sel the atom selection to copy */ atom_selection * duplicate_ogl_selection (atom_selection * old_sel) { int i, j; atom_in_selection * at, * bt; atom_selection * new_sel = g_malloc0 (sizeof*new_sel); if (! old_sel -> selected) return new_sel; new_sel -> selected = old_sel -> selected; at = old_sel -> first; for (i=0; i< old_sel -> selected; i++) { if (! i) { new_sel -> first = new_atom_in_selection (at -> id, at -> sp); bt = new_sel -> first; new_sel -> last = NULL; } else { bt -> next = new_atom_in_selection (at -> id, at -> sp); bt -> next -> prev = bt; bt = bt -> next; } if (at -> next != NULL) at = at -> next; } bt -> next = NULL; new_sel -> last = bt; if (old_sel -> selected > 1 && old_sel -> selected < MAX_IN_SELECTION) { i = num_bonds (old_sel -> selected); new_sel -> selected_bonds = allocint (i); for (j=0; j selected_bonds[j] = old_sel -> selected_bonds[j]; } if (new_sel -> selected > 2) { i = num_angles (old_sel -> selected); new_sel -> selected_angles = allocint (i); for (j=0; j selected_angles[j] = old_sel -> selected_angles[j]; } if (new_sel -> selected > 3 && new_sel -> selected < MAX_IN_SELECTION-10) { i = num_dihedrals (old_sel -> selected); new_sel -> selected_dihedrals = allocint (i); for (j=0; j selected_dihedrals[j] = old_sel -> selected_dihedrals[j]; } } } } return new_sel; } /*! \fn void unselect_all_atoms (glwin * view) \brief remove all atom(s) from selection \param view the glwin the selection comes from */ void unselect_all_atoms (glwin * view) { int i, j, k; project * this_proj = get_project_by_id (view -> proj); for (i=0; i<2; i++) { save_all_selections (view, i); for (j=0; j steps; j++) { for (k=0; k natomes; k++) { if (j == view -> anim -> last -> img -> step) { if (this_proj -> atoms[j][k].pick[i]) { process_selected_atom (this_proj, view, k, 0, 0, i); } } else { this_proj -> atoms[j][k].pick[i] = FALSE; } } } update_all_selections (view, i); } init_default_shaders (view); } /*! \fn void restore_ogl_selection (glwin * view) \brief restore a saved atom selection \param view the glwin to restore the selection to */ void restore_ogl_selection (glwin * view) { int i, j, k, l; project * this_proj = get_project_by_id (view -> proj); unselect_all_atoms (view); for (i=0; i<2; i++) { view -> anim -> last -> img -> selected[i] = duplicate_ogl_selection (view -> tmp_sel[i]); if (view -> anim -> last -> img -> selected[i] -> selected) { atom_in_selection * at = view -> anim -> last -> img -> selected[i] -> first; while (at) { for (j=0; j steps; j++) { this_proj -> atoms[j][at -> id].pick[i] = TRUE; } at = at -> next; } } if (view -> stored_labels[i]) { for (j=1; j stored_labels[i][0]; j++) { k = view -> stored_labels[i][j]; for (l=0; l steps; l++) this_proj -> atoms[l][k].label[i] = TRUE; } g_free (view -> stored_labels[i]); view -> stored_labels[i] = NULL; } } init_default_shaders (view); if (check_label) { view -> labelled = check_label_numbers (this_proj, 2); update (view); } } /*! \fn void preserve_ogl_selection (glwin * view) \brief copy the atom selection, so that it can be re-used once the input assistant is closed. \param view the glwin the selection comes from */ void preserve_ogl_selection (glwin * view) { int h, i, j, k, l; project * this_proj = get_project_by_id (view -> proj); h = view -> anim -> last -> img -> step; k = 0; for (i=0; i<2; i++) { view -> tmp_sel[i] = duplicate_ogl_selection (view -> anim -> last -> img -> selected[i]); for (j=0; j<2; j++) { if (j && k) { view -> stored_labels[i] = allocint(k+1); view -> stored_labels[i][0] = k+1; } k = j; for (l=0; l natomes; l++) { if (this_proj -> atoms[h][l].label[i]) { if (j) { view -> stored_labels[i][k] = l; this_proj -> atoms[h][l].label[i] = FALSE; } k ++; } } } } unselect_all_atoms (view); } extern char * input_types[NINPUTS]; /*! \fn G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data) \brief start an input creation assistant \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; int p = the_data -> a; int t = the_data -> b; // if a selection was made preserve it opengl_project_changed (p); preserve_ogl_selection (opengl_project -> modelgl); update (opengl_project -> modelgl); if (opengl_project -> steps > 1) { gchar * info = g_strdup_printf (" %s contains %d different sets of atomic coordinates. \n" " Please select the one to use to create the input file(s) \n" " Note that a new project will be generated for that purpose. \n", opengl_project -> name, opengl_project -> steps); // preserve parameters int tmp_s = opengl_project -> modelgl -> anim -> last -> img -> step; int tmp_a = activep; int tmp_v = activev; tint t_data; t_data.a = p; t_data.b = iask (info, "Enter the selected MD step: ", 2+opengl_project -> steps, opengl_project -> modelgl -> win); t_data.c = 1; g_free (info); // then change the MD step and select all atoms opengl_project -> modelgl -> anim -> last -> img -> step = t_data.b; selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & t_data); #else select_unselect_atoms (NULL, & t_data); #endif // create new project with selection force_mol = TRUE; create_new_project_using_data (opengl_project -> modelgl -> anim -> last -> img -> selected[0]); force_mol = FALSE; opengl_project -> modelgl -> anim -> last -> img -> step = tmp_s; restore_ogl_selection (opengl_project -> modelgl); // Set the new project to be use for input creation p = activep; preserve_ogl_selection (active_glwin); // restore old active project active_project_changed (tmp_a); opengl_project_changed (tmp_v); } switch (t) { case 0: // DLPOLY create_classical_force_field (p, 0); break; case 1: // LAMMPS create_classical_force_field (p, 1); break; case 2: create_qm_input_file (0, p, 0); break; case 3: create_qm_input_file (1, p, 0); break; case 4: create_qm_input_file (0, p, 1); break; case 5: create_qm_input_file (1, p, 1); break; } } Atomes-GNU-1.1.14/src/calc/calc.h000066400000000000000000000030071457665371200162410ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file calc.h * @short Variable declarations for the MD input preparation assistants * @author Sébastien Le Roux */ /* * This header file: 'calc.h' * * Contains: - Variable declarations for the MD input preparation assistants */ #ifndef CALC_H_ #define CALC_H_ #define MAXDATAQM 7 extern GtkWidget * qm_assistant; extern project * qm_proj; extern glwin * qm_view; extern coord_info * qm_coord; extern GtkTextBuffer * qmbuffer[MAXDATAQM+2]; extern gboolean force_mol; extern int idopt; extern int icalc; extern int ident; extern int icomb; extern gboolean selection_confirmed; extern G_MODULE_EXPORT void confirm_selection (GtkDialog * dialog, gint response_id, gpointer data); extern void field_question (gchar * question, GCallback handler, gpointer data); #endif Atomes-GNU-1.1.14/src/calc/cp2k/000077500000000000000000000000001457665371200160255ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/calc/cp2k/cp2k.h000066400000000000000000000077141457665371200170460ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cp2k.h * @short Variable declarations for the creation of the CP2K input file(s) * @author Sébastien Le Roux */ /* * This header file: 'cp2k.h' * * Contains: Variable declarations for the creation of the CP2K input file(s) * Called by: calc/cp2k/cp2k_files.c calc/cp2k/cp2k_init.c calc/cp2k/cp2k_mol.c calc/cp2k/cp2k_print.c calc/cpmd/cpmd_init.c calc/cpmd/cpmd_nose.c */ #ifndef CP2K_H_ #define CP2K_H_ #define CP2RUN 0 // Def: 0 = ENERGY run #define CP2KTI 1 // Def: 86400 = 24h #define CP2PLE 2 // Def: 1 = MEDIUM #define CP2RES 3 // Def: 0 = Not a restart #define CP2FRE 4 // Def: 0 = Null #define CP2FBA 5 // Def: 0 = Null #define CP2FPS 6 // Def: 0 = Null #define CP2FWV 7 // Def: 0 = Null #define CP2CHA 8 // Def: 0 = neutral #define CP2CUT 9 // Def: 300 #define CP2GRI 10 // Def: 4 #define CP2QSM 11 // Def: 0 = GPW #define CP2SCG 12 // Def: Guess 0 = ATOMS #define CP2SNN 13 // Def: 50 #define CP2SCN 14 // Def: 0.000001 #define CP2SNO 15 // Def: 20 #define CP2SCO 16 // Def: 0.00001 #define CP2SMI 17 // Def: 2 = DIIS #define CP2FCT 18 // Def: 0 = BLYP #define CP2SPI 19 // Def: 0 = spin restricted #define CP2SPM 20 // Def: 0 spin multiplicity #define CP2VDW 21 // Def: 0 = non vdw #define CP2ROK 22 // Def: 0 = non ROKS #define CP2PFO 23 // Def: 0 = do not print forces #define CP2PST 24 // Def: 0 = do not print stress tensor #define CP2PMU 25 // Def: 0 = do not print Mulliken #define CP2PLO 26 // Def: 0 = do not print Löwdin #define CP2POR 27 // Def: 0 = do not print orbitals #define CP2PBC 28 // Def: f(system) #define CP2LAT 29 // 0 = a,b,c,alpha,beta,gamma :: 1 = ax,ay,az,bx,by,bz,cx,cy,cz #define CP2SYM 30 // Def: f(system) #define CP2ENS 31 // Def: 7 = NVT ensemble #define CP2NST 32 // Def: 10000 max step md #define CP2DLT 33 // Def: 2.5 #define CP2TMP 34 // Def: 300 #define CP2GMI 35 // Def: 1 = CG geometry optimizer #define CP2MAG 36 // Def: 10000 max step geo #define CP2GEF 37 // Def: 0.0001 #define CP2OUF 38 // Def: 10 #define CP2CON 39 // Def: 0 #define CP2OUU 40 // Def: 0 #define NCP2KCALC 7 #define CP2NTHERM 5 extern cp2k * tmp_cp2k; extern double default_cp2k_options[41]; extern double default_cp2k_extra[3][4]; extern double default_vdw_cut[2]; extern int cp2k_default_num[12]; extern gchar * cp2k_default_keywords[11][11]; extern gchar * cp2k_default_text[11][11]; extern gchar * cp2k_vdw_keywords[2][3]; extern int cp2k_is_basis_in_database (int sp); extern int cp2k_is_pseudo_in_database (int sp); extern GtkWidget * prepare_basis_combo (int sp, int obj); extern gchar * get_nth_elem (int sp, int id, int obj); extern gchar * get_nth_key (int sp, int id, int obj); extern int find_cp2k_sym (); // For CP2K v9.1 #define N_MOLOPT 191 extern char * molopt_elem[N_MOLOPT]; extern char * molopt_keys[N_MOLOPT]; extern char * cp2k_molopt[N_MOLOPT]; #define N_GTH 156 extern char * gth_elem[N_GTH]; extern char * gth_keys[N_GTH]; extern char * cp2k_gth[N_GTH]; #define N_BASIS 250 extern char * basis_elem[N_BASIS]; extern char * basis_keys[N_BASIS]; extern char * cp2k_basis[N_BASIS]; #define N_POTS 421 extern char * pot_elem[N_POTS]; extern char * pot_keys[N_POTS]; extern char * cp2k_pot[N_POTS]; #endif Atomes-GNU-1.1.14/src/calc/cp2k/cp2k_basis.c000066400000000000000000006342211457665371200202210ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cp2k_basis.c * @short CP2K basis set, as delivered with CP2K v9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_basis.c' * * Contains: * - CP2K basis set, as delivered with CP2K v9.1 This file contains 3 tables: basis_elem -> the list of chemical elements basis_keys -> the list of keywords cp2k_basis -> finally the complete basis set */ #include "global.h" char * basis_elem[250]={"H", "O", "Si", "H", "H", "He", "He", "Li", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Cu", "Cu", "Cu", "Zn", "Br", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "Si", "P", "S", "Cl", "Ar", "H", "H", "He", "He", "B", "C", "N", "O", "F", "Ne", "Al", "Si", "P", "S", "Cl", "Ar", "H", "H", "O", "F", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "H", "H", "H", "H", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "C", "C", "N", "N", "O", "O", "O", "O", "F", "F", "Ne", "Ne", "Na", "Na", "Mg", "Mg", "Al", "Al", "Si", "Si", "Si", "P", "P", "S", "S", "Cl", "Ar", "K", "K", "Ca", "Sc", "Ti", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Ni", "Ni", "Ni", "Ni", "Cu", "Zn", "Zn", "Br", "Y", "Y", "Y", "Y", "Zr", "Zr", "Zr", "Zr", "Pt", "Pt", "Pt", "Pt", "H", "H", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "C", "N", "O", "O", "F", "Ne", "Na", "Mg", "Al", "Al", "Si", "Si", "P", "S", "Cl", "Ar", "K", "K", "Ti", "Ba", "H", "H", "C", "N", "O", "Mg", "Mg", "Mg", "Si", "P", "S", "Ca", "Au", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar"}; char * basis_keys[250]={"DZ-ANO", "DZ-ANO", "DZ-ANO", "DZV-ALL", "DZVP-ALL", "DZV-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-MONTREAL-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-MONTREAL-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZVP-MONTREAL-ALL", "DZVP-ALL", "TZVP-ALL", "DZVP-ALL", "DZVP-ALL", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZVP-ALL-PADE", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZV-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW-CONFINED", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW-CONFINED", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "DZVP-ALL-PADE-NEW", "TZV-ALL-PADE", "TZVP-ALL-PADE", "TZV-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "TZVP-ALL-PADE", "DZV-ALL-BLYP", "DZVP-ALL-BLYP", "TZVP-ALL-BLYP", "TZVP-ALL-BLYP", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "6-31G*", "SZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "MAO-PRIM", "DZV-GTH-PADE", "DZVP-GTH-PADE", "DZV-GTH-PADE", "DZVP-GTH-PADE", "DZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "MAO-PRIM", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-q2", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZVP-GTH-PADE", "SZV-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE", "DZVP-GTH-PADE-CONFINED", "DZVP-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE", "SZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZV-GTH-PADE-q10", "DZV-GTH-PADE", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "DZVP-GTH-PADE", "SZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "SZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE", "DZV-GTH-PADE-CONFINED", "SZV-GTH-PADE", "DZV-GTH-PADE", "SZV-GTH-PADE-CONFINED", "DZV-GTH-PADE-CONFINED", "DZV-GTH-BLYP", "DZV-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZV-GTH-BLYP", "DZVP-GTH-BLYP", "DZV-GTH-BLYP", "DZVP-GTH-BLYP", "DZV-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP", "DZVP-GTH-BLYP-CONFINED", "DZV-GTH-BLYP", "SZV-GTH-BLYP", "DZV-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZV-GTH-PBE-q10-soft", "DZVP-GTH-PBE-q2", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "DZVP-GTH-PBE", "TZ-GTH", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP", "TZVDD3DF3PD-GTH-BLYP"}; char * cp2k_basis[250]={"\n" "H DZ-ANO\n" " 2\n" " 1 0 0 8 3\n" " 188.6144500000 0.0009639000 -0.0013119000 0.0024224000\n" " 28.2765960000 0.0074920000 -0.0103451000 0.0203382000\n" " 6.4248300000 0.0375954000 -0.0504953000 0.0896394000\n" " 1.8150410000 0.1433950000 -0.2073855000 0.4422907000\n" " 0.5910630000 0.3486363000 -0.4350885000 0.5757144000\n" " 0.2121490000 0.4382974000 -0.0247297000 -0.9802890000\n" " 0.0798910000 0.1651066000 0.3225260000 -0.6721538000\n" " 0.0279620000 0.0210229000 0.7072754000 1.1417685000\n" " 2 1 1 4 2\n" " 2.3050000000 0.1127902000 -0.2108688000\n" " 0.8067500000 0.4185075000 -0.5943796000\n" " 0.2823620000 0.4700077000 0.0896889000\n" " 0.0988270000 0.1826260000 0.8611634000\n" "#","\n" "O DZ-ANO\n" " 3\n" " 1 0 0 14 4\n" " 105374.9500000000 0.0000459000 -0.0000105000 0.0000090000 -0.0000109000\n" " 15679.2400000000 0.0003607000 -0.0000825000 0.0000705000 -0.0000822000\n" " 3534.5447000000 0.0019198000 -0.0004412000 0.0003757000 -0.0004675000\n" " 987.3651600000 0.0082067000 -0.0018864000 0.0016146000 -0.0018465000\n" " 315.9787500000 0.0297257000 -0.0069540000 0.0059340000 -0.0075585000\n" " 111.6542800000 0.0904558000 -0.0217208000 0.0187866000 -0.0210868000\n" " 42.6994510000 0.2174054000 -0.0568513000 0.0494683000 -0.0667511000\n" " 17.3955960000 0.3687657000 -0.1139635000 0.1030399000 -0.1093673000\n" " 7.4383090000 0.3372798000 -0.1620201000 0.1620586000 -0.2731431000\n" " 3.2228620000 0.0967505000 -0.0333800000 0.0009367000 0.2097137000\n" " 1.2538770000 0.0025674000 0.3655068000 -0.8224251000 1.2034807000\n" " 0.4951550000 0.0013746000 0.5520031000 -0.1017902000 -0.6774694000\n" " 0.1916650000 -0.0001410000 0.2236393000 0.4253939000 -1.4298840000\n" " 0.0670830000 0.0000683000 0.0065745000 0.6877028000 1.4891068000\n" " 2 1 1 9 3\n" " 200.0000000000 0.0008933000 -0.0008384000 0.0012618000\n" " 46.5333670000 0.0073690000 -0.0068491000 0.0111628000\n" " 14.6218090000 0.0349392000 -0.0328505000 0.0518316000\n" " 5.3130640000 0.1152985000 -0.1100060000 0.1978845000\n" " 2.1025250000 0.2583231000 -0.3135263000 0.5707652000\n" " 0.8502230000 0.3696231000 -0.3196011000 -0.1789291000\n" " 0.3375970000 0.3238789000 0.2217243000 -0.8982077000\n" " 0.1288920000 0.1467989000 0.5622616000 0.2666643000\n" " 0.0451120000 0.0336127000 0.3013251000 0.6258994000\n" " 3 2 2 4 2\n" " 3.7500000000 0.1284934000 -0.2182055000\n" " 1.3125000000 0.5211884000 -0.4817695000\n" " 0.4593750000 0.4345784000 0.1357595000\n" " 0.1607810000 0.1457409000 0.8297734000\n" "#","\n" "Si DZ-ANO\n" " 4\n" " 1 0 0 17 5\n" " 250095.9700000000 0.0000681500 -0.0000182000 0.0000047000 -0.0000049000 0.0000068800\n" " 35803.2000000000 0.0004801700 -0.0001278000 0.0000330500 -0.0000348000 0.0000473500\n" " 10522.4830000000 0.0015962600 -0.0004265000 0.0001106400 -0.0001149000 0.0001652200\n" " 3701.7745000000 0.0054750700 -0.0014618000 0.0003777800 -0.0004007000 0.0005308800\n" " 1399.3933000000 0.0169370600 -0.0045845000 0.0011912000 -0.0012329000 0.0017985200\n" " 548.3889500000 0.0504178400 -0.0138701000 0.0035922800 -0.0038201000 0.0050352300\n" " 219.3626900000 0.1345026700 -0.0391782000 0.0102427300 -0.0106138000 0.0155996000\n" " 88.8822590000 0.2947640100 -0.0963506000 0.0253036400 -0.0270878000 0.0356862000\n" " 36.3233770000 0.4127972600 -0.1817620000 0.0493252100 -0.0512202000 0.0786378100\n" " 14.9334630000 0.2188576000 -0.1452339000 0.0404961600 -0.0466301000 0.0494893100\n" " 6.1663485000 0.0135263100 0.2298980700 -0.0698564000 0.0919014000 -0.1113745000\n" " 2.5545565000 0.0047876100 0.6237984700 -0.2541120000 0.2690132700 -0.5522929000\n" " 1.0609507000 -0.0023509000 0.3154358200 -0.2861133000 0.4607770300 -0.3884090000\n" " 0.4415024000 0.0015770000 -0.0027626000 0.2463941500 -1.0562010000 2.9534782000\n" " 0.1840168000 -0.0009118000 0.0090372200 0.6801918100 -0.7847112000 -2.8556020000\n" " 0.0767962000 0.0004164400 -0.0039062000 0.2896670600 1.2042630000 0.0921528600\n" " 0.0307185000 -0.0001140000 0.0011114400 0.0241482300 0.2967985900 1.0348260000\n" " 2 1 1 12 4\n" " 843.5338200000 0.0007436900 -0.0001574000 0.0001660200 -0.0001925000\n" " 204.9072600000 0.0055201500 -0.0011656000 0.0011978900 -0.0011519000\n" " 72.2487870000 0.0241128700 -0.0051529000 0.0054575000 -0.0064766000\n" " 27.9613650000 0.0888357300 -0.0191723000 0.0196283200 -0.0182754000\n" " 11.2322820000 0.2349425100 -0.0523132000 0.0558657900 -0.0680060000\n" " 4.5969373000 0.3973225000 -0.0900087000 0.0919795600 -0.0775832000\n" " 1.9014833000 0.3618118500 -0.0925012000 0.1150392100 -0.2143299000\n" " 0.7917828000 0.1052477300 0.0387090900 -0.0648366000 0.2557204800\n" " 0.3311662000 0.0025655500 0.3415276900 -0.6831822000 1.0777334000\n" " 0.1389423000 0.0017732900 0.4611056100 -0.1636095000 -1.2446840000\n" " 0.0584257000 -0.0004541000 0.2585592100 0.6175016400 -0.3835503000\n" " 0.0233703000 0.0001788100 0.0756656000 0.4409777500 1.0225198000\n" " 3 2 2 5 2\n" " 2.0105333000 0.0222105100 -0.0019527000\n" " 0.7910981000 0.1035698000 0.1535609200\n" " 0.3112787000 0.5081316400 0.4895933200\n" " 0.1224809000 0.3511753500 0.1138756000\n" " 0.0489924000 0.2507112700 -0.9848990000\n" " 4 3 3 2 1\n" " 0.8000000000 0.7000000000\n" " 0.3000000000 0.4000000000\n" "#","\n" "H (41) DZV-ALLELECTRON DZV-ALL\n" " 2\n" " 1 0 0 4 1\n" " 50.9991800000 0.0096604760\n" " 7.4832180000 0.0737288600\n" " 1.7774680000 0.2958581000\n" " 0.5193295000 0.7159053000\n" " 2 0 0 1 1\n" " 0.1541100000 1.0000000000\n" "#","\n" "H (41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 3\n" " 1 0 0 4 1\n" " 50.9991800000 0.0096604760\n" " 7.4832180000 0.0737288600\n" " 1.7774680000 0.2958581000\n" " 0.5193295000 0.7159053000\n" " 2 0 0 1 1\n" " 0.1541100000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He (51) DZV-ALLELECTRON DZV-ALL\n" " 2\n" " 1 0 0 5 1\n" " 221.3880300000 0.0027491019\n" " 33.2619660000 0.0208657650\n" " 7.5616549000 0.0970588380\n" " 2.0855990000 0.2807288500\n" " 0.6143391600 0.4742218300\n" " 2 0 0 1 1\n" " 0.1829212000 0.3055012900\n" "#","\n" "He (51/1) DZVP-ALLELECTRON DZVP-ALL\n" " 3\n" " 1 0 0 5 1\n" " 221.3880300000 0.0027491019\n" " 33.2619660000 0.0208657650\n" " 7.5616549000 0.0970588380\n" " 2.0855990000 0.2807288500\n" " 0.6143391600 0.4742218300\n" " 2 0 0 1 1\n" " 0.1829212000 0.3055012900\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li (6111/311) DZVP-ALLELECTRON DZVP-ALL\n" " 7\n" " 1 0 0 6 1\n" " 605.7054000000 0.0022800000\n" " 90.8609100000 0.0174600000\n" " 20.6312700000 0.0834000000\n" " 5.7384460000 0.2607400000\n" " 1.7515260000 0.4726300000\n" " 0.5463901000 0.3090700000\n" " 2 0 0 1 1\n" " 0.8427234000 1.0000000000\n" " 3 0 0 1 1\n" " 0.0674483300 1.0000000000\n" " 4 0 0 1 1\n" " 0.0253733200 1.0000000000\n" " 2 1 1 3 1\n" " 2.7700000000 0.0119900000\n" " 0.6300000000 0.0543800000\n" " 0.1850000000 0.1724600000\n" " 3 1 1 1 1\n" " 0.0544000000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0160000000 1.0000000000\n" "#","\n" "Li (621/1/1) DZVP-MONTREAL-ALLELECTRON DZVP-MONTREAL-ALL\n" " 5\n" " 1 0 0 6 1\n" " 605.7054000000 -0.0022870220\n" " 90.8609100000 -0.0174528000\n" " 20.6312700000 -0.0836970200\n" " 5.7384460000 -0.2597485000\n" " 1.7515260000 -0.4794613000\n" " 0.5463901000 -0.3233006000\n" " 2 0 0 2 1\n" " 0.8427234000 0.0748609200\n" " 0.0674483300 -0.6546490000\n" " 3 0 0 1 1\n" " 0.0253733200 1.0000000000\n" " 2 1 1 1 1\n" " 0.0773000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1220000000 1.0000000000\n" "#","\n" "Be (621/1/1) DZVP-ALLELECTRON DZVP-ALL\n" " 5\n" " 1 0 0 6 1\n" " 1203.4140000000 0.0020504250\n" " 180.2457000000 0.0157077700\n" " 40.8000500000 0.0768315300\n" " 11.3365400000 0.2480252000\n" " 3.5034830000 0.4798452000\n" " 1.1091220000 0.3371459000\n" " 2 0 0 2 1\n" " 1.9593420000 -0.0750455400\n" " 0.1652013000 0.5813557000\n" " 3 0 0 1 1\n" " 0.0552207800 1.0000000000\n" " 2 1 1 1 1\n" " 0.1500000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2500000000 1.0000000000\n" "#","\n" "B (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 1915.1670000000 -0.0020395200\n" " 287.1831000000 -0.0155965800\n" " 65.1571700000 -0.0762442400\n" " 18.1958300000 -0.2479244000\n" " 5.7015380000 -0.4790823000\n" " 1.8438370000 -0.3352953000\n" " 2 0 0 2 1\n" " 3.4914300000 0.0774223700\n" " 0.3050560000 -0.5741239000\n" " 3 0 0 1 1\n" " 0.0964865000 1.0000000000\n" " 2 1 1 4 1\n" " 11.6874200000 0.0150861200\n" " 2.6307750000 0.0888157000\n" " 0.7442269000 0.2903682000\n" " 0.2304761000 0.4994433000\n" " 3 1 1 1 1\n" " 0.0699380500 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 2808.0640000000 0.0020178300\n" " 421.1383000000 0.0154332000\n" " 95.5866200000 0.0755815500\n" " 26.7390000000 0.2478282000\n" " 8.4328270000 0.4793725000\n" " 2.7605820000 0.3338344000\n" " 2 0 0 2 1\n" " 5.4470040000 -0.0778407700\n" " 0.4792422000 0.5689560000\n" " 3 0 0 1 1\n" " 0.1461565000 1.0000000000\n" " 2 1 1 4 1\n" " 18.1308500000 0.0158547300\n" " 4.0998830000 0.0956827700\n" " 1.1858370000 0.3049119000\n" " 0.3685974000 0.4935017000\n" " 3 1 1 1 1\n" " 0.1097200000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 3845.4150000000 0.0020186080\n" " 577.5332000000 0.0154077600\n" " 131.3198000000 0.0753714000\n" " 36.8237800000 0.2482122000\n" " 11.6701200000 0.4798274000\n" " 3.8542600000 0.3318012000\n" " 2 0 0 2 1\n" " 7.8295610000 -0.0776668700\n" " 0.6877351000 0.5654598000\n" " 3 0 0 1 1\n" " 0.2040388000 1.0000000000\n" " 2 1 1 4 1\n" " 26.8098400000 0.0154663100\n" " 6.0681540000 0.0964396800\n" " 1.7676260000 0.3083610000\n" " 0.5466728000 0.4911597000\n" " 3 1 1 1 1\n" " 0.1587289000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 5222.9020000000 -0.0019363720\n" " 782.5399000000 -0.0148506700\n" " 177.2674000000 -0.0733187000\n" " 49.5166900000 -0.2451162000\n" " 15.6664400000 -0.4802847000\n" " 5.1793600000 -0.3359427000\n" " 2 0 0 2 1\n" " 10.6014400000 0.0788058200\n" " 0.9423171000 -0.5676952000\n" " 3 0 0 1 1\n" " 0.2774746000 1.0000000000\n" " 2 1 1 4 1\n" " 33.4241300000 0.0175603300\n" " 7.6221710000 0.1076300000\n" " 2.2382090000 0.3235255000\n" " 0.6867300000 0.4832229000\n" " 3 1 1 1 1\n" " 0.1938135000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 6384.7140000000 -0.0020301590\n" " 958.8865000000 -0.0154981000\n" " 218.1901000000 -0.0757786900\n" " 61.3647300000 -0.2502724000\n" " 19.6029000000 -0.4801086000\n" " 6.5648830000 -0.3271614000\n" " 2 0 0 2 1\n" " 13.8106900000 0.0790706600\n" " 1.2298670000 -0.5681216000\n" " 3 0 0 1 1\n" " 0.3584713000 1.0000000000\n" " 2 1 1 4 1\n" " 42.4699100000 0.0183170400\n" " 9.7138810000 0.1124513000\n" " 2.8640390000 0.3297771000\n" " 0.8746054000 0.4799772000\n" " 3 1 1 1 1\n" " 0.2425071000 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne (621/41/1) DZVP-ALLELECTRON DZVP-ALL\n" " 6\n" " 1 0 0 6 1\n" " 7883.8260000000 0.0020374790\n" " 1184.4060000000 0.0155468100\n" " 269.6731000000 0.0759637700\n" " 75.9416500000 0.2511027000\n" " 24.3210900000 0.4804765000\n" " 8.1832560000 0.3251142000\n" " 2 0 0 2 1\n" " 17.4495200000 -0.0790099700\n" " 1.5516320000 0.5676274000\n" " 3 0 0 1 1\n" " 0.4476986000 1.0000000000\n" " 2 1 1 4 1\n" " 52.9038100000 0.0187910600\n" " 12.1233600000 0.1157605000\n" " 3.5859220000 0.3342627000\n" " 1.0921630000 0.4778038000\n" " 3 1 1 1 1\n" " 0.2994419000 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 9911.9960000000 0.0019500000\n" " 1487.4550000000 0.0148800000\n" " 337.9539000000 0.0732600000\n" " 94.9139500000 0.2450700000\n" " 30.3415000000 0.4787800000\n" " 10.1908400000 0.3327300000\n" " 2 0 0 3 1\n" " 21.2296500000 -0.0917500000\n" " 1.9804180000 0.5721000000\n" " 0.6188824000 0.4550100000\n" " 3 0 0 2 1\n" " 0.6991738000 -0.1150200000\n" " 0.0618270500 0.6934500000\n" " 4 0 0 1 1\n" " 0.0237274100 1.0000000000\n" " 2 1 1 5 1\n" " 73.0853100000 -0.0165900000\n" " 16.8645600000 -0.1059900000\n" " 5.0553910000 -0.3220200000\n" " 1.5920210000 -0.4903600000\n" " 0.4702690000 -0.3121800000\n" " 3 1 1 2 1\n" " 0.1700000000 0.0412900000\n" " 0.0647000000 0.4041200000\n" " 4 1 1 1 1\n" " 0.0170000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Na (6321/411/1) DZVP-MONTREAL-ALLELECTRON DZVP-MONTREAL-ALL\n" " 8\n" " 1 0 0 6 1\n" " 9911.9960000000 0.0019504590\n" " 1487.4550000000 0.0149171200\n" " 337.9539000000 0.0734165800\n" " 94.9139500000 0.2456910000\n" " 30.3415000000 0.4795611000\n" " 10.1908400000 0.3337213000\n" " 2 0 0 3 1\n" " 21.2296500000 0.0823028800\n" " 1.9804180000 -0.5608480000\n" " 0.6188824000 -0.5224378000\n" " 3 0 0 2 1\n" " 0.6991738000 0.0920975500\n" " 0.0618270500 -0.6708252000\n" " 4 0 0 1 1\n" " 0.0237274100 1.0000000000\n" " 2 1 1 4 1\n" " 73.0853100000 0.0167176300\n" " 16.8645600000 0.1065395000\n" " 5.0553910000 0.3242217000\n" " 1.5920210000 0.4891362000\n" " 3 1 1 1 1\n" " 0.4702690000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0647000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg (6321/411/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 12436.6700000000 -0.0018333240\n" " 1862.2230000000 -0.0140828100\n" " 421.3745000000 -0.0700956200\n" " 117.6930000000 -0.2387718000\n" " 37.4314500000 -0.4787377000\n" " 12.5054900000 -0.3447773000\n" " 2 0 0 3 1\n" " 25.4514000000 0.0852139700\n" " 2.4528770000 -0.5646916000\n" " 0.8051333000 -0.5157275000\n" " 3 0 0 2 1\n" " 1.0820080000 -0.1113334000\n" " 0.1083340000 0.6481452000\n" " 4 0 0 1 1\n" " 0.0399073500 1.0000000000\n" " 2 1 1 4 1\n" " 92.4632200000 0.0162715700\n" " 21.5017700000 0.1045630000\n" " 6.5374420000 0.3224328000\n" " 2.1180810000 0.4940399000\n" " 3 1 1 1 1\n" " 0.6583148000 1.0000000000\n" " 4 1 1 1 1\n" " 0.1061000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 14724.4500000000 0.0018181970\n" " 2205.4630000000 0.0139580500\n" " 499.3021000000 0.0695009200\n" " 139.5901000000 0.2371061000\n" " 44.4922800000 0.4776104000\n" " 14.9056900000 0.3476339000\n" " 2 0 0 3 1\n" " 30.0750700000 -0.0878851200\n" " 2.9838330000 0.5677370000\n" " 1.0209900000 0.5105008000\n" " 3 0 0 2 1\n" " 1.4927790000 0.1341424000\n" " 0.1692291000 -0.6656758000\n" " 4 0 0 1 1\n" " 0.0617449100 1.0000000000\n" " 2 1 1 5 1\n" " 127.9161000000 0.0133024200\n" " 29.7767800000 0.0896709600\n" " 9.0917390000 0.2981308000\n" " 3.0009870000 0.4962628000\n" " 0.9695584000 0.3301450000\n" " 3 1 1 2 1\n" " 0.3756001000 0.2050982000\n" " 0.1250989000 0.5518101000\n" " 4 1 1 1 1\n" " 0.0417398100 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 17268.5800000000 -0.0017973950\n" " 2586.6510000000 -0.0137970400\n" " 585.6364000000 -0.0687807200\n" " 163.7736000000 -0.2352508000\n" " 52.2670300000 -0.4766194000\n" " 17.5416800000 -0.3507726000\n" " 2 0 0 3 1\n" " 35.1241400000 0.0902137000\n" " 3.5654230000 -0.5722548000\n" " 1.2591470000 -0.5045537000\n" " 3 0 0 2 1\n" " 1.9470140000 -0.1508352000\n" " 0.2367573000 0.6745594000\n" " 4 0 0 1 1\n" " 0.0858966400 1.0000000000\n" " 2 1 1 5 1\n" " 159.6817000000 -0.0123932000\n" " 37.2581700000 -0.0850800400\n" " 11.4382500000 -0.2905513000\n" " 3.8278340000 -0.4985588000\n" " 1.2679000000 -0.3325624000\n" " 3 1 1 2 1\n" " 0.5344095000 -0.2264369000\n" " 0.1829031000 -0.5553035000\n" " 4 1 1 1 1\n" " 0.0617872600 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 20024.9400000000 -0.0017787230\n" " 2999.4410000000 -0.0136540700\n" " 679.0868000000 -0.0681441600\n" " 189.9439000000 -0.2336137000\n" " 60.6834800000 -0.4757401000\n" " 20.3982300000 -0.3535470000\n" " 2 0 0 3 1\n" " 40.5941600000 -0.0922427200\n" " 4.1972190000 0.5774677000\n" " 1.5192950000 0.4983773000\n" " 3 0 0 2 1\n" " 2.4458590000 0.1631695000\n" " 0.3116159000 -0.6787174000\n" " 4 0 0 1 1\n" " 0.1120101000 1.0000000000\n" " 2 1 1 5 1\n" " 195.3994000000 -0.0116298200\n" " 45.6667500000 -0.0811413200\n" " 14.0730700000 -0.2837707000\n" " 4.7572430000 -0.5004074000\n" " 1.6035060000 -0.3357758000\n" " 3 1 1 2 1\n" " 0.7039432000 -0.2471697000\n" " 0.2451145000 -0.5552025000\n" " 4 1 1 1 1\n" " 0.0831324000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 23050.0700000000 -0.0017566500\n" " 3451.8660000000 -0.0134893800\n" " 781.2787000000 -0.0674324900\n" " 218.4765000000 -0.2318604000\n" " 69.8326300000 -0.4749416000\n" " 23.4948000000 -0.3564992000\n" " 2 0 0 3 1\n" " 46.4823800000 -0.0940421700\n" " 4.8807490000 0.5828881000\n" " 1.8014760000 0.4923262000\n" " 3 0 0 2 1\n" " 2.9778040000 0.1731553000\n" " 0.3942510000 -0.6854363000\n" " 4 0 0 1 1\n" " 0.1417028000 1.0000000000\n" " 2 1 1 5 1\n" " 231.3313000000 0.0112789100\n" " 54.1461600000 0.0794256900\n" " 16.7576200000 0.2808799000\n" " 5.7193200000 0.5020190000\n" " 1.9560350000 0.3344146000\n" " 3 1 1 2 1\n" " 0.8955913000 0.2646811000\n" " 0.3094227000 0.5496127000\n" " 4 1 1 1 1\n" " 0.1021157000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 26351.4600000000 0.0017324290\n" " 3945.0570000000 0.0133109400\n" " 892.4384000000 0.0666748300\n" " 249.4174000000 0.2300506000\n" " 79.7215700000 0.4742307000\n" " 26.8311400000 0.3595240000\n" " 2 0 0 3 1\n" " 52.7853000000 -0.0956295900\n" " 5.6156430000 0.5880840000\n" " 2.1059080000 0.4866982000\n" " 3 0 0 2 1\n" " 3.5586150000 0.1806891000\n" " 0.4847981000 -0.6884829000\n" " 4 0 0 1 1\n" " 0.1733310000 1.0000000000\n" " 2 1 1 5 1\n" " 271.0782000000 -0.0109256700\n" " 63.5472100000 -0.0775909100\n" " 19.7371100000 -0.2775159000\n" " 6.7889940000 -0.5031933000\n" " 2.3480300000 -0.3348426000\n" " 3 1 1 2 1\n" " 1.1066860000 -0.2765381000\n" " 0.3829680000 -0.5466768000\n" " 4 1 1 1 1\n" " 0.1251133000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar (6321/521/1) DZVP-ALLELECTRON DZVP-ALL\n" " 8\n" " 1 0 0 6 1\n" " 29505.7700000000 -0.0017375040\n" " 4419.2160000000 -0.0133380900\n" " 1000.5770000000 -0.0667249100\n" " 280.0380000000 -0.2298887000\n" " 89.7120800000 -0.4735744000\n" " 30.2798800000 -0.3599160000\n" " 2 0 0 3 1\n" " 59.5144000000 0.0970257400\n" " 6.3997780000 -0.5933987000\n" " 2.4314710000 -0.4810804000\n" " 3 0 0 2 1\n" " 4.1875360000 -0.1864000000\n" " 0.5832562000 0.6895689000\n" " 4 0 0 1 1\n" " 0.2071081000 1.0000000000\n" " 2 1 1 5 1\n" " 313.0218000000 0.0106753000\n" " 73.4872300000 0.0763095300\n" " 22.8979900000 0.2751271000\n" " 7.9322150000 0.5040719000\n" " 2.7702700000 0.3346271000\n" " 3 1 1 2 1\n" " 1.3318950000 0.2877000000\n" " 0.4618615000 0.5447527000\n" " 4 1 1 1 1\n" " 0.1502194000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "K (63321/5211/1) DZVP-ALLELECTRON DZVP-ALL\n" " 10\n" " 1 0 0 6 1\n" " 33078.6500000000 0.0017266760\n" " 4954.9020000000 0.0132514200\n" " 1122.1310000000 0.0663142300\n" " 314.2081000000 0.2286724000\n" " 100.7763000000 0.4726698000\n" " 34.0613500000 0.3621416000\n" " 2 0 0 3 1\n" " 66.6029300000 -0.0984506600\n" " 7.2644560000 0.5941619000\n" " 2.8036790000 0.4799139000\n" " 3 0 0 3 1\n" " 4.8324390000 0.1972709000\n" " 0.7058188000 -0.6956473000\n" " 0.2697520000 -0.4228781000\n" " 4 0 0 2 1\n" " 0.3533535000 -0.1246783000\n" " 0.0420916300 0.7383633000\n" " 5 0 0 1 1\n" " 0.0174484800 1.0000000000\n" " 2 1 1 5 1\n" " 367.5115000000 -0.0100333200\n" " 86.2608600000 -0.0727348400\n" " 26.8979700000 -0.2679043000\n" " 9.3541250000 -0.5038367000\n" " 3.2920580000 -0.3426224000\n" " 3 1 1 2 1\n" " 1.6209190000 -0.2952722000\n" " 0.5872493000 -0.5563566000\n" " 4 1 1 1 1\n" " 0.2046941000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0408000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "Cu (63321/531/41*) DZVP-MONTREAL-ALLELECTRON DZVP-MONTREAL-ALL\n" " 10\n" " 1 0 0 6 1\n" " 80289.6200000000 -0.0016562160\n" " 12027.3400000000 -0.0127092500\n" " 2724.2580000000 -0.0638517700\n" " 763.5617000000 -0.2221154000\n" " 246.0646000000 -0.4686049000\n" " 83.8683600000 -0.3733793000\n" " 2 0 0 3 1\n" " 161.7973000000 0.1066759000\n" " 18.7253700000 -0.6245943000\n" " 7.6364160000 -0.4496724000\n" " 3 0 0 3 1\n" " 14.1508300000 -0.2198077000\n" " 2.2528310000 0.7108760000\n" " 0.8644886000 0.4206572000\n" " 4 0 0 2 1\n" " 1.2230960000 0.1303169000\n" " 0.1429771000 -0.5708601000\n" " 5 0 0 1 1\n" " 0.0504603300 1.0000000000\n" " 2 1 1 5 1\n" " 1002.9740000000 0.0089143100\n" " 236.6253000000 0.0669704300\n" " 74.8923200000 0.2584147000\n" " 26.9312500000 0.5070620000\n" " 9.9267760000 0.3407511000\n" " 3 1 1 3 1\n" " 5.3446650000 0.3313745000\n" " 2.0247480000 0.5459871000\n" " 0.7366331000 0.2494767000\n" " 4 1 1 1 1\n" " 0.1410000000 1.0000000000\n" " 3 2 2 4 1\n" " 31.8126700000 -0.0668891400\n" " 8.6058710000 -0.2907401000\n" " 2.6093410000 -0.4984195000\n" " 0.6852135000 -0.4697251000\n" " 4 2 2 1 1\n" " 0.1100000000 1.0000000000\n" "#","\n" "Cu (63321/531/41) DZVP-ALLELECTRON DZVP-ALL\n" " 10\n" " 1 0 0 6 1\n" " 80289.6200000000 0.0016500000\n" " 12027.3400000000 0.0127400000\n" " 2724.2580000000 0.0634300000\n" " 763.5617000000 0.2238400000\n" " 246.0646000000 0.4469700000\n" " 83.8683600000 0.3432300000\n" " 2 0 0 3 1\n" " 161.7973000000 -0.0836100000\n" " 18.7253700000 0.7573900000\n" " 7.6364160000 0.5060700000\n" " 3 0 0 3 1\n" " 14.1508300000 -0.1441800000\n" " 2.2528310000 0.8250000000\n" " 0.8644886000 0.4798900000\n" " 4 0 0 2 1\n" " 1.2230960000 -0.0785900000\n" " 0.1429771000 0.5949100000\n" " 5 0 0 1 1\n" " 0.0504603300 1.0000000000\n" " 2 1 1 5 1\n" " 1002.9740000000 0.0089100000\n" " 236.6253000000 0.0666800000\n" " 74.8923200000 0.2569800000\n" " 26.9312500000 0.5058100000\n" " 9.9267760000 0.3376600000\n" " 3 1 1 3 1\n" " 5.3446650000 0.3484300000\n" " 2.0247480000 0.5954700000\n" " 0.7366331000 0.2609100000\n" " 4 1 1 1 1\n" " 0.1410000000 1.0000000000\n" " 3 2 2 4 1\n" " 31.8126700000 0.0636900000\n" " 8.6058710000 0.2755200000\n" " 2.6093410000 0.4756400000\n" " 0.6852135000 0.4480200000\n" " 4 2 2 1 1\n" " 0.1100000000 1.0000000000\n" "#","\n" "Cu (633111/5211/311) TZVP-ALLELECTRON TZVP-ALL\n" " 13\n" " 1 0 0 6 1\n" " 80289.6200000000 0.0016500000\n" " 12027.3400000000 0.0127400000\n" " 2724.2580000000 0.0634300000\n" " 763.5617000000 0.2238400000\n" " 246.0646000000 0.4469700000\n" " 83.8683600000 0.3432300000\n" " 2 0 0 3 1\n" " 161.7973000000 -0.0836100000\n" " 18.7253700000 0.7573900000\n" " 7.6364160000 0.5060700000\n" " 3 0 0 3 1\n" " 14.1508300000 -0.1441800000\n" " 2.2528310000 0.8250000000\n" " 0.8644886000 0.4798900000\n" " 4 0 0 1 1\n" " 1.2230960000 1.0000000000\n" " 5 0 0 1 1\n" " 0.1429771000 1.0000000000\n" " 6 0 0 1 1\n" " 0.0504603300 1.0000000000\n" " 2 1 1 5 1\n" " 1002.9740000000 0.0089100000\n" " 236.6253000000 0.0666800000\n" " 74.8923200000 0.2569800000\n" " 26.9312500000 0.5058100000\n" " 9.9267760000 0.3376600000\n" " 3 1 1 2 1\n" " 5.3446650000 0.3484300000\n" " 2.0247480000 0.5954700000\n" " 4 1 1 1 1\n" " 0.7366331000 1.0000000000\n" " 5 1 1 1 1\n" " 0.1410000000 1.0000000000\n" " 3 2 2 3 1\n" " 31.8126700000 0.0636900000\n" " 8.6058710000 0.2755200000\n" " 2.6093410000 0.4756400000\n" " 4 2 2 1 1\n" " 0.6852135000 1.0000000000\n" " 5 2 2 1 1\n" " 0.1100000000 1.0000000000\n" "#","\n" "Zn (63321/531/41) DZVP-ALLELECTRON DZVP-ALL\n" " 10\n" " 1 0 0 6 1\n" " 82904.2200000000 -0.0017313190\n" " 12444.2300000000 -0.0132328300\n" " 2829.8530000000 -0.0658900700\n" " 797.8929000000 -0.2261988000\n" " 259.0647000000 -0.4683912000\n" " 89.0795100000 -0.3669156000\n" " 2 0 0 3 1\n" " 173.6817000000 -0.1071624000\n" " 20.1665000000 0.6264982000\n" " 8.2470820000 0.4478206000\n" " 3 0 0 3 1\n" " 15.3165800000 -0.2212375000\n" " 2.4557490000 0.7091911000\n" " 0.9548777000 0.4224147000\n" " 4 0 0 2 1\n" " 1.4100030000 -0.1404652000\n" " 0.1693441000 0.6012745000\n" " 5 0 0 1 1\n" " 0.0592210000 1.0000000000\n" " 2 1 1 5 1\n" " 1085.1780000000 0.0088260260\n" " 256.1809000000 0.0664454900\n" " 81.1402500000 0.2574246000\n" " 29.2225200000 0.5071455000\n" " 10.7937000000 0.3414356000\n" " 3 1 1 3 1\n" " 5.8412900000 0.3312126000\n" " 2.2263660000 0.5463760000\n" " 0.8211640000 0.2468144000\n" " 4 1 1 1 1\n" " 0.1690000000 1.0000000000\n" " 3 2 2 4 1\n" " 38.0934700000 -0.0606966400\n" " 10.4237600000 -0.2760500000\n" " 3.2532520000 -0.4982638000\n" " 0.9097528000 -0.4689898000\n" " 4 2 2 1 1\n" " 0.1720000000 1.0000000000\n" "#","\n" "Br (63321/5321/41) DZVP-ALLELECTRON DZVP-ALL\n" " 11\n" " 1 0 0 6 1\n" " 115354.1000000000 0.0016893780\n" " 17308.3900000000 0.0129218500\n" " 3932.8540000000 0.0645566100\n" " 1107.7720000000 0.2228721000\n" " 359.6334000000 0.4668337000\n" " 123.6999000000 0.3726870000\n" " 2 0 0 3 1\n" " 239.1218000000 0.1093640000\n" " 28.2681300000 -0.6294377000\n" " 11.7505700000 -0.4449871000\n" " 3 0 0 3 1\n" " 21.8299600000 0.2318734000\n" " 3.6088260000 -0.7272457000\n" " 1.5164870000 -0.4055866000\n" " 4 0 0 2 1\n" " 2.5209370000 0.2202626000\n" " 0.4093415000 -0.7163121000\n" " 5 0 0 1 1\n" " 0.1530953000 1.0000000000\n" " 2 1 1 5 1\n" " 1580.3740000000 0.0081757200\n" " 373.0976000000 0.0625525000\n" " 118.3523000000 0.2484745000\n" " 42.8589600000 0.5054137000\n" " 15.9778700000 0.3523443000\n" " 3 1 1 3 1\n" " 8.7533270000 0.3283504000\n" " 3.5160330000 0.5437991000\n" " 1.4307380000 0.2357859000\n" " 4 1 1 2 1\n" " 0.7091507000 -0.3244162000\n" " 0.2656835000 -0.5395416000\n" " 5 1 1 1 1\n" " 0.0943995000 1.0000000000\n" " 3 2 2 4 1\n" " 61.5144200000 0.0595776800\n" " 17.1619800000 0.2843781000\n" " 5.5384710000 0.5281856000\n" " 1.6848170000 0.4047724000\n" " 4 2 2 1 1\n" " 0.3620000000 1.0000000000\n" "#","\n" "H DZV-ALL-PADE\n" " 1\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" "#","\n" "H DZVP-ALL-PADE\n" " 2\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-ALL-PADE\n" " 1\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" "#","\n" "He DZVP-ALL-PADE\n" " 2\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-ALL-PADE\n" " 1\n" " 1 0 0 9 3\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000\n" "#","\n" "Li DZVP-ALL-PADE\n" " 1\n" " 1 0 1 9 3 1\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000 1.0000000000\n" "#","\n" "Be DZV-ALL-PADE\n" " 1\n" " 1 0 0 9 3\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000\n" "#","\n" "Be DZVP-ALL-PADE\n" " 1\n" " 1 0 1 9 3 1\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000 1.0000000000\n" "#","\n" "B DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 2770.6887201190 -0.0012849920 0.0002815183 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 416.0177319883 -0.0098497439 0.0021926254 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 94.8894954229 -0.0489833356 0.0108940076 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 26.7499548442 -0.1723972150 0.0414450988 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.4264760790 -0.4017468011 0.1087223068 0.0000000000 -0.0194224027 0.0000000000 0.0000000000\n" " 2.8185756685 -0.4396258903 0.1880725583 0.0000000000 -0.0637848437 0.0000000000 0.0000000000\n" " 0.8858154287 -0.0939440721 -0.0102057441 0.0000000000 -0.2445403926 0.0000000000 0.0000000000\n" " 0.2755692515 0.0087352964 -0.6622781443 0.0000000000 -0.4653071695 0.0000000000 1.0000000000\n" " 0.0836350993 -0.0023332765 -0.4345757818 1.0000000000 -0.4454718873 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 4266.1800613820 -0.0011943659 0.0002708392 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 642.7602862562 -0.0091221647 0.0021018981 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 146.7884267926 -0.0455862664 0.0104909359 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 41.2743794968 -0.1645442121 0.0408993451 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 12.8905294328 -0.4010362654 0.1123583959 0.0000000000 -0.0207269323 0.0000000000 0.0000000000\n" " 4.2578431902 -0.4506526871 0.2000200876 0.0000000000 -0.0735133778 0.0000000000 0.0000000000\n" " 1.3307568939 -0.0932928666 -0.0307479826 0.0000000000 -0.2717786632 0.0000000000 0.0000000000\n" " 0.4108076579 0.0083827453 -0.6803273620 0.0000000000 -0.4752358588 0.0000000000 1.0000000000\n" " 0.1203105299 -0.0021601474 -0.4075981685 1.0000000000 -0.4103141270 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 6241.4478205000 -0.0010992714 0.0002541567 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 942.7853221624 -0.0083836502 0.0019685436 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 215.1071557533 -0.0422134003 0.0099007497 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 60.1999725160 -0.1563225099 0.0394939433 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 18.6046423067 -0.3979589501 0.1133930134 0.0000000000 -0.0210878424 0.0000000000 0.0000000000\n" " 6.0687801071 -0.4619961627 0.2073232497 0.0000000000 -0.0789077492 0.0000000000 0.0000000000\n" " 1.8932165206 -0.0957720636 -0.0376291073 0.0000000000 -0.2857497167 0.0000000000 0.0000000000\n" " 0.5794472569 0.0081210319 -0.6849844121 0.0000000000 -0.4787797641 0.0000000000 1.0000000000\n" " 0.1652321868 -0.0020517293 -0.4012545190 1.0000000000 -0.3946908536 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 8664.6907364270 -0.0010264289 0.0002401847 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1306.3804630458 -0.0078441700 0.0018629873 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 297.9615739412 -0.0396596073 0.0094113620 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 83.0732192337 -0.1499468244 0.0382308227 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 25.4219803948 -0.3957081736 0.1138918674 0.0000000000 -0.0212313047 0.0000000000 0.0000000000\n" " 8.2002946495 -0.4708819153 0.2122924071 0.0000000000 -0.0827974544 0.0000000000 0.0000000000\n" " 2.5534670865 -0.0973701955 -0.0419284053 0.0000000000 -0.2949296208 0.0000000000 0.0000000000\n" " 0.7764121612 0.0078325892 -0.6868639954 0.0000000000 -0.4802452851 0.0000000000 1.0000000000\n" " 0.2169654766 -0.0019439564 -0.3986265721 1.0000000000 -0.3854659989 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 11534.0506179760 -0.0009693137 0.0002286337 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4519019727 -0.0074228862 0.0017758908 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 395.6947671892 -0.0376841674 0.0090123001 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 109.8950434029 -0.1450177785 0.0371743948 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 33.3170603602 -0.3943357740 0.1142516978 0.0000000000 -0.0213060126 0.0000000000 0.0000000000\n" " 10.6395997010 -0.4778632959 0.2159190584 0.0000000000 -0.0858798131 0.0000000000 0.0000000000\n" " 3.3072015847 -0.0980593066 -0.0454513631 0.0000000000 -0.3015970754 0.0000000000 0.0000000000\n" " 1.0004259330 0.0075046051 -0.6878291319 0.0000000000 -0.4808474043 0.0000000000 1.0000000000\n" " 0.2751462303 -0.0018293410 -0.3969701556 1.0000000000 -0.3792605287 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne DZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 3 3\n" " 14852.7741853830 -0.0009235872 0.0002190609 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2234.8237554633 -0.0070802740 0.0017022734 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 508.8034771653 -0.0360908407 0.0086781493 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 140.7349980722 -0.1411013040 0.0362883902 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 42.2868226841 -0.3936017844 0.1145689028 0.0000000000 -0.0213531723 0.0000000000 0.0000000000\n" " 13.3814738310 -0.4835123748 0.2187087359 0.0000000000 -0.0884397798 0.0000000000 0.0000000000\n" " 4.1527137274 -0.0981106306 -0.0486085731 0.0000000000 -0.3067173307 0.0000000000 0.0000000000\n" " 1.2509672859 0.0071501025 -0.6884074486 0.0000000000 -0.4810347809 0.0000000000 1.0000000000\n" " 0.3396248365 -0.0017103909 -0.3956395896 1.0000000000 -0.3747659865 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 21394.4924408352 0.0006997970 -0.0001723222 0.0000318328 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 3795.7378701065 0.0042288655 -0.0010411116 0.0001901524 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 985.8138826962 0.0187975202 -0.0046890691 0.0008718578 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 302.7884326942 0.0687646112 -0.0175180517 0.0031871723 0.0000000000 -0.0012633822 0.0000000000 0.0000000000 0.0000000000\n" " 103.1219260258 0.1965820685 -0.0542917187 0.0102229243 0.0000000000 -0.0055996166 0.0000000000 0.0000000000 0.0000000000\n" " 37.9946819901 0.3853147762 -0.1258294332 0.0229101289 0.0000000000 -0.0260567422 0.0000000000 0.0000000000 0.0000000000\n" " 14.7704405101 0.3818197180 -0.1864438254 0.0376735175 0.0000000000 -0.0909943900 0.0000000000 0.0000000000 0.0000000000\n" " 5.8005968867 0.0996875920 -0.0067937817 -0.0040418885 0.0000000000 -0.2388788121 0.0000000000 0.0000000000 0.0000000000\n" " 2.2568321873 -0.0028473835 0.4371568026 -0.0847080121 0.0000000000 -0.3819119184 0.0000000000 0.0000000000 0.0000000000\n" " 0.8574123124 0.0015751503 0.5578917664 -0.2235245000 0.0000000000 -0.3665265555 1.0000000000 0.0000000000 0.0000000000\n" " 0.3102401678 -0.0004707246 0.1358955383 0.0003703549 0.0000000000 -0.1521385722 0.0000000000 1.0000000000 0.0000000000\n" " 0.0425973682 0.0000637435 -0.0014197920 1.0326168980 1.0000000000 -0.0040572054 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 24563.3509341519 0.0007501763 -0.0001898742 0.0000432716 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4098.7281652598 0.0049866285 -0.0012662269 0.0002886160 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1006.0693449047 0.0236248415 -0.0060608521 0.0013824537 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 296.0583569831 0.0889264612 -0.0236070994 0.0053960194 0.0000000000 -0.0019014218 0.0000000000 0.0000000000 0.0000000000\n" " 97.5602425330 0.2498577261 -0.0728218452 0.0167469733 0.0000000000 -0.0091160713 0.0000000000 0.0000000000 0.0000000000\n" " 35.0026526821 0.4370249965 -0.1609409689 0.0376024877 0.0000000000 -0.0414328941 0.0000000000 0.0000000000 0.0000000000\n" " 13.2894359607 0.3137343310 -0.1793620369 0.0434617096 0.0000000000 -0.1416149186 0.0000000000 0.0000000000 0.0000000000\n" " 5.0406635723 0.0348223238 0.1488145108 -0.0386567967 0.0000000000 -0.3285471023 0.0000000000 0.0000000000 0.0000000000\n" " 1.8767656586 0.0002090057 0.6227623758 -0.2075293171 0.0000000000 -0.4342370572 0.0000000000 0.0000000000 0.0000000000\n" " 0.6740386983 -0.0003911930 0.3832848322 -0.2221884917 0.0000000000 -0.2719424179 1.0000000000 0.0000000000 0.0000000000\n" " 0.1488350316 0.0001705201 0.0091106555 0.4513483785 0.0000000000 -0.0274310878 0.0000000000 1.0000000000 0.0000000000\n" " 0.0515990826 -0.0000693922 -0.0006594960 0.6960710466 1.0000000000 0.0065925450 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 27551.3038803664 0.0007902356 0.0002051247 -0.0000539950 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4682.7618227118 0.0051091411 0.0013307487 -0.0003509552 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1166.3402011445 0.0238287095 0.0062711660 -0.0016510527 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 346.0032826675 0.0891920482 0.0243060417 -0.0064361456 0.0000000000 -0.0020283510 0.0003943314 0.0000000000 0.0000000000\n" " 114.4719182078 0.2502089639 0.0749256824 -0.0198886400 0.0000000000 -0.0096153064 0.0020649970 0.0000000000 0.0000000000\n" " 41.1999175687 0.4367661056 0.1656890319 -0.0450859057 0.0000000000 -0.0438990222 0.0086117474 0.0000000000 0.0000000000\n" " 15.7012333530 0.3125973574 0.1836095416 -0.0512412586 0.0000000000 -0.1486831836 0.0325680927 0.0000000000 0.0000000000\n" " 6.0142665071 0.0345570290 -0.1524355487 0.0448540103 0.0000000000 -0.3395431168 0.0689924793 0.0000000000 0.0000000000\n" " 2.2830453817 0.0004891428 -0.6319413645 0.2602793107 0.0000000000 -0.4356046359 0.1128895908 0.0000000000 0.0000000000\n" " 0.8490703600 -0.0005055118 -0.3717923282 0.2367424774 0.0000000000 -0.2445346410 -0.0215336434 0.0000000000 0.0000000000\n" " 0.1896189412 0.0001917544 -0.0078124700 -0.7037552451 0.0000000000 -0.0176080423 -0.4885175925 0.0000000000 1.0000000000\n" " 0.0590458267 -0.0000711837 0.0005957043 -0.4830773513 1.0000000000 0.0038180642 -0.5990452444 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 34205.8807706528 0.0007327188 0.0001943796 -0.0000558389 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5705.2071864975 0.0048710223 0.0012962263 -0.0003727797 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1400.9000355114 0.0230910203 0.0062095461 -0.0017849346 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 411.6831259844 0.0874748743 0.0243401409 -0.0070274320 0.0000000000 -0.0020435691 0.0004608501 0.0000000000 0.0000000000\n" " 135.3586299298 0.2480782614 0.0758718633 -0.0220186781 0.0000000000 -0.0098284202 0.0024034582 0.0000000000 0.0000000000\n" " 48.5277674751 0.4375690658 0.1694258836 -0.0503252964 0.0000000000 -0.0454264531 0.0103657478 0.0000000000 0.0000000000\n" " 18.4574862413 0.3157185815 0.1896317701 -0.0584489572 0.0000000000 -0.1542320032 0.0386846044 0.0000000000 0.0000000000\n" " 7.0951187369 0.0349093715 -0.1561350675 0.0519518554 0.0000000000 -0.3498959381 0.0835955571 0.0000000000 0.0000000000\n" " 2.7255967144 0.0007868340 -0.6418259851 0.2969196408 0.0000000000 -0.4363611647 0.1290968861 0.0000000000 0.0000000000\n" " 1.0416239959 -0.0006880967 -0.3592395770 0.2542270212 0.0000000000 -0.2203688566 -0.0396529577 0.0000000000 0.0000000000\n" " 0.2679494348 0.0002658227 -0.0069544727 -0.7342316576 0.0000000000 -0.0131604244 -0.5256989764 0.0000000000 1.0000000000\n" " 0.0814723628 -0.0000897664 0.0000537394 -0.4823523926 1.0000000000 0.0021025311 -0.5604030966 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 36978.0006282670 -0.0007882716 -0.0002130577 0.0000647974 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 6222.2481694120 -0.0051771150 -0.0014042239 0.0004276889 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1534.4538912185 -0.0244536132 -0.0067044703 0.0020403295 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 450.9238919748 -0.0925205949 -0.0263118610 0.0080502303 0.0000000000 -0.0023114207 0.0005787895 0.0000000000 0.0000000000\n" " 147.9232376649 -0.2603320996 -0.0817937127 0.0251613391 0.0000000000 -0.0110744755 0.0029302708 0.0000000000 0.0000000000\n" " 52.8962236804 -0.4459248734 -0.1800960112 0.0569273568 0.0000000000 -0.0514807115 0.0130835082 0.0000000000 0.0000000000\n" " 20.0317880911 -0.2973279703 -0.1864541939 0.0613716013 0.0000000000 -0.1716941092 0.0469534420 0.0000000000 0.0000000000\n" " 7.7131122202 -0.0245287918 0.2031306430 -0.0738571235 0.0000000000 -0.3732355043 0.1006399940 0.0000000000 0.0000000000\n" " 2.9844774777 -0.0023042412 0.6642552121 -0.3477214528 0.0000000000 -0.4305581327 0.1364700825 0.0000000000 0.0000000000\n" " 1.1549719893 0.0014070660 0.3025676551 -0.2237894266 0.0000000000 -0.1767432863 -0.0764816331 0.0000000000 0.0000000000\n" " 0.3417880814 -0.0005342995 0.0006613566 0.7764969105 0.0000000000 -0.0060298501 -0.5504601345 0.0000000000 1.0000000000\n" " 0.1040262651 0.0001624777 0.0012215196 0.4569656329 1.0000000000 0.0003271252 -0.5191181650 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 43116.7172343791 0.0007730597 -0.0002123479 0.0000672395 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7082.1673578265 0.0052570195 -0.0014494275 0.0004599971 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1715.6275383850 0.0252958095 -0.0070506620 0.0022334067 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 498.2117432579 0.0966015002 -0.0279836798 0.0089283399 0.0000000000 -0.0025280039 0.0006830870 0.0000000000 0.0000000000\n" " 162.0462756704 0.2714940023 -0.0872956329 0.0279726273 0.0000000000 -0.0122585511 0.0034185387 0.0000000000 0.0000000000\n" " 57.5633179334 0.4540530344 -0.1903753835 0.0630562214 0.0000000000 -0.0575128029 0.0158200681 0.0000000000 0.0000000000\n" " 21.6195597517 0.2805583500 -0.1820266755 0.0626266086 0.0000000000 -0.1899219376 0.0551163883 0.0000000000 0.0000000000\n" " 8.2917257402 0.0157911511 0.2559566728 -0.0993256380 0.0000000000 -0.3975202657 0.1178364339 0.0000000000 0.0000000000\n" " 3.2044042431 0.0036134328 0.6851219839 -0.4018617372 0.0000000000 -0.4219856265 0.1353291071 0.0000000000 0.0000000000\n" " 1.2170240277 -0.0020726487 0.2416950948 -0.1592676863 0.0000000000 -0.1356765817 -0.1271234105 0.0000000000 0.0000000000\n" " 0.4039700245 0.0008423916 -0.0069738855 0.8175488469 0.0000000000 0.0006566296 -0.5644015152 0.0000000000 1.0000000000\n" " 0.1249906733 -0.0002378905 0.0024023008 0.4114888816 1.0000000000 -0.0009601988 -0.4712031290 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 46364.8344532030 0.0008184364 -0.0002280158 0.0000744063 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7706.7898113396 0.0054783617 -0.0015324266 0.0005015335 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1877.5451692936 0.0262477090 -0.0074240583 0.0024230800 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 545.7287407389 0.1001230552 -0.0294838852 0.0097073844 0.0000000000 -0.0027461074 0.0007848141 0.0000000000 0.0000000000\n" " 177.2908959787 0.2798008585 -0.0918074467 0.0303344403 0.0000000000 -0.0132763202 0.0038538083 0.0000000000 0.0000000000\n" " 62.8967566592 0.4581526631 -0.1981397130 0.0680013180 0.0000000000 -0.0625171637 0.0182320502 0.0000000000 0.0000000000\n" " 23.5441169015 0.2677215656 -0.1777057334 0.0631957627 0.0000000000 -0.2041393264 0.0620073474 0.0000000000 0.0000000000\n" " 9.0326811369 0.0106407066 0.2956230199 -0.1209002135 0.0000000000 -0.4143068471 0.1319770088 0.0000000000 0.0000000000\n" " 3.4989881952 0.0043383301 0.6939360980 -0.4432412739 0.0000000000 -0.4107049745 0.1291981811 0.0000000000 0.0000000000\n" " 1.2944154598 -0.0024408099 0.2012193128 -0.0872175034 0.0000000000 -0.1087289175 -0.1795956787 0.0000000000 0.0000000000\n" " 0.4597935393 0.0010574389 -0.0118044292 0.8393540477 0.0000000000 0.0044892009 -0.5671711751 0.0000000000 1.0000000000\n" " 0.1452937050 -0.0002882406 0.0030417630 0.3658485618 1.0000000000 -0.0015760776 -0.4254457201 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 4 4\n" " 53072.8297062878 0.0007941425 -0.0002240280 0.0000748195 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8898.5866473512 0.0052889972 -0.0014977931 0.0005018392 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2155.9132467432 0.0256852736 -0.0073548393 0.0024566617 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 622.2299227662 0.0989332649 -0.0294812429 0.0099393098 0.0000000000 -0.0027433029 0.0008170301 0.0000000000 0.0000000000\n" " 201.1659177255 0.2786462711 -0.0925348417 0.0313023547 0.0000000000 -0.0134329689 0.0040333465 0.0000000000 0.0000000000\n" " 71.1579472025 0.4592775456 -0.2010213397 0.0707758312 0.0000000000 -0.0636580890 0.0193733027 0.0000000000 0.0000000000\n" " 26.5980018913 0.2694532726 -0.1813760699 0.0661947452 0.0000000000 -0.2085598634 0.0657449676 0.0000000000 0.0000000000\n" " 10.2137137203 0.0105356188 0.3039220653 -0.1287172743 0.0000000000 -0.4214027465 0.1412356088 0.0000000000 0.0000000000\n" " 3.9720621706 0.0044532395 0.7006538383 -0.4686337493 0.0000000000 -0.4060028434 0.1270698508 0.0000000000 0.0000000000\n" " 1.4539972779 -0.0025226750 0.1895810330 -0.0487460947 0.0000000000 -0.0981265591 -0.2131809278 0.0000000000 0.0000000000\n" " 0.5293705047 0.0011246747 -0.0136173212 0.8447511774 0.0000000000 0.0056716141 -0.5665305364 0.0000000000 1.0000000000\n" " 0.1690528118 -0.0003035245 0.0032997478 0.3442490945 1.0000000000 -0.0017347653 -0.3971352648 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" "#","\n" "H DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0039912598 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000\n" " 0.4620756821 -0.2465524925 0.0000000000\n" " 0.1633279056 -0.6895969065 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" "#","\n" "He DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 0 6 2\n" " 204.6501154200 0.0030044482 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000\n" " 0.5990792530 0.4724594508 0.0000000000\n" " 0.1799489287 0.2977187692 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 9 3\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000\n" "#","\n" "Li DZVP-ALL-PADE-NEW\n" " 1\n" " 1 0 1 9 3 2\n" " 1414.6178762780 -0.0007941411 0.0001418239 0.0000000000 0.0000000000 0.0000000000\n" " 212.3358889800 -0.0061171237 0.0010947690 0.0000000000 0.0000000000 0.0000000000\n" " 48.4297216336 -0.0308807676 0.0055808506 0.0000000000 0.0000000000 0.0000000000\n" " 13.7257942708 -0.1130599452 0.0210246402 0.0000000000 0.0000000000 0.0000000000\n" " 4.3982155076 -0.2859257427 0.0578894771 0.0000000000 0.0000000000 0.0000000000\n" " 1.4963572281 -0.4501773541 0.1151205889 0.0000000000 0.0000000000 0.0000000000\n" " 0.5121133007 -0.2748376742 0.1143680207 0.0000000000 0.0000000000 0.0000000000\n" " 0.0746551776 -0.0131827781 -0.5475245168 0.0000000000 1.0000000000 0.0000000000\n" " 0.0269341112 0.0043968126 -0.5468255164 1.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be DZV-ALL-PADE-NEW\n" " 1\n" " 1 0 0 9 3\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000\n" "#","\n" "Be DZVP-ALL-PADE-NEW\n" " 1\n" " 1 0 1 9 3 2\n" " 2838.2104843030 -0.0007019523 0.0001432987 0.0000000000 0.0000000000 0.0000000000\n" " 425.9069835160 -0.0054237190 0.0011215974 0.0000000000 0.0000000000 0.0000000000\n" " 96.6806600316 -0.0277505669 0.0057055932 0.0000000000 0.0000000000 0.0000000000\n" " 27.2706499785 -0.1041047062 0.0225470947 0.0000000000 0.0000000000 0.0000000000\n" " 8.7532305131 -0.2746537186 0.0630242360 0.0000000000 0.0000000000 0.0000000000\n" " 3.0282645637 -0.4478941550 0.1362247299 0.0000000000 0.0000000000 0.0000000000\n" " 1.0653214420 -0.2921373841 0.1257746042 0.0000000000 0.0000000000 0.0000000000\n" " 0.1837410502 -0.0161597639 -0.5389829855 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597629783 0.0044284677 -0.5743277205 1.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 2770.6887201190 -0.0012849920 0.0002815183 0.0000000000 0.0000000000 0.0000000000\n" " 416.0177319883 -0.0098497439 0.0021926254 0.0000000000 0.0000000000 0.0000000000\n" " 94.8894954229 -0.0489833356 0.0108940076 0.0000000000 0.0000000000 0.0000000000\n" " 26.7499548442 -0.1723972150 0.0414450988 0.0000000000 0.0000000000 0.0000000000\n" " 8.4264760790 -0.4017468011 0.1087223068 0.0000000000 -0.0194224027 0.0000000000\n" " 2.8185756685 -0.4396258903 0.1880725583 0.0000000000 -0.0637848437 0.0000000000\n" " 0.8858154287 -0.0939440721 -0.0102057441 0.0000000000 -0.2445403926 0.0000000000\n" " 0.2755692515 0.0087352964 -0.6622781443 0.0000000000 -0.4653071695 0.0000000000\n" " 0.0836350993 -0.0023332765 -0.4345757818 1.0000000000 -0.4454718873 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 4266.1800613820 -0.0011943659 0.0002708392 0.0000000000 0.0000000000 0.0000000000\n" " 642.7602862562 -0.0091221647 0.0021018981 0.0000000000 0.0000000000 0.0000000000\n" " 146.7884267926 -0.0455862664 0.0104909359 0.0000000000 0.0000000000 0.0000000000\n" " 41.2743794968 -0.1645442121 0.0408993451 0.0000000000 0.0000000000 0.0000000000\n" " 12.8905294328 -0.4010362654 0.1123583959 0.0000000000 -0.0207269323 0.0000000000\n" " 4.2578431902 -0.4506526871 0.2000200876 0.0000000000 -0.0735133778 0.0000000000\n" " 1.3307568939 -0.0932928666 -0.0307479826 0.0000000000 -0.2717786632 0.0000000000\n" " 0.4108076579 0.0083827453 -0.6803273620 0.0000000000 -0.4752358588 0.0000000000\n" " 0.1203105299 -0.0021601474 -0.4075981685 1.0000000000 -0.4103141270 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "C DZVP-ALL-PADE-NEW-CONFINED\n" " 2\n" " 1 0 1 9 3 2\n" " 4632.6109261696 -0.0010491808 0.0002461448 0.0000000000 0.0000000000 0.0000000000\n" " 743.7957159823 -0.0073693327 0.0017441253 0.0000000000 0.0000000000 0.0000000000\n" " 176.9921440195 -0.0356124607 0.0084765994 0.0000000000 0.0000000000 0.0000000000\n" " 51.1239838771 -0.1296976533 0.0325377884 0.0000000000 0.0000000000 0.0000000000\n" " 16.3281731915 -0.3377322464 0.0944035645 0.0000000000 -0.0162087526 0.0000000000\n" " 5.5265358443 -0.4718174357 0.1851968433 0.0000000000 -0.0517011722 0.0000000000\n" " 1.8931812532 -0.1789961518 0.0990225545 0.0000000000 -0.2045873835 0.0000000000\n" " 0.6098030227 0.0053187867 -0.4713283667 0.0000000000 -0.4496981983 0.0000000000\n" " 0.2069219808 -0.0024734214 -0.6664084300 1.0000000000 -0.4809024290 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 6241.4478205000 -0.0010992714 0.0002541567 0.0000000000 0.0000000000 0.0000000000\n" " 942.7853221624 -0.0083836502 0.0019685436 0.0000000000 0.0000000000 0.0000000000\n" " 215.1071557533 -0.0422134003 0.0099007497 0.0000000000 0.0000000000 0.0000000000\n" " 60.1999725160 -0.1563225099 0.0394939433 0.0000000000 0.0000000000 0.0000000000\n" " 18.6046423067 -0.3979589501 0.1133930134 0.0000000000 -0.0210878424 0.0000000000\n" " 6.0687801071 -0.4619961627 0.2073232497 0.0000000000 -0.0789077492 0.0000000000\n" " 1.8932165206 -0.0957720636 -0.0376291073 0.0000000000 -0.2857497167 0.0000000000\n" " 0.5794472569 0.0081210319 -0.6849844121 0.0000000000 -0.4787797641 0.0000000000\n" " 0.1652321868 -0.0020517293 -0.4012545190 1.0000000000 -0.3946908536 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 8664.6907364270 -0.0010264289 0.0002401847 0.0000000000 0.0000000000 0.0000000000\n" " 1306.3804630458 -0.0078441700 0.0018629873 0.0000000000 0.0000000000 0.0000000000\n" " 297.9615739412 -0.0396596073 0.0094113620 0.0000000000 0.0000000000 0.0000000000\n" " 83.0732192337 -0.1499468244 0.0382308227 0.0000000000 0.0000000000 0.0000000000\n" " 25.4219803948 -0.3957081736 0.1138918674 0.0000000000 -0.0212313047 0.0000000000\n" " 8.2002946495 -0.4708819153 0.2122924071 0.0000000000 -0.0827974544 0.0000000000\n" " 2.5534670865 -0.0973701955 -0.0419284053 0.0000000000 -0.2949296208 0.0000000000\n" " 0.7764121612 0.0078325892 -0.6868639954 0.0000000000 -0.4802452851 0.0000000000\n" " 0.2169654766 -0.0019439564 -0.3986265721 1.0000000000 -0.3854659989 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 11534.0506179760 -0.0009693137 0.0002286337 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4519019727 -0.0074228862 0.0017758908 0.0000000000 0.0000000000 0.0000000000\n" " 395.6947671892 -0.0376841674 0.0090123001 0.0000000000 0.0000000000 0.0000000000\n" " 109.8950434029 -0.1450177785 0.0371743948 0.0000000000 0.0000000000 0.0000000000\n" " 33.3170603602 -0.3943357740 0.1142516978 0.0000000000 -0.0213060126 0.0000000000\n" " 10.6395997010 -0.4778632959 0.2159190584 0.0000000000 -0.0858798131 0.0000000000\n" " 3.3072015847 -0.0980593066 -0.0454513631 0.0000000000 -0.3015970754 0.0000000000\n" " 1.0004259330 0.0075046051 -0.6878291319 0.0000000000 -0.4808474043 0.0000000000\n" " 0.2751462303 -0.0018293410 -0.3969701556 1.0000000000 -0.3792605287 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 9 3 2\n" " 14852.7741853830 -0.0009235872 0.0002190609 0.0000000000 0.0000000000 0.0000000000\n" " 2234.8237554633 -0.0070802740 0.0017022734 0.0000000000 0.0000000000 0.0000000000\n" " 508.8034771653 -0.0360908407 0.0086781493 0.0000000000 0.0000000000 0.0000000000\n" " 140.7349980722 -0.1411013040 0.0362883902 0.0000000000 0.0000000000 0.0000000000\n" " 42.2868226841 -0.3936017844 0.1145689028 0.0000000000 -0.0213531723 0.0000000000\n" " 13.3814738310 -0.4835123748 0.2187087359 0.0000000000 -0.0884397798 0.0000000000\n" " 4.1527137274 -0.0981106306 -0.0486085731 0.0000000000 -0.3067173307 0.0000000000\n" " 1.2509672859 0.0071501025 -0.6884074486 0.0000000000 -0.4810347809 0.0000000000\n" " 0.3396248365 -0.0017103909 -0.3956395896 1.0000000000 -0.3747659865 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 21394.4924408352 0.0006997970 -0.0001723222 0.0000318328 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 3795.7378701065 0.0042288655 -0.0010411116 0.0001901524 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 985.8138826962 0.0187975202 -0.0046890691 0.0008718578 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 302.7884326942 0.0687646112 -0.0175180517 0.0031871723 0.0000000000 -0.0012633822 0.0000000000 0.0000000000\n" " 103.1219260258 0.1965820685 -0.0542917187 0.0102229243 0.0000000000 -0.0055996166 0.0000000000 0.0000000000\n" " 37.9946819901 0.3853147762 -0.1258294332 0.0229101289 0.0000000000 -0.0260567422 0.0000000000 0.0000000000\n" " 14.7704405101 0.3818197180 -0.1864438254 0.0376735175 0.0000000000 -0.0909943900 0.0000000000 0.0000000000\n" " 5.8005968867 0.0996875920 -0.0067937817 -0.0040418885 0.0000000000 -0.2388788121 0.0000000000 0.0000000000\n" " 2.2568321873 -0.0028473835 0.4371568026 -0.0847080121 0.0000000000 -0.3819119184 0.0000000000 0.0000000000\n" " 0.8574123124 0.0015751503 0.5578917664 -0.2235245000 0.0000000000 -0.3665265555 0.0000000000 0.0000000000\n" " 0.3102401678 -0.0004707246 0.1358955383 0.0003703549 0.0000000000 -0.1521385722 1.0000000000 0.0000000000\n" " 0.0425973682 0.0000637435 -0.0014197920 1.0326168980 1.0000000000 -0.0040572054 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 24563.3509341519 0.0007501763 -0.0001898742 0.0000432716 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4098.7281652598 0.0049866285 -0.0012662269 0.0002886160 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1006.0693449047 0.0236248415 -0.0060608521 0.0013824537 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 296.0583569831 0.0889264612 -0.0236070994 0.0053960194 0.0000000000 -0.0019014218 0.0000000000 0.0000000000\n" " 97.5602425330 0.2498577261 -0.0728218452 0.0167469733 0.0000000000 -0.0091160713 0.0000000000 0.0000000000\n" " 35.0026526821 0.4370249965 -0.1609409689 0.0376024877 0.0000000000 -0.0414328941 0.0000000000 0.0000000000\n" " 13.2894359607 0.3137343310 -0.1793620369 0.0434617096 0.0000000000 -0.1416149186 0.0000000000 0.0000000000\n" " 5.0406635723 0.0348223238 0.1488145108 -0.0386567967 0.0000000000 -0.3285471023 0.0000000000 0.0000000000\n" " 1.8767656586 0.0002090057 0.6227623758 -0.2075293171 0.0000000000 -0.4342370572 0.0000000000 0.0000000000\n" " 0.6740386983 -0.0003911930 0.3832848322 -0.2221884917 0.0000000000 -0.2719424179 0.0000000000 0.0000000000\n" " 0.1488350316 0.0001705201 0.0091106555 0.4513483785 0.0000000000 -0.0274310878 1.0000000000 0.0000000000\n" " 0.0515990826 -0.0000693922 -0.0006594960 0.6960710466 1.0000000000 0.0065925450 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 27551.3038803664 0.0007902356 0.0002051247 -0.0000539950 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4682.7618227118 0.0051091411 0.0013307487 -0.0003509552 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1166.3402011445 0.0238287095 0.0062711660 -0.0016510527 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 346.0032826675 0.0891920482 0.0243060417 -0.0064361456 0.0000000000 -0.0020283510 0.0003943314 0.0000000000\n" " 114.4719182078 0.2502089639 0.0749256824 -0.0198886400 0.0000000000 -0.0096153064 0.0020649970 0.0000000000\n" " 41.1999175687 0.4367661056 0.1656890319 -0.0450859057 0.0000000000 -0.0438990222 0.0086117474 0.0000000000\n" " 15.7012333530 0.3125973574 0.1836095416 -0.0512412586 0.0000000000 -0.1486831836 0.0325680927 0.0000000000\n" " 6.0142665071 0.0345570290 -0.1524355487 0.0448540103 0.0000000000 -0.3395431168 0.0689924793 0.0000000000\n" " 2.2830453817 0.0004891428 -0.6319413645 0.2602793107 0.0000000000 -0.4356046359 0.1128895908 0.0000000000\n" " 0.8490703600 -0.0005055118 -0.3717923282 0.2367424774 0.0000000000 -0.2445346410 -0.0215336434 0.0000000000\n" " 0.1896189412 0.0001917544 -0.0078124700 -0.7037552451 0.0000000000 -0.0176080423 -0.4885175925 0.0000000000\n" " 0.0590458267 -0.0000711837 0.0005957043 -0.4830773513 1.0000000000 0.0038180642 -0.5990452444 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 34205.8807706528 0.0007327188 0.0001943796 -0.0000558389 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5705.2071864975 0.0048710223 0.0012962263 -0.0003727797 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1400.9000355114 0.0230910203 0.0062095461 -0.0017849346 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 411.6831259844 0.0874748743 0.0243401409 -0.0070274320 0.0000000000 -0.0020435691 0.0004608501 0.0000000000\n" " 135.3586299298 0.2480782614 0.0758718633 -0.0220186781 0.0000000000 -0.0098284202 0.0024034582 0.0000000000\n" " 48.5277674751 0.4375690658 0.1694258836 -0.0503252964 0.0000000000 -0.0454264531 0.0103657478 0.0000000000\n" " 18.4574862413 0.3157185815 0.1896317701 -0.0584489572 0.0000000000 -0.1542320032 0.0386846044 0.0000000000\n" " 7.0951187369 0.0349093715 -0.1561350675 0.0519518554 0.0000000000 -0.3498959381 0.0835955571 0.0000000000\n" " 2.7255967144 0.0007868340 -0.6418259851 0.2969196408 0.0000000000 -0.4363611647 0.1290968861 0.0000000000\n" " 1.0416239959 -0.0006880967 -0.3592395770 0.2542270212 0.0000000000 -0.2203688566 -0.0396529577 0.0000000000\n" " 0.2679494348 0.0002658227 -0.0069544727 -0.7342316576 0.0000000000 -0.0131604244 -0.5256989764 0.0000000000\n" " 0.0814723628 -0.0000897664 0.0000537394 -0.4823523926 1.0000000000 0.0021025311 -0.5604030966 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "Si DZVP-ALL-PADE-NEW-CONFINED\n" " 2\n" " 1 0 1 12 4 3\n" " 34205.8807706528 -0.0007250833 -0.0001923205 -0.0000562487 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5862.8987880849 -0.0046320509 -0.0012317373 -0.0003597167 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1469.7841832649 -0.0215037349 -0.0057791418 -0.0016933695 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 437.7710897905 -0.0808773954 -0.0224211779 -0.0065639379 0.0000000000 -0.0018310926 0.0004497923 0.0000000000\n" " 145.2906854908 -0.2311846174 -0.0700642670 -0.0207468988 0.0000000000 -0.0086848321 0.0022634300 0.0000000000\n" " 52.4935101069 -0.4235892976 -0.1594640775 -0.0477647759 0.0000000000 -0.0401672864 0.0099776953 0.0000000000\n" " 20.1350286776 -0.3395538298 -0.1966123125 -0.0622802590 0.0000000000 -0.1384353363 0.0369505072 0.0000000000\n" " 7.7970699880 -0.0514349592 0.1015781624 0.0362142447 0.0000000000 -0.3280724073 0.0855552742 0.0000000000\n" " 3.0126365952 0.0007938866 0.6138991409 0.2684108647 0.0000000000 -0.4389286243 0.1342617724 0.0000000000\n" " 1.1536933283 0.0000152963 0.4217267721 0.3164997698 0.0000000000 -0.2544553578 -0.0014632113 0.0000000000\n" " 0.3215383280 -0.0000675058 0.0171213835 -0.5537569632 0.0000000000 -0.0222713737 -0.4583562382 0.0000000000\n" " 0.1132249636 0.0000282717 -0.0013106938 -0.6608856513 1.0000000000 0.0035467037 -0.6194427763 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 36978.0006282670 -0.0007882716 -0.0002130577 0.0000647974 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 6222.2481694120 -0.0051771150 -0.0014042239 0.0004276889 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1534.4538912185 -0.0244536132 -0.0067044703 0.0020403295 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 450.9238919748 -0.0925205949 -0.0263118610 0.0080502303 0.0000000000 -0.0023114207 0.0005787895 0.0000000000\n" " 147.9232376649 -0.2603320996 -0.0817937127 0.0251613391 0.0000000000 -0.0110744755 0.0029302708 0.0000000000\n" " 52.8962236804 -0.4459248734 -0.1800960112 0.0569273568 0.0000000000 -0.0514807115 0.0130835082 0.0000000000\n" " 20.0317880911 -0.2973279703 -0.1864541939 0.0613716013 0.0000000000 -0.1716941092 0.0469534420 0.0000000000\n" " 7.7131122202 -0.0245287918 0.2031306430 -0.0738571235 0.0000000000 -0.3732355043 0.1006399940 0.0000000000\n" " 2.9844774777 -0.0023042412 0.6642552121 -0.3477214528 0.0000000000 -0.4305581327 0.1364700825 0.0000000000\n" " 1.1549719893 0.0014070660 0.3025676551 -0.2237894266 0.0000000000 -0.1767432863 -0.0764816331 0.0000000000\n" " 0.3417880814 -0.0005342995 0.0006613566 0.7764969105 0.0000000000 -0.0060298501 -0.5504601345 0.0000000000\n" " 0.1040262651 0.0001624777 0.0012215196 0.4569656329 1.0000000000 0.0003271252 -0.5191181650 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 43116.7172343791 0.0007730597 -0.0002123479 0.0000672395 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7082.1673578265 0.0052570195 -0.0014494275 0.0004599971 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1715.6275383850 0.0252958095 -0.0070506620 0.0022334067 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 498.2117432579 0.0966015002 -0.0279836798 0.0089283399 0.0000000000 -0.0025280039 0.0006830870 0.0000000000\n" " 162.0462756704 0.2714940023 -0.0872956329 0.0279726273 0.0000000000 -0.0122585511 0.0034185387 0.0000000000\n" " 57.5633179334 0.4540530344 -0.1903753835 0.0630562214 0.0000000000 -0.0575128029 0.0158200681 0.0000000000\n" " 21.6195597517 0.2805583500 -0.1820266755 0.0626266086 0.0000000000 -0.1899219376 0.0551163883 0.0000000000\n" " 8.2917257402 0.0157911511 0.2559566728 -0.0993256380 0.0000000000 -0.3975202657 0.1178364339 0.0000000000\n" " 3.2044042431 0.0036134328 0.6851219839 -0.4018617372 0.0000000000 -0.4219856265 0.1353291071 0.0000000000\n" " 1.2170240277 -0.0020726487 0.2416950948 -0.1592676863 0.0000000000 -0.1356765817 -0.1271234105 0.0000000000\n" " 0.4039700245 0.0008423916 -0.0069738855 0.8175488469 0.0000000000 0.0006566296 -0.5644015152 0.0000000000\n" " 0.1249906733 -0.0002378905 0.0024023008 0.4114888816 1.0000000000 -0.0009601988 -0.4712031290 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 46364.8344532030 0.0008184364 -0.0002280158 0.0000744063 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7706.7898113396 0.0054783617 -0.0015324266 0.0005015335 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1877.5451692936 0.0262477090 -0.0074240583 0.0024230800 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 545.7287407389 0.1001230552 -0.0294838852 0.0097073844 0.0000000000 -0.0027461074 0.0007848141 0.0000000000\n" " 177.2908959787 0.2798008585 -0.0918074467 0.0303344403 0.0000000000 -0.0132763202 0.0038538083 0.0000000000\n" " 62.8967566592 0.4581526631 -0.1981397130 0.0680013180 0.0000000000 -0.0625171637 0.0182320502 0.0000000000\n" " 23.5441169015 0.2677215656 -0.1777057334 0.0631957627 0.0000000000 -0.2041393264 0.0620073474 0.0000000000\n" " 9.0326811369 0.0106407066 0.2956230199 -0.1209002135 0.0000000000 -0.4143068471 0.1319770088 0.0000000000\n" " 3.4989881952 0.0043383301 0.6939360980 -0.4432412739 0.0000000000 -0.4107049745 0.1291981811 0.0000000000\n" " 1.2944154598 -0.0024408099 0.2012193128 -0.0872175034 0.0000000000 -0.1087289175 -0.1795956787 0.0000000000\n" " 0.4597935393 0.0010574389 -0.0118044292 0.8393540477 0.0000000000 0.0044892009 -0.5671711751 0.0000000000\n" " 0.1452937050 -0.0002882406 0.0030417630 0.3658485618 1.0000000000 -0.0015760776 -0.4254457201 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-ALL-PADE-NEW\n" " 2\n" " 1 0 1 12 4 3\n" " 53072.8297062878 0.0007941425 -0.0002240280 0.0000748195 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8898.5866473512 0.0052889972 -0.0014977931 0.0005018392 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2155.9132467432 0.0256852736 -0.0073548393 0.0024566617 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 622.2299227662 0.0989332649 -0.0294812429 0.0099393098 0.0000000000 -0.0027433029 0.0008170301 0.0000000000\n" " 201.1659177255 0.2786462711 -0.0925348417 0.0313023547 0.0000000000 -0.0134329689 0.0040333465 0.0000000000\n" " 71.1579472025 0.4592775456 -0.2010213397 0.0707758312 0.0000000000 -0.0636580890 0.0193733027 0.0000000000\n" " 26.5980018913 0.2694532726 -0.1813760699 0.0661947452 0.0000000000 -0.2085598634 0.0657449676 0.0000000000\n" " 10.2137137203 0.0105356188 0.3039220653 -0.1287172743 0.0000000000 -0.4214027465 0.1412356088 0.0000000000\n" " 3.9720621706 0.0044532395 0.7006538383 -0.4686337493 0.0000000000 -0.4060028434 0.1270698508 0.0000000000\n" " 1.4539972779 -0.0025226750 0.1895810330 -0.0487460947 0.0000000000 -0.0981265591 -0.2131809278 0.0000000000\n" " 0.5293705047 0.0011246747 -0.0136173212 0.8447511774 0.0000000000 0.0056716141 -0.5665305364 0.0000000000\n" " 0.1690528118 -0.0003035245 0.0032997478 0.3442490945 1.0000000000 -0.0017347653 -0.3971352648 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H TZV-ALL-PADE\n" " 1\n" " 1 0 0 5 3\n" " 47.6766821949 -0.0039912598 0.0000000000 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000 0.0000000000\n" " 0.4620756821 -0.2465524925 1.0000000000 0.0000000000\n" " 0.1633279056 -0.6895969065 0.0000000000 1.0000000000\n" "#","\n" "H TZVP-ALL-PADE\n" " 2\n" " 1 0 0 5 3\n" " 47.6766821949 -0.0039912598 0.0000000000 0.0000000000\n" " 7.2138252786 -0.0254871433 0.0000000000 0.0000000000\n" " 1.6553477814 -0.1498103667 0.0000000000 0.0000000000\n" " 0.4620756821 -0.2465524925 1.0000000000 0.0000000000\n" " 0.1633279056 -0.6895969065 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He TZV-ALL-PADE\n" " 1\n" " 1 0 0 6 3\n" " 204.6501154200 0.0030044482 0.0000000000 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000 0.0000000000\n" " 0.5990792530 0.4724594508 1.0000000000 0.0000000000\n" " 0.1799489287 0.2977187692 0.0000000000 1.0000000000\n" "#","\n" "He TZVP-ALL-PADE\n" " 2\n" " 1 0 0 6 3\n" " 204.6501154200 0.0030044482 0.0000000000 0.0000000000\n" " 31.4140748450 0.0221284099 0.0000000000 0.0000000000\n" " 7.2438462856 0.1007469582 0.0000000000 0.0000000000\n" " 2.0171174742 0.2853415709 0.0000000000 0.0000000000\n" " 0.5990792530 0.4724594508 1.0000000000 0.0000000000\n" " 0.1799489287 0.2977187692 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "B TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 2770.6887201190 -0.0012849920 0.0002815183 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 416.0177319883 -0.0098497439 0.0021926254 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 94.8894954229 -0.0489833356 0.0108940076 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 26.7499548442 -0.1723972150 0.0414450988 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.4264760790 -0.4017468011 0.1087223068 0.0000000000 0.0000000000 -0.0194224027 0.0000000000 0.0000000000\n" " 2.8185756685 -0.4396258903 0.1880725583 0.0000000000 0.0000000000 -0.0637848437 0.0000000000 0.0000000000\n" " 0.8858154287 -0.0939440721 -0.0102057441 0.0000000000 0.0000000000 -0.2445403926 0.0000000000 0.0000000000\n" " 0.2755692515 0.0087352964 -0.6622781443 1.0000000000 0.0000000000 -0.4653071695 1.0000000000 0.0000000000\n" " 0.0836350993 -0.0023332765 -0.4345757818 0.0000000000 1.0000000000 -0.4454718873 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 4266.1800613820 -0.0011943659 0.0002708392 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 642.7602862562 -0.0091221647 0.0021018981 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 146.7884267926 -0.0455862664 0.0104909359 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 41.2743794968 -0.1645442121 0.0408993451 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 12.8905294328 -0.4010362654 0.1123583959 0.0000000000 0.0000000000 -0.0207269323 0.0000000000 0.0000000000\n" " 4.2578431902 -0.4506526871 0.2000200876 0.0000000000 0.0000000000 -0.0735133778 0.0000000000 0.0000000000\n" " 1.3307568939 -0.0932928666 -0.0307479826 0.0000000000 0.0000000000 -0.2717786632 0.0000000000 0.0000000000\n" " 0.4108076579 0.0083827453 -0.6803273620 1.0000000000 0.0000000000 -0.4752358588 1.0000000000 0.0000000000\n" " 0.1203105299 -0.0021601474 -0.4075981685 0.0000000000 1.0000000000 -0.4103141270 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 6241.4478205000 -0.0010992714 0.0002541567 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 942.7853221624 -0.0083836502 0.0019685436 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 215.1071557533 -0.0422134003 0.0099007497 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 60.1999725160 -0.1563225099 0.0394939433 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 18.6046423067 -0.3979589501 0.1133930134 0.0000000000 0.0000000000 -0.0210878424 0.0000000000 0.0000000000\n" " 6.0687801071 -0.4619961627 0.2073232497 0.0000000000 0.0000000000 -0.0789077492 0.0000000000 0.0000000000\n" " 1.8932165206 -0.0957720636 -0.0376291073 0.0000000000 0.0000000000 -0.2857497167 0.0000000000 0.0000000000\n" " 0.5794472569 0.0081210319 -0.6849844121 1.0000000000 0.0000000000 -0.4787797641 1.0000000000 0.0000000000\n" " 0.1652321868 -0.0020517293 -0.4012545190 0.0000000000 1.0000000000 -0.3946908536 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 8664.6907364270 -0.0010264289 0.0002401847 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1306.3804630458 -0.0078441700 0.0018629873 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 297.9615739412 -0.0396596073 0.0094113620 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 83.0732192337 -0.1499468244 0.0382308227 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 25.4219803948 -0.3957081736 0.1138918674 0.0000000000 0.0000000000 -0.0212313047 0.0000000000 0.0000000000\n" " 8.2002946495 -0.4708819153 0.2122924071 0.0000000000 0.0000000000 -0.0827974544 0.0000000000 0.0000000000\n" " 2.5534670865 -0.0973701955 -0.0419284053 0.0000000000 0.0000000000 -0.2949296208 0.0000000000 0.0000000000\n" " 0.7764121612 0.0078325892 -0.6868639954 1.0000000000 0.0000000000 -0.4802452851 1.0000000000 0.0000000000\n" " 0.2169654766 -0.0019439564 -0.3986265721 0.0000000000 1.0000000000 -0.3854659989 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 11534.0506179760 -0.0009693137 0.0002286337 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4519019727 -0.0074228862 0.0017758908 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 395.6947671892 -0.0376841674 0.0090123001 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 109.8950434029 -0.1450177785 0.0371743948 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 33.3170603602 -0.3943357740 0.1142516978 0.0000000000 0.0000000000 -0.0213060126 0.0000000000 0.0000000000\n" " 10.6395997010 -0.4778632959 0.2159190584 0.0000000000 0.0000000000 -0.0858798131 0.0000000000 0.0000000000\n" " 3.3072015847 -0.0980593066 -0.0454513631 0.0000000000 0.0000000000 -0.3015970754 0.0000000000 0.0000000000\n" " 1.0004259330 0.0075046051 -0.6878291319 1.0000000000 0.0000000000 -0.4808474043 1.0000000000 0.0000000000\n" " 0.2751462303 -0.0018293410 -0.3969701556 0.0000000000 1.0000000000 -0.3792605287 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne TZVP-ALL-PADE\n" " 2\n" " 1 0 1 9 4 3\n" " 14852.7741853830 -0.0009235872 0.0002190609 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2234.8237554633 -0.0070802740 0.0017022734 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 508.8034771653 -0.0360908407 0.0086781493 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 140.7349980722 -0.1411013040 0.0362883902 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 42.2868226841 -0.3936017844 0.1145689028 0.0000000000 0.0000000000 -0.0213531723 0.0000000000 0.0000000000\n" " 13.3814738310 -0.4835123748 0.2187087359 0.0000000000 0.0000000000 -0.0884397798 0.0000000000 0.0000000000\n" " 4.1527137274 -0.0981106306 -0.0486085731 0.0000000000 0.0000000000 -0.3067173307 0.0000000000 0.0000000000\n" " 1.2509672859 0.0071501025 -0.6884074486 1.0000000000 0.0000000000 -0.4810347809 1.0000000000 0.0000000000\n" " 0.3396248365 -0.0017103909 -0.3956395896 0.0000000000 1.0000000000 -0.3747659865 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Al TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 27551.3038803664 0.0007902356 0.0002051247 -0.0000539950 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4682.7618227118 0.0051091411 0.0013307487 -0.0003509552 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1166.3402011445 0.0238287095 0.0062711660 -0.0016510527 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 346.0032826675 0.0891920482 0.0243060417 -0.0064361456 0.0000000000 0.0000000000 -0.0020283510 0.0003943314 0.0000000000 0.0000000000\n" " 114.4719182078 0.2502089639 0.0749256824 -0.0198886400 0.0000000000 0.0000000000 -0.0096153064 0.0020649970 0.0000000000 0.0000000000\n" " 41.1999175687 0.4367661056 0.1656890319 -0.0450859057 0.0000000000 0.0000000000 -0.0438990222 0.0086117474 0.0000000000 0.0000000000\n" " 15.7012333530 0.3125973574 0.1836095416 -0.0512412586 0.0000000000 0.0000000000 -0.1486831836 0.0325680927 0.0000000000 0.0000000000\n" " 6.0142665071 0.0345570290 -0.1524355487 0.0448540103 0.0000000000 0.0000000000 -0.3395431168 0.0689924793 0.0000000000 0.0000000000\n" " 2.2830453817 0.0004891428 -0.6319413645 0.2602793107 0.0000000000 0.0000000000 -0.4356046359 0.1128895908 0.0000000000 0.0000000000\n" " 0.8490703600 -0.0005055118 -0.3717923282 0.2367424774 0.0000000000 0.0000000000 -0.2445346410 -0.0215336434 0.0000000000 0.0000000000\n" " 0.1896189412 0.0001917544 -0.0078124700 -0.7037552451 1.0000000000 0.0000000000 -0.0176080423 -0.4885175925 1.0000000000 0.0000000000\n" " 0.0590458267 -0.0000711837 0.0005957043 -0.4830773513 0.0000000000 1.0000000000 0.0038180642 -0.5990452444 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 34205.8807706528 0.0007327188 0.0001943796 -0.0000558389 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5705.2071864975 0.0048710223 0.0012962263 -0.0003727797 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1400.9000355114 0.0230910203 0.0062095461 -0.0017849346 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 411.6831259844 0.0874748743 0.0243401409 -0.0070274320 0.0000000000 0.0000000000 -0.0020435691 0.0004608501 0.0000000000 0.0000000000\n" " 135.3586299298 0.2480782614 0.0758718633 -0.0220186781 0.0000000000 0.0000000000 -0.0098284202 0.0024034582 0.0000000000 0.0000000000\n" " 48.5277674751 0.4375690658 0.1694258836 -0.0503252964 0.0000000000 0.0000000000 -0.0454264531 0.0103657478 0.0000000000 0.0000000000\n" " 18.4574862413 0.3157185815 0.1896317701 -0.0584489572 0.0000000000 0.0000000000 -0.1542320032 0.0386846044 0.0000000000 0.0000000000\n" " 7.0951187369 0.0349093715 -0.1561350675 0.0519518554 0.0000000000 0.0000000000 -0.3498959381 0.0835955571 0.0000000000 0.0000000000\n" " 2.7255967144 0.0007868340 -0.6418259851 0.2969196408 0.0000000000 0.0000000000 -0.4363611647 0.1290968861 0.0000000000 0.0000000000\n" " 1.0416239959 -0.0006880967 -0.3592395770 0.2542270212 0.0000000000 0.0000000000 -0.2203688566 -0.0396529577 0.0000000000 0.0000000000\n" " 0.2679494348 0.0002658227 -0.0069544727 -0.7342316576 1.0000000000 0.0000000000 -0.0131604244 -0.5256989764 1.0000000000 0.0000000000\n" " 0.0814723628 -0.0000897664 0.0000537394 -0.4823523926 0.0000000000 1.0000000000 0.0021025311 -0.5604030966 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 36978.0006282670 -0.0007882716 -0.0002130577 0.0000647974 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 6222.2481694120 -0.0051771150 -0.0014042239 0.0004276889 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1534.4538912185 -0.0244536132 -0.0067044703 0.0020403295 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 450.9238919748 -0.0925205949 -0.0263118610 0.0080502303 0.0000000000 0.0000000000 -0.0023114207 0.0005787895 0.0000000000 0.0000000000\n" " 147.9232376649 -0.2603320996 -0.0817937127 0.0251613391 0.0000000000 0.0000000000 -0.0110744755 0.0029302708 0.0000000000 0.0000000000\n" " 52.8962236804 -0.4459248734 -0.1800960112 0.0569273568 0.0000000000 0.0000000000 -0.0514807115 0.0130835082 0.0000000000 0.0000000000\n" " 20.0317880911 -0.2973279703 -0.1864541939 0.0613716013 0.0000000000 0.0000000000 -0.1716941092 0.0469534420 0.0000000000 0.0000000000\n" " 7.7131122202 -0.0245287918 0.2031306430 -0.0738571235 0.0000000000 0.0000000000 -0.3732355043 0.1006399940 0.0000000000 0.0000000000\n" " 2.9844774777 -0.0023042412 0.6642552121 -0.3477214528 0.0000000000 0.0000000000 -0.4305581327 0.1364700825 0.0000000000 0.0000000000\n" " 1.1549719893 0.0014070660 0.3025676551 -0.2237894266 0.0000000000 0.0000000000 -0.1767432863 -0.0764816331 0.0000000000 0.0000000000\n" " 0.3417880814 -0.0005342995 0.0006613566 0.7764969105 1.0000000000 0.0000000000 -0.0060298501 -0.5504601345 1.0000000000 0.0000000000\n" " 0.1040262651 0.0001624777 0.0012215196 0.4569656329 0.0000000000 1.0000000000 0.0003271252 -0.5191181650 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 43116.7172343791 0.0007730597 -0.0002123479 0.0000672395 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7082.1673578265 0.0052570195 -0.0014494275 0.0004599971 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1715.6275383850 0.0252958095 -0.0070506620 0.0022334067 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 498.2117432579 0.0966015002 -0.0279836798 0.0089283399 0.0000000000 0.0000000000 -0.0025280039 0.0006830870 0.0000000000 0.0000000000\n" " 162.0462756704 0.2714940023 -0.0872956329 0.0279726273 0.0000000000 0.0000000000 -0.0122585511 0.0034185387 0.0000000000 0.0000000000\n" " 57.5633179334 0.4540530344 -0.1903753835 0.0630562214 0.0000000000 0.0000000000 -0.0575128029 0.0158200681 0.0000000000 0.0000000000\n" " 21.6195597517 0.2805583500 -0.1820266755 0.0626266086 0.0000000000 0.0000000000 -0.1899219376 0.0551163883 0.0000000000 0.0000000000\n" " 8.2917257402 0.0157911511 0.2559566728 -0.0993256380 0.0000000000 0.0000000000 -0.3975202657 0.1178364339 0.0000000000 0.0000000000\n" " 3.2044042431 0.0036134328 0.6851219839 -0.4018617372 0.0000000000 0.0000000000 -0.4219856265 0.1353291071 0.0000000000 0.0000000000\n" " 1.2170240277 -0.0020726487 0.2416950948 -0.1592676863 0.0000000000 0.0000000000 -0.1356765817 -0.1271234105 0.0000000000 0.0000000000\n" " 0.4039700245 0.0008423916 -0.0069738855 0.8175488469 1.0000000000 0.0000000000 0.0006566296 -0.5644015152 1.0000000000 0.0000000000\n" " 0.1249906733 -0.0002378905 0.0024023008 0.4114888816 0.0000000000 1.0000000000 -0.0009601988 -0.4712031290 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 46364.8344532030 0.0008184364 -0.0002280158 0.0000744063 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 7706.7898113396 0.0054783617 -0.0015324266 0.0005015335 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1877.5451692936 0.0262477090 -0.0074240583 0.0024230800 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 545.7287407389 0.1001230552 -0.0294838852 0.0097073844 0.0000000000 0.0000000000 -0.0027461074 0.0007848141 0.0000000000 0.0000000000\n" " 177.2908959787 0.2798008585 -0.0918074467 0.0303344403 0.0000000000 0.0000000000 -0.0132763202 0.0038538083 0.0000000000 0.0000000000\n" " 62.8967566592 0.4581526631 -0.1981397130 0.0680013180 0.0000000000 0.0000000000 -0.0625171637 0.0182320502 0.0000000000 0.0000000000\n" " 23.5441169015 0.2677215656 -0.1777057334 0.0631957627 0.0000000000 0.0000000000 -0.2041393264 0.0620073474 0.0000000000 0.0000000000\n" " 9.0326811369 0.0106407066 0.2956230199 -0.1209002135 0.0000000000 0.0000000000 -0.4143068471 0.1319770088 0.0000000000 0.0000000000\n" " 3.4989881952 0.0043383301 0.6939360980 -0.4432412739 0.0000000000 0.0000000000 -0.4107049745 0.1291981811 0.0000000000 0.0000000000\n" " 1.2944154598 -0.0024408099 0.2012193128 -0.0872175034 0.0000000000 0.0000000000 -0.1087289175 -0.1795956787 0.0000000000 0.0000000000\n" " 0.4597935393 0.0010574389 -0.0118044292 0.8393540477 1.0000000000 0.0000000000 0.0044892009 -0.5671711751 1.0000000000 0.0000000000\n" " 0.1452937050 -0.0002882406 0.0030417630 0.3658485618 0.0000000000 1.0000000000 -0.0015760776 -0.4254457201 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar TZVP-ALL-PADE\n" " 2\n" " 1 0 1 12 5 4\n" " 53072.8297062878 0.0007941425 -0.0002240280 0.0000748195 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8898.5866473512 0.0052889972 -0.0014977931 0.0005018392 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2155.9132467432 0.0256852736 -0.0073548393 0.0024566617 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 622.2299227662 0.0989332649 -0.0294812429 0.0099393098 0.0000000000 0.0000000000 -0.0027433029 0.0008170301 0.0000000000 0.0000000000\n" " 201.1659177255 0.2786462711 -0.0925348417 0.0313023547 0.0000000000 0.0000000000 -0.0134329689 0.0040333465 0.0000000000 0.0000000000\n" " 71.1579472025 0.4592775456 -0.2010213397 0.0707758312 0.0000000000 0.0000000000 -0.0636580890 0.0193733027 0.0000000000 0.0000000000\n" " 26.5980018913 0.2694532726 -0.1813760699 0.0661947452 0.0000000000 0.0000000000 -0.2085598634 0.0657449676 0.0000000000 0.0000000000\n" " 10.2137137203 0.0105356188 0.3039220653 -0.1287172743 0.0000000000 0.0000000000 -0.4214027465 0.1412356088 0.0000000000 0.0000000000\n" " 3.9720621706 0.0044532395 0.7006538383 -0.4686337493 0.0000000000 0.0000000000 -0.4060028434 0.1270698508 0.0000000000 0.0000000000\n" " 1.4539972779 -0.0025226750 0.1895810330 -0.0487460947 0.0000000000 0.0000000000 -0.0981265591 -0.2131809278 0.0000000000 0.0000000000\n" " 0.5293705047 0.0011246747 -0.0136173212 0.8447511774 1.0000000000 0.0000000000 0.0056716141 -0.5665305364 1.0000000000 0.0000000000\n" " 0.1690528118 -0.0003035245 0.0032997478 0.3442490945 0.0000000000 1.0000000000 -0.0017347653 -0.3971352648 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H DZV-ALL-BLYP\n" " 1\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0043584463 0.0000000000\n" " 7.2138252786 -0.0280413054 0.0000000000\n" " 1.6553477814 -0.1607911988 0.0000000000\n" " 0.4620756821 -0.2616974130 0.0000000000\n" " 0.1633279056 -0.6663250351 1.0000000000\n" "#","\n" "H DZVP-ALL-BLYP\n" " 2\n" " 1 0 0 5 2\n" " 47.6766821949 -0.0043584463 0.0000000000\n" " 7.2138252786 -0.0280413054 0.0000000000\n" " 1.6553477814 -0.1607911988 0.0000000000\n" " 0.4620756821 -0.2616974130 0.0000000000\n" " 0.1633279056 -0.6663250351 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O TZVP-ALL-BLYP\n" " 2\n" " 1 0 1 9 4 3\n" " 8664.6907364270 -0.0010398418 0.0002426467 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1304.2944310248 -0.0079828203 0.0018962898 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 295.9693605095 -0.0406371136 0.0096067682 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 82.2047238380 -0.1536198678 0.0392806838 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 25.1299697483 -0.4014912128 0.1153729549 0.0000000000 0.0000000000 -0.0218982495 0.0000000000 0.0000000000\n" " 8.1128473457 -0.4659531883 0.2128198124 0.0000000000 0.0000000000 -0.0836678585 0.0000000000 0.0000000000\n" " 2.5105499839 -0.0915561133 -0.0513764869 0.0000000000 0.0000000000 -0.2995070193 0.0000000000 0.0000000000\n" " 0.7657968411 0.0075189734 -0.7008547943 1.0000000000 0.0000000000 -0.4814704278 1.0000000000 0.0000000000\n" " 0.2109431242 -0.0018090393 -0.3792651362 0.0000000000 1.0000000000 -0.3804918653 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F TZVP-ALL-BLYP\n" " 2\n" " 1 0 1 9 4 3\n" " 11534.0506179760 -0.0009798237 0.0002305539 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1736.4518540745 -0.0075252319 0.0018012871 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 393.7045510622 -0.0384982409 0.0091753398 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 108.8690799446 -0.1483161618 0.0381319658 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 32.9489612499 -0.4001274801 0.1157679180 0.0000000000 0.0000000000 -0.0219498202 0.0000000000 0.0000000000\n" " 10.5255415538 -0.4733020735 0.2166396110 0.0000000000 0.0000000000 -0.0867958235 0.0000000000 0.0000000000\n" " 3.2533274751 -0.0924284355 -0.0553420468 0.0000000000 0.0000000000 -0.3063025367 0.0000000000 0.0000000000\n" " 0.9849075495 0.0071803551 -0.7013315907 1.0000000000 0.0000000000 -0.4827220806 1.0000000000 0.0000000000\n" " 0.2674718721 -0.0017014451 -0.3775933468 0.0000000000 1.0000000000 -0.3732467322 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "H 6-31G*\n" " 2\n" " 1 0 0 3 1\n" " 18.7311369600 0.0334946043\n" " 2.8253943650 0.2347269535\n" " 0.6401216923 0.8137573262\n" " 2 0 0 1 1\n" " 0.1612777588 1.0000000000\n" "#","\n" "He 6-31G*\n" " 2\n" " 1 0 0 3 1\n" " 38.4216340000 0.0237660000\n" " 5.7780300000 0.1546790000\n" " 1.2417740000 0.4696300000\n" " 2 0 0 1 1\n" " 0.2979640000 1.0000000000\n" "#","\n" "Li 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 642.4189150000 0.0021426078\n" " 96.7985153000 0.0162088715\n" " 22.0911212000 0.0773155725\n" " 6.2010702500 0.2457860520\n" " 1.9351176800 0.4701890040\n" " 0.6367357890 0.3454708450\n" " 2 0 1 3 1 1\n" " 2.3249184080 -0.0350917459 0.0089415080\n" " 0.6324303556 -0.1912328440 0.1410094640\n" " 0.0790534347 1.0839878000 0.9453636950\n" " 3 0 1 1 1 1\n" " 0.0359619718 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2000000000 1.0000000000\n" "#","\n" "Be 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 1264.5856900000 0.0019447576\n" " 189.9368060000 0.0148350520\n" " 43.1590890000 0.0720905463\n" " 12.0986627000 0.2371541500\n" " 3.8063232200 0.4691986520\n" " 1.2728903000 0.3565202280\n" " 2 0 1 3 1 1\n" " 3.1964630980 -0.1126487290 0.0559801998\n" " 0.7478133038 -0.2295064090 0.2615506110\n" " 0.2199663302 1.1869167700 0.7939723390\n" " 3 0 1 1 1 1\n" " 0.0823099007 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "B 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 2068.8822500000 0.0018662746\n" " 310.6495700000 0.0142514817\n" " 70.6830330000 0.0695516185\n" " 19.8610803000 0.2325729330\n" " 6.2993048400 0.4670787120\n" " 2.1270269700 0.3634314400\n" " 2 0 1 3 1 1\n" " 4.7279710710 -0.1303937970 0.0745975799\n" " 1.1903377360 -0.1307889510 0.3078466770\n" " 0.3594116829 1.1309444800 0.7434568340\n" " 3 0 1 1 1 1\n" " 0.1267512469 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "C 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 3047.5248800000 0.0018347371\n" " 457.3695180000 0.0140373228\n" " 103.9486850000 0.0688426222\n" " 29.2101553000 0.2321844430\n" " 9.2866629600 0.4679413480\n" " 3.1639269600 0.3623119850\n" " 2 0 1 3 1 1\n" " 7.8682723500 -0.1193324200 0.0689990666\n" " 1.8812885400 -0.1608541520 0.3164239610\n" " 0.5442492580 1.1434564400 0.7443082910\n" " 3 0 1 1 1 1\n" " 0.1687144782 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "N 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 4173.5114600000 0.0018347722\n" " 627.4579110000 0.0139946270\n" " 142.9020930000 0.0685865518\n" " 40.2343293000 0.2322408730\n" " 12.8202129000 0.4690699480\n" " 4.3904370100 0.3604551990\n" " 2 0 1 3 1 1\n" " 11.6263618600 -0.1149611820 0.0675797439\n" " 2.7162798070 -0.1691174790 0.3239072960\n" " 0.7722183966 1.1458519500 0.7408951400\n" " 3 0 1 1 1 1\n" " 0.2120314975 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 5484.6716600000 0.0018310744\n" " 825.2349460000 0.0139501722\n" " 188.0469580000 0.0684450781\n" " 52.9645000000 0.2327143360\n" " 16.8975704000 0.4701928980\n" " 5.7996353400 0.3585208530\n" " 2 0 1 3 1 1\n" " 15.5396162500 -0.1107775490 0.0708742682\n" " 3.5999335860 -0.1480262620 0.3397528390\n" " 1.0137617500 1.1307670100 0.7271585770\n" " 3 0 1 1 1 1\n" " 0.2700058226 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 7001.7130900000 0.0018196169\n" " 1051.3660900000 0.0139160796\n" " 239.2856900000 0.0684053245\n" " 67.3974453000 0.2331857600\n" " 21.5199573000 0.4712674390\n" " 7.4031013000 0.3566185460\n" " 2 0 1 3 1 1\n" " 20.8479528000 -0.1085069750 0.0716287243\n" " 4.8083083400 -0.1464516580 0.3459121030\n" " 1.3440698600 1.1286885800 0.7224699570\n" " 3 0 1 1 1 1\n" " 0.3581513930 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "Ne 6-31G*\n" " 4\n" " 1 0 0 6 1\n" " 8425.8515300000 0.0018843480\n" " 1268.5194000000 0.0143368994\n" " 289.6214140000 0.0701096233\n" " 81.8590040000 0.2373732660\n" " 26.2515079000 0.4730071260\n" " 9.0947205100 0.3484012410\n" " 2 0 1 3 1 1\n" " 26.5321310000 -0.1071182870 0.0719095885\n" " 6.1017550100 -0.1461638210 0.3495133720\n" " 1.6962715300 1.1277735000 0.7199405120\n" " 3 0 1 1 1 1\n" " 0.4458187000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "Na 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 9993.2000000000 0.0019376600\n" " 1499.8900000000 0.0148070000\n" " 341.9510000000 0.0727055000\n" " 94.6796000000 0.2526290000\n" " 29.7345000000 0.4932420000\n" " 10.0063000000 0.3131690000\n" " 2 0 1 6 1 1\n" " 150.9630000000 -0.0035420800 0.0050016600\n" " 35.5878000000 -0.0439588000 0.0355109000\n" " 11.1683000000 -0.1097520000 0.1428250000\n" " 3.9020100000 0.1873980000 0.3386200000\n" " 1.3817700000 0.6466990000 0.4515790000\n" " 0.4663820000 0.3060580000 0.2732710000\n" " 3 0 1 3 1 1\n" " 0.4979660000 -0.2485030000 -0.0230225000\n" " 0.0843529000 -0.1317040000 0.9503590000\n" " 0.0666350000 1.2335200000 0.0598579000\n" " 4 0 1 1 1 1\n" " 0.0259544000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1750000000 1.0000000000\n" "#","\n" "Mg 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 11722.8000000000 0.0019778300\n" " 1759.9300000000 0.0151140000\n" " 400.8460000000 0.0739108000\n" " 112.8070000000 0.2491910000\n" " 35.9997000000 0.4879280000\n" " 12.1828000000 0.3196620000\n" " 2 0 1 6 1 1\n" " 189.1800000000 -0.0032371700 0.0049281300\n" " 45.2119000000 -0.0410079000 0.0349888000\n" " 14.3563000000 -0.1126000000 0.1407250000\n" " 5.1388600000 0.1486330000 0.3336420000\n" " 1.9065200000 0.6164970000 0.4449400000\n" " 0.7058870000 0.3648290000 0.2692540000\n" " 3 0 1 3 1 1\n" " 0.9293400000 -0.2122900000 -0.0224192000\n" " 0.2690350000 -0.1079850000 0.1922710000\n" " 0.1173790000 1.1758400000 0.8461810000\n" " 4 0 1 1 1 1\n" " 0.0421061000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1750000000 1.0000000000\n" "#","\n" "Al 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 13983.1000000000 0.0019426700\n" " 2098.7500000000 0.0148599000\n" " 477.7050000000 0.0728494000\n" " 134.3600000000 0.2468300000\n" " 42.8709000000 0.4872580000\n" " 14.5189000000 0.3234960000\n" " 2 0 1 6 1 1\n" " 239.6680000000 -0.0029261900 0.0046028500\n" " 57.4419000000 -0.0374083000 0.0331990000\n" " 18.2859000000 -0.1144870000 0.1362820000\n" " 6.5991400000 0.1156350000 0.3304760000\n" " 2.4904900000 0.6125950000 0.4491460000\n" " 0.9445450000 0.3937990000 0.2657040000\n" " 3 0 1 3 1 1\n" " 1.2779000000 -0.2276060000 -0.0175126000\n" " 0.3975900000 0.0014458300 0.2445330000\n" " 0.1600950000 1.0927900000 0.8049340000\n" " 4 0 1 1 1 1\n" " 0.0556577000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3250000000 1.0000000000\n" "#","\n" "Si 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 16115.9000000000 0.0019594800\n" " 2425.5800000000 0.0149288000\n" " 553.8670000000 0.0728478000\n" " 156.3400000000 0.2461300000\n" " 50.0683000000 0.4859140000\n" " 17.0178000000 0.3250020000\n" " 2 0 1 6 1 1\n" " 292.7180000000 -0.0027809400 0.0044382600\n" " 69.8731000000 -0.0357146000 0.0326679000\n" " 22.3363000000 -0.1149850000 0.1347210000\n" " 8.1503900000 0.0935634000 0.3286780000\n" " 3.1345800000 0.6030170000 0.4496400000\n" " 1.2254300000 0.4189590000 0.2613720000\n" " 3 0 1 3 1 1\n" " 1.7273800000 -0.2446300000 -0.0177951000\n" " 0.5729220000 0.0043157200 0.2535390000\n" " 0.2221920000 1.0981800000 0.8006690000\n" " 4 0 1 1 1 1\n" " 0.0778369000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 19413.3000000000 0.0018516000\n" " 2909.4200000000 0.0142062000\n" " 661.3640000000 0.0699995000\n" " 185.7590000000 0.2400790000\n" " 59.1943000000 0.4847620000\n" " 20.0310000000 0.3352000000\n" " 2 0 1 6 1 1\n" " 339.4780000000 -0.0027821700 0.0045646200\n" " 81.0101000000 -0.0360499000 0.0336936000\n" " 25.8780000000 -0.1166310000 0.1397550000\n" " 9.4522100000 0.0968328000 0.3393620000\n" " 3.6656600000 0.6144180000 0.4509210000\n" " 1.4674600000 0.4037980000 0.2385860000\n" " 3 0 1 3 1 1\n" " 2.1562300000 -0.2529230000 -0.0177653000\n" " 0.7489970000 0.0328517000 0.2740580000\n" " 0.2831450000 1.0812500000 0.7854210000\n" " 4 0 1 1 1 1\n" " 0.0998317000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 21917.1000000000 0.0018692400\n" " 3301.4900000000 0.0142303000\n" " 754.1460000000 0.0696962000\n" " 212.7110000000 0.2384870000\n" " 67.9896000000 0.4833070000\n" " 23.0515000000 0.3380740000\n" " 2 0 1 6 1 1\n" " 423.7350000000 -0.0023767700 0.0040610100\n" " 100.7100000000 -0.0316930000 0.0306813000\n" " 32.1599000000 -0.1133170000 0.1304520000\n" " 11.8079000000 0.0560900000 0.3272050000\n" " 4.6311000000 0.5922550000 0.4528510000\n" " 1.8702500000 0.4550060000 0.2560420000\n" " 3 0 1 3 1 1\n" " 2.6158400000 -0.2503740000 -0.0145105000\n" " 0.9221670000 0.0669570000 0.3102630000\n" " 0.3412870000 1.0545100000 0.7544830000\n" " 4 0 1 1 1 1\n" " 0.1171670000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 25180.1000000000 0.0018329600\n" " 3780.3500000000 0.0140342000\n" " 860.4740000000 0.0690974000\n" " 242.1450000000 0.2374520000\n" " 77.3349000000 0.4830340000\n" " 26.2470000000 0.3398560000\n" " 2 0 1 6 1 1\n" " 491.7650000000 -0.0022973900 0.0039894000\n" " 116.9840000000 -0.0307137000 0.0303177000\n" " 37.4153000000 -0.1125280000 0.1298800000\n" " 13.7834000000 0.0450163000 0.3279510000\n" " 5.4521500000 0.5893530000 0.4535270000\n" " 2.2258800000 0.4652060000 0.2521540000\n" " 3 0 1 3 1 1\n" " 3.1864900000 -0.2518270000 -0.0142993000\n" " 1.1442700000 0.0615890000 0.3235720000\n" " 0.4203770000 1.0601800000 0.7435070000\n" " 4 0 1 1 1 1\n" " 0.1426570000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar 6-31G*\n" " 5\n" " 1 0 0 6 1\n" " 28348.3000000000 0.0018252600\n" " 4257.6200000000 0.0139686000\n" " 969.8570000000 0.0687073000\n" " 273.2630000000 0.2362040000\n" " 87.3695000000 0.4822140000\n" " 29.6867000000 0.3420430000\n" " 2 0 1 6 1 1\n" " 575.8910000000 -0.0021597200 0.0038066500\n" " 136.8160000000 -0.0290775000 0.0292305000\n" " 43.8098000000 -0.1108270000 0.1264670000\n" " 16.2094000000 0.0276999000 0.3235100000\n" " 6.4608400000 0.5776130000 0.4548960000\n" " 2.6511400000 0.4886880000 0.2566300000\n" " 3 0 1 3 1 1\n" " 3.8602800000 -0.2555920000 -0.0159197000\n" " 1.4137300000 0.0378066000 0.3246460000\n" " 0.5166460000 1.0805600000 0.7439900000\n" " 4 0 1 1 1 1\n" " 0.1738880000 1.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "H SZV-GTH-PADE\n" " 1\n" " 1 0 0 4 1\n" " 8.3744350009 -0.0238943732\n" " 1.8058681460 -0.1397943259\n" " 0.4852531032 -0.2530970874\n" " 0.1658235797 -0.6955307423\n" "#","\n" "H DZV-GTH-PADE\n" " 1\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0238943732 0.0000000000\n" " 1.8058681460 -0.1397943259 0.0000000000\n" " 0.4852531032 -0.2530970874 0.0000000000\n" " 0.1658235797 -0.6955307423 1.0000000000\n" "#","\n" "H DZV-GTH-PADE-CONFINED\n" " 1\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380594 0.0000000000\n" " 1.8058681460 -0.1333808815 0.0000000000\n" " 0.4852531032 -0.3995678166 0.0000000000\n" " 0.1658235797 -0.5531027153 1.0000000000\n" "#","\n" "H DZVP-GTH-PADE\n" " 2\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0238943732 0.0000000000\n" " 1.8058681460 -0.1397943259 0.0000000000\n" " 0.4852531032 -0.2530970874 0.0000000000\n" " 0.1658235797 -0.6955307423 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "H DZVP-GTH-PADE-CONFINED\n" " 2\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380594 0.0000000000\n" " 1.8058681460 -0.1333808815 0.0000000000\n" " 0.4852531032 -0.3995678166 0.0000000000\n" " 0.1658235797 -0.5531027153 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "H MAO-PRIM\n" " 2\n" " 1 0 0 4 4\n" " 8.3744350009 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.8058681460 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4852531032 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1658235797 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-GTH-PADE\n" " 1\n" " 1 0 0 4 2\n" " 10.9449874915 -0.0753847695 0.0000000000\n" " 2.7220103814 -0.2478759473 0.0000000000\n" " 0.7380855468 -0.4844314598 0.0000000000\n" " 0.2044485380 -0.3633328585 1.0000000000\n" "#","\n" "He DZVP-GTH-PADE\n" " 2\n" " 1 0 0 4 2\n" " 10.9449874915 -0.0753847695 0.0000000000\n" " 2.7220103814 -0.2478759473 0.0000000000\n" " 0.7380855468 -0.4844314598 0.0000000000\n" " 0.2044485380 -0.3633328585 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-GTH-PADE\n" " 1\n" " 1 0 0 6 3\n" " 9.0645724591 0.1412707699 -0.0257336579 0.0000000000\n" " 4.3479418841 0.2767295609 -0.0520596034 0.0000000000\n" " 1.4344377059 0.4501408198 -0.1264254986 0.0000000000\n" " 0.4969595308 0.2616803664 -0.1023799272 0.0000000000\n" " 0.0729934685 0.0116600998 0.5635942604 0.0000000000\n" " 0.0264321968 -0.0038582262 0.5289910438 1.0000000000\n" "#","\n" "Li DZVP-GTH-PADE\n" " 1\n" " 1 0 1 6 3 3\n" " 9.0645724591 0.1412707699 -0.0257336579 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3479418841 0.2767295609 -0.0520596034 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4344377059 0.4501408198 -0.1264254986 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.4969595308 0.2616803664 -0.1023799272 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0729934685 0.0116600998 0.5635942604 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0264321968 -0.0038582262 0.5289910438 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be DZV-GTH-PADE\n" " 1\n" " 1 0 0 6 3\n" " 16.1605993866 0.1059191045 -0.0252247893 0.0000000000\n" " 8.2781849385 0.3141963412 -0.0592178229 0.0000000000\n" " 2.7429504166 0.4327229195 -0.1590666667 0.0000000000\n" " 1.0050808492 0.2646169070 -0.0970095401 0.0000000000\n" " 0.1765058796 0.0128470696 0.5606449178 0.0000000000\n" " 0.0580428345 -0.0034490257 0.5479193518 1.0000000000\n" "#","\n" "Be DZVP-GTH-PADE\n" " 1\n" " 1 0 1 6 3 3\n" " 16.1605993866 0.1059191045 -0.0252247893 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.2781849385 0.3141963412 -0.0592178229 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.7429504166 0.4327229195 -0.1590666667 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0050808492 0.2646169070 -0.0970095401 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1765058796 0.0128470696 0.5606449178 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0580428345 -0.0034490257 0.5479193518 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 2.8854072190 0.1420734374 0.0000000000 -0.0759818266 0.0000000000\n" " 0.8566811318 -0.0083272998 0.0000000000 -0.2508295957 0.0000000000\n" " 0.2712977126 -0.6707128588 0.0000000000 -0.4610302659 0.0000000000\n" " 0.0826097889 -0.4241240913 1.0000000000 -0.4419902640 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 4.3362505404 0.1490793580 -0.0878122158\n" " 1.2881820646 -0.0292634544 -0.2775568334\n" " 0.4037764944 -0.6882043984 -0.4712287175\n" " 0.1187878168 -0.3964423560 -0.4058040746\n" "#","\n" "C DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3362505404 0.1490793580 0.0000000000 -0.0878122158 0.0000000000\n" " 1.2881820646 -0.0292634544 0.0000000000 -0.2775568334 0.0000000000\n" " 0.4037764944 -0.6882043984 0.0000000000 -0.4712287175 0.0000000000\n" " 0.1187878168 -0.3964423560 1.0000000000 -0.4058040746 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "C DZVP-GTH-PADE-CONFINED\n" " 2\n" " 2 0 1 4 2 2\n" " 4.9036932712 0.1231402806 0.0000000000 -0.0710058771 0.0000000000\n" " 1.6574324667 0.0678620439 0.0000000000 -0.2265440401 0.0000000000\n" " 0.5592463507 -0.5108450721 0.0000000000 -0.4459711159 0.0000000000\n" " 0.1992045030 -0.6156990839 1.0000000000 -0.4501432808 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 6.1527081270 0.1506293354 -0.0950596846\n" " 1.8236453987 -0.0360069142 -0.2918844594\n" " 0.5676671941 -0.6942003416 -0.4739047963\n" " 0.1628232875 -0.3878973877 -0.3893444095\n" "#","\n" "N DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1527081270 0.1506293354 0.0000000000 -0.0950596846 0.0000000000\n" " 1.8236453987 -0.0360069142 0.0000000000 -0.2918844594 0.0000000000\n" " 0.5676671941 -0.6942003416 0.0000000000 -0.4739047963 0.0000000000\n" " 0.1628232875 -0.3878973877 1.0000000000 -0.3893444095 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 8.3044042305 0.1510163077 -0.0995678047\n" " 2.4579452461 -0.0393193874 -0.3011430914\n" " 0.7597363524 -0.6971729792 -0.4750852730\n" " 0.2136387585 -0.3841125601 -0.3798775565\n" "#","\n" "O DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 8.3044042305 0.1510163077 0.0000000000 -0.0995678047 0.0000000000\n" " 2.4579452461 -0.0393193874 0.0000000000 -0.3011430914 0.0000000000\n" " 0.7597363524 -0.6971729792 0.0000000000 -0.4750852730 0.0000000000\n" " 0.2136387585 -0.3841125601 1.0000000000 -0.3798775565 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O MAO-PRIM\n" " 3\n" " 1 0 0 4 4\n" " 8.3044042305 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.4579452461 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.7597363524 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2136387585 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 4 4\n" " 8.3044042305 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.4579452461 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.7597363524 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2136387585 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O DZVP-GTH-PADE-CONFINED\n" " 2\n" " 2 0 1 4 2 2\n" " 8.8580368553 0.1363369629 0.0000000000 -0.0886958138 0.0000000000\n" " 2.7922584694 0.0206593813 0.0000000000 -0.2694541227 0.0000000000\n" " 0.9068691246 -0.6094274296 0.0000000000 -0.4594270880 0.0000000000\n" " 0.2872216831 -0.5022915093 1.0000000000 -0.4103120494 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 10.7079864789 0.1525178335 -0.1028649155\n" " 3.1757211287 -0.0450362306 -0.3085266108\n" " 0.9750975998 -0.6987425203 -0.4757649137\n" " 0.2701247513 -0.3801470840 -0.3724955108\n" "#","\n" "F DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 10.7079864789 0.1525178335 0.0000000000 -0.1028649155 0.0000000000\n" " 3.1757211287 -0.0450362306 0.0000000000 -0.3085266108 0.0000000000\n" " 0.9750975998 -0.6987425203 0.0000000000 -0.4757649137 0.0000000000\n" " 0.2701247513 -0.3801470840 1.0000000000 -0.3724955108 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne SZV-GTH-PADE\n" " 1\n" " 2 0 1 4 1 1\n" " 13.7594457910 0.1483426269 -0.1044040672\n" " 4.0425314051 -0.0356303947 -0.3108896070\n" " 1.2355194419 -0.7010725739 -0.4760215931\n" " 0.3367033579 -0.3841124763 -0.3721573833\n" "#","\n" "Ne DZVP-GTH-PADE\n" " 2\n" " 2 0 1 4 2 2\n" " 13.7594457910 0.1483426269 0.0000000000 -0.1044040672 0.0000000000\n" " 4.0425314051 -0.0356303947 0.0000000000 -0.3108896070 0.0000000000\n" " 1.2355194419 -0.7010725739 0.0000000000 -0.4760215931 0.0000000000\n" " 0.3367033579 -0.3841124763 1.0000000000 -0.3721573833 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na SZV-GTH-PADE\n" " 1\n" " 2 0 1 6 2 1\n" " 17.6699685720 -0.1362341108 0.0270952595 0.0791962955\n" " 6.9071803380 -0.0645881804 0.0098743015 0.2184099565\n" " 2.6099085380 0.3866064317 -0.0737148250 0.3764868181\n" " 0.9649711690 0.5971408467 -0.2186736173 0.3922334703\n" " 0.3400394180 0.1756759463 -0.0301109343 0.1808450956\n" " 0.0432486776 -0.0017104609 1.0388873735 0.0057698929\n" "#","\n" "Na DZVP-GTH-PADE\n" " 2\n" " 2 0 1 6 3 3\n" " 17.6699685720 -0.1362341108 0.0270952595 0.0000000000 0.0791962955 0.0000000000 0.0000000000\n" " 6.9071803380 -0.0645881804 0.0098743015 0.0000000000 0.2184099565 0.0000000000 0.0000000000\n" " 2.6099085380 0.3866064317 -0.0737148250 0.0000000000 0.3764868181 0.0000000000 0.0000000000\n" " 0.9649711690 0.5971408467 -0.2186736173 0.0000000000 0.3922334703 0.0000000000 0.0000000000\n" " 0.3400394180 0.1756759463 -0.0301109343 0.0000000000 0.1808450956 1.0000000000 0.0000000000\n" " 0.0432486776 -0.0017104609 1.0388873735 1.0000000000 0.0057698929 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-GTH-PADE-q10 DZVP-GTH-PADE\n" " 2\n" " 2 0 1 6 3 3\n" " 28.4908976858 -0.0662610173 0.0164990227 0.0000000000 0.0464488574 0.0000000000 0.0000000000\n" " 11.7286146019 -0.1706220696 0.0374304317 0.0000000000 0.1664817432 0.0000000000 0.0000000000\n" " 4.4446432719 0.2494471473 -0.0517267282 0.0000000000 0.3580892342 0.0000000000 0.0000000000\n" " 1.6070987233 0.6423276770 -0.2647575784 0.0000000000 0.4356677176 0.0000000000 0.0000000000\n" " 0.5690818481 0.2933445091 -0.0948604830 0.0000000000 0.2229690408 1.0000000000 0.0000000000\n" " 0.0763499358 -0.0002712350 1.0630089581 1.0000000000 0.0085994850 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Mg DZVP-GTH-PADE-q2\n" " 2\n" " 3 0 0 4 2\n" " 2.9198644211 -0.0025733539 0.0000000000\n" " 0.8049484892 0.2058124895 0.0000000000\n" " 0.1126554966 -0.6457766724 0.0000000000\n" " 0.0413625487 -0.4747074468 1.0000000000\n" " 3 1 1 1 1\n" " 0.2000000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9504243929 0.2820110253 0.0000000000 0.0257292971 0.0000000000\n" " 0.2947542270 -0.2787298974 0.0000000000 -0.2527939401 0.0000000000\n" " 0.1124473777 -0.7495145975 0.0000000000 -0.5124792729 0.0000000000\n" " 0.0396013464 -0.1646066141 1.0000000000 -0.3831309239 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-PADE-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9659628623 0.2842778097 0.0000000000 0.0340618641 0.0000000000\n" " 0.3438400556 -0.1449517389 0.0000000000 -0.2054970468 0.0000000000\n" " 0.1485207596 -0.6897086501 0.0000000000 -0.4772801180 0.0000000000\n" " 0.0719529320 -0.3389750810 1.0000000000 -0.4170196265 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si SZV-GTH-PADE\n" " 1\n" " 3 0 1 4 1 1\n" " 1.2032422345 0.3290350445 0.0474539126\n" " 0.4688409786 -0.2533118323 -0.2594473573\n" " 0.1679863234 -0.7870946277 -0.5440929303\n" " 0.0575619526 -0.1909898479 -0.3624010364\n" "#","\n" "Si DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.2032422345 0.3290350445 0.0000000000 0.0474539126 0.0000000000\n" " 0.4688409786 -0.2533118323 0.0000000000 -0.2594473573 0.0000000000\n" " 0.1679863234 -0.7870946277 0.0000000000 -0.5440929303 0.0000000000\n" " 0.0575619526 -0.1909898479 1.0000000000 -0.3624010364 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "Si DZVP-GTH-PADE-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 1.2283393137 0.3224377170 0.0000000000 0.0594606114 0.0000000000\n" " 0.5501858147 -0.1360087627 0.0000000000 -0.2102673957 0.0000000000\n" " 0.2104840660 -0.7254143349 0.0000000000 -0.5133271944 0.0000000000\n" " 0.0912235796 -0.3482519842 1.0000000000 -0.4108824626 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P SZV-GTH-PADE\n" " 1\n" " 3 0 1 4 1 1\n" " 1.4961048190 0.3653028603 0.0816119465\n" " 0.7168717560 -0.2125795312 -0.2627452850\n" " 0.2411410649 -0.8136062969 -0.5627188034\n" " 0.0803403985 -0.2362293752 -0.3691372243\n" "#","\n" "P DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4961048190 0.3653028603 0.0000000000 0.0816119465 0.0000000000\n" " 0.7168717560 -0.2125795312 0.0000000000 -0.2627452850 0.0000000000\n" " 0.2411410649 -0.8136062969 0.0000000000 -0.5627188034 0.0000000000\n" " 0.0803403985 -0.2362293752 1.0000000000 -0.3691372243 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S SZV-GTH-PADE\n" " 1\n" " 3 0 1 4 1 1\n" " 1.8379557070 0.3832201009 0.1221451195\n" " 1.0358088377 -0.1682229539 -0.2752006797\n" " 0.3298020165 -0.8258487331 -0.5729080701\n" " 0.1073546335 -0.2832847829 -0.3825524954\n" "#","\n" "S DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.8379557070 0.3832201009 0.0000000000 0.1221451195 0.0000000000\n" " 1.0358088377 -0.1682229539 0.0000000000 -0.2752006797 0.0000000000\n" " 0.3298020165 -0.8258487331 0.0000000000 -0.5729080701 0.0000000000\n" " 0.1073546335 -0.2832847829 1.0000000000 -0.3825524954 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 2.2321759828 0.3787841491 0.0000000000 0.1555383208 0.0000000000\n" " 1.3787736290 -0.1239706468 0.0000000000 -0.2931737153 0.0000000000\n" " 0.4264909846 -0.8298219996 0.0000000000 -0.5781090940 0.0000000000\n" " 0.1366672601 -0.3175034120 1.0000000000 -0.3901119426 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 2 2\n" " 2.6436290990 0.3737616862 0.0000000000 0.1735201807 0.0000000000\n" " 1.6948961534 -0.0996561183 0.0000000000 -0.3100928733 0.0000000000\n" " 0.5231108387 -0.8315195659 0.0000000000 -0.5807563784 0.0000000000\n" " 0.1663306775 -0.3339930421 1.0000000000 -0.3879330018 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "K DZVP-GTH-PADE\n" " 2\n" " 3 0 1 6 3 3\n" " 4.9094498551 0.3409782009 -0.0718544684 0.0000000000 -0.0383589744 0.0000000000 0.0000000000\n" " 3.7798462116 -0.7275665906 0.1645679593 0.0000000000 -0.0185547112 0.0000000000 0.0000000000\n" " 1.2616687398 0.2421667415 -0.0492186533 0.0000000000 0.3499301423 0.0000000000 0.0000000000\n" " 0.5208676931 0.7973211939 -0.3638537086 0.0000000000 0.5271250194 0.0000000000 0.0000000000\n" " 0.1977138661 0.2181209543 -0.0636674785 0.0000000000 0.2616666463 1.0000000000 0.0000000000\n" " 0.0313945665 -0.0006704360 1.0746760317 1.0000000000 0.0081708337 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "K DZVP-GTH-PADE-CONFINED\n" " 2\n" " 3 0 1 6 3 3\n" " 5.0562599816 0.2799518601 -0.0650771209 0.0000000000 -0.0324181496 0.0000000000 0.0000000000\n" " 3.7408592301 -0.6649216195 0.1655178754 0.0000000000 -0.0267570689 0.0000000000 0.0000000000\n" " 1.2850539206 0.2238370548 -0.0537305354 0.0000000000 0.3397270753 0.0000000000 0.0000000000\n" " 0.5337655981 0.7974284526 -0.3684242774 0.0000000000 0.5266222265 0.0000000000 0.0000000000\n" " 0.2033806513 0.2347131143 -0.1192800271 0.0000000000 0.2729583365 1.0000000000 0.0000000000\n" " 0.0366378947 -0.0006397374 1.1060765731 1.0000000000 0.0099036017 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "# Calcium\n" "# \n" "# Z(nuc) = 20\n" "# Z(eff) = 10\n" "# E(ref) = -36.614864 a.u. (DZV)\n" "# \n" "Ca DZVP-GTH-PADE-q10 DZVP-GTH-PADE\n" " 2\n" " 3 0 1 4 3 2\n" " 2.8976614522 0.6350314914 0.2038750228 0.0000000000 0.1518240054 0.0000000000\n" " 1.4766172782 -0.6715522195 -0.2579542636 0.0000000000 -0.5771864343 0.0000000000\n" " 0.4495737541 -0.8068315347 -0.4282041397 0.0000000000 -0.6174577485 0.0000000000\n" " 0.0520990913 -0.0145128759 1.1194316117 1.0000000000 -0.0373205562 1.0000000000\n" " 3 2 2 1 1\n" " 0.1088000000 1.0000000000\n" "#","\n" "# Scandium\n" "# \n" "# Z(nuc) = 21\n" "# Z(eff) = 11\n" "# E(ref) = -46.447044 a.u.\n" "# \n" "Sc DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.6177243131 -0.0025816821 0.0020846187 0.0000000000 -0.0990370320 0.0000000000 0.0417638000 -0.0265577865\n" " 3.5261707573 -0.4535887309 0.1333741760 0.0000000000 0.0830531204 0.0000000000 0.1794321279 -0.1237289932\n" " 1.3475088268 0.5851881107 -0.2044293970 0.0000000000 0.5068532353 0.0000000000 0.3071566485 -0.2111871137\n" " 0.5296968643 0.6915603927 -0.4643940847 0.0000000000 0.4818000644 0.0000000000 0.3729120547 -0.2265277705\n" " 0.1812303900 0.0523300246 0.1894325403 0.0000000000 0.0896287007 1.0000000000 0.3594956734 0.1297694309\n" " 0.0515699896 -0.0005424240 0.9922288961 1.0000000000 -0.0048406883 0.0000000000 0.1446776127 0.8641342523\n" "#","\n" "# Titanium\n" "# \n" "# Z(nuc) = 22\n" "# Z(eff) = 12\n" "# E(ref) = -57.906922 a.u.\n" "# \n" "Ti DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.8662560704 -0.0142007165 0.0051486133 0.0000000000 -0.1058111845 0.0000000000 0.0536511054 -0.0316785505\n" " 3.8950658856 -0.4494837964 0.1327129568 0.0000000000 0.1048087858 0.0000000000 0.1933632803 -0.1267950119\n" " 1.5117853291 0.6143981202 -0.2143014467 0.0000000000 0.5160204236 0.0000000000 0.3290345604 -0.2122564864\n" " 0.5932516463 0.6730966953 -0.4565151952 0.0000000000 0.4704168448 0.0000000000 0.3780068197 -0.2097541935\n" " 0.2029490001 0.0494956907 0.2060441001 0.0000000000 0.0790813703 1.0000000000 0.3303452351 0.2356257943\n" " 0.0570083591 -0.0007722992 0.9803815034 1.0000000000 -0.0040175351 0.0000000000 0.1067632616 0.8133941640\n" "#","\n" "# Titanium\n" "# \n" "# Z(nuc) = 22\n" "# Z(eff) = 12\n" "# r(cov) = 2.494 a.u.\n" "# E(ref) = -57.768017 a.u.\n" "# \n" "Ti DZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.9054508950 -0.0089866342 0.0033403228 0.0000000000 -0.1044805862 0.0000000000 0.0524477349 -0.0208282688\n" " 3.9606136239 -0.4508141066 0.1442719748 0.0000000000 0.0963354612 0.0000000000 0.1891993776 -0.0904000412\n" " 1.5621587965 0.5637837175 -0.2125114543 0.0000000000 0.4935065359 0.0000000000 0.3209566467 -0.1191689233\n" " 0.6278375325 0.6987976039 -0.4744456374 0.0000000000 0.4799614577 0.0000000000 0.3684022594 -0.2436747742\n" " 0.2253690150 0.0716873095 0.0753192189 0.0000000000 0.0995748325 1.0000000000 0.3365998900 0.0009608049\n" " 0.0725661163 -0.0018693598 1.0806476083 1.0000000000 -0.0043939777 0.0000000000 0.1049021142 0.9691386629\n" "#","\n" "# Vanadium\n" "# \n" "# Z(nuc) = 23\n" "# Z(eff) = 13\n" "# E(ref) = -71.188765 a.u.\n" "# \n" "V DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.8747524263 -0.0443841418 0.0126347723 0.0000000000 -0.1144265054 0.0000000000 0.0651523717 -0.0186113262\n" " 4.0933440615 -0.4317842194 0.1208086573 0.0000000000 0.1421671368 0.0000000000 0.2101756320 -0.0735897040\n" " 1.6384502186 0.6727841327 -0.2278558403 0.0000000000 0.5251937993 0.0000000000 0.3407334498 -0.0858251101\n" " 0.6438497632 0.6346678975 -0.4409702916 0.0000000000 0.4484462388 0.0000000000 0.3767018108 -0.2121800208\n" " 0.2206224245 0.0418256229 0.2306573940 0.0000000000 0.0670590120 1.0000000000 0.3023326440 0.0291442397\n" " 0.0614716642 -0.0007065154 0.9629588869 1.0000000000 -0.0031794120 0.0000000000 0.0836085023 0.9675641584\n" "#","\n" "# Chromium\n" "# \n" "# Z(nuc) = 24\n" "# Z(eff) = 14\n" "# E(ref) = -86.421763 a.u.\n" "# \n" "Cr DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.4980218808 -0.0608783001 0.0160558551 0.0000000000 -0.0906220888 0.0000000000 0.0912009861 -0.0448527735\n" " 4.3332768421 -0.4362254023 0.1136246368 0.0000000000 0.1247923043 0.0000000000 0.1856901245 -0.0956642574\n" " 1.8357623166 0.6983227560 -0.2164316105 0.0000000000 0.5242992155 0.0000000000 0.3171108663 -0.1613201508\n" " 0.7086266315 0.6277540640 -0.3811547378 0.0000000000 0.4531101254 0.0000000000 0.3686546467 -0.1825467055\n" " 0.2325535793 0.0471147492 0.1539908695 0.0000000000 0.0676061963 1.0000000000 0.3250452914 0.0506894382\n" " 0.0621290391 -0.0023417403 0.9943414586 1.0000000000 -0.0037177277 0.0000000000 0.1425114774 0.9264839944\n" "#","\n" "# Manganese\n" "# \n" "# Z(nuc) = 25\n" "# Z(eff) = 15\n" "# E(ref) = -103.693822 a.u.\n" "# \n" "Mn DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.2162644620 -0.1392987047 0.0379745482 0.0000000000 -0.0706781641 0.0000000000 0.1231824621 -0.0271916197\n" " 4.3995038116 -0.3474284933 0.1026238058 0.0000000000 0.1421129189 0.0000000000 0.2003862748 -0.0616392441\n" " 1.9735860720 0.7276920861 -0.2459044301 0.0000000000 0.5304230993 0.0000000000 0.3396356204 -0.0508758521\n" " 0.7747355100 0.5917173669 -0.4104364589 0.0000000000 0.4289471268 0.0000000000 0.3764537252 -0.2226457142\n" " 0.2621680644 0.0446992498 0.2379188342 0.0000000000 0.0557678273 1.0000000000 0.2677240676 0.0808460497\n" " 0.0708470020 -0.0024642409 0.9512627458 1.0000000000 -0.0025525092 0.0000000000 0.0617409278 0.9529259336\n" "#","\n" "# Iron\n" "# \n" "# Z(nuc) = 26\n" "# Z(eff) = 16\n" "# E(ref) = -123.167637 a.u.\n" "# \n" "Fe DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.3176581765 -0.2221260103 0.0571340867 0.0000000000 -0.0835047401 0.0000000000 0.1328616119 -0.0265786973\n" " 4.4422592901 -0.2065484249 0.0659015546 0.0000000000 0.2224692471 0.0000000000 0.2337033217 -0.0640748896\n" " 1.9537149970 0.7710412303 -0.2695445185 0.0000000000 0.5334951260 0.0000000000 0.3480430202 -0.0427943670\n" " 0.7755476397 0.5063505210 -0.3754221317 0.0000000000 0.3763681502 0.0000000000 0.3564479505 -0.2349902890\n" " 0.2667047888 0.0299286713 0.2874114014 0.0000000000 0.0390767933 1.0000000000 0.2392969951 0.1437613614\n" " 0.0730205366 -0.0015070313 0.9166672323 1.0000000000 -0.0012748470 0.0000000000 0.0495086684 0.9263257056\n" "#","\n" "# Cobalt\n" "# \n" "# Z(nuc) = 27\n" "# Z(eff) = 17\n" "# E(ref) = -145.074726 a.u.\n" "# \n" "Co DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 8.2259784105 -0.3348828014 0.0839161925 0.0000000000 -0.0575730412 0.0000000000 0.1703306058 -0.0329647329\n" " 4.0899376713 0.0273051456 0.0043597020 0.0000000000 0.3114547257 0.0000000000 0.2731993143 -0.0646674934\n" " 1.7906737831 0.8008414138 -0.3063471909 0.0000000000 0.5288889096 0.0000000000 0.3481942056 -0.0406024695\n" " 0.7202346272 0.3743034819 -0.3094552251 0.0000000000 0.2922852722 0.0000000000 0.3268542552 -0.2546151534\n" " 0.2531395288 0.0119133243 0.3681678234 0.0000000000 0.0193344238 1.0000000000 0.1983580019 0.2591729030\n" " 0.0724847250 -0.0002875656 0.8518740079 1.0000000000 -0.0000074411 0.0000000000 0.0347706125 0.8655847940\n" "#","\n" "# Nickel\n" "# \n" "# Z(nuc) = 28\n" "# Z(eff) = 18\n" "# E(ref) = -169.014868 a.u. (DZV)\n" "# \n" "Ni SZV-GTH-PADE-q18 SZV-GTH-PADE\n" " 1\n" " 3 0 2 6 2 1 1\n" " 9.1083628918 -0.3318472282 0.0814757465 -0.0734890997 0.1546631104\n" " 4.7077006381 0.0215195281 0.0083255182 0.3143433748 0.2793018964\n" " 2.0075563311 0.7820035505 -0.2919821887 0.5321470345 0.3572041353\n" " 0.7991545346 0.3981367371 -0.3174059212 0.3004714229 0.3257021539\n" " 0.2801233689 0.0110672576 0.3537517680 0.0204262431 0.1980609814\n" " 0.0777183285 0.0003240675 0.8632205228 0.0000512651 0.0349659775\n" "#","\n" "Ni SZV-GTH-PADE-CONFINED-q18 SZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 2 1 1\n" " 9.1839262940 -0.3194864695 0.0820798088 -0.0753895848 0.1482345528\n" " 4.8715988710 -0.0166115410 0.0216589790 0.2902126119 0.2678833452\n" " 2.1295830130 0.7470874340 -0.2893085485 0.5183042283 0.3474007726\n" " 0.8692986192 0.4468007103 -0.3470085291 0.3282859990 0.3267208363\n" " 0.3160013087 0.0241429107 0.2421486666 0.0331477696 0.2129571216\n" " 0.0996764017 -0.0007297350 0.9538524021 -0.0007168330 0.0399879500\n" "#","\n" "Ni DZV-GTH-PADE-q18 DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 3 2 2\n" " 9.1083628918 -0.3318472282 0.0814757465 0.0000000000 -0.0734890997 0.0000000000 0.1546631104 -0.0270446181\n" " 4.7077006381 0.0215195281 0.0083255182 0.0000000000 0.3143433748 0.0000000000 0.2793018964 -0.0621439339\n" " 2.0075563311 0.7820035505 -0.2919821887 0.0000000000 0.5321470345 0.0000000000 0.3572041353 -0.0346035868\n" " 0.7991545346 0.3981367371 -0.3174059212 0.0000000000 0.3004714229 0.0000000000 0.3257021539 -0.2542426351\n" " 0.2801233689 0.0110672576 0.3537517680 0.0000000000 0.0204262431 1.0000000000 0.1980609814 0.2437546148\n" " 0.0777183285 0.0003240675 0.8632205228 1.0000000000 0.0000512651 0.0000000000 0.0349659775 0.8783250274\n" "#","\n" "Ni DZV-GTH-PADE-CONFINED-q18 DZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 3 2 2\n" " 9.1839262940 -0.3194864695 0.0820798088 0.0000000000 -0.0753895848 0.0000000000 0.1482345528 -0.0303971456\n" " 4.8715988710 -0.0166115410 0.0216589790 0.0000000000 0.2902126119 0.0000000000 0.2678833452 -0.0724968085\n" " 2.1295830130 0.7470874340 -0.2893085485 0.0000000000 0.5183042283 0.0000000000 0.3474007726 -0.0383232476\n" " 0.8692986192 0.4468007103 -0.3470085291 0.0000000000 0.3282859990 0.0000000000 0.3267208363 -0.2746023312\n" " 0.3160013087 0.0241429107 0.2421486666 0.0000000000 0.0331477696 1.0000000000 0.2129571216 0.2181292551\n" " 0.0996764017 -0.0007297350 0.9538524021 1.0000000000 -0.0007168330 0.0000000000 0.0399879500 0.8850545821\n" "#","\n" "# Nickel\n" "# \n" "# Z(nuc) = 28\n" "# Z(eff) = 10\n" "# E(ref) = -36.954230 a.u.\n" "# \n" "Ni DZV-GTH-PADE-q10\n" " 1\n" " 3 0 2 6 2 2 2\n" " 5.2465385132 -0.0195686939 0.0000000000 0.0016517420 0.0000000000 0.2741056767 -0.0137577062\n" " 2.6090644689 0.0813873400 0.0000000000 -0.0052396301 0.0000000000 0.3543794794 -0.0268890369\n" " 1.1046166843 -0.2728677440 0.0000000000 0.0619959272 0.0000000000 0.3296854386 0.0126199016\n" " 0.4448692089 -0.0688949785 0.0000000000 -0.0614220277 0.0000000000 0.2335185166 -0.3679775516\n" " 0.1687659415 0.6206874931 0.0000000000 -0.2903889111 1.0000000000 0.0992461972 0.4117542785\n" " 0.0576654368 0.5625306587 1.0000000000 -0.7554832177 0.0000000000 0.0101944431 0.7852149041\n" "#","\n" "# Copper\n" "# \n" "# Z(nuc) = 29\n" "# Z(eff) = 11\n" "# E(ref) = -47.922396 a.u.\n" "# \n" "Cu DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 2 2 2\n" " 5.7799826780 -0.0137622398 0.0000000000 -0.0019325638 0.0000000000 0.2572828355 -0.0100377492\n" " 2.9223072565 0.0624852089 0.0000000000 0.0066529976 0.0000000000 0.3370459629 -0.0172155062\n" " 1.2410860367 -0.2101042076 0.0000000000 -0.0486904400 0.0000000000 0.3219866164 0.0080455917\n" " 0.4926826906 -0.1147109815 0.0000000000 0.0379720404 0.0000000000 0.2528381981 -0.2353878212\n" " 0.1789330672 0.5404419433 0.0000000000 0.2206564191 1.0000000000 0.1448314035 0.0049310905\n" " 0.0561739570 0.6479193925 1.0000000000 0.8303966635 0.0000000000 0.0314382917 1.0108918979\n" "#","\n" "# Zinc\n" "# \n" "# Z(nuc) = 30\n" "# Z(eff) = 12\n" "# E(ref) = -60.408339 a.u.\n" "# \n" "Zn DZV-GTH-PADE\n" " 1\n" " 3 0 2 6 2 2 2\n" " 6.4206423601 -0.0159961492 0.0000000000 -0.0017007517 0.0000000000 0.2738774540 -0.0086808361\n" " 3.2164545624 0.0700921695 0.0000000000 0.0057876549 0.0000000000 0.3543101613 -0.0259525057\n" " 1.3637346905 -0.2332431465 0.0000000000 -0.0557262454 0.0000000000 0.3285180198 0.0317203087\n" " 0.5481563712 -0.1137154667 0.0000000000 0.0463783393 0.0000000000 0.2334531038 -0.3651680612\n" " 0.2053011443 0.5909100816 0.0000000000 0.2629520047 1.0000000000 0.1017295445 0.3530864382\n" " 0.0662102782 0.6085540919 1.0000000000 0.7908150346 0.0000000000 0.0108701745 0.8289022633\n" "#","\n" "# Zinc\n" "# \n" "# r(cov) = 2.362 a.u.\n" "# E(ref) = -60.299849 a.u.\n" "# \n" "Zn DZV-GTH-PADE-CONFINED\n" " 1\n" " 3 0 2 6 2 2 2\n" " 6.4635610128 -0.0174178283 0.0000000000 0.0014889091 0.0000000000 0.2661076361 -0.0172911104\n" " 3.3087913561 0.0729496060 0.0000000000 -0.0053382185 0.0000000000 0.3453918347 -0.0353171901\n" " 1.4436868426 -0.2102985944 0.0000000000 0.0544382687 0.0000000000 0.3206623881 0.0094335277\n" " 0.6045470598 -0.1788671076 0.0000000000 -0.0164095173 0.0000000000 0.2357873353 -0.3686660487\n" " 0.2390582336 0.5149852625 0.0000000000 -0.2811557323 1.0000000000 0.1164010142 0.3573346078\n" " 0.0857774784 0.7053938257 1.0000000000 -0.7792591266 0.0000000000 0.0149561710 0.8225277665\n" "#","\n" "# Bromine\n" "# \n" "# Z(nuc) = 35\n" "# Z(eff) = 7\n" "# E(ref) = -13.399562 a.u.\n" "# \n" "Br DZVP-GTH-PADE\n" " 2\n" " 4 0 1 6 2 2\n" " 3.1292582762 0.1580383222 0.0000000000 -0.0227993689 0.0000000000\n" " 2.0410191811 -0.5451938775 0.0000000000 -0.0920733298 0.0000000000\n" " 0.8302017350 0.1080068318 0.0000000000 0.1803022828 0.0000000000\n" " 0.3973439755 0.6925896761 0.0000000000 0.4347908141 0.0000000000\n" " 0.1725496378 0.4230867305 0.0000000000 0.4234285104 0.0000000000\n" " 0.0696797072 0.0332389489 1.0000000000 0.1406796525 1.0000000000\n" " 4 2 2 1 1\n" " 0.3620000000 1.0000000000\n" "#","\n" "# Yttrium\n" "# \n" "# Z(nuc) = 39\n" "# Z(eff) = 11\n" "# E(ref) = -38.220903 a.u. (DZV)\n" "# \n" "Y SZV-GTH-PADE\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.8428845299 0.0803324138 -0.0266188717 0.0134161241 -0.0016439813\n" " 2.7619481977 -0.6392520852 0.2386709814 -0.1893880809 -0.0012258216\n" " 1.1534752103 0.4260952519 -0.1749784343 0.4372433962 0.1854518520\n" " 0.4724776609 0.8755246609 -0.5963031281 0.6173916742 0.3755995103\n" " 0.1689866773 0.0824597184 0.1334866382 0.1503112301 0.4711505916\n" " 0.0490946914 -0.0003667507 1.0516399914 -0.0061616659 0.2624412351\n" "#","\n" "Y SZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.8513817096 0.0798606067 -0.0279472583 0.0137177365 -0.0014643321\n" " 2.7616577921 -0.6382967169 0.2509901785 -0.1927451959 -0.0030943144\n" " 1.1844670938 0.3929099619 -0.1729550553 0.4168976599 0.1811003704\n" " 0.4898256283 0.8878410454 -0.6035125417 0.6214526828 0.3711873238\n" " 0.1795686728 0.1040199200 0.0270233339 0.1694869546 0.4764905487\n" " 0.0573407217 -0.0015793010 1.1284469161 -0.0059902205 0.2444820548\n" "#","\n" "Y DZV-GTH-PADE\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.8428845299 0.0803324138 -0.0266188717 0.0000000000 0.0134161241 0.0000000000 -0.0016439813 0.0000000000\n" " 2.7619481977 -0.6392520852 0.2386709814 0.0000000000 -0.1893880809 0.0000000000 -0.0012258216 0.0000000000\n" " 1.1534752103 0.4260952519 -0.1749784343 0.0000000000 0.4372433962 0.0000000000 0.1854518520 0.0000000000\n" " 0.4724776609 0.8755246609 -0.5963031281 0.0000000000 0.6173916742 0.0000000000 0.3755995103 1.0000000000\n" " 0.1689866773 0.0824597184 0.1334866382 0.0000000000 0.1503112301 1.0000000000 0.4711505916 0.0000000000\n" " 0.0490946914 -0.0003667507 1.0516399914 1.0000000000 -0.0061616659 0.0000000000 0.2624412351 0.0000000000\n" "#","\n" "Y DZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.8513817096 0.0798606067 -0.0279472583 0.0000000000 0.0137177365 0.0000000000 -0.0014643321 0.0000000000\n" " 2.7616577921 -0.6382967169 0.2509901785 0.0000000000 -0.1927451959 0.0000000000 -0.0030943144 0.0000000000\n" " 1.1844670938 0.3929099619 -0.1729550553 0.0000000000 0.4168976599 0.0000000000 0.1811003704 0.0000000000\n" " 0.4898256283 0.8878410454 -0.6035125417 0.0000000000 0.6214526828 0.0000000000 0.3711873238 1.0000000000\n" " 0.1795686728 0.1040199200 0.0270233339 0.0000000000 0.1694869546 1.0000000000 0.4764905487 0.0000000000\n" " 0.0573407217 -0.0015793010 1.1284469161 1.0000000000 -0.0059902205 0.0000000000 0.2444820548 0.0000000000\n" "#","\n" "# Zirconium\n" "# \n" "# Z(nuc) = 40\n" "# Z(eff) = 12\n" "# E(ref) = -46.893180 a.u. (DZV)\n" "# \n" "Zr SZV-GTH-PADE\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.6857477291 0.0921982715 -0.0300916002 0.0146645208 -0.0028305635\n" " 2.8983441504 -0.7069142736 0.2663213129 -0.2102277970 0.0073835576\n" " 1.2697609208 0.5009909419 -0.2139641740 0.4771534202 0.2198586769\n" " 0.5172494858 0.8658642938 -0.6004758231 0.6141472939 0.4200820229\n" " 0.1837156188 0.0697098809 0.1712660028 0.1280872093 0.4495790932\n" " 0.0544846775 -0.0001210510 1.0314604844 -0.0061029355 0.1822139319\n" "#","\n" "Zr SZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 2 1 1\n" " 7.6907307864 0.0918380423 -0.0320131875 0.0151438658 -0.0025460744\n" " 2.8994679368 -0.7065066090 0.2831559477 -0.2148939669 0.0047430657\n" " 1.3083923278 0.4616304054 -0.2132614049 0.4535119288 0.2123619968\n" " 0.5389907155 0.8834077941 -0.6128847036 0.6213717566 0.4126795546\n" " 0.1971440852 0.0929467894 0.0453994877 0.1490106611 0.4547421602\n" " 0.0656808473 -0.0016305751 1.1255334296 -0.0064460597 0.1726337227\n" "#","\n" "Zr DZV-GTH-PADE\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.6857477291 0.0921982715 -0.0300916002 0.0000000000 0.0146645208 0.0000000000 -0.0028305635 0.0000000000\n" " 2.8983441504 -0.7069142736 0.2663213129 0.0000000000 -0.2102277970 0.0000000000 0.0073835576 0.0000000000\n" " 1.2697609208 0.5009909419 -0.2139641740 0.0000000000 0.4771534202 0.0000000000 0.2198586769 0.0000000000\n" " 0.5172494858 0.8658642938 -0.6004758231 0.0000000000 0.6141472939 0.0000000000 0.4200820229 1.0000000000\n" " 0.1837156188 0.0697098809 0.1712660028 0.0000000000 0.1280872093 1.0000000000 0.4495790932 0.0000000000\n" " 0.0544846775 -0.0001210510 1.0314604844 1.0000000000 -0.0061029355 0.0000000000 0.1822139319 0.0000000000\n" "#","\n" "Zr DZV-GTH-PADE-CONFINED\n" " 1\n" " 4 0 2 6 3 2 2\n" " 7.6907307864 0.0918380423 -0.0320131875 0.0000000000 0.0151438658 0.0000000000 -0.0025460744 0.0000000000\n" " 2.8994679368 -0.7065066090 0.2831559477 0.0000000000 -0.2148939669 0.0000000000 0.0047430657 0.0000000000\n" " 1.3083923278 0.4616304054 -0.2132614049 0.0000000000 0.4535119288 0.0000000000 0.2123619968 0.0000000000\n" " 0.5389907155 0.8834077941 -0.6128847036 0.0000000000 0.6213717566 0.0000000000 0.4126795546 1.0000000000\n" " 0.1971440852 0.0929467894 0.0453994877 0.0000000000 0.1490106611 1.0000000000 0.4547421602 0.0000000000\n" " 0.0656808473 -0.0016305751 1.1255334296 1.0000000000 -0.0064460597 0.0000000000 0.1726337227 0.0000000000\n" "#","\n" "# Platinum\n" "# \n" "# Z(nuc) = 78\n" "# Z(eff) = 18\n" "# E(ref) = -120.876931 a.u. (DZV)\n" "# \n" "Pt SZV-GTH-PADE\n" " 1\n" " 5 0 2 5 2 1 1\n" " 3.8539902592 0.6550845009 -0.1051705366 0.1013168098 0.0757804127\n" " 1.7615287193 -0.8764031847 0.1401591199 -0.4564614080 -0.2980475179\n" " 0.7984755007 -0.5895118007 0.6070281980 -0.5905298499 -0.4267024585\n" " 0.3063995931 -0.0418859472 -0.2491931231 -0.0921404881 -0.4156575987\n" " 0.0905510437 0.0010007235 -1.0046330563 0.0002983670 -0.1378705014\n" "#","\n" "Pt DZV-GTH-PADE\n" " 1\n" " 5 0 2 5 3 2 2\n" " 3.8539902592 0.6550845009 -0.1051705366 0.0000000000 0.1013168098 0.0000000000 0.0757804127 0.0000000000\n" " 1.7615287193 -0.8764031847 0.1401591199 0.0000000000 -0.4564614080 0.0000000000 -0.2980475179 0.0000000000\n" " 0.7984755007 -0.5895118007 0.6070281980 0.0000000000 -0.5905298499 0.0000000000 -0.4267024585 1.0000000000\n" " 0.3063995931 -0.0418859472 -0.2491931231 0.0000000000 -0.0921404881 1.0000000000 -0.4156575987 0.0000000000\n" " 0.0905510437 0.0010007235 -1.0046330563 1.0000000000 0.0002983670 0.0000000000 -0.1378705014 0.0000000000\n" "#","\n" "# Platinum\n" "# \n" "# Z(nuc) = 78\n" "# Z(eff) = 18\n" "# r(cov) = 2.457 a.u.\n" "# E(ref) = -120.704482 a.u. (DZV)\n" "# \n" "Pt SZV-GTH-PADE-CONFINED\n" " 1\n" " 5 0 2 5 2 1 1\n" " 3.8119175158 0.6811428125 -0.1098754333 0.1070703344 0.0816913963\n" " 1.8322303424 -0.8481780351 0.1224415322 -0.4203762499 -0.2816553083\n" " 0.8395270960 -0.6301940141 0.6208296307 -0.6135494498 -0.4250744523\n" " 0.3248710896 -0.0565770730 -0.1523972357 -0.1113673639 -0.4272240550\n" " 0.1034693582 0.0020421374 -1.0726205087 0.0007567030 -0.1392021184\n" "#","\n" "Pt DZV-GTH-PADE-CONFINED\n" " 1\n" " 5 0 2 5 3 2 2\n" " 3.8119175158 0.6811428125 -0.1098754333 0.0000000000 0.1070703344 0.0000000000 0.0816913963 0.0000000000\n" " 1.8322303424 -0.8481780351 0.1224415322 0.0000000000 -0.4203762499 0.0000000000 -0.2816553083 0.0000000000\n" " 0.8395270960 -0.6301940141 0.6208296307 0.0000000000 -0.6135494498 0.0000000000 -0.4250744523 1.0000000000\n" " 0.3248710896 -0.0565770730 -0.1523972357 0.0000000000 -0.1113673639 1.0000000000 -0.4272240550 0.0000000000\n" " 0.1034693582 0.0020421374 -1.0726205087 1.0000000000 0.0007567030 0.0000000000 -0.1392021184 0.0000000000\n" "#","\n" "H DZV-GTH-BLYP\n" " 1\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0253743372 0.0000000000\n" " 1.8741624886 -0.1423057735 0.0000000000\n" " 0.5105244224 -0.2688793627 0.0000000000\n" " 0.1671584984 -0.6811381593 1.0000000000\n" "#","\n" "H DZV-GTH-BLYP-CONFINED\n" " 1\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0295744132 0.0000000000\n" " 1.8741624886 -0.1366960483 0.0000000000\n" " 0.5105244224 -0.3996700661 0.0000000000\n" " 0.1671584984 -0.5535181527 1.0000000000\n" "#","\n" "H DZVP-GTH-BLYP\n" " 2\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0253743372 0.0000000000\n" " 1.8741624886 -0.1423057735 0.0000000000\n" " 0.5105244224 -0.2688793627 0.0000000000\n" " 0.1671584984 -0.6811381593 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "H DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 1 0 0 4 2\n" " 8.5926819670 -0.0295744132 0.0000000000\n" " 1.8741624886 -0.1366960483 0.0000000000\n" " 0.5105244224 -0.3996700661 0.0000000000\n" " 0.1671584984 -0.5535181527 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "He DZV-GTH-BLYP\n" " 1\n" " 1 0 0 4 2\n" " 11.1193917922 -0.0770450237 0.0000000000\n" " 2.7858130727 -0.2506337219 0.0000000000\n" " 0.7622149528 -0.4810430873 0.0000000000\n" " 0.2069465438 -0.3647148361 1.0000000000\n" "#","\n" "He DZVP-GTH-BLYP\n" " 2\n" " 1 0 0 4 2\n" " 11.1193917922 -0.0770450237 0.0000000000\n" " 2.7858130727 -0.2506337219 0.0000000000\n" " 0.7622149528 -0.4810430873 0.0000000000\n" " 0.2069465438 -0.3647148361 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "Li DZV-GTH-BLYP\n" " 1\n" " 1 0 0 6 3\n" " 9.2302808251 0.1415242446 -0.0269136246 0.0000000000\n" " 4.3944449344 0.2843546506 -0.0528260176 0.0000000000\n" " 1.4510059930 0.4411787547 -0.1332651028 0.0000000000\n" " 0.5085373954 0.2629872002 -0.0961377531 0.0000000000\n" " 0.0767907273 0.0115877019 0.5683374551 0.0000000000\n" " 0.0261032845 -0.0035737781 0.5290064307 1.0000000000\n" "#","\n" "Li DZVP-GTH-BLYP\n" " 1\n" " 1 0 1 6 3 3\n" " 9.2302808251 0.1415242446 -0.0269136246 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3944449344 0.2843546506 -0.0528260176 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4510059930 0.4411787547 -0.1332651028 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.5085373954 0.2629872002 -0.0961377531 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0767907273 0.0115877019 0.5683374551 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0261032845 -0.0035737781 0.5290064307 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be DZV-GTH-BLYP\n" " 1\n" " 1 0 0 6 3\n" " 16.7422288908 0.0966449867 -0.0233351760 0.0000000000\n" " 8.5397710546 0.3229144731 -0.0609785084 0.0000000000\n" " 2.8008728446 0.4309094768 -0.1582208472 0.0000000000\n" " 1.0279668171 0.2665960365 -0.0996495616 0.0000000000\n" " 0.1816198908 0.0129440911 0.5661714027 0.0000000000\n" " 0.0575318884 -0.0033470492 0.5467939201 1.0000000000\n" "#","\n" "Be DZVP-GTH-BLYP\n" " 1\n" " 1 0 1 6 3 3\n" " 16.7422288908 0.0966449867 -0.0233351760 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.5397710546 0.3229144731 -0.0609785084 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.8008728446 0.4309094768 -0.1582208472 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0279668171 0.2665960365 -0.0996495616 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1816198908 0.0129440911 0.5661714027 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0575318884 -0.0033470492 0.5467939201 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 2.8461657736 0.1478743320 0.0000000000 -0.0780482479 0.0000000000\n" " 0.8351785230 -0.0200254137 0.0000000000 -0.2557970914 0.0000000000\n" " 0.2702560177 -0.6820892853 0.0000000000 -0.4542195946 0.0000000000\n" " 0.0805636848 -0.4080927351 1.0000000000 -0.4455266641 1.0000000000\n" " 3 2 2 1 1\n" " 0.4000000000 1.0000000000\n" "#","\n" "C DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3451975957 0.1511172750 0.0000000000 -0.0883417890 0.0000000000\n" " 1.2765552224 -0.0330272512 0.0000000000 -0.2797032766 0.0000000000\n" " 0.4047139801 -0.6994401873 0.0000000000 -0.4686400677 0.0000000000\n" " 0.1166096360 -0.3842706677 1.0000000000 -0.4085514115 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "N DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1514293421 0.1529382304 0.0000000000 -0.0952593918 0.0000000000\n" " 1.8080207176 -0.0415737876 0.0000000000 -0.2946953365 0.0000000000\n" " 0.5656159036 -0.7060780663 0.0000000000 -0.4740427661 0.0000000000\n" " 0.1593207770 -0.3734107042 1.0000000000 -0.3884930037 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "O DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 8.2783332000 0.1537128043 0.0000000000 -0.1000437084 0.0000000000\n" " 2.4319182697 -0.0468575728 0.0000000000 -0.3046718654 0.0000000000\n" " 0.7530401707 -0.7092306221 0.0000000000 -0.4764866041 0.0000000000\n" " 0.2084649705 -0.3678036990 1.0000000000 -0.3764915728 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "O DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 2 0 1 4 2 2\n" " 8.8354826103 0.1386860737 0.0000000000 -0.0892277038 0.0000000000\n" " 2.7621439773 0.0162775038 0.0000000000 -0.2724019359 0.0000000000\n" " 0.8984199177 -0.6272143534 0.0000000000 -0.4630551829 0.0000000000\n" " 0.2813539810 -0.4833352657 1.0000000000 -0.4046182936 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "F DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 10.7284760684 0.1539953252 0.0000000000 -0.1034591141 0.0000000000\n" " 3.1496622427 -0.0503062083 0.0000000000 -0.3116781877 0.0000000000\n" " 0.9671794608 -0.7107682323 0.0000000000 -0.4776960745 0.0000000000\n" " 0.2640315133 -0.3648266470 1.0000000000 -0.3688578623 1.0000000000\n" " 3 2 2 1 1\n" " 1.0000000000 1.0000000000\n" "#","\n" "Ne DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 4 2 2\n" " 13.5711021582 0.1528118547 0.0000000000 -0.1055093745 0.0000000000\n" " 3.9754062896 -0.0499228626 0.0000000000 -0.3161557844 0.0000000000\n" " 1.2121681091 -0.7116163527 0.0000000000 -0.4784388183 0.0000000000\n" " 0.3268420958 -0.3647465749 1.0000000000 -0.3648062165 1.0000000000\n" " 3 2 2 1 1\n" " 1.2000000000 1.0000000000\n" "#","\n" "Na DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 6 3 3\n" " 24.4106415968 -0.0437913152 0.0091786765 0.0000000000 0.0412394777 0.0000000000 0.0000000000\n" " 9.9296107008 -0.2028236387 0.0363180981 0.0000000000 0.1340487332 0.0000000000 0.0000000000\n" " 3.6565524838 0.2429179955 -0.0394753287 0.0000000000 0.3537211057 0.0000000000 0.0000000000\n" " 1.2695832879 0.6645538239 -0.2078727830 0.0000000000 0.4486246648 0.0000000000 0.0000000000\n" " 0.4165172455 0.2885738064 -0.0972810085 0.0000000000 0.2617452725 1.0000000000 0.0000000000\n" " 0.0447862002 -0.0015791358 1.0489993368 1.0000000000 0.0111532456 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1169000000 1.0000000000\n" "#","\n" "Mg DZVP-GTH-BLYP\n" " 2\n" " 2 0 1 6 3 3\n" " 26.6684192078 -0.0843827177 0.0209137976 0.0000000000 0.0574690984 0.0000000000 0.0000000000\n" " 10.6278914168 -0.1540012185 0.0328904567 0.0000000000 0.1834886260 0.0000000000 0.0000000000\n" " 4.0257536169 0.3069950002 -0.0656366632 0.0000000000 0.3728084155 0.0000000000 0.0000000000\n" " 1.4729826270 0.6341736453 -0.2789230951 0.0000000000 0.4211046995 0.0000000000 0.0000000000\n" " 0.5301398986 0.2463411075 -0.0573174800 0.0000000000 0.1968486915 1.0000000000 0.0000000000\n" " 0.0755213250 -0.0010479306 1.0561246927 1.0000000000 0.0067129918 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9040202750 0.2819459889 0.0000000000 0.0202901873 0.0000000000\n" " 0.2716888904 -0.3565936829 0.0000000000 -0.2865844984 0.0000000000\n" " 0.1038208154 -0.7126726101 0.0000000000 -0.4993035494 0.0000000000\n" " 0.0361219503 -0.1315446458 1.0000000000 -0.3664719249 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Al DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9188833080 0.2847922923 0.0000000000 0.0265971886 0.0000000000\n" " 0.3059227599 -0.2166908019 0.0000000000 -0.2493477448 0.0000000000\n" " 0.1405671989 -0.6528454698 0.0000000000 -0.4330290941 0.0000000000\n" " 0.0701003942 -0.3130607257 1.0000000000 -0.4145972860 1.0000000000\n" " 3 2 2 1 1\n" " 0.3000000000 1.0000000000\n" "#","\n" "Si DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 1.1607523260 0.3347731757 0.0000000000 0.0434283150 0.0000000000\n" " 0.4367408478 -0.3093572718 0.0000000000 -0.2863246710 0.0000000000\n" " 0.1596639467 -0.7662114250 0.0000000000 -0.5309372647 0.0000000000\n" " 0.0542076476 -0.1654691868 1.0000000000 -0.3502990755 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "Si DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 3 0 1 4 2 2\n" " 1.1846613412 0.3285317082 0.0000000000 0.0525302034 0.0000000000\n" " 0.4966320416 -0.1837395449 0.0000000000 -0.2375844983 0.0000000000\n" " 0.2018817867 -0.7175956794 0.0000000000 -0.4934742426 0.0000000000\n" " 0.0883185787 -0.3186166920 1.0000000000 -0.3999071137 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "P DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4438479448 0.3786128496 0.0000000000 0.0768556482 0.0000000000\n" " 0.6655205239 -0.2651542911 0.0000000000 -0.2851732159 0.0000000000\n" " 0.2306279229 -0.8037940077 0.0000000000 -0.5540528446 0.0000000000\n" " 0.0761045314 -0.2088239606 1.0000000000 -0.3549348725 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "S DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 1.7644177483 0.4114656852 0.0000000000 0.1207217819 0.0000000000\n" " 0.9717752574 -0.2250656540 0.0000000000 -0.2949379210 0.0000000000\n" " 0.3174012156 -0.8265244883 0.0000000000 -0.5702721181 0.0000000000\n" " 0.1021260036 -0.2549919207 1.0000000000 -0.3673119254 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "Cl DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 2.1331287798 0.4248059842 0.0000000000 0.1653685236 0.0000000000\n" " 1.3235903746 -0.1892927953 0.0000000000 -0.3177398987 0.0000000000\n" " 0.4137876064 -0.8368579090 0.0000000000 -0.5798040681 0.0000000000\n" " 0.1308257425 -0.2914138536 1.0000000000 -0.3759941633 1.0000000000\n" " 3 2 2 1 1\n" " 0.7500000000 1.0000000000\n" "#","\n" "Ar DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 4 2 2\n" " 2.5545614018 0.4141718172 0.0000000000 0.1900119384 0.0000000000\n" " 1.6618834559 -0.1513194180 0.0000000000 -0.3348991938 0.0000000000\n" " 0.5128881676 -0.8416116448 0.0000000000 -0.5845220689 0.0000000000\n" " 0.1605817921 -0.3128170499 1.0000000000 -0.3771344877 1.0000000000\n" " 3 2 2 1 1\n" " 0.8500000000 1.0000000000\n" "#","\n" "K DZVP-GTH-BLYP\n" " 2\n" " 3 0 1 6 3 3\n" " 4.7446150543 0.6776090858 -0.1330438947 0.0000000000 0.0442549261 0.0000000000 0.0000000000\n" " 4.0634061217 -1.0488085165 0.2215127842 0.0000000000 -0.1105968228 0.0000000000 0.0000000000\n" " 1.3597003283 0.1782277656 -0.0238079016 0.0000000000 0.3264615514 0.0000000000 0.0000000000\n" " 0.5555828915 0.8152922135 -0.3671176099 0.0000000000 0.5369026258 0.0000000000 0.0000000000\n" " 0.2069147328 0.2513051410 -0.0812211744 0.0000000000 0.2886757585 1.0000000000 0.0000000000\n" " 0.0314551108 -0.0007525995 1.0760313569 1.0000000000 0.0096972783 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "K DZVP-GTH-BLYP-CONFINED\n" " 2\n" " 3 0 1 6 3 3\n" " 5.0541010987 0.3579755406 -0.0764703445 0.0000000000 0.0214294191 0.0000000000 0.0000000000\n" " 3.9172656623 -0.7279027742 0.1727468706 0.0000000000 -0.0903397463 0.0000000000 0.0000000000\n" " 1.3875920988 0.1617562448 -0.0280980511 0.0000000000 0.3167508594 0.0000000000 0.0000000000\n" " 0.5688300282 0.8136478071 -0.3703988041 0.0000000000 0.5367387047 0.0000000000 0.0000000000\n" " 0.2124883615 0.2680905299 -0.1358924595 0.0000000000 0.2992577807 1.0000000000 0.0000000000\n" " 0.0365517013 -0.0006990076 1.1057124282 1.0000000000 0.0115831023 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0741000000 1.0000000000\n" "#","\n" "# Titanium\n" "# \n" "# Z(nuc) = 22\n" "# Z(eff) = 12\n" "# E(ref) = -57.936907 a.u.\n" "# \n" "Ti DZV-GTH-BLYP\n" " 1\n" " 3 0 2 6 3 2 2\n" " 7.7577063940 -0.0020221836 0.0007040530 0.0000000000 -0.1128549787 0.0000000000 0.0514577128 -0.0296043049\n" " 3.9130950485 -0.4886848871 0.1358104132 0.0000000000 0.1055473912 0.0000000000 0.1904588963 -0.1242820460\n" " 1.5201082969 0.6401079822 -0.2125240090 0.0000000000 0.5200032209 0.0000000000 0.3308521630 -0.2103629080\n" " 0.5931432380 0.6699336988 -0.4587761894 0.0000000000 0.4712945273 0.0000000000 0.3789723974 -0.2097314556\n" " 0.2016337402 0.0458870927 0.2236504805 0.0000000000 0.0769848218 1.0000000000 0.3321693836 0.2301712912\n" " 0.0555239732 -0.0006070586 0.9681970919 1.0000000000 -0.0038977980 0.0000000000 0.1083505565 0.8189372496\n" "#","\n" "# Barium\n" "# \n" "# Z(nuc) = 56\n" "# Z(eff) = 10\n" "# E(ref) = -25.242058 a.u.\n" "# \n" "Ba SZV-GTH-BLYP\n" " 1\n" " 5 0 1 3 2 1\n" " 1.4209812500 -0.5031736249 -0.2251634082 -0.1405229393\n" " 0.3546440900 1.2590856152 0.8249457612 1.0335378927\n" " 0.0425115800 0.0618835363 -1.1709205133 0.1096101386\n" "#","\n" "# Hydrogen\n" "# \n" "# Z(nuc) = 1\n" "# Z(eff) = 1\n" "# E(ref) = -0.387060 a.u. (DZV)\n" "# \n" "H DZV-GTH-PBE\n" " 1\n" " 1 0 0 4 2\n" " 8.4486934208 -0.0290463773 0.0000000000\n" " 1.8581649215 -0.1327955318 0.0000000000\n" " 0.5076108225 -0.4061407363 0.0000000000\n" " 0.1673904511 -0.5490803703 1.0000000000\n" "#","\n" "H DZVP-GTH-PBE\n" " 2\n" " 1 0 0 4 2\n" " 8.4486934208 -0.0290463773 0.0000000000\n" " 1.8581649215 -0.1327955318 0.0000000000\n" " 0.5076108225 -0.4061407363 0.0000000000\n" " 0.1673904511 -0.5490803703 1.0000000000\n" " 2 1 1 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "# Carbon\n" "# \n" "# Z(nuc) = 6\n" "# Z(eff) = 4\n" "# E(ref) = -5.357012 a.u. (DZV)\n" "# \n" "C DZVP-GTH-PBE\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3657614966 0.1476030280 0.0000000000 -0.0864171061 0.0000000000\n" " 1.2749626469 -0.0210014779 0.0000000000 -0.2743211800 0.0000000000\n" " 0.4052884311 -0.7098993929 0.0000000000 -0.4772572587 0.0000000000\n" " 0.1172717248 -0.3801259461 1.0000000000 -0.4035098365 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "# Nitrogen\n" "# \n" "# Z(nuc) = 7\n" "# Z(eff) = 5\n" "# E(ref) = -9.642007 a.u. (DZV)\n" "# \n" "N DZVP-GTH-PBE\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1646187898 0.1507499417 0.0000000000 -0.0938164220 0.0000000000\n" " 1.8037211883 -0.0339053520 0.0000000000 -0.2912161121 0.0000000000\n" " 0.5658506122 -0.7128963473 0.0000000000 -0.4795028541 0.0000000000\n" " 0.1603297607 -0.3703029459 1.0000000000 -0.3849298984 1.0000000000\n" " 3 2 2 1 1\n" " 0.7000000000 1.0000000000\n" "#","\n" "# Oxygen\n" "# \n" "# Z(nuc) = 8\n" "# Z(eff) = 6\n" "# E(ref) = -15.773873 a.u. (DZV)\n" "# \n" "O DZVP-GTH-PBE\n" " 2\n" " 2 0 1 4 2 2\n" " 8.2968917719 0.1521363234 0.0000000000 -0.0985730287 0.0000000000\n" " 2.4314066255 -0.0407682329 0.0000000000 -0.3018606942 0.0000000000\n" " 0.7547606612 -0.7133526943 0.0000000000 -0.4800913367 0.0000000000\n" " 0.2102342150 -0.3666620394 1.0000000000 -0.3745464613 1.0000000000\n" " 3 2 2 1 1\n" " 0.8000000000 1.0000000000\n" "#","\n" "# Magnesium\n" "# \n" "# Z(nuc) = 12\n" "# Z(eff) = 10\n" "# E(ref) = -63.225154 a.u. (DZV)\n" "# \n" "Mg DZVP-GTH-PBE-q10 DZVP-GTH-PBE\n" " 2\n" " 2 0 1 6 3 3\n" " 28.2523693585 -0.0714106769 0.0169520109 0.0000000000 0.0508396337 0.0000000000 0.0000000000\n" " 11.3902578811 -0.1643154146 0.0358612451 0.0000000000 0.1704940251 0.0000000000 0.0000000000\n" " 4.2988917455 0.2636167334 -0.0572539076 0.0000000000 0.3626339588 0.0000000000 0.0000000000\n" " 1.5759918035 0.6448595194 -0.2521366266 0.0000000000 0.4306062033 0.0000000000 0.0000000000\n" " 0.5613579735 0.2752673720 -0.0973472023 0.0000000000 0.2152016385 1.0000000000 0.0000000000\n" " 0.0754606217 -0.0003305902 1.0641066589 1.0000000000 0.0081228668 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "# Magnesium\n" "# \n" "# all radii fixed to 0.18\n" "# \n" "# Z(nuc) = 12\n" "# Z(eff) = 10\n" "# E(ref) = -62.588650 a.u. (DZV)\n" "# \n" "Mg DZV-GTH-PBE-q10-soft\n" " 2\n" " 2 0 1 6 3 3\n" " 18.8104523828 -0.1661468987 0.0354167535 0.0000000000 0.0566689026 0.0000000000 0.0000000000\n" " 8.2318014002 -0.0567549189 0.0064682696 0.0000000000 0.2254152529 0.0000000000 0.0000000000\n" " 3.1566348611 0.4035375328 -0.0939726004 0.0000000000 0.4018442569 0.0000000000 0.0000000000\n" " 1.2110282519 0.6033695127 -0.2761377801 0.0000000000 0.3834403179 0.0000000000 0.0000000000\n" " 0.4518289787 0.1550065597 -0.0102084295 1.0000000000 0.1456919835 1.0000000000 0.0000000000\n" " 0.0733999314 -0.0006466925 1.0489008353 0.0000000000 0.0034002162 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "# Magnesium\n" "# \n" "# Z(nuc) = 12\n" "# Z(eff) = 2\n" "# E(ref) = -0.826790 a.u. (DZV)\n" "# \n" "Mg DZVP-GTH-PBE-q2\n" " 2\n" " 3 0 0 4 2\n" " 1.4682667137 0.0219081251 0.0000000000\n" " 0.6661420794 0.1894369669 0.0000000000\n" " 0.1116164481 -0.6758108328 0.0000000000\n" " 0.0398960535 -0.4565650195 1.0000000000\n" " 3 1 1 1 1\n" " 0.2000000000 1.0000000000\n" "#","\n" "# Silicon\n" "# \n" "# Z(nuc) = 14\n" "# Z(eff) = 4\n" "# E(ref) = -3.739451 a.u. (DZV)\n" "# \n" "Si DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.1815290892 0.3214648125 0.0000000000 0.0458533253 0.0000000000\n" " 0.4454622072 -0.2454343061 0.0000000000 -0.2633419994 0.0000000000\n" " 0.1674585747 -0.7952663455 0.0000000000 -0.5433222352 0.0000000000\n" " 0.0564288769 -0.1828967955 1.0000000000 -0.3560783416 1.0000000000\n" " 3 2 2 1 1\n" " 0.4500000000 1.0000000000\n" "#","\n" "# Phosphorus\n" "# \n" "# Z(nuc) = 15\n" "# Z(eff) = 5\n" "# E(ref) = -6.396285 a.u. (DZV)\n" "# \n" "P DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4802317376 0.3584488109 0.0000000000 0.0813818902 0.0000000000\n" " 0.6986713896 -0.1974902111 0.0000000000 -0.2594593013 0.0000000000\n" " 0.2410963537 -0.8300256683 0.0000000000 -0.5714822479 0.0000000000\n" " 0.0788943128 -0.2268703009 1.0000000000 -0.3611947554 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "# Sulfur\n" "# \n" "# Z(nuc) = 16\n" "# Z(eff) = 6\n" "# E(ref) = -10.064918 a.u. (DZV)\n" "# \n" "S DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 2 2\n" " 1.8210130043 0.3787811739 0.0000000000 0.1262123760 0.0000000000\n" " 1.0326142421 -0.1527118831 0.0000000000 -0.2717532297 0.0000000000\n" " 0.3304499316 -0.8445546077 0.0000000000 -0.5856508153 0.0000000000\n" " 0.1058215004 -0.2742356178 1.0000000000 -0.3747165087 1.0000000000\n" " 3 2 2 1 1\n" " 0.6500000000 1.0000000000\n" "#","\n" "# Calcium\n" "# \n" "# Z(nuc) = 20\n" "# Z(eff) = 10\n" "# E(ref) = -36.615304 a.u. (DZV)\n" "# \n" "Ca DZVP-GTH-PBE-q10 DZVP-GTH-PBE\n" " 2\n" " 3 0 1 4 3 2\n" " 2.8342212933 0.6441471192 0.2090958309 0.0000000000 0.1692254340 0.0000000000\n" " 1.4833415585 -0.6848623428 -0.2618151665 0.0000000000 -0.5926970057 0.0000000000\n" " 0.4519073282 -0.8089853788 -0.4137067900 0.0000000000 -0.6168657871 0.0000000000\n" " 0.0502772140 -0.0131335018 1.1126219713 1.0000000000 -0.0361141736 1.0000000000\n" " 3 2 2 1 1\n" " 0.1088000000 1.0000000000\n" "#","\n" "Au TZ-GTH\n" " 1\n" " 1 0 2 6 3 3 3\n" " 3.333 -0.2996385052 -0.0253458759 -0.0505901975 0.047560000000 0.0233626853 -0.0684498204 -0.0411742318 -0.0069631085 -0.0874460677\n" " 1.582 -0.0735011750 0.0529347225 0.3174596863 -0.10200000000 -0.0112096790 0.3475804049 1.1908036284 0.7214138304 1.5934218487\n" " .7514 3.4198421760 0.0063068212 -1.0018695196 0.002000000 -0.1543550102 -0.9013800582 1.4081117116 1.000000000 1.2910850825\n" " .3568 1.000000000 -0.3216103136 1.00000000000 -0.3480000000 -0.1918211838 1.0 1.000000000 0.7172330126 1.000000000\n" " .1694 -7.5936501839 1.000000000 -0.4219772167 0.9589000000 1.000000000 -0.4056275576 0.6305837811 -0.1109815597 3.2469320583\n" " .0804 -1.4837051517 0.1624309950 1.6448580273 1.0000000000 -0.1069487306 0.4438513365 0.0688923738 -1.0201823698 -2.0909150178\n" "#","\n" "H TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 1 0 0 4 3\n" " 8.5926819670 -0.0253743372 0.0000000000 0.0\n" " 1.8741624886 -0.1423057735 0.0000000000 0.0\n" " 0.5105244224 -0.2688793627 0.0000000000 1.0\n" " 0.1671584984 -0.6811381593 1.0000000000 0.0\n" " 2 1 1 1 1\n" " 3.0000 1.0\n" " 2 1 1 1 1\n" " 0.7500 1.0\n" " 2 1 1 1 1\n" " 0.1875 1.0\n" " 3 2 2 1 1\n" " 1.0000 1.0\n" " 1 0 0 1 1\n" " 0.0360 1.0\n" "#","\n" "He TZVDD3DF3PD-GTH-BLYP\n" " 5\n" " 1 0 0 4 3\n" " 11.1193917922 -0.0770450237 0.0000000000 0.0\n" " 2.7858130727 -0.2506337219 0.0000000000 0.0\n" " 0.7622149528 -0.4810430873 0.0000000000 1.0\n" " 0.2069465438 -0.3647148361 1.0000000000 0.0\n" " 2 1 1 1 1\n" " 3.0000 1.0\n" " 2 1 1 1 1\n" " 0.7500 1.0\n" " 2 1 1 1 1\n" " 0.1875 1.0\n" " 3 2 2 1 1\n" " 2.0000 1.0\n" "#","\n" "Li TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 6 5 3\n" " 9.2302808251 0.1415242446 -0.0269136246 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 4.3944449344 0.2843546506 -0.0528260176 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 1.4510059930 0.4411787547 -0.1332651028 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 0.5085373954 0.2629872002 -0.0961377531 0.0000000000 0.0 1.0 0.0 0.0 1.0\n" " 0.0767907273 0.0115877019 0.5683374551 0.0000000000 1.0 0.0 0.0 1.0 0.0\n" " 0.0261032845 -0.0035737781 0.5290064307 1.0000000000 0.0 0.0 1.0 0.0 0.0\n" " 3 2 2 1 1\n" " 0.8000 1.0\n" " 3 2 2 1 1\n" " 0.2000 1.0\n" " 3 2 2 1 1\n" " 0.0500 1.0\n" " 4 3 3 1 1\n" " 0.1500 1.0\n" " 2 0 1 1 1 1\n" " 0.0074 1.0 1.0\n" "#","\n" "Be TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 1 0 1 6 5 3\n" " 16.7422288908 0.0966449867 -0.0233351760 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 8.5397710546 0.3229144731 -0.0609785084 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 2.8008728446 0.4309094768 -0.1582208472 0.0000000000 0.0 0.0 0.0 0.0 0.0\n" " 1.0279668171 0.2665960365 -0.0996495616 0.0000000000 0.0 1.0 0.0 0.0 1.0\n" " 0.1816198908 0.0129440911 0.5661714027 0.0000000000 1.0 0.0 0.0 1.0 0.0\n" " 0.0575318884 -0.0033470492 0.5467939201 1.0000000000 0.0 0.0 1.0 0.0 0.0\n" " 3 2 2 1 1\n" " 1.02000 1.0\n" " 3 2 2 1 1\n" " 0.25500 1.0\n" " 3 2 2 1 1\n" " 0.06375 1.0\n" " 4 3 3 1 1\n" " 0.26000 1.0\n" " 2 0 1 1 1 1\n" " 0.0207 1.0 1.0\n" "#","\n" "B TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 2.8461657736 0.1478743320 0.0000000000 0.0 -0.0780482479 0.0000000000 0.0\n" " 0.8351785230 -0.0200254137 0.0000000000 0.0 -0.2557970914 0.0000000000 0.0\n" " 0.2702560177 -0.6820892853 0.0000000000 1.0 -0.4542195946 0.0000000000 1.0\n" " 0.0805636848 -0.4080927351 1.0000000000 0.0 -0.4455266641 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 1.60400 1.0\n" " 3 2 2 1 1\n" " 0.40100 1.0\n" " 3 2 2 1 1\n" " 0.10025 1.0\n" " 4 3 3 1 1\n" " 0.50000 1.0\n" " 2 0 1 1 1 1\n" " 0.03150 1.0 1.0\n" "#","\n" "C TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 4.3451975957 0.1511172750 0.0000000000 0.0 -0.0883417890 0.0000000000 0.0\n" " 1.2765552224 -0.0330272512 0.0000000000 0.0 -0.2797032766 0.0000000000 0.0\n" " 0.4047139801 -0.6994401873 0.0000000000 1.0 -0.4686400677 0.0000000000 1.0\n" " 0.1166096360 -0.3842706677 1.0000000000 0.0 -0.4085514115 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 2.50400 1.0\n" " 3 2 2 1 1\n" " 0.62600 1.0\n" " 3 2 2 1 1\n" " 0.15650 1.0\n" " 4 3 3 1 1\n" " 0.80000 1.0\n" " 2 0 1 1 1 1\n" " 0.04380 1.0 1.0\n" "#","\n" "N TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 6.1514293421 0.1529382304 0.0000000000 0.0 -0.0952593918 0.0000000000 0.0\n" " 1.8080207176 -0.0415737876 0.0000000000 0.0 -0.2946953365 0.0000000000 0.0\n" " 0.5656159036 -0.7060780663 0.0000000000 1.0 -0.4740427661 0.0000000000 1.0\n" " 0.1593207770 -0.3734107042 1.0000000000 0.0 -0.3884930037 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 3.65200 1.0\n" " 3 2 2 1 1\n" " 0.91300 1.0\n" " 3 2 2 1 1\n" " 0.22825 1.0\n" " 4 3 3 1 1\n" " 1.00000 1.0\n" " 2 0 1 1 1 1\n" " 0.06390 1.0 1.0\n" "#","\n" "O TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 8.2783332000 0.1537128043 0.0000000000 0.0 -0.1000437084 0.0000000000 0.0\n" " 2.4319182697 -0.0468575728 0.0000000000 0.0 -0.3046718654 0.0000000000 0.0\n" " 0.7530401707 -0.7092306221 0.0000000000 1.0 -0.4764866041 0.0000000000 1.0\n" " 0.2084649705 -0.3678036990 1.0000000000 0.0 -0.3764915728 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 5.16000 1.0\n" " 3 2 2 1 1\n" " 1.29200 1.0\n" " 3 2 2 1 1\n" " 0.33250 1.0\n" " 4 3 3 1 1\n" " 1.40000 1.0\n" " 2 0 1 1 1 1\n" " 0.08450 1.0 1.0\n" "#","\n" "F TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 10.7284760684 0.1539953252 0.0000000000 0.0 -0.1034591141 0.0000000000 0.0\n" " 3.1496622427 -0.0503062083 0.0000000000 0.0 -0.3116781877 0.0000000000 0.0\n" " 0.9671794608 -0.7107682323 0.0000000000 1.0 -0.4776960745 0.0000000000 1.0\n" " 0.2640315133 -0.3648266470 1.0000000000 0.0 -0.3688578623 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 7.00000 1.0\n" " 3 2 2 1 1\n" " 1.75000 1.0\n" " 3 2 2 1 1\n" " 0.43750 1.0\n" " 4 3 3 1 1\n" " 1.85000 1.0\n" " 2 0 1 1 1 1\n" " 0.10760 1.0 1.0\n" "#","\n" "Ne TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 4 3 3\n" " 13.5711021582 0.1528118547 0.0000000000 0.0 -0.1055093745 0.0000000000 0.0\n" " 3.9754062896 -0.0499228626 0.0000000000 0.0 -0.3161557844 0.0000000000 0.0\n" " 1.2121681091 -0.7116163527 0.0000000000 1.0 -0.4784388183 0.0000000000 1.0\n" " 0.3268420958 -0.3647465749 1.0000000000 0.0 -0.3648062165 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 9.21600 1.0\n" " 3 2 2 1 1\n" " 2.30400 1.0\n" " 3 2 2 1 1\n" " 0.57600 1.0\n" " 4 3 3 1 1\n" " 2.50000 1.0\n" " 2 0 1 1 1 1\n" " 0.13000 1.0 1.0\n" "#","\n" "Na TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 6 5 5\n" " 24.4106415968 -0.0437913152 0.0091786765 0.0000000000 0.0 0.0 0.0412394777 0.0000000000 0.0000000000 0.0 0.0\n" " 9.9296107008 -0.2028236387 0.0363180981 0.0000000000 0.0 0.0 0.1340487332 0.0000000000 0.0000000000 0.0 0.0\n" " 3.6565524838 0.2429179955 -0.0394753287 0.0000000000 0.0 0.0 0.3537211057 0.0000000000 0.0000000000 0.0 1.0\n" " 1.2695832879 0.6645538239 -0.2078727830 0.0000000000 0.0 1.0 0.4486246648 0.0000000000 0.0000000000 1.0 0.0\n" " 0.4165172455 0.2885738064 -0.0972810085 0.0000000000 1.0 0.0 0.2617452725 1.0000000000 0.0000000000 0.0 0.0\n" " 0.0447862002 -0.0015791358 1.0489993368 1.0000000000 0.0 0.0 0.0111532456 0.0000000000 1.0000000000 0.0 0.0\n" " 3 2 2 1 1\n" " 0.70000 1.0\n" " 3 2 2 1 1\n" " 0.17500 1.0\n" " 3 2 2 1 1\n" " 0.04375 1.0\n" " 4 3 3 1 1\n" " 0.15000 1.0\n" " 2 0 1 1 1 1\n" " 0.00760 1.0 1.0\n" "#","\n" "Mg TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 2 0 1 6 5 5\n" " 26.6684192078 -0.0843827177 0.0209137976 0.0000000000 0.0 0.0 0.0574690984 0.0000000000 0.0000000000 0.0 0.0\n" " 10.6278914168 -0.1540012185 0.0328904567 0.0000000000 0.0 0.0 0.1834886260 0.0000000000 0.0000000000 0.0 0.0\n" " 4.0257536169 0.3069950002 -0.0656366632 0.0000000000 0.0 0.0 0.3728084155 0.0000000000 0.0000000000 1.0 0.0\n" " 1.4729826270 0.6341736453 -0.2789230951 0.0000000000 0.0 1.0 0.4211046995 0.0000000000 0.0000000000 0.0 1.0\n" " 0.5301398986 0.2463411075 -0.0573174800 0.0000000000 1.0 0.0 0.1968486915 1.0000000000 0.0000000000 0.0 0.0\n" " 0.0755213250 -0.0010479306 1.0561246927 1.0000000000 0.0 0.0 0.0067129918 0.0000000000 1.0000000000 0.0 0.0\n" " 3 2 2 1 1\n" " 0.70000 1.0\n" " 3 2 2 1 1\n" " 0.17500 1.0\n" " 3 2 2 1 1\n" " 0.04375 1.0\n" " 4 3 3 1 1\n" " 0.20000 1.0\n" " 2 0 1 1 1 1\n" " 0.01460 1.0 1.0\n" "#","\n" "Al TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 0.9040202750 0.2819459889 0.0000000000 0.0 0.0202901873 0.0000000000 0.0\n" " 0.2716888904 -0.3565936829 0.0000000000 0.0 -0.2865844984 0.0000000000 0.0\n" " 0.1038208154 -0.7126726101 0.0000000000 1.0 -0.4993035494 0.0000000000 1.0\n" " 0.0361219503 -0.1315446458 1.0000000000 0.0 -0.3664719249 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 1.30000 1.0\n" " 3 2 2 1 1\n" " 0.32500 1.0\n" " 3 2 2 1 1\n" " 0.08125 1.0\n" " 4 3 3 1 1\n" " 0.25000 1.0\n" " 2 0 1 1 1 1\n" " 0.03180 1.0 1.0\n" "#","\n" "Si TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 1.1607523260 0.3347731757 0.0000000000 0.0 0.0434283150 0.0000000000 0.0\n" " 0.4367408478 -0.3093572718 0.0000000000 0.0 -0.2863246710 0.0000000000 0.0\n" " 0.1596639467 -0.7662114250 0.0000000000 1.0 -0.5309372647 0.0000000000 1.0\n" " 0.0542076476 -0.1654691868 1.0000000000 0.0 -0.3502990755 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 1.80000 1.0\n" " 3 2 2 1 1\n" " 0.45000 1.0\n" " 3 2 2 1 1\n" " 0.11250 1.0\n" " 4 3 3 1 1\n" " 0.32000 1.0\n" " 2 0 1 1 1 1\n" " 0.03310 1.0 1.0\n" "#","\n" "P TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 1.4438479448 0.3786128496 0.0000000000 0.0 0.0768556482 0.0000000000 0.0\n" " 0.6655205239 -0.2651542911 0.0000000000 0.0 -0.2851732159 0.0000000000 0.0\n" " 0.2306279229 -0.8037940077 0.0000000000 1.0 -0.5540528446 0.0000000000 1.0\n" " 0.0761045314 -0.2088239606 1.0000000000 0.0 -0.3549348725 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 2.20000 1.0\n" " 3 2 2 1 1\n" " 0.55000 1.0\n" " 3 2 2 1 1\n" " 0.13750 1.0\n" " 4 3 3 1 1\n" " 0.45000 1.0\n" " 2 0 1 1 1 1\n" " 0.03480 1.0 1.0\n" "#","\n" "S TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 1.7644177483 0.4114656852 0.0000000000 0.0 0.1207217819 0.0000000000 0.0\n" " 0.9717752574 -0.2250656540 0.0000000000 0.0 -0.2949379210 0.0000000000 0.0\n" " 0.3174012156 -0.8265244883 0.0000000000 1.0 -0.5702721181 0.0000000000 1.0\n" " 0.1021260036 -0.2549919207 1.0000000000 0.0 -0.3673119254 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 2.60000 1.0\n" " 3 2 2 1 1\n" " 0.65000 1.0\n" " 3 2 2 1 1\n" " 0.16250 1.0\n" " 4 3 3 1 1\n" " 0.55000 1.0\n" " 2 0 1 1 1 1\n" " 0.04050 1.0 1.0\n" "#","\n" "Cl TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 2.1331287798 0.4248059842 0.0000000000 0.0 0.1653685236 0.0000000000 0.0\n" " 1.3235903746 -0.1892927953 0.0000000000 0.0 -0.3177398987 0.0000000000 0.0\n" " 0.4137876064 -0.8368579090 0.0000000000 1.0 -0.5798040681 0.0000000000 1.0\n" " 0.1308257425 -0.2914138536 1.0000000000 0.0 -0.3759941633 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 3.00000 1.0\n" " 3 2 2 1 1\n" " 0.75000 1.0\n" " 3 2 2 1 1\n" " 0.18750 1.0\n" " 4 3 3 1 1\n" " 0.70000 1.0\n" " 2 0 1 1 1 1\n" " 0.04830 1.0 1.0\n" "#","\n" "Ar TZVDD3DF3PD-GTH-BLYP\n" " 6\n" " 3 0 1 4 3 3\n" " 2.5545614018 0.4141718172 0.0000000000 0.0 0.1900119384 0.0000000000 0.0\n" " 1.6618834559 -0.1513194180 0.0000000000 0.0 -0.3348991938 0.0000000000 0.0\n" " 0.5128881676 -0.8416116448 0.0000000000 1.0 -0.5845220689 0.0000000000 1.0\n" " 0.1605817921 -0.3128170499 1.0000000000 0.0 -0.3771344877 1.0000000000 0.0\n" " 3 2 2 1 1\n" " 3.40000 1.0\n" " 3 2 2 1 1\n" " 0.85000 1.0\n" " 3 2 2 1 1\n" " 0.21250 1.0\n" " 4 3 3 1 1\n" " 0.85000 1.0\n" " 2 0 1 1 1 1\n" " 0.06000 1.0 1.0\n" "#"}; Atomes-GNU-1.1.14/src/calc/cp2k/cp2k_files.c000066400000000000000000000201661457665371200202170ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cp2k_files.c * @short Functions to handle CP2K basis sets and pseudopotentials * @author Sébastien Le Roux */ /* * This file: 'cp2k_files.c' * * Contains: * - The functions to handle CP2K basis sets and pseudopotentials * * List of functions: int cp2k_is_basis_in_database (int sp); int cp2k_is_pseudo_in_database (int sp); int prepare_cp2k_basis_pseudo_list (int sp, int * sp_id, int n_basis_pseudo, char * bp_elem[n_basis_pseudo]); gchar * get_nth_elem (int sp, int id, int obj); gchar * get_nth_key (int sp, int id, int obj); G_MODULE_EXPORT void changed_basis_pseudo_box (GtkComboBox * box, gpointer data); GtkWidget * prepare_basis_combo (int sp, int obj); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "calc.h" #include "cp2k.h" extern GtkWidget * cp2k_spec_combo; /*! \fn gchar * get_nth_elem (int sp, int id, int obj) \brief retrieve basis or pseudopotential name string for element from global list \param sp the chemical species \param id the list element id of 'sp' to find \param obj 0 = basis sets, 1 = pseudopotentials */ gchar * get_nth_elem (int sp, int id, int obj) { int i, j; j = -1; if (obj) { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_pot[i]); } } } } else { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_molopt[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_gth[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", cp2k_basis[i]); } } } } return NULL; } /*! \fn gchar * get_nth_key (int sp, int id, int obj) \brief retrieve basis or pseudopotential key string for element from global list \param sp the chemical species \param id the list element id of 'sp' to find \param obj 0 = basis sets, 1 = pseudopotentials */ gchar * get_nth_key (int sp, int id, int obj) { int i, j; j = -1; if (obj) { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", pot_keys[i]); } } } } else { for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", molopt_keys[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", gth_keys[i]); } } } for (i=0; i chemistry -> label[sp])) == 0) { j++; if (j == id) { return g_strdup_printf ("%s", basis_keys[i]); } } } } return NULL; } /*! \fn int cp2k_is_basis_in_database (int sp) \brief does this chemical species have basis set(s) in store ? \param sp the chemical species */ int cp2k_is_basis_in_database (int sp) { int i; for (i=0; i chemistry -> label[sp])) == 0) return 0; } for (i=0; i chemistry -> label[sp])) == 0) return 0; } for (i=0; i chemistry -> label[sp])) == 0) return 0; } return -1; } /*! \fn int cp2k_is_pseudo_in_database (int sp) \brief does this chemical species have pseudopotential(s) in store ? \param sp the chemical species */ int cp2k_is_pseudo_in_database (int sp) { int i; for (i=0; i chemistry -> label[sp])) == 0) return 0; } return -1; } /*! \fn int prepare_cp2k_basis_pseudo_list (int sp, int * sp_id, int n_basis_pseudo, char * bp_elem[n_basis_pseudo]) \brief find matching chemical element in basis / pseudo database \param sp the chemical species \param sp_id the list of entries to save \param n_basis_pseudo the number of element(s) to check \param bp_elem the string list to check */ int prepare_cp2k_basis_pseudo_list (int sp, int * sp_id, int n_basis_pseudo, char * bp_elem[n_basis_pseudo]) { int i, j; j = 0; for (i=0; i chemistry -> label[sp])) == 0) { j ++; sp_id[j-1] = i; } } return j; } /*! \fn G_MODULE_EXPORT void changed_basis_pseudo_box (GtkComboBox * box, gpointer data) \brief change basis or pseudopotential \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_basis_pseudo_box (GtkComboBox * box, gpointer data) { int i, j, k; i = gtk_combo_box_get_active (GTK_COMBO_BOX(cp2k_spec_combo)); j = GPOINTER_TO_INT(data); k = gtk_combo_box_get_active (box); if (k > -1) { tmp_cp2k -> spec_data[i][j] = k; if (tmp_cp2k -> spec_files[i][j] != NULL) { g_free (tmp_cp2k -> spec_files[i][j]); tmp_cp2k -> spec_files[i][j] = NULL; } } } /*! \fn GtkWidget * prepare_basis_combo (int sp, int obj) \brief prepare basis set / pseudopotential combo box \param sp the chemical species \param obj 0 = basis, 1 = pseudopotentials */ GtkWidget * prepare_basis_combo (int sp, int obj) { int i, j; GtkWidget * widg = create_combo (); int * sp_id = g_malloc0 (100*sizeof*sp_id); if (obj) { i = prepare_cp2k_basis_pseudo_list (sp, sp_id, N_POTS, pot_elem); if (i > 0) { for (j=0; j 0) { for (j=0; j 0) { for (j=0; j 0) { for (j=0; j spec_files[sp][obj] == NULL) { gtk_combo_box_set_active (GTK_COMBO_BOX(widg), tmp_cp2k -> spec_data[sp][obj]); } else { widget_set_sensitive (widg, FALSE); } g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_basis_pseudo_box), GINT_TO_POINTER(obj)); return widg; } Atomes-GNU-1.1.14/src/calc/cp2k/cp2k_gth-basis.c000066400000000000000000004021121457665371200207710ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cp2k_gth-basis.c * @short CP2K GTH basis set, as delivered with CP2K v9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_gth-basis.c' * * Contains: * - CP2K GTH basis set, as delivered with CP2K v9.1 This file contains 3 tables: gth_elem -> the list of chemical elements gth_keys -> the list of keywords cp2k_gth -> finally the complete GTH basis set */ #include "global.h" char * gth_elem[156] = {"H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "H", "He", "He", "He", "He", "He", "He", "He", "Li", "Li", "Li", "Li", "Li", "Li", "Be", "Be", "Be", "Be", "Be", "Be", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "N", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "Ne", "Ne", "Ne", "Ne", "Ne", "Ne", "Na", "Na", "Na", "Na", "Na", "Na", "Mg", "Mg", "Mg", "Mg", "Mg", "Mg", "Al", "Al", "Al", "Al", "Al", "Al", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "Si", "P", "P", "P", "P", "P", "P", "P", "P", "P", "P", "P", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "S", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ar", "Ar", "Ar", "Ar", "Ar", "Ar", "W"}; char * gth_keys[156] = {"SZV-GTH", "DZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "aug-DZVP-GTH", "aug-TZVP-GTH", "aug-TZV2P-GTH", "aug-QZV2P-GTH", "aug-QZV3P-GTH", "SZV-GTH", "DZVP-GTH", "TZVP-GTH", "TZV2P-GTH", "QZV2P-GTH", "QZV3P-GTH", "DZVP-GTH"}; char * cp2k_gth[156] = {"\n" "H SZV-GTH-q1 SZV-GTH\n" " 1\n" " 1 0 0 4 1\n" " 8.3744350009 -0.0283380461\n" " 1.8058681460 -0.1333810052\n" " 0.4852528328 -0.3995676063\n" " 0.1658236932 -0.5531027541\n" "#","\n" "H DZV-GTH-q1 DZV-GTH\n" " 1\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380461 0.0000000000\n" " 1.8058681460 -0.1333810052 0.0000000000\n" " 0.4852528328 -0.3995676063 0.0000000000\n" " 0.1658236932 -0.5531027541 1.0000000000\n" "#","\n" "H DZVP-GTH-q1 DZVP-GTH\n" " 2\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380461 0.0000000000\n" " 1.8058681460 -0.1333810052 0.0000000000\n" " 0.4852528328 -0.3995676063 0.0000000000\n" " 0.1658236932 -0.5531027541 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" "#","\n" "H TZVP-GTH-q1 TZVP-GTH\n" " 2\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" "#","\n" "H TZV2P-GTH-q1 TZV2P-GTH\n" " 2\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" "#","\n" "H QZV2P-GTH-q1 QZV2P-GTH\n" " 2\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" "#","\n" "H QZV3P-GTH-q1 QZV3P-GTH\n" " 2\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 3 3\n" " 2.2920000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.8380000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2920000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "H aug-DZVP-GTH-q1 aug-DZVP-GTH\n" " 4\n" " 1 0 0 4 2\n" " 8.3744350009 -0.0283380461 0.0000000000\n" " 1.8058681460 -0.1333810052 0.0000000000\n" " 0.4852528328 -0.3995676063 0.0000000000\n" " 0.1658236932 -0.5531027541 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.0297400000 1.0000000000\n" " 3 1 1 1 1\n" " 0.1410000000 1.0000000000\n" "#","\n" "H aug-TZVP-GTH-q1 aug-TZVP-GTH\n" " 4\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 0.7270000000 1.0000000000\n" " 4 0 0 1 1\n" " 0.0252600000 1.0000000000\n" " 3 1 1 1 1\n" " 0.1020000000 1.0000000000\n" "#","\n" "H aug-TZV2P-GTH-q1 aug-TZV2P-GTH\n" " 4\n" " 1 0 0 5 3\n" " 10.8827241585 -0.0167058885 0.0000000000 0.0000000000\n" " 3.0968750876 -0.0627538300 0.0000000000 0.0000000000\n" " 0.9874518162 -0.1917521975 0.0000000000 0.0000000000\n" " 0.3450687533 -0.4173635232 1.0000000000 0.0000000000\n" " 0.1492693554 -0.4270508887 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" " 4 0 0 1 1\n" " 0.0252600000 1.0000000000\n" " 4 1 1 1 1\n" " 0.1020000000 1.0000000000\n" "#","\n" "H aug-QZV2P-GTH-q1 aug-QZV2P-GTH\n" " 4\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 1.4070000000 1.0000000000 0.0000000000\n" " 0.3880000000 0.0000000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0236300000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0848000000 1.0000000000\n" "#","\n" "H aug-QZV3P-GTH-q1 aug-QZV3P-GTH\n" " 4\n" " 1 0 0 6 4\n" " 12.5350945530 0.0114321687 0.0000000000 0.0000000000 0.0000000000\n" " 4.5491539489 0.0344048283 0.0000000000 0.0000000000 0.0000000000\n" " 1.6685193606 0.1007746979 0.0000000000 0.0000000000 0.0000000000\n" " 0.6523849556 0.2302169182 1.0000000000 0.0000000000 0.0000000000\n" " 0.2733011244 0.4067637930 0.0000000000 1.0000000000 0.0000000000\n" " 0.1390608890 0.3322841300 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 3 3\n" " 2.2920000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.8380000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2920000000 0.0000000000 0.0000000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0236300000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0848000000 1.0000000000\n" "#","\n" "He SZV-GTH-q2 SZV-GTH\n" " 1\n" " 1 0 0 5 1\n" " 13.1305278312 -0.0500802904\n" " 4.1977275150 -0.1474339352\n" " 1.3647725570 -0.3245281495\n" " 0.4549715461 -0.4365284986\n" " 0.1513197845 -0.2164629317\n" "#","\n" "He DZV-GTH-q2 DZV-GTH\n" " 1\n" " 1 0 0 5 2\n" " 13.1305278312 -0.0500802904 0.0000000000\n" " 4.1977275150 -0.1474339352 0.0000000000\n" " 1.3647725570 -0.3245281495 0.0000000000\n" " 0.4549715461 -0.4365284986 0.0000000000\n" " 0.1513197845 -0.2164629317 1.0000000000\n" "#","\n" "He DZVP-GTH-q2 DZVP-GTH\n" " 2\n" " 1 0 0 5 2\n" " 13.1305278312 -0.0500802904 0.0000000000\n" " 4.1977275150 -0.1474339352 0.0000000000\n" " 1.3647725570 -0.3245281495 0.0000000000\n" " 0.4549715461 -0.4365284986 0.0000000000\n" " 0.1513197845 -0.2164629317 1.0000000000\n" " 2 1 1 1 1\n" " 1.2750000000 1.0000000000\n" "#","\n" "He TZVP-GTH-q2 TZVP-GTH\n" " 2\n" " 1 0 0 6 3\n" " 14.9231368362 0.0343142688 0.0000000000 0.0000000000\n" " 5.9479610723 0.0933152472 0.0000000000 0.0000000000\n" " 2.1932485067 0.2143451850 0.0000000000 0.0000000000\n" " 0.8304881034 0.3500759421 0.0000000000 0.0000000000\n" " 0.3182586587 0.3570840512 1.0000000000 0.0000000000\n" " 0.1197839846 0.1270021790 0.0000000000 1.0000000000\n" " 2 1 1 1 1\n" " 1.2750000000 1.0000000000\n" "#","\n" "He TZV2P-GTH-q2 TZV2P-GTH\n" " 2\n" " 1 0 0 6 3\n" " 14.9231368362 0.0343142688 0.0000000000 0.0000000000\n" " 5.9479610723 0.0933152472 0.0000000000 0.0000000000\n" " 2.1932485067 0.2143451850 0.0000000000 0.0000000000\n" " 0.8304881034 0.3500759421 0.0000000000 0.0000000000\n" " 0.3182586587 0.3570840512 1.0000000000 0.0000000000\n" " 0.1197839846 0.1270021790 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 3.0440000000 1.0000000000 0.0000000000\n" " 0.7580000000 0.0000000000 1.0000000000\n" "#","\n" "He QZV2P-GTH-q2 QZV2P-GTH\n" " 2\n" " 1 0 0 7 4\n" " 16.7962354569 -0.0217345796 0.0000000000 0.0000000000 0.0000000000\n" " 8.0784265748 -0.0637981790 0.0000000000 0.0000000000 0.0000000000\n" " 3.2397448253 -0.1438730374 0.0000000000 0.0000000000 0.0000000000\n" " 1.3463173459 -0.2567923947 0.0000000000 0.0000000000 0.0000000000\n" " 0.5669193043 -0.3407783682 1.0000000000 0.0000000000 0.0000000000\n" " 0.2404041556 -0.2752209877 0.0000000000 1.0000000000 0.0000000000\n" " 0.0990547078 -0.0742573863 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 2 2\n" " 3.0440000000 1.0000000000 0.0000000000\n" " 0.7580000000 0.0000000000 1.0000000000\n" "#","\n" "He QZV3P-GTH-q2 QZV3P-GTH\n" " 2\n" " 1 0 0 7 4\n" " 16.7962354569 -0.0217345796 0.0000000000 0.0000000000 0.0000000000\n" " 8.0784265748 -0.0637981790 0.0000000000 0.0000000000 0.0000000000\n" " 3.2397448253 -0.1438730374 0.0000000000 0.0000000000 0.0000000000\n" " 1.3463173459 -0.2567923947 0.0000000000 0.0000000000 0.0000000000\n" " 0.5669193043 -0.3407783682 1.0000000000 0.0000000000 0.0000000000\n" " 0.2404041556 -0.2752209877 0.0000000000 1.0000000000 0.0000000000\n" " 0.0990547078 -0.0742573863 0.0000000000 0.0000000000 1.0000000000\n" " 2 1 1 3 3\n" " 5.9940000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.7450000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.5600000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Li SZV-GTH-q3 SZV-GTH\n" " 1\n" " 1 0 0 5 2\n" " 7.2610457926 -0.2798628497 0.0501840556\n" " 2.1056583087 -0.4477420790 0.1084202571\n" " 0.6439906571 -0.3912929157 0.1448363201\n" " 0.0797152017 -0.0282408543 -0.4643021689\n" " 0.0294029590 0.0106542324 -0.6220213304\n" "#","\n" "Li DZVP-GTH-q3 DZVP-GTH\n" " 2\n" " 1 0 1 5 3 2\n" " 7.2610457926 -0.2798628497 0.0501840556 0.0000000000 0.0000000000 0.0000000000\n" " 2.1056583087 -0.4477420790 0.1084202571 0.0000000000 0.0000000000 0.0000000000\n" " 0.6439906571 -0.3912929157 0.1448363201 0.0000000000 1.0000000000 0.0000000000\n" " 0.0797152017 -0.0282408543 -0.4643021689 0.0000000000 0.0000000000 1.0000000000\n" " 0.0294029590 0.0106542324 -0.6220213304 1.0000000000 0.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 0.1239000000 1.0000000000\n" "#","\n" "Li TZVP-GTH-q3 TZVP-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 9.0670525492 -0.1411283591 0.0257097367 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3499909489 -0.2767569948 0.0520569091 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4348215636 -0.4501634495 0.1264219750 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.4970537951 -0.2617675690 0.1024067911 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0729943466 -0.0116685753 -0.5635707625 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0264328979 0.0038616721 -0.5290102979 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1239000000 1.0000000000\n" "#","\n" "Li TZV2P-GTH-q3 TZV2P-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 9.0670525492 -0.1411283591 0.0257097367 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 4.3499909489 -0.2767569948 0.0520569091 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.4348215636 -0.4501634495 0.1264219750 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.4970537951 -0.2617675690 0.1024067911 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0729943466 -0.0116685753 -0.5635707625 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0264328979 0.0038616721 -0.5290102979 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1874000000 1.0000000000 0.0000000000\n" " 0.0801000000 0.0000000000 1.0000000000\n" "#","\n" "Li QZV2P-GTH-q3 QZV2P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 11.2399728913 0.0546031957 0.0121121394 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5.9010009273 0.2707752256 0.0442943986 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.1128841305 0.3250518116 0.0864603159 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.9242200694 0.3360526690 0.0982556510 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.3843405136 0.1477938090 0.0724371635 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0745791133 0.0049656060 -0.5608077915 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0266127545 -0.0013302258 -0.5385875662 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1874000000 1.0000000000 0.0000000000\n" " 0.0801000000 0.0000000000 1.0000000000\n" "#","\n" "Li QZV3P-GTH-q3 QZV3P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 11.2399728913 0.0546031957 0.0121121394 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 5.9010009273 0.2707752256 0.0442943986 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.1128841305 0.3250518116 0.0864603159 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.9242200694 0.3360526690 0.0982556510 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.3843405136 0.1477938090 0.0724371635 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0745791133 0.0049656060 -0.5608077915 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0266127545 -0.0013302258 -0.5385875662 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.3440000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1530000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0680000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Be SZV-GTH-q4 SZV-GTH\n" " 1\n" " 1 0 0 5 2\n" " 12.0759365620 -0.2957180545 0.0588372089\n" " 3.8545761940 -0.4334460398 0.1288856096\n" " 1.2504781570 -0.3784683226 0.1550415386\n" " 0.1871714430 -0.0264606251 -0.5160084709\n" " 0.0612757198 0.0081452640 -0.5935732462\n" "#","\n" "Be DZVP-GTH-q4 DZVP-GTH\n" " 2\n" " 1 0 1 5 3 2\n" " 12.0759365620 -0.2957180545 0.0588372089 0.0000000000 0.0000000000 0.0000000000\n" " 3.8545761940 -0.4334460398 0.1288856096 0.0000000000 0.0000000000 0.0000000000\n" " 1.2504781570 -0.3784683226 0.1550415386 0.0000000000 0.0000000000 0.0000000000\n" " 0.1871714430 -0.0264606251 -0.5160084709 0.0000000000 1.0000000000 0.0000000000\n" " 0.0612757198 0.0081452640 -0.5935732462 1.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2380000000 1.0000000000\n" "#","\n" "Be TZVP-GTH-q4 TZVP-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 16.1633017560 0.1058505482 0.0252110810 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.2794656488 0.3142306535 0.0592234829 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.7431462702 0.4327355582 0.1590642952 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0051192904 0.2646375740 0.0970211162 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1765074807 0.0128485143 -0.5606394206 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0580432824 -0.0034494712 -0.5479256813 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2380000000 1.0000000000\n" "#","\n" "Be TZV2P-GTH-q4 TZV2P-GTH\n" " 2\n" " 1 0 1 6 4 3\n" " 16.1633017560 0.1058505482 0.0252110810 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.2794656488 0.3142306535 0.0592234829 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.7431462702 0.4327355582 0.1590642952 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0051192904 0.2646375740 0.0970211162 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1765074807 0.0128485143 -0.5606394206 1.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0580432824 -0.0034494712 -0.5479256813 0.0000000000 1.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3480000000 1.0000000000 0.0000000000\n" " 0.1803000000 0.0000000000 1.0000000000\n" "#","\n" "Be QZV2P-GTH-q4 QZV2P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 16.8878782250 -0.0871781047 -0.0213560020 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.7399964830 -0.3154557784 -0.0594803584 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.9043390390 -0.4227762231 -0.1487687019 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0791842760 -0.2848246813 -0.1164217493 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.2337917550 -0.0252413708 0.2786030195 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1037025890 0.0110215162 0.5642008017 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0421510390 -0.0028677576 0.2754009863 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3480000000 1.0000000000 0.0000000000\n" " 0.1803000000 0.0000000000 1.0000000000\n" "#","\n" "Be QZV3P-GTH-q4 QZV3P-GTH\n" " 2\n" " 1 0 1 7 5 4\n" " 16.8878782250 -0.0871781047 -0.0213560020 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 8.7399964830 -0.3154557784 -0.0594803584 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 2.9043390390 -0.4227762231 -0.1487687019 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 1.0791842760 -0.2848246813 -0.1164217493 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000\n" " 0.2337917550 -0.0252413708 0.2786030195 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1037025890 0.0110215162 0.5642008017 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0421510390 -0.0028677576 0.2754009863 0.0000000000 0.0000000000 1.0000000000 0.0000000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.0720000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4410000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1811000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "B SZV-GTH-q3 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 2.8854084023 0.1420731829 -0.0759815770\n" " 0.8566849689 -0.0083257749 -0.2508281584\n" " 0.2712991753 -0.6707104603 -0.4610296144\n" " 0.0826101984 -0.4241277148 -0.4419922734\n" "#","\n" "B DZVP-GTH-q3 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 2.8854084023 0.1420731829 0.0000000000 -0.0759815770 0.0000000000\n" " 0.8566849689 -0.0083257749 0.0000000000 -0.2508281584 0.0000000000\n" " 0.2712991753 -0.6707104603 0.0000000000 -0.4610296144 0.0000000000\n" " 0.0826101984 -0.4241277148 1.0000000000 -0.4419922734 1.0000000000\n" " 3 2 2 1 1\n" " 0.3430000000 1.0000000000\n" "#","\n" "B TZVP-GTH-q3 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 3.5725567849 0.0919963366 0.0000000000 0.0000000000 -0.0431808210 0.0000000000 0.0000000000\n" " 1.3258097706 0.1075235422 0.0000000000 0.0000000000 -0.1511855730 0.0000000000 0.0000000000\n" " 0.4583887751 -0.3415470752 0.0000000000 0.0000000000 -0.3429313866 0.0000000000 0.0000000000\n" " 0.1620866416 -0.6439245174 1.0000000000 0.0000000000 -0.4414563660 1.0000000000 0.0000000000\n" " 0.0559199264 -0.1753147308 0.0000000000 1.0000000000 -0.2681154092 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3430000000 1.0000000000\n" "#","\n" "B TZV2P-GTH-q3 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 3.5725567849 0.0919963366 0.0000000000 0.0000000000 -0.0431808210 0.0000000000 0.0000000000\n" " 1.3258097706 0.1075235422 0.0000000000 0.0000000000 -0.1511855730 0.0000000000 0.0000000000\n" " 0.4583887751 -0.3415470752 0.0000000000 0.0000000000 -0.3429313866 0.0000000000 0.0000000000\n" " 0.1620866416 -0.6439245174 1.0000000000 0.0000000000 -0.4414563660 1.0000000000 0.0000000000\n" " 0.0559199264 -0.1753147308 0.0000000000 1.0000000000 -0.2681154092 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6610000000 1.0000000000 0.0000000000\n" " 0.1990000000 0.0000000000 1.0000000000\n" "#","\n" "B QZV2P-GTH-q3 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 4.1102306804 -0.0620335875 0.0000000000 0.0000000000 0.0000000000 0.0278217612 0.0000000000 0.0000000000 0.0000000000\n" " 1.7172984348 -0.1274529700 0.0000000000 0.0000000000 0.0000000000 0.1085525628 0.0000000000 0.0000000000 0.0000000000\n" " 0.6589800479 0.1200448703 0.0000000000 0.0000000000 0.0000000000 0.2367567166 0.0000000000 0.0000000000 0.0000000000\n" " 0.2700358860 0.5129734657 1.0000000000 0.0000000000 0.0000000000 0.3599759140 1.0000000000 0.0000000000 0.0000000000\n" " 0.1081818865 0.4555842541 0.0000000000 1.0000000000 0.0000000000 0.3683676413 0.0000000000 1.0000000000 0.0000000000\n" " 0.0406426579 0.0612204758 0.0000000000 0.0000000000 1.0000000000 0.1513382480 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6610000000 1.0000000000 0.0000000000\n" " 0.1990000000 0.0000000000 1.0000000000\n" "#","\n" "B QZV3P-GTH-q3 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 4.1102306804 -0.0620335875 0.0000000000 0.0000000000 0.0000000000 0.0278217612 0.0000000000 0.0000000000 0.0000000000\n" " 1.7172984348 -0.1274529700 0.0000000000 0.0000000000 0.0000000000 0.1085525628 0.0000000000 0.0000000000 0.0000000000\n" " 0.6589800479 0.1200448703 0.0000000000 0.0000000000 0.0000000000 0.2367567166 0.0000000000 0.0000000000 0.0000000000\n" " 0.2700358860 0.5129734657 1.0000000000 0.0000000000 0.0000000000 0.3599759140 1.0000000000 0.0000000000 0.0000000000\n" " 0.1081818865 0.4555842541 0.0000000000 1.0000000000 0.0000000000 0.3683676413 0.0000000000 1.0000000000 0.0000000000\n" " 0.0406426579 0.0612204758 0.0000000000 0.0000000000 1.0000000000 0.1513382480 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.1100000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4020000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1450000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "C SZV-GTH-q4 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 4.3362376436 0.1490797872 -0.0878123619\n" " 1.2881838513 -0.0292640031 -0.2775560300\n" " 0.4037767149 -0.6882040510 -0.4712295093\n" " 0.1187877657 -0.3964426906 -0.4058039291\n" "#","\n" "C DZVP-GTH-q4 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 4.3362376436 0.1490797872 0.0000000000 -0.0878123619 0.0000000000\n" " 1.2881838513 -0.0292640031 0.0000000000 -0.2775560300 0.0000000000\n" " 0.4037767149 -0.6882040510 0.0000000000 -0.4712295093 0.0000000000\n" " 0.1187877657 -0.3964426906 1.0000000000 -0.4058039291 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "C TZVP-GTH-q4 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" "#","\n" "C TZV2P-GTH-q4 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" "#","\n" "C QZV2P-GTH-q4 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" "#","\n" "C QZV3P-GTH-q4 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.8480000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6490000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2280000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "C aug-DZVP-GTH-q4 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 4.3362376436 0.1490797872 0.0000000000 -0.0878123619 0.0000000000\n" " 1.2881838513 -0.0292640031 0.0000000000 -0.2775560300 0.0000000000\n" " 0.4037767149 -0.6882040510 0.0000000000 -0.4712295093 0.0000000000\n" " 0.1187877657 -0.3964426906 1.0000000000 -0.4058039291 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04690000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04041000 1.0000000000\n" "#","\n" "C aug-TZVP-GTH-q4 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.5500000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04402000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03569000 1.0000000000\n" "#","\n" "C aug-TZV2P-GTH-q4 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 5.3685662937 0.0974901974 0.0000000000 0.0000000000 -0.0510969367 0.0000000000 0.0000000000\n" " 1.9830691554 0.1041996677 0.0000000000 0.0000000000 -0.1693035193 0.0000000000 0.0000000000\n" " 0.6978346167 -0.3645093878 0.0000000000 0.0000000000 -0.3579933930 0.0000000000 0.0000000000\n" " 0.2430968816 -0.6336931464 1.0000000000 0.0000000000 -0.4327616531 1.0000000000 0.0000000000\n" " 0.0812865018 -0.1676727564 0.0000000000 1.0000000000 -0.2457672757 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04402000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03569000 1.0000000000\n" "#","\n" "C aug-QZV2P-GTH-q4 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0970000000 1.0000000000 0.0000000000\n" " 0.3180000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04145000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03218000 1.0000000000\n" "#","\n" "C aug-QZV3P-GTH-q4 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 6.2117903778 -0.0646967401 0.0000000000 0.0000000000 0.0000000000 0.0325569458 0.0000000000 0.0000000000 0.0000000000\n" " 2.6063423906 -0.1297753357 0.0000000000 0.0000000000 0.0000000000 0.1202876489 0.0000000000 0.0000000000 0.0000000000\n" " 1.0110258071 0.1365330322 0.0000000000 0.0000000000 0.0000000000 0.2556810166 0.0000000000 0.0000000000 0.0000000000\n" " 0.4099767831 0.5183875877 1.0000000000 0.0000000000 0.0000000000 0.3643736556 1.0000000000 0.0000000000 0.0000000000\n" " 0.1615409293 0.4426674841 0.0000000000 1.0000000000 0.0000000000 0.3489621232 0.0000000000 1.0000000000 0.0000000000\n" " 0.0597349919 0.0598757918 0.0000000000 0.0000000000 1.0000000000 0.1399973180 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.8480000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6490000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2280000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.04145000 1.0000000000\n" " 2 1 1 1 1\n" " 0.03218000 1.0000000000\n" "#","\n" "N SZV-GTH-q5 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 6.1526903413 0.1506300537 -0.0950603476\n" " 1.8236332280 -0.0360100734 -0.2918864295\n" " 0.5676628870 -0.6942023212 -0.4739050050\n" " 0.1628222852 -0.3878929987 -0.3893418670\n" "#","\n" "N DZVP-GTH-q5 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 6.1526903413 0.1506300537 0.0000000000 -0.0950603476 0.0000000000\n" " 1.8236332280 -0.0360100734 0.0000000000 -0.2918864295 0.0000000000\n" " 0.5676628870 -0.6942023212 0.0000000000 -0.4739050050 0.0000000000\n" " 0.1628222852 -0.3878929987 1.0000000000 -0.3893418670 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" "#","\n" "N TZVP-GTH-q5 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" "#","\n" "N TZV2P-GTH-q5 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" "#","\n" "N QZV2P-GTH-q5 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" "#","\n" "N QZV3P-GTH-q5 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 2.8370000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.9680000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.3350000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "N aug-DZVP-GTH-q5 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 6.1526903413 0.1506300537 0.0000000000 -0.0950603476 0.0000000000\n" " 1.8236332280 -0.0360100734 0.0000000000 -0.2918864295 0.0000000000\n" " 0.5676628870 -0.6942023212 0.0000000000 -0.4739050050 0.0000000000\n" " 0.1628222852 -0.3878929987 1.0000000000 -0.3893418670 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.06124000 1.0000000000\n" " 2 1 1 1 1\n" " 0.05611000 1.0000000000\n" "#","\n" "N aug-TZVP-GTH-q5 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.8170000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05760000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04910000 1.0000000000\n" "#","\n" "N aug-TZV2P-GTH-q5 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 7.6227447102 0.0983924689 0.0000000000 0.0000000000 -0.0561654555 0.0000000000 0.0000000000\n" " 2.7970605447 0.1045217098 0.0000000000 0.0000000000 -0.1798165209 0.0000000000 0.0000000000\n" " 0.9909765447 -0.3742661352 0.0000000000 0.0000000000 -0.3653986185 0.0000000000 0.0000000000\n" " 0.3417314862 -0.6278094034 1.0000000000 0.0000000000 -0.4259126207 1.0000000000 0.0000000000\n" " 0.1116822743 -0.1675236192 0.0000000000 1.0000000000 -0.2366040346 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05760000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04910000 1.0000000000\n" "#","\n" "N aug-QZV2P-GTH-q5 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.6540000000 1.0000000000 0.0000000000\n" " 0.4690000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05464000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04402000 1.0000000000\n" "#","\n" "N aug-QZV3P-GTH-q5 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 8.8030997240 -0.0653598725 0.0000000000 0.0000000000 0.0000000000 0.0363703004 0.0000000000 0.0000000000 0.0000000000\n" " 3.6785202400 -0.1318019698 0.0000000000 0.0000000000 0.0000000000 0.1277243136 0.0000000000 0.0000000000 0.0000000000\n" " 1.4352947631 0.1465239013 0.0000000000 0.0000000000 0.0000000000 0.2667499496 0.0000000000 0.0000000000 0.0000000000\n" " 0.5774326402 0.5201300002 1.0000000000 0.0000000000 0.0000000000 0.3658846849 1.0000000000 0.0000000000 0.0000000000\n" " 0.2247320708 0.4360365020 0.0000000000 1.0000000000 0.0000000000 0.3370061673 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818920852 0.0597929754 0.0000000000 0.0000000000 1.0000000000 0.1349212947 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 2.8370000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.9680000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.3350000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.05464000 1.0000000000\n" " 2 1 1 1 1\n" " 0.04402000 1.0000000000\n" "#","\n" "O SZV-GTH-q6 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 8.3043855492 0.1510165999 -0.0995679273\n" " 2.4579484191 -0.0393195364 -0.3011422449\n" " 0.7597373434 -0.6971724029 -0.4750857083\n" " 0.2136388632 -0.3841133622 -0.3798777957\n" "#","\n" "O DZVP-GTH-q6 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 8.3043855492 0.1510165999 0.0000000000 -0.0995679273 0.0000000000\n" " 2.4579484191 -0.0393195364 0.0000000000 -0.3011422449 0.0000000000\n" " 0.7597373434 -0.6971724029 0.0000000000 -0.4750857083 0.0000000000\n" " 0.2136388632 -0.3841133622 1.0000000000 -0.3798777957 1.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" "#","\n" "O TZVP-GTH-q6 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" "#","\n" "O TZV2P-GTH-q6 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" "#","\n" "O QZV2P-GTH-q6 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" "#","\n" "O QZV3P-GTH-q6 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 3.7750000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.3000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.4440000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "O aug-DZVP-GTH-q6 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 8.3043855492 0.1510165999 0.0000000000 -0.0995679273 0.0000000000\n" " 2.4579484191 -0.0393195364 0.0000000000 -0.3011422449 0.0000000000\n" " 0.7597373434 -0.6971724029 0.0000000000 -0.4750857083 0.0000000000\n" " 0.2136388632 -0.3841133622 1.0000000000 -0.3798777957 1.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" " 4 0 0 1 1\n" " 0.0789600000 1.0000000000\n" " 4 1 1 1 1\n" " 0.0685600000 1.0000000000\n" "#","\n" "O aug-TZVP-GTH-q6 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000 0.0000000000\n" " 3 2 2 1 1\n" " 1.1850000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0737600000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0597400000 1.0000000000\n" "#","\n" "O aug-TZV2P-GTH-q6 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 10.2674419938 0.0989598460 0.0000000000 0.0000000000 -0.0595856940 0.0000000000 0.0000000000 0.0000000000\n" " 3.7480495696 0.1041178339 0.0000000000 0.0000000000 -0.1875649045 0.0000000000 0.0000000000 0.0000000000\n" " 1.3308337704 -0.3808255700 0.0000000000 0.0000000000 -0.3700707718 0.0000000000 0.0000000000 0.0000000000\n" " 0.4556802254 -0.6232449802 1.0000000000 0.0000000000 -0.4204922615 1.0000000000 0.0000000000 0.0000000000\n" " 0.1462920596 -0.1677863491 0.0000000000 1.0000000000 -0.2313901687 0.0000000000 1.0000000000 0.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" " 5 0 0 1 1\n" " 0.0737600000 1.0000000000\n" " 5 1 1 1 1\n" " 0.0597400000 1.0000000000\n" "#","\n" "O aug-QZV2P-GTH-q6 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 2.3140000000 1.0000000000 0.0000000000\n" " 0.6450000000 0.0000000000 1.0000000000\n" " 6 0 0 1 1\n" " 0.0695900000 1.0000000000\n" " 6 1 1 1 1\n" " 0.0534800000 1.0000000000\n" "#","\n" "O aug-QZV3P-GTH-q6 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 11.8298677444 -0.0658681959 0.0000000000 0.0000000000 0.0000000000 0.0389990698 0.0000000000 0.0000000000 0.0000000000\n" " 4.9326307395 -0.1327117781 0.0000000000 0.0000000000 0.0000000000 0.1329824319 0.0000000000 0.0000000000 0.0000000000\n" " 1.9312997298 0.1529660213 0.0000000000 0.0000000000 0.0000000000 0.2737974007 0.0000000000 0.0000000000 0.0000000000\n" " 0.7724003899 0.5206439978 1.0000000000 0.0000000000 0.0000000000 0.3663338041 1.0000000000 0.0000000000 0.0000000000\n" " 0.2976334392 0.4322622254 0.0000000000 1.0000000000 0.0000000000 0.3292638764 0.0000000000 1.0000000000 0.0000000000\n" " 0.1070061063 0.0599977177 0.0000000000 0.0000000000 1.0000000000 0.1324571183 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 3.7750000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.3000000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.4440000000 0.0000000000 0.0000000000 1.0000000000\n" " 6 0 0 1 1\n" " 0.0695900000 1.0000000000\n" " 6 1 1 1 1\n" " 0.0534800000 1.0000000000\n" "#","\n" "F SZV-GTH-q7 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 10.7079832847 0.1525178777 -0.1028649478\n" " 3.1757210204 -0.0450363043 -0.3085265610\n" " 0.9750975650 -0.6987425604 -0.4757649909\n" " 0.2701246771 -0.3801470341 -0.3724954705\n" "#","\n" "F DZVP-GTH-q7 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 10.7079832847 0.1525178777 0.0000000000 -0.1028649478 0.0000000000\n" " 3.1757210204 -0.0450363043 0.0000000000 -0.3085265610 0.0000000000\n" " 0.9750975650 -0.6987425604 0.0000000000 -0.4757649909 0.0000000000\n" " 0.2701246771 -0.3801470341 1.0000000000 -0.3724954705 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" "#","\n" "F TZVP-GTH-q7 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" "#","\n" "F TZV2P-GTH-q7 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" "#","\n" "F QZV2P-GTH-q7 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" "#","\n" "F QZV3P-GTH-q7 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 5.0140000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.7250000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.5860000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "F aug-DZVP-GTH-q7 aug-DZVP-GTH\n" " 4\n" " 2 0 1 4 2 2\n" " 10.7079832847 0.1525178777 0.0000000000 -0.1028649478 0.0000000000\n" " 3.1757210204 -0.0450363043 0.0000000000 -0.3085265610 0.0000000000\n" " 0.9750975650 -0.6987425604 0.0000000000 -0.4757649909 0.0000000000\n" " 0.2701246771 -0.3801470341 1.0000000000 -0.3724954705 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.09863000 1.0000000000\n" " 2 1 1 1 1\n" " 0.08502000 1.0000000000\n" "#","\n" "F aug-TZVP-GTH-q7 aug-TZVP-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 1.6400000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.09158000 1.0000000000\n" " 2 1 1 1 1\n" " 0.07361000 1.0000000000\n" "#","\n" "F aug-TZV2P-GTH-q7 aug-TZV2P-GTH\n" " 4\n" " 2 0 1 5 3 3\n" " 13.1625129789 0.1014784435 0.0000000000 0.0000000000 -0.0624161251 0.0000000000 0.0000000000\n" " 4.7972015127 0.1001604122 0.0000000000 0.0000000000 -0.1948710850 0.0000000000 0.0000000000\n" " 1.7049975196 -0.3881644200 0.0000000000 0.0000000000 -0.3737338926 0.0000000000 0.0000000000\n" " 0.5814471097 -0.6179394476 1.0000000000 0.0000000000 -0.4151939502 1.0000000000 0.0000000000\n" " 0.1842582220 -0.1660215122 0.0000000000 1.0000000000 -0.2267411587 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.09158000 1.0000000000\n" " 2 1 1 1 1\n" " 0.07361000 1.0000000000\n" "#","\n" "F aug-QZV2P-GTH-q7 aug-QZV2P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 3.1070000000 1.0000000000 0.0000000000\n" " 0.8550000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.08594000 1.0000000000\n" " 2 1 1 1 1\n" " 0.06568000 1.0000000000\n" "#","\n" "F aug-QZV3P-GTH-q7 aug-QZV3P-GTH\n" " 4\n" " 2 0 1 6 4 4\n" " 15.1623003547 -0.0676084899 0.0000000000 0.0000000000 0.0000000000 0.0407647530 0.0000000000 0.0000000000 0.0000000000\n" " 6.3418425141 -0.1317375108 0.0000000000 0.0000000000 0.0000000000 0.1374408584 0.0000000000 0.0000000000 0.0000000000\n" " 2.4900230297 0.1587177173 0.0000000000 0.0000000000 0.0000000000 0.2789708771 0.0000000000 0.0000000000 0.0000000000\n" " 0.9919240308 0.5210056191 1.0000000000 0.0000000000 0.0000000000 0.3662011969 1.0000000000 0.0000000000 0.0000000000\n" " 0.3793151196 0.4286790556 0.0000000000 1.0000000000 0.0000000000 0.3234540792 0.0000000000 1.0000000000 0.0000000000\n" " 0.1348132586 0.0598520782 0.0000000000 0.0000000000 1.0000000000 0.1307942509 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 5.0140000000 1.0000000000 0.0000000000 0.0000000000\n" " 1.7250000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.5860000000 0.0000000000 0.0000000000 1.0000000000\n" " 2 0 0 1 1\n" " 0.08594000 1.0000000000\n" " 2 1 1 1 1\n" " 0.06568000 1.0000000000\n" "#","\n" "Ne SZV-GTH-q8 SZV-GTH\n" " 1\n" " 2 0 1 4 1 1\n" " 13.7594449156 0.1483426747 -0.1044041225\n" " 4.0425282819 -0.0356307196 -0.3108899020\n" " 1.2355181615 -0.7010729520 -0.4760216511\n" " 0.3367029925 -0.3841118307 -0.3721570391\n" "#","\n" "Ne DZVP-GTH-q8 DZVP-GTH\n" " 2\n" " 2 0 1 4 2 2\n" " 13.7594449156 0.1483426747 0.0000000000 -0.1044041225 0.0000000000\n" " 4.0425282819 -0.0356307196 0.0000000000 -0.3108899020 0.0000000000\n" " 1.2355181615 -0.7010729520 0.0000000000 -0.4760216511 0.0000000000\n" " 0.3367029925 -0.3841118307 1.0000000000 -0.3721570391 1.0000000000\n" " 3 2 2 1 1\n" " 2.2020000000 1.0000000000\n" "#","\n" "Ne TZVP-GTH-q8 TZVP-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 17.0406976441 0.0956582854 0.0000000000 0.0000000000 -0.0631287607 0.0000000000 0.0000000000\n" " 6.1494859942 0.1095546500 0.0000000000 0.0000000000 -0.1953504506 0.0000000000 0.0000000000\n" " 2.1810891675 -0.3850952695 0.0000000000 0.0000000000 -0.3747245390 0.0000000000 0.0000000000\n" " 0.7370336206 -0.6201458095 1.0000000000 0.0000000000 -0.4151315545 1.0000000000 0.0000000000\n" " 0.2296296929 -0.1719183539 0.0000000000 1.0000000000 -0.2286539782 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 2.2020000000 1.0000000000\n" "#","\n" "Ne TZV2P-GTH-q8 TZV2P-GTH\n" " 2\n" " 2 0 1 5 3 3\n" " 17.0406976441 0.0956582854 0.0000000000 0.0000000000 -0.0631287607 0.0000000000 0.0000000000\n" " 6.1494859942 0.1095546500 0.0000000000 0.0000000000 -0.1953504506 0.0000000000 0.0000000000\n" " 2.1810891675 -0.3850952695 0.0000000000 0.0000000000 -0.3747245390 0.0000000000 0.0000000000\n" " 0.7370336206 -0.6201458095 1.0000000000 0.0000000000 -0.4151315545 1.0000000000 0.0000000000\n" " 0.2296296929 -0.1719183539 0.0000000000 1.0000000000 -0.2286539782 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 4.0140000000 1.0000000000 0.0000000000\n" " 1.0960000000 0.0000000000 1.0000000000\n" "#","\n" "Ne QZV2P-GTH-q8 QZV2P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 19.5499411153 -0.0632766758 0.0000000000 0.0000000000 0.0000000000 0.0422167837 0.0000000000 0.0000000000 0.0000000000\n" " 8.0769601838 -0.1370919085 0.0000000000 0.0000000000 0.0000000000 0.1383304483 0.0000000000 0.0000000000 0.0000000000\n" " 3.1678758504 0.1578325934 0.0000000000 0.0000000000 0.0000000000 0.2813677061 0.0000000000 0.0000000000 0.0000000000\n" " 1.2535625634 0.5200705489 1.0000000000 0.0000000000 0.0000000000 0.3669217463 1.0000000000 0.0000000000 0.0000000000\n" " 0.4749693396 0.4313985613 0.0000000000 1.0000000000 0.0000000000 0.3213403173 0.0000000000 1.0000000000 0.0000000000\n" " 0.1666682167 0.0613040256 0.0000000000 0.0000000000 1.0000000000 0.1317714527 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 4.0140000000 1.0000000000 0.0000000000\n" " 1.0960000000 0.0000000000 1.0000000000\n" "#","\n" "Ne QZV3P-GTH-q8 QZV3P-GTH\n" " 2\n" " 2 0 1 6 4 4\n" " 19.5499411153 -0.0632766758 0.0000000000 0.0000000000 0.0000000000 0.0422167837 0.0000000000 0.0000000000 0.0000000000\n" " 8.0769601838 -0.1370919085 0.0000000000 0.0000000000 0.0000000000 0.1383304483 0.0000000000 0.0000000000 0.0000000000\n" " 3.1678758504 0.1578325934 0.0000000000 0.0000000000 0.0000000000 0.2813677061 0.0000000000 0.0000000000 0.0000000000\n" " 1.2535625634 0.5200705489 1.0000000000 0.0000000000 0.0000000000 0.3669217463 1.0000000000 0.0000000000 0.0000000000\n" " 0.4749693396 0.4313985613 0.0000000000 1.0000000000 0.0000000000 0.3213403173 0.0000000000 1.0000000000 0.0000000000\n" " 0.1666682167 0.0613040256 0.0000000000 0.0000000000 1.0000000000 0.1317714527 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 6.4710000000 1.0000000000 0.0000000000 0.0000000000\n" " 2.2130000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.7470000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Na SZV-GTH-q9 SZV-GTH\n" " 1\n" " 2 0 1 6 2 1\n" " 17.6698382207 -0.1362364777 0.0270957219 0.0791980974\n" " 6.9070658063 -0.0645835666 0.0098734119 0.2184139257\n" " 2.6098601451 0.3866153961 -0.0737170396 0.3764887364\n" " 0.9649548796 0.5971358883 -0.2186742776 0.3922304007\n" " 0.3400348369 0.1756697026 -0.0301066303 0.1808407220\n" " 0.0432486046 -0.0017104621 1.0388865857 0.0057696324\n" "#","\n" "Na DZVP-GTH-q9 DZVP-GTH\n" " 2\n" " 2 0 1 6 3 2\n" " 17.6698382207 -0.1362364777 0.0270957219 0.0000000000 0.0791980974 0.0000000000\n" " 6.9070658063 -0.0645835666 0.0098734119 0.0000000000 0.2184139257 0.0000000000\n" " 2.6098601451 0.3866153961 -0.0737170396 0.0000000000 0.3764887364 0.0000000000\n" " 0.9649548796 0.5971358883 -0.2186742776 0.0000000000 0.3922304007 0.0000000000\n" " 0.3400348369 0.1756697026 -0.0301066303 0.0000000000 0.1808407220 0.0000000000\n" " 0.0432486046 -0.0017104621 1.0388865857 1.0000000000 0.0057696324 1.0000000000\n" " 3 2 2 1 1\n" " 0.0973000000 1.0000000000\n" "#","\n" "Na TZVP-GTH-q9 TZVP-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 18.1210741090 -0.1275232222 -0.0248047945 0.0000000000 0.0000000000 0.0729874345 0.0000000000 0.0000000000\n" " 7.3775066400 -0.0812376594 -0.0171596817 0.0000000000 0.0000000000 0.1996717590 0.0000000000 0.0000000000\n" " 2.8817585986 0.3277442268 0.0724090847 0.0000000000 0.0000000000 0.3527504683 0.0000000000 0.0000000000\n" " 1.0990235357 0.5946658147 0.1739886836 0.0000000000 0.0000000000 0.3936231447 0.0000000000 0.0000000000\n" " 0.4007387720 0.2436047977 0.1404493622 0.0000000000 0.0000000000 0.2171401481 0.0000000000 0.0000000000\n" " 0.0916859420 -0.0017574619 -0.3860533721 1.0000000000 0.0000000000 0.0205070521 1.0000000000 0.0000000000\n" " 0.0309750158 0.0016745741 -0.7360619920 0.0000000000 1.0000000000 -0.0045593404 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.0973000000 1.0000000000\n" "#","\n" "Na TZV2P-GTH-q9 TZV2P-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 18.1210741090 -0.1275232222 -0.0248047945 0.0000000000 0.0000000000 0.0729874345 0.0000000000 0.0000000000\n" " 7.3775066400 -0.0812376594 -0.0171596817 0.0000000000 0.0000000000 0.1996717590 0.0000000000 0.0000000000\n" " 2.8817585986 0.3277442268 0.0724090847 0.0000000000 0.0000000000 0.3527504683 0.0000000000 0.0000000000\n" " 1.0990235357 0.5946658147 0.1739886836 0.0000000000 0.0000000000 0.3936231447 0.0000000000 0.0000000000\n" " 0.4007387720 0.2436047977 0.1404493622 0.0000000000 0.0000000000 0.2171401481 0.0000000000 0.0000000000\n" " 0.0916859420 -0.0017574619 -0.3860533721 1.0000000000 0.0000000000 0.0205070521 1.0000000000 0.0000000000\n" " 0.0309750158 0.0016745741 -0.7360619920 0.0000000000 1.0000000000 -0.0045593404 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1367000000 1.0000000000 0.0000000000\n" " 0.0636000000 0.0000000000 1.0000000000\n" "#","\n" "Na QZV2P-GTH-q9 QZV2P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 19.7241294087 0.0964646065 0.0186968769 0.0000000000 0.0000000000 0.0000000000 -0.0533754431 0.0000000000 0.0000000000 0.0000000000\n" " 9.3287912748 0.1166761476 0.0236192089 0.0000000000 0.0000000000 0.0000000000 -0.1400719948 0.0000000000 0.0000000000 0.0000000000\n" " 4.1199901709 -0.1393562188 -0.0290484898 0.0000000000 0.0000000000 0.0000000000 -0.2641114390 0.0000000000 0.0000000000 0.0000000000\n" " 1.7720338111 -0.4584822127 -0.1108583114 0.0000000000 0.0000000000 0.0000000000 -0.3519032892 0.0000000000 0.0000000000 0.0000000000\n" " 0.7498415377 -0.4636596929 -0.1735322668 0.0000000000 0.0000000000 0.0000000000 -0.3064604543 0.0000000000 0.0000000000 0.0000000000\n" " 0.2996060606 -0.1092610807 -0.0565756124 1.0000000000 0.0000000000 0.0000000000 -0.1309377611 1.0000000000 0.0000000000 0.0000000000\n" " 0.0698044897 0.0012749633 0.5743314061 0.0000000000 1.0000000000 0.0000000000 -0.0074120120 0.0000000000 1.0000000000 0.0000000000\n" " 0.0255058383 -0.0006119521 0.5364207511 0.0000000000 0.0000000000 1.0000000000 0.0017424530 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.1367000000 1.0000000000 0.0000000000\n" " 0.0636000000 0.0000000000 1.0000000000\n" "#","\n" "Na QZV3P-GTH-q9 QZV3P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 19.7241294087 0.0964646065 0.0186968769 0.0000000000 0.0000000000 0.0000000000 -0.0533754431 0.0000000000 0.0000000000 0.0000000000\n" " 9.3287912748 0.1166761476 0.0236192089 0.0000000000 0.0000000000 0.0000000000 -0.1400719948 0.0000000000 0.0000000000 0.0000000000\n" " 4.1199901709 -0.1393562188 -0.0290484898 0.0000000000 0.0000000000 0.0000000000 -0.2641114390 0.0000000000 0.0000000000 0.0000000000\n" " 1.7720338111 -0.4584822127 -0.1108583114 0.0000000000 0.0000000000 0.0000000000 -0.3519032892 0.0000000000 0.0000000000 0.0000000000\n" " 0.7498415377 -0.4636596929 -0.1735322668 0.0000000000 0.0000000000 0.0000000000 -0.3064604543 0.0000000000 0.0000000000 0.0000000000\n" " 0.2996060606 -0.1092610807 -0.0565756124 1.0000000000 0.0000000000 0.0000000000 -0.1309377611 1.0000000000 0.0000000000 0.0000000000\n" " 0.0698044897 0.0012749633 0.5743314061 0.0000000000 1.0000000000 0.0000000000 -0.0074120120 0.0000000000 1.0000000000 0.0000000000\n" " 0.0255058383 -0.0006119521 0.5364207511 0.0000000000 0.0000000000 1.0000000000 0.0017424530 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.1538000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.0865000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0487000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Mg SZV-GTH-q10 SZV-GTH\n" " 1\n" " 2 0 1 6 2 1\n" " 28.4894000448 -0.0662729183 0.0165018731 0.0464558886\n" " 11.7278204570 -0.1706135571 0.0374283767 0.1664914738\n" " 4.4443941842 0.2494781478 -0.0517347280 0.3580941241\n" " 1.6070266284 0.6423214818 -0.2647624258 0.4356599896\n" " 0.5690630460 0.2933234669 -0.0948461091 0.2229558550\n" " 0.0763496459 -0.0002717019 1.0630071183 0.0085986529\n" "#","\n" "Mg DZVP-GTH-q10 DZVP-GTH\n" " 2\n" " 2 0 1 6 3 2\n" " 28.4894000448 -0.0662729183 0.0165018731 0.0000000000 0.0464558886 0.0000000000\n" " 11.7278204570 -0.1706135571 0.0374283767 0.0000000000 0.1664914738 0.0000000000\n" " 4.4443941842 0.2494781478 -0.0517347280 0.0000000000 0.3580941241 0.0000000000\n" " 1.6070266284 0.6423214818 -0.2647624258 0.0000000000 0.4356599896 0.0000000000\n" " 0.5690630460 0.2933234669 -0.0948461091 0.0000000000 0.2229558550 0.0000000000\n" " 0.0763496459 -0.0002717019 1.0630071183 1.0000000000 0.0085986529 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Mg TZVP-GTH-q10 TZVP-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 32.6102127160 -0.0379330911 -0.0088936017 0.0000000000 0.0000000000 0.0307150457 0.0000000000 0.0000000000\n" " 14.0525311690 -0.1824731301 -0.0446185212 0.0000000000 0.0000000000 0.1365611853 0.0000000000 0.0000000000\n" " 5.3750565930 0.1414840059 0.0361139004 0.0000000000 0.0000000000 0.3216977104 0.0000000000 0.0000000000\n" " 1.9603294652 0.6092794423 0.1991926589 0.0000000000 0.0000000000 0.4406864532 0.0000000000 0.0000000000\n" " 0.6985451378 0.4085543085 0.2360727936 0.0000000000 0.0000000000 0.2830209201 0.0000000000 0.0000000000\n" " 0.1599451430 0.0093835755 -0.4060439955 1.0000000000 0.0000000000 0.0314202293 1.0000000000 0.0000000000\n" " 0.0539901438 -0.0000358721 -0.7421716821 0.0000000000 1.0000000000 -0.0070197374 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1870000000 1.0000000000\n" "#","\n" "Mg TZV2P-GTH-q10 TZV2P-GTH\n" " 2\n" " 2 0 1 7 4 3\n" " 32.6102127160 -0.0379330911 -0.0088936017 0.0000000000 0.0000000000 0.0307150457 0.0000000000 0.0000000000\n" " 14.0525311690 -0.1824731301 -0.0446185212 0.0000000000 0.0000000000 0.1365611853 0.0000000000 0.0000000000\n" " 5.3750565930 0.1414840059 0.0361139004 0.0000000000 0.0000000000 0.3216977104 0.0000000000 0.0000000000\n" " 1.9603294652 0.6092794423 0.1991926589 0.0000000000 0.0000000000 0.4406864532 0.0000000000 0.0000000000\n" " 0.6985451378 0.4085543085 0.2360727936 0.0000000000 0.0000000000 0.2830209201 0.0000000000 0.0000000000\n" " 0.1599451430 0.0093835755 -0.4060439955 1.0000000000 0.0000000000 0.0314202293 1.0000000000 0.0000000000\n" " 0.0539901438 -0.0000358721 -0.7421716821 0.0000000000 1.0000000000 -0.0070197374 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.2940000000 1.0000000000 0.0000000000\n" " 0.1260000000 0.0000000000 1.0000000000\n" "#","\n" "Mg QZV2P-GTH-q10 QZV2P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 38.2989934401 0.0104376055 0.0024542703 0.0000000000 0.0000000000 0.0000000000 -0.0169307005 0.0000000000 0.0000000000 0.0000000000\n" " 18.2352594129 0.1600713964 0.0383890090 0.0000000000 0.0000000000 0.0000000000 -0.0880606004 0.0000000000 0.0000000000 0.0000000000\n" " 7.8322039250 0.0236151231 0.0063757667 0.0000000000 0.0000000000 0.0000000000 -0.2233078530 0.0000000000 0.0000000000 0.0000000000\n" " 3.2096669080 -0.3496886711 -0.0967311125 0.0000000000 0.0000000000 0.0000000000 -0.3590124156 0.0000000000 0.0000000000 0.0000000000\n" " 1.3215191150 -0.5744578292 -0.2302830710 0.0000000000 0.0000000000 0.0000000000 -0.3636484834 0.0000000000 0.0000000000 0.0000000000\n" " 0.5219034472 -0.2167187848 -0.1302378952 1.0000000000 0.0000000000 0.0000000000 -0.1772276014 1.0000000000 0.0000000000 0.0000000000\n" " 0.1263242017 -0.0012887617 0.5892536861 0.0000000000 1.0000000000 0.0000000000 -0.0121989604 0.0000000000 1.0000000000 0.0000000000\n" " 0.0449896165 -0.0003669674 0.5569471332 0.0000000000 0.0000000000 1.0000000000 0.0026934953 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.2940000000 1.0000000000 0.0000000000\n" " 0.1260000000 0.0000000000 1.0000000000\n" "#","\n" "Mg QZV3P-GTH-q10 QZV3P-GTH\n" " 2\n" " 2 0 1 8 5 4\n" " 38.2989934401 0.0104376055 0.0024542703 0.0000000000 0.0000000000 0.0000000000 -0.0169307005 0.0000000000 0.0000000000 0.0000000000\n" " 18.2352594129 0.1600713964 0.0383890090 0.0000000000 0.0000000000 0.0000000000 -0.0880606004 0.0000000000 0.0000000000 0.0000000000\n" " 7.8322039250 0.0236151231 0.0063757667 0.0000000000 0.0000000000 0.0000000000 -0.2233078530 0.0000000000 0.0000000000 0.0000000000\n" " 3.2096669080 -0.3496886711 -0.0967311125 0.0000000000 0.0000000000 0.0000000000 -0.3590124156 0.0000000000 0.0000000000 0.0000000000\n" " 1.3215191150 -0.5744578292 -0.2302830710 0.0000000000 0.0000000000 0.0000000000 -0.3636484834 0.0000000000 0.0000000000 0.0000000000\n" " 0.5219034472 -0.2167187848 -0.1302378952 1.0000000000 0.0000000000 0.0000000000 -0.1772276014 1.0000000000 0.0000000000 0.0000000000\n" " 0.1263242017 -0.0012887617 0.5892536861 0.0000000000 1.0000000000 0.0000000000 -0.0121989604 0.0000000000 1.0000000000 0.0000000000\n" " 0.0449896165 -0.0003669674 0.5569471332 0.0000000000 0.0000000000 1.0000000000 0.0026934953 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.3570000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1944000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1060000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Al SZV-GTH-q3 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 0.9504275958 0.2820078575 0.0257257859\n" " 0.2947366659 -0.2787607042 -0.2528156908\n" " 0.1124426785 -0.7494973519 -0.5124696636\n" " 0.0396003631 -0.1645895071 -0.3831165034\n" "#","\n" "Al DZVP-GTH-q3 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 0.9504275958 0.2820078575 0.0000000000 0.0257257859 0.0000000000\n" " 0.2947366659 -0.2787607042 0.0000000000 -0.2528156908 0.0000000000\n" " 0.1124426785 -0.7494973519 0.0000000000 -0.5124696636 0.0000000000\n" " 0.0396003631 -0.1645895071 1.0000000000 -0.3831165034 1.0000000000\n" " 3 2 2 1 1\n" " 0.1890000000 1.0000000000\n" "#","\n" "Al TZVP-GTH-q3 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 0.9710403542 0.2731273083 0.0000000000 0.0000000000 0.0318495312 0.0000000000 0.0000000000\n" " 0.3604758056 -0.1164353642 0.0000000000 0.0000000000 -0.1582365164 0.0000000000 0.0000000000\n" " 0.1582849401 -0.6159606293 0.0000000000 0.0000000000 -0.3791239519 0.0000000000 0.0000000000\n" " 0.0674736203 -0.4172871263 1.0000000000 0.0000000000 -0.4457455282 1.0000000000 0.0000000000\n" " 0.0267010818 -0.0326661237 0.0000000000 1.0000000000 -0.1788784308 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.1890000000 1.0000000000\n" "#","\n" "Al TZV2P-GTH-q3 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 0.9710403542 0.2731273083 0.0000000000 0.0000000000 0.0318495312 0.0000000000 0.0000000000\n" " 0.3604758056 -0.1164353642 0.0000000000 0.0000000000 -0.1582365164 0.0000000000 0.0000000000\n" " 0.1582849401 -0.6159606293 0.0000000000 0.0000000000 -0.3791239519 0.0000000000 0.0000000000\n" " 0.0674736203 -0.4172871263 1.0000000000 0.0000000000 -0.4457455282 1.0000000000 0.0000000000\n" " 0.0267010818 -0.0326661237 0.0000000000 1.0000000000 -0.1788784308 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3330000000 1.0000000000 0.0000000000\n" " 0.1090000000 0.0000000000 1.0000000000\n" "#","\n" "Al QZV2P-GTH-q3 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0705249839 0.0027352701 0.0000000000 0.0000000000 0.0000000000 0.0044124453 0.0000000000 0.0000000000 0.0000000000\n" " 0.9962478983 -0.2668117634 0.0000000000 0.0000000000 0.0000000000 -0.0401883011 0.0000000000 0.0000000000 0.0000000000\n" " 0.4094779636 0.0618740192 0.0000000000 0.0000000000 0.0000000000 0.1289865679 0.0000000000 0.0000000000 0.0000000000\n" " 0.1732890531 0.5987573069 1.0000000000 0.0000000000 0.0000000000 0.3723262575 1.0000000000 0.0000000000 0.0000000000\n" " 0.0723986239 0.4707960559 0.0000000000 1.0000000000 0.0000000000 0.4626980717 0.0000000000 1.0000000000 0.0000000000\n" " 0.0282432465 0.0425944411 0.0000000000 0.0000000000 1.0000000000 0.2032552207 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.3330000000 1.0000000000 0.0000000000\n" " 0.1090000000 0.0000000000 1.0000000000\n" "#","\n" "Al QZV3P-GTH-q3 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0705249839 0.0027352701 0.0000000000 0.0000000000 0.0000000000 0.0044124453 0.0000000000 0.0000000000 0.0000000000\n" " 0.9962478983 -0.2668117634 0.0000000000 0.0000000000 0.0000000000 -0.0401883011 0.0000000000 0.0000000000 0.0000000000\n" " 0.4094779636 0.0618740192 0.0000000000 0.0000000000 0.0000000000 0.1289865679 0.0000000000 0.0000000000 0.0000000000\n" " 0.1732890531 0.5987573069 1.0000000000 0.0000000000 0.0000000000 0.3723262575 1.0000000000 0.0000000000 0.0000000000\n" " 0.0723986239 0.4707960559 0.0000000000 1.0000000000 0.0000000000 0.4626980717 0.0000000000 1.0000000000 0.0000000000\n" " 0.0282432465 0.0425944411 0.0000000000 0.0000000000 1.0000000000 0.2032552207 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.4940000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.1990000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.0804000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Si SZV-GTH-q4 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 1.2032403600 0.3290356759 0.0474536439\n" " 0.4688385970 -0.2533162616 -0.2594495462\n" " 0.1679853910 -0.7870936517 -0.5440932235\n" " 0.0575616890 -0.1909870193 -0.3623984652\n" "#","\n" "Si DZVP-GTH-q4 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 1.2032403600 0.3290356759 0.0000000000 0.0474536439 0.0000000000\n" " 0.4688385970 -0.2533162616 0.0000000000 -0.2594495462 0.0000000000\n" " 0.1679853910 -0.7870936517 0.0000000000 -0.5440932235 0.0000000000\n" " 0.0575616890 -0.1909870193 1.0000000000 -0.3623984652 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" "#","\n" "Si TZVP-GTH-q4 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" "#","\n" "Si TZV2P-GTH-q4 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" "#","\n" "Si QZV2P-GTH-q4 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" "#","\n" "Si QZV3P-GTH-q4 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.7600000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.3020000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1200000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Si aug-DZVP-GTH-q4 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 1.2032403600 0.3290356759 0.0000000000 0.0474536439 0.0000000000\n" " 0.4688385970 -0.2533162616 0.0000000000 -0.2594495462 0.0000000000\n" " 0.1679853910 -0.7870936517 0.0000000000 -0.5440932235 0.0000000000\n" " 0.0575616890 -0.1909870193 1.0000000000 -0.3623984652 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03320000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02500000 1.0000000000\n" "#","\n" "Si aug-TZVP-GTH-q4 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.2750000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03300000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02370000 1.0000000000\n" "#","\n" "Si aug-TZV2P-GTH-q4 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 1.2331731434 0.3150424674 0.0000000000 0.0000000000 0.0667574395 0.0000000000 0.0000000000\n" " 0.6579957180 -0.0732928041 0.0000000000 0.0000000000 -0.1473516106 0.0000000000 0.0000000000\n" " 0.2547041526 -0.5862322199 0.0000000000 0.0000000000 -0.4034178654 0.0000000000 0.0000000000\n" " 0.1060089904 -0.5051712664 1.0000000000 0.0000000000 -0.4457008802 1.0000000000 0.0000000000\n" " 0.0418790646 -0.0507253610 0.0000000000 1.0000000000 -0.1941498294 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03300000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02370000 1.0000000000\n" "#","\n" "Si aug-QZV2P-GTH-q4 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.4810000000 1.0000000000 0.0000000000\n" " 0.1590000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.02750000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02000000 1.0000000000\n" "#","\n" "Si aug-QZV3P-GTH-q4 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.0914606934 0.0124908161 0.0000000000 0.0000000000 0.0000000000 -0.0027532026 0.0000000000 0.0000000000 0.0000000000\n" " 1.3362310368 -0.2927569134 0.0000000000 0.0000000000 0.0000000000 -0.0422856821 0.0000000000 0.0000000000 0.0000000000\n" " 0.5649726509 0.0456455175 0.0000000000 0.0000000000 0.0000000000 0.1468609670 0.0000000000 0.0000000000 0.0000000000\n" " 0.2466543506 0.6102734005 1.0000000000 0.0000000000 0.0000000000 0.3930678123 1.0000000000 0.0000000000 0.0000000000\n" " 0.1028862952 0.4799377663 0.0000000000 1.0000000000 0.0000000000 0.4491746304 0.0000000000 1.0000000000 0.0000000000\n" " 0.0403147900 0.0462217432 0.0000000000 0.0000000000 1.0000000000 0.1794865096 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 0.7600000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.3020000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1200000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.02750000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02000000 1.0000000000\n" "#","\n" "P SZV-GTH-q5 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 1.4960907993 0.3653124842 0.0816205767\n" " 0.7169067467 -0.2125748699 -0.2627397053\n" " 0.2411464781 -0.8136091436 -0.5627246555\n" " 0.0803414677 -0.2362413556 -0.3691448735\n" "#","\n" "P DZVP-GTH-q5 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 1.4960907993 0.3653124842 0.0000000000 0.0816205767 0.0000000000\n" " 0.7169067467 -0.2125748699 0.0000000000 -0.2627397053 0.0000000000\n" " 0.2411464781 -0.8136091436 0.0000000000 -0.5627246555 0.0000000000\n" " 0.0803414677 -0.2362413556 1.0000000000 -0.3691448735 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" "#","\n" "P TZVP-GTH-q5 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" "#","\n" "P TZV2P-GTH-q5 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" "#","\n" "P QZV2P-GTH-q5 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" "#","\n" "P QZV3P-GTH-q5 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.0360000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4130000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1650000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "P aug-DZVP-GTH-q5 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 1.4960907993 0.3653124842 0.0000000000 0.0816205767 0.0000000000\n" " 0.7169067467 -0.2125748699 0.0000000000 -0.2627397053 0.0000000000\n" " 0.2411464781 -0.8136091436 0.0000000000 -0.5627246555 0.0000000000\n" " 0.0803414677 -0.2362413556 1.0000000000 -0.3691448735 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04170000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03430000 1.0000000000\n" "#","\n" "P aug-TZVP-GTH-q5 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.3730000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04090000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03070000 1.0000000000\n" "#","\n" "P aug-TZV2P-GTH-q5 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.1996341190 -0.0704921557 0.0000000000 0.0000000000 0.0621639873 0.0000000000 0.0000000000\n" " 1.6369289280 0.3969825114 0.0000000000 0.0000000000 -0.0400911635 0.0000000000 0.0000000000\n" " 0.4970575820 -0.3512429748 0.0000000000 0.0000000000 -0.3338049853 0.0000000000 0.0000000000\n" " 0.1944032900 -0.7297176188 1.0000000000 0.0000000000 -0.5118382938 1.0000000000 0.0000000000\n" " 0.0699106580 -0.1421063788 0.0000000000 1.0000000000 -0.2909693679 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04090000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03070000 1.0000000000\n" "#","\n" "P aug-QZV2P-GTH-q5 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.6520000000 1.0000000000 0.0000000000\n" " 0.2160000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03540000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02720000 1.0000000000\n" "#","\n" "P aug-QZV3P-GTH-q5 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 3.7552135262 0.0219221916 0.0000000000 0.0000000000 0.0000000000 -0.0089770006 0.0000000000 0.0000000000 0.0000000000\n" " 1.7140316717 -0.3135634867 0.0000000000 0.0000000000 0.0000000000 -0.0448447247 0.0000000000 0.0000000000 0.0000000000\n" " 0.7438335270 0.0341312768 0.0000000000 0.0000000000 0.0000000000 0.1612574940 0.0000000000 0.0000000000 0.0000000000\n" " 0.3280082762 0.6173246158 1.0000000000 0.0000000000 0.0000000000 0.4083320223 1.0000000000 0.0000000000 0.0000000000\n" " 0.1366188473 0.4868790477 0.0000000000 1.0000000000 0.0000000000 0.4366765007 0.0000000000 1.0000000000 0.0000000000\n" " 0.0534696687 0.0500106401 0.0000000000 0.0000000000 1.0000000000 0.1655268470 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.0360000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.4130000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.1650000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.03540000 1.0000000000\n" " 3 1 1 1 1\n" " 0.02720000 1.0000000000\n" "#","\n" "S SZV-GTH-q6 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 1.8379629578 0.3832142891 0.1221358296\n" " 1.0357730084 -0.1682257315 -0.2752002461\n" " 0.3297969875 -0.8258488166 -0.5729054592\n" " 0.1073535471 -0.2832758052 -0.3825468137\n" "#","\n" "S DZVP-GTH-q6 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 1.8379629578 0.3832142891 0.0000000000 0.1221358296 0.0000000000\n" " 1.0357730084 -0.1682257315 0.0000000000 -0.2752002461 0.0000000000\n" " 0.3297969875 -0.8258488166 0.0000000000 -0.5729054592 0.0000000000\n" " 0.1073535471 -0.2832758052 1.0000000000 -0.3825468137 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" "#","\n" "S TZVP-GTH-q6 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" "#","\n" "S TZV2P-GTH-q6 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" "#","\n" "S QZV2P-GTH-q6 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" "#","\n" "S QZV3P-GTH-q6 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.2500000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.5040000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2030000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "S aug-DZVP-GTH-q6 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 1.8379629578 0.3832142891 0.0000000000 0.1221358296 0.0000000000\n" " 1.0357730084 -0.1682257315 0.0000000000 -0.2752002461 0.0000000000\n" " 0.3297969875 -0.8258488166 0.0000000000 -0.5729054592 0.0000000000\n" " 0.1073535471 -0.2832758052 1.0000000000 -0.3825468137 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05070000 1.0000000000\n" " 3 1 1 1 1 \n" " 0.03990000 1.0000000000\n" "#","\n" "S aug-TZVP-GTH-q6 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.4790000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04970000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03510000 1.0000000000\n" "#","\n" "S aug-TZV2P-GTH-q6 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 2.9775941238 -0.0684133054 0.0000000000 0.0000000000 0.0522484808 0.0000000000 0.0000000000\n" " 2.0190866819 0.4095039721 0.0000000000 0.0000000000 -0.0232128642 0.0000000000 0.0000000000\n" " 0.6439412840 -0.3403336830 0.0000000000 0.0000000000 -0.3459753011 0.0000000000 0.0000000000\n" " 0.2501987605 -0.7425154227 1.0000000000 0.0000000000 -0.5141620418 1.0000000000 0.0000000000\n" " 0.0891650206 -0.1520225390 0.0000000000 1.0000000000 -0.2803769713 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04970000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03510000 1.0000000000\n" "#","\n" "S aug-QZV2P-GTH-q6 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 0.8190000000 1.0000000000 0.0000000000\n" " 0.2690000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04280000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03170000 1.0000000000\n" "#","\n" "S aug-QZV3P-GTH-q6 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.2573596528 0.0340198790 0.0000000000 0.0000000000 0.0000000000 -0.0139384068 0.0000000000 0.0000000000 0.0000000000\n" " 2.1309107097 -0.3349229077 0.0000000000 0.0000000000 0.0000000000 -0.0449848970 0.0000000000 0.0000000000 0.0000000000\n" " 0.9293415064 0.0316794871 0.0000000000 0.0000000000 0.0000000000 0.1762303153 0.0000000000 0.0000000000 0.0000000000\n" " 0.4136351121 0.6234596988 1.0000000000 0.0000000000 0.0000000000 0.4188613693 1.0000000000 0.0000000000 0.0000000000\n" " 0.1723749938 0.4869763921 0.0000000000 1.0000000000 0.0000000000 0.4242144008 0.0000000000 1.0000000000 0.0000000000\n" " 0.0673747361 0.0524674807 0.0000000000 0.0000000000 1.0000000000 0.1544985250 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.2500000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.5040000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2030000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.04280000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03170000 1.0000000000\n" "#","\n" "Cl SZV-GTH-q7 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 2.2321759828 0.3787844947 0.1555385229\n" " 1.3787736290 -0.1239714599 -0.2931741896\n" " 0.4264904045 -0.8298226129 -0.5781097351\n" " 0.1366670312 -0.3175023225 -0.3901110870\n" "#","\n" "Cl DZVP-GTH-q7 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 2.2321759828 0.3787844947 0.0000000000 0.1555385229 0.0000000000\n" " 1.3787736290 -0.1239714599 0.0000000000 -0.2931741896 0.0000000000\n" " 0.4264904045 -0.8298226129 0.0000000000 -0.5781097351 0.0000000000\n" " 0.1366670312 -0.3175023225 1.0000000000 -0.3901110870 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "Cl TZVP-GTH-q7 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" "#","\n" "Cl TZV2P-GTH-q7 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" "#","\n" "Cl QZV2P-GTH-q7 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" "#","\n" "Cl QZV3P-GTH-q7 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.5510000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6280000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2540000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "Cl aug-DZVP-GTH-q7 aug-DZVP-GTH\n" " 4\n" " 3 0 1 4 2 2\n" " 2.2321759828 0.3787844947 0.0000000000 0.1555385229 0.0000000000\n" " 1.3787736290 -0.1239714599 0.0000000000 -0.2931741896 0.0000000000\n" " 0.4264904045 -0.8298226129 0.0000000000 -0.5781097351 0.0000000000\n" " 0.1366670312 -0.3175023225 1.0000000000 -0.3901110870 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.06080000 1.0000000000\n" " 3 1 1 1 1\n" " 0.04660000 1.0000000000\n" "#","\n" "Cl aug-TZVP-GTH-q7 aug-TZVP-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.6000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05910000 1.0000000000\n" " 3 1 1 1 1\n" " 0.04190000 1.0000000000\n" "#","\n" "Cl aug-TZV2P-GTH-q7 aug-TZV2P-GTH\n" " 4\n" " 3 0 1 5 3 3\n" " 3.4404677360 -0.0962885076 0.0000000000 0.0000000000 0.0674841325 0.0000000000 0.0000000000\n" " 2.4424740830 0.4481503162 0.0000000000 0.0000000000 -0.0388856129 0.0000000000 0.0000000000\n" " 0.7848604567 -0.3507929510 0.0000000000 0.0000000000 -0.3633699842 0.0000000000 0.0000000000\n" " 0.3048755969 -0.7403677289 1.0000000000 0.0000000000 -0.5101595423 1.0000000000 0.0000000000\n" " 0.1084717366 -0.1528159301 0.0000000000 1.0000000000 -0.2654035575 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05910000 1.0000000000\n" " 3 1 1 1 1\n" " 0.04190000 1.0000000000\n" "#","\n" "Cl aug-QZV2P-GTH-q7 aug-QZV2P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.0460000000 1.0000000000 0.0000000000\n" " 0.3440000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05190000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03760000 1.0000000000\n" "#","\n" "Cl aug-QZV3P-GTH-q7 aug-QZV3P-GTH\n" " 4\n" " 3 0 1 6 4 4\n" " 4.7390692540 0.0460145547 0.0000000000 0.0000000000 0.0000000000 -0.0184287984 0.0000000000 0.0000000000 0.0000000000\n" " 2.5664506160 -0.3573237652 0.0000000000 0.0000000000 0.0000000000 -0.0428888823 0.0000000000 0.0000000000 0.0000000000\n" " 1.1168239570 0.0404814650 0.0000000000 0.0000000000 0.0000000000 0.1933392026 0.0000000000 0.0000000000 0.0000000000\n" " 0.5007318360 0.6290842339 1.0000000000 0.0000000000 0.0000000000 0.4262968544 1.0000000000 0.0000000000 0.0000000000\n" " 0.2092217935 0.4804996350 0.0000000000 1.0000000000 0.0000000000 0.4107393400 0.0000000000 1.0000000000 0.0000000000\n" " 0.0818080455 0.0532567628 0.0000000000 0.0000000000 1.0000000000 0.1444014999 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.5510000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.6280000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.2540000000 0.0000000000 0.0000000000 1.0000000000\n" " 3 0 0 1 1\n" " 0.05190000 1.0000000000\n" " 3 1 1 1 1\n" " 0.03760000 1.0000000000\n" "#","\n" "Ar SZV-GTH-q8 SZV-GTH\n" " 1\n" " 3 0 1 4 1 1\n" " 2.6436341408 0.3737594656 0.1735190188\n" " 1.6948954231 -0.0996534757 -0.3100915552\n" " 0.5231109619 -0.8315200024 -0.5807564917\n" " 0.1663306660 -0.3339930084 -0.3879330451\n" "#","\n" "Ar DZVP-GTH-q8 DZVP-GTH\n" " 2\n" " 3 0 1 4 2 2\n" " 2.6436341408 0.3737594656 0.0000000000 0.1735190188 0.0000000000\n" " 1.6948954231 -0.0996534757 0.0000000000 -0.3100915552 0.0000000000\n" " 0.5231109619 -0.8315200024 0.0000000000 -0.5807564917 0.0000000000\n" " 0.1663306660 -0.3339930084 1.0000000000 -0.3879330451 1.0000000000\n" " 3 2 2 1 1\n" " 0.7380000000 1.0000000000\n" "#","\n" "Ar TZVP-GTH-q8 TZVP-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.7933849461 -0.1618280953 0.0000000000 0.0000000000 0.0960404756 0.0000000000 0.0000000000\n" " 2.9269187333 0.5221781637 0.0000000000 0.0000000000 -0.0704844503 0.0000000000 0.0000000000\n" " 0.9316537640 -0.3632163241 0.0000000000 0.0000000000 -0.3787707182 0.0000000000 0.0000000000\n" " 0.3621005146 -0.7358329756 1.0000000000 0.0000000000 -0.5047539917 1.0000000000 0.0000000000\n" " 0.1287409102 -0.1523090856 0.0000000000 1.0000000000 -0.2525011145 0.0000000000 1.0000000000\n" " 3 2 2 1 1\n" " 0.7380000000 1.0000000000\n" "#","\n" "Ar TZV2P-GTH-q8 TZV2P-GTH\n" " 2\n" " 3 0 1 5 3 3\n" " 3.7933849461 -0.1618280953 0.0000000000 0.0000000000 0.0960404756 0.0000000000 0.0000000000\n" " 2.9269187333 0.5221781637 0.0000000000 0.0000000000 -0.0704844503 0.0000000000 0.0000000000\n" " 0.9316537640 -0.3632163241 0.0000000000 0.0000000000 -0.3787707182 0.0000000000 0.0000000000\n" " 0.3621005146 -0.7358329756 1.0000000000 0.0000000000 -0.5047539917 1.0000000000 0.0000000000\n" " 0.1287409102 -0.1523090856 0.0000000000 1.0000000000 -0.2525011145 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.2540000000 1.0000000000 0.0000000000\n" " 0.4100000000 0.0000000000 1.0000000000\n" "#","\n" "Ar QZV2P-GTH-q8 QZV2P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 5.2342384840 0.0594091942 0.0000000000 0.0000000000 0.0000000000 -0.0218235164 0.0000000000 0.0000000000 0.0000000000\n" " 3.0293732626 -0.3808584814 0.0000000000 0.0000000000 0.0000000000 -0.0397609427 0.0000000000 0.0000000000 0.0000000000\n" " 1.3121914980 0.0527214554 0.0000000000 0.0000000000 0.0000000000 0.2096390562 0.0000000000 0.0000000000 0.0000000000\n" " 0.5914580696 0.6333744672 1.0000000000 0.0000000000 0.0000000000 0.4311838680 1.0000000000 0.0000000000 0.0000000000\n" " 0.2478147218 0.4727819382 0.0000000000 1.0000000000 0.0000000000 0.3981434659 0.0000000000 1.0000000000 0.0000000000\n" " 0.0969644987 0.0535029998 0.0000000000 0.0000000000 1.0000000000 0.1359825259 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 2 2\n" " 1.2540000000 1.0000000000 0.0000000000\n" " 0.4100000000 0.0000000000 1.0000000000\n" "#","\n" "Ar QZV3P-GTH-q8 QZV3P-GTH\n" " 2\n" " 3 0 1 6 4 4\n" " 5.2342384840 0.0594091942 0.0000000000 0.0000000000 0.0000000000 -0.0218235164 0.0000000000 0.0000000000 0.0000000000\n" " 3.0293732626 -0.3808584814 0.0000000000 0.0000000000 0.0000000000 -0.0397609427 0.0000000000 0.0000000000 0.0000000000\n" " 1.3121914980 0.0527214554 0.0000000000 0.0000000000 0.0000000000 0.2096390562 0.0000000000 0.0000000000 0.0000000000\n" " 0.5914580696 0.6333744672 1.0000000000 0.0000000000 0.0000000000 0.4311838680 1.0000000000 0.0000000000 0.0000000000\n" " 0.2478147218 0.4727819382 0.0000000000 1.0000000000 0.0000000000 0.3981434659 0.0000000000 1.0000000000 0.0000000000\n" " 0.0969644987 0.0535029998 0.0000000000 0.0000000000 1.0000000000 0.1359825259 0.0000000000 0.0000000000 1.0000000000\n" " 3 2 2 3 3\n" " 1.8730000000 1.0000000000 0.0000000000 0.0000000000\n" " 0.7630000000 0.0000000000 1.0000000000 0.0000000000\n" " 0.3110000000 0.0000000000 0.0000000000 1.0000000000\n" "#","\n" "W DZVP-GTH-q14 DZVP-GTH\n" " 3\n" " 5 0 0 4 3\n" " 3.17833961 -0.59405642 0.16293727 0.00000000\n" " 1.54892965 0.66388244 -0.20717075 0.00000000\n" " 0.65507630 0.77725275 -0.51725023 0.00000000\n" " 0.08615458 0.02093277 1.15557619 1.00000000\n" " 5 1 1 4 2\n" " 2.98630221 0.05620580 0.00000000\n" " 1.21317676 -0.52492834 0.00000000\n" " 0.58573989 -0.46305304 0.00000000\n" " 0.26423237 -0.11761739 1.00000000\n" " 5 2 2 4 2\n" " 3.98958029 0.05242902 0.00000000\n" " 1.11283726 -0.37652293 0.00000000\n" " 0.39364968 -0.52218358 0.00000000\n" " 0.12396511 -0.33923705 1.00000000\n" "#"}; Atomes-GNU-1.1.14/src/calc/cp2k/cp2k_init.c000066400000000000000000001454121457665371200200620ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cp2k_init.c * @short Initialization of the CP2K input assistant * @author Sébastien Le Roux */ /* * This file: 'cp2k_init.c' * * Contains: * - The initialization of the CP2K input assistant * * List of functions: int find_cp2k_sym (); gboolean cp2k_with_motion (); gchar * cp_section_name (int p); gchar * page_name_cp2k (int p); void print_start_buffer (); void create_mol_selection_button (GtkWidget * box, int id); void cp2k_option_box (GtkWidget * box, int id); void add_cp2k_pages (); G_MODULE_EXPORT void update_cp2k_option (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_cp2k_option_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_cp2k_option_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void mol_selection_button (GtkButton * but, gpointer data); G_MODULE_EXPORT void cp2k_option_dialog (GtkWidget *but, gpointer data); G_MODULE_EXPORT void update_cp2k_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_cp2k_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void cp2k_file_info (GtkTextBuffer * textbuf, gpointer data); G_MODULE_EXPORT void changed_cp2k_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void select_input_type (GtkToggleButton * but, gpointer data); GtkWidget * create_vdw_box (int id); GtkWidget * create_cp2k_spec_box (int spec); GtkWidget * cp2k_section_box (int s); GtkWidget * vbox_cp2k (int s); GtkWidget * file_info (int id); GtkWidget * init_cp2k (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "calc.h" #include "cp2k.h" #include "cpmd.h" extern GtkWidget * thermo_box (); extern void print_cp2k (int f, GtkTextBuffer * buffer); extern ColRGBA init_color (int id, int numid); extern GtkWidget * qm_preview_box (int c, int s, int l); extern void field_unselect_all (); extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); extern void create_selection_button (GtkWidget * box, int num, int id, gpointer data); extern void cp2k_fix_molecule (); cp2k * tmp_cp2k; double default_cp2k_options[41] = {0.0, 86400.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 300.0, 4.0, 0.0, 0.0, 50.0, 0.000001, 20.0, 0.00001, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 7.0, 10000.0, 2.5, 300.0, 1.0, 10000.0, 0.0001, 10.0, 0.0, 0.0}; double default_vdw_cut[2] = {-2.00000000E+000, 1.05835442E+001}; double default_cp2k_extra[3][4] = {{0.0, 0.0, 0.0, 0.0}, {0.0, 0.0, 0.0, 0.0}, {-1.0, -1.0, 1.0, 0.0}}; gchar * cp2k_unit[6]={"s", "Ry", "fs", "K", "a.u.", "steps"}; int cp2k_default_num[12] = {7, 3, 3, 4, 3, 11, 8, 4, 10, 9, 4, 2}; gchar * cp2k_default_keywords[11][11] = {{"ENERGY", "ENERGY_FORCES", "GEOMETRY_OPTIMIZATION", "MOLECULAR_DYNAMICS", "VIBRATIONAL_ANALYSIS", "LINEAR_RESPONSE", "EHRENFEST_DYN", " ", " ", " ", " "}, {"LOW", "MEDIUM", "HIGH", " ", " ", " ", " ", " ", " ", " ", " "}, {"GPW", "GAPW", "GAPW_XC", " ", " ", " ", " ", " ", " ", " ", " "}, {"ATOMIC", "CORE", "RANDOM", "RESTART", " ", " ", " ", " ", " ", " ", " "}, {"BROYDEN", "CG", "DIIS", " ", " ", " ", " ", " ", " ", " ", " "}, {"BLYP", "B3LYP", "BEEFVDW", "BP", "HCTH120", "LDA", "OLYP", "PADE", "PBE", "PBE0", "TPSS"}, {"XYZ", "XY", "XZ", "YZ", "X", "Y", "Z", "NONE", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"CUBIC", "HEXAGONAL", "ORTHORHOMBIC", "RHOMBOHEDRAL", "TETRAGONAL_AB", "TETRAGONAL_AC", "TETRAGONAL_BC", "MONOCLINIC", "TRICLINIC", "NONE", " "}, {"ISOKIN", "LANGEVIN", "NPE_F", "NPE_I", "NPT_F", "NPT_I", "NVE", "NVT", "NVT_ADIABATIC", " ", " "}, {"BFGS", "CG", " ", " ", " ", " ", " ", " ", " ", " ", " "}}; gchar * cp2k_vdw_keywords[2][3] = {{"DRSLL", "LMKLL", "RVV10"}, {"DFTD2", "DFTD3", "DFTD3(BJ)"}}; gchar * cp2k_default_text[11][11] = {{"Single point energy calculation", "Single point energy and forces calculation", "Geometry optimization", "Molecular dynamics", "Vibrational analysis", "Linear response calculation", "Ehrenfest dynamics", " ", " ", " ", " "}, {"Low", "Medium", "High", " ", " ", " ", " ", " ", " ", " ", " "}, {"Gaussian and plane waves method", "Gaussian and augmented plane waves method", "Gaussian and augmented plane waves method only for XC", " ", " ", " ", " ", " ", " ", " ", " "}, {"Generate an atomic density using the atomic code", "Diagonalize the core Hamiltonian", "Use random wave-function coefficients", "Use the RESTART file", " ", " ", " ", " ", " ", " ", " "}, {"Broyden mixing approximating the inverse Hessian", "Conjugate Gradients", "Direct inversion in the iterative subspace", " ", " ", " ", " ", " ", " ", " ", " "}, {"Becke + Lee-Yang-Parr", "Becke three-parameters hybrid + LYP", "Bayesian error estimation + van der Walls", "Becke + Perdew", "Hamprecht-Cohen-Tozer-Handy", "Local Density Approximation", "Handy-Cohen + LYP", "Padé", "Perdew + Burke-Ernzerhof", "Parameter-free PBE", "Tao-Perdew-Staroverov-Scuseria"}, {"3 dimensional (XYZ)", "2 dimensional (XY)", "2 dimensional (XZ)", "2 dimensional (YZ)", "1 dimensional (X)", "1 dimensional (Y)", "1 dimensional (Z)", "Isolated system", " ", " ", " "}, {"Box parameters (a,b,c and α,β,γ)", "Lattice vectors", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Cubic (a = b = c, α = β = γ = 90°)", "Hexagonal (a = b ≠ c, α = β = 90°, γ = 60°)", "Orthorhombic (a ≠ b ≠ c, α = β = γ = 90°)", "Rhombohedral (a = b = c, α = β = γ ≠ 90°)", "Tetragonal (a = b ≠ c, α = β = γ = 90°)", "Tetragonal (a = c ≠ b, α = β = γ = 90°)", "Tetragonal (a ≠ b = c, α = β = γ = 90°)", "Monoclinic (a ≠ b ≠ c ≠ a, α = γ = 90°, β ≠ 90°)", "Triclinic (a ≠ b ≠ c ≠ a, α ≠ β ≠ γ ≠ α ≠ 90°)", "No cell symmetry", " "}, {"Constant kinetic energy", "Langevin dynamics (constant temperature)", "Constant pressure ensemble (no thermostat)", "Constant pressure ensemble using an isotropic cell (no thermostat)", "Constant temperature and pressure using a flexible cell", "Constant temperature and pressure using an isotropic cell", "Constant energy (µ-canonical)", "Constant temperature and volume (canonical)", "Adiabatic dynamics in constant temperature and volume ensemble (CAFES)", " ", " "}, {"Diagonalization of a full Hessian matrix", "Conjugate gradients", " ", " ", " ", " ", " ", " ", " ", " ", " "}}; gchar * cp2k_vdw_text[2][3] = {{"Dion-Rydberg-Schroeder-Langreth-Lundqvist non-local van der Waals density functional", "Lee-Murray-Kong-Lundqvist-Langreth non-local van der Waals density functional", "Revised Vydrov-van Voorhis non-local van der Waals density functional"}, {"Grimme D2 method", "Grimme D3 method (zero damping)", "Grimme D3 method (Becke-Johnson damping)"}}; int var_by_cp2sections[4] = {8, 20, 3, 10}; gchar * global_opts[40] = {"Run type:", "Max CPU time:", "Print level:", "Use restart information:", "File that contains the restart information:", "File that contains the basis set(s):", "File that contains the pseudo-potential(s):", "File that contains the wave-function:", "Charge:", "Density cutoff for the finest grid level:", "Number of multi-grids:", "Quickstep method:", "Initial guess for the wave-function:", "Maximum inner-SCF cycle(s):", "Convergence threshold:", "Maximum outer-SCF cycle(s):", "Convergence threshold:", "Orbital transformation minimizer:", "DFT functional:", "Spin unrestricted calculation", "Multiplicity", "Use van der Waals interactions", "Restricted Open Kohn-Sham 'ROKS'", "Forces", "Stress tensor", "Mulliken population", "Löwdin population", "Orbitals", "Periodicity:", "Lattice parameters:", "Symmetry:", "Ensemble:", "Maximum number of MD steps:", "MD time step:", "Initial temperature:", "Geometry optimizer:", "Maximum number of optimization steps:", "Atomic forces convergence criterion:", "Save information every:", "Add constraint(s)"}; gchar * cpelemts[7] = {"The CP2K input structure", "provides the general control parameters for the calculation to be performed", "describes how the interatomic forces will be evaluated", "describes the model: symmetry, periodicity and atomic species, pseudo-potentials and coordinates", "describes the displacement of the atoms for molecular dynamics of geometry optimization", "To describe the thermostat(s) for molecular dynamics", "To describe the parameters required for restart"}; gchar * cpsect[4] = {"GLOBAL", "FORCE_EVAL", "SUBSYS", "MOTION"}; char * k_thermo[CP2NTHERM][4] = {{"TIMECON_LANGEVIN", "TIMECON_NH", "MASS", "CHI"}, {"TIMECON", " ", " ", " "}, {" ", " ", " ", " "}, {"LENGTH", "MTS", "TIMECON", "YOSHIDA"}}; #define NC2OP 20 // 0 = None, 1 = Entry, 2 = Combo (-2 thermostats), 3 = yes/no, 4 = textbuffer int cp2k_opts_type[4][NC2OP] = {{ 2, 1, 2, 3, 4, 4, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // GLOBAL { 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 3, 1, 3, 3, 3, 3, 3, 3, 3}, // FEVAL { 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // SUBSYS { 2, -2, 1, 1, 1, 2, 1, 1, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}; // MOTION int idunit; int checkb; int optionb; int motionb; GtkWidget * print_box; GtkWidget * vfbox[2]; GtkWidget * filebut[2]; GtkWidget * fileinf[2]; GtkWidget * cp2k_combo; GtkWidget * cp2k_label; GtkWidget * checked_box[2]; GtkWidget * option_box[4]; GtkWidget * motion_box[2]; GtkWidget * cp2k_vdw_box[2]; GtkWidget * cp2k_spec_box[2]; GtkWidget * cp2k_spec_combo; GtkWidget * spec_data_combo[2]; GtkWidget * cp2k_thermo_box; /*! \fn void print_start_buffer () \brief update of the GtkTextBuffer showing the CP2K input * */ void print_start_buffer () { if (qmbuffer[0]) { GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (qmbuffer[0], & bStart); gtk_text_buffer_get_end_iter (qmbuffer[0], & bEnd); gtk_text_buffer_delete (qmbuffer[0], & bStart, & bEnd); print_cp2k (0, qmbuffer[0]); } } /*! \fn G_MODULE_EXPORT void update_cp2k_option (GtkEntry * res, gpointer data) \brief update CP2K option entry callback \param res the GtkEntry the signal is coming from \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_option (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); switch (i) { case CP2VDW: if (v > 0.0) tmp_cp2k -> extra_opts[0][2] = v; update_entry_double (res, tmp_cp2k -> extra_opts[0][2]); break; case CP2ROK: if (v > 0.0) tmp_cp2k -> extra_opts[1][0] = v; update_entry_double (res, tmp_cp2k -> extra_opts[1][0]); break; default: if ((int)v == -1 || (int)v > 0) tmp_cp2k -> extra_opts[2][i-CP2POR] = v; update_entry_int (res, tmp_cp2k -> extra_opts[2][i-CP2POR]); break; } print_start_buffer (); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data) \brief CP2K option toggle callback GTK3 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_option_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_cp2k_option_check (GtkToggleButton * but, gpointer data) \brief CP2K option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_option_check (GtkToggleButton * but, gpointer data) #endif { int i; i = GPOINTER_TO_INT(data); #ifdef GTK4 tmp_cp2k -> extra_opts[i][(i==2)?2:3] = (double) gtk_check_button_get_active (but); #else tmp_cp2k -> extra_opts[i][(i==2)?2:3] = (double) gtk_toggle_button_get_active (but); #endif print_start_buffer (); } GtkWidget * create_vdw_box (int id); /*! \fn G_MODULE_EXPORT void changed_cp2k_option_box (GtkComboBox * box, gpointer data) \brief change a GtkComboBox while creating a CP2K input file \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_cp2k_option_box (GtkComboBox * box, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); if (i < 2) { j = k = 1; } else { j = 0; k = i - CP2VDW; } tmp_cp2k -> extra_opts[j][k] = (double) gtk_combo_box_get_active (box); if (i == CP2VDW) { cp2k_vdw_box[1] = destroy_this_widget (cp2k_vdw_box[1]); cp2k_vdw_box[1] = create_vdw_box ((int)tmp_cp2k -> extra_opts[0][0]); add_box_child_start (GTK_ORIENTATION_VERTICAL, cp2k_vdw_box[0], cp2k_vdw_box[1], FALSE, FALSE, 0); show_the_widgets (cp2k_vdw_box[1]); } print_start_buffer (); } /*! \fn GtkWidget * create_vdw_box (int id) \brief create the VdW informaiton and option(s) widgets \param id the type of VdW interactions */ GtkWidget * create_vdw_box (int id) { GtkWidget * vbox, * hbox; GtkWidget * widg; gchar * cp2k_vdw_vars[2] = {"Type of potential:", "Cutoff:"}; int i, j, k; vbox = create_vbox(5); i = (id == 0) ? 2 : 3; for (j=0; j extra_opts[0][j+1]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_option_box), GINT_TO_POINTER(CP2VDW+1)); break; case 1: widg = create_entry (G_CALLBACK(update_cp2k_option), 100, 15, FALSE, GINT_TO_POINTER(CP2VDW)); tmp_cp2k -> extra_opts[0][j+1] = default_vdw_cut[id]; update_entry_double (GTK_ENTRY(widg), tmp_cp2k -> extra_opts[0][j+1]); break; case 2: widg = check_button ("Apply long range corrections", -1, -1, tmp_cp2k -> extra_opts[0][j+1], G_CALLBACK(update_cp2k_option_check), GINT_TO_POINTER(0)); break; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); } return vbox; } /*! \fn G_MODULE_EXPORT void mol_selection_button (GtkButton * but, gpointer data) \brief NOT USED ! \param but the GtkButton sending the signal \param data the associated data pointer * / G_MODULE_EXPORT void mol_selection_button (GtkButton * but, gpointer data) { cp2k_fix_molecule (); gchar * stra, * strb; if (tmp_cp2k -> fixat[1] == 0) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf ("%d fragment(s)", tmp_cp2k -> fixat[1]); strb = g_strdup_printf (APPLY); } set_image_from_icon_name (sel_img[2], strb); gtk_button_set_label (but, stra); g_free (stra); g_free (strb); } */ /*! \fn void create_mol_selection_button (GtkWidget * box, int id) \brief NOT USED ! \param box the box to insert the new widget in \param id the selection status * / void create_mol_selection_button (GtkWidget * box, int id) { GtkWidget * hbox = cpmd_box (box, "Molecule(s)* selection **:", 5, 20, 220); gchar * str; if (tmp_cp2k -> fixat[1] == 0) { str = g_strdup_printf ("Not picked yet !"); sel_img[id] = stock_image (DELETEB); } else { str = g_strdup_printf ("%d fragment(s)", tmp_cp2k -> fixat[1]); sel_img[id] = stock_image (APPLY); } sel_but[id] = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NONE, G_CALLBACK(mol_selection_button), NULL); g_free (str); widget_set_sensitive (sel_but[id], qm_view -> bonding); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_but[id], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_img[id], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label("* isolated molecular fragment", -1, -1, 0.1, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label("** requires to compute the bonding properties", -1, -1, 0.1, 0.5), FALSE, FALSE, 5); } */ /*! \fn G_MODULE_EXPORT void cp2k_option_dialog (GtkWidget * but, gpointer data) \brief CP2K option dialog - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cp2k_option_dialog (GtkWidget *but, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); GtkWidget * vbox, * hbox; GtkWidget * widg; gchar * cp2k_vdw_options[2] = {"Non-local potential", "Pair potential"}; gchar * cp2k_roks_options[2] = {"Energy scaling:", "Spin configuration *:"}; gchar * cp2k_orb_options[2] = {"Number of HOMO levels (-1 for all):", "Number of LUMO levels (-1 for all):"}; gchar * str = g_strdup_printf ("%s - options", global_opts[i]); GtkWidget * dial = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); vbox = dialog_get_content_area (dial); switch (i) { case CP2VDW: hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); widg = create_combo (); for (j=0; j<2; j++) combo_text_append (widg, cp2k_vdw_options[j]); gtk_combo_box_set_active (GTK_COMBO_BOX(widg), (int)tmp_cp2k -> extra_opts[0][0]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_option_box), GINT_TO_POINTER(CP2VDW)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Type of functional for the van der Waals interactions", 200, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); cp2k_vdw_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cp2k_vdw_box[0], FALSE, FALSE, 10); cp2k_vdw_box[1] = create_vdw_box ((int)tmp_cp2k -> extra_opts[0][0]); add_box_child_start (GTK_ORIENTATION_VERTICAL, cp2k_vdw_box[0], cp2k_vdw_box[1], FALSE, FALSE, 0); break; case CP2ROK: for (j=0; j<2; j++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(cp2k_roks_options[j], 200, -1, 0.0, 0.5), FALSE, FALSE, 5); if (j==0) { widg = create_entry (G_CALLBACK(update_cp2k_option), 100, 15, FALSE, GINT_TO_POINTER(i+j)); update_entry_double (GTK_ENTRY(widg), tmp_cp2k -> extra_opts[1][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 10); } else { widg = create_combo (); combo_text_append (widg, "alpha - α"); combo_text_append (widg, "beta - β"); gtk_combo_box_set_active (GTK_COMBO_BOX(widg), (int)tmp_cp2k -> extra_opts[1][1]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_option_box), GINT_TO_POINTER(j)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 10); } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new ("* for the singly occupied orbitals"), FALSE, FALSE, 5); break; case CP2POR: for (j=0; j<2; j++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(cp2k_orb_options[j], 250, -1, 0.0, 0.5), FALSE, FALSE, 5); widg = create_entry (G_CALLBACK(update_cp2k_option), 100, 15, FALSE, GINT_TO_POINTER(i+j)); update_entry_int (GTK_ENTRY(widg), tmp_cp2k -> extra_opts[2][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button ("Write cube files, if not then only print eigenvalues", -1, -1, tmp_cp2k -> extra_opts[2][2], G_CALLBACK(update_cp2k_option_check), GINT_TO_POINTER(2)), FALSE, FALSE, 5); break; case CP2CON: create_selection_button (vbox, tmp_cp2k -> fixat[0], 1, GINT_TO_POINTER(-1)); //create_mol_selection_button (vbox, 2); break; } run_this_gtk_dialog (dial, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn G_MODULE_EXPORT void update_cp2k_parameter (GtkEntry * res, gpointer data) \brief update some CP2K parameters \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_parameter (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (tmp_cp2k -> opts[i] != v) { tmp_cp2k -> opts[i] = v; print_start_buffer (); } if (i==CP2CUT || i==CP2SCN || i==CP2SCO || i==CP2DLT || i==CP2GEF) { update_entry_double (res, tmp_cp2k -> opts[i]); } else { update_entry_int (res, tmp_cp2k -> opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data) \brief update some CP2K parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_cp2k_check (GtkToggleButton * but, gpointer data) \brief update some CP2K parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cp2k_check (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT(data); #ifdef GTK4 tmp_cp2k -> opts[i] = (double) gtk_check_button_get_active (but); #else tmp_cp2k -> opts[i] = (double) gtk_toggle_button_get_active (but); #endif if (i == CP2RES) { for (j=0; j<2; j++) widget_set_sensitive (checked_box[j], (int)tmp_cp2k -> opts[CP2RES]); } else if (i==CP2SPI || i==CP2VDW || i==CP2ROK || i==CP2POR || i==CP2CON) { switch (i) { case CP2SPI: j = 0; break; case CP2VDW: j = 1; break; case CP2ROK: j = 2; break; case CP2POR: j = 3; break; case CP2CON: j = 4; break; } widget_set_sensitive (option_box[j], (int)tmp_cp2k -> opts[i]); } print_start_buffer (); } /*! \fn G_MODULE_EXPORT void cp2k_file_info (GtkTextBuffer * textbuf, gpointer data) \brief update the C2PK information textview \param textbuf the GtkTextBuffer sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cp2k_file_info (GtkTextBuffer * textbuf, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data) - CP2FRE; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (textbuf, & bStart); gtk_text_buffer_get_end_iter (textbuf, & bEnd); if (i < 5) { if (tmp_cp2k -> files[i] != NULL) g_free (tmp_cp2k -> files[i]); tmp_cp2k -> files[i] = g_strdup_printf ("%s", gtk_text_buffer_get_text (textbuf, & bStart, & bEnd, FALSE)); if (g_strcmp0 (tmp_cp2k -> files[i], "") == 0) tmp_cp2k -> files[i] = NULL; } else { j = gtk_combo_box_get_active (GTK_COMBO_BOX(cp2k_spec_combo)); k = i + CP2FRE - 10; if (tmp_cp2k -> spec_files[j][k] != NULL) g_free (tmp_cp2k -> spec_files[j][k]); tmp_cp2k -> spec_files[j][k] = g_strdup_printf ("%s", gtk_text_buffer_get_text (textbuf, & bStart, & bEnd, FALSE)); if (g_strcmp0 (tmp_cp2k -> spec_files[j][k], "") == 0) { tmp_cp2k -> spec_files[j][k] = NULL; gtk_combo_box_set_active (GTK_COMBO_BOX(spec_data_combo[k]), tmp_cp2k -> spec_data[j][k]); widget_set_sensitive (spec_data_combo[k], TRUE); } else if (spec_data_combo[k] != NULL) { gtk_combo_box_set_active (GTK_COMBO_BOX(spec_data_combo[k]), -1); widget_set_sensitive (spec_data_combo[k], FALSE); } } print_start_buffer (); } /*! \fn GtkWidget * create_cp2k_spec_box (int spec) \brief create a CP2K chemical species option combo box \param spec the chemical species */ GtkWidget * create_cp2k_spec_box (int spec) { gchar * info[2] = {"- Select and use set of parameters from the database: ", "- Define and use other set of parameters: "}; gchar * data_name[2][2] = {{"\t\tAvailable basis set for ", "\t\tAvailable pseudo-potential for "}, {"\t\tBasis set for ", "\t\tPseudo-potential for "}}; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; gchar * str; int i, j; for (i=0; i<2; i++) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(info[i], -1, -1, 0.0, 0.5), FALSE, FALSE, 5); for (j=0; j<2; j++) { str = g_strdup_printf ("%s%s", data_name[i][j], qm_proj -> chemistry -> label[spec]); hbox = cpmd_box (vbox, str, 5, 5, 300); g_free (str); if (i==0) { spec_data_combo[j] = NULL; if (tmp_cp2k -> spec_data[spec][j] > -1) { spec_data_combo[j] = prepare_basis_combo (spec, j); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spec_data_combo[j], FALSE, FALSE, 5); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("None", -1, -1, 0.5, 0.5), FALSE, FALSE, 5); } } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_text_view (350, -1, 1, 0, G_CALLBACK(cp2k_file_info), GINT_TO_POINTER(j+10), tmp_cp2k -> spec_files[spec][j]), FALSE, FALSE, 5); } } } return vbox; } gboolean cp2k_with_motion (); GtkWidget * vbox_cp2k (int s); gchar * page_name_cp2k (int p); /*! \fn G_MODULE_EXPORT void changed_cp2k_box (GtkComboBox * box, gpointer data) \brief change CP2K option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_cp2k_box (GtkComboBox * box, gpointer data) { int i, j; gboolean motion; i = GPOINTER_TO_INT(data); j = gtk_combo_box_get_active (box); if (j != (int)tmp_cp2k -> opts[i]) { if (i == CP2SYM) { cp2k_spec_box[1] = destroy_this_widget (cp2k_spec_box[1]); cp2k_spec_box[1] = create_cp2k_spec_box (gtk_combo_box_get_active (box)); show_the_widgets (cp2k_spec_box[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cp2k_spec_box[0], cp2k_spec_box[1], FALSE, FALSE, 0); } else { if (i == CP2RUN) motion = cp2k_with_motion (); tmp_cp2k -> opts[i] = (double) gtk_combo_box_get_active (box); if (i == CP2RUN) { if (motion && ! cp2k_with_motion()) { gtk_assistant_remove_page (GTK_ASSISTANT(qm_assistant), 5); } else if (! motion && cp2k_with_motion()) { GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); idopt = CP2SYM; motionb = -1; optionb = 3; idunit = 1; icomb = 8; GtkWidget * page = vbox_cp2k (3); show_the_widgets (page); gtk_assistant_insert_page (assist, page, 5); gtk_assistant_set_page_title (assist, page, page_name_cp2k(4)); gtk_assistant_set_page_type (assist, page, GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_complete (assist, page, TRUE); cp2k_with_motion (); } } else if (i == CP2ENS) { if (j == 2 || j == 3) { widget_set_sensitive (cp2k_thermo_box, FALSE); } else { widget_set_sensitive (cp2k_thermo_box, TRUE); } } print_start_buffer (); } } } /*! \fn void cp2k_option_box (GtkWidget * box, int id) \brief create a CP2K option combo box \param box the box to insert the new widgets in \param id the option id */ void cp2k_option_box (GtkWidget * box, int id) { optionb ++; option_box[optionb] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, option_box[optionb], FALSE, FALSE, 5); if (id != CP2SPI) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, option_box[optionb], create_button ("Options", IMG_STOCK, DPROPERTIES, 200, -1, GTK_RELIEF_NORMAL, G_CALLBACK(cp2k_option_dialog), GINT_TO_POINTER(id)), FALSE, FALSE, 50); } widget_set_sensitive (option_box[optionb], (int)tmp_cp2k -> opts[id]); } /*! \fn GtkWidget * cp2k_section_box (int s) \brief create the CP2K assistant section box \param s the section id */ GtkWidget * cp2k_section_box (int s) { int i, j, k; GtkWidget * hbox; GtkWidget * widg; GtkWidget * vbox = create_vbox (BSEP); for (i=0; i 0) { idopt ++; j = idopt; if (j == CP2NST) { cp2k_thermo_box = thermo_box(); add_box_child_start (GTK_ORIENTATION_VERTICAL, motion_box[motionb], cp2k_thermo_box, FALSE, FALSE, 5); hbox = cpmd_box (motion_box[motionb], global_opts[idopt], 5, 5, 300); } else if (j == CP2FRE || j == CP2FWV) { checkb ++; checked_box[checkb] = cpmd_box (vbox, global_opts[idopt], 5, 5, 300); } else if (j == CP2SPM) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, option_box[optionb], markup_label(global_opts[idopt], 100, 30, 0.0, 0.5), FALSE, FALSE, 50); } else if (j == CP2PFO || j == CP2PLO) { if (j == CP2PFO) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Print:", -1, -1, 0.0, 0.5), FALSE, FALSE, 5); print_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, print_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, print_box, markup_label(global_opts[idopt], 150, 30, 0.0, 0.5), FALSE, FALSE, 50); } else if (j > CP2ROK && j < CP2PBC) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, print_box, markup_label(global_opts[idopt], 150, 30, 0.0, 0.5), FALSE, FALSE, 50); } else if (j == CP2ENS || j == CP2GMI) { motionb ++; motion_box[motionb] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, motion_box[motionb], FALSE, FALSE, 5); hbox = cpmd_box (motion_box[motionb], global_opts[idopt], 5, 5, 300); } else if (j > CP2ENS && j < CP2OUF) { hbox = cpmd_box (motion_box[motionb], global_opts[idopt], 5, 5, 300); } else if (j == CP2SCN || j == CP2SCO) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(global_opts[idopt], 150, 30, 0.0, 0.5), FALSE, FALSE, 30); } else { hbox = cpmd_box (vbox, global_opts[idopt], 5, 5, 300); } switch (cp2k_opts_type[s][i]) { case 1: ident ++; widg = create_entry (G_CALLBACK(update_cp2k_parameter), 100, 15, FALSE, GINT_TO_POINTER(j)); if (j==CP2CUT || j==CP2SCN || j==CP2SCO || j==CP2DLT || j==CP2GEF) { update_entry_double (GTK_ENTRY(widg), tmp_cp2k -> opts[j]); } else { update_entry_int (GTK_ENTRY(widg), tmp_cp2k -> opts[j]); } break; case 2: icomb ++; widg = create_combo (); for (k=0; k opts[j]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_cp2k_box), GINT_TO_POINTER(j)); break; case 3: widg = check_button (NULL, -1, -1, tmp_cp2k -> opts[j], G_CALLBACK(update_cp2k_check), GINT_TO_POINTER(j)); break; case 4: widg = create_text_view (200, -1, 1, 0, G_CALLBACK(cp2k_file_info), GINT_TO_POINTER(j), tmp_cp2k -> files[j-CP2FRE]); break; default: break; } if (j==CP2FRE || j==CP2FWV) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, checked_box[checkb], widg, FALSE, FALSE, 5); widget_set_sensitive (checked_box[checkb], (int)tmp_cp2k -> opts[CP2RES]); } else if (j==CP2SPM) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, option_box[optionb], widg, FALSE, FALSE, 5); } else if (j > CP2ROK && j < CP2PBC) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, print_box, widg, FALSE, FALSE, 5); if (j == CP2POR) cp2k_option_box (print_box, j); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); if (j==CP2SPI || j==CP2VDW || j==CP2ROK || j==CP2CON) cp2k_option_box (hbox, j); } if (j==CP2KTI || j==CP2CUT || j==CP2DLT || j==CP2TMP || j==CP2GEF || j==CP2OUF) { idunit ++; widg = gtk_label_new (cp2k_unit[idunit]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); } if (idopt == CP2SYM) { gchar * str = g_strdup_printf (" %s provides official CP2K atomic basis sets and pseudo-potentials, are included:", PACKAGE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("\t - BASIS_MOLOPT\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - GTH_BASIS_SETS\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - BASIS_SET\t\t(CP2K v9.1, released: 2021-12-31)\n" "\t - POTENTIAL\t\t(CP2K v9.1, released: 2021-12-31)", -1, -1, 0.1, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(" Following your selection the files that contains the parameters for your calculation will be generated automatically.\n" " Alternatively it is possible to define and use your own set of parameters.", -1, -1, 0.0, 0.5), FALSE, FALSE, 20); hbox = cpmd_box (vbox, "\t\t\t\tChemical species", 20, 5, 300); cp2k_spec_combo = create_combo (); for (k=0; k nspec; k++) combo_text_append (cp2k_spec_combo, qm_proj -> chemistry -> label[k]); gtk_combo_box_set_active (GTK_COMBO_BOX(cp2k_spec_combo), 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cp2k_spec_combo, FALSE, FALSE, 5); cp2k_spec_box[0] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cp2k_spec_box[0], FALSE, FALSE, 0); cp2k_spec_box[1] = create_cp2k_spec_box (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cp2k_spec_box[0], cp2k_spec_box[1], FALSE, FALSE, 0); g_signal_connect (G_OBJECT (cp2k_spec_combo), "changed", G_CALLBACK(changed_cp2k_box), GINT_TO_POINTER(j)); } } } return vbox; } /*! \fn gchar * cp_section_name (int p) \brief get CP2K section name \param p the section id */ gchar * cp_section_name (int p) { if (p < 4) { return g_strdup_printf ("Details of the %s section that %s", cpsect[p], cpelemts[p+1]); } else { return g_strdup_printf ("%s", cpelemts[p+1]); } } /*! \fn GtkWidget * vbox_cp2k (int s) \brief create the CP2K assistant page vertical box \param s the section id */ GtkWidget * vbox_cp2k (int s) { GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(cp_section_name(s), -1, 20, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cp2k_section_box(s), FALSE, FALSE, 0); if (s== 0) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, qm_preview_box (1, s, 0), FALSE, FALSE, 5); return vbox; } /*! \fn G_MODULE_EXPORT void select_input_type (GtkToggleButton * but, gpointer data) \brief select the input file type \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_input_type (GtkToggleButton * but, gpointer data) { tmp_cp2k -> input_type = GPOINTER_TO_INT (data); widget_set_sensitive (fileinf[! tmp_cp2k -> input_type], FALSE); widget_set_sensitive (fileinf[tmp_cp2k -> input_type], TRUE); print_start_buffer (); } /*! \fn GtkWidget * file_info (int id) \brief create the assistant page that present the input file(s) properties \param id the input file(s) type (0 = single, 1 = multiple) */ GtkWidget * file_info (int id) { GtkWidget * main_box; gchar * filename[4] = {"CP2K main input file '*.inp'", "forces.inc", "system.inc", "motion.inc"}; gchar * filetext[4] = {"&GLOBAL\n...\n&END GLOBAL\n\n@INCLUDE 'forces.inc'\n\n@INCLUDE 'motion.inc'", "&FORCE_EVAL\n...\n@INCLUDE 'system.inc'\n&END FORCE_EVAL", "&SUBSYS\n...\n&END SUBSYS", "&MOTION\n...\n&END MOTION"}; GtkWidget * vbox, * vbx, * hbx; GtkWidget * vframe; if (id == 0) { main_box = create_vbox (BSEP); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, stock_image(AFILE), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, gtk_label_new ("CP2K input file '*.inp'"), FALSE, FALSE, 5); vframe = gtk_frame_new (NULL); gtk_frame_set_label_widget (GTK_FRAME(vframe), hbx); #ifdef GTK3 gtk_frame_set_shadow_type (GTK_FRAME(vframe), GTK_SHADOW_ETCHED_IN); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, main_box, vframe, FALSE, FALSE, 10); vbox = create_vbox (BSEP); add_container_child (CONTAINER_FRA, vframe, vbox); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("! Information", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&GLOBAL\n...\n&END GLOBAL", 100, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&FORCE_EVAL\n...", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbx, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, markup_label("&SUBSYS\n...\n&END SUBSYS", 150, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&END FORCE_EVAL", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("&MOTION\n...\n&END MOTION", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); } else { main_box = create_hbox (0); vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, main_box, vbox, FALSE, FALSE, 0); int i; for (i=0; i<4; i++) { hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, stock_image(AFILE), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, gtk_label_new (filename[i]), FALSE, FALSE, 5); vframe = gtk_frame_new (NULL); gtk_frame_set_label_widget (GTK_FRAME(vframe), hbx); #ifdef GTK3 gtk_frame_set_shadow_type (GTK_FRAME(vframe), GTK_SHADOW_ETCHED_IN); #endif vbx = create_vbox (BSEP); add_container_child (CONTAINER_FRA, vframe, vbx); if (i == 0) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, markup_label("! Information", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, markup_label(filetext[i], 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vframe, FALSE, FALSE, 5); if (i == 0) { vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, main_box, vbox, FALSE, FALSE, 20); } } } return main_box; } /*! \fn GtkWidget * init_cp2k () \brief initialize the CP2K input creation assistant * */ GtkWidget * init_cp2k () { GtkWidget * vbox = create_vbox (BSEP); gchar * text = "The CP2K input system offers to have the information gathered in a single, rather long, file\n" "or separated in several files each of them dedicated to a particular section of the input: "; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (text), FALSE, FALSE, 20); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * hbx; gchar * ftext[2] = {"Single input file", "Multiple files"}; int i, j; j = tmp_cp2k -> input_type; for (i=0; i<2; i++) { vfbox[i] = create_vbox (BSEP); gtk_widget_set_size_request (vfbox[i], (i==0) ? 200 : 400, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vfbox[i], FALSE, FALSE, (i==0) ? 50 : 10); fileinf[i] = file_info (i); add_box_child_start (GTK_ORIENTATION_VERTICAL, vfbox[i], fileinf[i], FALSE, FALSE, (i==0) ? 0 : 15); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vfbox[i], hbx, FALSE, FALSE, 0); #ifdef GTK4 filebut[i] = check_button (ftext[i], -1, -1, (i != j) ? FALSE : TRUE, G_CALLBACK(select_input_type), GINT_TO_POINTER(i)); if (i) gtk_check_button_set_group ((GtkCheckButton *)filebut[i], (GtkCheckButton *)filebut[0]); #else if (! i) { filebut[i] = radio_button (ftext[i], -1, -1, (i != j) ? FALSE : TRUE, G_CALLBACK(select_input_type), GINT_TO_POINTER(i)); } else { filebut[i] = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(filebut[0]), ftext[i]); } #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, filebut[i], FALSE, FALSE, (i==0) ? 50 : 120); } tmp_cp2k -> input_type = j; widget_set_sensitive (fileinf[tmp_cp2k -> input_type], TRUE); widget_set_sensitive (fileinf[! tmp_cp2k -> input_type], FALSE); show_the_widgets (vbox); return vbox; } /*! \fn gchar * page_name_cp2k (int p) \brief get CP2K assistant page name \param p the page id */ gchar * page_name_cp2k (int p) { if (p == 0) { return g_strdup_printf ("The CP2K input structure"); } else if (p < 5) { return g_strdup_printf ("The %s section", cpsect[p-1]); } else if (p == 5) { return g_strdup_printf ("The MOTION section - thermostat(s)"); } else { return g_strdup_printf ("The MOTION section - restart(s)"); } } /*! \fn gboolean cp2k_with_motion () \brief CP2K MD calculation ? */ gboolean cp2k_with_motion () { if (GTK_IS_WIDGET(motion_box[0])) gtk_widget_hide (motion_box[0]); if (GTK_IS_WIDGET(motion_box[1])) gtk_widget_hide (motion_box[1]); if (tmp_cp2k -> opts[CP2RUN] == 2.0 || tmp_cp2k -> opts[CP2RUN] == 3.0 || tmp_cp2k -> opts[CP2RUN] == 6.0) { int i = (tmp_cp2k -> opts[CP2RUN] == 2.0) ? 1 : 0; if (GTK_IS_WIDGET(motion_box[i])) gtk_widget_show (motion_box[i]); return TRUE; } else { return FALSE; } } /*! \fn void add_cp2k_pages () \brief add pages to the CP2 assistant */ void add_cp2k_pages () { int i; gchar * info; GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); GtkWidget * page; idopt = -1; ident = -1; icomb = -1; idunit = -1; checkb = -1; optionb = -1; motionb = -1; for (i=0; i<(cp2k_with_motion() ? 5: 4); i++) { if (i > 0) { page = vbox_cp2k (i-1); } else { page = init_cp2k (); } gtk_assistant_append_page (assist, page); gtk_assistant_set_page_title (assist, page, page_name_cp2k(i)); gtk_assistant_set_page_type (assist, page, GTK_ASSISTANT_PAGE_CONTENT); gtk_assistant_set_page_complete (assist, page, TRUE); } GtkWidget * conclu = create_vbox (BSEP); info = g_strdup_printf (" Finalize the creation of the CP2K input files now !"); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 100); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label("\n \tNote: You can re-open this assistant later if required to adjust your choices\n", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (assist, conclu); gtk_assistant_set_page_title (assist, conclu, "Create the input files now !"); gtk_assistant_set_page_type (assist, conclu, GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (assist, conclu, TRUE); gtk_assistant_update_buttons_state (assist); } /*! \fn int find_cp2k_sym () \brief find the CP2K symmetry parameter based on the cell properties * */ int find_cp2k_sym () { box_info * box = & qm_proj -> cell.box[0]; if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] == box -> param[0][2] && box -> param[0][1] == box -> param[0][2]) { if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2] && box -> param[1][0] == 90.0) return 0; if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2] && box -> param[1][0] != 90.0) return 3; } if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2] && box -> param[1][0] == 90.0) { if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] != box -> param[0][2]) return 4; if (box -> param[0][0] == box -> param[0][2] && box -> param[0][0] != box -> param[0][1]) return 5; if (box -> param[0][1] == box -> param[0][2] && box -> param[0][1] != box -> param[0][0]) return 6; } if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][1] == box -> param[1][2]) { if (box -> param[0][0] != box -> param[0][1] && box -> param[0][0] != box -> param[0][2] && box -> param[0][1] != box -> param[0][2]) return 2; } if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == 90.0) { if (box -> param[1][2] == 60.0) { if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] != box -> param[0][2]) return 1; } } if (box -> param[1][0] == box -> param[1][2] && box -> param[1][0] == 90.0) { if (box -> param[1][1] != 90.0) { if (box -> param[0][0] != box -> param[0][1] && box -> param[0][0] != box -> param[0][2] && box -> param[0][1] != box -> param[0][2]) return 7; } } if (box -> param[0][0] != box -> param[0][1] && box -> param[0][0] != box -> param[0][2] && box -> param[0][1] != box -> param[0][2]) { if (box -> param[1][0] != box -> param[1][1] && box -> param[1][0] != box -> param[1][2] && box -> param[1][1] != box -> param[1][2]) return 8; } return 9; } Atomes-GNU-1.1.14/src/calc/cp2k/cp2k_mol.c000066400000000000000000000253361457665371200177100ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cp2k_mol.c * @short Functions to fix fragment(s) when creating the CP2K input file * @author Sébastien Le Roux */ /* * This file: 'cp2k_mol.c' * * Contains: * - The functions to fix fragment(s) when creating the CP2K input file Note: this is not used for the time being ! * * List of functions: void frag_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void frag_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void cp2k_fix_molecule (); G_MODULE_EXPORT void select_frag (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void select_fixed_atom_confirm (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_cp2k_fix_molecule (GtkDialog * dial, gint response_id, gpointer data); */ #include "global.h" #include "interface.h" #include "cp2k.h" #include "calc.h" extern void proj_unselect_all_atoms (); extern ColRGBA init_color (int id, int numid); extern G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); extern int at_col; extern int ** old_fixed; int a_frag; int * fix_frag; extern GtkTreeStore * add_model; /*! \fn G_MODULE_EXPORT void select_frag (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select molecule toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void select_frag (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(add_model), & iter, path); int i; gtk_tree_model_get (GTK_TREE_MODEL(add_model), & iter, 0, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { fix_frag[i-1] = 0; a_frag --; } else { a_frag ++; fix_frag[i-1] = 1; } gtk_tree_store_set (add_model, & iter, 1, fix_frag[i-1], -1); } /*! \fn void frag_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the CP2K molecule tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void frag_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i; gtk_tree_model_get (mod, iter, 1, & i, -1); gtk_cell_renderer_set_visible (renderer, i); } /*! \fn void frag_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the CP2K molecule tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void frag_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, 0, & i, -1); gtk_tree_model_get (mod, iter, 1, & j, -1); set_renderer_color (j, renderer, init_color (i, qm_coord -> totcoord[2])); } gboolean sel_and_conf; /*! \fn G_MODULE_EXPORT void select_fixed_atom_confirm (GtkDialog * dialog, gint response_id, gpointer data) \brief confirm fix selection \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void select_fixed_atom_confirm (GtkDialog * dialog, gint response_id, gpointer data) { int i; if (response_id == GTK_RESPONSE_YES) { sel_and_conf = TRUE; for (i=0; i totcoord[2]; i++) { if (fix_frag[i] && ! old_fixed[i][0] && ! old_fixed[i][1] && ! old_fixed[i][2]) { gchar * str = g_strdup_printf ("Fragment %d has been selected but no coordinates appear to be frozen !\n" "Unselect fragment %d or select coordinate(s) to freeze !", i+1, i+1); show_warning (str, qm_assistant); g_free (str); sel_and_conf = FALSE; } } } destroy_this_dialog (dialog); } /*! \fn G_MODULE_EXPORT void run_cp2k_fix_molecule (GtkDialog * dial, gint response_id, gpointer data) \brief CP2K assistant fixing fragment(s) - running the dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_cp2k_fix_molecule (GtkDialog * dial, gint response_id, gpointer data) { gchar * str; int i, j; gboolean done = FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_frag > 0) { if (a_frag > 1) { str = g_strdup_printf ("Fragments N°%d", fix_frag[0]+1); if (a_frag > 2) { for (i=1; i fixlist[1] != NULL) { g_free (tmp_cp2k -> fixlist[1]); tmp_cp2k -> fixlist[1] = NULL; if (tmp_cp2k -> fixcoord[1] != NULL) { g_free (tmp_cp2k -> fixcoord[1]); tmp_cp2k -> fixcoord[1] = NULL; } } if (a_frag > 0) { tmp_cp2k -> fixlist[1] = allocint (a_frag); tmp_cp2k -> fixcoord[1] = allocdint (a_frag, 3); tmp_cp2k -> fixat[1] = a_frag; j = -1; for (i=0; i totcoord[2]; i++) { if (fix_frag[i]) { j ++; tmp_cp2k -> fixlist[1][j] = i; tmp_cp2k -> fixcoord[1][j][0] = old_fixed[i][0]; tmp_cp2k -> fixcoord[1][j][1] = old_fixed[i][1]; tmp_cp2k -> fixcoord[1][j][2] = old_fixed[i][2]; } } } } } break; case GTK_RESPONSE_CLOSE: done = TRUE; break; } if (done) destroy_this_dialog (dial); } /*! \fn void cp2k_fix_molecule () \brief CP2K assistant fixing fragment(s) - creating the dialog */ void cp2k_fix_molecule () { int i, j, k; at_col = 0; gchar * str = g_strdup_printf ("Please select the fragment(s) to fix"); GtkWidget * fmol = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(fmol), "Apply", GTK_RESPONSE_APPLY); GtkWidget * frag_tree = NULL; GtkTreeIter iter; GtkTreeViewColumn * frag_col[5]; GtkCellRenderer * frag_cell[5]; gchar * frag_title[5] = {"Fragment", "Viz.3D & Select", "x", "y", "z"}; gchar * ctype[5]={"text", "active", "active", "active", "active"}; GType col_type[5] = {G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN}; add_model = gtk_tree_store_newv (5, col_type); frag_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); for (i=0; i<5; i++) { if (i == 0) { frag_cell[i] = gtk_cell_renderer_text_new (); } else { frag_cell[i] = gtk_cell_renderer_toggle_new (); if (i == 1) { g_signal_connect (G_OBJECT(frag_cell[i]), "toggled", G_CALLBACK(select_frag), NULL); } else { j = i + 2; g_signal_connect (G_OBJECT(frag_cell[i]), "toggled", G_CALLBACK(cp2k_select_coord_id), GINT_TO_POINTER(j)); } } frag_col[i] = gtk_tree_view_column_new_with_attributes (frag_title[i], frag_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(frag_tree), frag_col[i]); gtk_tree_view_column_set_alignment (frag_col[i], 0.5); if (i == 0) { gtk_tree_view_column_set_cell_data_func (frag_col[i], frag_cell[i], frag_set_color, NULL, NULL); } else if (i > 1) { gtk_tree_view_column_set_cell_data_func (frag_col[i], frag_cell[i], frag_set_visible, NULL, NULL); } } // fill model fix_frag = NULL; fix_frag = allocint (qm_coord -> totcoord[2]); old_fixed = allocdint (qm_coord -> totcoord[2], 3); a_frag = 0; for (i=0; i totcoord[2]; i++) { gtk_tree_store_append (add_model, & iter, NULL); for (j=0; j fixat[1]; j++) { if (tmp_cp2k -> fixlist[1][j] == i) { fix_frag[i] = 1; a_frag ++; for (k=0; k<3; k++) old_fixed[i][k] = tmp_cp2k -> fixcoord[1][j][k]; break; } } gtk_tree_store_set (add_model, & iter, 0, i + 1, 1, fix_frag[i], 2, old_fixed[i][0], 3, old_fixed[i][1], 4, old_fixed[i][2], -1); } g_object_unref (add_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(frag_tree)); i = ((qm_coord -> totcoord[2]+1)*35 < 500) ? (qm_coord -> totcoord[2]+1)*35 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (fmol), 220, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, frag_tree); run_this_gtk_dialog (fmol, G_CALLBACK(run_cp2k_fix_molecule), NULL); proj_unselect_all_atoms (); g_free (fix_frag); } Atomes-GNU-1.1.14/src/calc/cp2k/cp2k_molopt-basis.c000066400000000000000000004201151457665371200215240ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cp2k_molopt-basis.c * @short CP2K MOLOPT basis set, as distributed with CP2K 9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_molopt-basis.c' * * Contains: * - CP2K MOLOPT basis set, as distributed with CP2K 9.1 This file contains 3 tables: molopt_elem -> the list of chemical elements molopt_keys -> the list of keywords cp2k_molopt -> finally the complete MOLOPT basis set */ #include "global.h" char * molopt_elem[191]={"H", "H", "H", "H", "H", "C", "C", "C", "C", "C", "N", "N", "N", "N", "N", "O", "O", "O", "O", "O", "F", "F", "F", "F", "F", "Si", "Si", "Si", "Si", "Si", "P", "P", "P", "P", "P", "S", "S", "S", "S", "S", "Cl", "Cl", "Cl", "Cl", "Cl", "H", "H", "He", "He", "Li", "Li", "Be", "Be", "B", "B", "C", "C", "N", "N", "O", "O", "F", "F", "Ne", "Ne", "Na", "Na", "Mg", "Mg", "Al", "Al", "Si", "Si", "P", "P", "S", "S", "Cl", "Cl", "Ar", "Ar", "K", "K", "Ca", "Ca", "Sc", "Sc", "Ti", "Ti", "V", "V", "Cr", "Cr", "Mn", "Mn", "Fe", "Fe", "Co", "Co", "Ni", "Ni", "Cu", "Cu", "Zn", "Zn", "Ga", "Ga", "Ge", "Ge", "As", "As", "Se", "Se", "Br", "Br", "Kr", "Kr", "Rb", "Rb", "Sr", "Sr", "Y", "Y", "Zr", "Zr", "Nb", "Nb", "Mo", "Mo", "Tc", "Tc", "Ru", "Ru", "Rh", "Rh", "Rh", "Rh", "Rh", "Pd", "Pd", "Ag", "Ag", "Cd", "Cd", "In", "In", "Sn", "Sn", "Sb", "Sb", "Te", "Te", "I", "I", "Xe", "Xe", "Cs", "Cs", "Ba", "Ba", "Hf", "Hf", "Ta", "Ta", "W", "W", "Re", "Re", "Os", "Os", "Ir", "Ir", "Pt", "Pt", "Au", "Au", "Hg", "Hg", "Tl", "Tl", "Pb", "Pb", "Bi", "Bi", "Po", "Po", "At", "At", "Rn", "Rn", "U"}; char * molopt_keys[191]={"SZV-MOLOPT-GTH-q1", "DZVP-MOLOPT-GTH-q1", "TZVP-MOLOPT-GTH-q1", "TZV2P-MOLOPT-GTH-q1", "TZV2PX-MOLOPT-GTH-q1", "SZV-MOLOPT-GTH-q4", "DZVP-MOLOPT-GTH-q4", "TZVP-MOLOPT-GTH-q4", "TZV2P-MOLOPT-GTH-q4", "TZV2PX-MOLOPT-GTH-q4", "SZV-MOLOPT-GTH-q5", "DZVP-MOLOPT-GTH-q5", "TZVP-MOLOPT-GTH-q5", "TZV2P-MOLOPT-GTH-q5", "TZV2PX-MOLOPT-GTH-q5", "SZV-MOLOPT-GTH-q6", "DZVP-MOLOPT-GTH-q6", "TZVP-MOLOPT-GTH-q6", "TZV2P-MOLOPT-GTH-q6", "TZV2PX-MOLOPT-GTH-q6", "SZV-MOLOPT-GTH-q7", "DZVP-MOLOPT-GTH-q7", "TZVP-MOLOPT-GTH-q7", "TZV2P-MOLOPT-GTH-q7", "TZV2PX-MOLOPT-GTH-q7", "SZV-MOLOPT-GTH-q4", "DZVP-MOLOPT-GTH-q4", "TZVP-MOLOPT-GTH-q4", "TZV2P-MOLOPT-GTH-q4", "TZV2PX-MOLOPT-GTH-q4", "SZV-MOLOPT-GTH-q5", "DZVP-MOLOPT-GTH-q5", "TZVP-MOLOPT-GTH-q5", "TZV2P-MOLOPT-GTH-q5", "TZV2PX-MOLOPT-GTH-q5", "SZV-MOLOPT-GTH-q6", "DZVP-MOLOPT-GTH-q6", "TZVP-MOLOPT-GTH-q6", "TZV2P-MOLOPT-GTH-q6", "TZV2PX-MOLOPT-GTH-q6", "SZV-MOLOPT-GTH-q7", "DZVP-MOLOPT-GTH-q7", "TZVP-MOLOPT-GTH-q7", "TZV2P-MOLOPT-GTH-q7", "TZV2PX-MOLOPT-GTH-q7", "SZV-MOLOPT-SR-GTH-q1", "DZVP-MOLOPT-SR-GTH-q1", "SZV-MOLOPT-SR-GTH-q2", "DZVP-MOLOPT-SR-GTH-q2", "SZV-MOLOPT-SR-GTH-q3", "DZVP-MOLOPT-SR-GTH-q3", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q3", "DZVP-MOLOPT-SR-GTH-q3", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q3", "DZVP-MOLOPT-SR-GTH-q3", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q14", "DZVP-MOLOPT-SR-GTH-q14", "SZV-MOLOPT-SR-GTH-q15", "DZVP-MOLOPT-SR-GTH-q15", "SZV-MOLOPT-SR-GTH-q16", "DZVP-MOLOPT-SR-GTH-q16", "SZV-MOLOPT-SR-GTH-q17", "DZVP-MOLOPT-SR-GTH-q17", "SZV-MOLOPT-SR-GTH-q18", "DZVP-MOLOPT-SR-GTH-q18", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q14", "DZVP-MOLOPT-SR-GTH-q14", "SZV-MOLOPT-SR-GTH-q15", "DZVP-MOLOPT-SR-GTH-q15", "SZV-MOLOPT-SR-GTH-q16", "DZVP-MOLOPT-SR-GTH-q16", "SZV-MOLOPT-SR-GTH-q17", "DZVP-MOLOPT-SR-GTH-q17", "SZV-MOLOPT-SR-GTH-q9", "SZVP-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q18", "DZVP-MOLOPT-SR-GTH-q18", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "SZV-MOLOPT-SR-GTH-q9", "DZVP-MOLOPT-SR-GTH-q9", "SZV-MOLOPT-SR-GTH-q10", "DZVP-MOLOPT-SR-GTH-q10", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q14", "DZVP-MOLOPT-SR-GTH-q14", "SZV-MOLOPT-SR-GTH-q15", "DZVP-MOLOPT-SR-GTH-q15", "SZV-MOLOPT-SR-GTH-q16", "DZVP-MOLOPT-SR-GTH-q16", "SZV-MOLOPT-SR-GTH-q17", "DZVP-MOLOPT-SR-GTH-q17", "SZV-MOLOPT-SR-GTH-q18", "DZVP-MOLOPT-SR-GTH-q18", "SZV-MOLOPT-SR-GTH-q11", "DZVP-MOLOPT-SR-GTH-q11", "SZV-MOLOPT-SR-GTH-q12", "DZVP-MOLOPT-SR-GTH-q12", "SZV-MOLOPT-SR-GTH-q13", "DZVP-MOLOPT-SR-GTH-q13", "SZV-MOLOPT-SR-GTH-q4", "DZVP-MOLOPT-SR-GTH-q4", "SZV-MOLOPT-SR-GTH-q5", "DZVP-MOLOPT-SR-GTH-q5", "SZV-MOLOPT-SR-GTH-q6", "DZVP-MOLOPT-SR-GTH-q6", "SZV-MOLOPT-SR-GTH-q7", "DZVP-MOLOPT-SR-GTH-q7", "SZV-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-SR-GTH-q8", "DZVP-MOLOPT-GTH-q14"}; char * cp2k_molopt[191]={"\n" " H SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q1\n" " 1\n" " 2 0 0 7 1\n" " 11.478000339908 0.024916243200\n" " 3.700758562763 0.079825490000\n" " 1.446884268432 0.128862675300\n" " 0.716814589696 0.379448894600\n" " 0.247918564176 0.324552432600\n" " 0.066918004004 0.037148121400\n" " 0.021708243634 -0.001125195500\n" "#","\n" " H DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q1\n" " 1\n" " 2 0 1 7 2 1\n" " 11.478000339908 0.024916243200 -0.012512421400 0.024510918200\n" " 3.700758562763 0.079825490000 -0.056449071100 0.058140794100\n" " 1.446884268432 0.128862675300 0.011242684700 0.444709498500\n" " 0.716814589696 0.379448894600 -0.418587548300 0.646207973100\n" " 0.247918564176 0.324552432600 0.590363216700 0.803385018200\n" " 0.066918004004 0.037148121400 0.438703133000 0.892971208700\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.120101316500\n" "#","\n" " H TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q1\n" " 1\n" " 2 0 1 7 3 1\n" " 11.478000339908 0.024916243200 -0.012512421400 -0.013929731000 0.024510918200\n" " 3.700758562763 0.079825490000 -0.056449071100 0.003035027400 0.058140794100\n" " 1.446884268432 0.128862675300 0.011242684700 -0.295875900100 0.444709498500\n" " 0.716814589696 0.379448894600 -0.418587548300 0.688608603400 0.646207973100\n" " 0.247918564176 0.324552432600 0.590363216700 -0.228296404800 0.803385018200\n" " 0.066918004004 0.037148121400 0.438703133000 -0.099863944100 0.892971208700\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.035435150600 0.120101316500\n" "#","\n" " H TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q1\n" " 1\n" " 2 0 1 7 3 2\n" " 11.478000339908 0.024916243200 -0.012512421400 -0.013929731000 0.024510918200 -0.016497254600\n" " 3.700758562763 0.079825490000 -0.056449071100 0.003035027400 0.058140794100 -0.023524900100\n" " 1.446884268432 0.128862675300 0.011242684700 -0.295875900100 0.444709498500 -0.484890807700\n" " 0.716814589696 0.379448894600 -0.418587548300 0.688608603400 0.646207973100 0.581651597400\n" " 0.247918564176 0.324552432600 0.590363216700 -0.228296404800 0.803385018200 -0.302708265200\n" " 0.066918004004 0.037148121400 0.438703133000 -0.099863944100 0.892971208700 0.037586403600\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.035435150600 0.120101316500 0.177876988600\n" "#","\n" " H TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q1\n" " 1\n" " 2 0 2 7 3 2 1\n" " 11.478000339908 0.024916243200 -0.012512421400 -0.013929731000 0.024510918200 -0.016497254600 0.013783151600\n" " 3.700758562763 0.079825490000 -0.056449071100 0.003035027400 0.058140794100 -0.023524900100 0.095244888900\n" " 1.446884268432 0.128862675300 0.011242684700 -0.295875900100 0.444709498500 -0.484890807700 1.000410191300\n" " 0.716814589696 0.379448894600 -0.418587548300 0.688608603400 0.646207973100 0.581651597400 0.169848598800\n" " 0.247918564176 0.324552432600 0.590363216700 -0.228296404800 0.803385018200 -0.302708265200 0.073559299500\n" " 0.066918004004 0.037148121400 0.438703133000 -0.099863944100 0.892971208700 0.037586403600 0.782848013900\n" " 0.021708243634 -0.001125195500 -0.059693171300 0.035435150600 0.120101316500 0.177876988600 -0.348307160100\n" "#","\n" " C SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q4\n" " 1\n" " 2 0 1 7 1 1\n" " 6.132624767898 -0.105576563700 0.035098108400\n" " 2.625196064782 -0.174866621100 0.114197930900\n" " 1.045456957247 0.064464981400 0.215908137300\n" " 0.478316330874 0.830447035300 0.355929151000\n" " 0.178617414302 0.371911373800 0.271541842000\n" " 0.075144725465 0.006174464000 0.056256557700\n" " 0.030286753006 0.008966477300 0.004998059700\n" "#","\n" " C DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 7 2 2 1\n" " 6.132624767898 -0.105576563700 0.024850587600 0.035098108400 -0.056712999000 0.037469425800\n" " 2.625196064782 -0.174866621100 0.147440856000 0.114197930900 -0.076743951500 0.071047574800\n" " 1.045456957247 0.064464981400 -0.421418379200 0.215908137300 -0.528056757000 0.619330561200\n" " 0.478316330874 0.830447035300 0.823051336800 0.355929151000 0.394594045700 0.710730857000\n" " 0.178617414302 0.371911373800 0.184880712100 0.271541842000 0.721247475800 0.389148235000\n" " 0.075144725465 0.006174464000 -0.742086051600 0.056256557700 0.733902531700 0.346374124100\n" " 0.030286753006 0.008966477300 0.083382192000 0.004998059700 0.248172175500 -0.005142430900\n" "#","\n" " C TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 7 3 3 1\n" " 6.132624767898 -0.105576563700 0.024850587600 -0.047388414100 0.035098108400 -0.056712999000 -0.006742034000 0.037469425800\n" " 2.625196064782 -0.174866621100 0.147440856000 -0.054003851700 0.114197930900 -0.076743951500 -0.031163909400 0.071047574800\n" " 1.045456957247 0.064464981400 -0.421418379200 -0.056737220700 0.215908137300 -0.528056757000 -0.126324702500 0.619330561200\n" " 0.478316330874 0.830447035300 0.823051336800 0.450960854100 0.355929151000 0.394594045700 0.629779932600 0.710730857000\n" " 0.178617414302 0.371911373800 0.184880712100 -0.611198185900 0.271541842000 0.721247475800 -0.487599713200 0.389148235000\n" " 0.075144725465 0.006174464000 -0.742086051600 0.365424292900 0.056256557700 0.733902531700 0.218697596000 0.346374124100\n" " 0.030286753006 0.008966477300 0.083382192000 -0.079339373900 0.004998059700 0.248172175500 -0.137064380000 -0.005142430900\n" "#","\n" " C TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 7 3 3 2\n" " 6.132624767898 -0.105576563700 0.024850587600 -0.047388414100 0.035098108400 -0.056712999000 -0.006742034000 0.037469425800 0.029169209100\n" " 2.625196064782 -0.174866621100 0.147440856000 -0.054003851700 0.114197930900 -0.076743951500 -0.031163909400 0.071047574800 0.026982879200\n" " 1.045456957247 0.064464981400 -0.421418379200 -0.056737220700 0.215908137300 -0.528056757000 -0.126324702500 0.619330561200 0.547209491100\n" " 0.478316330874 0.830447035300 0.823051336800 0.450960854100 0.355929151000 0.394594045700 0.629779932600 0.710730857000 -0.776406436300\n" " 0.178617414302 0.371911373800 0.184880712100 -0.611198185900 0.271541842000 0.721247475800 -0.487599713200 0.389148235000 0.657213953300\n" " 0.075144725465 0.006174464000 -0.742086051600 0.365424292900 0.056256557700 0.733902531700 0.218697596000 0.346374124100 -0.480025949600\n" " 0.030286753006 0.008966477300 0.083382192000 -0.079339373900 0.004998059700 0.248172175500 -0.137064380000 -0.005142430900 0.036022564900\n" "#","\n" " C TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q4\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 6.132624767898 -0.105576563700 0.024850587600 -0.047388414100 0.035098108400 -0.056712999000 -0.006742034000 0.037469425800 0.029169209100 0.022304679500\n" " 2.625196064782 -0.174866621100 0.147440856000 -0.054003851700 0.114197930900 -0.076743951500 -0.031163909400 0.071047574800 0.026982879200 0.026025873000\n" " 1.045456957247 0.064464981400 -0.421418379200 -0.056737220700 0.215908137300 -0.528056757000 -0.126324702500 0.619330561200 0.547209491100 0.716854675300\n" " 0.478316330874 0.830447035300 0.823051336800 0.450960854100 0.355929151000 0.394594045700 0.629779932600 0.710730857000 -0.776406436300 -0.024992326800\n" " 0.178617414302 0.371911373800 0.184880712100 -0.611198185900 0.271541842000 0.721247475800 -0.487599713200 0.389148235000 0.657213953300 0.633014106300\n" " 0.075144725465 0.006174464000 -0.742086051600 0.365424292900 0.056256557700 0.733902531700 0.218697596000 0.346374124100 -0.480025949600 -0.092802773900\n" " 0.030286753006 0.008966477300 0.083382192000 -0.079339373900 0.004998059700 0.248172175500 -0.137064380000 -0.005142430900 0.036022564900 -0.094955683900\n" "#","\n" " N SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q5\n" " 1\n" " 2 0 1 7 1 1\n" " 9.042730397298 -0.057711157700 0.031469526900\n" " 3.882224940673 -0.121876730300 0.109126355100\n" " 1.512880320070 0.094844857800 0.238123330300\n" " 0.586630738140 0.558583487700 0.376105481500\n" " 0.222851091943 0.346456981000 0.249727365300\n" " 0.084582888713 0.031196738600 0.054673928900\n" " 0.039193834928 0.010393976200 -0.000181794900\n" "#","\n" " N DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 7 2 2 1\n" " 9.042730397298 -0.057711157700 0.055618665600 0.031469526900 -0.012643172000 0.017852718900\n" " 3.882224940673 -0.121876730300 0.101741751800 0.109126355100 -0.031177059000 0.037932409700\n" " 1.512880320070 0.094844857800 -0.036013432800 0.238123330300 -0.094228032000 0.324051472500\n" " 0.586630738140 0.558583487700 -0.547764884700 0.376105481500 -0.192405367500 0.888374055100\n" " 0.222851091943 0.346456981000 0.606791574500 0.249727365300 0.701455729100 0.188935754200\n" " 0.084582888713 0.031196738600 0.493556790200 0.054673928900 0.593951368600 -0.049452863800\n" " 0.039193834928 0.010393976200 0.053452379800 -0.000181794900 0.039720774300 -0.019150455700\n" "#","\n" " N TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 7 3 3 1\n" " 9.042730397298 -0.057711157700 0.055618665600 0.032762883500 0.031469526900 -0.012643172000 -0.028389787500 0.017852718900\n" " 3.882224940673 -0.121876730300 0.101741751800 0.137929475200 0.109126355100 -0.031177059000 0.039238304500 0.037932409700\n" " 1.512880320070 0.094844857800 -0.036013432800 -0.215975165900 0.238123330300 -0.094228032000 -0.305920303000 0.324051472500\n" " 0.586630738140 0.558583487700 -0.547764884700 0.366111863100 0.376105481500 -0.192405367500 0.543553700700 0.888374055100\n" " 0.222851091943 0.346456981000 0.606791574500 0.307294682700 0.249727365300 0.701455729100 0.145372660300 0.188935754200\n" " 0.084582888713 0.031196738600 0.493556790200 -0.707766106200 0.054673928900 0.593951368600 -0.742817489000 -0.049452863800\n" " 0.039193834928 0.010393976200 0.053452379800 0.185238519800 -0.000181794900 0.039720774300 0.455455763000 -0.019150455700\n" "#","\n" " N TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 7 3 3 2\n" " 9.042730397298 -0.057711157700 0.055618665600 0.032762883500 0.031469526900 -0.012643172000 -0.028389787500 0.017852718900 -0.026814870200\n" " 3.882224940673 -0.121876730300 0.101741751800 0.137929475200 0.109126355100 -0.031177059000 0.039238304500 0.037932409700 0.018900829300\n" " 1.512880320070 0.094844857800 -0.036013432800 -0.215975165900 0.238123330300 -0.094228032000 -0.305920303000 0.324051472500 -0.406110228200\n" " 0.586630738140 0.558583487700 -0.547764884700 0.366111863100 0.376105481500 -0.192405367500 0.543553700700 0.888374055100 0.202616067000\n" " 0.222851091943 0.346456981000 0.606791574500 0.307294682700 0.249727365300 0.701455729100 0.145372660300 0.188935754200 0.641914827500\n" " 0.084582888713 0.031196738600 0.493556790200 -0.707766106200 0.054673928900 0.593951368600 -0.742817489000 -0.049452863800 -0.754236178400\n" " 0.039193834928 0.010393976200 0.053452379800 0.185238519800 -0.000181794900 0.039720774300 0.455455763000 -0.019150455700 0.192322748800\n" "#","\n" " N TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q5\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 9.042730397298 -0.057711157700 0.055618665600 0.032762883500 0.031469526900 -0.012643172000 -0.028389787500 0.017852718900 -0.026814870200 0.020975689500\n" " 3.882224940673 -0.121876730300 0.101741751800 0.137929475200 0.109126355100 -0.031177059000 0.039238304500 0.037932409700 0.018900829300 -0.027501696100\n" " 1.512880320070 0.094844857800 -0.036013432800 -0.215975165900 0.238123330300 -0.094228032000 -0.305920303000 0.324051472500 -0.406110228200 0.569952079600\n" " 0.586630738140 0.558583487700 -0.547764884700 0.366111863100 0.376105481500 -0.192405367500 0.543553700700 0.888374055100 0.202616067000 0.862205093600\n" " 0.222851091943 0.346456981000 0.606791574500 0.307294682700 0.249727365300 0.701455729100 0.145372660300 0.188935754200 0.641914827500 -0.067750230800\n" " 0.084582888713 0.031196738600 0.493556790200 -0.707766106200 0.054673928900 0.593951368600 -0.742817489000 -0.049452863800 -0.754236178400 -0.185330469600\n" " 0.039193834928 0.010393976200 0.053452379800 0.185238519800 -0.000181794900 0.039720774300 0.455455763000 -0.019150455700 0.192322748800 0.013120721900\n" "#","\n" " O SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q6\n" " 1\n" " 2 0 1 7 1 1\n" " 12.015954705512 -0.060190841200 0.036543638800\n" " 5.108150287385 -0.129597923300 0.120927648700\n" " 2.048398039874 0.118175889400 0.251093670300\n" " 0.832381575582 0.462964485000 0.352639910300\n" " 0.352316246455 0.450353782600 0.294708645200\n" " 0.142977330880 0.092715833600 0.173039869300\n" " 0.046760918300 -0.000255945800 0.009726110600\n" "#","\n" " O DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 7 2 2 1\n" " 12.015954705512 -0.060190841200 0.065738617900 0.036543638800 -0.034210557400 0.014807054400\n" " 5.108150287385 -0.129597923300 0.110885902200 0.120927648700 -0.120619770900 0.068186159300\n" " 2.048398039874 0.118175889400 -0.053732406400 0.251093670300 -0.213719464600 0.290576499200\n" " 0.832381575582 0.462964485000 -0.572670666200 0.352639910300 -0.473674858400 1.063344189500\n" " 0.352316246455 0.450353782600 0.186760006700 0.294708645200 0.484848376400 0.307656114200\n" " 0.142977330880 0.092715833600 0.387201458600 0.173039869300 0.717465919700 0.318346834400\n" " 0.046760918300 -0.000255945800 0.003825849600 0.009726110600 0.032498979400 -0.005771736600\n" "#","\n" " O TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 7 3 3 1\n" " 12.015954705512 -0.060190841200 0.065738617900 0.041006765400 0.036543638800 -0.034210557400 -0.000592640200 0.014807054400\n" " 5.108150287385 -0.129597923300 0.110885902200 0.080644802300 0.120927648700 -0.120619770900 0.009852349400 0.068186159300\n" " 2.048398039874 0.118175889400 -0.053732406400 -0.067639801700 0.251093670300 -0.213719464600 0.001286509800 0.290576499200\n" " 0.832381575582 0.462964485000 -0.572670666200 -0.435078312800 0.352639910300 -0.473674858400 -0.021872639500 1.063344189500\n" " 0.352316246455 0.450353782600 0.186760006700 0.722792798300 0.294708645200 0.484848376400 0.530504764700 0.307656114200\n" " 0.142977330880 0.092715833600 0.387201458600 -0.521378340700 0.173039869300 0.717465919700 -0.436184043700 0.318346834400\n" " 0.046760918300 -0.000255945800 0.003825849600 0.175643142900 0.009726110600 0.032498979400 0.073329259500 -0.005771736600\n" "#","\n" " O TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 7 3 3 2\n" " 12.015954705512 -0.060190841200 0.065738617900 0.041006765400 0.036543638800 -0.034210557400 -0.000592640200 0.014807054400 -0.013843410500\n" " 5.108150287385 -0.129597923300 0.110885902200 0.080644802300 0.120927648700 -0.120619770900 0.009852349400 0.068186159300 0.016850210400\n" " 2.048398039874 0.118175889400 -0.053732406400 -0.067639801700 0.251093670300 -0.213719464600 0.001286509800 0.290576499200 -0.186696332600\n" " 0.832381575582 0.462964485000 -0.572670666200 -0.435078312800 0.352639910300 -0.473674858400 -0.021872639500 1.063344189500 0.068001578700\n" " 0.352316246455 0.450353782600 0.186760006700 0.722792798300 0.294708645200 0.484848376400 0.530504764700 0.307656114200 0.911407510000\n" " 0.142977330880 0.092715833600 0.387201458600 -0.521378340700 0.173039869300 0.717465919700 -0.436184043700 0.318346834400 -0.333128530600\n" " 0.046760918300 -0.000255945800 0.003825849600 0.175643142900 0.009726110600 0.032498979400 0.073329259500 -0.005771736600 -0.405788515900\n" "#","\n" " O TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q6\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 12.015954705512 -0.060190841200 0.065738617900 0.041006765400 0.036543638800 -0.034210557400 -0.000592640200 0.014807054400 -0.013843410500 0.002657486200\n" " 5.108150287385 -0.129597923300 0.110885902200 0.080644802300 0.120927648700 -0.120619770900 0.009852349400 0.068186159300 0.016850210400 -0.007708463700\n" " 2.048398039874 0.118175889400 -0.053732406400 -0.067639801700 0.251093670300 -0.213719464600 0.001286509800 0.290576499200 -0.186696332600 0.378459897700\n" " 0.832381575582 0.462964485000 -0.572670666200 -0.435078312800 0.352639910300 -0.473674858400 -0.021872639500 1.063344189500 0.068001578700 0.819571172100\n" " 0.352316246455 0.450353782600 0.186760006700 0.722792798300 0.294708645200 0.484848376400 0.530504764700 0.307656114200 0.911407510000 -0.075845376400\n" " 0.142977330880 0.092715833600 0.387201458600 -0.521378340700 0.173039869300 0.717465919700 -0.436184043700 0.318346834400 -0.333128530600 0.386329438600\n" " 0.046760918300 -0.000255945800 0.003825849600 0.175643142900 0.009726110600 0.032498979400 0.073329259500 -0.005771736600 -0.405788515900 0.035062554400\n" "#","\n" " F SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q7\n" " 1\n" " 2 0 1 7 1 1\n" " 15.025672765127 -0.076135699000 0.043030876500\n" " 6.156800581515 -0.145492650600 0.138591822100\n" " 2.411456205564 0.195144281500 0.283251574300\n" " 0.963986369687 0.553654166300 0.357678749700\n" " 0.396229721431 0.454888028100 0.300622862100\n" " 0.157658905678 0.078338198300 0.138839114100\n" " 0.048130255107 0.002175323600 0.008740274300\n" "#","\n" " F DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 7 2 2 1\n" " 15.025672765127 -0.076135699000 0.060516471000 0.043030876500 -0.027382614400 0.006095862800\n" " 6.156800581515 -0.145492650600 0.078091919900 0.138591822100 -0.119463647500 0.057880784500\n" " 2.411456205564 0.195144281500 -0.051537351700 0.283251574300 -0.152089668600 0.143657436500\n" " 0.963986369687 0.553654166300 -0.448874166200 0.357678749700 -0.460859710900 0.782158193600\n" " 0.396229721431 0.454888028100 0.143111336600 0.300622862100 0.260540362300 0.349204565600\n" " 0.157658905678 0.078338198300 0.433345205900 0.138839114100 0.410677921300 0.106634189000\n" " 0.048130255107 0.002175323600 -0.111759214900 0.008740274300 0.051656760200 -0.008599668300\n" "#","\n" " F TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 7 3 3 1\n" " 15.025672765127 -0.076135699000 0.060516471000 0.236249589200 0.043030876500 -0.027382614400 -0.013131365300 0.006095862800\n" " 6.156800581515 -0.145492650600 0.078091919900 0.256975207700 0.138591822100 -0.119463647500 -0.061020955700 0.057880784500\n" " 2.411456205564 0.195144281500 -0.051537351700 -0.299606314200 0.283251574300 -0.152089668600 -0.074530076600 0.143657436500\n" " 0.963986369687 0.553654166300 -0.448874166200 0.244175306400 0.357678749700 -0.460859710900 -0.333331696200 0.782158193600\n" " 0.396229721431 0.454888028100 0.143111336600 0.070307660500 0.300622862100 0.260540362300 0.815277681200 0.349204565600\n" " 0.157658905678 0.078338198300 0.433345205900 -0.391141875700 0.138839114100 0.410677921300 -0.637458747900 0.106634189000\n" " 0.048130255107 0.002175323600 -0.111759214900 0.275973644000 0.008740274300 0.051656760200 0.225784972300 -0.008599668300\n" "#","\n" " F TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 7 3 3 2\n" " 15.025672765127 -0.076135699000 0.060516471000 0.236249589200 0.043030876500 -0.027382614400 -0.013131365300 0.006095862800 -0.001964191900\n" " 6.156800581515 -0.145492650600 0.078091919900 0.256975207700 0.138591822100 -0.119463647500 -0.061020955700 0.057880784500 -0.017608747700\n" " 2.411456205564 0.195144281500 -0.051537351700 -0.299606314200 0.283251574300 -0.152089668600 -0.074530076600 0.143657436500 -0.092704702300\n" " 0.963986369687 0.553654166300 -0.448874166200 0.244175306400 0.357678749700 -0.460859710900 -0.333331696200 0.782158193600 -0.415809616200\n" " 0.396229721431 0.454888028100 0.143111336600 0.070307660500 0.300622862100 0.260540362300 0.815277681200 0.349204565600 0.628910907400\n" " 0.157658905678 0.078338198300 0.433345205900 -0.391141875700 0.138839114100 0.410677921300 -0.637458747900 0.106634189000 -0.412356840700\n" " 0.048130255107 0.002175323600 -0.111759214900 0.275973644000 0.008740274300 0.051656760200 0.225784972300 -0.008599668300 0.389252314700\n" "#","\n" " F TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q7\n" " 1\n" " 2 0 3 7 3 3 2 1\n" " 15.025672765127 -0.076135699000 0.060516471000 0.236249589200 0.043030876500 -0.027382614400 -0.013131365300 0.006095862800 -0.001964191900 -0.008318565400\n" " 6.156800581515 -0.145492650600 0.078091919900 0.256975207700 0.138591822100 -0.119463647500 -0.061020955700 0.057880784500 -0.017608747700 0.039096268100\n" " 2.411456205564 0.195144281500 -0.051537351700 -0.299606314200 0.283251574300 -0.152089668600 -0.074530076600 0.143657436500 -0.092704702300 0.354742552600\n" " 0.963986369687 0.553654166300 -0.448874166200 0.244175306400 0.357678749700 -0.460859710900 -0.333331696200 0.782158193600 -0.415809616200 1.307321527200\n" " 0.396229721431 0.454888028100 0.143111336600 0.070307660500 0.300622862100 0.260540362300 0.815277681200 0.349204565600 0.628910907400 -0.018428865800\n" " 0.157658905678 0.078338198300 0.433345205900 -0.391141875700 0.138839114100 0.410677921300 -0.637458747900 0.106634189000 -0.412356840700 0.046645417600\n" " 0.048130255107 0.002175323600 -0.111759214900 0.275973644000 0.008740274300 0.051656760200 0.225784972300 -0.008599668300 0.389252314700 0.001877717700\n" "#","\n" " Si SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q4\n" " 1\n" " 2 0 1 6 1 1\n" " 2.693604434572 0.015333179500 -0.005800105400\n" " 1.359613855428 -0.283798205000 -0.059172026000\n" " 0.513245176029 -0.228939692700 0.121487149900\n" " 0.326563011394 0.728834000900 0.423382421100\n" " 0.139986977410 0.446205299300 0.474592116300\n" " 0.068212286977 0.122025292800 0.250129397700\n" "#","\n" " Si DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 6 2 2 1\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.005800105400 0.023996406700 0.043919650100\n" " 1.359613855428 -0.283798205000 0.484815594600 -0.059172026000 0.055459199900 0.134639409600\n" " 0.513245176029 -0.228939692700 -0.276015880000 0.121487149900 -0.269559268100 0.517732111300\n" " 0.326563011394 0.728834000900 -0.228394679700 0.423382421100 -0.259506329000 0.282311245100\n" " 0.139986977410 0.446205299300 -0.018311553000 0.474592116300 0.310318217600 0.281350794600\n" " 0.068212286977 0.122025292800 0.365245476200 0.250129397700 0.647414251100 0.139066843800\n" "#","\n" " Si TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 6 3 3 1\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.010190491000 -0.005800105400 0.023996406700 0.014220556800 0.043919650100\n" " 1.359613855428 -0.283798205000 0.484815594600 0.009707564700 -0.059172026000 0.055459199900 -0.158407152000 0.134639409600\n" " 0.513245176029 -0.228939692700 -0.276015880000 -0.707360006800 0.121487149900 -0.269559268100 0.854126223400 0.517732111300\n" " 0.326563011394 0.728834000900 -0.228394679700 0.968240963100 0.423382421100 -0.259506329000 -0.964190479700 0.282311245100\n" " 0.139986977410 0.446205299300 -0.018311553000 -0.449692717700 0.474592116300 0.310318217600 0.336885865500 0.281350794600\n" " 0.068212286977 0.122025292800 0.365245476200 0.147937633300 0.250129397700 0.647414251100 -0.063010752700 0.139066843800\n" "#","\n" " Si TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q4\n" " 1\n" " 2 0 2 6 3 3 2\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.010190491000 -0.005800105400 0.023996406700 0.014220556800 0.043919650100 -0.021796206700\n" " 1.359613855428 -0.283798205000 0.484815594600 0.009707564700 -0.059172026000 0.055459199900 -0.158407152000 0.134639409600 -0.065666574500\n" " 0.513245176029 -0.228939692700 -0.276015880000 -0.707360006800 0.121487149900 -0.269559268100 0.854126223400 0.517732111300 -0.587881439600\n" " 0.326563011394 0.728834000900 -0.228394679700 0.968240963100 0.423382421100 -0.259506329000 -0.964190479700 0.282311245100 0.799278215300\n" " 0.139986977410 0.446205299300 -0.018311553000 -0.449692717700 0.474592116300 0.310318217600 0.336885865500 0.281350794600 -0.377563218200\n" " 0.068212286977 0.122025292800 0.365245476200 0.147937633300 0.250129397700 0.647414251100 -0.063010752700 0.139066843800 0.406207118300\n" "#","\n" " Si TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q4\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 2.693604434572 0.015333179500 -0.073325401200 -0.010190491000 -0.005800105400 0.023996406700 0.014220556800 0.043919650100 -0.021796206700 -0.021648469800\n" " 1.359613855428 -0.283798205000 0.484815594600 0.009707564700 -0.059172026000 0.055459199900 -0.158407152000 0.134639409600 -0.065666574500 0.421421477600\n" " 0.513245176029 -0.228939692700 -0.276015880000 -0.707360006800 0.121487149900 -0.269559268100 0.854126223400 0.517732111300 -0.587881439600 0.744190736800\n" " 0.326563011394 0.728834000900 -0.228394679700 0.968240963100 0.423382421100 -0.259506329000 -0.964190479700 0.282311245100 0.799278215300 0.434937300000\n" " 0.139986977410 0.446205299300 -0.018311553000 -0.449692717700 0.474592116300 0.310318217600 0.336885865500 0.281350794600 -0.377563218200 -0.722129731000\n" " 0.068212286977 0.122025292800 0.365245476200 0.147937633300 0.250129397700 0.647414251100 -0.063010752700 0.139066843800 0.406207118300 0.655673293700\n" "#","\n" " P SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q5\n" " 1\n" " 2 0 1 6 1 1\n" " 3.338153406523 0.039454247900 -0.012783546700\n" " 1.833919672496 -0.306814659300 -0.038865450000\n" " 0.688531765653 -0.113978610700 0.127534067400\n" " 0.372376701254 0.668025394000 0.401195491100\n" " 0.166131443191 0.491467475700 0.369849381300\n" " 0.075778343330 0.087478573600 0.184268604800\n" "#","\n" " P DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 6 2 2 1\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.012783546700 0.005165760600 0.023530272900\n" " 1.833919672496 -0.306814659300 0.305933443100 -0.038865450000 0.103133751300 0.140233454000\n" " 0.688531765653 -0.113978610700 0.118785269000 0.127534067400 -0.305520428500 0.507069588900\n" " 0.372376701254 0.668025394000 -0.716389791200 0.401195491100 -0.245673644600 0.492728339400\n" " 0.166131443191 0.491467475700 0.271518859600 0.369849381300 0.153640758600 0.310650223400\n" " 0.075778343330 0.087478573600 0.523136739400 0.184268604800 0.721924297300 0.030421200100\n" "#","\n" " P TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 6 3 3 1\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.036333320500 -0.012783546700 0.005165760600 -0.021032703500 0.023530272900\n" " 1.833919672496 -0.306814659300 0.305933443100 0.126954601200 -0.038865450000 0.103133751300 0.038242927200 0.140233454000\n" " 0.688531765653 -0.113978610700 0.118785269000 0.100890359400 0.127534067400 -0.305520428500 -0.256363421800 0.507069588900\n" " 0.372376701254 0.668025394000 -0.716389791200 0.407065582600 0.401195491100 -0.245673644600 0.548550924800 0.492728339400\n" " 0.166131443191 0.491467475700 0.271518859600 -0.989778437000 0.369849381300 0.153640758600 0.178359136800 0.310650223400\n" " 0.075778343330 0.087478573600 0.523136739400 0.538151443400 0.184268604800 0.721924297300 -0.226343952000 0.030421200100\n" "#","\n" " P TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q5\n" " 1\n" " 2 0 2 6 3 3 2\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.036333320500 -0.012783546700 0.005165760600 -0.021032703500 0.023530272900 -0.026902801200\n" " 1.833919672496 -0.306814659300 0.305933443100 0.126954601200 -0.038865450000 0.103133751300 0.038242927200 0.140233454000 -0.024419850900\n" " 0.688531765653 -0.113978610700 0.118785269000 0.100890359400 0.127534067400 -0.305520428500 -0.256363421800 0.507069588900 -0.592608257200\n" " 0.372376701254 0.668025394000 -0.716389791200 0.407065582600 0.401195491100 -0.245673644600 0.548550924800 0.492728339400 0.982063898700\n" " 0.166131443191 0.491467475700 0.271518859600 -0.989778437000 0.369849381300 0.153640758600 0.178359136800 0.310650223400 0.131647772600\n" " 0.075778343330 0.087478573600 0.523136739400 0.538151443400 0.184268604800 0.721924297300 -0.226343952000 0.030421200100 0.264354685800\n" "#","\n" " P TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q5\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 3.338153406523 0.039454247900 -0.055902122900 -0.036333320500 -0.012783546700 0.005165760600 -0.021032703500 0.023530272900 -0.026902801200 0.005311181800\n" " 1.833919672496 -0.306814659300 0.305933443100 0.126954601200 -0.038865450000 0.103133751300 0.038242927200 0.140233454000 -0.024419850900 0.138144780500\n" " 0.688531765653 -0.113978610700 0.118785269000 0.100890359400 0.127534067400 -0.305520428500 -0.256363421800 0.507069588900 -0.592608257200 0.874057452500\n" " 0.372376701254 0.668025394000 -0.716389791200 0.407065582600 0.401195491100 -0.245673644600 0.548550924800 0.492728339400 0.982063898700 0.436475627300\n" " 0.166131443191 0.491467475700 0.271518859600 -0.989778437000 0.369849381300 0.153640758600 0.178359136800 0.310650223400 0.131647772600 -0.092923616900\n" " 0.075778343330 0.087478573600 0.523136739400 0.538151443400 0.184268604800 0.721924297300 -0.226343952000 0.030421200100 0.264354685800 0.017694303700\n" "#","\n" " S SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q6\n" " 1\n" " 2 0 1 6 1 1\n" " 3.817590656735 0.075558928000 -0.019219238100\n" " 2.362751931093 -0.351216488200 -0.035664835200\n" " 0.861004180298 -0.099160602500 0.160834397000\n" " 0.417524512433 0.862753116400 0.507608206800\n" " 0.181513540673 0.307053614900 0.249563613200\n" " 0.070570776865 0.001592872500 0.025974500500\n" "#","\n" " S DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 6 2 2 1\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.019219238100 0.001714015800 0.007498037400\n" " 2.362751931093 -0.351216488200 0.179094296600 -0.035664835200 0.064608303200 0.104757185100\n" " 0.861004180298 -0.099160602500 0.206133423700 0.160834397000 -0.170453754100 0.344818199900\n" " 0.417524512433 0.862753116400 -0.737640763800 0.507608206800 -0.536548069500 0.472319101700\n" " 0.181513540673 0.307053614900 0.419230078700 0.249563613200 0.786543640200 0.204745694800\n" " 0.070570776865 0.001592872500 0.359607313200 0.025974500500 0.740434318200 -0.019952573900\n" "#","\n" " S TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 6 3 3 1\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.334102726000 -0.019219238100 0.001714015800 -0.065081716400 0.007498037400\n" " 2.362751931093 -0.351216488200 0.179094296600 0.901078536300 -0.035664835200 0.064608303200 0.216735258500 0.104757185100\n" " 0.861004180298 -0.099160602500 0.206133423700 0.139445328400 0.160834397000 -0.170453754100 -0.656181270900 0.344818199900\n" " 0.417524512433 0.862753116400 -0.737640763800 -0.236533973000 0.507608206800 -0.536548069500 0.847619826200 0.472319101700\n" " 0.181513540673 0.307053614900 0.419230078700 0.259546805900 0.249563613200 0.786543640200 0.204233835000 0.204745694800\n" " 0.070570776865 0.001592872500 0.359607313200 -0.378802711500 0.025974500500 0.740434318200 -0.341040490700 -0.019952573900\n" "#","\n" " S TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q6\n" " 1\n" " 2 0 2 6 3 3 2\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.334102726000 -0.019219238100 0.001714015800 -0.065081716400 0.007498037400 -0.024661974800\n" " 2.362751931093 -0.351216488200 0.179094296600 0.901078536300 -0.035664835200 0.064608303200 0.216735258500 0.104757185100 0.042689758500\n" " 0.861004180298 -0.099160602500 0.206133423700 0.139445328400 0.160834397000 -0.170453754100 -0.656181270900 0.344818199900 -0.325440208500\n" " 0.417524512433 0.862753116400 -0.737640763800 -0.236533973000 0.507608206800 -0.536548069500 0.847619826200 0.472319101700 0.746641212400\n" " 0.181513540673 0.307053614900 0.419230078700 0.259546805900 0.249563613200 0.786543640200 0.204233835000 0.204745694800 -0.120502819400\n" " 0.070570776865 0.001592872500 0.359607313200 -0.378802711500 0.025974500500 0.740434318200 -0.341040490700 -0.019952573900 -0.158216979000\n" "#","\n" " S TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q6\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 3.817590656735 0.075558928000 -0.045713227100 -0.334102726000 -0.019219238100 0.001714015800 -0.065081716400 0.007498037400 -0.024661974800 0.013118322300\n" " 2.362751931093 -0.351216488200 0.179094296600 0.901078536300 -0.035664835200 0.064608303200 0.216735258500 0.104757185100 0.042689758500 0.057787584100\n" " 0.861004180298 -0.099160602500 0.206133423700 0.139445328400 0.160834397000 -0.170453754100 -0.656181270900 0.344818199900 -0.325440208500 0.679953632100\n" " 0.417524512433 0.862753116400 -0.737640763800 -0.236533973000 0.507608206800 -0.536548069500 0.847619826200 0.472319101700 0.746641212400 0.768725285200\n" " 0.181513540673 0.307053614900 0.419230078700 0.259546805900 0.249563613200 0.786543640200 0.204233835000 0.204745694800 -0.120502819400 0.173138012700\n" " 0.070570776865 0.001592872500 0.359607313200 -0.378802711500 0.025974500500 0.740434318200 -0.341040490700 -0.019952573900 -0.158216979000 0.060850854200\n" "#","\n" " Cl SZV-MOLOPT-GTH SZV-MOLOPT-GTH-q7\n" " 1\n" " 2 0 1 6 1 1\n" " 4.577034194110 0.065051807700 -0.018555371400\n" " 2.685006367322 -0.363216561500 -0.038757218600\n" " 1.107869270111 -0.013978112200 0.165913669300\n" " 0.515012065056 0.656897397000 0.409671142600\n" " 0.225105420962 0.492961793600 0.367216031300\n" " 0.089684813445 0.053468914400 0.129741292500\n" "#","\n" " Cl DZVP-MOLOPT-GTH DZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 6 2 2 1\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.018555371400 0.004980719100 0.008255008600\n" " 2.685006367322 -0.363216561500 0.289383593800 -0.038757218600 0.062414668400 0.112659622200\n" " 1.107869270111 -0.013978112200 0.170470730200 0.165913669300 -0.069602677800 0.303640572700\n" " 0.515012065056 0.656897397000 -0.631234162900 0.409671142600 -0.435899779400 0.542588312000\n" " 0.225105420962 0.492961793600 0.132599834000 0.367216031300 0.798386816000 0.275653471800\n" " 0.089684813445 0.053468914400 0.558743621800 0.129741292500 1.105427347200 -0.001399665300\n" "#","\n" " Cl TZVP-MOLOPT-GTH TZVP-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 6 3 3 1\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.222676105800 -0.018555371400 0.004980719100 0.014188226800 0.008255008600\n" " 2.685006367322 -0.363216561500 0.289383593800 0.906226330700 -0.038757218600 0.062414668400 0.099373116400 0.112659622200\n" " 1.107869270111 -0.013978112200 0.170470730200 0.240057556900 0.165913669300 -0.069602677800 -0.139583547500 0.303640572700\n" " 0.515012065056 0.656897397000 -0.631234162900 -0.584789043400 0.409671142600 -0.435899779400 -0.452556047700 0.542588312000\n" " 0.225105420962 0.492961793600 0.132599834000 0.113336595400 0.367216031300 0.798386816000 0.872967525000 0.275653471800\n" " 0.089684813445 0.053468914400 0.558743621800 -0.074517779100 0.129741292500 1.105427347200 -0.464881530900 -0.001399665300\n" "#","\n" " Cl TZV2P-MOLOPT-GTH TZV2P-MOLOPT-GTH-q7\n" " 1\n" " 2 0 2 6 3 3 2\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.222676105800 -0.018555371400 0.004980719100 0.014188226800 0.008255008600 -0.023981761800\n" " 2.685006367322 -0.363216561500 0.289383593800 0.906226330700 -0.038757218600 0.062414668400 0.099373116400 0.112659622200 0.022760737200\n" " 1.107869270111 -0.013978112200 0.170470730200 0.240057556900 0.165913669300 -0.069602677800 -0.139583547500 0.303640572700 -0.255872922500\n" " 0.515012065056 0.656897397000 -0.631234162900 -0.584789043400 0.409671142600 -0.435899779400 -0.452556047700 0.542588312000 0.152366447500\n" " 0.225105420962 0.492961793600 0.132599834000 0.113336595400 0.367216031300 0.798386816000 0.872967525000 0.275653471800 0.683411212900\n" " 0.089684813445 0.053468914400 0.558743621800 -0.074517779100 0.129741292500 1.105427347200 -0.464881530900 -0.001399665300 -0.558926647700\n" "#","\n" " Cl TZV2PX-MOLOPT-GTH TZV2PX-MOLOPT-GTH-q7\n" " 1\n" " 2 0 3 6 3 3 2 1\n" " 4.577034194110 0.065051807700 -0.056917463100 -0.222676105800 -0.018555371400 0.004980719100 0.014188226800 0.008255008600 -0.023981761800 0.012967367100\n" " 2.685006367322 -0.363216561500 0.289383593800 0.906226330700 -0.038757218600 0.062414668400 0.099373116400 0.112659622200 0.022760737200 0.024412096700\n" " 1.107869270111 -0.013978112200 0.170470730200 0.240057556900 0.165913669300 -0.069602677800 -0.139583547500 0.303640572700 -0.255872922500 0.393536985500\n" " 0.515012065056 0.656897397000 -0.631234162900 -0.584789043400 0.409671142600 -0.435899779400 -0.452556047700 0.542588312000 0.152366447500 0.715552544800\n" " 0.225105420962 0.492961793600 0.132599834000 0.113336595400 0.367216031300 0.798386816000 0.872967525000 0.275653471800 0.683411212900 0.342440527400\n" " 0.089684813445 0.053468914400 0.558743621800 -0.074517779100 0.129741292500 1.105427347200 -0.464881530900 -0.001399665300 -0.558926647700 -0.147002819200\n" "#","\n" " H SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q1\n" " 1\n" " 2 0 0 5 1\n" " 10.068468228533 -0.033917444900\n" " 2.680222868089 -0.122202212100\n" " 0.791501539122 -0.443818861200\n" " 0.239116150487 -0.453182186600\n" " 0.082193184441 -0.131612861500\n" "#","\n" " H DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q1\n" " 1\n" " 2 0 1 5 2 1\n" " 10.068468228533 -0.033917444900 0.059193775500 0.009905134400\n" " 2.680222868089 -0.122202212100 0.843318328900 0.122449566500\n" " 0.791501539122 -0.443818861200 -1.155707115500 0.477183240900\n" " 0.239116150487 -0.453182186600 0.049479621200 0.547919678200\n" " 0.082193184441 -0.131612861500 0.522708738000 0.869031854000\n" "#","\n" " He SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q2\n" " 1\n" " 2 0 0 4 1\n" " 11.042785405048 -0.057709039524\n" " 2.784477928537 -0.186997538114\n" " 0.777508803064 -0.356165765185\n" " 0.222222544418 -0.270871722171\n" "#","\n" " He DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q2\n" " 1\n" " 2 0 1 4 2 1\n" " 11.042785405048 -0.057709039524 -0.105186433287 0.003655817482\n" " 2.784477928537 -0.186997538114 -0.390936479220 -0.189395754815\n" " 0.777508803064 -0.356165765185 -0.838063667638 -1.512867520694\n" " 0.222222544418 -0.270871722171 1.442874338563 0.670534435463\n" "#","\n" " Li SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 0 5 2\n" " 7.133127574876 0.277443782336 0.081564852833\n" " 1.999997046722 0.418209986449 0.163120764751\n" " 0.612030939985 0.305912589369 0.178229873051\n" " 0.084366737836 0.210640845338 -0.467205177084\n" " 0.032613166298 0.112523830865 -0.297593804585\n" "#","\n" " Li DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 1 5 3 1\n" " 7.133127574876 0.277443782336 0.081564852833 -0.186441017519 -0.057587889331\n" " 1.999997046722 0.418209986449 0.163120764751 -0.109333052536 -0.009895878526\n" " 0.612030939985 0.305912589369 0.178229873051 -0.035923579149 -0.849366496083\n" " 0.084366737836 0.210640845338 -0.467205177084 -1.930661653919 -2.366974219334\n" " 0.032613166298 0.112523830865 -0.297593804585 1.884814754037 0.117218879286\n" "#","\n" " Be SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 0 6 2\n" " 14.927410410930 -0.101692281035 0.108892279587\n" " 6.934611958494 -0.211895541408 0.237670602277\n" " 2.222208384565 -0.279935231472 0.429698556888\n" " 0.732913986617 -0.091068265926 0.213557818158\n" " 0.225007132266 -0.115295308010 -0.652182396204\n" " 0.074144067364 -0.173251908170 -0.905622978118\n" "#","\n" " Be DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 6 3 1\n" " 14.927410410930 -0.101692281035 0.108892279587 -0.013828511039 -0.043322867269\n" " 6.934611958494 -0.211895541408 0.237670602277 -0.065062052894 -0.047764533740\n" " 2.222208384565 -0.279935231472 0.429698556888 -0.515821054187 -0.217923574729\n" " 0.732913986617 -0.091068265926 0.213557818158 -0.100183446834 -1.091509212634\n" " 0.225007132266 -0.115295308010 -0.652182396204 2.012025412480 -2.124632001073\n" " 0.074144067364 -0.173251908170 -0.905622978118 -1.507944883871 -1.344316057412\n" "#","\n" " B SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 1 4 1 1\n" " 3.053444073497 0.142389531583 -0.124774394633\n" " 0.915483968316 0.070304308347 -0.383517801425\n" " 0.329920053516 -0.657626233726 -0.645201457411\n" " 0.101655384143 -0.417625483973 -0.369557407831\n" "#","\n" " B DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 2 4 2 2 1\n" " 3.053444073497 0.142389531583 -0.541363625050 -0.124774394633 -0.166005683397 -0.081377656373\n" " 0.915483968316 0.070304308347 -0.187885904555 -0.383517801425 -0.631934352115 -0.772292138236\n" " 0.329920053516 -0.657626233726 1.734743314732 -0.645201457411 -0.579629526633 -1.322433881793\n" " 0.101655384143 -0.417625483973 -1.647357915542 -0.369557407831 1.762122465548 -0.981970482328\n" "#","\n" " C SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 5 1 1\n" " 5.605330751705 0.111532881900 -0.064868978500\n" " 2.113016390533 0.153142194100 -0.200470255700\n" " 0.769911454810 -0.321396879400 -0.413141730100\n" " 0.348157086385 -0.610926421600 -0.415337139200\n" " 0.128212254710 -0.133990862800 -0.288527673600\n" "#","\n" " C DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 5 2 2 1\n" " 5.605330751705 0.111532881900 0.466507483200 -0.064868978500 -0.055475693400 0.029952774600\n" " 2.113016390533 0.153142194100 0.144113212800 -0.200470255700 -0.216165175200 0.070784458800\n" " 0.769911454810 -0.321396879400 0.029364880900 -0.413141730100 -0.436624272300 0.674601058600\n" " 0.348157086385 -0.610926421600 0.929470388400 -0.415337139200 0.784000698400 0.173652061800\n" " 0.128212254710 -0.133990862800 1.066914331200 -0.288527673600 0.987908135000 1.036317024700\n" "#","\n" " N SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 5 1 1\n" " 7.341988051825 0.113789156500 -0.053744330400\n" " 2.542637110957 0.097294516500 -0.165752516200\n" " 0.888574967229 -0.445077422600 -0.317365165600\n" " 0.333802200435 -0.584142233900 -0.312039675200\n" " 0.112012109029 -0.139562383500 -0.117936008100\n" "#","\n" " N DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 5 2 2 1\n" " 7.341988051825 0.113789156500 0.077765588400 -0.053744330400 -0.007627243700 0.033688455200\n" " 2.542637110957 0.097294516500 0.108655219900 -0.165752516200 0.015163333100 0.109813343200\n" " 0.888574967229 -0.445077422600 -0.374125427100 -0.317365165600 -0.129388247500 0.856542971300\n" " 0.333802200435 -0.584142233900 0.024021712400 -0.312039675200 0.554905847400 0.509681657500\n" " 0.112012109029 -0.139562383500 0.979415132500 -0.117936008100 1.001020469600 0.047030652200\n" "#","\n" " O SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 5 1 1\n" " 10.389228018317 0.126240722900 -0.061302037200\n" " 3.849621072005 0.139933704300 -0.190087511700\n" " 1.388401188741 -0.434348231700 -0.377726982800\n" " 0.496955043655 -0.852791790900 -0.454266086000\n" " 0.162491615040 -0.242351537800 -0.257388983000\n" "#","\n" " O DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 5 2 2 1\n" " 10.389228018317 0.126240722900 0.069215797900 -0.061302037200 -0.026862701100 0.029845227500\n" " 3.849621072005 0.139933704300 0.115634538900 -0.190087511700 -0.006283021000 0.060939733900\n" " 1.388401188741 -0.434348231700 -0.322839719400 -0.377726982800 -0.224839187800 0.732321580100\n" " 0.496955043655 -0.852791790900 -0.095944016600 -0.454266086000 0.380324658600 0.893564918400\n" " 0.162491615040 -0.242351537800 1.102830348700 -0.257388983000 1.054102919900 0.152954188700\n" "#","\n" " F SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 5 1 1\n" " 13.701520668842 0.112227293400 -0.076186490700\n" " 5.098268930397 0.138913509400 -0.239982004100\n" " 1.837941323644 -0.418624975600 -0.481912435400\n" " 0.631758758967 -0.781149500600 -0.576092640600\n" " 0.202026732748 -0.233361053400 -0.325681090200\n" "#","\n" " F DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 5 2 2 1\n" " 13.701520668842 0.112227293400 0.097208978300 -0.076186490700 -0.065073103800 0.014975910100\n" " 5.098268930397 0.138913509400 0.102876192000 -0.239982004100 -0.178954386700 0.056540852300\n" " 1.837941323644 -0.418624975600 -0.261194711300 -0.481912435400 -0.432978808900 0.421555957700\n" " 0.631758758967 -0.781149500600 -0.613877500700 -0.576092640600 -0.420393726200 1.040368501100\n" " 0.202026732748 -0.233361053400 0.913930794200 -0.325681090200 1.087532785600 -0.115372011600\n" "#","\n" " Ne SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 6 1 1\n" " 19.144669251814 0.069475808579 0.044323480089\n" " 7.817581633327 0.136833604284 0.141748545980\n" " 3.076395099204 -0.176240522396 0.286599690536\n" " 1.225783227767 -0.534790596391 0.369762267197\n" " 0.469438475964 -0.420816475643 0.313976275678\n" " 0.165401378033 -0.056199770547 0.129616681048\n" "#","\n" " Ne DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 6 2 2 1\n" " 19.144669251814 0.069475808579 0.008074422113 0.044323480089 -0.019633668505 -0.016337449779\n" " 7.817581633327 0.136833604284 0.088172430797 0.141748545980 -0.051196308389 -0.013519520944\n" " 3.076395099204 -0.176240522396 -0.218906635760 0.286599690536 -0.171521562166 -0.158627528552\n" " 1.225783227767 -0.534790596391 0.130013326453 0.369762267197 0.007505219111 -0.028650976608\n" " 0.469438475964 -0.420816475643 -1.271285832759 0.313976275678 -0.568357530124 -0.982412169970\n" " 0.165401378033 -0.056199770547 1.727911777889 0.129616681048 1.298147838544 1.273253904774\n" "#","\n" " Na SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 7 2 1\n" " 23.518800761960 0.037798268053 0.005040470618 -0.041235150854\n" " 11.135656103275 0.180415272016 0.031210048356 -0.102704065658\n" " 4.647813820246 -0.084235489885 -0.021214584887 -0.276507156374\n" " 1.866708259982 -0.502007239468 -0.088006426680 -0.405087985600\n" " 0.734683697196 -0.487454712994 -0.241562643580 -0.345669762598\n" " 0.275672995860 -0.088909855778 0.046069503612 -0.128294724774\n" " 0.049895108245 -0.000245624853 1.008694292400 -0.002074313963\n" "#","\n" " Na DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 7 3 2\n" " 23.518800761960 0.037798268053 0.005040470618 0.037779070657 -0.041235150854 -0.005410838671\n" " 11.135656103275 0.180415272016 0.031210048356 -0.119614429319 -0.102704065658 -0.017609338317\n" " 4.647813820246 -0.084235489885 -0.021214584887 0.224302495702 -0.276507156374 -0.043803008653\n" " 1.866708259982 -0.502007239468 -0.088006426680 -0.183779813212 -0.405087985600 -0.067844235623\n" " 0.734683697196 -0.487454712994 -0.241562643580 1.641649867502 -0.345669762598 -0.085057974012\n" " 0.275672995860 -0.088909855778 0.046069503612 -2.281564821968 -0.128294724774 0.159527770719\n" " 0.049895108245 -0.000245624853 1.008694292400 0.801660990981 -0.002074313963 0.982149424568\n" "#","\n" " Mg SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 7 2 1\n" " 30.653047963189 0.054377184080 -0.008503364657 0.041949376018\n" " 12.924389070531 0.180093043263 -0.033268853396 0.154513485142\n" " 4.968377097667 -0.183378978769 0.039287763681 0.347080006586\n" " 1.851827556019 -0.641604001295 0.169148911336 0.456042413582\n" " 0.673565331978 -0.382610049904 0.233823708921 0.275294822235\n" " 0.168626419621 -0.012877428759 -0.474103906013 0.029266033687\n" " 0.059428253135 -0.011565253116 -0.681875195374 -0.006397458869\n" "#","\n" " Mg DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 7 3 2\n" " 30.653047963189 0.054377184080 -0.008503364657 -0.017403499711 0.041949376018 0.005685482959\n" " 12.924389070531 0.180093043263 -0.033268853396 0.019979586563 0.154513485142 0.031145413254\n" " 4.968377097667 -0.183378978769 0.039287763681 -0.035277033496 0.347080006586 0.054939424515\n" " 1.851827556019 -0.641604001295 0.169148911336 -0.203352520214 0.456042413582 0.123275320202\n" " 0.673565331978 -0.382610049904 0.233823708921 -0.348027990301 0.275294822235 -0.070548883335\n" " 0.168626419621 -0.012877428759 -0.474103906013 2.122888539507 0.029266033687 -0.608144728127\n" " 0.059428253135 -0.011565253116 -0.681875195374 -1.871583263111 -0.006397458869 -0.561501656268\n" "#","\n" " Al SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 1 4 1 1\n" " 1.212902319099 0.095248915182 0.017523273525\n" " 0.454181446881 0.238368062117 0.031530615904\n" " 0.242418503788 -0.551005849330 -0.395233201731\n" " 0.078268495175 -0.241350820340 -0.270737591969\n" "#","\n" " Al DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q3\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.212902319099 0.095248915182 -0.230241641025 0.017523273525 -0.081919506975 0.359233701644\n" " 0.454181446881 0.238368062117 -0.662191771394 0.031530615904 0.059600622511 0.610925184385\n" " 0.242418503788 -0.551005849330 1.692156327298 -0.395233201731 1.076271205166 1.758688383246\n" " 0.078268495175 -0.241350820340 -1.648320060523 -0.270737591969 -1.208390139070 0.735529744423\n" "#","\n" " Si SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 4 1 1\n" " 1.256767641387 0.227718466600 0.067776267500\n" " 0.506394122478 -0.024323599300 -0.213716770200\n" " 0.238883845662 -0.558639778900 -0.409893726600\n" " 0.087336883836 -0.207272502200 -0.353922302700\n" "#","\n" " Si DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.256767641387 0.227718466600 -1.025748084300 0.067776267500 0.099785628800 0.159026680300\n" " 0.506394122478 -0.024323599300 0.694283033300 -0.213716770200 -0.411985229800 0.392330436800\n" " 0.238883845662 -0.558639778900 0.058162561600 -0.409893726600 -0.057183126300 0.393085151800\n" " 0.087336883836 -0.207272502200 -0.258181009000 -0.353922302700 0.700307869400 0.550337119000\n" "#","\n" " P SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 4 1 1\n" " 1.631862170786 0.335074115300 0.123299547600\n" " 0.708432685319 -0.023088252600 -0.351511376700\n" " 0.284968483654 -0.973819129700 -0.806870557100\n" " 0.098011823689 -0.292906884000 -0.517933891800\n" "#","\n" " P DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.631862170786 0.335074115300 0.341512748800 0.123299547600 0.134459618400 0.174671506000\n" " 0.708432685319 -0.023088252600 0.008045537600 -0.351511376700 -0.389557392400 0.503029215100\n" " 0.284968483654 -0.973819129700 -0.851246931200 -0.806870557100 -0.138884374300 0.699184423900\n" " 0.098011823689 -0.292906884000 1.328906840600 -0.517933891800 1.062071606300 0.407460906200\n" "#","\n" " S SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 4 1 1\n" " 2.215854692813 0.170962878400 0.092191824200\n" " 1.131470525271 0.127069405600 -0.162197093800\n" " 0.410168143974 -0.733925381700 -0.605594737600\n" " 0.140587330023 -0.176971633900 -0.213309789800\n" "#","\n" " S DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 4 2 2 1\n" " 2.215854692813 0.170962878400 -0.080726543800 0.092191824200 0.057845138800 0.113762894700\n" " 1.131470525271 0.127069405600 -0.209877313900 -0.162197093800 -0.094737441500 0.350414093700\n" " 0.410168143974 -0.733925381700 0.683497090800 -0.605594737600 -0.369172638100 0.866785684700\n" " 0.140587330023 -0.176971633900 -0.625512739500 -0.213309789800 1.155699504700 0.217880463100\n" "#","\n" " Cl SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 4 1 1\n" " 2.379078117601 0.349064979100 0.116462270400\n" " 1.470718465013 0.023265903500 -0.193945393700\n" " 0.461213474057 -1.015492630400 -0.463529682400\n" " 0.150014717415 -0.402599991500 -0.299834714700\n" "#","\n" " Cl DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 4 2 2 1\n" " 2.379078117601 0.349064979100 0.153138206200 0.116462270400 0.160067891900 0.074898027900\n" " 1.470718465013 0.023265903500 0.170051509900 -0.193945393700 -0.212781225800 0.303856570000\n" " 0.461213474057 -1.015492630400 -0.702516267300 -0.463529682400 -0.439023237200 0.766878436800\n" " 0.150014717415 -0.402599991500 0.681437336600 -0.299834714700 1.036634179400 0.154947398700\n" "#","\n" " Ar SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 5 1 1\n" " 3.936450214256 -0.126876868653 0.081197313256\n" " 2.888050686108 0.488558851459 -0.050560847288\n" " 0.925305548464 -0.356808308806 -0.382285987629\n" " 0.366456608488 -0.745538702598 -0.507927770980\n" " 0.128035915977 -0.148475482748 -0.248562045384\n" "#","\n" " Ar DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 5 2 2 1\n" " 3.936450214256 -0.126876868653 -0.120853949683 0.081197313256 0.115242855583 0.118434272495\n" " 2.888050686108 0.488558851459 0.030456012450 -0.050560847288 -0.153264749918 -0.157989713634\n" " 0.925305548464 -0.356808308806 -0.229699408013 -0.382285987629 -0.074149829187 -0.072608763447\n" " 0.366456608488 -0.745538702598 1.833670881562 -0.507927770980 -0.965020325642 -0.967474418604\n" " 0.128035915977 -0.148475482748 -1.869800022555 -0.248562045384 1.384189599695 1.358175503076\n" "#","\n" " K SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 6 2 1\n" " 2.891270375454 -0.125588343071 0.141760377816 0.586273841257\n" " 2.714957993897 -0.332679523247 0.045797253838 -0.600247660122\n" " 0.954062644964 0.579235654863 -0.270917640330 -0.331386642719\n" " 0.407596260029 0.640286613853 -0.523435976542 -0.345162964052\n" " 0.163339876080 0.132146903359 -0.040955544362 -0.129654083334\n" " 0.036854064168 0.136961207358 1.420210199250 -0.002662514210\n" "#","\n" " K DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 3 2 1\n" " 2.891270375454 -0.125588343071 0.141760377816 0.092583173658 0.586273841257 0.174577931878 -0.022072489962\n" " 2.714957993897 -0.332679523247 0.045797253838 -0.045825704377 -0.600247660122 -0.189434477232 0.113984804892\n" " 0.954062644964 0.579235654863 -0.270917640330 0.363168058178 -0.331386642719 -0.078101098846 0.234486045475\n" " 0.407596260029 0.640286613853 -0.523435976542 -2.539586038548 -0.345162964052 -0.144666151565 0.234673259721\n" " 0.163339876080 0.132146903359 -0.040955544362 2.654427110393 -0.129654083334 0.092758894460 0.452553356262\n" " 0.036854064168 0.136961207358 1.420210199250 -0.693763482649 -0.002662514210 0.780744603300 0.480095027043\n" "#","\n" " Ca SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 6 2 1\n" " 5.284985596557 -0.416182629697 -0.083912217567 0.064960038145\n" " 4.091752229122 0.887610504052 0.216895453968 0.014546526081\n" " 1.429520321762 -0.323549926958 -0.096935550443 -0.466720491908\n" " 0.614375507986 -0.908395199325 -0.502206578258 -0.634030899528\n" " 0.242970577562 -0.208971576432 -0.096821746914 -0.251681593814\n" " 0.055000158016 0.039132482825 1.342563762693 -0.000003936848\n" "#","\n" " Ca DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 2 6 3 2 1\n" " 5.284985596557 -0.416182629697 -0.083912217567 -0.208574685974 0.064960038145 0.026515439739 -0.066630752510\n" " 4.091752229122 0.887610504052 0.216895453968 0.314510703283 0.014546526081 -0.028997969950 0.197842850864\n" " 1.429520321762 -0.323549926958 -0.096935550443 -0.601923136001 -0.466720491908 -0.073243851190 0.458365171560\n" " 0.614375507986 -0.908395199325 -0.502206578258 2.853614975011 -0.634030899528 -0.218228118923 0.372585742208\n" " 0.242970577562 -0.208971576432 -0.096821746914 -3.043287352030 -0.251681593814 0.144907690867 0.820156666086\n" " 0.055000158016 0.039132482825 1.342563762693 0.887844469398 -0.000003936848 0.854082269914 0.653032075293\n" "#","\n" " Sc SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 6 2 1 1\n" " 7.596358558474 -0.005607824648 -0.000597439424 -0.092377568763 0.045120250343\n" " 3.531908044322 0.513266691301 0.153537412458 0.071267862889 0.192728189010\n" " 1.358432991102 -0.619613224500 -0.224168885145 0.468025381136 0.336183526558\n" " 0.543348479632 -0.729328581203 -0.458469756794 0.444181247677 0.405780027669\n" " 0.197283658533 -0.063678221084 0.072089942129 0.091871138246 0.446780401537\n" " 0.054428805670 -0.076152416285 1.048240218482 -0.004061267711 0.155178106722\n" "#","\n" " Sc DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 7.596358558474 -0.005607824648 -0.000597439424 -0.002143930265 -0.092377568763 0.020935300558 0.045120250343 -0.026241824143 0.005774084495\n" " 3.531908044322 0.513266691301 0.153537412458 0.228058090414 0.071267862889 -0.024159604541 0.192728189010 -0.096234745142 -0.021058205466\n" " 1.358432991102 -0.619613224500 -0.224168885145 0.050489185834 0.468025381136 -0.177053431087 0.336183526558 -0.167689255408 -0.090318610966\n" " 0.543348479632 -0.729328581203 -0.458469756794 1.714744833607 0.444181247677 -0.236101867977 0.405780027669 -0.337050099684 -0.717025179002\n" " 0.197283658533 -0.063678221084 0.072089942129 -2.748813311572 0.091871138246 0.624399910851 0.446780401537 0.338357123973 -0.806018996967\n" " 0.054428805670 -0.076152416285 1.048240218482 1.327173437956 -0.004061267711 0.798174697757 0.155178106722 0.993267553023 -0.034431734574\n" "#","\n" " Ti SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 2 1 1\n" " 7.884569925997 0.004750577412 -0.002690702837 -0.108736525246 0.052842407451\n" " 3.894698463070 0.499503858222 0.103956524568 0.100912855636 0.195986532018\n" " 1.513588828959 -0.664995883766 -0.256641947580 0.527328996047 0.330343722079\n" " 0.596768079836 -0.726044574739 -0.451591547817 0.468197803110 0.396808432313\n" " 0.222222125842 -0.029011079755 0.165167622946 0.077640626075 0.347092399871\n" " 0.077078461321 0.075171747143 0.993127316430 -0.007523238420 0.132320900948\n" "#","\n" " Ti DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 7.884569925997 0.004750577412 -0.002690702837 0.075105591562 -0.108736525246 0.023185061556 0.052842407451 -0.038307431199 -0.002442658125\n" " 3.894698463070 0.499503858222 0.103956524568 0.048602853477 0.100912855636 -0.027189036213 0.195986532018 -0.076880250937 0.013119020987\n" " 1.513588828959 -0.664995883766 -0.256641947580 0.079732563787 0.527328996047 -0.230044390357 0.330343722079 -0.242486488988 -0.206817889885\n" " 0.596768079836 -0.726044574739 -0.451591547817 1.660896378972 0.468197803110 -0.126795185046 0.396808432313 -0.118369379707 -0.546596492823\n" " 0.222222125842 -0.029011079755 0.165167622946 -2.748651632733 0.077640626075 0.343517279356 0.347092399871 0.038099375809 -0.279145975103\n" " 0.077078461321 0.075171747143 0.993127316430 1.368227638651 -0.007523238420 0.946960702315 0.132320900948 1.046553050597 0.934394052863\n" "#","\n" " V SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 2 1 1\n" " 7.984623749528 0.020761670278 0.003472483927 -0.127318262252 0.054932269310\n" " 4.192169946044 0.491008828907 0.116393516673 0.142383719999 0.194803913356\n" " 1.674403287155 -0.682491382781 -0.215217539970 0.556224679524 0.318207922138\n" " 0.666664577236 -0.670820374730 -0.436714762412 0.483736882428 0.350513304180\n" " 0.242419878750 -0.048891386418 0.104274844115 0.086227000831 0.324484835051\n" " 0.067390273084 -0.000084103227 1.134107947863 -0.004719320688 0.134088585517\n" "#","\n" " V DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 7.984623749528 0.020761670278 0.003472483927 0.004588768658 -0.127318262252 0.022347856999 0.054932269310 -0.022459138650 -0.026581274918\n" " 4.192169946044 0.491008828907 0.116393516673 0.265023422395 0.142383719999 -0.034743188380 0.194803913356 -0.101116586232 0.051515222079\n" " 1.674403287155 -0.682491382781 -0.215217539970 0.055753124298 0.556224679524 -0.168852773516 0.318207922138 -0.120777522887 -0.165483508295\n" " 0.666664577236 -0.670820374730 -0.436714762412 1.571857662805 0.483736882428 -0.212388638969 0.350513304180 -0.254635388920 -0.672649310115\n" " 0.242419878750 -0.048891386418 0.104274844115 -2.575720417590 0.086227000831 0.567082913076 0.324484835051 0.328826511242 -0.518402997758\n" " 0.067390273084 -0.000084103227 1.134107947863 1.490359925888 -0.004719320688 0.737649031611 0.134088585517 0.919495386218 0.651022121928\n" "#","\n" " Cr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.512514788173 0.044157704927 0.005521331885 -0.106538347032 0.081830853262\n" " 4.473610317347 0.611382080738 0.102717317434 0.123956998990 0.165469927086\n" " 1.935100804674 -0.806653824181 -0.230184308969 0.572145261792 0.291295712802\n" " 0.787755660544 -0.813737787488 -0.583672998554 0.518904350249 0.315064211859\n" " 0.293768118617 -0.097787236037 0.171514456916 0.104097287875 0.298491580418\n" " 0.096285158065 -0.018725934011 1.121145454028 -0.012851161685 0.091086538491\n" "#","\n" " Cr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.512514788173 0.044157704927 0.005521331885 0.051983958707 -0.106538347032 0.019159720527 0.081830853262 -0.086435342501 0.010065113847\n" " 4.473610317347 0.611382080738 0.102717317434 -0.056754820192 0.123956998990 -0.039826791539 0.165469927086 -0.200410712475 -0.041960450278\n" " 1.935100804674 -0.806653824181 -0.230184308969 0.286788879281 0.572145261792 -0.183705969647 0.291295712802 -0.303533420852 -0.023503174374\n" " 0.787755660544 -0.813737787488 -0.583672998554 1.450866672422 0.518904350249 -0.237503427061 0.315064211859 -0.406252982054 -0.642426781332\n" " 0.293768118617 -0.097787236037 0.171514456916 -2.505465496286 0.104097287875 0.544755601203 0.298491580418 0.671193994691 -1.002149340367\n" " 0.096285158065 -0.018725934011 1.121145454028 1.333321045479 -0.012851161685 0.728237138423 0.091086538491 1.044472107589 -0.051749578559\n" "#","\n" " Mn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.544553301652 0.073093470228 0.007737617141 -0.112356559070 0.128427483264\n" " 4.848054813373 0.524172731625 0.080999035925 0.147232813006 0.251552231081\n" " 2.164526529348 -0.728865076153 -0.168390545215 0.595364746984 0.432303419394\n" " 0.889600577579 -0.719279115513 -0.484910732725 0.547990570294 0.462243734648\n" " 0.342420014284 -0.107062868546 0.161978409160 0.112195052476 0.410033587493\n" " 0.101924225526 -0.091391408123 0.922002216513 -0.006599984929 0.104488744702\n" "#","\n" " Mn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.544553301652 0.073093470228 0.007737617141 0.072614715676 -0.112356559070 -0.000918247791 0.128427483264 -0.098510232939 0.011600099044\n" " 4.848054813373 0.524172731625 0.080999035925 0.243235089119 0.147232813006 -0.022563980399 0.251552231081 -0.201137346341 -0.038269110382\n" " 2.164526529348 -0.728865076153 -0.168390545215 -0.083273051926 0.595364746984 -0.222689774520 0.432303419394 -0.372206024320 -0.006930134936\n" " 0.889600577579 -0.719279115513 -0.484910732725 1.528518694896 0.547990570294 -0.223281730802 0.462243734648 -0.283875478140 -0.593864975230\n" " 0.342420014284 -0.107062868546 0.161978409160 -2.382396811600 0.112195052476 0.787892008324 0.410033587493 0.535487181225 -0.731351385550\n" " 0.101924225526 -0.091391408123 0.922002216513 1.312464873250 -0.006599984929 0.923252070662 0.104488744702 0.884777948907 -0.410551623712\n" "#","\n" " Fe SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.424366035773 -0.162658565315 -0.035363017559 -0.072847050506 0.110173914394\n" " 4.825219529323 -0.376899337900 -0.052967122649 0.142729813399 0.188638090829\n" " 2.198939257455 0.782922261822 0.047770046081 0.463643359935 0.309261422382\n" " 0.891660670520 0.668791717694 -0.303745487596 0.381142099471 0.329416033612\n" " 0.316230539846 0.044155272467 0.241839701006 0.065337400672 0.286237082129\n" " 0.103474049912 -0.109124318184 1.110613962319 -0.008571808472 0.085017978924\n" "#","\n" " Fe DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.424366035773 -0.162658565315 -0.035363017559 -0.094078593184 -0.072847050506 -0.005733704721 0.110173914394 -0.070157127293 -0.006314368438\n" " 4.825219529323 -0.376899337900 -0.052967122649 -0.123947729175 0.142729813399 -0.013789178386 0.188638090829 -0.086799612151 0.010113549442\n" " 2.198939257455 0.782922261822 0.047770046081 -0.097232244128 0.463643359935 -0.102097633738 0.309261422382 -0.268972922540 -0.073675908597\n" " 0.891660670520 0.668791717694 -0.303745487596 -1.526375946562 0.381142099471 -0.120441338124 0.329416033612 -0.034996470754 -0.417006031951\n" " 0.316230539846 0.044155272467 0.241839701006 2.582854093079 0.065337400672 0.562339049496 0.286237082129 0.429744227008 -0.588459890648\n" " 0.103474049912 -0.109124318184 1.110613962319 -1.436336658778 -0.008571808472 0.724515320284 0.085017978924 0.805064206226 0.838504572352\n" "#","\n" " Co SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 2 6 2 1 1\n" " 8.365267848849 0.325640340818 0.100399284242 0.065178086481 0.161970551713\n" " 4.376457504499 0.052133097592 0.035256534659 -0.270123287267 0.258523958001\n" " 1.999997730424 -0.771768661844 -0.356022277776 -0.523181103805 0.345535423988\n" " 0.834299833692 -0.451524705474 -0.484191598528 -0.351988387737 0.343948305407\n" " 0.307481719486 -0.065898239599 0.316152225672 -0.046316455477 0.268593856293\n" " 0.095840175724 -0.089785302253 1.048143547929 0.002689603563 0.072458934329\n" "#","\n" " Co DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 8.365267848849 0.325640340818 0.100399284242 -0.037272221184 0.065178086481 -0.007853810191 0.161970551713 -0.150374171995 -0.004972248652\n" " 4.376457504499 0.052133097592 0.035256534659 0.130340578991 -0.270123287267 -0.005278972597 0.258523958001 -0.233094541861 -0.027876689140\n" " 1.999997730424 -0.771768661844 -0.356022277776 0.090277112993 -0.523181103805 -0.068346693868 0.345535423988 -0.433567358235 -0.105956196731\n" " 0.834299833692 -0.451524705474 -0.484191598528 1.325070368105 -0.351988387737 -0.063077394461 0.343948305407 0.030145546706 -0.735605287383\n" " 0.307481719486 -0.065898239599 0.316152225672 -2.625301782430 -0.046316455477 0.759497959451 0.268593856293 0.599205222587 -0.912105772173\n" " 0.095840175724 -0.089785302253 1.048143547929 1.561113649398 0.002689603563 0.543915652075 0.072458934329 0.957030486546 0.577467491892\n" "#","\n" " Ni SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 2 6 2 1 1\n" " 10.077427756816 -0.169086929207 0.022677528942 -0.126427871284 0.093966508982\n" " 5.847735848326 -0.313749841130 0.057292097754 0.241165311699 0.269388431386\n" " 2.494032826008 0.766489587737 -0.198532965699 0.543849904725 0.374569463127\n" " 0.988354848429 0.557414017577 -0.427662657827 0.407338672608 0.368089865298\n" " 0.344978242158 0.031729942841 0.260121348436 0.053320914508 0.281719022542\n" " 0.099465768726 -0.025637387109 0.887675876654 -0.003779723220 0.071642894272\n" "#","\n" " Ni DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 10.077427756816 -0.169086929207 0.022677528942 0.008641083176 -0.126427871284 -0.005476801255 0.093966508982 -0.033098284050 -0.001956691144\n" " 5.847735848326 -0.313749841130 0.057292097754 -0.136071800928 0.241165311699 -0.010936526817 0.269388431386 -0.127029492510 0.008799010286\n" " 2.494032826008 0.766489587737 -0.198532965699 0.002540653375 0.543849904725 -0.096663192733 0.374569463127 -0.196169938991 0.006398276758\n" " 0.988354848429 0.557414017577 -0.427662657827 -1.418467855641 0.407338672608 -0.097657540866 0.368089865298 -0.053996889860 0.204329631644\n" " 0.344978242158 0.031729942841 0.260121348436 2.550221093172 0.053320914508 0.508429500180 0.281719022542 0.149590629720 0.039178572608\n" " 0.099465768726 -0.025637387109 0.887675876654 -1.335540301345 -0.003779723220 0.911795065206 0.071642894272 1.026626831833 1.055662599287\n" "#","\n" " Cu SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 6 1 1 1\n" " 5.804051150731 0.020918100390 -0.004381592772 0.275442696345\n" " 2.947777593081 -0.106208582202 0.017185613995 0.351705110927\n" " 1.271621207972 0.307397740339 -0.089805629814 0.331635969640\n" " 0.517173767860 0.240805274553 0.054415126660 0.259386540456\n" " 0.198006620331 -0.798718095004 0.446326740476 0.151105835782\n" " 0.061684232135 -0.738671023869 0.468516012555 0.030634833418\n" "#","\n" " Cu DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 5.804051150731 0.020918100390 0.045720931893 -0.004381592772 -0.021109803873 0.275442696345 -0.101811263028 -0.016523760157\n" " 2.947777593081 -0.106208582202 -0.094026024883 0.017185613995 0.020960301873 0.351705110927 -0.207670618594 0.055142365254\n" " 1.271621207972 0.307397740339 -0.110623536813 -0.089805629814 0.233442747472 0.331635969640 -0.224161904198 -0.286656089760\n" " 0.517173767860 0.240805274553 -0.742218346329 0.054415126660 0.369266430953 0.259386540456 0.176105738988 -0.502349311598\n" " 0.198006620331 -0.798718095004 2.208107372713 0.446326740476 -1.405067129701 0.151105835782 0.210534119173 -0.508940020577\n" " 0.061684232135 -0.738671023869 -1.720016262377 0.468516012555 1.042169799071 0.030634833418 0.902456275117 0.682110135764\n" "#","\n" " Zn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 1 1 1\n" " 6.400812724595 0.021801105639 0.002944311709 0.285687212506\n" " 3.167793332690 -0.095613408620 -0.010450068121 0.358913949434\n" " 1.341703542578 0.274599856591 0.109519543853 0.326076466590\n" " 0.545418416941 0.137056274402 -0.060402922899 0.224403593782\n" " 0.222221794449 -0.625184197271 -0.531920972347 0.097325359555\n" " 0.079830045424 -0.482184818124 -0.498668813865 0.009048926598\n" "#","\n" " Zn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 6.400812724595 0.021801105639 0.042720631346 0.002944311709 0.015629658082 0.285687212506 -0.088263924683 -0.000548299003\n" " 3.167793332690 -0.095613408620 -0.109242428655 -0.010450068121 -0.063967389104 0.358913949434 -0.137258994504 0.001063691080\n" " 1.341703542578 0.274599856591 -0.024734012319 0.109519543853 -0.067544866326 0.326076466590 -0.221544327713 0.030739369071\n" " 0.545418416941 0.137056274402 -1.003647707301 -0.060402922899 -0.144585524038 0.224403593782 0.258114817153 0.504509433027\n" " 0.222221794449 -0.625184197271 2.351480103434 -0.531920972347 1.553520638132 0.097325359555 0.333724215761 0.222475088124\n" " 0.079830045424 -0.482184818124 -1.671373693342 -0.498668813865 -1.253104288811 0.009048926598 0.857995942810 0.894090639367\n" "#","\n" " Ga SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 1 1 1\n" " 7.066653970373 0.004038828810 0.000167446202 -0.311164169605\n" " 3.428369180000 -0.049926015210 0.003362568505 -0.386388805667\n" " 1.430064114378 0.270487560795 0.130532105798 -0.341437057173\n" " 0.571610928613 0.114461485481 -0.096032824634 -0.204608212390\n" " 0.232196966975 -0.765662388169 -0.807329497232 -0.056129936831\n" " 0.076561670688 -0.411890094700 -0.419386452377 -0.001205250841\n" "#","\n" " Ga DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 7.066653970373 0.004038828810 -0.031816598052 0.000167446202 0.029367472355 -0.311164169605 -0.152377671375 0.008402101637\n" " 3.428369180000 -0.049926015210 0.005769897361 0.003362568505 -0.090542574365 -0.386388805667 -0.200456714008 -0.016601774058\n" " 1.430064114378 0.270487560795 0.375790997895 0.130532105798 -0.084206693559 -0.341437057173 -0.304563164958 0.049257564549\n" " 0.571610928613 0.114461485481 0.388650732034 -0.096032824634 0.052258004145 -0.204608212390 0.349719373167 0.451920686398\n" " 0.232196966975 -0.765662388169 -1.779139618248 -0.807329497232 1.288732412987 -0.056129936831 0.455579311293 0.322063208269\n" " 0.076561670688 -0.411890094700 1.829743730735 -0.419386452377 -1.217068254825 -0.001205250841 0.817649971475 1.018553207480\n" "#","\n" " Ge SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 4 1 1\n" " 3.751626352194 -0.081330564365 0.009035073443\n" " 1.419172362656 0.601635148115 0.102040890998\n" " 0.322428319082 -0.974594550901 -0.762506665117\n" " 0.110739925211 -0.656437584837 -0.400605035566\n" "#","\n" " Ge DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 4 2 2 1\n" " 3.751626352194 -0.081330564365 0.131718200550 0.009035073443 -0.028177828258 -0.016817594331\n" " 1.419172362656 0.601635148115 -0.833571668129 0.102040890998 -0.184453915085 0.112319200324\n" " 0.322428319082 -0.974594550901 1.770142218328 -0.762506665117 1.459738649058 1.386642934635\n" " 0.110739925211 -0.656437584837 -1.762909730970 -0.400605035566 -1.461907495600 0.473933627779\n" "#","\n" " As SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 4 1 1\n" " 1.098624139209 0.855667038605 0.312802805211\n" " 0.889293303816 -0.687764546866 -0.362619654191\n" " 0.234710973732 -0.705420359459 -0.425177185346\n" " 0.097981856094 -0.209729326520 -0.182957845017\n" "#","\n" " As DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.098624139209 0.855667038605 -0.557301753073 0.312802805211 -0.238167652686 -0.102371891125\n" " 0.889293303816 -0.687764546866 -0.627315887673 -0.362619654191 0.216505388598 0.223787145639\n" " 0.234710973732 -0.705420359459 -2.016588485577 -0.425177185346 0.935056716086 0.988597507108\n" " 0.097981856094 -0.209729326520 1.439205779281 -0.182957845017 -1.485977479107 0.039413462750\n" "#","\n" " Se SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 4 1 1\n" " 1.465689267622 0.522315327760 0.302629346132\n" " 1.029752381010 -0.177617010578 -0.349360567622\n" " 0.303575471349 -1.057800048233 -0.653355185785\n" " 0.107173147417 -0.299101385035 -0.381186874482\n" "#","\n" " Se DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.465689267622 0.522315327760 0.109434486047 0.302629346132 0.397353185807 0.120897258750\n" " 1.029752381010 -0.177617010578 0.919860707697 -0.349360567622 -0.410169822544 -0.291516752716\n" " 0.303575471349 -1.057800048233 -1.719933785859 -0.653355185785 -0.626545135443 -1.069566209605\n" " 0.107173147417 -0.299101385035 2.073037006457 -0.381186874482 2.208055478040 -0.296658894209\n" "#","\n" " Br SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 4 1 1\n" " 1.737392738120 0.698849040883 0.408222406946\n" " 0.995743043074 -0.178219675950 -0.559269850657\n" " 0.337588776628 -1.701043348622 -1.220407791913\n" " 0.115887043391 -0.358131187327 -0.708522727592\n" "#","\n" " Br DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.737392738120 0.698849040883 -0.027829541950 0.408222406946 0.104199804352 0.735355883214\n" " 0.995743043074 -0.178219675950 0.121124053665 -0.559269850657 -0.028681992792 -2.354878683630\n" " 0.337588776628 -1.701043348622 -2.197717138458 -1.220407791913 -0.996384166266 -2.891234672063\n" " 0.115887043391 -0.358131187327 1.946344639416 -0.708522727592 3.770311426725 -0.592507107440\n" "#","\n" " Kr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 4 1 1\n" " 1.784435668906 0.810837662050 0.348552421052\n" " 1.005532891273 -0.533585820331 -0.573408630951\n" " 0.327795673641 -1.439836500217 -0.909538466141\n" " 0.108549688447 -0.206171398876 -0.408970770978\n" "#","\n" " Kr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 4 2 2 1\n" " 1.784435668906 0.810837662050 -0.329499714794 0.348552421052 -0.018676893124 -0.577769793404\n" " 1.005532891273 -0.533585820331 0.849588151788 -0.573408630951 -0.063596257231 -0.379378556605\n" " 0.327795673641 -1.439836500217 -2.926928041746 -0.909538466141 -0.786542637237 -1.203208979343\n" " 0.108549688447 -0.206171398876 1.961821687963 -0.408970770978 1.457080125376 1.674577778254\n" "#","\n" " Rb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 7 2 1\n" " 7.107230694150 -0.062218041672 -0.013507092266 0.035700265054\n" " 2.414406259100 0.488731908603 0.125115402960 -0.161483665734\n" " 1.134628425827 -0.101894960518 -0.042229797524 0.211536304024\n" " 0.483816136667 -0.827806256641 -0.296364033354 0.499666987934\n" " 0.198690371820 -0.304219423335 -0.278176269515 0.306717399916\n" " 0.078496630593 0.002468186208 0.316847793087 0.039955632038\n" " 0.029773227781 0.025109167182 0.829792452385 -0.000551065720\n" "#","\n" " Rb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 7 3 2 1\n" " 7.107230694150 -0.062218041672 -0.013507092266 0.027821303246 0.035700265054 -0.009299202459 -0.001936508600\n" " 2.414406259100 0.488731908603 0.125115402960 -0.230232762986 -0.161483665734 0.041686622213 -0.002780629610\n" " 1.134628425827 -0.101894960518 -0.042229797524 0.239146438168 0.211536304024 -0.062301116336 0.092739553255\n" " 0.483816136667 -0.827806256641 -0.296364033354 -0.001364253092 0.499666987934 -0.186160284116 0.347438745009\n" " 0.198690371820 -0.304219423335 -0.278176269515 1.281826773475 0.306717399916 -0.090677499009 0.636698242337\n" " 0.078496630593 0.002468186208 0.316847793087 -2.888698734643 0.039955632038 0.258184855427 0.573025473782\n" " 0.029773227781 0.025109167182 0.829792452385 1.751588992331 -0.000551065720 0.909374383359 0.565570253663\n" "#","\n" " Sr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 6 2 1\n" " 7.290111894735 0.069364270475 -0.016182746349 0.035659445929\n" " 2.536776771327 -0.571246927373 0.158928639982 -0.195822349727\n" " 1.283099546928 0.167836311459 -0.041157757852 0.260320252229\n" " 0.532449841650 0.904733330629 -0.431882417196 0.555386362294\n" " 0.211628059408 0.250907816117 -0.073959284415 0.267635587013\n" " 0.050841303698 0.007135721199 0.825600560103 0.001214128781\n" "#","\n" " Sr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 2 6 3 2 1\n" " 7.290111894735 0.069364270475 -0.016182746349 -0.139466774650 0.035659445929 0.013920724630 -0.000090724547\n" " 2.536776771327 -0.571246927373 0.158928639982 -0.692403611332 -0.195822349727 -0.076802870831 -0.010109417559\n" " 1.283099546928 0.167836311459 -0.041157757852 -0.230309165261 0.260320252229 0.101479121539 0.066689821534\n" " 0.532449841650 0.904733330629 -0.431882417196 -0.069075854659 0.555386362294 0.267329775450 0.181824639879\n" " 0.211628059408 0.250907816117 -0.073959284415 1.145292027845 0.267635587013 0.052802012061 0.278155352971\n" " 0.050841303698 0.007135721199 0.825600560103 -2.640301525895 0.001214128781 -0.501686484262 0.157444712589\n" "#","\n" " Y SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 7 2 1 1\n" " 7.169829557085 0.064756738089 -0.022627762846 -0.024276685117 -0.000498514326\n" " 2.700922470615 -0.597719860262 0.235885458901 0.187917721906 -0.031403568872\n" " 1.376251109084 0.082122642041 -0.087291364288 -0.245232860710 0.127573561162\n" " 0.656916983532 0.966304799106 -0.405979470239 -0.598857920831 0.336722884287\n" " 0.281951576337 0.370251411162 -0.369782037034 -0.347360898522 0.474465039649\n" " 0.114567346626 0.047095993893 0.381463146281 -0.027444250529 0.383269025496\n" " 0.041587097849 0.121766951290 0.813527659184 -0.000772518245 0.124574151507\n" "#","\n" " Y DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 7.169829557085 0.064756738089 -0.022627762846 0.003819575374 -0.024276685117 -0.007895618075 -0.000498514326 -0.004435490551 -0.001782791348\n" " 2.700922470615 -0.597719860262 0.235885458901 -0.198330198799 0.187917721906 0.069387220484 -0.031403568872 0.054881707361 0.012853512634\n" " 1.376251109084 0.082122642041 -0.087291364288 0.531158632032 -0.245232860710 -0.134631203363 0.127573561162 -0.129541942957 -0.087471625840\n" " 0.656916983532 0.966304799106 -0.405979470239 0.108726218382 -0.598857920831 -0.231880747338 0.336722884287 -0.597681869599 -0.650935776283\n" " 0.281951576337 0.370251411162 -0.369782037034 1.371830612307 -0.347360898522 -0.080179872806 0.474465039649 -0.136727173378 -0.584017959493\n" " 0.114567346626 0.047095993893 0.381463146281 -3.345342150310 -0.027444250529 0.520590734955 0.383269025496 0.038190788742 -0.696187518367\n" " 0.041587097849 0.121766951290 0.813527659184 2.147987485965 -0.000772518245 0.741032334112 0.124574151507 1.078804758995 0.524836449052\n" "#","\n" " Zr SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 7 2 1 1\n" " 7.568385790028 -0.094978310907 -0.033616559232 -0.020865512366 -0.001689422502\n" " 2.940870125103 0.694261607918 0.288000788551 0.222352813741 -0.011935551626\n" " 1.478549725921 -0.214258448962 -0.141902662715 -0.319406707712 0.152103521468\n" " 0.699652747292 -0.923670545104 -0.452166355085 -0.588541345286 0.296191130217\n" " 0.314575404780 -0.327047026378 -0.381211768681 -0.309198403218 0.399124869129\n" " 0.129868596693 0.003239038466 0.526743157382 -0.019801636662 0.242072326904\n" " 0.046850569449 -0.007129719335 0.810803550660 -0.000524643311 0.048657150043\n" "#","\n" " Zr DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 7.568385790028 -0.094978310907 -0.033616559232 -0.013349699986 -0.020865512366 -0.002290591691 -0.001689422502 -0.002354868577 0.003856737689\n" " 2.940870125103 0.694261607918 0.288000788551 -0.164712644101 0.222352813741 0.053781865205 -0.011935551626 0.026432470933 -0.013583377285\n" " 1.478549725921 -0.214258448962 -0.141902662715 0.533207302704 -0.319406707712 -0.122494830242 0.152103521468 -0.076453834071 -0.086468568432\n" " 0.699652747292 -0.923670545104 -0.452166355085 0.109420966738 -0.588541345286 -0.277888241330 0.296191130217 -0.273025800110 -0.563950845131\n" " 0.314575404780 -0.327047026378 -0.381211768681 1.392697829361 -0.309198403218 0.025966843597 0.399124869129 0.045119618315 -0.622062115242\n" " 0.129868596693 0.003239038466 0.526743157382 -3.337321484704 -0.019801636662 0.475807819736 0.242072326904 0.180401992175 -0.552753691412\n" " 0.046850569449 -0.007129719335 0.810803550660 2.074605849369 -0.000524643311 0.625967738574 0.048657150043 1.105393639621 0.165196094208\n" "#","\n" " Nb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 7 2 1 1\n" " 3.445688332127 6.967608357644 -3.377478792599 -0.840846380047 0.388363778921\n" " 3.361754070289 -7.592191163341 3.690016909917 0.956420493475 -0.389233499416\n" " 1.402769349742 0.489341601567 -0.310828636726 -0.276255708969 -0.232772054682\n" " 0.638107530614 0.749244219846 -0.462987145063 -0.340280885378 -0.367470032847\n" " 0.297916452528 0.168228854756 -0.275959272761 -0.120882245268 -0.373135144785\n" " 0.134531184887 -0.010188517089 0.576706104059 -0.004779969154 -0.185455779821\n" " 0.051687918628 0.006294814846 0.631490283017 -0.000211964161 -0.039160568093\n" "#","\n" " Nb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 3.445688332127 6.967608357644 -3.377478792599 8.753281549590 -0.840846380047 0.156868559129 0.388363778921 0.459373932984 0.464314945457\n" " 3.361754070289 -7.592191163341 3.690016909917 -8.926202800310 0.956420493475 -0.211987417412 -0.389233499416 -0.467868954158 -0.427447517961\n" " 1.402769349742 0.489341601567 -0.310828636726 0.633972204920 -0.276255708969 0.225373426671 -0.232772054682 -0.169379157593 -0.197717184453\n" " 0.638107530614 0.749244219846 -0.462987145063 -0.111601241388 -0.340280885378 0.183794395021 -0.367470032847 -0.323135603674 -0.588178917976\n" " 0.297916452528 0.168228854756 -0.275959272761 1.410604379810 -0.120882245268 -0.165885709655 -0.373135144785 0.023106426168 -0.476010923425\n" " 0.134531184887 -0.010188517089 0.576706104059 -3.231399119388 -0.004779969154 -0.336057891318 -0.185455779821 -0.086482885111 -0.466998469570\n" " 0.051687918628 0.006294814846 0.631490283017 2.118393728700 -0.000211964161 -0.786575100596 -0.039160568093 1.131690269915 0.648887813696\n" "#","\n" " Mo SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 2 7 2 1 1\n" " 2.540273246178 -0.578530819221 0.207479779241 0.307100812758 -0.149151531382\n" " 1.999996221023 0.255133124027 -0.231957971109 -0.375633370985 0.289650418561\n" " 0.894040376874 0.676100594670 0.285544120446 -0.244205356948 0.207391250228\n" " 0.439256605865 0.131763425580 0.062954195096 -0.177325998176 0.312615422763\n" " 0.189497802537 0.085911973535 -0.210930323620 -0.016882413378 0.200727667932\n" " 0.083802212693 -0.062285567387 -0.868201464922 -0.000916114554 0.047819428716\n" " 0.052948764137 0.016176877393 -0.574266536022 0.000883614589 0.013662121505\n" "#","\n" " Mo DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 2.540273246178 -0.578530819221 0.207479779241 -0.299914438061 0.307100812758 -0.056135943926 -0.149151531382 0.078318936957 0.090482429273\n" " 1.999996221023 0.255133124027 -0.231957971109 -0.417466028636 -0.375633370985 0.137590516968 0.289650418561 -0.193587305622 -0.158221499177\n" " 0.894040376874 0.676100594670 0.285544120446 0.515341081590 -0.244205356948 0.160869646404 0.207391250228 -0.376645017726 -0.294586192143\n" " 0.439256605865 0.131763425580 0.062954195096 -0.748853953260 -0.177325998176 -0.132932627695 0.312615422763 -0.186682023670 -0.705339054554\n" " 0.189497802537 0.085911973535 -0.210930323620 1.300969236640 -0.016882413378 -0.383867077982 0.200727667932 0.236167100944 -0.270988043507\n" " 0.083802212693 -0.062285567387 -0.868201464922 -3.373816977234 -0.000916114554 -0.526274675338 0.047819428716 0.096109040144 -0.475221485624\n" " 0.052948764137 0.016176877393 -0.574266536022 1.973814085745 0.000883614589 -0.535005148259 0.013662121505 1.079607069896 0.639098431599\n" "#","\n" " Tc SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 2 7 2 1 1\n" " 3.164224765901 -4.936025404648 2.690105911399 1.875473204955 -0.315743748171\n" " 3.111533459421 5.402033503677 -2.906113798449 -1.589412009269 0.248590535878\n" " 1.923601224823 -0.382432085374 0.205154484199 -0.484599011050 0.277986264842\n" " 0.887428259225 -0.325518324167 0.411180892172 -0.878565217193 0.337694430891\n" " 0.387592572799 -0.122553923184 0.110130628461 -0.345096002980 0.419921218350\n" " 0.151375638104 0.091448243559 -0.679068092339 -0.016891045364 0.202434518908\n" " 0.052897942898 0.094934643036 -0.799513230137 0.002744375423 0.022350450321\n" "#","\n" " Tc DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 3.164224765901 -4.936025404648 2.690105911399 8.299735456543 1.875473204955 -0.389124278660 -0.315743748171 0.453605787389 0.417278606867\n" " 3.111533459421 5.402033503677 -2.906113798449 -8.422380593905 -1.589412009269 0.310379586569 0.248590535878 -0.430318362917 -0.352874423698\n" " 1.923601224823 -0.382432085374 0.205154484199 0.605501825023 -0.484599011050 0.219977647323 0.277986264842 -0.192462070398 -0.135620561050\n" " 0.887428259225 -0.325518324167 0.411180892172 -0.244963673523 -0.878565217193 0.144726968569 0.337694430891 -0.252253826854 -0.492425087615\n" " 0.387592572799 -0.122553923184 0.110130628461 1.309565408916 -0.345096002980 -0.226102503229 0.419921218350 -0.096741785658 -0.446932223217\n" " 0.151375638104 0.091448243559 -0.679068092339 -3.154717953969 -0.016891045364 -0.394462618190 0.202434518908 -0.085506487189 -0.445111357421\n" " 0.052897942898 0.094934643036 -0.799513230137 2.197244299784 0.002744375423 -0.648372090195 0.022350450321 1.149052887456 0.721221763063\n" "#","\n" " Ru SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 2 7 2 1 1\n" " 2.787485846721 0.419245156353 0.847305490262 -2.358144554736 0.788526811934\n" " 2.671513807197 0.402523023175 -1.207617992281 2.345239865410 -0.863711338604\n" " 1.595751289168 -0.808149719838 0.513111660606 0.317793572742 -0.053253108229\n" " 0.821527061530 -0.477224887406 0.129164670091 0.512263090829 -0.202587225418\n" " 0.376346360068 -0.163265585552 0.268674181220 0.188482905753 -0.146122499622\n" " 0.192696937194 -0.088262869679 -0.408874960105 0.000829620006 -0.095330219372\n" " 0.068097557464 -0.260996120571 -0.797339816834 0.001387096163 -0.024995451964\n" "#","\n" " Ru DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 3 7 3 2 2 1\n" " 2.787485846721 0.419245156353 0.847305490262 6.921824287372 -2.358144554736 -0.707900609304 0.788526811934 0.431581913720 0.626906168798\n" " 2.671513807197 0.402523023175 -1.207617992281 -7.215911406936 2.345239865410 0.713232939519 -0.863711338604 -0.493940272079 -0.640462793210\n" " 1.595751289168 -0.808149719838 0.513111660606 0.791734614725 0.317793572742 0.156002828255 -0.053253108229 -0.106350839479 -0.104374234384\n" " 0.821527061530 -0.477224887406 0.129164670091 -0.269179658833 0.512263090829 0.255718656921 -0.202587225418 -0.431181078906 -0.721109469116\n" " 0.376346360068 -0.163265585552 0.268674181220 1.108319334214 0.188482905753 -0.505228683203 -0.146122499622 0.055386787557 -0.474329276924\n" " 0.192696937194 -0.088262869679 -0.408874960105 -3.154973580527 0.000829620006 -0.444948207050 -0.095330219372 0.157949246530 -0.620019133396\n" " 0.068097557464 -0.260996120571 -0.797339816834 1.934939194182 0.001387096163 -0.452796474664 -0.024995451964 1.037559058652 0.466016266685\n" "#","\n" " Rh SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.157817444361 0.760084070950 0.239207051701 -0.336193318541 -0.176446839307\n" " 2.683291075925 -0.255650224037 -0.091067207483 0.373953992584 0.261743358411\n" " 1.140786095845 -1.025626679377 -0.520689753906 0.300684698668 0.174717739794\n" " 0.492081007160 -0.234415477939 -0.274976137245 0.141457244144 0.188746290944\n" " 0.192543904978 0.046321838032 0.534686741279 0.007751787318 0.112894420897\n" " 0.066486620394 0.135748106274 0.896548625743 0.000117823467 0.021703317232\n" "#","\n" " Rh DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.157817444361 0.760084070950 0.239207051701 -0.176908781955 -0.336193318541 -0.088125446787 -0.176446839307 -0.026270559744 0.115615533976\n" " 2.683291075925 -0.255650224037 -0.091067207483 0.468944646941 0.373953992584 0.061257175816 0.261743358411 -0.026406732314 -0.111111060683\n" " 1.140786095845 -1.025626679377 -0.520689753906 -0.120831837016 0.300684698668 -0.192303757667 0.174717739794 -0.254749961865 -0.622696187547\n" " 0.492081007160 -0.234415477939 -0.274976137245 1.313841940318 0.141457244144 0.290786768179 0.188746290944 0.046758963178 -0.157786278903\n" " 0.192543904978 0.046321838032 0.534686741279 -3.287648327719 0.007751787318 0.580565362723 0.112894420897 0.048917987662 -0.581950444165\n" " 0.066486620394 0.135748106274 0.896548625743 1.948301386804 0.000117823467 0.790444403671 0.021703317232 0.972191217603 0.993182295696\n" "#","\n" " Rh SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.902721449032 0.016652865171 -0.008699428728 -0.112417659954\n" " 1.999830271997 -0.133395648426 0.046572987907 0.348017742874\n" " 0.879887627395 0.373099930807 -0.153463590375 0.381775351795\n" " 0.363794442257 0.298777744612 -0.052550610965 0.335875585916\n" " 0.140096726529 -0.924610879301 0.949493319446 0.146687236468\n" " 0.042562039477 -0.455102584336 0.423881871378 0.013082339937\n" "#","\n" " Rh SZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 2 1 2\n" " 3.902721449032 0.016652865171 -0.068138878878 -0.008699428728 -0.112417659954 -0.059777116284\n" " 1.999830271997 -0.133395648426 -0.004871048934 0.046572987907 0.348017742874 0.202056639971\n" " 0.879887627395 0.373099930807 0.649713932179 -0.153463590375 0.381775351795 0.110186767731\n" " 0.363794442257 0.298777744612 -0.021734587290 -0.052550610965 0.335875585916 0.064547743479\n" " 0.140096726529 -0.924610879301 -1.860437433134 0.949493319446 0.146687236468 -0.989654088355\n" " 0.042562039477 -0.455102584336 1.740659313641 0.423881871378 0.013082339937 -0.289820583737\n" "#","\n" " Rh DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.902721449032 0.016652865171 -0.068138878878 -0.008699428728 -0.059391469214 -0.112417659954 -0.059777116284 -0.003558664914\n" " 1.999830271997 -0.133395648426 -0.004871048934 0.046572987907 0.041960437254 0.348017742874 0.202056639971 -0.044875919808\n" " 0.879887627395 0.373099930807 0.649713932179 -0.153463590375 0.518188755943 0.381775351795 0.110186767731 0.283349273890\n" " 0.363794442257 0.298777744612 -0.021734587290 -0.052550610965 -0.216591015187 0.335875585916 0.064547743479 1.043919000870\n" " 0.140096726529 -0.924610879301 -1.860437433134 0.949493319446 -0.898213733147 0.146687236468 -0.989654088355 -0.791074751670\n" " 0.042562039477 -0.455102584336 1.740659313641 0.423881871378 1.173029461392 0.013082339937 -0.289820583737 -0.082082714309\n" "#","\n" " Pd SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.408675573589 -0.132466784026 -0.567545309589 -0.237012042169\n" " 3.102531722049 -0.437179496952 0.553597861423 0.281832849168\n" " 1.644492988513 0.691818466230 0.309106812808 0.110086701020\n" " 0.791839035568 0.350166504373 0.314239136372 0.167791703969\n" " 0.316235520337 0.074477347669 0.070008169012 0.139346360820\n" " 0.109243742847 -0.009869037755 -0.003111197582 0.062460911300\n" "#","\n" " Pd DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.408675573589 -0.132466784026 0.029290454237 -0.567545309589 0.092784274333 -0.237012042169 0.095368996052 -0.073961706459\n" " 3.102531722049 -0.437179496952 0.192782667373 0.553597861423 -0.071388535306 0.281832849168 -0.080649769787 0.103257171864\n" " 1.644492988513 0.691818466230 -0.427625425484 0.309106812808 -0.179050519933 0.110086701020 -0.295200859905 -0.351204999462\n" " 0.791839035568 0.350166504373 -0.357653431542 0.314239136372 -0.049934153069 0.167791703969 0.018285464999 -0.414552037766\n" " 0.316235520337 0.074477347669 0.052946309434 0.070008169012 0.231812779555 0.139346360820 -0.027457577038 -0.637088708585\n" " 0.109243742847 -0.009869037755 1.328390548434 -0.003111197582 0.958384247940 0.062460911300 1.416457521209 1.171833433651\n" "#","\n" " Ag SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 5 1 1 1\n" " 2.586709178255 0.043754600978 0.022644943791 -0.228119986020\n" " 1.295159890890 -0.065091062805 -0.041727270135 -0.411112871153\n" " 0.553039826122 -0.405167335465 -0.158228872130 -0.391768462286\n" " 0.211183058137 0.497578418798 0.484453657192 -0.227577654035\n" " 0.062847168062 0.619659047740 0.747373652696 -0.034845530428\n" "#","\n" " Ag DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 5 2 2 2 1\n" " 2.586709178255 0.043754600978 0.016002004018 0.022644943791 0.005366630333 -0.228119986020 -0.065708005966 0.049544247949\n" " 1.295159890890 -0.065091062805 -0.036550568555 -0.041727270135 0.118122315157 -0.411112871153 -0.164499674965 -0.230239586867\n" " 0.553039826122 -0.405167335465 1.349533052863 -0.158228872130 0.689957680364 -0.391768462286 -0.083405899269 -0.501645626428\n" " 0.211183058137 0.497578418798 -2.535842013811 0.484453657192 -1.573396135858 -0.227577654035 -0.038684987758 -0.563865046243\n" " 0.062847168062 0.619659047740 1.655664881614 0.747373652696 1.108931560435 -0.034845530428 1.073281933345 0.515376673117\n" "#","\n" " Cd SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 5 1 1 1\n" " 2.617301292227 0.056942862843 0.032277317911 -0.270406154064\n" " 1.315617684053 -0.111910427538 -0.096634842893 -0.407839310946\n" " 0.573375899853 -0.420173785813 -0.083107933622 -0.363233448773\n" " 0.222222213763 0.564376116618 0.419549254990 -0.168907403589\n" " 0.076307136525 0.789967059806 0.795089873672 -0.013172843723\n" "#","\n" " Cd DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 5 2 2 2 1\n" " 2.617301292227 0.056942862843 0.085229465042 0.032277317911 0.051510843904 -0.270406154064 -0.064920306950 -0.038770557595\n" " 1.315617684053 -0.111910427538 -0.202708060768 -0.096634842893 -0.059783928261 -0.407839310946 -0.152553100915 -0.110107626346\n" " 0.573375899853 -0.420173785813 1.542506765787 -0.083107933622 0.615455610766 -0.363233448773 0.032121836723 -0.034014284171\n" " 0.222222213763 0.564376116618 -2.827046600082 0.419549254990 -1.767302700397 -0.168907403589 -0.117391708980 -0.107254575233\n" " 0.076307136525 0.789967059806 1.744522478935 0.795089873672 1.158998093237 -0.013172843723 1.045519107194 1.059683456620\n" "#","\n" " In SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.101675464995 -0.014756989563 -0.002337235001 0.245121261683\n" " 1.829866249849 -0.064345448008 0.031433449222 0.432609058860\n" " 0.898324196118 0.435246205245 -0.178879364380 0.486649088749\n" " 0.389454004688 -0.080147974732 0.140416923228 0.288251501897\n" " 0.162701041351 -0.728191656411 0.548122424076 0.057468890352\n" " 0.059412871673 -0.313235936982 0.384462238049 -0.000258770565\n" "#","\n" " In DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.101675464995 -0.014756989563 -0.110029580336 -0.002337235001 0.052839464904 0.245121261683 -0.012257945606 0.018888332958\n" " 1.829866249849 -0.064345448008 0.153222489077 0.031433449222 -0.110752586447 0.432609058860 -0.110028720800 -0.034470276859\n" " 0.898324196118 0.435246205245 0.391315648506 -0.178879364380 -0.100516978998 0.486649088749 -0.199975755292 0.113987435924\n" " 0.389454004688 -0.080147974732 0.337603965479 0.140416923228 0.023776328126 0.288251501897 0.335339132093 0.644348565644\n" " 0.162701041351 -0.728191656411 -1.893798269373 0.548122424076 1.285364410462 0.057468890352 0.399314422381 0.277069768884\n" " 0.059412871673 -0.313235936982 1.933683990690 0.384462238049 -1.445573560596 -0.000258770565 0.813978718300 0.799646050773\n" "#","\n" " Sn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 5 1 1\n" " 0.666669575074 0.689214482698 0.249601611539\n" " 0.486831392324 -0.512955759145 -0.282734426066\n" " 0.172775679838 -0.598032924010 -0.235164953470\n" " 0.065536149861 -0.215612744096 -0.261775353331\n" " 0.063643963946 0.056968014830 0.117722874377\n" "#","\n" " Sn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.666669575074 0.689214482698 0.597390157534 0.249601611539 0.315252873428 0.457406998777\n" " 0.486831392324 -0.512955759145 -0.578949723335 -0.282734426066 -0.456284996504 -0.671314814330\n" " 0.172775679838 -0.598032924010 -0.232486513252 -0.235164953470 0.160480606525 -0.579588972796\n" " 0.065536149861 -0.215612744096 -1.308667699314 -0.261775353331 -1.088783079841 -1.650667611807\n" " 0.063643963946 0.056968014830 2.152315008945 0.117722874377 1.400518346191 0.726312420432\n" "#","\n" " Sb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 5 1 1\n" " 0.757214368696 0.691593689520 0.756051462053\n" " 0.576116222147 -0.351217469046 -0.792348307348\n" " 0.244349272369 -0.615740163850 -0.378296806004\n" " 0.160329448814 -0.264402217378 -0.611128127466\n" " 0.073465983327 -0.171357973436 -0.255229944153\n" "#","\n" " Sb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.757214368696 0.691593689520 1.088920140322 0.756051462053 0.641112817519 0.801626688859\n" " 0.576116222147 -0.351217469046 -0.822676611872 -0.792348307348 -0.692298068143 -0.889703632274\n" " 0.244349272369 -0.615740163850 0.211516912099 -0.378296806004 -0.178293615513 -1.240429938237\n" " 0.160329448814 -0.264402217378 -1.715750005616 -0.611128127466 -0.751513283235 -2.058418758569\n" " 0.073465983327 -0.171357973436 2.700437428872 -0.255229944153 1.854777651762 0.223525953909\n" "#","\n" " Te SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 5 1 1\n" " 0.871170553457 -0.768209530501 -0.201075823729\n" " 0.666552751461 0.368144626623 0.204460083751\n" " 0.260565380434 0.833378133558 0.154271149685\n" " 0.171876990300 0.191335229653 0.113448742480\n" " 0.082233548720 0.215694921905 0.106354644586\n" "#","\n" " Te DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.871170553457 -0.768209530501 0.791359979104 -0.201075823729 0.531876807227 0.753248997934\n" " 0.666552751461 0.368144626623 -0.650859183208 0.204460083751 -0.682761765123 -0.946881734404\n" " 0.260565380434 0.833378133558 0.702283405156 0.154271149685 0.282705036438 -0.783009060844\n" " 0.171876990300 0.191335229653 -1.929360042093 0.113448742480 -0.665024191612 -1.602503279568\n" " 0.082233548720 0.215694921905 2.377910783672 0.106354644586 1.691098378374 0.055752014401\n" "#","\n" " I SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 5 1 1\n" " 0.966172693776 -0.472463189351 -0.431253473002\n" " 0.828885570527 -0.046174838614 0.405448133098\n" " 0.367159310806 0.674866028669 0.154408288042\n" " 0.201369106832 0.441846190432 0.307131088797\n" " 0.083015071126 0.147700751496 0.151452356751\n" "#","\n" " I DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 5 2 2 1\n" " 0.966172693776 -0.472463189351 1.555822203873 -0.431253473002 0.437499136144 0.790909981479\n" " 0.828885570527 -0.046174838614 -0.405245398304 0.405448133098 -0.360836974979 -0.706739130323\n" " 0.367159310806 0.674866028669 0.837346281042 0.154408288042 -0.426955819328 -1.146102256372\n" " 0.201369106832 0.441846190432 -2.170714561688 0.307131088797 -0.142879089720 -1.473453298743\n" " 0.083015071126 0.147700751496 2.099200395478 0.151452356751 1.946428231727 -0.517749701272\n" "#","\n" " Xe SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 5 1 1\n" " 1.060135338393 0.595086879307 -0.455562867881\n" " 0.666666004946 -0.333303102706 0.584858919323\n" " 0.277808854324 -0.853453515069 0.556607088551\n" " 0.171463992710 0.008584975685 0.284690856924\n" " 0.096899106515 -0.148160183031 0.213921134179\n" "#","\n" " Xe DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.060135338393 0.595086879307 1.159498326834 -0.455562867881 0.341641892911 0.461999932788\n" " 0.666666004946 -0.333303102706 -0.700514321869 0.584858919323 -0.637621905684 -0.861718349639\n" " 0.277808854324 -0.853453515069 0.843332917012 0.556607088551 0.421389646121 -0.690146245180\n" " 0.171463992710 0.008584975685 -2.438781702578 0.284690856924 -1.036777647654 -2.060830843444\n" " 0.096899106515 -0.148160183031 2.027210394018 0.213921134179 2.018039151988 0.570372103567\n" "#","\n" " Cs SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 1 6 2 1\n" " 1.000865707027 0.280322352634 0.098179355219 -0.360207388692\n" " 0.913482115012 0.358344637273 -0.098255007626 -0.016242892143\n" " 0.666653730505 -0.489376812003 0.118067108510 0.500190150119\n" " 0.332485858625 -0.512310150761 -0.480608369395 0.336498234976\n" " 0.149836705312 -0.141743262814 0.078136295233 0.344475837226\n" " 0.026691284164 0.280660075501 1.173263741421 0.011885241412\n" "#","\n" " Cs DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9\n" " 1\n" " 2 0 2 6 3 2 1\n" " 1.000865707027 0.280322352634 0.098179355219 0.031141586311 -0.360207388692 0.002335867187 0.147697150754\n" " 0.913482115012 0.358344637273 -0.098255007626 0.330103917383 -0.016242892143 0.084765416923 0.071945154769\n" " 0.666653730505 -0.489376812003 0.118067108510 -0.659442112080 0.500190150119 -0.132236014043 -0.240447290500\n" " 0.332485858625 -0.512310150761 -0.480608369395 3.043138449037 0.336498234976 -0.036101912675 -0.535530906149\n" " 0.149836705312 -0.141743262814 0.078136295233 -3.444995658743 0.344475837226 -0.076534707873 -0.669534557468\n" " 0.026691284164 0.280660075501 1.173263741421 1.178266960491 0.011885241412 1.106818006414 0.388389576072\n" "#","\n" " Ba SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 1 6 2 1\n" " 1.099107387393 -0.265977603953 0.133167313532 -0.076120521522\n" " 1.042415611430 -0.548867124949 0.303553076384 0.581707053986\n" " 0.923815583300 0.534778251294 -0.187596947384 -0.513377720928\n" " 0.409515187180 0.587584269233 -0.829784858376 -0.199996660495\n" " 0.166000524554 0.112796348364 0.080177822791 -0.129413972483\n" " 0.038868137908 -0.097599163432 1.388751874990 0.001685949311\n" "#","\n" " Ba DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q10\n" " 1\n" " 2 0 2 6 3 2 1\n" " 1.099107387393 -0.265977603953 0.133167313532 0.290876128104 -0.076120521522 0.156054210447 0.457091203328\n" " 1.042415611430 -0.548867124949 0.303553076384 -0.457720153751 0.581707053986 0.034898462239 -0.051884397940\n" " 0.923815583300 0.534778251294 -0.187596947384 0.955681723101 -0.513377720928 -0.112603657198 -0.325084641003\n" " 0.409515187180 0.587584269233 -0.829784858376 -3.839746465310 -0.199996660495 -0.398760799348 -1.103831466587\n" " 0.166000524554 0.112796348364 0.080177822791 3.559104747841 -0.129413972483 0.013035859628 -1.307997155338\n" " 0.038868137908 -0.097599163432 1.388751874990 -1.406284723707 0.001685949311 0.806788017038 -0.503750948349\n" "#","\n" " Hf SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 2 1 1\n" " 2.671196497548 0.788939427855 0.166407997203 -0.301974408389 -0.047796823905\n" " 2.597200237263 -0.135944993309 0.121000538909 0.293385766135 0.040716807355\n" " 1.091215248046 -0.911502384031 -0.450097538431 0.044171452367 0.281226003531\n" " 0.482780902120 -0.403765732131 -0.527116158052 0.050912843752 0.563159769901\n" " 0.184203719686 -0.116982787286 0.367518491637 0.006790589259 0.537885417612\n" " 0.060257634881 -0.118019349325 0.917540530320 -0.000081217891 0.138650274135\n" "#","\n" " Hf DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 2.671196497548 0.788939427855 0.166407997203 -0.808044747643 -0.301974408389 0.200618001886 -0.047796823905 -0.576358120326 0.136965103461\n" " 2.597200237263 -0.135944993309 0.121000538909 0.502710504170 0.293385766135 -0.131814094303 0.040716807355 0.121047786291 -0.101127257056\n" " 1.091215248046 -0.911502384031 -0.450097538431 -0.571536407023 0.044171452367 -0.119671510085 0.281226003531 -0.260083157654 -0.239844496668\n" " 0.482780902120 -0.403765732131 -0.527116158052 1.567869205746 0.050912843752 -0.209054741982 0.563159769901 -0.061407406614 -0.448266650992\n" " 0.184203719686 -0.116982787286 0.367518491637 -3.196670125867 0.006790589259 -0.050569947887 0.537885417612 -0.642967474054 -0.402343230211\n" " 0.060257634881 -0.118019349325 0.917540530320 1.895484387467 -0.000081217891 -0.947169815010 0.138650274135 0.976981432228 1.144416860469\n" "#","\n" " Ta SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 2 1 1\n" " 2.946055777701 0.481243902001 -0.039175358113 0.388448534264 -0.093115240785\n" " 2.777081321651 -0.000792758352 0.308251777475 -0.366342974440 0.111690390706\n" " 1.000199049661 -0.863712437729 -0.568363162228 -0.156083711841 0.225370492392\n" " 0.459026245077 -0.356339626223 -0.406417265286 -0.108217872947 0.293416264804\n" " 0.201289293145 -0.023090355735 0.248901497428 -0.015667426694 0.298377389246\n" " 0.065633603795 -0.015350833125 0.839900958846 0.000163546036 0.101787930127\n" "#","\n" " Ta DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 2.946055777701 0.481243902001 -0.039175358113 -0.219388739489 0.388448534264 -0.107938517042 -0.093115240785 -0.050799537716 0.071927166904\n" " 2.777081321651 -0.000792758352 0.308251777475 0.403285867163 -0.366342974440 0.047342767090 0.111690390706 0.051196996245 -0.015240206083\n" " 1.000199049661 -0.863712437729 -0.568363162228 -0.077743160108 -0.156083711841 -0.041740097950 0.225370492392 -0.295019586907 -0.470524112950\n" " 0.459026245077 -0.356339626223 -0.406417265286 1.717095624131 -0.108217872947 0.095987055932 0.293416264804 -0.181398283746 -0.645020041639\n" " 0.201289293145 -0.023090355735 0.248901497428 -3.203010923833 -0.015667426694 0.541275844761 0.298377389246 -0.083413162524 -0.819326850350\n" " 0.065633603795 -0.015350833125 0.839900958846 2.207786277506 0.000163546036 1.013357766701 0.101787930127 1.239644127245 0.794184603929\n" "#","\n" " W SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.103253876757 0.441154908462 -0.046848871737 0.516608286752 -0.104347730230\n" " 2.893835485057 0.301691972314 0.288483139662 -0.467840628709 0.135920880880\n" " 1.106150599362 -1.218290751007 -0.497581763775 -0.270577331119 0.396440765199\n" " 0.501100356736 -0.518231686854 -0.399441949193 -0.201524408230 0.551980290722\n" " 0.214446586103 -0.084224251837 0.243845988221 -0.022741809925 0.520355492616\n" " 0.074662878487 -0.194908755488 0.767604001481 0.002782169859 0.166409595366\n" "#","\n" " W DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q14\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.103253876757 0.441154908462 -0.046848871737 0.061298236069 0.516608286752 -0.857438192378 -0.104347730230 0.147146022027 0.063493654940\n" " 2.893835485057 0.301691972314 0.288483139662 0.240334881954 -0.467840628709 0.847145939975 0.135920880880 -0.154506508676 -0.017539591740\n" " 1.106150599362 -1.218290751007 -0.497581763775 -0.484396153573 -0.270577331119 -0.102821415305 0.396440765199 -0.271607294299 -0.299829989865\n" " 0.501100356736 -0.518231686854 -0.399441949193 1.821350211035 -0.201524408230 0.202413605224 0.551980290722 -0.086061740572 -0.841712144112\n" " 0.214446586103 -0.084224251837 0.243845988221 -3.376374627548 -0.022741809925 0.726346128053 0.520355492616 -0.074473115136 -0.801669560536\n" " 0.074662878487 -0.194908755488 0.767604001481 1.871608065172 0.002782169859 1.071006452855 0.166409595366 1.370657399699 0.359000011573\n" "#","\n" " Re SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.240620484285 0.518163100285 -0.250238063014 0.468480577212 -0.072782318249\n" " 2.835126642764 0.195266488444 0.421668475444 -0.390221082301 0.122612230842\n" " 1.164528911859 -1.218515127381 -0.468452769005 -0.460013931050 0.480667297031\n" " 0.530722413547 -0.526678086213 -0.480290161831 -0.325605406180 0.649752314300\n" " 0.234483312957 0.013465891784 0.546638137882 -0.033295571228 0.547928673428\n" " 0.080543361521 0.073473765653 1.175883886226 0.000112993288 0.124811170239\n" "#","\n" " Re DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q15\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.240620484285 0.518163100285 -0.250238063014 -0.143105506392 0.468480577212 -0.321600051025 -0.072782318249 0.025724531725 -0.094952415125\n" " 2.835126642764 0.195266488444 0.421668475444 0.282261176246 -0.390221082301 0.399779900733 0.122612230842 -0.054892892051 0.167119769419\n" " 1.164528911859 -1.218515127381 -0.468452769005 -0.091681345615 -0.460013931050 -0.473028481025 0.480667297031 -0.324411259630 -0.392227058286\n" " 0.530722413547 -0.526678086213 -0.480290161831 1.803552484337 -0.325605406180 0.144355698544 0.649752314300 -0.308280195070 -0.743838252325\n" " 0.234483312957 0.013465891784 0.546638137882 -3.327790605170 -0.033295571228 0.634911741065 0.547928673428 -0.127571404930 -1.130445599596\n" " 0.080543361521 0.073473765653 1.175883886226 2.036392104934 0.000112993288 0.654149241066 0.124811170239 1.436351247342 0.187517650202\n" "#","\n" " Os SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.254044521240 0.750520917538 -0.143104881416 0.300026803534 0.074118403382\n" " 2.913080457815 -0.151830818511 0.445036489078 -0.259358262119 -0.115497320573\n" " 1.267677044450 -0.946576386912 -0.597290651826 -0.221193553941 -0.384061295904\n" " 0.604328817602 -0.387028536076 -0.626533321263 -0.169922484236 -0.478648993701\n" " 0.281958732679 -0.114632827845 0.617675737134 -0.022924623249 -0.460410219053\n" " 0.105080883429 -0.043141212439 0.420830468078 0.003128164174 -0.078890551925\n" "#","\n" " Os DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q16\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.254044521240 0.750520917538 -0.143104881416 -0.535872399061 0.300026803534 -0.211083191310 0.074118403382 0.126612739775 0.055180357207\n" " 2.913080457815 -0.151830818511 0.445036489078 0.515111350010 -0.259358262119 0.229325744297 -0.115497320573 -0.133462796701 -0.050797865115\n" " 1.267677044450 -0.946576386912 -0.597290651826 -0.260044026215 -0.221193553941 -0.306853849304 -0.384061295904 -0.172895146469 -0.094606319061\n" " 0.604328817602 -0.387028536076 -0.626533321263 2.036801058213 -0.169922484236 -0.097257714947 -0.478648993701 -0.020295601352 -0.619031243983\n" " 0.281958732679 -0.114632827845 0.617675737134 -3.120177167686 -0.022924623249 0.777630448466 -0.460410219053 0.083516044344 -0.782263365247\n" " 0.105080883429 -0.043141212439 0.420830468078 2.188492676789 0.003128164174 0.996792107810 -0.078890551925 1.136520641989 -0.218817489272\n" "#","\n" " Ir SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.382588893137 0.763880845384 0.045942912052 0.377410965587 -0.045848645796\n" " 2.784159868873 -0.292040459450 0.216107018572 -0.332679361082 0.111589415592\n" " 1.210222778222 -0.909572071077 -0.662794901842 -0.436015494968 0.421660006206\n" " 0.538964109721 -0.253085528911 -0.351696141574 -0.249715223969 0.494349511683\n" " 0.221744781815 -0.072390522439 0.495615757119 -0.017455807910 0.370178722395\n" " 0.076331555777 -0.086622720340 0.741983451061 -0.000390256599 0.086694983507\n" "#","\n" " Ir DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q17\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.382588893137 0.763880845384 0.045942912052 -0.263001102796 0.377410965587 -0.244073478822 -0.045848645796 0.080634315236 0.043335746927\n" " 2.784159868873 -0.292040459450 0.216107018572 0.479096801070 -0.332679361082 0.284264073291 0.111589415592 -0.130581842872 -0.027515178683\n" " 1.210222778222 -0.909572071077 -0.662794901842 -0.247236645375 -0.436015494968 -0.355790158310 0.421660006206 -0.303249401129 -0.249112788977\n" " 0.538964109721 -0.253085528911 -0.351696141574 1.693017503277 -0.249715223969 0.296278894300 0.494349511683 -0.146179963439 -0.712777874450\n" " 0.221744781815 -0.072390522439 0.495615757119 -3.248000084180 -0.017455807910 0.597905270423 0.370178722395 -0.212963343957 -0.608411042049\n" " 0.076331555777 -0.086622720340 0.741983451061 1.914284024079 -0.000390256599 0.721347075950 0.086694983507 1.131902611500 0.702894953816\n" "#","\n" " Pt SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 2 6 2 1 1\n" " 3.630667770866 -0.159789658749 -0.051717884453 0.538256464339 -0.235370873672\n" " 3.114659085953 0.706153230701 0.409305333723 -0.272066595039 0.216340904150\n" " 1.999980602577 -0.571771619750 -0.410633416904 -0.529494089441 0.129334517594\n" " 0.885339761910 -0.081706194543 -0.389005427246 -0.778436218941 0.364806321954\n" " 0.330796251617 -0.114509254013 0.079357268588 -0.160188783181 0.322200075207\n" " 0.105770091411 -0.422769859471 0.768211167014 0.009487463222 0.101113260398\n" "#","\n" " Pt DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q18\n" " 1\n" " 2 0 3 6 3 2 2 1\n" " 3.630667770866 -0.159789658749 -0.051717884453 0.306450339788 0.538256464339 -0.065391881766 -0.235370873672 0.116835554957 0.047374313928\n" " 3.114659085953 0.706153230701 0.409305333723 -0.004265278861 -0.272066595039 0.095535920231 0.216340904150 -0.069230936472 -0.086321928611\n" " 1.999980602577 -0.571771619750 -0.410633416904 -0.325808096224 -0.529494089441 -0.142896827794 0.129334517594 -0.143174497742 -0.045559578405\n" " 0.885339761910 -0.081706194543 -0.389005427246 2.249070845144 -0.778436218941 -0.282985948216 0.364806321954 -0.296713078924 -0.269438595683\n" " 0.330796251617 -0.114509254013 0.079357268588 -3.545365684090 -0.160188783181 0.355152674354 0.322200075207 -0.091262909891 -0.826716259834\n" " 0.105770091411 -0.422769859471 0.768211167014 1.739828578507 0.009487463222 1.072406293162 0.101113260398 0.921513114926 0.798799196421\n" "#","\n" " Au SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 2 5 1 1 1\n" " 2.950008433436 0.043352289298 0.027243676590 -0.013694544955\n" " 1.563056721867 -0.007387713167 0.010297865642 0.393434199831\n" " 0.666663784909 -0.527617143816 -0.144512389068 0.499419616649\n" " 0.251083343925 0.504357857018 0.133984006194 0.342848487787\n" " 0.081714167287 0.754614789542 0.955899672482 0.072643323717\n" "#","\n" " Au DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q11\n" " 1\n" " 2 0 3 5 2 2 2 1\n" " 2.950008433436 0.043352289298 0.131563039441 0.027243676590 0.028420586704 -0.013694544955 -0.004579045037 -0.004506137994\n" " 1.563056721867 -0.007387713167 -0.273187489232 0.010297865642 -0.293415713813 0.393434199831 -0.180469448036 -0.160912550000\n" " 0.666663784909 -0.527617143816 1.676640340285 -0.144512389068 0.816838276799 0.499419616649 -0.108498062902 -0.120663084497\n" " 0.251083343925 0.504357857018 -2.954078498545 0.133984006194 -1.870657920681 0.342848487787 -0.166963798876 -0.308972159083\n" " 0.081714167287 0.754614789542 1.757201273778 0.955899672482 1.065823745725 0.072643323717 1.125505465534 1.113838074084\n" "#","\n" " Hg SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.031517109734 -0.000773276442 -0.035104188311 -0.051519431610\n" " 1.999949750084 -0.127545432316 0.112459425109 0.245745995267\n" " 0.968505371291 0.467348942725 -0.270433349168 0.344642941759\n" " 0.443215909283 0.041435964338 0.012885629971 0.274191104401\n" " 0.197907885691 -0.613050351354 0.562923305773 0.133463525187\n" " 0.078429867482 -0.478543703910 0.626349238816 0.016313913539\n" "#","\n" " Hg DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q12\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.031517109734 -0.000773276442 0.142001377433 -0.035104188311 -0.090931506623 -0.051519431610 0.008323885654 0.001599032324\n" " 1.999949750084 -0.127545432316 -0.280482979589 0.112459425109 0.162444892253 0.245745995267 -0.053441689967 0.043884187965\n" " 0.968505371291 0.467348942725 0.098625459472 -0.270433349168 0.029548333852 0.344642941759 -0.165877240510 -0.177253996973\n" " 0.443215909283 0.041435964338 -1.223462696050 0.012885629971 0.581078127814 0.274191104401 0.080323576326 -0.478266521156\n" " 0.197907885691 -0.613050351354 3.053372335969 0.562923305773 -2.004214126133 0.133463525187 -0.144762593434 -0.613795411840\n" " 0.078429867482 -0.478543703910 -2.173525587081 0.626349238816 1.450865733492 0.016313913539 1.183407428870 0.788269658688\n" "#","\n" " Tl SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 2 6 1 1 1\n" " 3.381004006201 -0.012728024519 -0.016321000960 -0.053146025142\n" " 1.995904628767 -0.125438487741 0.089582033082 0.335647454889\n" " 0.933877613856 0.654386378507 -0.217643347249 0.449765059425\n" " 0.399454518437 -0.261927153680 0.120847730197 0.311198161018\n" " 0.159704350468 -0.832380709805 0.521905432003 0.079298892465\n" " 0.061648317122 -0.296535560045 0.504618443314 0.000172821470\n" "#","\n" " Tl DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q13\n" " 1\n" " 2 0 3 6 2 2 2 1\n" " 3.381004006201 -0.012728024519 -0.061982942976 -0.016321000960 0.062772243005 -0.053146025142 0.033620187298 -0.003552704832\n" " 1.995904628767 -0.125438487741 0.232903517659 0.089582033082 -0.085940512856 0.335647454889 -0.143867909630 -0.007253615821\n" " 0.933877613856 0.654386378507 0.293870645694 -0.217643347249 -0.043458296138 0.449765059425 -0.230549240854 0.070845906277\n" " 0.399454518437 -0.261927153680 0.253865535097 0.120847730197 -0.072921411535 0.311198161018 0.089679875757 0.337468890558\n" " 0.159704350468 -0.832380709805 -1.750489239268 0.521905432003 1.361409731000 0.079298892465 0.093223456445 0.055414449864\n" " 0.061648317122 -0.296535560045 1.812842163522 0.504618443314 -1.338528342478 0.000172821470 0.951780949164 1.007671535938\n" "#","\n" " Pb SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 1 5 1 1\n" " 1.933597551820 -0.128503343993 0.015280202292\n" " 0.981424884833 0.574812594694 -0.134233849467\n" " 0.222223023415 -0.960047108285 0.502933226160\n" " 0.077758928722 -0.206626081460 0.243024445565\n" " 0.073967768161 -0.082212261416 0.131891977459\n" "#","\n" " Pb DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q4\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.933597551820 -0.128503343993 -0.101796893236 0.015280202292 0.005350345202 0.014172606616\n" " 0.981424884833 0.574812594694 0.383708445593 -0.134233849467 0.075210282932 -0.095091389111\n" " 0.222223023415 -0.960047108285 -0.673075164196 0.502933226160 -0.366898195819 0.404788663351\n" " 0.077758928722 -0.206626081460 -0.887877388873 0.243024445565 -1.159690406979 -0.640460683863\n" " 0.073967768161 -0.082212261416 1.917996276605 0.131891977459 1.651684865211 1.791004946570\n" "#","\n" " Bi SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 1 5 1 1\n" " 1.666928293168 -0.433606016760 -0.092396269342\n" " 1.317941720436 0.723433454454 0.184381669404\n" " 0.222221383065 -0.715303457579 -0.507231634301\n" " 0.074524438950 -0.308379410009 -0.421377693158\n" " 0.066725427306 0.159245921554 0.106621540317\n" "#","\n" " Bi DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q5\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.666928293168 -0.433606016760 -0.100663867810 -0.092396269342 -0.108190299502 -0.195956091275\n" " 1.317941720436 0.723433454454 0.259612627134 0.184381669404 0.210739707604 0.351618767590\n" " 0.222221383065 -0.715303457579 -0.216478402471 -0.507231634301 -0.568218339722 -1.047717462114\n" " 0.074524438950 -0.308379410009 -1.423645113253 -0.421377693158 -0.757828317889 -1.887710553530\n" " 0.066725427306 0.159245921554 2.308274018558 0.106621540317 1.788226073856 0.443921215549\n" "#","\n" " Po SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 1 5 1 1\n" " 1.757750856683 -0.224044332601 -0.053062093035\n" " 1.245376491921 0.572355818018 0.195354776138\n" " 0.251860493510 -0.863597717984 -0.839838825812\n" " 0.087993894799 -0.286569207007 -0.307002699297\n" " 0.087955184861 0.098257897619 -0.203109314513\n" "#","\n" " Po DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q6\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.757750856683 -0.224044332601 -0.135012487173 -0.053062093035 -0.021231103721 -0.096055785490\n" " 1.245376491921 0.572355818018 0.332752073309 0.195354776138 0.081960076684 0.254315976726\n" " 0.251860493510 -0.863597717984 -0.473417673148 -0.839838825812 -0.313733392241 -0.969368508973\n" " 0.087993894799 -0.286569207007 -1.276188389904 -0.307002699297 -0.822258321101 -1.683509583898\n" " 0.087955184861 0.098257897619 1.876429081086 -0.203109314513 1.692783549882 0.775369779849\n" "#","\n" " At SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 1 5 1 1\n" " 1.796641038213 -0.363075778132 -0.119884096868\n" " 1.378396886358 0.702535890722 0.281487205121\n" " 0.332155278101 -0.571059806679 -0.483364756316\n" " 0.150379247357 -0.338513795954 -0.533191703362\n" " 0.059913588731 -0.008356077866 -0.164154832840\n" "#","\n" " At DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q7\n" " 1\n" " 2 0 2 5 2 2 1\n" " 1.796641038213 -0.363075778132 -1.100370829977 -0.119884096868 -0.250626278132 -0.464474892145\n" " 1.378396886358 0.702535890722 -1.057174398279 0.281487205121 0.561700422906 0.955620810236\n" " 0.332155278101 -0.571059806679 0.447996190508 -0.483364756316 -1.242559252539 -1.899306426919\n" " 0.150379247357 -0.338513795954 -1.273313528437 -0.533191703362 0.441233871549 -1.551331120159\n" " 0.059913588731 -0.008356077866 0.740426167051 -0.164154832840 0.937688301921 -0.982495907237\n" "#","\n" " Rn SZV-MOLOPT-SR-GTH SZV-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 1 5 1 1\n" " 2.000005663002 -0.442608171766 -0.136991011529\n" " 1.522474413760 0.852282073224 0.312749617939\n" " 0.319589540831 -0.907143180970 -0.775828387512\n" " 0.124013091191 -0.222277238353 -0.204098521582\n" " 0.113270499507 -0.001928995329 -0.288853228632\n" "#","\n" " Rn DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q8\n" " 1\n" " 2 0 2 5 2 2 1\n" " 2.000005663002 -0.442608171766 -0.511614938408 -0.136991011529 -0.063901785194 -0.186151960320\n" " 1.522474413760 0.852282073224 -0.536614916033 0.312749617939 0.154086890384 0.369270825531\n" " 0.319589540831 -0.907143180970 -0.390801321298 -0.775828387512 -0.485164655715 -1.000515166114\n" " 0.124013091191 -0.222277238353 -1.541429072147 -0.204098521582 -1.116124046015 -1.713700191874\n" " 0.113270499507 -0.001928995329 1.908801729636 -0.288853228632 1.721625954410 0.927072017361\n" "#","\n" " U DZVP-MOLOPT-GTH-q14\n" " 1\n" " 6 0 4 7 3 3 2 2 1 6s 7s 8s 6p 7p 8p 6d 7d 5f 6f 5g\n" " 2.970404051267 -8.613286991729 -4.847218644580 -0.094448304725 2.089613520508 -1.388690863894 -0.339032038879 -0.517917661294 -0.108712988266 0.630053678940 -0.328083139683 0.193812038517\n" " 2.837409896206 9.359917338956 5.295013384216 0.080503840695 -2.330831226482 1.591366466533 -0.297639904371 0.575541916820 0.134339314945 0.077256524471 -0.136357555344 -0.096937116722\n" " 1.029287870466 -0.223393808655 -0.207730929575 0.170499084947 0.118073808224 -0.298526476737 -0.144235936067 -0.007051323571 -0.072924564853 0.798224117501 -0.044975575325 0.942045397086\n" " 0.447156512122 -1.138927348908 -1.085942892963 -0.128005768148 0.875430068610 -0.558080313712 0.020421937017 -0.328938941888 -0.022899936943 0.416776715909 0.084347995405 1.112468197028\n" " 0.224386023364 -0.475585548696 -0.147870903958 0.028006926300 0.257221846022 -0.186869197027 -0.068935950988 -0.436497768592 0.047774203203 0.269342903301 0.107901532632 0.049712666496\n" " 0.082082026090 -0.038412518166 1.206363318489 0.959404540206 -0.004940369038 1.337846156620 1.078056470699 -0.170128075474 1.023142281896 0.095618485831 0.591613653295 0.071150976147\n" " 0.048989649967 -0.161438730593 0.204614845616 0.064250249847 -0.040926507048 0.070410902066 0.151425801177 0.019870929957 0.031382006308 -0.029027116072 0.159595534158 -0.000586301554\n" "#"}; Atomes-GNU-1.1.14/src/calc/cp2k/cp2k_pot.c000066400000000000000000004614701457665371200177260ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cp2k_pot.c * @short CP2K potentials, as distributed with CP2K v9.1 * @author Sébastien Le Roux */ /* * This file: 'cp2k_pot.c' * * Contains: * - CP2K potentials, as distributed with CP2K v9.1 This file contains 3 tables: pot_elem -> the list of chemical elements pot_keys -> the list of keywords cp2k_pot -> finally the complete potential */ #include "global.h" char * pot_elem[421] = {"H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Cu", "Zn", "Zn", "Ga", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr", "Mo", "Ru", "Rh", "Pd", "Ag", "Ag", "In", "In", "Sb", "Te", "I", "Xe", "Cs", "Ba", "Ba", "Ce", "Gd", "W", "Au", "Au", "Pb", "Bi", "Bi", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "Zr", "Ru", "Te", "Cs", "Cs", "Au", "H", "C", "N", "O", "F", "P", "Ar", "H", "C", "N", "O", "H", "He", "Li", "Li", "Be", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Na", "Mg", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "K", "Ca", "Ca", "Sc", "Sc", "Ti", "Ti", "V", "V", "Cr", "Cr", "Mn", "Mn", "Fe", "Fe", "Co", "Co", "Ni", "Ni", "Cu", "Cu", "Cu", "Zn", "Zn", "Zn", "Ga", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Rb", "Sr", "Sr", "Y", "Y", "Zr", "Zr", "Nb", "Nb", "Mo", "Mo", "Tc", "Tc", "Ru", "Ru", "Rh", "Rh", "Pd", "Pd", "Ag", "Ag", "Ag", "Cd", "Cd", "In", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Cs", "Ba", "Ba", "La", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "Ta", "W", "W", "Re", "Re", "Os", "Os", "Ir", "Ir", "Pt", "Pt", "Au", "Au", "Au", "Hg", "Hg", "Tl", "Tl", "Pb", "Bi", "Po", "At", "Rn", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Cu", "Zn", "Zn", "Ga", "Ga", "Ge", "As", "Se", "Br", "Kr", "Rb", "Sr", "Y", "Zr", "Nb", "Mo", "Tc", "Ru", "Ru", "Rh", "Rh", "Pd", "Pd", "Ag", "Ag", "Cd", "In", "In", "Sn", "Sb", "Te", "I", "Xe", "Cs", "Ba", "La", "Ce", "Ce", "Pr", "Nd", "Pm", "Sm", "Eu", "Gd", "Tb", "Dy", "Ho", "Er", "Tm", "Yb", "Lu", "Hf", "Ta", "Ta", "W", "W", "Re", "Re", "Os", "Os", "Ir", "Ir", "Pt", "Pt", "Au", "Au", "Hg", "Tl", "Tl", "Pb", "Pb", "Bi", "Bi", "Po", "At", "Rn", "U", "B", "H", "B", "C", "N", "O", "F", "P", "S", "Cl", "H", "C", "N", "O", "Al", "B", "C", "Cl", "F", "H", "N", "O", "P", "S", "Si", "H", "He", "Li", "Be", "B", "C", "N", "O", "F", "Ne", "Na", "Mg", "Al", "Si", "P", "S", "Cl", "Ar", "K", "Ca", "Sc", "Ti", "V", "Cr", "Mn", "Fe", "Co", "Ni", "Cu", "Zn", "Ga", "Ge", "As", "Se", "Br", "Kr", "I"}; char * pot_keys[421] = {"GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q2", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q19", "GTH-BLYP", "GTH-BLYP-q20", "GTH-BLYP", "GTH-BLYP-q3", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q9", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q19", "GTH-BLYP", "GTH-BLYP-q3", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q8", "GTH-BLYP-q9", "GTH-BLYP", "GTH-BLYP-q2", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP", "GTH-BLYP-q19", "GTH-BLYP-q4", "GTH-BLYP-q15", "GTH-BLYP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP-q1", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP", "GTH-BP-q1", "GTH-BP", "GTH-BP-q11", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH120", "GTH-HCTH407", "GTH-HCTH407", "GTH-HCTH407", "GTH-HCTH407", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA-q4", "GTH-LDA", "GTH-LDA-q5", "GTH-LDA", "GTH-LDA-q6", "GTH-LDA", "GTH-LDA-q7", "GTH-LDA", "GTH-LDA-q8", "GTH-LDA", "GTH-LDA-q9", "GTH-LDA-q10", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q19", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA-q20", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA-q4", "GTH-LDA", "GTH-LDA-q5", "GTH-LDA", "GTH-LDA-q6", "GTH-LDA", "GTH-LDA-q7", "GTH-LDA", "GTH-LDA-q8", "GTH-LDA", "GTH-LDA-q9", "GTH-LDA-q10", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q19", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA-q5", "GTH-LDA", "GTH-LDA-q6", "GTH-LDA", "GTH-LDA-q7", "GTH-LDA", "GTH-LDA-q8", "GTH-LDA", "GTH-LDA-q9", "GTH-LDA-q10", "GTH-LDA", "GTH-LDA-q1", "GTH-LDA", "GTH-LDA-q19", "GTH-LDA", "GTH-LDA-q2", "GTH-LDA", "GTH-LDA-q3", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-LDA", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q2", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q19", "GTH-PBE", "GTH-PBE-q20", "GTH-PBE", "GTH-PBE-q3", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q8", "GTH-PBE", "GTH-PBE-q9", "GTH-PBE-q10", "GTH-PBE", "GTH-PBE", "GTH-PBE-q19", "GTH-PBE", "GTH-PBE", "GTH-PBE-q3", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q30", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q5", "GTH-PBE", "GTH-PBE-q6", "GTH-PBE", "GTH-PBE-q7", "GTH-PBE", "GTH-PBE-q8", "GTH-PBE", "GTH-PBE-q9", "GTH-PBE-q10", "GTH-PBE", "GTH-PBE", "GTH-PBE-q19", "GTH-PBE", "GTH-PBE", "GTH-PBE-q3", "GTH-PBE-q14", "GTH-PBE", "GTH-PBE-q15", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE", "GTH-PBE-q14", "GTH-PBESol", "GTH-OLYP", "GTH-OLYP-q3", "GTH-OLYP-q4", "GTH-OLYP-q5", "GTH-OLYP", "GTH-OLYP-q7", "GTH-OLYP-q5", "GTH-OLYP-q6", "GTH-OLYP-q7", "GTH-HF", "GTH-HF", "GTH-HF", "GTH-HF", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "GTH-NLCC-PBE", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL", "ALL"}; char * cp2k_pot[421] = {"\n" "H GTH-BLYP-q1 GTH-BLYP\n" " 1\n" " 0.20000000 2 -4.19596147 0.73049821\n" " 0\n" "#","\n" "He GTH-BLYP-q2 GTH-BLYP\n" " 2\n" " 0.20000000 2 -9.14737128 1.71197792\n" " 0\n" "#","\n" "Li GTH-BLYP-q3 GTH-BLYP\n" " 3\n" " 0.40000000 4 -14.11679756 9.67724760 -1.79886461 0.08624957\n" " 0\n" "#","\n" "Be GTH-BLYP-q4 GTH-BLYP\n" " 4\n" " 0.32500000 4 -24.08977105 17.30275720 -3.34561015 0.16601474\n" " 0\n" "#","\n" "B GTH-BLYP-q3 GTH-BLYP\n" " 2 1\n" " 0.42407181 2 -6.10890761 0.98586957\n" " 2\n" " 0.37086003 1 6.34339578\n" " 0.34936716 0\n" "#","\n" "C GTH-BLYP-q4 GTH-BLYP\n" " 2 2\n" " 0.33806609 2 -9.13626871 1.42925956\n" " 2\n" " 0.30232223 1 9.66551228\n" " 0.28637912 0\n" "#","\n" "N GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.28287094 2 -12.73646720 1.95107926\n" " 2\n" " 0.25523449 1 13.67893172\n" " 0.24313253 0\n" "#","\n" "O GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.24342026 2 -16.99189235 2.56614206\n" " 2\n" " 0.22083140 1 18.38885102\n" " 0.21720070 0\n" "#","\n" "F GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.21384014 2 -21.90241518 3.27597572\n" " 2\n" " 0.19459028 1 23.79658295\n" " 0.18786326 0\n" "#","\n" "Ne GTH-BLYP-q8 GTH-BLYP\n" " 2 6\n" " 0.19000000 2 -28.61959769 4.15549516\n" " 2\n" " 0.17823784 2 27.95784886 0.83365601\n" " -1.07624528\n" " 0.15276372 1 0.33116999\n" "#","\n" "Na GTH-BLYP-q9 GTH-BLYP\n" " 3 6\n" " 0.23396502 2 -2.68948346 -0.50947770\n" " 2\n" " 0.14977690 1 32.85715860\n" " 0.12319901 1 -13.99900802\n" "#","\n" "Mg GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.20098403 2 -19.33029317 2.86005812\n" " 2\n" " 0.14107967 1 40.67473040\n" " 0.10456134 1 -10.73617094\n" "#","\n" "Mg GTH-BLYP-q2\n" " 2\n" " 0.61697665 1 -3.24611921\n" " 2\n" " 0.60092845 2 3.64729616 -0.76401307\n" " 0.98633664\n" " 0.70217751 1 0.94952736\n" "#","\n" "Al GTH-BLYP-q3 GTH-BLYP\n" " 2 1\n" " 0.45000000 1 -7.66683204\n" " 2\n" " 0.49773601 2 6.46303151 -1.58386957\n" " 2.04476682\n" " 0.56545785 1 1.81826715\n" "#","\n" "Si GTH-BLYP-q4 GTH-BLYP\n" " 2 2\n" " 0.44000000 1 -6.25958674\n" " 2\n" " 0.44465247 2 8.31460936 -2.33277947\n" " 3.01160535\n" " 0.50279207 1 2.33241791\n" "#","\n" "P GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.43000000 1 -5.92953335\n" " 2\n" " 0.40286945 2 10.41483915 -3.13168757\n" " 4.04299126\n" " 0.45245811 1 2.95358263\n" "#","\n" "S GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.42000000 1 -5.98880045\n" " 2\n" " 0.36973266 2 12.55648450 -3.91290459\n" " 5.05153810\n" " 0.41287571 1 3.58772114\n" "#","\n" "Cl GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.41000000 1 -6.35705212\n" " 2\n" " 0.34311864 2 14.68134781 -4.64034312\n" " 5.99065720\n" " 0.38113517 1 4.22292428\n" "#","\n" "Ar GTH-BLYP-q8 GTH-BLYP\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.32154985 2 16.80099893 -5.32871056\n" " 6.87933576\n" " 0.35544413 1 4.87719604\n" "#","\n" "K GTH-BLYP-q9 GTH-BLYP\n" " 3 6\n" " 0.40000000 2 -2.88013377 -1.21143500\n" " 2\n" " 0.30634684 2 17.51002284 -5.61037883\n" " 7.24296793\n" " 0.32105825 2 6.90321066 -2.19925814\n" " 2.60219733\n" "#","\n" "Ca GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.39000000 2 -4.03561119 -1.61257448\n" " 3\n" " 0.28936507 2 20.42566030 -7.23674813\n" " 9.34260166\n" " 0.31177925 2 7.53169389 -2.08537690\n" " 2.46745122\n" " 0.69141876 1 0.05522276\n" "#","\n" "Sc GTH-BLYP-q11 GTH-BLYP\n" " 4 6 1\n" " 0.37687548 2 9.84009747 -1.16586015\n" " 3\n" " 0.35998897 2 3.30610316 2.54796421\n" " -3.28940766\n" " 0.22099375 2 -0.43488219 6.46425824\n" " -7.64861350\n" " 0.23338021 1 -10.13403863\n" "#","\n" "Ti GTH-BLYP-q12 GTH-BLYP\n" " 4 6 2\n" " 0.38000000 2 8.71144218 -0.70028677\n" " 3\n" " 0.33777078 2 2.57526386 3.69297065\n" " -4.76760461\n" " 0.24253135 2 -4.63054123 8.87087502\n" " -10.49616087\n" " 0.24331694 1 -9.40665268\n" "#","\n" "V GTH-BLYP-q13 GTH-BLYP\n" " 4 6 3\n" " 0.37500000 2 7.09567441 -0.32225919\n" " 3\n" " 0.32984260 2 1.99203993 4.73916314\n" " -6.11823331\n" " 0.24621323 2 -5.54974480 8.76420181\n" " -10.36994343\n" " 0.24115328 1 -9.44436162\n" "#","\n" "Cr GTH-BLYP-q14 GTH-BLYP\n" " 3 6 5\n" " 0.37000000 2 5.81498098 -0.67571792\n" " 3\n" " 0.31671447 2 2.60698311 5.06715750\n" " -6.54167220\n" " 0.23961307 2 -4.66668172 7.57290229\n" " -8.96037883\n" " 0.22092939 1 -11.18989241\n" "#","\n" "Mn GTH-BLYP-q15 GTH-BLYP\n" " 4 6 5\n" " 0.36500000 2 6.17870291 -0.44450988\n" " 3\n" " 0.29784355 2 1.69433567 6.39053422\n" " -8.25014420\n" " 0.24582549 2 -6.53742440 7.84591162\n" " -9.28340782\n" " 0.22244655 1 -11.66961579\n" "#","\n" "Fe GTH-BLYP-q16 GTH-BLYP\n" " 4 6 6\n" " 0.36000000 2 7.01102510 -0.22274667\n" " 3\n" " 0.27620533 2 0.61149598 7.99235733\n" " -10.31808895\n" " 0.24713005 2 -8.71055592 8.68416924\n" " -10.27524761\n" " 0.22353398 1 -12.41150401\n" "#","\n" "Co GTH-BLYP-q17 GTH-BLYP\n" " 4 6 7\n" " 0.35500000 2 3.43297847 0.61491331\n" " 3\n" " 0.27555403 2 0.19362864 9.18128009\n" " -11.85298162\n" " 0.24312795 2 -8.92204873 9.23263048\n" " -10.92419570\n" " 0.22362456 1 -11.75878279\n" "#","\n" "Ni GTH-BLYP-q18 GTH-BLYP\n" " 4 6 8\n" " 0.35000000 2 4.07602942 0.23312841\n" " 3\n" " 0.25714683 2 0.09878517 10.14864210\n" " -13.10184061\n" " 0.24975271 2 -8.34861501 7.26677120\n" " -8.59815964\n" " 0.21247761 1 -13.67293293\n" "#","\n" "Cu GTH-BLYP-q11 GTH-BLYP\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.43078178 3 10.29852604 -6.05837033 1.70054574\n" " 10.58726032 -4.39079021\n" " 3.48508169\n" " 0.55080544 2 2.74458701 -0.86295510\n" " 1.02106225\n" " 0.26558610 1 -12.66158247\n" "#","\n" "Cu GTH-BLYP-q19\n" " 3 6 10\n" " 0.34500000 2 0.00729001 1.26270041\n" " 3\n" " 0.25025136 2 0.78207556 10.69795592\n" " -13.81100171\n" " 0.22145058 2 -13.10305990 14.86802590\n" " -17.59208548\n" " 0.21548515 1 -12.45211713\n" "#","\n" "Zn GTH-BLYP-q12 GTH-BLYP\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.39855016 3 11.95945993 -8.66522085 2.80807710\n" " 15.75408976 -7.25042390\n" " 5.75484556\n" " 0.54556247 2 2.51050004 -0.44032483\n" " 0.52099937\n" " 0.25168465 1 -14.32309848\n" "#","\n" "Zn GTH-BLYP-q20\n" " 4 6 10\n" " 0.34000000 2 0.69029187 1.23803712\n" " 3\n" " 0.24511603 2 -1.58948215 12.87573398\n" " -16.62250109\n" " 0.23151219 2 -10.91449266 9.54377070\n" " -11.29234178\n" " 0.20860634 1 -14.24182139\n" "#","\n" "Ga GTH-BLYP-q13 GTH-BLYP\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.39467346 3 12.48450375 -7.17987436 1.92607131\n" " 12.40193316 -4.97309473\n" " 3.94727157\n" " 0.58027448 2 1.59145844 0.32153951\n" " -0.38045068\n" " 0.23867979 1 -16.11979876\n" "#","\n" "Ga GTH-BLYP-q3\n" " 2 1\n" " 0.56000000 0\n" " 3\n" " 0.57532960 3 2.06609505 1.21904266 -0.87326380\n" " -2.99414098 2.25475743\n" " -1.78965823\n" " 0.67710486 2 0.14524752 0.72041368\n" " -0.85240496\n" " 0.94154174 1 0.10030959\n" "#","\n" "Ge GTH-BLYP-q4 GTH-BLYP\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.42737427 3 7.55651469 -0.07090242 -1.72596317\n" " -2.71574467 4.45641774\n" " -3.53717192\n" " 0.57489897 2 0.80056266 0.71307408\n" " -0.84372063\n" " 0.78547258 1 0.21870790\n" "#","\n" "As GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45698284 3 5.57976394 0.11777254 -0.99243898\n" " -1.76624582 2.56246643\n" " -2.03389468\n" " 0.55494716 2 1.00097684 0.68325082\n" " -0.80843328\n" " 0.68498074 1 0.34818137\n" "#","\n" "Se GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43367514 3 6.43369922 -0.22063995 -1.17545323\n" " -1.62702987 3.03500718\n" " -2.40896227\n" " 0.47248310 2 2.23970327 0.40191857\n" " -0.47555647\n" " 0.60911821 1 0.49494679\n" "#","\n" "Br GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.43612268 3 6.23128313 0.21889262 -1.12467641\n" " -2.11187548 2.90390201\n" " -2.30490077\n" " 0.45379296 2 2.46574310 0.49636818\n" " -0.58731075\n" " 0.53315603 1 0.74724056\n" "#","\n" "Kr GTH-BLYP-q8 GTH-BLYP\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.42362066 3 6.37382917 0.49858632 -1.41991709\n" " -2.95316749 3.66621015\n" " -2.90996409\n" " 0.43391338 2 2.63230352 0.64517712\n" " -0.76338386\n" " 0.51315369 1 0.70954468\n" "#","\n" "Rb GTH-BLYP-q9\n" " 3 6\n" " 0.49000000 2 5.75447985 -0.48374192\n" " 3\n" " 0.25518839 2 30.72215135 -12.19094908\n" " 15.73844759\n" " 0.33800292 1 4.39362252\n" " 0.58372659 1 0.18537105\n" "#","\n" "Sr GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.48000000 2 6.75494554 -1.12140847\n" " 3\n" " 0.27574829 2 20.90591056 -7.66251431\n" " 9.89226343\n" " 0.27951874 2 11.83709620 -11.14034857\n" " 13.18143819\n" " 0.53145306 1 0.32212393\n" "#","\n" "Y GTH-BLYP-q11 GTH-BLYP\n" " 4 6 1\n" " 0.47500000 2 12.12173196 -2.23590662\n" " 3\n" " 0.24768420 2 22.15257967 -7.66355161\n" " 9.89360259\n" " 0.29467778 2 5.85308697 -5.77308732\n" " 6.83080904\n" " 0.45213814 2 1.12663777 -1.27929123\n" " 1.45057990\n" "#","\n" "Zr GTH-BLYP-q12 GTH-BLYP\n" " 4 6 2\n" " 0.47000000 2 7.68287419 -1.83482397\n" " 3\n" " 0.26098833 2 22.58608773 -8.39346102\n" " 10.83591158\n" " 0.28950143 2 8.50003567 -5.29014738\n" " 6.25938680\n" " 0.57680903 2 0.04082300 0.26426022\n" " -0.29964293\n" "#","\n" "Mo GTH-BLYP-q14 GTH-BLYP\n" " 3 6 5\n" " 0.43000000 2 28.10289595 -4.36588317\n" " 3\n" " 0.34238035 2 -0.06850864 2.98011244\n" " -3.84730862\n" " 0.41442576 2 -0.15765657 -0.95307240\n" " 1.12769047\n" " 0.42539061 2 1.13742343 -2.64549690\n" " 2.99971152\n" "#","\n" "Ru GTH-BLYP-q16 GTH-BLYP\n" " 3 6 7\n" " 0.43000000 2 26.85974124 -5.05749455\n" " 3\n" " 0.33894617 2 -0.50446833 3.70095133\n" " -4.77790762\n" " 0.42823486 2 0.15024145 -1.32523126\n" " 1.56803477\n" " 0.43752832 2 1.52972881 -2.96335285\n" " 3.36012630\n" "#","\n" "Rh GTH-BLYP-q17 GTH-BLYP\n" " 3 6 8\n" " 0.42000000 2 27.21859006 -5.26666561\n" " 3\n" " 0.33775970 2 -0.37805742 3.85156484\n" " -4.97234883\n" " 0.40476998 2 -0.26519119 -0.79135076\n" " 0.93633885\n" " 0.43219447 2 1.68856873 -3.13689837\n" " 3.55690842\n" "#","\n" "Pd GTH-BLYP-q18 GTH-BLYP\n" " 2 6 10\n" " 0.41000000 2 26.65379780 -4.86862194\n" " 3\n" " 0.33643267 2 -0.66218232 4.36901475\n" " -5.64037379\n" " 0.41121734 2 -0.16335747 -0.94666822\n" " 1.12011294\n" " 0.44038158 2 1.64374463 -3.09751466\n" " 3.51225149\n" "#","\n" "Ag GTH-BLYP-q11 GTH-BLYP\n" " 1 0 10\n" " 0.57000000 1 0.27329871\n" " 3\n" " 0.53113691 3 9.45447859 -4.73986410 0.59512748\n" " 7.08711317 -1.53661256\n" " 1.21964841\n" " 0.62572123 2 3.90619533 -1.71774975\n" " 2.03246891\n" " 0.40832785 2 -2.77610164 -0.36178338\n" " 0.41022380\n" "#","\n" "Ag GTH-BLYP-q19\n" " 3 6 10\n" " 0.40000000 2 24.37631116 -4.16834876\n" " 3\n" " 0.31731325 2 0.69929536 4.25162666\n" " -5.48882642\n" " 0.41393281 2 -0.30767006 -0.44941724\n" " 0.53175765\n" " 0.45569543 2 1.75618266 -3.09368795\n" " 3.50791241\n" "#","\n" "In GTH-BLYP-q13 GTH-BLYP\n" " 2 1 10\n" " 0.53000000 1 3.57797710\n" " 3\n" " 0.47995615 3 11.20107941 -6.26219645 1.21444270\n" " 10.05975207 -3.13567758\n" " 2.48886692\n" " 0.56617182 2 4.78019859 -2.24059762\n" " 2.65111085\n" " 0.37728287 2 -4.24415179 -0.59846912\n" " 0.67860020\n" "#","\n" "In GTH-BLYP-q3\n" " 2 1\n" " 0.61000000 1 3.20683546\n" " 3\n" " 0.72668632 3 0.70288050 1.01907230 -0.54239646\n" " -2.19782459 1.40046163\n" " -1.11158196\n" " 0.85226033 2 0.01176733 0.48673996\n" " -0.57591849\n" " 1.06121328 1 0.15160282\n" "#","\n" "Sb GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.59000000 1 7.71520811\n" " 3\n" " 0.56281517 3 1.46135468 1.28119333 -0.94856576\n" " -3.19685579 2.44918625\n" " -1.94398132\n" " 0.64746318 2 0.46086693 0.43857096\n" " -0.51892416\n" " 0.85920174 1 0.31255771\n" "#","\n" "Te GTH-BLYP-q6 GTH-BLYP\n" " 2 4\n" " 0.57500000 1 8.54112001\n" " 3\n" " 0.57657850 3 1.45132840 0.97095302 -0.49085149\n" " -2.05186498 1.26737311\n" " -1.00594622\n" " 0.60434855 2 0.70106128 0.40189978\n" " -0.47553423\n" " 0.79625711 1 0.38178821\n" "#","\n" "I GTH-BLYP-q7 GTH-BLYP\n" " 2 5\n" " 0.56000000 1 13.73638610\n" " 3\n" " 0.58939001 3 0.21393489 0.88456526 -0.02067022\n" " -1.17558896 0.05337028\n" " -0.04236135\n" " 0.54232717 2 0.28721066 0.46932671\n" " -0.55531485\n" " 0.77040507 1 0.30709615\n" "#","\n" "Xe GTH-BLYP-q8\n" " 2 6\n" " 0.56000000 1 8.59949070\n" " 3\n" " 0.49592925 3 2.81672987 1.44752782 -1.40786958\n" " -4.15865041 3.63510361\n" " -2.88527404\n" " 0.48311258 1 2.11273917\n" " 0.69721940 1 0.50983839\n" "#","\n" "Cs GTH-BLYP-q9\n" " 3 6\n" " 0.54000000 2 33.07782844 -2.80842052\n" " 4\n" " 0.45607453 2 -3.56881717 2.63732767\n" " -3.40477539\n" " 0.36820141 2 -5.01061387 0.77988492\n" " -0.92277228\n" " 0.75684499 1 0.20052308\n" " 0.58463791 1 -1.70870691\n" "#","\n" "Ba GTH-BLYP-q10 GTH-BLYP\n" " 4 6\n" " 0.54000000 2 24.53545105 -2.47807384\n" " 4\n" " 0.48569784 2 0.09387924 1.15171729\n" " -1.48686063\n" " 0.39622579 2 0.84537359 -1.74106987\n" " 2.06006165\n" " 0.66014281 1 0.42755776\n" " 0.30049122 1 -19.65179380\n" "#","\n" "Ba GTH-BLYP-q2\n" " 2\n" " 1.20000000 0\n" " 3\n" " 1.03638675 3 1.42164527 -0.44534139 -0.07451309\n" " 0.45373771 0.19239197\n" " -0.15270639\n" " 1.25440147 2 0.73041014 -0.29211206\n" " 0.34563165\n" " 0.87881774 1 -0.85472852\n" "#","\n" "Ce GTH-BLYP-q12 GTH-BLYP\n" " 4 6 1 1\n" " 0.52864798 2 19.13548995 -0.59690386\n" " 4\n" " 0.52094620 2 -0.55473220 1.70057992\n" " -2.19543924\n" " 0.45984533 2 -0.92453341 1.99827739\n" " -2.36439369\n" " 0.67639660 1 0.10451755\n" " 0.30436847 1 -17.54504586\n" "#","\n" "Gd GTH-BLYP-q18 GTH-BLYP\n" " 4 6 1 7\n" " 0.52166157 2 18.16996137 -0.54313383\n" " 4\n" " 0.45763555 2 -2.89847533 3.94756205\n" " -5.09628069\n" " 0.45903313 3 -3.22259659 2.93618073 -0.30453227\n" " -3.98113568 0.72065489\n" " -0.51217326\n" " 0.48380572 1 -0.84857548\n" " 0.27560057 1 -22.19038178\n" "#","\n" "W GTH-BLYP-q14 GTH-BLYP\n" " 4 6 4\n" " 0.54000000 2 6.68380890 -0.31709158\n" " 3\n" " 0.39238521 3 -1.92936041 4.30955402 2.23540296\n" " -1.92772713 -5.77178561\n" " 4.58121281\n" " 0.39242369 2 -5.22265341 6.11414396\n" " -7.23435270\n" " 0.37281208 2 -6.46250589 7.70934709\n" " -8.74157793\n" "#","\n" "Au GTH-BLYP-q11 GTH-BLYP\n" " 1 0 10\n" " 0.59000000 1 10.81589381\n" " 3\n" " 0.52572747 2 6.71867015 -2.66620610\n" " 3.44205728\n" " 0.60526597 2 4.32132354 -4.09465015\n" " 4.84485539\n" " 0.43903160 2 -7.45153985 3.06802476\n" " -3.47881309\n" "#","\n" "Au GTH-BLYP-q19\n" " 3 6 10\n" " 0.49000000 2 9.10574107 -0.31170627\n" " 3\n" " 0.28881911 3 -5.84394846 25.76364500 -14.96878334\n" " -57.60745060 38.64923240\n" " -30.67687719\n" " 0.35793393 2 -6.87735522 7.88320706\n" " -9.32753639\n" " 0.33407191 2 -8.71118504 9.49731666\n" " -10.76894486\n" "#","\n" "Pb GTH-BLYP-q4\n" " 2 2\n" " 0.61750000 1 5.33520808\n" " 3\n" " 0.62372070 3 0.77431309 2.33644883 -1.62011026\n" " -5.65145200 4.18310671\n" " -3.32023802\n" " 0.81430558 2 0.08023553 0.61572271\n" " -0.72853293\n" " 0.95575855 1 0.39678153\n" "#","\n" "Bi GTH-BLYP-q15\n" " 2 3 10\n" " 0.51000000 1 13.61415171\n" " 3\n" " 0.47534187 2 10.01031001 -4.17527106\n" " 5.39025176\n" " 0.54300464 2 5.84572146 -3.45677684\n" " 4.09011352\n" " 0.39904006 2 -5.95513083 0.85300728\n" " -0.96721934\n" "#","\n" "Bi GTH-BLYP-q5 GTH-BLYP\n" " 2 3\n" " 0.60500000 1 8.13212850\n" " 3\n" " 0.59003694 3 0.58526544 2.28713930 -1.46002100\n" " -5.32740847 3.76975801\n" " -2.99215266\n" " 0.77185023 2 0.16538598 0.48986468\n" " -0.57961570\n" " 0.93145569 1 0.39528270\n" "#","\n" "H GTH-BP-q1 GTH-BP\n" " 1\n" " 0.20000000 2 -4.18576872 0.72693955\n" " 0\n" "#","\n" "He GTH-BP-q2 GTH-BP\n" " 2\n" " 0.20000000 2 -9.13007508 1.70547521\n" " 0\n" "#","\n" "Li GTH-BP-q3 GTH-BP\n" " 3\n" " 0.40000000 4 -14.06056862 9.58589939 -1.77248513 0.08455183\n" " 0\n" "#","\n" "Be GTH-BP-q4 GTH-BP\n" " 4\n" " 0.32500000 4 -24.05179710 17.25001598 -3.33397632 0.16556913\n" " 0\n" "#","\n" "B GTH-BP-q3 GTH-BP\n" " 2 1\n" " 0.41689069 2 -5.92229378 0.92456157\n" " 2\n" " 0.37107711 1 6.29599634\n" " 0.35853552 0\n" "#","\n" "C GTH-BP-q4 GTH-BP\n" " 2 2\n" " 0.33679692 2 -8.86848685 1.35447596\n" " 2\n" " 0.30241022 1 9.62271161\n" " 0.28961690 0\n" "#","\n" "N GTH-BP-q5 GTH-BP\n" " 2 3\n" " 0.28309178 2 -12.45088915 1.87519554\n" " 2\n" " 0.25528977 1 13.63656889\n" " 0.24443710 0\n" "#","\n" "O GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.24401839 2 -16.70590802 2.49292672\n" " 2\n" " 0.22086487 1 18.34759371\n" " 0.21290362 0\n" "#","\n" "F GTH-BP-q7 GTH-BP\n" " 2 5\n" " 0.21448854 2 -21.61832219 3.20543202\n" " 2\n" " 0.19461036 1 23.75712327\n" " 0.18640875 0\n" "#","\n" "Ne GTH-BP-q8 GTH-BP\n" " 2 6\n" " 0.19000000 2 -27.05603079 4.33563519\n" " 2\n" " 0.17609718 2 28.15075707 0.83365601\n" " -1.07624528\n" " 0.19349680 1 -0.24066336\n" "#","\n" "Na GTH-BP-q1\n" " 1\n" " 0.75473588 1 -2.13985326\n" " 2\n" " 0.72207334 2 2.08932802 -0.33891173\n" " 0.43753317\n" " 0.87531990 1 0.49722485\n" "#","\n" "Na GTH-BP-q9 GTH-BP\n" " 3 6\n" " 0.21033221 2 1.69258850 0.50357981\n" " 2\n" " 0.13173054 1 40.12933608\n" " 0.14067337 1 -12.69190352\n" "#","\n" "Mg GTH-BP-q10 GTH-BP\n" " 4 6\n" " 0.20344528 2 -19.14863290 2.82311627\n" " 2\n" " 0.14101308 1 40.61528144\n" " 0.10485644 1 -10.81236006\n" "#","\n" "Al GTH-BP-q3 GTH-BP\n" " 2 1\n" " 0.45000000 1 -7.51792352\n" " 2\n" " 0.48626591 2 6.97775636 -1.91568248\n" " 2.47313545\n" " 0.56192765 1 1.85584177\n" "#","\n" "Si GTH-BP-q4 GTH-BP\n" " 2 2\n" " 0.44000000 1 -6.31784112\n" " 2\n" " 0.43603553 2 8.90462481 -2.69406309\n" " 3.47802049\n" " 0.49841919 1 2.41937486\n" "#","\n" "P GTH-BP-q5 GTH-BP\n" " 2 3\n" " 0.43000000 1 -5.89229627\n" " 2\n" " 0.39681575 2 10.93288778 -3.45803253\n" " 4.46430080\n" " 0.44912129 1 3.03004831\n" "#","\n" "S GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.42000000 1 -6.03304243\n" " 2\n" " 0.36545997 2 13.05126503 -4.21706733\n" " 5.44421051\n" " 0.41024550 1 3.67822896\n" "#","\n" "Cl GTH-BP-q7 GTH-BP\n" " 2 5\n" " 0.41000000 1 -6.39460178\n" " 2\n" " 0.34001772 2 15.11347341 -4.90811514\n" " 6.33634940\n" " 0.37914105 1 4.30633607\n" "#","\n" "Ar GTH-BP-q8 GTH-BP\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.31922565 2 17.15805529 -5.55332249\n" " 7.16930851\n" " 0.35391145 1 4.94347383\n" "#","\n" "K GTH-BP-q9 GTH-BP\n" " 3 6\n" " 0.40000000 2 -3.20803677 -1.13958016\n" " 2\n" " 0.30531669 2 17.82113209 -5.62459155\n" " 7.26131647\n" " 0.31728644 2 7.27073764 -2.45836276\n" " 2.90877405\n" "#","\n" "Ca GTH-BP-q10 GTH-BP\n" " 4 6\n" " 0.39000000 2 -5.15066460 -1.27635919\n" " 3\n" " 0.29180561 2 20.37501847 -6.39225402\n" " 8.25236446\n" " 0.30585091 2 8.08679088 -2.35194765\n" " 2.78286199\n" " 0.69084590 1 0.05057463\n" "#","\n" "Sc GTH-BP-q11 GTH-BP\n" " 4 6 1\n" " 0.38500000 2 8.15113811 -0.54578786\n" " 3\n" " 0.36408582 2 2.63374349 3.01189542\n" " -3.88834027\n" " 0.24337293 2 -2.59643301 7.97785436\n" " -9.43952457\n" " 0.25316272 1 -8.16168667\n" "#","\n" "Ti GTH-BP-q12 GTH-BP\n" " 4 6 2\n" " 0.38000000 2 8.75240544 -0.72051287\n" " 3\n" " 0.33725619 2 2.57793688 3.67192953\n" " -4.74044064\n" " 0.24244686 2 -4.63571761 8.84700754\n" " -10.46792049\n" " 0.24327738 1 -9.40815808\n" "#","\n" "V GTH-BP-q13 GTH-BP\n" " 4 6 3\n" " 0.37500000 2 7.15179161 -0.34356487\n" " 3\n" " 0.32978741 2 1.96706044 4.72624160\n" " -6.10155167\n" " 0.24617385 2 -5.58236403 8.79691014\n" " -10.40864444\n" " 0.24115908 1 -9.44742960\n" "#","\n" "Cr GTH-BP-q14 GTH-BP\n" " 3 6 5\n" " 0.37000000 2 5.65864275 -0.68098927\n" " 3\n" " 0.31450745 2 2.82535174 5.00194988\n" " -6.45748952\n" " 0.24079099 2 -4.43722064 7.25268232\n" " -8.58148945\n" " 0.22035720 1 -11.18549799\n" "#","\n" "Mn GTH-BP-q15 GTH-BP\n" " 4 6 5\n" " 0.36500000 2 6.08697327 -0.45767880\n" " 3\n" " 0.29664936 2 1.82641604 6.37301365\n" " -8.22752524\n" " 0.24691092 2 -6.51555304 7.91051030\n" " -9.35984202\n" " 0.22235797 1 -11.61828411\n" "#","\n" "Fe GTH-BP-q16 GTH-BP\n" " 4 6 6\n" " 0.36000000 2 6.76627078 -0.22960467\n" " 3\n" " 0.27801949 2 0.64092335 7.90310889\n" " -10.20286971\n" " 0.25211093 2 -7.91342590 7.66613465\n" " -9.07069285\n" " 0.22286543 1 -12.38774903\n" "#","\n" "Co GTH-BP-q17 GTH-BP\n" " 4 6 7\n" " 0.35500000 2 3.11870813 0.60978675\n" " 3\n" " 0.27344715 2 0.60869990 9.05959793\n" " -11.69589063\n" " 0.24486485 2 -8.73194160 9.19441838\n" " -10.87898254\n" " 0.22321373 1 -11.65940289\n" "#","\n" "Ni GTH-BP-q18 GTH-BP\n" " 4 6 8\n" " 0.35000000 2 1.98092026 0.67873534\n" " 3\n" " 0.26151729 2 0.64051423 9.97129765\n" " -12.87288991\n" " 0.22299669 2 -11.03584887 12.32415881\n" " -14.58214136\n" " 0.21531615 1 -12.60737765\n" "#","\n" "Cu GTH-BP-q11 GTH-BP\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.42826021 3 9.92997278 -6.73378071 2.06123370\n" " 12.04587038 -5.32208253\n" " 4.22427205\n" " 0.56179993 2 2.52706517 -0.76026621\n" " 0.89955911\n" " 0.26481830 1 -12.79028986\n" "#","\n" "Zn GTH-BP-q12 GTH-BP\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.39853504 3 11.71430184 -8.95271466 3.10389577\n" " 16.60639177 -8.01422441\n" " 6.36109342\n" " 0.54277993 2 2.59454952 -0.56410898\n" " 0.66746275\n" " 0.25119891 1 -14.42369639\n" "#","\n" "Ga GTH-BP-q13 GTH-BP\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.39614555 3 12.22933993 -7.15254431 2.02087227\n" " 12.52084398 -5.21786976\n" " 4.14155572\n" " 0.57682875 2 1.65710194 0.27257669\n" " -0.32251709\n" " 0.23837295 1 -16.19719645\n" "#","\n" "Ge GTH-BP-q4 GTH-BP\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.42652691 3 7.46008807 -0.10148543 -1.79977798\n" " -2.79632198 4.64700676\n" " -3.68844727\n" " 0.57081829 2 0.83232240 0.67204801\n" " -0.79517793\n" " 0.80229340 1 0.20140599\n" "#","\n" "As GTH-BP-q5 GTH-BP\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45615688 3 5.51837021 0.17312741 -1.14220882\n" " -2.08130930 2.94917048\n" " -2.34083150\n" " 0.55642685 2 0.96871581 0.69251828\n" " -0.81939868\n" " 0.70085191 1 0.31310326\n" "#","\n" "Se GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43378134 3 6.42760223 -0.11666018 -1.25092543\n" " -1.88402272 3.22987558\n" " -2.56363426\n" " 0.47287696 2 2.19350862 0.46354749\n" " -0.54847679\n" " 0.61779280 1 0.45787624\n" "#","\n" "Br GTH-BP-q7 GTH-BP\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.43844329 3 6.02809057 0.36950836 -1.26583607\n" " -2.53591576 3.26837467\n" " -2.59419197\n" " 0.45265302 2 2.45444938 0.55326441\n" " -0.65463128\n" " 0.57270080 1 0.53453193\n" "#","\n" "Kr GTH-BP-q8 GTH-BP\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.42201160 3 6.43640090 0.55484448 -1.49019203\n" " -3.14009866 3.84765927\n" " -3.05398486\n" " 0.43381353 2 2.58759250 0.72129118\n" " -0.85344324\n" " 0.54760510 1 0.52878835\n" "#","\n" "Zr GTH-BP-q12 GTH-BP\n" " 4 6 2\n" " 0.47000000 2 7.71710396 -1.87349588\n" " 3\n" " 0.26012850 2 23.33316266 -8.48756302\n" " 10.95739674\n" " 0.28909449 2 8.57471103 -5.33803887\n" " 6.31605277\n" " 0.57923104 2 0.03180631 0.27415481\n" " -0.31086233\n" "#","\n" "Ru GTH-BP-q16 GTH-BP\n" " 3 6 7\n" " 0.43000000 2 14.95348689 -0.02426473\n" " 3\n" " 0.35723814 2 -1.36117090 5.92761103\n" " -7.65251293\n" " 0.36153743 2 -4.67111662 4.55280704\n" " -5.38695393\n" " 0.47093469 2 0.51873585 -2.29176040\n" " 2.59861204\n" "#","\n" "Te GTH-BP-q6 GTH-BP\n" " 2 4\n" " 0.57500000 1 8.45045608\n" " 3\n" " 0.57841719 3 1.43632249 1.01620377 -0.52198665\n" " -2.16092478 1.34776374\n" " -1.06975431\n" " 0.60416533 2 0.67900355 0.42745229\n" " -0.50576837\n" " 0.80633893 1 0.35636810\n" "#","\n" "Cs GTH-BP-q1\n" " 1\n" " 1.20000000 0\n" " 3\n" " 1.15311277 3 0.93256439 0.00814108 -0.14921814\n" " -0.25321342 0.38527959\n" " -0.30580619\n" " 1.29745832 2 0.63229903 -0.43114835\n" " 0.51014161\n" " 1.01147944 1 -0.69777439\n" "#","\n" "Cs GTH-BP-q9 GTH-BP\n" " 3 6\n" " 0.54000000 2 33.18925821 -2.80669630\n" " 4\n" " 0.44888547 2 -3.15382781 3.31288554\n" " -4.27691685\n" " 0.36087547 2 -5.24766705 3.25354824\n" " -3.84965020\n" " 0.76171895 1 0.18517971\n" " 0.33862935 1 -16.82118432\n" "#","\n" "Au GTH-BP-q11\n" " 1 0 10\n" " 0.59000000 1 10.62376865\n" " 3\n" " 0.53803750 2 6.00785520 -2.34452337\n" " 3.02676666\n" " 0.60560054 2 4.37533897 -4.26458410\n" " 5.04592396\n" " 0.43922932 2 -7.29174553 2.89836819\n" " -3.28644061\n" "#","\n" "H GTH-HCTH120-q1 GTH-HCTH120\n" " 1\n" " 0.20000000 2 -4.17956174 0.72571934\n" " 0\n" "#","\n" "C GTH-HCTH120-q4 GTH-HCTH120\n" " 2 2\n" " 0.33476327 2 -8.73799634 1.35592059\n" " 2\n" " 0.30224259 1 9.60562026\n" " 0.29150776 0\n" "#","\n" "N GTH-HCTH120-q5 GTH-HCTH120\n" " 2 3\n" " 0.28289705 2 -12.19488993 1.83989918\n" " 2\n" " 0.25526540 1 13.60420273\n" " 0.24618482 0\n" "#","\n" "O GTH-HCTH120-q6 GTH-HCTH120\n" " 2 4\n" " 0.24476117 2 -16.35853832 2.42680904\n" " 2\n" " 0.22092765 1 18.29885210\n" " 0.21259318 0\n" "#","\n" "F GTH-HCTH120-q7 GTH-HCTH120\n" " 2 5\n" " 0.21555878 2 -21.21402136 3.11524496\n" " 2\n" " 0.19472662 1 23.68789289\n" " 0.18667491 0\n" "#","\n" "P GTH-HCTH120-q5 GTH-HCTH120\n" " 2 3\n" " 0.43000000 1 -5.55967117\n" " 2\n" " 0.39982658 2 10.60103244 -3.26897992\n" " 4.22023493\n" " 0.45131904 1 2.95015425\n" "#","\n" "Ar GTH-HCTH120-q8 GTH-HCTH120\n" " 2 6\n" " 0.40000000 1 -7.01660399\n" " 2\n" " 0.31726372 2 17.43470209 -5.68655497\n" " 7.34131090\n" " 0.35199759 1 4.99753699\n" "#","\n" "H GTH-HCTH407-q1 GTH-HCTH407\n" " 1\n" " 0.20000000 2 -4.17855435 0.72595112\n" " 0\n" "#","\n" "C GTH-HCTH407-q4 GTH-HCTH407\n" " 2 2\n" " 0.33895449 2 -8.64070432 1.35762517\n" " 2\n" " 0.30236220 1 9.59681173\n" " 0.29159277 0\n" "#","\n" "N GTH-HCTH407-q5 GTH-HCTH407\n" " 2 3\n" " 0.28580927 2 -12.16723704 1.85814414\n" " 2\n" " 0.25533910 1 13.60665370\n" " 0.24645801 0\n" "#","\n" "O GTH-HCTH407-q6 GTH-HCTH407\n" " 2 4\n" " 0.24634413 2 -16.39807931 2.45634724\n" " 2\n" " 0.22101140 1 18.29754812\n" " 0.21441275 0\n" "#","\n" "H GTH-PADE-q1 GTH-LDA-q1 GTH-PADE GTH-LDA\n" " 1\n" " 0.20000000 2 -4.18023680 0.72507482\n" " 0\n" "#","\n" "He GTH-PADE-q2 GTH-LDA-q2 GTH-PADE GTH-LDA\n" " 2\n" " 0.20000000 2 -9.11202340 1.69836797\n" " 0\n" "#","\n" "Li GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.78755305 2 -1.89261247 0.28605968\n" " 2\n" " 0.66637518 1 1.85881111\n" " 1.07930561 1 -0.00589504\n" "#","\n" "Li GTH-PADE-q3 GTH-LDA-q3 GTH-PADE GTH-LDA\n" " 3\n" " 0.40000000 4 -14.03486849 9.55347627 -1.76648817 0.08436998\n" " 0\n" "#","\n" "Be GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.73900865 2 -2.59295078 0.35483893\n" " 2\n" " 0.52879656 1 3.06166591\n" " 0.65815348 1 0.09246196\n" "#","\n" "Be GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 4\n" " 0.32500000 4 -24.01504092 17.20401444 -3.32639018 0.16541943\n" " 0\n" "#","\n" "B GTH-PADE-q3 GTH-LDA-q3 GTH-PADE GTH-LDA\n" " 2 1\n" " 0.43392956 2 -5.57864173 0.80425145\n" " 2\n" " 0.37384326 1 6.23392822\n" " 0.36039317 0\n" "#","\n" "C GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.34883045 2 -8.51377110 1.22843203\n" " 2\n" " 0.30455321 1 9.52284179\n" " 0.23267730 0\n" "#","\n" "N GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.28917923 2 -12.23481988 1.76640728\n" " 2\n" " 0.25660487 1 13.55224272\n" " 0.27013369 0\n" "#","\n" "O GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.24762086 2 -16.58031797 2.39570092\n" " 2\n" " 0.22178614 1 18.26691718\n" " 0.25682890 0\n" "#","\n" "F GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.21852465 2 -21.30736112 3.07286942\n" " 2\n" " 0.19556721 1 23.58494211\n" " 0.17426832 0\n" "#","\n" "Ne GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.19000000 2 -27.69285182 4.00590585\n" " 2\n" " 0.17948804 2 28.50609828 0.41682800\n" " -1.07624528\n" " 0.21491271 1 -0.00008991\n" "#","\n" "Na GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.88550938 1 -1.23886713\n" " 2\n" " 0.66110390 2 1.84727135 -0.22540903\n" " 0.58200362\n" " 0.85711928 1 0.47113258\n" "#","\n" "Na GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.24631780 2 -7.54559253 1.12599671\n" " 2\n" " 0.14125125 1 36.55698653\n" " 0.13966840 1 -10.39208332\n" "#","\n" "Mg GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.21094954 2 -19.41900751 2.87133099\n" " 2\n" " 0.14154696 1 40.31662629\n" " 0.10546902 1 -10.89111329\n" "#","\n" "Mg GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.65181169 1 -2.86429746\n" " 2\n" " 0.55647814 2 2.97095712 -0.51508390\n" " 1.32994091\n" " 0.67756881 1 1.04988101\n" "#","\n" "Al GTH-PADE-q3 GTH-LDA-q3 GTH-PADE GTH-LDA\n" " 2 1\n" " 0.45000000 1 -8.49135116\n" " 2\n" " 0.46010427 2 5.08833953 -1.03784325\n" " 2.67969975\n" " 0.53674439 1 2.19343827\n" "#","\n" "Si GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.44000000 1 -7.33610297\n" " 2\n" " 0.42273813 2 5.90692831 -1.26189397\n" " 3.25819622\n" " 0.48427842 1 2.72701346\n" "#","\n" "P GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.43000000 1 -6.65421981\n" " 2\n" " 0.38980284 2 6.84213556 -1.49369090\n" " 3.85669332\n" " 0.44079585 1 3.28260592\n" "#","\n" "S GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.42000000 1 -6.55449184\n" " 2\n" " 0.36175665 2 7.90530250 -1.73188130\n" " 4.47169830\n" " 0.40528502 1 3.86657900\n" "#","\n" "Cl GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.41000000 1 -6.86475431\n" " 2\n" " 0.33820832 2 9.06223968 -1.96193036\n" " 5.06568240\n" " 0.37613709 1 4.46587640\n" "#","\n" "Ar GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.31738081 2 10.24948699 -2.16984522\n" " 5.60251627\n" " 0.35161921 1 4.97880101\n" "#","\n" "K GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.95000000 0\n" " 3\n" " 0.95536395 3 0.91461200 -0.11136800 -0.07324712\n" " 0.28755094 0.18912326\n" " -0.30022386\n" " 1.08641063 2 0.31546177 -0.02881726\n" " 0.06819410\n" " 0.72060608 1 -1.52951361\n" "#","\n" "K GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.40000000 2 -4.98934751 -0.75604821\n" " 2\n" " 0.29482550 2 11.23870466 -2.73733893\n" " 7.06777871\n" " 0.32235865 2 5.25670239 -0.39677748\n" " 0.93894690\n" "#","\n" "Ca GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.39000000 2 -4.92814602 -1.23285409\n" " 3\n" " 0.28190948 2 12.35233956 -2.96571964\n" " 7.65745518\n" " 0.31034528 2 5.72242348 -0.39028860\n" " 0.92359141\n" " 0.90433011 1 0.01680633\n" "#","\n" "Ca GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.80000000 0\n" " 3\n" " 0.66973721 3 1.64501442 -0.59004546 0.07221571\n" " 1.52349082 -0.18646017\n" " 0.29599634\n" " 0.94647402 2 0.58547893 -0.05338365\n" " 0.12632878\n" " 0.52654998 1 -3.03232095\n" "#","\n" "Sc GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 4 6 1\n" " 0.38500000 2 7.42503638 -0.48985155\n" " 3\n" " 0.35970653 2 6.11958455 0.99282105\n" " -2.56345293\n" " 0.24323416 2 6.37661838 2.54239924\n" " -6.01641469\n" " 0.25294463 1 -8.02089177\n" "#","\n" "Sc GTH-PADE-q3 GTH-LDA-q3\n" " 2 0 1\n" " 0.75000000 0\n" " 3\n" " 0.59707941 3 1.83576833 -0.67169514 0.34607449\n" " 1.73430939 -0.89356049\n" " 1.41848330\n" " 0.84799438 2 0.78412669 -0.10426371\n" " 0.24673297\n" " 0.45465318 1 -3.85924078\n" "#","\n" "Ti GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 2\n" " 0.38000000 2 7.54878947 -0.58837666\n" " 3\n" " 0.33423466 2 6.92573970 1.21689330\n" " -3.14200499\n" " 0.24241582 2 5.07908650 2.65559321\n" " -6.28428053\n" " 0.24294750 1 -9.12589591\n" "#","\n" "Ti GTH-PADE-q4 GTH-LDA-q4\n" " 2 0 2\n" " 0.72000000 0\n" " 3\n" " 0.52841076 3 1.86661330 -0.55779994 0.89250253\n" " 1.44023325 -2.30443161\n" " 3.65817177\n" " 0.79114554 2 0.96791577 -0.11016023\n" " 0.26068669\n" " 0.40871178 1 -4.82645635\n" "#","\n" "V GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 4 6 3\n" " 0.37500000 2 4.94129058 -0.09644336\n" " 3\n" " 0.32665112 2 7.65939048 1.50745391\n" " -3.89222925\n" " 0.24640748 2 4.25623049 2.51062024\n" " -5.94121187\n" " 0.24079150 1 -8.82851757\n" "#","\n" "V GTH-PADE-q5 GTH-LDA-q5\n" " 2 0 3\n" " 0.69000000 0\n" " 3\n" " 0.51470421 3 2.20866978 -0.73461318 0.75055919\n" " 1.89676307 -1.93793550\n" " 3.07637723\n" " 0.74350381 2 1.11575121 -0.12113126\n" " 0.28664887\n" " 0.37488959 1 -5.84163317\n" "#","\n" "Cr GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 3 6 5\n" " 0.37000000 2 5.11336166 -0.64681932\n" " 3\n" " 0.30601140 2 8.61783515 1.60252229\n" " -4.13769475\n" " 0.24108964 2 3.16158758 2.12679104\n" " -5.03290619\n" " 0.21957702 1 -11.15786828\n" "#","\n" "Cr GTH-PADE-q6 GTH-LDA-q6\n" " 1 0 5\n" " 0.66000000 0\n" " 3\n" " 0.49857767 3 2.40075556 -0.80261251 0.72025801\n" " 2.07233658 -1.85969818\n" " 2.95217934\n" " 0.71976824 2 1.14555658 -0.11757619\n" " 0.27823604\n" " 0.35434060 1 -6.61587832\n" "#","\n" "Mn GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 4 6 5\n" " 0.36500000 2 6.74868332 -0.57656900\n" " 3\n" " 0.28075266 2 9.37953150 2.15929667\n" " -5.57528002\n" " 0.25453567 2 0.37117568 1.78710271\n" " -4.22905690\n" " 0.22142210 1 -12.11538453\n" "#","\n" "Mn GTH-PADE-q7 GTH-LDA-q7\n" " 2 0 5\n" " 0.64000000 0\n" " 3\n" " 0.48124608 3 2.79903057 -0.96286281 0.62594958\n" " 2.48610107 -1.61619487\n" " 2.56562982\n" " 0.66930432 2 1.36877564 -0.13385695\n" " 0.31676337\n" " 0.32776314 1 -7.99541784\n" "#","\n" "Fe GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 4 6 6\n" " 0.36000000 2 5.39250667 -0.03006638\n" " 3\n" " 0.26926810 2 10.19372276 2.64717717\n" " -6.83498206\n" " 0.24768563 2 0.14561261 2.21217195\n" " -5.23495429\n" " 0.22302105 1 -12.02694100\n" "#","\n" "Fe GTH-PADE-q8 GTH-LDA-q8\n" " 2 0 6\n" " 0.61000000 0\n" " 3\n" " 0.45448200 3 3.01664046 -1.00040646 0.79478164\n" " 2.58303836 -2.05211737\n" " 3.25763534\n" " 0.63890282 2 1.49964199 -0.13812935\n" " 0.32687369\n" " 0.30873177 1 -9.14535371\n" "#","\n" "Co GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 4 6 7\n" " 0.35500000 2 3.41839094 0.48207820\n" " 3\n" " 0.25914047 2 11.19522589 3.03867482\n" " -7.84582466\n" " 0.25142451 2 -0.55146375 1.96043558\n" " -4.63923731\n" " 0.22166454 1 -12.07535366\n" "#","\n" "Co GTH-PADE-q9 GTH-LDA-q9\n" " 2 0 7\n" " 0.58000000 0\n" " 3\n" " 0.44045735 3 3.33497825 -1.11276628 0.75413362\n" " 2.87315017 -1.94716465\n" " 3.09102805\n" " 0.61004847 2 1.63400481 -0.15047260\n" " 0.35608316\n" " 0.29166058 1 -10.35880017\n" "#","\n" "Ni GTH-PADE-q10 GTH-LDA-q10\n" " 2 0 8\n" " 0.56000000 0\n" " 3\n" " 0.42539870 3 3.61965071 -1.19635099 0.74622158\n" " 3.08896496 -1.92673583\n" " 3.05859831\n" " 0.58408076 2 1.74222007 -0.16325873\n" " 0.38634067\n" " 0.27811348 1 -11.60842823\n" "#","\n" "Ni GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 4 6 8\n" " 0.35000000 2 3.61031072 0.44963832\n" " 3\n" " 0.24510489 2 12.16113071 3.51625420\n" " -9.07892931\n" " 0.23474136 2 -0.82062357 2.54774737\n" " -6.02907069\n" " 0.21494950 1 -13.39506212\n" "#","\n" "Cu GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.58000000 0\n" " 3\n" " 0.84328288 3 0.97578662 0.31838619 -0.03250652\n" " -0.82206962 0.08393147\n" " -0.13323707\n" " 1.08954266 2 0.02457986 0.10522210\n" " -0.24900093\n" " 1.29160225 1 -0.06529209\n" "#","\n" "Cu GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.42373431 3 3.88805001 -1.26901549 0.55872509\n" " 3.27658391 -1.44262198\n" " 2.29009139\n" " 0.57217697 2 1.75127242 -0.15844220\n" " 0.37494269\n" " 0.26614275 1 -12.67695749\n" "#","\n" "Cu GTH-PADE-q19 GTH-LDA-q19\n" " 3 6 10\n" " 0.34500000 2 0.38158866 1.38680111\n" " 3\n" " 0.25131927 2 0.03400360 11.19862293\n" " -14.45736004\n" " 0.22038147 2 -14.27160096 16.04403507\n" " -18.98355830\n" " 0.21773897 1 -12.50830997\n" "#","\n" "Zn GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.40086620 3 4.27870973 -1.40486350 0.69522313\n" " 3.62734196 -1.79505840\n" " 2.84956686\n" " 0.53961806 2 2.02388400 -0.18244417\n" " 0.43174171\n" " 0.25215059 1 -14.33836841\n" "#","\n" "Zn GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.57000000 0\n" " 3\n" " 0.64071219 3 2.08855724 0.08453570 -0.22965773\n" " -0.21827024 0.59297371\n" " -0.94131659\n" " 0.96760483 2 0.16354600 0.09596150\n" " -0.22708635\n" " 1.33035200 1 0.01048578\n" "#","\n" "Zn GTH-PADE-q20 GTH-LDA-q20\n" " 4 6 10\n" " 0.34000000 2 -0.62164886 1.27422289\n" " 3\n" " 0.23892824 2 0.30844368 12.35877752\n" " -15.95511318\n" " 0.23960139 2 -9.43744220 8.39596370\n" " -9.93423822\n" " 0.20656246 1 -14.03217427\n" "#","\n" "Ga GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.39530156 3 12.45703651 -7.08541671 1.84712738\n" " 12.15158654 -4.76926238\n" " 3.78548466\n" " 0.58085441 2 1.57898606 0.32869270\n" " -0.38891444\n" " 0.23908100 1 -16.13575103\n" "#","\n" "Ga GTH-PADE-q3 GTH-LDA-q3\n" " 2 1\n" " 0.56000000 0\n" " 3\n" " 0.61079074 3 2.36932516 0.09644314 -0.13462450\n" " -0.24901512 0.34759896\n" " -0.55179624\n" " 0.70459583 2 0.74630529 0.21683799\n" " -0.51313234\n" " 0.98257967 1 0.07543656\n" "#","\n" "Ge GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.49374254 3 3.82689099 -0.42611775 -0.32795553\n" " 1.10023129 0.84677753\n" " -1.34421765\n" " 0.60106438 2 1.36251781 0.26511216\n" " -0.62736987\n" " 0.78836851 1 0.19120485\n" "#","\n" "As GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45640025 3 4.56076106 -0.65545935 -0.33517391\n" " 1.69238876 0.86541531\n" " -1.37380421\n" " 0.55056168 2 1.81224664 0.27329186\n" " -0.64672658\n" " 0.68528272 1 0.31237276\n" "#","\n" "Se GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43253108 3 5.14513084 -0.79473967 -0.33405137\n" " 2.05200900 0.86251693\n" " -1.36920317\n" " 0.47247252 2 2.85880607 0.24960384\n" " -0.59067050\n" " 0.61342013 1 0.43482888\n" "#","\n" "Br GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.42820734 3 5.39883713 -0.70499608 -0.32301656\n" " 1.82029205 0.83402517\n" " -1.32397392\n" " 0.45532308 2 3.10882269 0.26715405\n" " -0.63220188\n" " 0.55784727 1 0.55590294\n" "#","\n" "Kr GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.41075893 3 5.91119429 -0.76196004 -0.35573234\n" " 1.96737236 0.91849694\n" " -1.45806869\n" " 0.43025641 2 3.52435692 0.29208431\n" " -0.69119763\n" " 0.51712005 1 0.62922850\n" "#","\n" "Rb GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 1.09620685 2 0.84733274 -0.74812032\n" " 3\n" " 0.95569909 3 0.88746022 -0.34976454 -0.00164684\n" " 0.90308815 0.00425212\n" " -0.00675003\n" " 1.15668058 2 0.46173448 -0.14203355\n" " 0.33611273\n" " 0.66432256 1 -1.36293829\n" "#","\n" "Rb GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.49000000 2 4.50415106 -0.74101810\n" " 3\n" " 0.28230077 2 9.53632920 -3.67415744\n" " 9.48663373\n" " 0.30188614 2 2.20959243 -2.31371511\n" " 5.47524928\n" " 0.51489528 1 0.44937574\n" "#","\n" "Sr GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.48000000 2 5.57145509 -1.07996304\n" " 3\n" " 0.27544056 2 9.99513531 -3.61608019\n" " 9.33667892\n" " 0.30224313 2 3.16912572 -1.71111259\n" " 4.04923144\n" " 0.50204544 1 0.43872821\n" "#","\n" "Sr GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 1.01000000 2 0.68474888 -0.06212465\n" " 3\n" " 0.83756431 3 1.20039504 -0.35889978 -0.07706135\n" " 0.92667525 0.19897155\n" " -0.31585755\n" " 1.17417825 2 0.43998339 -0.00771915\n" " 0.01826685\n" " 0.74317548 1 -1.38699026\n" "#","\n" "Y GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 4 6 1\n" " 0.47500000 2 6.89262113 -1.44841137\n" " 3\n" " 0.25929613 2 11.06849407 -4.05874563\n" " 10.47963616\n" " 0.28851147 2 3.01907548 -1.80967899\n" " 4.28248210\n" " 0.50364209 2 0.33991901 -0.00795600\n" " 0.01804251\n" "#","\n" "Y GTH-PADE-q3 GTH-LDA-q3\n" " 2 0 1\n" " 0.90000000 1 -0.34389132\n" " 3\n" " 0.78245699 3 1.52065466 -0.57489340 -0.04611453\n" " 1.48436836 0.11906721\n" " -0.18901334\n" " 0.94986375 2 0.78095000 -0.15582064\n" " 0.36873894\n" " 0.65385060 2 -1.25692979 0.03323415\n" " -0.07536797\n" "#","\n" "Zr GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 2\n" " 0.47000000 2 6.34261837 -1.73217100\n" " 3\n" " 0.26250960 2 11.10177456 -3.71411720\n" " 9.58980939\n" " 0.28881376 2 3.44681955 -1.78708731\n" " 4.22902044\n" " 0.58825239 2 0.33463695 0.08621617\n" " -0.19551990\n" "#","\n" "Zr GTH-PADE-q4 GTH-LDA-q4\n" " 2 0 2\n" " 0.75000000 1 -0.78261098\n" " 3\n" " 0.64999821 3 1.73987747 -0.92494916 0.29407499\n" " 2.38820846 -0.75929835\n" " 1.20534876\n" " 0.87440769 2 1.01829381 -0.22321509\n" " 0.52822332\n" " 0.63066761 2 -1.17391057 -0.09356197\n" " 0.21217861\n" "#","\n" "Nb GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 3 6 4\n" " 0.46000000 2 13.50539360 0.75243372\n" " 3\n" " 0.39370802 2 3.22202457 1.78131738\n" " -4.59934171\n" " 0.40362557 2 -0.82203677 0.94968536\n" " -2.24736575\n" " 0.51364405 2 -1.48984771 -0.36326930\n" " 0.82381733\n" "#","\n" "Nb GTH-PADE-q5 GTH-LDA-q5\n" " 1 0 4\n" " 0.72400000 1 4.02105754\n" " 3\n" " 0.69970828 2 1.53265135 -0.55316427\n" " 1.42826399\n" " 0.84667164 2 0.60967518 -0.25218878\n" " 0.59678759\n" " 0.51607226 2 -2.69682993 0.74741000\n" " -1.69496657\n" "#","\n" "Mo GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 3 6 5\n" " 0.43000000 2 16.23745228 1.49653613\n" " 3\n" " 0.37625527 2 3.36242551 2.04852792\n" " -5.28927635\n" " 0.36173435 2 -0.37957075 1.71892268\n" " -4.06771350\n" " 0.52582812 2 -1.54321130 -0.47376044\n" " 1.07438769\n" "#","\n" "Mo GTH-PADE-q6 GTH-LDA-q6\n" " 1 0 5\n" " 0.69900000 1 7.99586821\n" " 3\n" " 0.67812595 2 1.28960728 -0.38656751\n" " 0.99811301\n" " 0.80077140 2 0.30141226 -0.31338933\n" " 0.74161451\n" " 0.45338393 2 -2.80970771 3.00775463\n" " -6.82094635\n" "#","\n" "Tc GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 3 6 6\n" " 0.43000001 2 14.91001129 1.04638147\n" " 3\n" " 0.36972111 2 3.91740844 2.04044213\n" " -5.26839892\n" " 0.35777235 2 -0.27000007 1.57949660\n" " -3.73777116\n" " 0.51048733 2 -1.58670910 -0.49930056\n" " 1.13230724\n" "#","\n" "Tc GTH-PADE-q7 GTH-LDA-q7\n" " 1 0 6\n" " 0.67300000 1 13.31538067\n" " 3\n" " 0.67761188 2 0.81921767 -0.13495786\n" " 0.34845968\n" " 0.78427538 2 0.02867266 -0.27820911\n" " 0.65836292\n" " 0.51988975 2 -5.98422427 -0.31829379\n" " 0.72182246\n" "#","\n" "Ru GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 3 6 7\n" " 0.43000000 2 13.58257130 0.59622675\n" " 3\n" " 0.36408374 2 4.48063220 2.04055059\n" " -5.26867898\n" " 0.36405317 2 -0.32037214 1.29296495\n" " -3.05971353\n" " 0.49585036 2 -1.59787017 -0.51393501\n" " 1.16549505\n" "#","\n" "Ru GTH-PADE-q8 GTH-LDA-q8\n" " 1 0 7\n" " 0.64721429 1 8.68772333\n" " 3\n" " 0.62565612 2 1.63786602 -0.51484914\n" " 1.32933477\n" " 0.74642487 2 0.63901157 -0.27483407\n" " 0.65037612\n" " 0.44035802 2 -4.88336495 1.35098513\n" " -3.06374629\n" "#","\n" "Rh GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 3 6 8\n" " 0.42000000 2 15.22501231 0.41591145\n" " 3\n" " 0.35005185 2 4.71529244 2.24847003\n" " -5.80552464\n" " 0.35025339 2 -0.50469386 1.42536937\n" " -3.37303956\n" " 0.49694980 2 -1.68559431 -0.61192127\n" " 1.38770701\n" "#","\n" "Rh GTH-PADE-q9 GTH-LDA-q9\n" " 1 0 8\n" " 0.62142857 1 5.39796233\n" " 3\n" " 0.59807881 2 2.24211131 -0.83330981\n" " 2.15159669\n" " 0.70958567 2 1.15527830 -0.29785195\n" " 0.70484635\n" " 0.36920687 2 -1.05305819 4.81701344\n" " -10.92395969\n" "#","\n" "Pd GTH-PADE-q10 GTH-LDA-q10\n" " 0 0 10\n" " 0.59600000 1 5.20966476\n" " 3\n" " 0.58220422 2 2.41107608 -0.89811395\n" " 2.31892024\n" " 0.68878713 2 1.22725330 -0.32032214\n" " 0.75802053\n" " 0.44283523 2 -4.37713124 -0.18223540\n" " 0.41327105\n" "#","\n" "Pd GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 2 6 10\n" " 0.41000000 2 15.72025922 0.14076508\n" " 3\n" " 0.34215063 2 5.17768606 2.26678707\n" " -5.85281906\n" " 0.34311064 2 -0.37256076 1.37706395\n" " -3.25872809\n" " 0.49491624 2 -1.60827298 -0.63789470\n" " 1.44660922\n" "#","\n" "Ag GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.65000000 1 -2.37606096\n" " 3\n" " 1.01270456 3 0.89793134 0.28982424 0.00726736\n" " -0.74832297 -0.01876424\n" " 0.02978730\n" " 1.23584202 2 0.13008068 0.11726324\n" " -0.27749548\n" " 1.01615913 1 -0.03884235\n" "#","\n" "Ag GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 1 0 10\n" " 0.57000000 1 1.01705324\n" " 3\n" " 0.49890039 3 2.99028401 -1.51526425 0.53817162\n" " 3.91239548 -1.38955314\n" " 2.20584723\n" " 0.63000853 2 1.81396786 -0.55123072\n" " 1.30444997\n" " 0.38765955 2 -3.42007573 0.44975502\n" " -1.01994852\n" "#","\n" "Ag GTH-PADE-q19 GTH-LDA-q19\n" " 3 6 10\n" " 0.40000000 2 26.10213544 -5.21734352\n" " 3\n" " 0.30814467 2 1.55692822 3.68811443\n" " -4.76133525\n" " 0.42100419 2 0.24550848 -0.89060050\n" " 1.05377272\n" " 0.44722234 2 1.87011922 -3.09368795\n" " 3.50791241\n" "#","\n" "Cd GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 2 0 10\n" " 0.55000000 1 2.38271306\n" " 3\n" " 0.49150479 3 3.20793247 -1.60378823 0.38651363\n" " 4.14096341 -0.99797390\n" " 1.58423446\n" " 0.59856481 2 1.94014994 -0.64058146\n" " 1.51589242\n" " 0.37787436 2 -4.19007193 0.33960669\n" " -0.77015558\n" "#","\n" "Cd GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.62500000 1 -1.79683799\n" " 3\n" " 0.82846467 3 1.48529241 0.16450606 -0.09953846\n" " -0.42475283 0.25700719\n" " -0.40798627\n" " 0.97287254 2 0.46920843 0.18936149\n" " -0.44811107\n" " 1.24094900 1 0.06541164\n" "#","\n" "In GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 2 1 10\n" " 0.53000000 1 2.39540385\n" " 3\n" " 0.47408054 3 3.55441064 -1.84126870 0.38183068\n" " 4.75413535 -0.98588258\n" " 1.56504008\n" " 0.55981945 2 2.22366425 -0.86006177\n" " 2.03527762\n" " 0.36048751 2 -4.56641372 0.34120718\n" " -0.77378515\n" "#","\n" "In GTH-PADE-q3 GTH-LDA-q3\n" " 2 1\n" " 0.61000000 1 2.86577676\n" " 3\n" " 0.77060197 3 1.25619360 0.15385620 -0.06790534\n" " -0.39725499 0.17533083\n" " -0.27832906\n" " 0.85813160 2 0.49445864 0.16091263\n" " -0.38078878\n" " 1.08869090 1 0.12920778\n" "#","\n" "Sn GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.60500000 1 4.61091234\n" " 3\n" " 0.66354369 3 1.64879146 0.05498623 -0.14066273\n" " -0.14197384 0.36318961\n" " -0.57654563\n" " 0.74586492 2 0.76935544 0.18807652\n" " -0.44507028\n" " 0.94445897 1 0.22511508\n" "#","\n" "Sb GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.59000000 1 6.68022783\n" " 3\n" " 0.59768356 3 1.95147672 -0.01453812 -0.19191821\n" " 0.03753727 0.49553069\n" " -0.78663058\n" " 0.67212205 2 0.97031285 0.19722998\n" " -0.46673132\n" " 0.85655729 1 0.30010262\n" "#","\n" "Te GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.57500000 1 9.38708481\n" " 3\n" " 0.55645602 3 2.04689031 0.01136047 -0.21497109\n" " -0.02933260 0.55505297\n" " -0.88111927\n" " 0.61526187 2 1.03347754 0.20333245\n" " -0.48117240\n" " 0.80510072 1 0.31741073\n" "#","\n" "I GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.56000000 1 14.66182521\n" " 3\n" " 0.55283008 3 1.33805374 0.32333643 -0.11404312\n" " -0.83485108 0.29445806\n" " -0.46743768\n" " 0.56225147 2 0.67449617 0.24415947\n" " -0.57778676\n" " 0.79432495 1 0.22434543\n" "#","\n" "Xe GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.56000000 1 12.73427972\n" " 3\n" " 0.50737118 3 2.23645069 0.15629453 -0.27630331\n" " -0.40355073 0.71341207\n" " -1.13250655\n" " 0.54102371 2 1.13004299 0.31810091\n" " -0.75276413\n" " 0.72982111 1 0.28013078\n" "#","\n" "Cs GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 1.20000000 0\n" " 3\n" " 1.22473727 3 0.61152657 -0.09288578 -0.07173455\n" " 0.23983005 0.18521782\n" " -0.29402418\n" " 1.28047759 2 0.24489277 -0.09604275\n" " 0.22727863\n" " 1.10752212 1 -0.54216260\n" "#","\n" "Cs GTH-PADE-q9 GTH-LDA-q9 GTH-PADE GTH-LDA\n" " 3 6\n" " 0.54000000 2 35.23443810 -3.31807009\n" " 4\n" " 0.45682103 2 -0.28237849 1.07705949\n" " -2.78095565\n" " 0.36246700 2 -2.69673321 0.96809883\n" " -2.29093996\n" " 0.76146205 1 0.18375440\n" " 0.33350703 1 -17.94825944\n" "#","\n" "Ba GTH-PADE-q10 GTH-LDA-q10 GTH-PADE GTH-LDA\n" " 4 6\n" " 0.54000000 2 24.47865325 -2.50084994\n" " 4\n" " 0.51477613 2 1.04672903 0.37847454\n" " -0.97721707\n" " 0.37519011 2 -0.20243912 -0.28749217\n" " 0.68033065\n" " 0.66540319 1 0.37841850\n" " 0.30492043 1 -18.79520777\n" "#","\n" "Ba GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 1.20000000 0\n" " 3\n" " 1.01618684 3 0.92259259 -0.29570030 -0.08135711\n" " 0.76349489 0.21006316\n" " -0.33346493\n" " 1.24987991 2 0.44716820 -0.06384326\n" " 0.15108073\n" " 0.93715823 1 -0.71893382\n" "#","\n" "La GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 4 6 1\n" " 0.53500000 2 19.90930823 -1.47483023\n" " 4\n" " 0.55177542 2 1.29327192 0.43447877\n" " -1.12181937\n" " 0.47630806 3 1.17252682 0.35023609 0.00887640\n" " -0.82880986 -0.02100539\n" " 0.02985728\n" " 0.62667220 1 0.32837704\n" " 0.29931017 1 -18.26943896\n" "#","\n" "Ce GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 1 1\n" " 0.53500000 2 18.26801534 -0.63048034\n" " 4\n" " 0.52642558 2 -0.68453554 1.78656499\n" " -2.30644548\n" " 0.49085089 2 -1.02722427 1.53667473\n" " -1.81821806\n" " 0.69222809 1 0.06340682\n" " 0.30390134 1 -17.54564801\n" "#","\n" "Pr GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 4 6 0 3\n" " 0.53208333 2 18.42473909 -0.65766893\n" " 4\n" " 0.52684996 2 1.01262106 0.66537143\n" " -1.71798165\n" " 0.45889736 2 1.11706004 0.78265878\n" " -1.85210872\n" " 0.74760989 1 0.01757109\n" " 0.30077296 1 -17.89711891\n" "#","\n" "Nd GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 4 6 0 4\n" " 0.52916670 2 17.81503043 -0.59479767\n" " 4\n" " 0.50299986 2 1.52910988 0.83413680\n" " -2.15373194\n" " 0.46701290 2 0.72155346 0.69619548\n" " -1.64749920\n" " 0.32528958 1 -0.54324017\n" " 0.29474281 1 -18.52022760\n" "#","\n" "Pm GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 4 6 0 5\n" " 0.52625000 2 18.25172292 -0.49210744\n" " 4\n" " 0.48987856 2 1.30897757 0.97124774\n" " -2.50775088\n" " 0.47226016 2 0.16051238 0.66146221\n" " -1.56530527\n" " 0.47370914 1 -0.42995241\n" " 0.29152653 1 -19.30505668\n" "#","\n" "Sm GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 4 6 0 6\n" " 0.52333337 2 17.20679172 -0.53280292\n" " 4\n" " 0.47967676 2 1.72363519 1.02996853\n" " -2.65936731\n" " 0.49059775 2 -0.08240311 0.46948681\n" " -1.11100858\n" " 0.47084026 1 -0.41063034\n" " 0.28404049 1 -19.98429201\n" "#","\n" "Eu GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 4 6 0 7\n" " 0.52041668 2 17.37351625 -0.64846778\n" " 4\n" " 0.46904261 2 1.76363790 1.12972280\n" " -2.91693172\n" " 0.44590722 2 0.51804594 0.90228057\n" " -2.13518554\n" " 0.49003840 1 -0.42611996\n" " 0.27840129 1 -20.94652763\n" "#","\n" "Gd GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 4 6 0 8\n" " 0.51750004 2 17.51255640 -0.71953420\n" " 4\n" " 0.46201372 2 1.55185591 1.18850339\n" " -3.06870256\n" " 0.45695327 2 -0.05834713 0.71741382\n" " -1.69771095\n" " 0.48236813 1 -0.56260077\n" " 0.27338980 1 -21.92349011\n" "#","\n" "Tb GTH-PADE-q19 GTH-LDA-q19 GTH-PADE GTH-LDA\n" " 4 6 0 9\n" " 0.51458335 2 17.60361623 -0.82808004\n" " 4\n" " 0.44869439 2 1.71848088 1.33046245\n" " -3.43523929\n" " 0.42422013 2 0.56239978 1.17553634\n" " -2.78182671\n" " 0.48280866 1 -0.62580219\n" " 0.26825995 1 -22.91169709\n" "#","\n" "Dy GTH-PADE-q20 GTH-LDA-q20 GTH-PADE GTH-LDA\n" " 4 6 0 10\n" " 0.51166666 2 16.99433138 -0.95529792\n" " 4\n" " 0.44059045 2 1.94031950 1.37870375\n" " -3.55979777\n" " 0.43464206 2 0.01431536 0.86469335\n" " -2.04623793\n" " 0.46722880 1 -0.66892417\n" " 0.26167045 1 -23.92235817\n" "#","\n" "Ho GTH-PADE-q21 GTH-LDA-q21 GTH-PADE GTH-LDA\n" " 4 6 0 11\n" " 0.50875002 2 16.78157003 -1.17351448\n" " 4\n" " 0.43221176 2 2.05279689 1.42314101\n" " -3.67453429\n" " 0.42013792 2 0.25329464 0.99529117\n" " -2.35528878\n" " 0.44713057 1 -0.74286267\n" " 0.25499226 1 -25.19721081\n" "#","\n" "Er GTH-PADE-q22 GTH-LDA-q22 GTH-PADE GTH-LDA\n" " 4 6 0 12\n" " 0.50583333 2 17.10529281 -1.43095318\n" " 4\n" " 0.41994801 2 2.14450257 1.54307528\n" " -3.98420323\n" " 0.41445530 2 0.05408736 0.96959342\n" " -2.29447680\n" " 0.41838497 1 -0.99900632\n" " 0.24912591 1 -26.69680936\n" "#","\n" "Tm GTH-PADE-q23 GTH-LDA-q23 GTH-PADE GTH-LDA\n" " 4 6 0 13\n" " 0.50291669 2 17.24729254 -1.62769708\n" " 4\n" " 0.41337286 2 1.94719583 1.59627195\n" " -4.12155644\n" " 0.40992301 2 -0.09449281 0.93984837\n" " -2.22408718\n" " 0.39287009 1 -1.35330770\n" " 0.24391696 1 -28.10415875\n" "#","\n" "Yb GTH-PADE-q24 GTH-LDA-q24 GTH-PADE GTH-LDA\n" " 4 6 0 14\n" " 0.50000000 2 17.35714421 -1.77391642\n" " 4\n" " 0.40230918 2 2.12077095 1.86019003\n" " -4.80298999\n" " 0.41435774 2 -0.92321216 0.70931244\n" " -1.67853959\n" " 0.44402468 1 -0.88996733\n" " 0.23829829 1 -29.93285367\n" "#","\n" "Lu GTH-PADE-q25 GTH-LDA-q25 GTH-PADE GTH-LDA\n" " 4 6 1 14\n" " 0.49700000 2 17.03705292 -1.66161023\n" " 4\n" " 0.39120615 2 2.18467779 2.10393860\n" " -5.43234610\n" " 0.39389567 2 -0.71981878 1.15101512\n" " -2.72379890\n" " 0.43651827 1 -1.17324513\n" " 0.23262926 1 -31.85226177\n" "#","\n" "Hf GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 4 6 2\n" " 0.56000000 2 5.13480056 0.52919062\n" " 3\n" " 0.42281035 3 2.56444209 2.32910852 0.27075363\n" " -6.01373234 -0.69908286\n" " 1.10975964\n" " 0.47268130 2 -1.02527490 0.79129612\n" " -1.87254839\n" " 0.42638752 2 1.45936326 2.32948018\n" " -5.28276448\n" "#","\n" "Ta GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 4 6 3\n" " 0.55000000 2 4.54623627 0.77942234\n" " 3\n" " 0.42185350 3 2.70813558 2.24282880 0.23120613\n" " -5.79095906 -0.59697167\n" " 0.94766314\n" " 0.46134516 2 -0.72485277 0.93609767\n" " -2.21521141\n" " 0.41099434 2 1.34849472 2.37542018\n" " -5.38694662\n" "#","\n" "Ta GTH-PADE-q5 GTH-LDA-q5\n" " 2 0 3\n" " 0.74400000 1 3.62311645\n" " 3\n" " 0.58180113 2 2.00533833 -1.17236605\n" " 3.02703613\n" " 0.77064628 2 0.51856664 -0.50091380\n" " 1.18537841\n" " 0.53436996 2 -2.20220040 0.73493457\n" " -1.66667495\n" "#","\n" "W GTH-PADE-q14 GTH-LDA-q14 GTH-PADE GTH-LDA\n" " 4 6 4\n" " 0.54000000 2 4.80025094 0.90154434\n" " 3\n" " 0.41856963 3 2.69220433 2.33255747 0.29723855\n" " -6.02263750 -0.76746663\n" " 1.21831550\n" " 0.44955492 2 -0.70208426 1.03602407\n" " -2.45168043\n" " 0.39960167 2 1.17743638 2.44891670\n" " -5.55362106\n" "#","\n" "W GTH-PADE-q6 GTH-LDA-q6\n" " 2 0 4\n" " 0.71900000 1 4.05844991\n" " 3\n" " 0.58246289 2 2.16116556 -1.06177835\n" " 2.74149991\n" " 0.74230741 2 0.60097339 -0.54932611\n" " 1.29994284\n" " 0.53495887 2 -2.51706347 0.34797654\n" " -0.78913661\n" "#","\n" "Re GTH-PADE-q15 GTH-LDA-q15 GTH-PADE GTH-LDA\n" " 4 6 5\n" " 0.53000000 2 5.59266028 0.94395680\n" " 3\n" " 0.40325199 3 2.76072043 2.47732079 0.21194880\n" " -6.39641476 -0.54724946\n" " 0.86873158\n" " 0.44095069 2 -0.90054631 1.06118049\n" " -2.51121137\n" " 0.39039544 2 0.87525142 2.50135628\n" " -5.67254285\n" "#","\n" "Re GTH-PADE-q7 GTH-LDA-q7\n" " 2 0 5\n" " 0.69300000 1 8.18081618\n" " 3\n" " 0.50981621 2 2.26937936 -1.36659354\n" " 3.52852934\n" " 0.74583906 2 0.49669329 -0.39123421\n" " 0.92582911\n" " 0.50095420 2 -3.68962967 0.83544051\n" " -1.89460099\n" "#","\n" "Os GTH-PADE-q16 GTH-LDA-q16 GTH-PADE GTH-LDA\n" " 4 6 6\n" " 0.52000000 2 5.61307299 0.92195476\n" " 3\n" " 0.41057830 3 2.78575826 2.59185074 0.54822025\n" " -6.69212983 -1.41549860\n" " 2.24703437\n" " 0.42239546 2 -0.59000550 1.27547446\n" " -3.01832347\n" " 0.38025200 2 0.88013282 2.52796761\n" " -5.73289168\n" "#","\n" "Os GTH-PADE-q8 GTH-LDA-q8\n" " 2 0 6\n" " 0.66700000 1 9.44045936\n" " 3\n" " 0.51030708 2 2.40236688 -1.17998407\n" " 3.04670577\n" " 0.71755329 2 0.49952321 -0.44509384\n" " 1.05328427\n" " 0.48758605 2 -4.14203471 0.73468110\n" " -1.66610013\n" "#","\n" "Ir GTH-PADE-q17 GTH-LDA-q17 GTH-PADE GTH-LDA\n" " 4 6 7\n" " 0.51000000 2 4.90450946 1.31378645\n" " 3\n" " 0.40446887 3 3.24327835 2.83328456 0.72142882\n" " -7.31550927 -1.86272120\n" " 2.95697824\n" " 0.41142571 2 -0.38057445 1.48088044\n" " -3.50440273\n" " 0.37642813 2 0.75431547 2.59088743\n" " -5.87558042\n" "#","\n" "Ir GTH-PADE-q9 GTH-LDA-q9\n" " 2 0 7\n" " 0.64100000 1 10.72001591\n" " 3\n" " 0.50996044 2 2.44599887 -1.08871009\n" " 2.81103736\n" " 0.68497052 2 0.46179182 -0.55134721\n" " 1.30472563\n" " 0.47174528 2 -4.54548411 0.72115617\n" " -1.63542847\n" "#","\n" "Pt GTH-PADE-q10 GTH-LDA-q10\n" " 1 0 9\n" " 0.61600000 1 11.02741707\n" " 3\n" " 0.52013211 2 2.44743006 -1.02260695\n" " 2.64035978\n" " 0.65897566 2 0.40845297 -0.69628711\n" " 1.64771604\n" " 0.45124318 2 -4.55229454 0.92706936\n" " -2.10239568\n" "#","\n" "Pt GTH-PADE-q18 GTH-LDA-q18 GTH-PADE GTH-LDA\n" " 3 6 9\n" " 0.50000000 2 5.44583159 1.15638204\n" " 3\n" " 0.40994150 3 2.99436565 2.88489700 1.03520925\n" " -7.44877202 -2.67289879\n" " 4.24309529\n" " 0.39865199 2 -0.22518140 1.59606293\n" " -3.77697426\n" " 0.36796397 2 0.63206655 2.53790667\n" " -5.75543134\n" "#","\n" "Au GTH-PADE-q1 GTH-LDA-q1\n" " 1\n" " 0.65000000 2 -1.96371223 -1.69812291\n" " 2\n" " 0.91930757 3 1.53959915 0.18155717 -0.19323771\n" " -0.46877861 0.49893761\n" " -0.79203890\n" " 1.14035080 3 0.47122943 0.21024829 -0.06235978\n" " -0.49753827 0.14757016\n" " -0.20975780\n" "#","\n" "Au GTH-PADE-q11 GTH-LDA-q11 GTH-PADE GTH-LDA\n" " 1 0 10\n" " 0.59000000 1 11.60442790\n" " 3\n" " 0.52117975 2 2.53861359 -1.04613664\n" " 2.70111320\n" " 0.63061306 2 0.39485270 -0.86959213\n" " 2.05783056\n" " 0.44070643 2 -4.71906966 0.72777081\n" " -1.65042907\n" "#","\n" "Au GTH-PADE-q19 GTH-LDA-q19\n" " 3 6 10\n" " 0.49000000 2 9.07322639 -0.34013367\n" " 3\n" " 0.28803780 3 -5.90182040 26.42537412 -15.50837777\n" " -59.33938963 40.04245923\n" " -31.78271670\n" " 0.35586747 2 -7.08858659 8.19796427\n" " -9.69996213\n" " 0.33386175 2 -8.82572349 9.56535285\n" " -10.84609065\n" "#","\n" "Hg GTH-PADE-q12 GTH-LDA-q12 GTH-PADE GTH-LDA\n" " 2 0 10\n" " 0.57000000 1 2.13457183\n" " 3\n" " 0.52180188 2 3.29392021 -1.80519780\n" " 4.66100069\n" " 0.62164790 2 2.10096040 -0.71415047\n" " 1.68998846\n" " 0.40189401 2 -1.66988578 1.09060737\n" " -2.47326503\n" "#","\n" "Hg GTH-PADE-q2 GTH-LDA-q2\n" " 2\n" " 0.64000000 1 -3.29632880\n" " 3\n" " 0.81210780 3 1.76504143 0.18053035 -0.19516558\n" " -0.46612737 0.50391537\n" " -0.79994085\n" " 1.05371378 2 0.47405588 0.22473320\n" " -0.53181582\n" " 1.10000000 1 0.12063831\n" "#","\n" "Tl GTH-PADE-q13 GTH-LDA-q13 GTH-PADE GTH-LDA\n" " 2 1 10\n" " 0.55000000 1 7.30188582\n" " 3\n" " 0.50242266 2 3.32656022 -1.68141322\n" " 4.34139027\n" " 0.57201594 2 1.27280729 -1.26443781\n" " 2.99220598\n" " 0.39318504 2 -3.20065227 1.32653373\n" " -3.00829573\n" "#","\n" "Tl GTH-PADE-q3 GTH-LDA-q3\n" " 2 1\n" " 0.63000000 1 -1.23584552\n" " 3\n" " 0.75400547 3 1.87576571 0.11761462 -0.19062668\n" " -0.30367964 0.49219597\n" " -0.78133689\n" " 0.90374170 2 0.75966830 0.24793467\n" " -0.58672051\n" " 1.06351212 1 0.24761396\n" "#","\n" "Pb GTH-PADE-q4 GTH-LDA-q4 GTH-PADE GTH-LDA\n" " 2 2\n" " 0.61750000 1 0.75314257\n" " 3\n" " 0.70525860 3 1.97992741 0.06388872 -0.19665860\n" " -0.16495996 0.50777033\n" " -0.80606040\n" " 0.84664106 2 0.86442030 0.22860106\n" " -0.54096885\n" " 0.97193857 1 0.37496708\n" "#","\n" "Bi GTH-PADE-q5 GTH-LDA-q5 GTH-PADE GTH-LDA\n" " 2 3\n" " 0.60500000 1 6.67943714\n" " 3\n" " 0.67885795 3 1.37763378 0.19895396 -0.11491910\n" " -0.51369691 0.29671983\n" " -0.47102813\n" " 0.79867267 2 0.65557809 0.17026993\n" " -0.40293219\n" " 0.93468255 1 0.37847579\n" "#","\n" "Po GTH-PADE-q6 GTH-LDA-q6 GTH-PADE GTH-LDA\n" " 2 4\n" " 0.59250000 1 10.41173070\n" " 3\n" " 0.64794961 3 1.14420296 0.28499406 -0.08280174\n" " -0.73585149 0.21379318\n" " -0.33938616\n" " 0.74894708 2 0.59456184 0.14942108\n" " -0.35359482\n" " 0.88046840 1 0.43323228\n" "#","\n" "At GTH-PADE-q7 GTH-LDA-q7 GTH-PADE GTH-LDA\n" " 2 5\n" " 0.58000000 1 13.52041116\n" " 3\n" " 0.62782694 3 0.94555652 0.37409257 -0.04645981\n" " -0.96590285 0.11995872\n" " -0.19042856\n" " 0.70982320 2 0.52707805 0.13472635\n" " -0.31882073\n" " 0.83836499 1 0.46894787\n" "#","\n" "Rn GTH-PADE-q8 GTH-LDA-q8 GTH-PADE GTH-LDA\n" " 2 6\n" " 0.57000000 1 14.62918461\n" " 3\n" " 0.61518195 3 0.98183224 0.40238854 -0.02938821\n" " -1.03896274 0.07588004\n" " -0.12045584\n" " 0.67669721 2 0.61227859 0.14541822\n" " -0.34412231\n" " 0.78833715 1 0.55774596\n" "#","\n" "H GTH-PBE-q1 GTH-PBE\n" " 1\n" " 0.20000000 2 -4.17890044 0.72446331\n" " 0\n" "#","\n" "He GTH-PBE-q2 GTH-PBE\n" " 2\n" " 0.20000000 2 -9.12214383 1.70270770\n" " 0\n" "#","\n" "Li GTH-PBE-q3 GTH-PBE\n" " 3\n" " 0.40000000 4 -14.08115455 9.62621962 -1.78361605 0.08515207\n" " 0\n" "#","\n" "Be GTH-PBE-q4 GTH-PBE\n" " 4\n" " 0.32500000 4 -24.06746684 17.27902186 -3.33910629 0.16554912\n" " 0\n" "#","\n" "B GTH-PBE-q3 GTH-PBE\n" " 2 1\n" " 0.41899145 2 -5.85946171 0.90375643\n" " 2\n" " 0.37132046 1 6.29728018\n" " 0.36456308 0\n" "#","\n" "C GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.33847124 2 -8.80367398 1.33921085\n" " 2\n" " 0.30257575 1 9.62248665\n" " 0.29150694 0\n" "#","\n" "N GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.28379051 2 -12.41522559 1.86809592\n" " 2\n" " 0.25540500 1 13.63026257\n" " 0.24549453 0\n" "#","\n" "O GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.24455430 2 -16.66721480 2.48731132\n" " 2\n" " 0.22095592 1 18.33745811\n" " 0.21133247 0\n" "#","\n" "F GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.21492959 2 -21.57302836 3.19977615\n" " 2\n" " 0.19468402 1 23.74354045\n" " 0.18615608 0\n" "#","\n" "Ne GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.19000000 2 -27.12015973 4.36044962\n" " 2\n" " 0.17605938 2 28.17737082 0.83365601\n" " -1.07624528\n" " 0.19547452 1 -0.23629360\n" "#","\n" "Na GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.23652322 2 0.29510499 -0.91388488\n" " 2\n" " 0.14356046 1 34.60149228\n" " 0.12993224 1 -14.27746168\n" "#","\n" "Mg GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.19275787 2 -20.57539077 3.04016732\n" " 2\n" " 0.14140682 1 41.04729209\n" " 0.10293187 1 -9.98562566\n" "#","\n" "Mg GTH-PBE-q2\n" " 2\n" " 0.57696017 1 -2.69040744\n" " 2\n" " 0.59392350 2 3.50321099 -0.71677167\n" " 0.92534825\n" " 0.70715728 1 0.83115848\n" "#","\n" "Al GTH-PBE-q3 GTH-PBE\n" " 2 1\n" " 0.45000000 1 -7.55476126\n" " 2\n" " 0.48743529 2 6.95993832 -1.88883584\n" " 2.43847659\n" " 0.56218949 1 1.86529857\n" "#","\n" "Si GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.44000000 1 -6.26928833\n" " 2\n" " 0.43563383 2 8.95174150 -2.70627082\n" " 3.49378060\n" " 0.49794218 1 2.43127673\n" "#","\n" "P GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.43000000 1 -5.87594327\n" " 2\n" " 0.39637742 2 11.00886207 -3.47035607\n" " 4.48021042\n" " 0.44829838 1 3.05606416\n" "#","\n" "S GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.42000000 1 -5.98626038\n" " 2\n" " 0.36482035 2 13.14354448 -4.24183045\n" " 5.47617957\n" " 0.40948048 1 3.70089057\n" "#","\n" "Cl GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.41000000 1 -6.39208181\n" " 2\n" " 0.33953864 2 15.21898983 -4.93452321\n" " 6.37044208\n" " 0.37847416 1 4.33877527\n" "#","\n" "Ar GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.40000000 1 -7.10000000\n" " 2\n" " 0.31881468 2 17.25203807 -5.58548836\n" " 7.21083447\n" " 0.35337019 1 4.97421551\n" "#","\n" "K GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.40000000 2 -3.36355184 -1.08652975\n" " 2\n" " 0.30531772 2 17.85062321 -5.62264870\n" " 7.25880826\n" " 0.31648432 2 7.33378021 -2.46094505\n" " 2.91182945\n" "#","\n" "Ca GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.39000000 2 -4.16707222 -1.58379781\n" " 3\n" " 0.28935572 2 20.53187635 -7.12978578\n" " 9.20451387\n" " 0.32788206 2 5.80560513 -0.42875336\n" " 0.50730782\n" " 0.67961713 1 0.05806826\n" "#","\n" "Sc GTH-PBE-q11 GTH-PBE\n" " 4 6 1\n" " 0.38500000 2 8.21490030 -0.55705910\n" " 3\n" " 0.36361108 2 2.64653339 3.02108393\n" " -3.90020259\n" " 0.24389778 2 -2.63482265 7.99213715\n" " -9.45642421\n" " 0.25320575 1 -8.16594769\n" "#","\n" "Ti GTH-PBE-q12 GTH-PBE\n" " 4 6 2\n" " 0.38000000 2 8.71144218 -0.70028677\n" " 3\n" " 0.33777078 2 2.57526386 3.69297065\n" " -4.76760461\n" " 0.24253135 2 -4.63054123 8.87087502\n" " -10.49616087\n" " 0.24331694 1 -9.40665268\n" "#","\n" "V GTH-PBE-q13 GTH-PBE\n" " 4 6 3\n" " 0.37500000 2 7.47470354 -0.37026363\n" " 3\n" " 0.32779544 2 1.94087762 4.72568824\n" " -6.10083728\n" " 0.24476590 2 -5.97816705 9.35863915\n" " -11.07329118\n" " 0.24173879 1 -9.49989110\n" "#","\n" "Cr GTH-PBE-q14 GTH-PBE\n" " 3 6 5\n" " 0.37000000 2 5.69965764 -0.69548599\n" " 3\n" " 0.31393442 2 2.86995474 4.97445648\n" " -6.42199570\n" " 0.24086624 2 -4.47620867 7.33141440\n" " -8.67464650\n" " 0.22028633 1 -11.19711641\n" "#","\n" "Mn GTH-PBE-q15 GTH-PBE\n" " 4 6 5\n" " 0.36500000 2 6.09304649 -0.44646948\n" " 3\n" " 0.29568592 2 1.88711984 6.35683658\n" " -8.20664074\n" " 0.24561261 2 -6.57002452 7.98335983\n" " -9.44603874\n" " 0.22252279 1 -11.61205092\n" "#","\n" "Fe GTH-PBE-q16 GTH-PBE\n" " 4 6 6\n" " 0.36000000 2 6.75678916 -0.22883251\n" " 3\n" " 0.27826303 2 0.62950570 7.91313242\n" " -10.21581002\n" " 0.25138338 2 -7.93213293 7.69707888\n" " -9.10730654\n" " 0.22285578 1 -12.38579937\n" "#","\n" "Co GTH-PBE-q17 GTH-PBE\n" " 4 6 7\n" " 0.35500000 2 4.82819736 0.36814301\n" " 3\n" " 0.27680076 2 -0.58449582 9.28629277\n" " -11.98855242\n" " 0.26815783 2 -6.85195349 5.68013280\n" " -6.72082376\n" " 0.22258414 1 -12.33315019\n" "#","\n" "Ni GTH-PBE-q18 GTH-PBE\n" " 4 6 8\n" " 0.35000000 2 2.10216598 0.64848387\n" " 3\n" " 0.26129530 2 0.62265847 9.97022667\n" " -12.87150729\n" " 0.22425346 2 -11.14270822 12.42956644\n" " -14.70686134\n" " 0.21534825 1 -12.62814550\n" "#","\n" "Cu GTH-PBE-q11 GTH-PBE\n" " 1 0 10\n" " 0.53000000 0\n" " 3\n" " 0.43135505 3 9.69380507 -6.47016535 1.93595215\n" " 11.50177396 -4.99860696\n" " 3.96752127\n" " 0.56139155 2 2.54547330 -0.78463573\n" " 0.92839352\n" " 0.26455485 1 -12.82861406\n" "#","\n" "Cu GTH-PBE-q19\n" " 3 6 10\n" " 0.34500000 2 0.05196970 1.24904337\n" " 3\n" " 0.25002849 2 0.75019332 10.73582127\n" " -13.85988567\n" " 0.22202454 2 -13.05959885 14.74763830\n" " -17.44964096\n" " 0.21556837 1 -12.45672374\n" "#","\n" "Zn GTH-PBE-q12 GTH-PBE\n" " 2 0 10\n" " 0.51000000 0\n" " 3\n" " 0.40031644 3 11.53004133 -8.79189815 3.14508644\n" " 16.46577518 -8.12057827\n" " 6.44550918\n" " 0.54318233 2 2.59719512 -0.59426275\n" " 0.70314117\n" " 0.25095885 1 -14.46695795\n" "#","\n" "Zn GTH-PBE-q20\n" " 4 6 10\n" " 0.34000000 2 0.55188462 1.24394356\n" " 3\n" " 0.24394890 2 -1.34762699 12.79313122\n" " -16.51586139\n" " 0.23975357 2 -9.72145777 8.07114357\n" " -9.54990586\n" " 0.20855195 1 -14.19380873\n" "#","\n" "Ga GTH-PBE-q13 GTH-PBE\n" " 2 1 10\n" " 0.49000000 0\n" " 3\n" " 0.41677723 3 10.47568975 -4.92176814 0.87070559\n" " 7.77017809 -2.24815216\n" " 1.78441545\n" " 0.56962652 2 1.77798534 0.19585976\n" " -0.23174439\n" " 0.23812650 1 -16.24868022\n" "#","\n" "Ga GTH-PBE-q3\n" " 2 1\n" " 0.56000000 0\n" " 3\n" " 0.56586645 3 2.21575051 1.03244793 -0.76062946\n" " -2.57004845 1.96393682\n" " -1.55882652\n" " 0.64671613 2 0.31122394 0.61341605\n" " -0.72580366\n" " 0.99942484 1 0.08951951\n" "#","\n" "Ge GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.54000000 0\n" " 3\n" " 0.42186518 3 7.51024121 -0.58810836 -1.44797580\n" " -1.59588819 3.73865744\n" " -2.96746735\n" " 0.56752887 2 0.91385969 0.54687534\n" " -0.64707163\n" " 0.81391394 1 0.19717731\n" "#","\n" "As GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.52000000 0\n" " 3\n" " 0.45554957 3 5.52067327 0.03512220 -1.06108239\n" " -1.77119320 2.73970295\n" " -2.17457180\n" " 0.55460557 2 1.02179156 0.62920826\n" " -0.74448925\n" " 0.70368872 1 0.31479504\n" "#","\n" "Se GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.51000000 0\n" " 3\n" " 0.43246005 3 6.51810990 -0.22271639 -1.19612899\n" " -1.65797833 3.08839178\n" " -2.45133498\n" " 0.47049162 2 2.28126223 0.36533529\n" " -0.43227055\n" " 0.62560034 1 0.43979948\n" "#","\n" "Br GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.50000000 0\n" " 3\n" " 0.43803892 3 6.07855632 0.33049817 -1.23838226\n" " -2.44090020 3.19748924\n" " -2.53792841\n" " 0.45313561 2 2.45930381 0.52275313\n" " -0.61852985\n" " 0.56771383 1 0.55926645\n" "#","\n" "Kr GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.50000000 0\n" " 3\n" " 0.42165717 3 6.46530358 0.53866049 -1.50260118\n" " -3.13938870 3.87969957\n" " -3.07941607\n" " 0.43374437 2 2.60116535 0.70510978\n" " -0.83429715\n" " 0.52469073 1 0.63559472\n" "#","\n" "Rb GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.49000000 2 5.66908644 -0.81162703\n" " 3\n" " 0.28180292 2 21.39073240 -8.07866676\n" " 10.42951394\n" " 0.28570828 2 12.25634859 -12.19854075\n" " 14.43350807\n" " 0.54179651 1 0.34566626\n" "#","\n" "Sr GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.48000000 2 6.81095035 -1.19610979\n" " 3\n" " 0.27588581 2 21.28971943 -7.89903416\n" " 10.19760926\n" " 0.28174086 2 11.70905135 -10.96577673\n" " 12.97488200\n" " 0.52108911 1 0.36053906\n" "#","\n" "Y GTH-PBE-q11 GTH-PBE\n" " 4 6 1\n" " 0.47500000 2 12.16776904 -2.32855103\n" " 3\n" " 0.24674070 2 23.45027195 -8.32535748\n" " 10.74799029\n" " 0.29656397 2 5.97863401 -5.85234964\n" " 6.92459348\n" " 0.45045569 2 1.18749048 -1.31867331\n" " 1.49523499\n" "#","\n" "Zr GTH-PBE-q12 GTH-PBE\n" " 4 6 2\n" " 0.47000000 2 7.79605677 -1.89321030\n" " 3\n" " 0.25982885 2 23.38087417 -8.57193933\n" " 11.06632609\n" " 0.28896899 2 8.59276581 -5.37735808\n" " 6.36257589\n" " 0.58124504 2 0.02781064 0.27686186\n" " -0.31393184\n" "#","\n" "Nb GTH-PBE-q13 GTH-PBE\n" " 3 6 4\n" " 0.46000000 2 26.27526252 -4.57803146\n" " 3\n" " 0.35116942 2 -1.04371870 3.27790404\n" " -4.23175592\n" " 0.40546040 2 -0.66246647 -0.90782868\n" " 1.07415738\n" " 0.42212155 2 1.49409323 -3.43003953\n" " 3.88929925\n" "#","\n" "Mo GTH-PBE-q14 GTH-PBE\n" " 3 6 5\n" " 0.43000000 2 28.60936832 -4.72180336\n" " 3\n" " 0.34521579 2 0.14630305 2.76200500\n" " -3.56573312\n" " 0.41688762 2 -0.19078495 -0.72874402\n" " 0.86226156\n" " 0.42050785 2 1.21681419 -2.68646267\n" " 3.04616234\n" "#","\n" "Tc GTH-PBE-q15 GTH-PBE\n" " 3 6 6\n" " 0.43000000 2 27.30199947 -4.64715709\n" " 3\n" " 0.34617499 2 -0.37921852 3.34056578\n" " -4.31265188\n" " 0.42346840 2 -0.24151639 -0.82215042\n" " 0.97278149\n" " 0.43186468 2 1.21878473 -2.67400954\n" " 3.03204182\n" "#","\n" "Ru GTH-PBE-q16 GTH-PBE\n" " 3 6 7\n" " 0.43000000 2 26.83239104 -5.05049720\n" " 3\n" " 0.34135508 2 -0.55504091 3.71548964\n" " -4.79667650\n" " 0.42827085 2 0.10677508 -1.27757181\n" " 1.51164335\n" " 0.43814779 2 1.50921742 -2.94305440\n" " 3.33711002\n" "#","\n" "Ru GTH-PBE-q8\n" " 1 0 7\n" " 0.61211332 1 5.04489332\n" " 3\n" " 0.64215040 2 4.62556355 -1.80334903\n" " 2.32811359\n" " 0.67936654 2 3.23395238 -2.42101064\n" " 2.86457842\n" " 0.38059720 2 -15.53165455 13.58045054\n" " -15.39878349\n" "#","\n" "Rh GTH-PBE-q17 GTH-PBE\n" " 3 6 8\n" " 0.42000000 2 26.20679340 -4.93738335\n" " 3\n" " 0.34544622 2 -0.45248232 3.89280438\n" " -5.02558885\n" " 0.37838014 2 -0.94111242 -0.00569931\n" " 0.00674351\n" " 0.43374725 2 1.57423622 -3.01217170\n" " 3.41548166\n" "#","\n" "Rh GTH-PBE-q9\n" " 1 0 8\n" " 0.61900948 1 4.70454397\n" " 3\n" " 0.61332681 2 4.99320515 -1.92978191\n" " 2.49133773\n" " 0.69365000 2 2.53237506 -1.28086042\n" " 1.51553449\n" " 0.37003772 2 -16.88260377 14.71821684\n" " -16.68888922\n" "#","\n" "Pd GTH-PBE-q10\n" " 0 0 10\n" " 0.59600000 1 5.29987401\n" " 3\n" " 0.59194990 2 5.30819456 -2.06237933\n" " 2.66252027\n" " 0.66628526 2 2.73458446 -1.46697005\n" " 1.73574237\n" " 0.43851839 2 -3.71978832 -0.80738825\n" " 0.91549223\n" "#","\n" "Pd GTH-PBE-q18 GTH-PBE\n" " 2 6 10\n" " 0.41000000 2 26.78365917 -4.93130594\n" " 3\n" " 0.33797077 2 -0.71872875 4.38486657\n" " -5.66083840\n" " 0.41519591 2 -0.04624449 -1.07795233\n" " 1.27545040\n" " 0.44027049 2 1.63916358 -3.09368795\n" " 3.50791241\n" "#","\n" "Ag GTH-PBE-q11 GTH-PBE\n" " 1 0 10\n" " 0.57000000 1 0.03341912\n" " 3\n" " 0.52704461 3 9.58204535 -5.27424043 0.99704725\n" " 8.43071259 -2.57436494\n" " 2.04333882\n" " 0.62911218 2 3.87401904 -1.74211583\n" " 2.06129925\n" " 0.40538186 2 -2.72495276 -0.43354851\n" " 0.49159781\n" "#","\n" "Ag GTH-PBE-q19\n" " 3 6 10\n" " 0.40000000 2 24.53317558 -4.21395181\n" " 3\n" " 0.31760029 2 0.62551338 4.28490995\n" " -5.53179495\n" " 0.41962178 2 -0.19050165 -0.61441835\n" " 0.72698960\n" " 0.45640092 2 1.75125916 -3.09368795\n" " 3.50791241\n" "#","\n" "Cd GTH-PBE-q12 GTH-PBE\n" " 2 0 10\n" " 0.55000000 1 3.63395858\n" " 3\n" " 0.49127900 3 10.11138228 -6.50695409 1.80457679\n" " 11.33558598 -4.65939724\n" " 3.69828191\n" " 0.59970999 2 4.00148729 -1.88393578\n" " 2.22910288\n" " 0.37787256 2 -6.13703223 1.53571055\n" " -1.74133209\n" "#","\n" "In GTH-PBE-q13 GTH-PBE\n" " 2 1 10\n" " 0.53000000 1 3.32478546\n" " 3\n" " 0.47949521 3 11.11716024 -6.57350729 1.50686327\n" " 10.93727471 -3.89070422\n" " 3.08815074\n" " 0.56993285 2 4.70061419 -2.21706406\n" " 2.62326557\n" " 0.37706890 2 -4.00228785 -0.84012846\n" " 0.95261614\n" "#","\n" "In GTH-PBE-q3\n" " 2 1\n" " 0.61000000 1 5.08622849\n" " 3\n" " 0.68888318 3 0.56228376 0.99900413 -0.48093816\n" " -2.07195476 1.24177699\n" " -0.98562993\n" " 0.76370974 2 0.10892299 0.42327835\n" " -0.50082970\n" " 1.14391192 1 0.11683948\n" "#","\n" "Sn GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.60500000 1 6.26678230\n" " 3\n" " 0.56643732 3 1.57118124 1.47004118 -1.17857669\n" " -3.81477013 3.04307193\n" " -2.41536347\n" " 0.64184959 2 0.52689769 0.40325781\n" " -0.47714107\n" " 0.99087302 1 0.19876639\n" "#","\n" "Sb GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.59000000 1 7.92852084\n" " 3\n" " 0.55613636 3 1.43047790 1.26142599 -0.92323353\n" " -3.13013340 2.38377872\n" " -1.89206570\n" " 0.62275507 2 0.56147233 0.30484522\n" " -0.36069773\n" " 0.88948576 1 0.27086864\n" "#","\n" "Te GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.57500000 1 8.71364868\n" " 3\n" " 0.57492240 3 1.40181273 0.97877992 -0.48630602\n" " -2.05457624 1.25563675\n" " -0.99663078\n" " 0.58989076 2 0.76478865 0.32398623\n" " -0.38334568\n" " 0.81338925 1 0.34485820\n" "#","\n" "I GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.56000000 1 8.20710157\n" " 3\n" " 0.53192813 3 2.30814581 1.00390933 -0.95915606\n" " -2.85610882 2.47653030\n" " -1.96568498\n" " 0.58918244 2 0.90648219 0.42507060\n" " -0.50295032\n" " 0.73972147 1 0.47919458\n" "#","\n" "Xe GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.56000000 1 8.03636262\n" " 3\n" " 0.53049420 3 2.23202148 1.20035836 -0.99849824\n" " -3.17371348 2.57811136\n" " -2.04631245\n" " 0.58177483 2 0.79698181 0.59123264\n" " -0.69955590\n" " 0.68554509 1 0.56018900\n" "#","\n" "Cs GTH-PBE-q9 GTH-PBE\n" " 3 6\n" " 0.54000000 2 33.31331676 -2.92121670\n" " 4\n" " 0.46189568 2 -3.32292700 2.45565338\n" " -3.17023488\n" " 0.36635860 2 -4.95076405 0.84038977\n" " -0.99436259\n" " 0.76150193 1 0.19840723\n" " 0.59701503 1 -1.55056693\n" "#","\n" "Ba GTH-PBE-q10 GTH-PBE\n" " 4 6\n" " 0.54000000 2 24.52678070 -2.46867001\n" " 4\n" " 0.49206839 2 0.09515093 1.16931840\n" " -1.50958357\n" " 0.39148930 2 0.80018261 -1.61683907\n" " 1.91306979\n" " 0.67217348 1 0.38853100\n" " 0.30049773 1 -19.65379452\n" "#","\n" "La GTH-PBE-q11 GTH-PBE\n" " 4 6 1\n" " 0.53500000 2 20.68980469 -1.70327035\n" " 4\n" " 0.56144723 2 -0.02823977 1.07859821\n" " -1.39246430\n" " 0.47517309 2 0.26802268 0.67328503\n" " -0.79664160\n" " 0.62908399 1 0.38022718\n" " 0.29911708 1 -18.44354886\n" "#","\n" "Ce GTH-PBE-q12 GTH-PBE\n" " 4 6 1 1\n" " 0.52480035 2 18.46313266 -0.35928475\n" " 4\n" " 0.52899318 2 -0.46945550 1.68519941\n" " -2.17558308\n" " 0.47758674 2 -0.85915259 1.49893178\n" " -1.77356000\n" " 0.65909303 1 0.10742047\n" " 0.30186583 1 -17.66735258\n" "#","\n" "Ce GTH-PBE-q30\n" " 6 12 11 1\n" " 0.20000000 2 148.23700910 3.91725495\n" " 4\n" " 0.24060899 2 2.21770923 4.21351645\n" " -5.43962635\n" " 0.16613857 3 -4.53697472 11.78843522 0.01475880\n" " -13.92369350 -0.03492570\n" " 0.02482188\n" " 0.17161109 1 -15.00199037\n" " 0.26526997 1 -4.75946878\n" "#","\n" "Pr GTH-PBE-q13 GTH-PBE\n" " 4 6 0 3\n" " 0.53188976 2 16.83551414 -0.43235649\n" " 4\n" " 0.52415103 2 -0.50975406 1.84037783\n" " -2.37591756\n" " 0.48546735 2 -0.98189616 1.60445908\n" " -1.89842158\n" " 0.71653344 1 0.05575046\n" " 0.29937329 1 -17.49550069\n" "#","\n" "Nd GTH-PBE-q14 GTH-PBE\n" " 4 6 0 4\n" " 0.52991298 2 17.80646346 -0.32095543\n" " 4\n" " 0.50114025 2 -1.36443892 2.46474917\n" " -3.18197749\n" " 0.50039105 2 -1.55942619 1.53939247\n" " -1.82143373\n" " 0.33431765 1 -1.70064367\n" " 0.29567529 1 -18.64327128\n" "#","\n" "Pm GTH-PBE-q15 GTH-PBE\n" " 4 6 0 5\n" " 0.52793919 2 17.84482075 -0.36133182\n" " 4\n" " 0.48944396 2 -1.72725500 2.81006693\n" " -3.62778081\n" " 0.49132954 2 -1.87193192 1.65260118\n" " -1.95538409\n" " 0.47893079 1 -0.44781450\n" " 0.29022183 1 -19.51693564\n" "#","\n" "Sm GTH-PBE-q16 GTH-PBE\n" " 4 6 0 6\n" " 0.52466086 2 16.51148828 -0.24504217\n" " 4\n" " 0.48687809 2 -1.59045606 2.90667135\n" " -3.75249657\n" " 0.49648709 2 -1.75047341 1.54491665\n" " -1.82797004\n" " 0.49241328 1 -0.41980527\n" " 0.28444353 1 -19.88144667\n" "#","\n" "Eu GTH-PBE-q17 GTH-PBE\n" " 4 6 0 7\n" " 0.52072219 2 17.93467530 -0.57606530\n" " 4\n" " 0.46955990 2 -2.07710390 3.25447577\n" " -4.20151015\n" " 0.46644592 2 -2.34175427 2.29907112\n" " -2.72029763\n" " 0.47357383 1 -0.59831876\n" " 0.27831058 1 -21.30605878\n" "#","\n" "Gd GTH-PBE-q18 GTH-PBE\n" " 4 6 1 7\n" " 0.52126799 2 18.10313196 -0.51440770\n" " 4\n" " 0.45805877 2 -2.87481761 3.91661136\n" " -5.05632353\n" " 0.46124964 2 -3.05406750 2.55197375\n" " -3.01953606\n" " 0.48332992 1 -0.84348188\n" " 0.27559144 1 -22.18390606\n" "#","\n" "Tb GTH-PBE-q19 GTH-PBE\n" " 4 6 0 9\n" " 0.51588228 2 17.15783725 -0.66955170\n" " 4\n" " 0.45376626 2 -2.42821095 3.74357813\n" " -4.83293859\n" " 0.45360450 2 -2.68351507 2.30311187\n" " -2.72507871\n" " 0.47258283 1 -0.72646091\n" " 0.26876196 1 -22.75147607\n" "#","\n" "Dy GTH-PBE-q20 GTH-PBE\n" " 4 6 0 10\n" " 0.51029687 2 17.67093508 -0.86787770\n" " 4\n" " 0.44212348 2 -2.71573384 4.01788426\n" " -5.18706627\n" " 0.45017230 2 -2.77347535 2.20115245\n" " -2.60443870\n" " 0.47116514 1 -0.75227561\n" " 0.26180741 1 -24.24856414\n" "#","\n" "Ho GTH-PBE-q21 GTH-PBE\n" " 4 6 0 11\n" " 0.51034519 2 17.00694728 -1.14166376\n" " 4\n" " 0.43408065 2 -2.64595349 4.10374692\n" " -5.29791449\n" " 0.43159817 2 -3.06100899 2.73161511\n" " -3.23209058\n" " 0.45020006 1 -0.82014316\n" " 0.25514026 1 -25.40966658\n" "#","\n" "Er GTH-PBE-q22 GTH-PBE\n" " 4 6 0 12\n" " 0.50173422 2 17.22416099 -1.23324605\n" " 4\n" " 0.42576787 2 -2.61580658 4.19913757\n" " -5.42106329\n" " 0.41793960 2 -3.15341814 3.17618553\n" " -3.75811340\n" " 0.43046826 1 -0.89805056\n" " 0.24914231 1 -26.58720599\n" "#","\n" "Tm GTH-PBE-q23 GTH-PBE\n" " 4 6 0 13\n" " 0.50234443 2 17.68675860 -1.59907075\n" " 4\n" " 0.41312714 2 -3.20033933 4.64501695\n" " -5.99669110\n" " 0.41759033 2 -3.17289513 2.80513657\n" " -3.31908235\n" " 0.39281519 1 -1.44965467\n" " 0.24385920 1 -28.31696046\n" "#","\n" "Yb GTH-PBE-q24 GTH-PBE\n" " 4 6 0 14\n" " 0.49808783 2 17.08328394 -1.56295270\n" " 4\n" " 0.40553079 2 -3.55061134 5.03314458\n" " -6.49776171\n" " 0.42489671 2 -3.13538311 2.14082491\n" " -2.53305819\n" " 0.44507157 1 -0.91407703\n" " 0.23857822 1 -29.66528314\n" "#","\n" "Lu GTH-PBE-q25 GTH-PBE\n" " 4 6 1 14\n" " 0.49611621 2 18.63208417 -1.51663710\n" " 4\n" " 0.39319895 2 -5.65573977 6.47885270\n" " -8.36416287\n" " 0.41028936 2 -4.66078088 2.84645630\n" " -3.36797252\n" " 0.43890201 1 -1.52277808\n" " 0.23494399 1 -32.20596727\n" "#","\n" "Hf GTH-PBE-q12 GTH-PBE\n" " 4 6 2\n" " 0.56000000 2 15.52236567 -2.43356678\n" " 3\n" " 0.31182849 3 -10.91013059 27.37264587 -14.96156977\n" " -59.67292892 38.63060703\n" " -30.66209376\n" " 0.36196660 2 -9.65170049 9.22329739\n" " -10.91315264\n" " 0.41579070 2 -2.74891464 0.48133335\n" " -0.54578072\n" "#","\n" "Ta GTH-PBE-q13 GTH-PBE\n" " 4 6 3\n" " 0.55000000 2 13.38520167 -2.25392008\n" " 3\n" " 0.40088312 3 -4.43670899 4.17648934 1.87560787\n" " -2.34114813 -4.84279868\n" " 3.84385229\n" " 0.35654936 2 -7.62442808 8.17895534\n" " -9.67747047\n" " 0.41822925 2 -1.11356085 -0.87533080\n" " 0.99253183\n" "#","\n" "Ta GTH-PBE-q5\n" " 2 0 3\n" " 0.74400000 1 9.83934257\n" " 3\n" " 0.45239666 2 6.12338066 -2.16890335\n" " 2.80004218\n" " 0.75164390 2 1.64970103 -2.51481038\n" " 2.97556377\n" " 0.50114181 2 -12.42334477 9.01473381\n" " -10.22174735\n" "#","\n" "W GTH-PBE-q14 GTH-PBE\n" " 4 6 4\n" " 0.54000000 2 13.41481123 -2.21345603\n" " 3\n" " 0.39702790 3 -4.14121089 3.83542346 2.23317927\n" " -1.31924404 -5.76604408\n" " 4.57665561\n" " 0.35353069 2 -7.45623626 8.11232637\n" " -9.59863401\n" " 0.41210703 2 -0.95466075 -1.06744623\n" " 1.21037026\n" "#","\n" "W GTH-PBE-q6\n" " 2 0 4\n" " 0.71900000 1 10.69989013\n" " 3\n" " 0.46755372 2 5.80350289 -2.07063257\n" " 2.67317516\n" " 0.72666463 2 1.78871915 -2.55415819\n" " 3.02212073\n" " 0.49929065 2 -10.59832562 6.44789319\n" " -7.31122365\n" "#","\n" "Re GTH-PBE-q15 GTH-PBE\n" " 4 6 5\n" " 0.53000000 2 13.46263143 -2.23492240\n" " 3\n" " 0.39380077 3 -3.71748055 3.15477903 2.85593500\n" " 0.57237640 -7.37399245\n" " 5.85292506\n" " 0.35253332 2 -7.05340425 7.56675835\n" " -8.95310922\n" " 0.40186765 2 -0.90002359 -1.14917105\n" " 1.30303749\n" "#","\n" "Re GTH-PBE-q7\n" " 2 0 5\n" " 0.69300000 1 11.96194160\n" " 3\n" " 0.46331539 2 6.08700876 -2.19137969\n" " 2.82905901\n" " 0.70964824 2 1.81506156 -2.35412193\n" " 2.78543463\n" " 0.47606454 2 -12.39371002 8.00629664\n" " -9.07828707\n" "#","\n" "Os GTH-PBE-q16 GTH-PBE\n" " 4 6 6\n" " 0.52000000 2 13.46303008 -2.24116983\n" " 3\n" " 0.39012207 3 -3.27416829 2.36003137 3.61101851\n" " 2.82653464 -9.32360969\n" " 7.40038577\n" " 0.34945025 2 -6.89928214 7.52931882\n" " -8.90881017\n" " 0.39284207 2 -0.94268282 -1.08157042\n" " 1.22638558\n" "#","\n" "Os GTH-PBE-q8\n" " 2 0 6\n" " 0.66700000 1 13.07904899\n" " 3\n" " 0.49576015 2 4.35033878 -1.49680274\n" " 1.93236403\n" " 0.70116140 2 1.81669550 -1.99815917\n" " 2.36425382\n" " 0.47117333 2 -10.99598697 5.97918090\n" " -6.77975387\n" "#","\n" "Ir GTH-PBE-q17 GTH-PBE\n" " 4 6 7\n" " 0.51000000 2 13.41080576 -2.34194822\n" " 3\n" " 0.38726411 3 -2.51628491 1.05519006 4.67505628\n" " 6.24173509 -12.07094340\n" " 9.58101430\n" " 0.34608307 2 -6.52615069 7.35318392\n" " -8.70040455\n" " 0.37881290 2 -0.85595250 -1.17535111\n" " 1.33272289\n" "#","\n" "Ir GTH-PBE-q9\n" " 2 0 7\n" " 0.64100000 1 14.58181397\n" " 3\n" " 0.51010474 2 3.71524999 -1.26263745\n" " 1.63005794\n" " 0.68489160 2 1.91910152 -1.89619458\n" " 2.24360769\n" " 0.47173508 2 -8.85603130 3.17025312\n" " -3.59472915\n" "#","\n" "Pt GTH-PBE-q10\n" " 1 0 9\n" " 0.61600000 1 11.31363525\n" " 3\n" " 0.55090426 2 4.73349110 -1.78459401\n" " 2.30390096\n" " 0.67413781 2 2.53479850 -1.77806555\n" " 2.10383553\n" " 0.45739243 2 -7.26401101 2.55866480\n" " -2.90125318\n" "#","\n" "Pt GTH-PBE-q18 GTH-PBE\n" " 3 6 9\n" " 0.50000000 2 8.81432324 -0.29250943\n" " 3\n" " 0.29800221 3 -5.96838498 24.21289966 -13.78967932\n" " -53.68763413 35.60479890\n" " -28.26043301\n" " 0.36017182 3 -6.66865904 7.17065922 0.76690370\n" " -7.20766072 -1.81482538\n" " 1.28980604\n" " 0.34053206 2 -8.58990455 9.41012200\n" " -10.67007542\n" "#","\n" "Au GTH-PBE-q11 GTH-PBE\n" " 1 0 10\n" " 0.59000000 1 10.51717881\n" " 3\n" " 0.54384733 2 5.78681103 -2.25067966\n" " 2.90561495\n" " 0.60917298 2 4.28404873 -4.07128520\n" " 4.81720962\n" " 0.43730922 2 -7.40328124 3.01019307\n" " -3.41323811\n" "#","\n" "Au GTH-PBE-q19\n" " 3 6 10\n" " 0.49000000 1 8.36945885\n" " 3\n" " 0.29008402 3 -5.98869002 26.10502137 -15.17621948\n" " -58.38556050 39.18483021\n" " -31.10199477\n" " 0.36150576 3 -5.87695332 4.73144606 2.92710526\n" " -0.72513863 -6.92679530\n" " 4.92291022\n" " 0.34037313 2 -8.80458432 9.49191532\n" " -10.76282032\n" "#","\n" "Hg GTH-PBE-q12 GTH-PBE\n" " 2 0 10\n" " 0.57000000 1 8.46784734\n" " 3\n" " 0.52978669 2 7.37124306 -2.96994403\n" " 3.83418126\n" " 0.63516596 2 3.55116141 -1.72290935\n" " 2.03857383\n" " 0.40798543 2 -8.61398015 5.00756120\n" " -5.67804069\n" "#","\n" "Tl GTH-PBE-q13 GTH-PBE\n" " 2 1 10\n" " 0.55000000 1 12.29058515\n" " 3\n" " 0.51280306 2 7.19017017 -2.86301073\n" " 3.69613096\n" " 0.57711505 2 4.76094580 -3.67332496\n" " 4.34633671\n" " 0.39323001 2 -11.01268700 6.42159202\n" " -7.28140093\n" "#","\n" "Tl GTH-PBE-q3\n" " 2 1\n" " 0.63000000 1 1.45272083\n" " 3\n" " 0.78076788 3 0.37973043 1.20912802 -0.45856792\n" " -2.30683834 1.18401727\n" " -0.93978457\n" " 0.89705009 2 -0.02423596 0.58235582\n" " -0.68905269\n" " 1.09379194 1 0.22764152\n" "#","\n" "Pb GTH-PBE-q14\n" " 2 2 10\n" " 0.53000000 1 12.57214281\n" " 3\n" " 0.49554891 2 8.42980665 -3.44005610\n" " 4.44109332\n" " 0.56934785 2 4.98150638 -2.89639920\n" " 3.42706575\n" " 0.40422413 2 -6.81491262 1.83782673\n" " -2.08389964\n" "#","\n" "Pb GTH-PBE-q4 GTH-PBE\n" " 2 2\n" " 0.61750000 1 4.67238428\n" " 3\n" " 0.62235881 3 0.87991768 2.08114784 -1.43125710\n" " -5.01469016 3.69548994\n" " -2.93320421\n" " 0.81200202 2 0.15345679 0.47889785\n" " -0.56663958\n" " 1.02501525 1 0.30170206\n" "#","\n" "Bi GTH-PBE-q15\n" " 2 3 10\n" " 0.51000000 1 13.39622231\n" " 3\n" " 0.48120446 2 9.54548100 -3.94511418\n" " 5.09312050\n" " 0.54894636 2 5.63359371 -3.17713769\n" " 3.75924002\n" " 0.39730251 2 -6.03753705 0.92523553\n" " -1.04911848\n" "#","\n" "Bi GTH-PBE-q5 GTH-PBE\n" " 2 3\n" " 0.60500000 1 7.94575692\n" " 3\n" " 0.58223216 3 0.64373527 2.24761617 -1.44060063\n" " -5.24479711 3.71961484\n" " -2.95235275\n" " 0.76639400 2 0.21253292 0.37983417\n" " -0.44942585\n" " 0.96565479 1 0.34729822\n" "#","\n" "Po GTH-PBE-q6 GTH-PBE\n" " 2 4\n" " 0.59250000 1 8.13432566\n" " 3\n" " 0.80422357 3 0.32633408 0.10539986 0.52809414\n" " 0.72287456 -1.36353322\n" " 1.08227094\n" " 0.81703652 2 0.15801481 0.37530247\n" " -0.44406387\n" " 0.89014943 1 0.46253238\n" "#","\n" "At GTH-PBE-q7 GTH-PBE\n" " 2 5\n" " 0.58000000 1 14.21716853\n" " 3\n" " 0.66580683 3 -0.37891203 0.66112626 0.27884944\n" " -0.39996168 -0.71998616\n" " 0.57147130\n" " 0.65241195 2 0.26704745 0.32622823\n" " -0.38599845\n" " 0.85406059 1 0.45259467\n" "#","\n" "Rn GTH-PBE-q8 GTH-PBE\n" " 2 6\n" " 0.57000000 1 16.20061781\n" " 3\n" " 0.63480802 3 -0.58199405 0.80312797 0.29738605\n" " -0.55313531 -0.76784748\n" " 0.60946004\n" " 0.64710877 2 0.16927880 0.30517348\n" " -0.36108613\n" " 0.80634271 1 0.51103874\n" "#","\n" "U GTH-PBE-q14\n" " 4 6 1 3\n" " 0.48000000 2 48.86182633 -4.59713581\n" " 4\n" " 0.51405537 3 -0.65017014 -1.15225083 1.84763553\n" " 4.49272884 -4.77057442\n" " 3.78652606\n" " 0.40934387 3 3.58555843 -6.88134873 4.03097788\n" " 14.85308504 -9.53903470\n" " 6.77944264\n" " 0.67885536 2 0.53789816 0.48180765\n" " -0.54631852\n" " 0.32134043 1 -16.65115610\n" "#","\n" "B GTH-PBESol-q3 GTH-PBESol\n" " 2 1\n" " 0.42188166 2 -5.99194495 0.94658199\n" " 2\n" " 0.37186069 1 6.29208376\n" " 0.36287582 0\n" "#","\n" "H GTH-OLYP-q1 GTH-OLYP\n" " 1\n" " 0.20000000 2 -4.16025705 0.71696182\n" " 0\n" "#","\n" "B GTH-OLYP-q3\n" " 2 1\n" " 0.40824397 2 -5.84551716 0.92100194\n" " 2\n" " 0.37035120 1 6.31003106\n" " 0.35773831 0\n" "#","\n" "C GTH-OLYP-q4\n" " 2 2\n" " 0.33266812 2 -8.65195820 1.32052627\n" " 2\n" " 0.30204607 1 9.62061855\n" " 0.29182215 0\n" "#","\n" "N GTH-OLYP-q5\n" " 2 3\n" " 0.28091145 2 -12.16718730 1.82099926\n" " 2\n" " 0.25510834 1 13.61560292\n" " 0.24679335 0\n" "#","\n" "O GTH-OLYP-q6 GTH-OLYP\n" " 2 4\n" " 0.24340006 2 -16.34721549 2.41772603\n" " 2\n" " 0.22079018 1 18.31443918\n" " 0.22008988 0\n" "#","\n" "F GTH-OLYP-q7\n" " 2 5\n" " 0.21382039 2 -21.28598900 3.12167577\n" " 2\n" " 0.19453412 1 23.73308173\n" " 0.16302766 0\n" "#","\n" "P GTH-OLYP-q5\n" " 2 3\n" " 0.43000000 1 -4.69763642\n" " 2\n" " 0.39666347 2 10.63544240 -3.29388139\n" " 4.25238258\n" " 0.44942590 1 2.88712442\n" "#","\n" "S GTH-OLYP-q6\n" " 2 4\n" " 0.42000000 1 -5.70095751\n" " 2\n" " 0.36360282 2 13.23499116 -4.28266416\n" " 5.52889566\n" " 0.40854250 1 3.70359686\n" "#","\n" "Cl GTH-OLYP-q7\n" " 2 5\n" " 0.41000000 1 -6.18936120\n" " 2\n" " 0.33820768 2 15.35745265 -4.99108675\n" " 6.44346529\n" " 0.37732312 1 4.35487695\n" "#","\n" "H GTH-HF-q1 GTH-HF\n" " 1 0 0 0\n" " 0.196680577426 2 -4.122010670148 0.685113494453\n" " 0\n" "#","\n" "C GTH-HF-q4 GTH-HF\n" " 2 2 0 0\n" " 0.315416975333 2 -8.867306339232 1.255277018021\n" " 1\n" " 0.301022709314 1 9.800185699152\n" "#","\n" "N GTH-HF-q5 GTH-HF\n" " 2 3 0 0\n" " 0.293004428534 2 -12.353673551345 1.940376934223\n" " 1\n" " 0.255011990622 1 13.748056543074\n" "#","\n" "O GTH-HF-q6 GTH-HF\n" " 2 4 0 0\n" " 0.246496621432 2 -17.087623980861 2.645053514530\n" " 1\n" " 0.220770923508 1 18.522680682057\n" "#","\n" "Al GTH-NLCC-PBE-q3 GTH-NLCC-PBE\n" " 2 1 \n" " 0.35000000 2 -1.20404111 -2.14848844 \n" " NLCC 1\n" " 0.487749457320947 1 26.6661157296629\n" " 2 \n" " 0.46845918 2 2.69261923 0.00000000\n" " 2.15425102\n" " 0.54697362 1 2.13803860 \n" "#","\n" "B GTH-NLCC-PBE-q3 GTH-NLCC-PBE\n" " 2 1\n" " 0.43249960 2 -4.26853158 0.59951279\n" " NLCC 1 \n" " 0.333523099251602 1 18.6519880515354\n" " 1 \n" " 0.37147150 1 6.30164101 \n" "#","\n" "C GTH-NLCC-PBE-q4 GTH-NLCC-PBE\n" " 2 2\n" " 0.31478662 2 -6.92377020 0.96359690\n" " NLCC 1 \n" " 0.274399357915869 1 58.7058349842360\n" " 2 \n" " 0.30228391 1 9.57595383 \n" " 0.36878252 1 -0.00996437 \n" "#","\n" "Cl GTH-NLCC-PBE-q7 GTH-NLCC-PBE\n" " 2 5\n" " 0.32000000 1 -0.27448290\n" " NLCC 1\n" " 0.42147846 1 31.2490172184\n" " 2\n" " 0.32659110 2 4.20335702 0.00000000\n" " 4.55651710\n" " 0.36756872 1 4.22907835\n" "#","\n" "F GTH-NLCC-PBE-q7 GTH-NLCC-PBE\n" " 2 5\n" " 0.20610323 2 -19.86716500 2.79308907\n" " NLCC 1 \n" " 0.171542709683482 1 193.635582221771\n" " 1 \n" " 0.19518097 1 23.47047311 \n" "#","\n" "H GTH-NLCC-PBE-q1 GTH-NLCC-PBE\n" " 1 \n" " 0.20000000 2 -4.07311634 0.68070153 \n" " 0 \n" "#","\n" "N GTH-NLCC-PBE-q5 GTH-NLCC-PBE\n" " 2 3\n" " 0.24179589 2 -10.04328500 1.39719020 \n" " NLCC 1 \n" " 0.246115465086927 1 70.6868378070653\n" " 2 \n" " 0.25696561 1 12.96801666 \n" " 0.15685548 1 -0.73452991 \n" "#","\n" "O GTH-NLCC-PBE-q6 GTH-NLCC-PBE\n" " 2 4\n" " 0.26099935 2 -14.15180600 1.97829510 \n" " NLCC 1 \n" " 0.252338420313492 1 44.0109866619909\n" " 2 \n" " 0.22308282 1 18.37181432 \n" " 0.26844098 1 0.10003633 \n" "#","\n" "P GTH-NLCC-PBE-q5 GTH-NLCC-PBE\n" " 2 3\n" " 0.34000000 2 -1.62258310 -0.72412131 \n" " NLCC 1 \n" " 0.398676358021430 1 57.5022588665043\n" " 2 \n" " 0.38208906 2 3.47753509 -0.01266608\n" " 3.47461367\n" " 0.43410975 1 3.37859278 \n" "#","\n" "S GTH-NLCC-PBE-q6 GTH-NLCC-PBE\n" " 2 4\n" " 0.33000000 2 1.49042820 -0.73313881 \n" " NLCC 1 \n" " 0.386218088400348 1 79.6359982164901\n" " 2 \n" " 0.37045712 2 6.18604810 0.00000000\n" " 2.57760787\n" " 0.39772434 1 3.89113272 \n" "#","\n" "Si GTH-NLCC-PBE-q4 GTH-NLCC-PBE\n" " 2 2\n" " 0.33000000 2 -0.07845999 -0.79378214 \n" " NLCC 1\n" " 0.442792079831528 1 38.1776559763904\n" " 2 \n" " 0.42179461 2 2.87392223 0.02558827\n" " 2.59458148\n" " 0.48800255 1 2.47962806\n" "#","\n" "H ALLELECTRON ALL\n" " 1 0 0\n" " 0.20000000 0\n" "#","\n" "He ALLELECTRON ALL\n" " 2 0 0 \n" " 0.20000000 0\n" "#","\n" "Li ALLELECTRON ALL\n" " 3 0 0 \n" " 0.40000000 0\n" "#","\n" "Be ALLELECTRON ALL\n" " 4 0 0 \n" " 0.32500000 0\n" "#","\n" "B ALLELECTRON ALL\n" " 4 1 0\n" " 0.43392956 0\n" "#","\n" "C ALLELECTRON ALL\n" " 4 2 0\n" " 0.34883045 0\n" "#","\n" "N ALLELECTRON ALL\n" " 4 3 0\n" " 0.28917923 0\n" "#","\n" "O ALLELECTRON ALL\n" " 4 4 0\n" " 0.24762086 0\n" "#","\n" "F ALLELECTRON ALL\n" " 4 5 0\n" " 0.21852465 0\n" "#","\n" "Ne ALLELECTRON ALL\n" " 4 6 0\n" " 0.19000000 0\n" "#","\n" "Na ALLELECTRON ALL\n" " 5 6 0\n" " 0.24631780 0\n" "#","\n" "Mg ALLELECTRON ALL\n" " 6 6 0\n" " 0.21094954 0\n" "#","\n" "Al ALLELECTRON ALL\n" " 6 7 0\n" " 0.45000000 0\n" "#","\n" "Si ALLELECTRON ALL\n" " 6 8 0\n" " 0.44000000 0\n" "#","\n" "P ALLELECTRON ALL\n" " 6 9 0\n" " 0.43000000 0\n" "#","\n" "S ALLELECTRON ALL\n" " 6 10 0\n" " 0.42000000 0\n" "#","\n" "Cl ALLELECTRON ALL\n" " 6 11 0\n" " 0.41000000 0\n" "#","\n" "Ar ALLELECTRON ALL\n" " 6 12 0\n" " 0.40000000 0\n" "#","\n" "K ALLELECTRON ALL\n" " 7 12 0\n" " 0.40000000 0\n" "#","\n" "Ca ALLELECTRON ALL\n" " 8 12 0\n" " 0.39000000 0\n" "#","\n" "Sc ALLELECTRON ALL\n" " 8 12 1\n" " 0.38500000 0\n" "#","\n" "Ti ALLELECTRON ALL\n" " 8 12 2\n" " 0.3800000 0\n" "#","\n" "V ALLELECTRON ALL\n" " 8 12 3\n" " 0.37500000 0\n" "#","\n" "Cr ALLELECTRON ALL\n" " 8 12 4\n" " 0.37000000 0\n" "#","\n" "Mn ALLELECTRON ALL\n" " 8 12 5\n" " 0.36500000 0\n" "#","\n" "Fe ALLELECTRON ALL\n" " 8 12 6\n" " 0.36000000 0\n" "#","\n" "Co ALLELECTRON ALL\n" " 8 12 7\n" " 0.35500000 0\n" "#","\n" "Ni ALLELECTRON ALL\n" " 8 12 8\n" " 0.35000000 0\n" "#","\n" "Cu ALLELECTRON ALL\n" " 8 12 9\n" " 0.53000000 0\n" "#","\n" "Zn ALLELECTRON ALL\n" " 8 12 10\n" " 0.34000000 0\n" "#","\n" "Ga ALLELECTRON ALL\n" " 8 13 10\n" " 0.49000000 0\n" "#","\n" "Ge ALLELECTRON ALL\n" " 8 14 10\n" " 0.54000000 0\n" "#","\n" "As ALLELECTRON ALL\n" " 8 15 10\n" " 0.52000000 0\n" "#","\n" "Se ALLELECTRON ALL\n" " 8 16 10\n" " 0.51000000 0\n" "#","\n" "Br ALLELECTRON ALL\n" " 8 17 10\n" " 0.50000000 0\n" "#","\n" "Kr ALLELECTRON ALL\n" " 8 18 10\n" " 0.50000000 0\n" "#","\n" "I ALLELECTRON ALL\n" " 10 23 20\n" " 0.50000000 0\n" }; Atomes-GNU-1.1.14/src/calc/cp2k/cp2k_print.c000066400000000000000000001325261457665371200202550ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cp2k_print.c * @short Functions to print the CP2K input file(s) * @author Sébastien Le Roux */ /* * This file: 'cp2k_print.c' * * Contains: * - The functions to print the CP2K input file(s) * * List of functions: gchar * cp2kbool (double opt); void print_cp2k_var (gchar * var, GtkTextBuffer * buffer); void print_var_section (int num, gchar ** section, GtkTextBuffer * buffer); void print_thermostat_cp2k (int n_thermo, GtkTextBuffer * buffer); void print_motion_cp2k (int m, GtkTextBuffer * buffer); void print_coord_cp2k (GtkTextBuffer * buffer); void print_subsys_cp2k (GtkTextBuffer * buffer); void print_variables_cp2k (GtkTextBuffer * buffer); void print_global_cp2k (GtkTextBuffer * buffer); void print_cp2k_print (gchar * spaces, gchar * info, int i, int j, GtkTextBuffer * buffer); void print_cp2k (int f, GtkTextBuffer * buffer); */ #include "global.h" #include "interface.h" #include "calc.h" #include "cp2k.h" gchar * globopts[49] = {"@SET SYSTEM ", // 0 | - char "@SET RUN ", // 1 | 0 - char(int) "@SET CPU_TIME ", // 2 | 1 - int "@SET PRINT ", // 3 | 2 - char(int) "@SET USE_RESTART ", // 4 | 3 - bool(int) "@SET RESTART_FILE ", // 5 | 4 - char "@SET BASIS_FILE ", // 6 | 5 - char "@SET PSEUDO_FILE ", // 7 | 6 - char "@SET WAVE_FILE ", // 8 | 7 - char "@SET CHARGE ", // 9 | 8 - int "@SET CUTOFF ", // 10 | 9 - double "@SET GRIDS ", // 11 | 10 - int "@SET QS_METHOD ", // 12 | 11 - char(int) "@SET SCF_GUESS ", // 13 | 12 - char(int) "@SET SCF_NCYCLES ", // 13 | 13 - int "@SET SCF_NCONV ", // 14 | 14 - double "@SET SCF_OCYCLES ", // 16 | 15 - int "@SET SCF_OCONV ", // 17 | 16 - double "@SET OT_MINI ", // 18 | 17 - char(int) "@SET FUNCTIONAL ", // 19 | 18 - char(int) "@SET PBC ", // 20 | 29 - char(int) "@SET SYM ", // 21 | 31 - int "@SET A ", // 22 | - double "@SET B ", // 23 | - double "@SET C ", // 24 | - double "@SET ALPHA ", // 25 | - double "@SET BETA ", // 26 | - double "@SET GAMMA ", // 27 | - double "@SET AX ", // 28 | - double "@SET AY ", // 29 | - double "@SET AZ ", // 30 | - double "@SET BX ", // 31 | - double "@SET BY ", // 32 | - double "@SET BZ ", // 33 | - double "@SET CX ", // 34 | - double "@SET CY ", // 35 | - double "@SET CZ ", // 36 | - double "@SET COORD_FILE ", // 37 | - char "@SET MD_ENSEMBLE ", // 38 | 32 - char(int) "@SET MD_STEPS ", // 39 | 34 - int "@SET MD_DELTA_T ", // 40 | 35 - double "@SET MD_TEMP ", // 41 | 36 - double "@SET GEO_MINI ", // 42 | 37 - char(int) "@SET GEO_STEPS ", // 43 | 38 - int "@SET GEO_CONV ", // 44 | 39 - double "@SET OUT_STEPS ", // 45 | 40 - int "@SET OUT_UNIT ", // 46 | 42 - char(int) "@SET OUT_FORM ", // 47 | XYZ "@SET OUT_UNIT "};// 48 | Angstrom gchar * cp2kglobal[9] = {"&GLOBAL\n" " PROJECT_NAME ","SYSTEM", "\n RUN_TYPE ","RUN", "\n PRINT_LEVEL ","PRINT", "\n WALLTIME ","CPU_TIME", "\n&END GLOBAL\n"}; gchar * cp2krestart[7] = {"@IF ( ","USE_RESTART"," == TRUE )\n" " &EXT_RESTART ON\n" " RESTART_DEFAULT F\n" " RESTART_FILE_NAME ","RESTART_FILE", "\n RESTART_POS T\n" " RESTART_COUNTERS T\n" " @IF ( ","RUN"," == MOLECULAR_DYNAMICS )\n" " RESTART_VEL T\n" " RESTART_THERMOSTAT T\n" " @ENDIF\n" " &END EXT_RESTART\n" "@ENDIF\n"}; gchar * cp2kfev[8][17] = {{"!\n" "! Always a FORCE_EVAL section that describes\n" "! the method to compute energy and forces\n" "!\n" "&FORCE_EVAL\n" " METHOD QUICKSTEP\n" " &DFT\n" "! First specify files that will be used thereafter \n" " BASIS_SET_FILE_NAME ", "BASIS_FILE", "\n POTENTIAL_FILE_NAME ", "PSEUDO_FILE", "\n@IF ( ","USE_RESTART"," == TRUE )\n" " WFN_RESTART_FILE_NAME ","WAVE_FILE", "\n@ENDIF\n" " CHARGE ","CHARGE", "\n! Going to the Multi-grids section\n" " &MGRID\n" " CUTOFF ","CUTOFF"," ! => Cutoff of the finest grid level\n" " NGRIDS ","GRIDS"," ! => Number of multigrids to use, default = 4\n" " &END MGRID\n" "! Going to the Quickstep Setup section\n" " &QS\n" " METHOD ","QS_METHOD", "\n EPS_DEFAULT 1.0E-12 ! => Default value is 1.0E-10\n" " MAP_CONSISTENT TRUE ! => This is the default value\n"}, {" EXTRAPOLATION_ORDER 3 ! => This is the default value\n" " &END QS\n"}, {"! Going to the Self Consistent Field section\n" " &SCF\n" "! Maximum number of cycle\n" " SCF_GUESS ","SCF_GUESS"," ! => Initial guess for the wave-function\n" " MAX_SCF ","SCF_NCYCLES"," ! => Maximum number of SCF cycles\n" " EPS_SCF ","SCF_NCONV"," ! => Threshold for the SCF convergence\n" "! If after the ${SCF_NCYCLES} first SCF steps no convergence has been reached\n" "! more SCF cycles can be done updating the preconditioner. \n" "! Detail information is then presented in the 'Outer' SCF section\n" " &OUTER_SCF\n" " MAX_SCF ","SCF_OCYCLES"," ! => We update the preconditioner and start a new SCF cycle\n" " ! up to ${SCF_NCYCLES} x ${SCF_OCYCLES} can be computed\n" " EPS_SCF ","SCF_OCONV"," ! => Convergence threshold for the extra cycles\n" " &END OUTER_SCF\n\n" "! Going to the Orbital Transformation section\n" " &OT ON\n" " MINIMIZER ","OT_MINI", "\n PRECONDITIONER FULL_ALL ! => Preconditioner for the minimization scheme,\n" " ! FULL_ALL is the most effective state selective\n" " ! preconditioner and is based on diagonalization\n" " ENERGY_GAP 0.001 ! => Underestimated value of the Gap (HOMO-LUMO) in a.u.\n" " ! to be used with the FULL_ALL preconditioner\n" " &END OT\n\n" " &PRINT\n" "! To tune the printing of the restart file\n" " &RESTART\n" " LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n" " &EACH\n" " QS_SCF 0 ! => Never write restart file(s) during the SCF cycle\n"}, {" &END EACH\n" " ADD_LAST NUMERIC\n" " &END RESTART\n"}, {" &END PRINT\n\n" " &END SCF\n" "! Going to the exchange-correlation section\n" " &XC\n" " &XC_FUNCTIONAL ","FUNCTIONAL", "\n &END XC_FUNCTIONAL\n"}, {" &END XC\n"}, {"! Spin polarized calculation\n" " UKS ","SPIN_POLARIZED", "\n MULTIPLICITY ", "SPIN_MULTIPLICITY"}, {" &END DFT\n"}}; gchar * qs_extrapo[2]={" EXTRAPOLATION ASPC ! => ASPC recommended for MD, PS otherwise\n", " EXTRAPOLATION PS ! => ASPC recommended for MD, PS otherwise\n"}; gchar * scf_wrestart[3][3]={{"JUST_ENERGY ","OUT_STEPS"," ! => Write restart file every ${OUT_STEPS} SCF steps\n"}, {"GEO_OPT ","OUT_STEPS"," ! => Write restart file every ${OUT_STEPS} GEO_OPT steps\n"}, {"MD ","OUT_STEPS"," ! => Write restart file every ${OUT_STEPS} MD steps\n"}}; gchar * cp2kincludes[3] = {"forces.inc", "system.inc", "motion.inc"}; gchar * thermostatr[4] = {"\n &THERMOSTAT\n", " TYPE ", "\n REGION ", " &END THERMOSTAT"}; gchar * cp2k_thermo[4] = {"AD_LANGEVIN", "CSVR", "GLE", "NOSE"}; gchar * thermo_region[3] = {"GLOBAL", "DEFINED", "MOLECULE"}; gchar * define_region[4] = {"\n &DEFINE_REGION", "\n LIST", "\n MOLECULE", "\n &END DEFINE_REGION"}; gchar * thermo_type[4][5] = {{"\n &AD_LANGEVIN" "\n TIMECON_LANGEVIN ", "\n TIMECON_NH ", "\n &CHI ", "\n &END CHI" "\n &MASS ", "\n &END MASS" "\n &END AD_LANGEVIN\n"}, {"\n &CSVR" "\n TIMECON ", "\n &END CSVR\n"}, {"\n"}, {"\n &NOSE" "\n LENGTH ", "\n MTS ", "\n TIMECON ", "\n YOSHIDA ", "\n &END NOSE\n"}}; gchar * cp2kmotion[4][15] = {{"&MOTION\n\n" " &GEO_OPT\n" " MINIMIZER ","GEO_MINI", "\n MAX_ITER ","GEO_STEPS", "\n MAX_FORCE ","GEO_CONV", "\n &END GEO_OPT\n" " &PRINT\n" " &RESTART\n" " LOG_PRINT_KEY T\n" " &EACH\n" " GEO_OPT ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END RESTART\n" " &TRAJECTORY\n" " LOG_PRINT_KEY T\n" " FORMAT XYZ\n" " &EACH\n" " GEO_OPT ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END TRAJECTORY\n" " &END PRINT\n"}, {"&MOTION\n\n" " &MD\n" " ENSEMBLE ","MD_ENSEMBLE", "\n STEPS ","MD_STEPS", "\n TIMESTEP ","MD_DELTA_T", "\n TEMPERATURE ","MD_TEMP"}, {"\n &END MD\n\n" " &PRINT\n" " &RESTART\n" " LOG_PRINT_KEY T\n" " &EACH\n" " MD ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END RESTART\n\n" " &TRAJECTORY\n" " LOG_PRINT_KEY T\n" " FORMAT ","OUT_FORM", "\n UNIT ","OUT_UNIT", "\n &EACH\n" " MD ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END TRAJECTORY\n\n" " &VELOCITIES\n" " LOG_PRINT_KEY T\n" " FORMAT ","OUT_FORM", "\n UNIT ","OUT_UNIT", "\n &EACH\n" " MD ","OUT_STEPS", "\n &END EACH\n" " ADD_LAST NUMERIC\n" " &END VELOCITIES\n" " &END PRINT\n"}, {"\n&END MOTION"}}; gchar * cp2ksyst[3][3] = {{"!\n" "! Always a SUBSYS section that describes\n" "! the chemistry and the periodicity of the system\n" "!\n" "&SUBSYS\n" " &CELL\n" " PERIODIC ","PBC","\n"}, {"\n &END CELL\n" " &COORD","\n &END COORD\n" }, {"\n &END CELL\n" " &TOPOLOGY\n" "! Using an XYZ file, coordinates are always Cartesian and in angstrom\n" " COORDINATE XYZ\n" " COORD_FILE_NAME ","COORD_FILE", "\n &END TOPOLOGY\n"}}; gchar * cp2klat[2][19] = {{" ABC ","A"," ","B"," ","C", "\n ALPHA_BETA_GAMMA ","ALPHA"," ","BETA"," ","GAMMA", "\n SYMMETRY ","SYM"," "," "," "," "," "}, {" A ","AX"," ","AY"," ","AZ", "\n B ","BX"," ","BY"," ","BZ", "\n C ","CX"," ","CY"," ","CZ","\n"}}; gchar * cp2kspin[2] = {"@SET SPIN_POLARIZED ", "@SET SPIN_MULTIPLICITY "}; gchar * cp2ksroks[3] = {"@SET ROKS ", "@SET ROKS_SCALING ", "@SET ROKS_SPIN_CONFIG "}; gchar * cp2kroks[7] = {" ROKS ","ROKS"," ! => Restricted Open Kohn-Sham calculation\n" " &LOW_SPIN_ROKS\n" " ENERGY_SCALING ","ROKS_SCALING", "\n SPIN_CONFIGURATION ", "ROKS_SPIN_CONFIG", "\n &END LOW_SPIN_ROKS\n"}; gchar * cp2kmocu[3] = {"@SET NUM_HOMO ", "@SET NUM_LUMO ", "@SET CUBES "}; gchar * cp2kmocubes[7] = {" NHOMO ","NUM_HOMO", "\n NLUMO ","NUM_LUMO", "\n WRITE_CUBES ","CUBES", "\n"}; gchar * cp2ksvdw[4] = {"@SET VDW_FCT ", "@SET VDW_TYPE ", "@SET VDW_CUTOFF ", "@SET VDW_LONG "}; gchar * cp2kvdw[4][7] = {{" &VDW_POTENTIAL\n" " POTENTIAL_TYPE ", "VDW_FCT", "\n "}, {"&NON_LOCAL\n" " TYPE ", "VDW_TYPE", "\n CUTOFF ", "VDW_CUTOFF", "\n &END NON_LOCAL\n"}, {"&PAIR_POTENTIAL\n" " TYPE ", "VDW_TYPE", "\n R_CUTOFF ", "VDW_CUTOFF", "\n LONG_RANGE_CORRECTION ","VDW_LONG", "\n &END PAIR_POTENTIAL\n"}, {" &END VDW_POTENTIAL\n"}}; gchar * vdw_fct[2] = {"NON_LOCAL", "PAIR_POTENTIAL"}; gchar * cp2k_cons[2] = {"\n &CONSTRAINT\n", " &END CONSTRAINT\n"}; gchar * cp2k_fix[4] = {" &FIXED_ATOMS\n COMPONENTS_TO_FIX ", " LIST", " MOLNAME", "\n &END FIXED_ATOMS\n"}; /*! \fn void print_cp2k_var (gchar * var, GtkTextBuffer * buffer) \brief print a CP2K variable name \param var the variable name \param buffer the GtkTextBuffer to print into */ void print_cp2k_var (gchar * var, GtkTextBuffer * buffer) { print_info ("${", "bold", buffer); print_info (var, "bold_blue", buffer); print_info ("}", "bold", buffer); } /*! \fn void print_var_section (int num, gchar ** section, GtkTextBuffer * buffer) \brief print CP2K input file variable section \param num the number of element(s) to print \param section the section text \param buffer the GtkTextBuffer to print into */ void print_var_section (int num, gchar ** section, GtkTextBuffer * buffer) { int i; for (i=0; i ions_thermostat; for (i=0; i 1) { str = g_strdup_printf ("\n! Thermostat N°%d", i+1); print_info (str, NULL, buffer); g_free (str); } print_info (thermostatr[0], NULL, buffer); print_info (thermostatr[1], NULL, buffer); print_info (cp2k_thermo[thermo -> type-1], "red", buffer); print_info (thermostatr[2], NULL, buffer); print_info (thermo_region[thermo -> sys], "red", buffer); if (thermo -> sys > 0) { print_info (define_region[0], NULL, buffer); print_info (define_region[thermo -> sys], NULL, buffer); if (thermo -> sys == 1) { l = 0; for (j=0; j < qm_proj-> nspec; j++) { for (k=0; k < qm_proj-> natomes; k++) { if (qm_proj -> atoms[0][k].sp == j) { l++; for (m=0; m < thermo -> natoms; m++) { if (thermo -> list[m] == k) { str = g_strdup_printf (" %d", l); print_info (str, "red", buffer); g_free (str); } } } } } } else { str = g_strdup_printf (" MOL-%d", thermo -> natoms+1); print_info (str, "red", buffer); g_free (str); } print_info (define_region[3], NULL, buffer); } for (j=0; j type]; j++) { print_info (thermo_type[thermo -> type-1][j], NULL, buffer); if (thermo -> type == 4 && j != 2) { str = g_strdup_printf ("%d", (int)thermo -> params[j]); } else { str = g_strdup_printf ("%f", thermo -> params[j]); } print_info (str, "red", buffer); g_free (str); } print_info (thermo_type[thermo -> type-1][j], NULL, buffer); if (thermo -> next != NULL) thermo = thermo -> next; } print_info (thermostatr[3], NULL, buffer); } /*! \fn void print_motion_cp2k (int m, GtkTextBuffer * buffer) \brief print the CP2K input MOTION section \param m 0 = Geometry optimisation, 1 = MD \param buffer the GtkTextBuffer to print into */ void print_motion_cp2k (int m, GtkTextBuffer * buffer) { gchar * intro = "!\n" "! Always a MOTION section that describes\n" "! how to move the atoms\n" "!\n"; print_info (intro, NULL, buffer); print_var_section ((m==0) ? 11 : 8, cp2kmotion[m], buffer); if (m) { if ((int)tmp_cp2k -> opts[CP2ENS] != 2 && (int)tmp_cp2k -> opts[CP2ENS] != 3) { if (tmp_cp2k -> ions_thermostat -> type) print_thermostat_cp2k (tmp_cp2k -> thermostats, buffer); } print_var_section (15, cp2kmotion[m+1], buffer); } if ((int)tmp_cp2k -> opts[CP2CON]) { gchar * fixec[7] = {"X\n", "Y\n", "Z\n", "XY\n", "XZ\n", "YZ\n", "XYZ\n"}; int fixed[7][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}, {1, 1, 0}, {1, 0, 1}, {0, 1, 1}, {1, 1, 1}}; int i, j, k; gchar * str; gboolean doit; for (i=0; i<2; i++) { if (tmp_cp2k -> fixat[i] > 0) { print_info (cp2k_cons[0], NULL, buffer); for (j=0; j<7; j++) { doit = FALSE; for (k=0; k fixat[i]; k++) { if (tmp_cp2k -> fixcoord[i][k][0] == fixed[j][0] && tmp_cp2k -> fixcoord[i][k][1] == fixed[j][1] && tmp_cp2k -> fixcoord[i][k][2] == fixed[j][2]) { print_info (cp2k_fix[0], NULL, buffer); print_info (fixec[j], NULL, buffer); if (i==0) { print_info (cp2k_fix[1], NULL, buffer); } else { print_info (cp2k_fix[2], NULL, buffer); } doit= TRUE; break; } } if (doit) { for (k=0; k fixat[i]; k++) { if (tmp_cp2k -> fixcoord[i][k][0] == fixed[j][0] && tmp_cp2k -> fixcoord[i][k][1] == fixed[j][1] && tmp_cp2k -> fixcoord[i][k][2] == fixed[j][2]) { if (i ==0) { str = g_strdup_printf (" %d", tmp_cp2k -> fixlist[i][k]+1); } else { str = g_strdup_printf (" MOL-%d", tmp_cp2k -> fixlist[i][k]+1); } print_info (str, NULL, buffer); g_free (str); } } print_info (cp2k_fix[3], NULL, buffer); } } print_info (cp2k_cons[1], NULL, buffer); } } } print_info (cp2kmotion[3][0], NULL, buffer); } /*! \fn void print_coord_cp2k (GtkTextBuffer * buffer) \brief print atomic coordinates in CP2K input format \param buffer the GtkTextBuffer to print into */ void print_coord_cp2k (GtkTextBuffer * buffer) { gchar * str; if (tmp_cp2k -> input_type) { gchar * str = g_strdup_printf ("\t%d\n# This file was prepared using %s", qm_proj -> natomes, PACKAGE); print_info (str, NULL, buffer); g_free (str); } int i, j; for (i=0; i nspec; i++) { for (j=0; j natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { print_info ("\n", NULL, buffer); print_info (qm_proj -> chemistry -> label[i], NULL, buffer); str = g_strdup_printf (" %15.10lf %15.10lf %15.10lf", qm_proj -> atoms[0][j].x, qm_proj -> atoms[0][j].y, qm_proj -> atoms[0][j].z); print_info (str, NULL, buffer); g_free (str); /*if (qm_view -> bonding) { if (tmp_cp2k -> fixat[1] > 0 || tmp_cp2k -> ions_thermostat -> sys > 1) { str = g_strdup_printf (" MOL-%d", qm_proj -> atoms[0][j].coord[3]+1); print_info (str, NULL, buffer); g_free (str); } }*/ } } } } /*! \fn void print_subsys_cp2k (GtkTextBuffer * buffer) \brief print the CP2K input SUBSYS section \param buffer the GtkTextBuffer to print into */ void print_subsys_cp2k (GtkTextBuffer * buffer) { print_var_section (3, cp2ksyst[0], buffer); int i = ((int)tmp_cp2k -> opts[CP2LAT]) ? 19 : 14; print_var_section (i, cp2klat[(int)tmp_cp2k -> opts[CP2LAT]], buffer); if (! tmp_cp2k -> input_type) { print_info (cp2ksyst[1][0], NULL, buffer); print_coord_cp2k (buffer); print_info (cp2ksyst[1][1], NULL, buffer); } else { print_var_section (3, cp2ksyst[2], buffer); } gchar * str; print_info ("! What follow is tricky and tests are recommended\n" "! Atomic basis set and pseudo-potential must be provided for all chemical species\n" "! the exact sequences '${BASIS_FOR_*}' '${POTENTIAL_FOR_*}' appear\n" "! inside the files that contain respectively the basis sets and the pseudo-potentials\n" "! in front of the name of the '*' element\n" , NULL, buffer); for (i=0; i nspec; i++) { str = g_strdup_printf (" &KIND %s\n BASIS_SET ", exact_name(qm_proj -> chemistry -> label[i])); print_info (str, NULL, buffer); g_free (str); str = g_strdup_printf ("BASIS_FOR_%s", exact_name(qm_proj -> chemistry -> label[i])); print_cp2k_var (str, buffer); g_free (str); if (strlen(exact_name(qm_proj -> chemistry -> label[i])) == 1) print_info (" ",NULL, buffer); print_info ("\n POTENTIAL ", NULL, buffer); str = g_strdup_printf ("POTENTIAL_FOR_%s", exact_name(qm_proj -> chemistry -> label[i])); print_cp2k_var (str, buffer); g_free (str); print_info ("\n &END KIND\n", NULL, buffer); } print_info ("&END SUBSYS", NULL, buffer); } /*! \fn void print_variables_cp2k (GtkTextBuffer * buffer) \brief print the list of the CP2K input variables \param buffer the GtkTextBuffer to print into */ void print_variables_cp2k (GtkTextBuffer * buffer) { int i, j, k, l; gchar * str; gboolean append; gchar * fileinfo[5] = {"! This file contains the restart information:", "! This file contains the basis set(s):", "! This file contains the pseudo-potential(s):", "! This file contains the wave-function:", "! This file contains the atomic coordinates in XYZ format:"}; l = 0; for (i=0; i<41; i++) { if (i==0) { print_info (globopts[0], NULL, buffer); print_info (exact_name(qm_proj -> name), "bold", buffer); print_info ("\n", NULL, buffer); print_info (globopts[i+1], NULL, buffer); print_info (cp2k_default_keywords[l][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); l++; } else if (i == CP2SPI) { if ((int)tmp_cp2k -> opts[CP2SPI]) { print_info (cp2kspin[0], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> opts[CP2SPI]), "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2kspin[1], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> opts[CP2SPM]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } } else if (i==CP2PLE || i==CP2QSM || i==CP2SCG || i==CP2SMI || i==CP2FCT) { print_info (globopts[i+1], NULL, buffer); print_info (cp2k_default_keywords[l][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); l++; if (i==CP2SMI) { if ((int)tmp_cp2k -> opts[CP2ROK]) { print_info (cp2ksroks[0], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> opts[CP2ROK]), "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2ksroks[1], NULL, buffer); str = g_strdup_printf ("%f", tmp_cp2k -> extra_opts[1][0]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); print_info (cp2ksroks[2], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> extra_opts[1][1] + 1); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } if ((int)tmp_cp2k -> opts[CP2POR]) { for (j=0; j<2; j++) { print_info (cp2kmocu[j], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> extra_opts[2][j]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } print_info (cp2kmocu[j], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> extra_opts[2][2]), "blue", buffer); print_info ("\n", NULL, buffer); } } if (i==CP2FCT) { if ((int)tmp_cp2k -> opts[CP2VDW]) { print_info (cp2ksvdw[0], NULL, buffer); print_info (vdw_fct[(int)tmp_cp2k -> extra_opts[0][0]], "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2ksvdw[1], NULL, buffer); print_info (cp2k_vdw_keywords[(int)tmp_cp2k -> extra_opts[0][0]][(int)tmp_cp2k -> extra_opts[0][1]], "blue", buffer); print_info ("\n", NULL, buffer); print_info (cp2ksvdw[2], NULL, buffer); str = g_strdup_printf ("%f", tmp_cp2k -> extra_opts[0][2]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); if (tmp_cp2k -> extra_opts[0][0] == 1.0) { print_info (cp2ksvdw[3], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> extra_opts[0][3]), "blue", buffer); print_info ("\n", NULL, buffer); } } } } else if (i == CP2RES) { print_info (globopts[4], NULL, buffer); print_info (cp2kbool (tmp_cp2k -> opts[i]), "blue", buffer); print_info ("\n", NULL, buffer); for (j=0; j<4; j++) { print_info (fileinfo[j], "bold_red", buffer); print_info ("\n", NULL, buffer); print_info (globopts[5+j], NULL, buffer); if (tmp_cp2k -> files[j] != NULL) { print_info (tmp_cp2k -> files[j], "blue", buffer); } else { print_info ("None", "blue", buffer); if ((tmp_cp2k -> opts[i] == 1.0 && (j==0 || j==3)) || (j==1 || j==2)) print_info ("\t\t! A file is required !", "bold_red", buffer); } print_info ("\n", NULL, buffer); } } else if (i==CP2KTI || i==CP2CHA || i==CP2GRI || i==CP2SNN ||i==CP2SNO || i==CP2NST || i==CP2MAG ||i==CP2OUF) { if (i==CP2NST && tmp_cp2k -> opts[CP2RUN] != 3.0) { append = FALSE; } else if (i==CP2MAG && tmp_cp2k -> opts[CP2RUN] != 2.0) { append = FALSE; } else { append = TRUE; } if (append) { j = (i > CP2SNO) ? i+7 : i+1; print_info (globopts[j], NULL, buffer); str = g_strdup_printf ("%d", (int)tmp_cp2k -> opts[i]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); if (i==CP2OUF) { print_info (globopts[47], NULL, buffer); print_info ("XYZ", "blue", buffer); print_info ("\n", NULL, buffer); print_info (globopts[48], NULL, buffer); print_info ("ANGSTROM", "blue", buffer); print_info ("\n", NULL, buffer); } } } else if (i==CP2CUT || i==CP2SCN || i==CP2SCO || i==CP2DLT || i==CP2TMP || i==CP2GEF) { if ((i == CP2DLT || i == CP2TMP) && tmp_cp2k -> opts[CP2RUN] != 3.0) { append = FALSE; } else if (i == CP2GEF && tmp_cp2k -> opts[CP2RUN] != 2.0) { append = FALSE; } else { append = TRUE; } if (append) { j = (i > CP2SCO) ? i+7 : i+1; print_info (globopts[j], NULL, buffer); str = g_strdup_printf ("%f", tmp_cp2k -> opts[i]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } } else if (i == CP2PBC) { print_info (globopts[i-8], NULL, buffer); print_info (cp2k_default_keywords[6][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); } else if (i == CP2ENS && tmp_cp2k -> opts[CP2RUN] == 3.0) { print_info (globopts[38], NULL, buffer); print_info (cp2k_default_keywords[9][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); } else if (i == CP2GMI && tmp_cp2k -> opts[CP2RUN] == 2.0) { print_info (globopts[42], NULL, buffer); print_info (cp2k_default_keywords[10][(int)tmp_cp2k -> opts[i]], "blue", buffer); print_info ("\n", NULL, buffer); } else if (i == CP2LAT) { if (tmp_cp2k -> opts[i] == 0.0) { for (j=0; j<6; j++) { print_info (globopts[22+j], NULL, buffer); k = j/3; str = g_strdup_printf ("%f", qm_proj -> cell.box[0].param[k][j-3*k]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } print_info (globopts[21], NULL, buffer); print_info (cp2k_default_keywords[8][(int)tmp_cp2k -> opts[CP2SYM]], "blue", buffer); print_info ("\n", NULL, buffer); } else { for (j=0; j<3; j++) { print_info (globopts[28+j], NULL, buffer); k = j/3; str = g_strdup_printf ("%f", qm_proj -> cell.box[0].vect[k][j-3*k]); print_info (str, "blue", buffer); g_free (str); print_info ("\n", NULL, buffer); } } if (tmp_cp2k -> input_type) { print_info (fileinfo[4], "bold_red", buffer); print_info ("\n", NULL, buffer); print_info (globopts[37], NULL, buffer); print_info ("coord.inc", "blue", buffer); print_info ("\n", NULL, buffer); } for (j=0; j nspec;j++) { str = g_strdup_printf ("@SET BASIS_FOR_%s ", exact_name(qm_proj -> chemistry -> label[j])); print_info (str, NULL, buffer); g_free (str); if (strlen(exact_name(qm_proj -> chemistry -> label[j])) == 1) print_info (" ",NULL, buffer); if (tmp_cp2k -> spec_data[j][0] > -1) { print_info (get_nth_key (j, tmp_cp2k -> spec_data[j][0], 0), "blue", buffer); } else { print_info ("None", "blue", buffer); print_info ("\t\t! A keyword is required !", "bold_red", buffer); } print_info ("\n", NULL, buffer); str = g_strdup_printf ("@SET POTENTIAL_FOR_%s ", exact_name(qm_proj -> chemistry -> label[j])); print_info (str, NULL, buffer); g_free (str); if (strlen(exact_name(qm_proj -> chemistry -> label[j])) == 1) print_info (" ",NULL, buffer); if (tmp_cp2k -> spec_data[j][1] > -1) { print_info (get_nth_key (j, tmp_cp2k -> spec_data[j][1], 1), "blue", buffer); } else { print_info ("None", "blue", buffer); print_info ("\t\t! A keyword is required !", "bold_red", buffer); } print_info ("\n", NULL, buffer); } } } print_info ("\n", NULL, buffer); } /*! \fn void print_global_cp2k (GtkTextBuffer * buffer) \brief print the CP2K input file GLOBAL section \param buffer the GtkTextBuffer to print into */ void print_global_cp2k (GtkTextBuffer * buffer) { print_variables_cp2k (buffer); print_var_section (9, cp2kglobal, buffer); if (tmp_cp2k -> input_type) { print_info ("\n", NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("! The mandatory FORCE_EVAL section include file\n", NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("@INCLUDE '", "bold", buffer); print_info (cp2kincludes[0], "red", buffer); print_info ("'", "bold", buffer); print_info ("\n\n", NULL, buffer); if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) { print_info ("!\n", NULL, buffer); print_info ("! The mandatory MOTION section include file\n", NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("@INCLUDE '", "bold", buffer); print_info (cp2kincludes[2], "red", buffer); print_info ("'", "bold", buffer); print_info ("\n\n", NULL, buffer); } } else { print_info ("\n", NULL, buffer); } } /*! \fn void print_cp2k_print (gchar * spaces, gchar * info, int i, int j, GtkTextBuffer * buffer) \brief print CP2K input file PRINT section content \param spaces spaces string \param info variable string to print \param i SCF restart option \param j 1 = MO cubes, 0 = else \param buffer the GtkTextBuffer to print into */ void print_cp2k_print (gchar * spaces, gchar * info, int i, int j, GtkTextBuffer * buffer) { print_info (spaces, NULL, buffer); print_info ("&", NULL, buffer); print_info (info, NULL, buffer); print_info ("\n", NULL, buffer); print_info (spaces, NULL, buffer); print_info (" LOG_PRINT_KEY T ! => Printing on screen when restart file is written\n", NULL, buffer); print_info (spaces, NULL, buffer); print_info (" &EACH\n", NULL, buffer); print_info (spaces, NULL, buffer); print_info (" ", NULL, buffer); print_var_section (3, scf_wrestart[i], buffer); print_info (spaces, NULL, buffer); print_info (" &END EACH\n", NULL, buffer); print_info (spaces, NULL, buffer); print_info (" ADD_LAST NUMERIC\n", NULL, buffer); if (j) { print_var_section (7, cp2kmocubes, buffer); } print_info (spaces, NULL, buffer); print_info ("&END ", NULL, buffer); print_info (info, NULL, buffer); print_info ("\n", NULL, buffer); } /*! \fn void print_cp2k (int f, GtkTextBuffer * buffer) \brief print the CP2K input file section \param f the section id \param buffer the GtkTextBuffer to print into */ void print_cp2k (int f, GtkTextBuffer * buffer) { int i; switch (f) { case 0: print_global_cp2k (buffer); if (tmp_cp2k -> input_type && (int)tmp_cp2k -> opts[CP2RES]) print_var_section (7, cp2krestart, buffer); break; case 1: print_var_section (17, cp2kfev[0], buffer); i = ((int)tmp_cp2k -> opts[CP2RUN] == 3) ? 0 : 1; print_info (qs_extrapo[i], NULL, buffer); print_var_section (1, cp2kfev[1], buffer); i = ((int)tmp_cp2k -> opts[CP2RUN] == 2 || (int)tmp_cp2k -> opts[CP2RUN] == 3) ? (int)tmp_cp2k -> opts[CP2RUN] - 1 : 0; if ((int)tmp_cp2k -> opts[CP2ROK]) print_var_section (7, cp2kroks, buffer); if ((int)tmp_cp2k -> opts[CP2POR]) { print_info (" &PRINT\n", NULL, buffer); print_cp2k_print (" ", "MO_CUBES", i, 1, buffer); print_info (" &END PRINT\n", NULL, buffer); } print_var_section (13, cp2kfev[2], buffer); print_info (" ", NULL, buffer); print_var_section (3, scf_wrestart[i], buffer); print_var_section (1, cp2kfev[3], buffer); if ((int)tmp_cp2k -> opts[CP2PMU]) print_cp2k_print (" ", "MULLIKEN", i, 0, buffer); if ((int)tmp_cp2k -> opts[CP2PLO]) print_cp2k_print (" ", "LOWDIN", i, 0, buffer); print_var_section (3, cp2kfev[4], buffer); if ((int)tmp_cp2k -> opts[CP2VDW]) { print_var_section (3, cp2kvdw[0], buffer); print_var_section ((int)tmp_cp2k -> extra_opts[0][0]*2+5, cp2kvdw[(int)tmp_cp2k -> extra_opts[0][0]+1], buffer); print_var_section (1, cp2kvdw[3], buffer); } print_info (cp2kfev[5][0], NULL, buffer); if ((int)tmp_cp2k -> opts[CP2SPI]) { print_var_section (4, cp2kfev[6], buffer); print_info ("\n", NULL, buffer); } print_info (cp2kfev[7][0], NULL, buffer); if ((int)tmp_cp2k -> opts[CP2PFO] || (int)tmp_cp2k -> opts[CP2PST]) { print_info ("\n", NULL, buffer); print_info (" &PRINT\n", NULL, buffer); if ((int)tmp_cp2k -> opts[CP2PFO]) print_cp2k_print (" ", "FORCES", i, 0, buffer); if ((int)tmp_cp2k -> opts[CP2PST]) print_cp2k_print (" ", "STRESS_TENSOR", i, 0, buffer); print_info (" &END PRINT\n", NULL, buffer); } if (tmp_cp2k -> input_type) { print_info ("\n", NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("! The mandatory SUBSYS section include file\n", NULL, buffer); print_info ("!\n", NULL, buffer); print_info ("@INCLUDE '", "bold", buffer); print_info (cp2kincludes[1], "red", buffer); print_info ("'", "bold", buffer); print_info ("\n\n", NULL, buffer); print_info ("&END FORCE_EVAL\n", NULL, buffer); } break; case 2: print_subsys_cp2k (buffer); if (! tmp_cp2k -> input_type) { print_info ("\n&END FORCE_EVAL\n", NULL, buffer); if ((int)tmp_cp2k -> opts[CP2RUN] != 2 && (int)tmp_cp2k -> opts[CP2RUN] != 3 && (int)tmp_cp2k -> opts[CP2RES]) { print_info ("\n", NULL, buffer); print_var_section (7, cp2krestart, buffer); } } break; case 4: print_coord_cp2k (buffer); break; default: if (f == 5 || f == 6) { for (i=0; i nspec; i++) { if (tmp_cp2k -> spec_data[i][f-5] > -1) { print_info (get_nth_elem (i, tmp_cp2k -> spec_data[i][f-5], f-5), NULL, buffer); } } } else { if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) { print_motion_cp2k ((int)tmp_cp2k -> opts[CP2RUN]- 2, buffer); } if (! tmp_cp2k -> input_type && (int)tmp_cp2k -> opts[CP2RES]) print_var_section (7, cp2krestart, buffer); } break; } } Atomes-GNU-1.1.14/src/calc/cpmd/000077500000000000000000000000001457665371200161115ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/calc/cpmd/cpmd.h000066400000000000000000000061741457665371200172150ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cpmd.h * @short Variable declarations for the creation of the CPMD input file * @author Sébastien Le Roux */ /* * This header file: 'cpmd.h' * * Contains: Variable declarations for the creation of the CPMD input file */ #define NCPMDCALC 7 #define NCACOMBO 5 #define NDFT 19 #define NSYM 11 #define NOPTPC 7 #define NSECOP 6 #define DEFEM 0 #define DEFLS 1 #define DEFVD 2 #define DEFDF 3 #define DEFGC 4 #define DEFAN 5 #define DEFVE 6 #define DEFSY 7 #define DEFAB 8 #define DEFDG 9 #define DEFCU 10 #define DEFCO 11 #define DEFFI 12 #define DEFDU 13 #define DEFSP 14 #define DEFLM 15 #define DEFLO 16 #define CONVO 0 #define OPTIO 1 #define STEPO 2 #define TSTPO 3 #define CONVG 4 #define OPTIG 5 #define STEPG 6 #ifndef CPMD_H_ #define CPMD_H_ #define TSTPG 7 #define STEPC 8 #define TSTPC 9 #define BAROC 10 #define ANNIC 11 #define AFAIC 12 #define ANNEC 13 #define AFAEC 14 #define STEPB 15 #define TSTPB 16 #define BAROB 17 #define ANNIB 18 #define AFAIB 19 #define KSUNO 20 #define RHOUT 21 #define NBAND 22 #define VIBRA 23 extern cpmd * tmp_cpmd; extern gboolean is_cpmd; extern gchar * cpmd_elements[MAXDATAQM]; extern gchar * cdescr[MAXDATAQM]; extern double default_cpmd_options[17]; extern gchar * default_opts[MAXDATAQM-1][NSECOP]; // 0 = None, 1 = Entry, 2 = Combo, 3 = yes/no extern int default_opts_type[MAXDATAQM-1][NSECOP]; // NDF is the max by far extern int defaut_num[9]; extern gchar * default_keywords[9][NDFT]; extern gchar * default_text[9][NDFT]; extern double default_calc_options[24]; extern gchar * calc_opts[NCPMDCALC][NOPTPC]; extern int default_type[NCPMDCALC][NOPTPC]; extern gchar * calc_kw[NCPMDCALC]; extern gchar * calc_ds[NCPMDCALC]; extern int calc_box_num[NCACOMBO]; extern gchar * calc_box_name[NCACOMBO][3]; extern gchar * calc_box_keys[NCACOMBO][3]; extern gchar * rest_kw[2]; extern gchar * rest_opts[3]; extern GtkWidget * sel_but[3]; extern GtkWidget * sel_img[3]; extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); /*! \enum therm_types */ enum therm_types { CONTROL = -1, /*!< -1 */ GLOBAL = 0, /*!< 0 */ LOCAL = 1, /*!< 1 */ MOLECULE = 2 /*!< 2 */ }; extern gchar * nosetype[3]; extern gchar * nosekey[2]; extern gchar * thermo_name[2][5]; extern int num_thermo[2]; extern int type_thermo[2]; extern gchar * termoke[2]; extern gchar * param[2]; extern gchar * iunit[2]; extern gchar * eunit[2]; #endif Atomes-GNU-1.1.14/src/calc/cpmd/cpmd_atoms.c000066400000000000000000000512071457665371200204100ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cpmd_atoms.c * @short Functions to handle dummy atom(s) for the CPMD input file * @author Sébastien Le Roux */ /* * This file: 'cpmd_atoms.c' * * Contains: * - The functions to handle dummy atom(s) for the CPMD input file * * List of functions: void create_dummy_param_box (int dummy_id); void dummy_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void dummy_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void clean_dummy_widgets (); void remove_dummy (int num_to_remove); void add_dummy (int extra); G_MODULE_EXPORT void update_dummy_coord (GtkEntry * res, gpointer data); G_MODULE_EXPORT void dummy_type_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_dummy_id_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void select_dummy (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_remove_dummy (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void add_or_remove_dummy (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void atom_button (GtkWidget * but, gpointer data); GtkWidget * create_dummy_box (); dummy_atom * get_active_dummy (int id); dummy_atom * init_dummy (int type, int id); */ #include "global.h" #include "interface.h" #include "glview.h" #include "calc.h" #include "cpmd.h" extern void create_selection_combo (int id, int num, int type, GCallback handler); extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern void create_selection_button (GtkWidget * box, int num, int id, gpointer data); extern G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data); extern GtkWidget * combo_id[2]; extern GtkWidget * combo_id_box[2]; extern ColRGBA init_color (int id, int numid); extern int num_cpmd_objects; GtkWidget * dummy_box[2]; GtkWidget * the_dummy_box; GtkWidget * dummy_param_box; dummy_atom * dummy; int n_dummy; int * old_dummy; GtkCellRenderer * dummy_renderer[5]; GtkTreeViewColumn * dummy_col[5]; /*! \fn dummy_atom * get_active_dummy (int id) \brief get dummy atom by id \param id the target dummy atom id */ dummy_atom * get_active_dummy (int id) { dummy_atom * dumm = tmp_cpmd -> dummy; while (dumm -> id != id) { if (dumm -> next != NULL) dumm = dumm -> next; } return dumm; } /*! \fn G_MODULE_EXPORT void update_dummy_coord (GtkEntry * res, gpointer data) \brief udate dummy atom coordinate entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_dummy_coord (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); dummy -> xyz[i] = v; update_entry_double (res, dummy -> xyz[i]); print_the_section (8, 0, qmbuffer[8]); } void create_dummy_param_box (int dummy_id); /*! \fn G_MODULE_EXPORT void dummy_type_changed (GtkComboBox * box, gpointer data) \brief change the dummy atom type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void dummy_type_changed (GtkComboBox * box, gpointer data) { int i; i = gtk_combo_box_get_active (box); if (i != dummy -> type) { dummy -> type = i; create_dummy_param_box (dummy -> id); } print_the_section (8, 0, qmbuffer[8]); } /*! \fn void create_dummy_param_box (int dummy_id) \brief crreate dummy atom parameter widgets \param dummy_id dummy atom id */ void create_dummy_param_box (int dummy_id) { gchar * str; dummy_box[1] = destroy_this_widget (dummy_box[1]); if (tmp_cpmd -> dummies > 0) { GtkWidget * hbox; GtkWidget * widg; str = g_strdup_printf ("Configuration for dummy atom N°%d: ", dummy_id+1); dummy_box[1] = create_vbox (BSEP); cpmd_box (dummy_box[1], str, 0, 5, 280); g_free (str); int i; hbox = cpmd_box (dummy_box[1], "Type of dummy atom:", 0, 25, -1); GtkWidget * box = create_combo (); gchar * dtypes[3] = {"Type 1", "Type 2", "Type 3"}; gchar * dtext[3] = {"fixed in space:", "calculated by\nthe arithmetic mean of the coordinates of the selected atom(s)", "calculated by\nthe center of mass of the coordinates of the selected atom(s)"}; for (i=0; i<3; i++) { combo_text_append (box, dtypes[i]); } g_signal_connect (G_OBJECT (box), "changed", G_CALLBACK(dummy_type_changed), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, box, FALSE, FALSE, 10); dummy = get_active_dummy (dummy_id); str = g_strdup_printf ("The coordinates of the dummy atom are %s", dtext[dummy -> type]); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_box[1], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, (dummy -> type == 0) ? 40 : 60, 0.0, 0.5), FALSE, FALSE, 25); g_free (str); if (dummy -> type > 0) { create_selection_button (dummy_box[1], dummy -> natoms, 2, GINT_TO_POINTER(-(dummy -> id + 2))); } else { gchar * lcoo[3]={"x", "y", "z"}; for (i=0; i<3; i++) { str = g_strdup_printf ("Dummy %s coordinate: ", lcoo[i]); hbox = cpmd_box (dummy_box[1], str, 0, 25, -1); widg = create_entry (G_CALLBACK(update_dummy_coord), 100, 15, FALSE, GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 10); update_entry_double (GTK_ENTRY(widg), dummy -> xyz[i]); } } gtk_combo_box_set_active (GTK_COMBO_BOX(box), dummy -> type); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_box[0], dummy_box[1], FALSE, FALSE, 0); show_the_widgets (dummy_box[1]); } } /*! \fn G_MODULE_EXPORT void changed_dummy_id_box (GtkComboBox * box, gpointer data) \brief change the dummy atom id \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_dummy_id_box (GtkComboBox * box, gpointer data) { int i; i = gtk_combo_box_get_active (box); create_dummy_param_box (i); } /*! \fn dummy_atom * init_dummy (int type, int id) \brief create dummy atom \param type the type of dummy atom to create \param id the id of the new dummy atom */ dummy_atom * init_dummy (int type, int id) { dummy_atom * dumm = g_malloc0 (sizeof*dumm); dumm -> id = id; dumm -> type = type; dumm -> show = FALSE; dumm -> natoms = 0; dumm -> list = NULL; dumm -> xyz[0] = 0.0; dumm -> xyz[1] = 0.0; dumm -> xyz[2] = 0.0; return dumm; } /*! \fn G_MODULE_EXPORT void select_dummy (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select dummy atom toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void select_dummy (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { get_active_dummy (old_dummy[n_dummy-1]) -> show = FALSE; old_dummy[n_dummy-1] = -1; n_dummy --; gtk_tree_store_set (* model, & iter, 4, 0, -1); //toviz.c = 0; } else { n_dummy ++; gtk_tree_store_set (* model, & iter, 4, 1, -1); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & old_dummy[n_dummy-1], -1); old_dummy[n_dummy-1] --; get_active_dummy (old_dummy[n_dummy-1]) -> show = TRUE; //toviz.c = 1; } // Viz } /*! \fn void dummy_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the CPMD dummy atom(s) tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void dummy_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i; gtk_tree_model_get (mod, iter, 0, & i, -1); i = abs(i); set_renderer_color (get_active_dummy (i-1) -> show, renderer, init_color (i-1, num_cpmd_objects)); } /*! \fn void dummy_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the CPMD dummy atom(s) tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void dummy_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); if (j > 0 && i != 3) { gtk_cell_renderer_set_visible (renderer, TRUE); if (i < 3) dummy_set_color (col, renderer, mod, iter, data); } else if (j > 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (i == 3) { gtk_cell_renderer_set_visible (renderer, TRUE); dummy_set_color (col, renderer, mod, iter, data); } else { gtk_cell_renderer_set_visible (renderer, FALSE); } } GtkWidget * create_dummy_box (); /*! \fn void clean_dummy_widgets () \brief destroy dummy atom(s) widgets */ void clean_dummy_widgets () { combo_id_box[1] = destroy_this_widget (combo_id_box[1]); combo_id[1] = destroy_this_widget (combo_id[1]); dummy_box[1] = destroy_this_widget (dummy_box[1]); dummy_box[0] = destroy_this_widget (dummy_box[0]); the_dummy_box = destroy_this_widget (the_dummy_box); } /*! \fn G_MODULE_EXPORT void run_remove_dummy (GtkDialog * dialog, gint response_id, gpointer data) \brief remove dummy atom(s) - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_dummy (GtkDialog * dialog, gint response_id, gpointer data) { int i, j; gboolean done = FALSE; int num_to_remove = GPOINTER_TO_INT(data); dummy_atom * dumm; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (n_dummy == num_to_remove) { done = TRUE; // Now we remove all selected dummy atoms for (i=0; i dummy; for (j=0; j dummies; j++) { if (dumm -> id == old_dummy[i]) { if (dumm -> next != NULL) { if (dumm -> prev != NULL) { dumm -> next -> prev = dumm -> prev; dumm -> prev -> next = dumm -> next; } else { tmp_cpmd -> dummy = dumm -> next; tmp_cpmd -> dummy -> prev = NULL; } g_free (dumm); } else if (dumm -> prev != NULL) { dumm -> prev -> next = NULL; g_free (dumm); } else { g_free (tmp_cpmd -> dummy); tmp_cpmd -> dummy = NULL; } break; } if (dumm -> next != NULL) dumm = dumm -> next; } } tmp_cpmd -> dummies -= num_to_remove; if (tmp_cpmd -> dummies > 0) { dumm = tmp_cpmd -> dummy; for (j=0; j dummies; j++) { dumm -> id = j; if (dumm -> next != NULL) dumm = dumm -> next; } } clean_dummy_widgets (); the_dummy_box = create_dummy_box (); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_param_box, the_dummy_box, FALSE, FALSE, 0); show_the_widgets (dummy_param_box); } else { str = g_strdup_printf ("You must select %d dummy atom(s) to be deleted !", num_to_remove); show_warning (str, qm_assistant); g_free (str); } break; default: // field_unselect_all (); done = TRUE; break; } if (done) destroy_this_dialog (dialog); } /*! \fn void remove_dummy (int num_to_remove) \brief remove dummy atom(s) - creating the dialog \param num_to_remove the number of dummy atom(s) to remove */ void remove_dummy (int num_to_remove) { int i, j, k; gchar * str; str = g_strdup_printf ("Select the %d dummy atom(s) to be removed", num_to_remove); GtkWidget * rdummy = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rdummy), "Apply", GTK_RESPONSE_APPLY); gchar * mol_title[5] = {"Id", "Type", "Atom(s)", " ", "Select"}; gchar * ctype[5] = {"text", "text", "text", "text", "active"}; GType col_type[5] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN}; GtkTreeIter dummy_level, atom_level; n_dummy = 0; old_dummy = allocint(tmp_cpmd -> dummies); GtkTreeStore * remove_model = gtk_tree_store_newv (5, col_type); GtkWidget * remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); for (i=0; i<5; i++) { if (i < 4) { dummy_renderer[i] = gtk_cell_renderer_text_new (); } else { dummy_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(dummy_renderer[i]), TRUE); g_signal_connect (G_OBJECT(dummy_renderer[i]), "toggled", G_CALLBACK(select_dummy), & remove_model); } dummy_col[i] = gtk_tree_view_column_new_with_attributes (mol_title[i], dummy_renderer[i], ctype[i], i, NULL); gtk_tree_view_column_set_alignment (dummy_col[i], 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), dummy_col[i]); gtk_tree_view_column_set_cell_data_func (dummy_col[i], dummy_renderer[i], dummy_set_visible, GINT_TO_POINTER(i), NULL); } // fill model dummy_atom * dumm = tmp_cpmd -> dummy; for (i=0; i dummies; i++) { gtk_tree_store_append (remove_model, & dummy_level, NULL); gtk_tree_store_set (remove_model, & dummy_level, 0, i+1, 1, g_strdup_printf ("Type %d", dumm -> type + 1), 2, dumm -> natoms, 3, NULL, 4, 0, -1); for (j=0; j natoms; j++) { gtk_tree_store_append (remove_model, & atom_level, & dummy_level); k = qm_proj -> atoms[0][dumm -> list[j]].sp; str = g_strdup_printf ("%s%d", exact_name(qm_proj -> chemistry -> label[k]), dumm -> list[j]+1); gtk_tree_store_set (remove_model, & atom_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, str, 4, 0, -1); g_free (str); } if (dumm -> next != NULL) dumm = dumm -> next; } num_cpmd_objects = tmp_cpmd -> dummies; g_object_unref (remove_model); i = ((tmp_cpmd -> dummies+1)*40 < 500) ? (tmp_cpmd -> dummies+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rdummy), 450, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); run_this_gtk_dialog (rdummy, G_CALLBACK(run_remove_dummy), GINT_TO_POINTER(num_to_remove)); } /*! \fn void add_dummy (int extra) \brief add dummy atom(s) \param extra the number of dummy atom(s) to add */ void add_dummy (int extra) { int i; if (tmp_cpmd -> dummy == NULL) { tmp_cpmd -> dummy = init_dummy (0, 0); tmp_cpmd -> dummies = 1; extra --; } dummy_atom * dumm = tmp_cpmd -> dummy; while (dumm -> next != NULL) dumm = dumm -> next; for (i=0; i next = init_dummy (0, i+tmp_cpmd -> dummies); dumm -> next -> prev = dumm; dumm = dumm -> next; } tmp_cpmd -> dummies += extra; // finaly update the combobox create_selection_combo (1, tmp_cpmd -> dummies, 0, G_CALLBACK(changed_dummy_id_box)); } /*! \fn G_MODULE_EXPORT void add_or_remove_dummy (GtkSpinButton * res, gpointer data) \brief add or remove dummy atom spin callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_or_remove_dummy (GtkSpinButton * res, gpointer data) { int id = gtk_spin_button_get_value_as_int(res); int k; gchar * str; gboolean to_add_dummy = TRUE; if (id != tmp_cpmd -> dummies) { if (id > tmp_cpmd -> dummies) { // adding dummy k = id - tmp_cpmd -> dummies; if (k > 1) { str = g_strdup_printf ("Do you really want to add %d dummy atom(s) ?", k); to_add_dummy = ask_yes_no ("Adding dummy atom(s) ?", str, GTK_MESSAGE_QUESTION, qm_assistant); g_free (str); } if (to_add_dummy) { add_dummy (k); } } else if (id < tmp_cpmd -> dummies) { remove_dummy (tmp_cpmd -> dummies - id); } } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), tmp_cpmd -> dummies); print_the_section (8, 0, qmbuffer[8]); } /*! \fn GtkWidget * create_dummy_box () \brief create the dummy atom(s) widgets */ GtkWidget * create_dummy_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * widg; hbox = cpmd_box (vbox, "Number of dummy atom(s):", 5, 20, 200); widg = spin_button (G_CALLBACK(add_or_remove_dummy), tmp_cpmd -> dummies, 0.0, (double)qm_proj -> natomes, 1.0, 0, 100, NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); combo_id[1] = cpmd_box (vbox, "Dummy atom to configure: ", 5, 5, 200); dummy_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, dummy_box[0], FALSE, FALSE, 10); create_selection_combo (1, tmp_cpmd -> dummies, 0, G_CALLBACK(changed_dummy_id_box)); return vbox; } /*! \fn G_MODULE_EXPORT void atom_button (GtkWidget * but, gpointer data) \brief CPMD input file, add constraint(s) or dummy atom(s) - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void atom_button (GtkWidget * but, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); gchar * atom_cons[2] = {"Add and configure constraint(s)", "Add and configure dummy atoms"}; GtkWidget * amol = dialogmodal (atom_cons[(i == DEFCO) ? 0 : 1], GTK_WINDOW(qm_assistant)); GtkWidget * vbox = dialog_get_content_area (amol); GtkWidget * hbox; GtkWidget * widg; gchar * str; if (i == DEFCO) { hbox = cpmd_box (vbox, default_opts[5][1], 5, 20, 120); widg = create_combo (); for (j=0; j default_opts[i+1]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_opt_box), GINT_TO_POINTER(i+1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); create_selection_button (vbox, tmp_cpmd -> fixat, 1, GINT_TO_POINTER(-1)); j = (tmp_cpmd -> default_opts[i+1] < 0.0) ? 0 : (int) tmp_cpmd -> default_opts[i+1]; widget_set_sensitive (sel_but[1], j); } else if (i == DEFDU) { dummy_box[0] = NULL; dummy_box[1] = NULL; combo_id[1] = NULL; dummy_param_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, dummy_param_box, FALSE, FALSE, 0); the_dummy_box = create_dummy_box(); add_box_child_start (GTK_ORIENTATION_VERTICAL, dummy_param_box, the_dummy_box, FALSE, FALSE, 0); } run_this_gtk_dialog (amol, G_CALLBACK(run_destroy_dialog), NULL); } Atomes-GNU-1.1.14/src/calc/cpmd/cpmd_init.c000066400000000000000000001712541457665371200202350ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cpmd_init.c * @short Functions to initialize the QM / QM-MM input file creation assistant * @author Sébastien Le Roux */ /* * This file: 'cpmd_init.c' * * Contains: * - The functions to initialize the QM / QM-MM input file creation assistant * * List of functions: G_MODULE_EXPORT gint on_qm_assistant_go_forward (gint current_page, gpointer data); gboolean go_for_it (int i, int j, gboolean print[2]); G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data); G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data); gchar * section_name (int p); gchar * page_name (int p); void print_all_sections (GtkTextBuffer * buf); void add_cpmd_pages (); void proj_unselect_all_atoms (); void create_qm_input_file (int c, int p, int s); G_MODULE_EXPORT void update_cpmd_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_cpmd_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_calc_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_calc_opt_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_calc_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_calc_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_info (GtkTextBuffer * textbuf, gpointer data); G_MODULE_EXPORT void on_qm_assistant_cancel (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_qm_assistant_close (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_qm_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data); G_MODULE_EXPORT void show_qm_file_preview (GtkButton * but, gpointer data); G_MODULE_EXPORT void run_saving_qm (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_saving_qm (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_qm_assistant_apply (GtkAssistant * assistant, gpointer data); GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); GtkWidget * prepare_qm_option_box (int s); GtkWidget * calc_qm_option_box (int c); GtkWidget * info_box (); GtkWidget * section_box (int s); GtkWidget * qm_preview_box (int c, int s, int l); GtkWidget * vbox_cpmd (int s); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "calc.h" #include "cpmd.h" #include "cp2k.h" extern void print_cp2k (int f, GtkTextBuffer * buffer); extern void add_cp2k_pages (); extern ColRGBA init_color (int id, int numid); extern GtkWidget * electron_box; extern GtkWidget * thermo_box (); extern void field_unselect_all (); extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern void init_thermos (); extern gboolean are_all_atoms_thermostated (); extern void create_selection_combo (int id, int num, int type, GCallback handler); extern G_MODULE_EXPORT void atom_button (GtkButton * but, gpointer data); extern GtkWidget * restart_box (); extern void restore_ogl_selection (glwin * view); gchar * co_type[2] = {"CPMD", "CP2K"}; cpmd * tmp_cpmd; gchar * cpmd_elements[MAXDATAQM] = {"INFO", "CPMD", "DFT", "VDW", "PROP", "SYSTEM", "ATOMS"}; gchar * cdescr[MAXDATAQM] = {"provides an informal description of the system and the calculation to be performed", "provides the general control parameters for the calculation to be performed", "provides the exchange and correlation functional (DFT) parameters", "describes the implementation of the van der Waals interactions", "provides details about the physical properties to be calculated", "describes the symmetry and periodicity of the system", "describes the atomic species, pseudo-potentials and coordinates"}; double default_cpmd_options[17] = {400.0, 0.0, 0.0, 4.0, 0.000001, 0.0, 0.0, 0.0, 0.0, 0.0, 70.0, 0.0, -1.0, 0.0, 0.0, 1.0, 1.0}; gchar * default_opts[MAXDATAQM-1][NSECOP]= {{"Fictitious electronic mass:", "Local Spin Density", "Van der Walls interactions", " ", " ", " "}, {"DFT functional:", "Density cutoff*:", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {"Use Angströms (default a.u.)", "Lattice:", "Symmetry:", "Parameters:", "Angles:", "Cutoff for the plane wave basis:"}, {"Use constraints", "Fix:", "Use dummy atoms:", "Atom type:", "Maximum angular momentum l:", "Local angular momentum l:"}}; // 0 = None, 1 = Entry, 2 = Combo, 3 = yes/no int default_opts_type[MAXDATAQM-1][NSECOP] = {{1, 3, 3, 0, 0, 0}, {2, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {3, 2, 2, 2 ,2, 1}, {3, 0, 3, 2, 2, 2}}; // NDF is the max by far int defaut_num[9]={NDFT, 2, NSYM, 2, 2, 3, -1, 3, 3}; gchar * default_keywords[9][NDFT] = {{"SONLY", "LDA", "BONLY", "BP", "BLYP", "XLYP", "PW91", "PBE", "PBES", "REVPBE", "HCTH", "OPTX", "OLYP", "TPSS", "PBE0", "B1LYP", "B3LYP", "X3LYP", "HSE06"}, {" ", " VECTORS", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ABSOLUTE", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " DEGREE", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"ALL", "ATOMS", "COORDINATES", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"S", "P", "D", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"S", "P", "D", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}; gchar * default_text[9][NDFT] = {{"Slater exchange only", "Local Density Approximation","Becke 88", "Becke + Perdew", "Becke + Lee-Yang-Parr", "Extended B88+PW91+LYP88", "Perdew + Wang 91", "Perdew + Burke-Ernzerhof", "PBE revised for solids", "Revised - PBE", "Hamprecht-Cohen-Tozer-Handy", "Optimized Becke 88", "Handy-Cohen + LYP", "Tao-Perdew-Staroverov-Scuseria", "Parameter-free PBE", "Becke one-parameter hybrid + LYP", "Becke three-parameters hybrid + LYP", "Extend hybrid + LYP", "Heyd-Scuseria-Ernzerhof 06"}, {"Box parameters (a,b,c and α,β,γ)", "Lattice vectors", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Isolated", "Cubic", "Face centered cubic (FCC)", "Body centered cubic (BCC)", "Hexagonal", "Trigonal", "Tetragonal", "Body centered tetragonal (BCT)", "Orthorombic", "Monoclinic", "Triclinic", " ", " ", " ", " ", " ", " ", " ", " "}, {"Default (a, b/a, c/a)", "Absolute (a, b, c)", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Default (cos α, cos β, cos γ)", "Degrees (α, β, γ)", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"All atoms", "Some atoms", "Some coordinates", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"s", "p", "d", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"s", "p", "d", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}; double default_calc_options[24] = {0.00001, 0.0, 10000.0, 3.0, 0.0005, 0.0, 10000.0, 3.0, 10000.0, 5.0, 0.0, 0.0, 0.9, 0.0, 0.9, 10000.0, 5.0, 0.0, 0.0, 0.9, 50.0, 0.0, 0.0, 0.0}; gchar * calc_opts[NCPMDCALC][NOPTPC]={{"Convergence criteria*:", "Optimizer:", "Max steps:", "Integration step:", " ", " ", " "}, {"Convergence criteria*:", "Optimizer:", "Max steps:", "Integration step:", " ", " ", " "}, {"Max MD steps: ", "Time step:", "Barostat:", "Ions", "Factor:", "Fictitious electrons", "Factor:"}, {"Max MD steps: ", "Time step:", "Barostat:", "Ions", "Factor:", " ", " "}, {"Number of unoccupied states:", "3D visualization*", "Number of objects**:", " ", " ", " ", " "}, {"Property to compute:", " ", " ", " ", " ", " ", " "}}; int default_type[NCPMDCALC][NOPTPC]={{1, 2, 1, 1, 0, 0, 0}, {1, 2, 1, 1, 0, 0, 0}, {1, 1, 2, 3, 1, 3, 1}, {1, 1, 2, 3, 1, 0, 0}, {1, 3, 1, 0, 0, 0, 0}, {2, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}; gchar * calc_kw[NCPMDCALC]= {"OPTIMIZE WAVEFUNCTION", "OPTIMIZE GEOMETRY", "MOLECULAR DYNAMICS", "MOLECULAR DYNAMICS BO", "KOHN-SHAM ENERGIES", "VIBRATIONAL ANALYSIS", "PROPERTIES"}; gchar * calc_ds[NCPMDCALC]= {"Wavefunction optimization", "Geometry optimization", "CPMD Molecular Dynamics", "Born-Oppenheimer Molecular Dynamics", "Kohn-Sham eigen values", "Vibrational analysis", "Calculation of physical properties"}; int calc_box_num[NCACOMBO]={2, 2, 3, 3, 3}; gchar * calc_box_name[NCACOMBO][3] = {{"Preconditioned Gradient", "Direct Inversion of Iterative Subspace", " "}, {"Quasi-Newton method", "Direct Inversion of Iterative Subspace", " "}, {"None", "Parrinello-Rahman", "Parrinello-Rahman + NPT"}, {"None", "Parrinello-Rahman", "Parrinello-Rahman + NPT"}, {"Finite differences of first derivatives", "Linear response of ionic displacement", "Precalculated Hessian"}}; gchar * calc_box_keys[NCACOMBO][3] = {{"PCG", "ODIIS", " "}, {"BFGS", "GDIIS", " "}, {" ", "PARRINELLO-RAHMAN", "PARRINELLO-RAHMAN NPT"}, {" ", "PARRINELLO-RAHMAN", "PARRINELLO-RAHMAN NPT"}, {"FD", "LR", "IN"}}; gchar * rest_kw[2] = {"RANDOM", "ATOMS"}; gchar * rest_opts[3] = {"Random", "Atomic pseudo wavefunctions", "Use a RESTART.* file"}; gchar * nosetype[3] = {"Gobal", "Local", "Molecule"}; gchar * nosekey[2] = {" ", "LOCAL"}; gchar * thermo_name[2][5] = {{"None", "Controlled", "Nosé-Hoover chains", " ", " "}, {"None", "Adaptive Langevin", "Canonical sampling through velocity rescaling", "GLE", "Nosé-Hoover chains"}}; int num_thermo[2] = {3, 5}; int type_thermo[2] = {2, 2}; gchar * termoke[2] = {"TEMPCONTROL", "NOSE"}; GtkWidget * qm_preview_but; GtkWidget * calc_combo; gboolean qm_assist_init; int qm_saved_label_format[2]; GtkWidget * calc_label; GtkWidget * latbox; GtkWidget * but_at[2]; GtkWidget * spatbox; GtkWidget * ppbox[2]; GtkWidget * calc_box[NCPMDCALC]; GtkWidget * qm_option_box[MAXDATAQM-1]; gboolean is_cpmd; /*! \fn GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim) \brief prepare a labelled box widget for the CPMD input creation assistant \param box the GtkWidget sending the signal \param lab the label \param v_space vertical spacing \param h_space horizontal spacing \param dim label width */ GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, v_space); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, dim, 30, 0.0, 0.5), FALSE, FALSE, h_space); return hbox; } /*! \fn void print_all_sections (GtkTextBuffer * buf) \brief print all sections of the CPMD input file \param buf the GtkTextBuffer to print into */ void print_all_sections (GtkTextBuffer * buf) { int i; for (i=0; i 2) { print_the_section (i, 1, buf); } } else if (i == 5 && (int)tmp_cpmd -> default_opts[2]) { if (buf == NULL) { print_the_section (i, 0, qmbuffer[i]); } else { print_the_section (i, 1, buf); } } else if (i == 6 && tmp_cpmd -> calc_type == 4) { if (buf == NULL) { print_the_section (i, 0, qmbuffer[i]); } else { print_the_section (i, 1, buf); } } } } /*! \fn G_MODULE_EXPORT void update_cpmd_parameter (GtkEntry * res, gpointer data) \brief update CPMD QM option value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cpmd_parameter (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); tmp_cpmd -> default_opts[i] = v; if (i == DEFGC) { update_entry_long_double (res, tmp_cpmd -> default_opts[i]); } else { update_entry_double (res, tmp_cpmd -> default_opts[i]); } print_all_sections (NULL); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data) \brief update CPMD QM option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cpmd_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_cpmd_check (GtkToggleButton * but, gpointer data) \brief update CPMD QM option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cpmd_check (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j; #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif if (i == DEFCO || i == DEFDU) { widget_set_sensitive (but_at[(i == DEFCO) ? 0 : 1], j); } tmp_cpmd -> default_opts[i] = (double) j; print_all_sections (NULL); } /*! \fn G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data) \brief change CPMD QM option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_opt_box (GtkComboBox * box, gpointer data) { int i, j, k; j = GPOINTER_TO_INT(data); i = gtk_combo_box_get_active (box); if (j != DEFLM && j != DEFLO) { if (i != (int)tmp_cpmd -> default_opts[j]) { tmp_cpmd -> default_opts[j] = (double)i; if (j == DEFSP) { k = (int)tmp_cpmd -> default_opts[j]; gtk_combo_box_set_active (GTK_COMBO_BOX(ppbox[0]), tmp_cpmd -> pp[k][0]); gtk_combo_box_set_active (GTK_COMBO_BOX(ppbox[1]), tmp_cpmd -> pp[k][1]); } else if (j == DEFFI) { tmp_cpmd -> default_opts[DEFCO] = tmp_cpmd -> default_opts[j] + 1; if (tmp_cpmd -> fixlist != NULL) { g_free (tmp_cpmd -> fixlist); tmp_cpmd -> fixlist = NULL; if (tmp_cpmd -> fixcoord != NULL) { g_free (tmp_cpmd -> fixcoord); tmp_cpmd -> fixcoord = NULL; } } tmp_cpmd -> fixat = 0; widget_set_sensitive (sel_but[1], i); } } } else { if (i != tmp_cpmd -> pp[(int)tmp_cpmd -> default_opts[DEFSP]][j-DEFLM]) { tmp_cpmd -> pp[(int)tmp_cpmd -> default_opts[DEFSP]][j-DEFLM] = i; } } if (j == DEFVE) { widget_set_sensitive (latbox, ! (int)tmp_cpmd -> default_opts[j]); } print_all_sections (NULL); } /*! \fn GtkWidget * prepare_qm_option_box (int s) \brief CPM input file creation prepare section general options widgets \param s the section id */ GtkWidget * prepare_qm_option_box (int s) { int i, j, k, l; GtkWidget * hbox; GtkWidget * widg; gchar * str; gchar * atom_but[2] = {"Configure constraints", "Configure dummy atoms"}; GtkWidget * vbox = create_vbox (BSEP); for (i=0; i 0) { ident ++; if (ident == DEFAB || ident == DEFDG || ident == DEFSY) { hbox = cpmd_box (latbox, default_opts[s][i], 5, 20, (s == 1) ? 150 : 220); } else if (ident == DEFCO || ident == DEFDU) { hbox = cpmd_box (vbox, default_opts[s][i], 20, 20, 180); } else if (ident == DEFLM || ident == DEFLO) { hbox = cpmd_box (spatbox, default_opts[s][i], 5, 20, 220); } else { hbox = cpmd_box (vbox, default_opts[s][i], (ident == DEFSP) ? 20 : 5, 5, (s == 1) ? 150 : 220); } j = ident; switch (default_opts_type[s][i]) { case 1: widg = create_entry (G_CALLBACK(update_cpmd_parameter), 100, 15, FALSE, GINT_TO_POINTER(j)); if (j == DEFGC) { update_entry_long_double (GTK_ENTRY(widg), tmp_cpmd -> default_opts[j]); } else { update_entry_double (GTK_ENTRY(widg), tmp_cpmd -> default_opts[j]); } break; case 2: icomb ++; if (ident == DEFLM || ident == DEFLO) { ppbox[ident - DEFLM] = create_combo (); } else { widg = create_combo (); } l = (ident == DEFSP) ? qm_proj -> nspec : defaut_num[icomb]; for (k=0; k chemistry -> label[k]); } else { str = g_strdup_printf ("%s", default_text[icomb][k]); } if (ident == DEFLM || ident == DEFLO) { combo_text_append (ppbox[ident - DEFLM], str); } else { combo_text_append (widg, str); } g_free (str); } if (ident == DEFLM || ident == DEFLO) { gtk_combo_box_set_active (GTK_COMBO_BOX(ppbox[ident - DEFLM]), tmp_cpmd -> pp[(int)tmp_cpmd -> default_opts[DEFSP]][ident - DEFLM]); g_signal_connect (G_OBJECT (ppbox[ident - DEFLM]), "changed", G_CALLBACK(changed_opt_box), GINT_TO_POINTER(j)); } else { gtk_combo_box_set_active (GTK_COMBO_BOX(widg), (int)tmp_cpmd -> default_opts[j]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_opt_box), GINT_TO_POINTER(j)); } break; case 3: widg = check_button (NULL, -1, -1, tmp_cpmd -> default_opts[j], G_CALLBACK(update_cpmd_check), GINT_TO_POINTER(j)); break; } if (ident == DEFLM || ident == DEFLO) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ppbox[ident - DEFLM], FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); } if (j==DEFEM || j==DEFGC || j==DEFCU) { if (j==DEFEM || j==DEFGC) { widg = gtk_label_new ("a.u."); } else { widg = gtk_label_new ("Ry"); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 5); } else if (j == DEFVE) { latbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, latbox, FALSE, FALSE, 15); widget_set_sensitive (latbox, ! (int)tmp_cpmd -> default_opts[DEFVE]); } else if (j == DEFCO || j == DEFDU) { k = (j==DEFCO) ? 0 : 1; but_at[k] = create_button (atom_but[k], IMG_NONE, NULL, 175, -1, GTK_RELIEF_NORMAL, G_CALLBACK(atom_button), GINT_TO_POINTER(j)); widget_set_sensitive (but_at[k], (int)tmp_cpmd -> default_opts[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but_at[k], FALSE, FALSE, 20); if (j == DEFCO) { ident ++; icomb ++; } } else if (j == DEFSP) { spatbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, spatbox, FALSE, FALSE, 15); } } } return vbox; } /*! \fn G_MODULE_EXPORT void update_calc_parameter (GtkEntry * res, gpointer data) \brief update CPMD calculation option value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_calc_parameter (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (i==STEPO || i==STEPG || i==STEPC || i==STEPB || i==KSUNO || i==NBAND) { j = (int) v; tmp_cpmd -> calc_opts[i] = (double) j; update_entry_int (res, j); } else { tmp_cpmd -> calc_opts[i] = v; if (i == CONVO || i == CONVG) { update_entry_long_double (res, tmp_cpmd -> calc_opts[i]); } else { update_entry_double (res, tmp_cpmd -> calc_opts[i]); } } for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void changed_calc_opt_box (GtkComboBox * box, gpointer data) \brief change CPMD calculation option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_calc_opt_box (GtkComboBox * box, gpointer data) { int i, j; j = GPOINTER_TO_INT(data); i = gtk_combo_box_get_active (box); if (i != tmp_cpmd -> calc_opts[j]) { tmp_cpmd -> calc_opts[j] = i; for (j=1; j<4; j++) print_the_section (j, 0, qmbuffer[j]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data) \brief update CPMD calculation option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_calc_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_calc_check (GtkToggleButton * but, gpointer data) \brief update CPMD calculation option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_calc_check (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); #ifdef GTK4 tmp_cpmd -> calc_opts[i] = (double) gtk_check_button_get_active (but); #else tmp_cpmd -> calc_opts[i] = (double) gtk_toggle_button_get_active (but); #endif for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn GtkWidget * calc_qm_option_box (int c) \brief CPMD input assistant prepare the calculation option widgets \param c the calculation id */ GtkWidget * calc_qm_option_box (int c) { int i, j, k, l; GtkWidget * hbox; GtkWidget * widg; gchar * str; GtkWidget * vbox = create_vbox (BSEP); for (i=0; i 0) { idopt ++; l = 0; if (idopt == ANNIC || idopt == ANNIB) { hbox = cpmd_box (vbox, "Annealing:", 0, 5, 220); } if (idopt == ANNIC || idopt == ANNEC || idopt == ANNIB) { hbox = cpmd_box (vbox, calc_opts[c][i], 0, 25, 120); l = 30; } else if (idopt == AFAIC || idopt == AFAEC || idopt == AFAIB) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new(calc_opts[c][i]), FALSE, FALSE, 10); l = 30; } else { hbox = cpmd_box (vbox, calc_opts[c][i], 0, 5, 220); } j = idopt; switch (default_type[c][i]) { case 1: widg = create_entry (G_CALLBACK(update_calc_parameter), 100, 15, FALSE, GINT_TO_POINTER(j)); if (j==STEPO || j==STEPG || j==STEPC || j==STEPB || j==KSUNO || j==NBAND) { update_entry_int (GTK_ENTRY(widg), (int) tmp_cpmd -> calc_opts[j]); } else { update_entry_double (GTK_ENTRY(widg), tmp_cpmd -> calc_opts[j]); } break; case 2: icalc ++; widg = create_combo (); for (k=0; k calc_opts[j]); g_signal_connect (G_OBJECT (widg), "changed", G_CALLBACK(changed_calc_opt_box), GINT_TO_POINTER(j)); break; case 3: widg = check_button (NULL, -1, -1, tmp_cpmd -> calc_opts[j], G_CALLBACK(update_calc_check), GINT_TO_POINTER(j)); break; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, l); if (j==TSTPO || j==TSTPG || j==TSTPC || j==TSTPB) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new ("a.u."), FALSE, FALSE, 5); } else if (j==NBAND) { gchar * ksout = "\t * electronic density(ies) or/and wavefunction(s)\n" "\t ** as many index(es) to be supplied on the next line:\n" "\t\t > 0 for electronic density\n\t\t < 0 for wavefunction"; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(ksout, -1, -1, 0.0, 0.5), FALSE, FALSE, 10); } } } return vbox; } /*! \fn G_MODULE_EXPORT void changed_calc_box (GtkComboBox * box, gpointer data) \brief change CPMD calculation type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_calc_box (GtkComboBox * box, gpointer data) { int i; i = gtk_combo_box_get_active (box); if (i != tmp_cpmd -> calc_type) { gtk_label_set_text (GTK_LABEL(calc_label), g_strdup_printf ("%s option(s)", calc_ds[i])); gtk_label_set_use_markup (GTK_LABEL(calc_label), TRUE); gtk_widget_hide (calc_box[tmp_cpmd -> calc_type]); gtk_widget_show (calc_box[i]); tmp_cpmd -> calc_type = i; if (tmp_cpmd -> calc_type != 2) { gtk_widget_hide (electron_box); } else { gtk_widget_show (electron_box); } for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } } /*! \fn G_MODULE_EXPORT void changed_info (GtkTextBuffer * textbuf, gpointer data) \brief update CPMD input file preview \param textbuf the GtkTextBuffer to print into \param data the associated data pointer */ G_MODULE_EXPORT void changed_info (GtkTextBuffer * textbuf, gpointer data) { GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (textbuf, & bStart); gtk_text_buffer_get_end_iter (textbuf, & bEnd); if (tmp_cpmd -> info != NULL) g_free (tmp_cpmd -> info); tmp_cpmd -> info = g_strdup_printf ("%s", gtk_text_buffer_get_text (textbuf, & bStart, & bEnd, FALSE)); print_the_section (0, 0, qmbuffer[0]); } /*! \fn GtkWidget * info_box () \brief create CPMD input file information widgets */ GtkWidget * info_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (0); GtkWidget * scrollsets = create_scroll (NULL, 355, 250, GTK_SHADOW_ETCHED_IN); GtkWidget * aview = create_text_view (-1, -1, 1, 0, G_CALLBACK(changed_info), NULL, NULL); if (tmp_cpmd -> info != NULL) print_info (tmp_cpmd -> info, NULL, gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); add_container_child (CONTAINER_SCR, scrollsets, aview); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, scrollsets, FALSE, FALSE, 85); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn GtkWidget * section_box (int s) \brief create CPMD section box \param s the section id */ GtkWidget * section_box (int s) { int i; gchar * str; GtkWidget * hbox; GtkWidget * vbox = create_vbox (BSEP); if (s == 0) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info_box(), FALSE, FALSE, 50); } else if (s == 1) { // CPMD Calculation /* Calc type combo_box: */ idopt = -1; icalc = -1; ident = -1; icomb = -1; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Calculation to be performed:", -1, -1, 0.0, 0.5), FALSE, FALSE, 10); calc_combo = create_combo (); for (i=0; i%s option(s)
", calc_ds[tmp_cpmd -> calc_type]); calc_label = markup_label(str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, calc_label, FALSE, FALSE, 10); for (i=0; i calc_type); } else if (s == 2) { // CPMD - thermostat(s) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, thermo_box(), FALSE, FALSE, 5); } else if (s == 3) { // CPMD - restart add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, restart_box(), FALSE, FALSE, 0); } /* General CPMD section options: */ if (s > 0 && s != 2 && s != 3) { i = (s == 1) ? s : s - 2; str = g_strdup_printf ("General %s section option(s)",cpmd_elements[i]); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, 525, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); qm_option_box[i-1] = prepare_qm_option_box (i-1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, qm_option_box[i-1], FALSE, FALSE, 0); } return vbox; } /*! \fn GtkWidget * qm_preview_box (int c, int s, int l) \brief prepare preview section widgets \param c 0 = CPMD, 1 = CP2K \param s section id \param l spacing */ GtkWidget * qm_preview_box (int c, int s, int l) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * scrollsets = create_scroll (NULL, 250, (c) ? 280 : 410, GTK_SHADOW_ETCHED_IN); GtkWidget * aview = create_text_view (-1, -1, 0, 1, NULL, NULL, NULL); qmbuffer[s] = gtk_text_view_get_buffer (GTK_TEXT_VIEW(aview)); add_container_child (CONTAINER_SCR, scrollsets, aview); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, scrollsets, FALSE, FALSE, l); if (c == 0) { print_the_section (s, 0, qmbuffer[s]); } else { print_cp2k (s, qmbuffer[s]); } return vbox; } /*! \fn gchar * section_name (int p) \brief get CPMD input creation section name \param p the section id */ gchar * section_name (int p) { if (p > 0 && p < 4) { return g_strdup_printf ("Details of the %s section that %s", cpmd_elements[1], cdescr[1]); } else if (p == 0) { return g_strdup_printf ("Details of the %s section that %s", cpmd_elements[p], cdescr[p]); } else { return g_strdup_printf ("Details of the %s section that %s", cpmd_elements[p-2], cdescr[p-2]); } } /*! \fn GtkWidget * vbox_cpmd (int s) \brief create CPMD input creation section widgets \param s the section id */ GtkWidget * vbox_cpmd (int s) { GtkWidget * vbox; GtkWidget * hbox; vbox = create_vbox (BSEP); hbox = create_hbox (0); if (s < 2 || s > 3) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(section_name(s), -1, 20, 0.0, 0.5), FALSE, FALSE, 20); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, (s < 2 ||s > 3) ? 5 : 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, section_box(s), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, qm_preview_box (0, s, (s < 2 ||s > 3) ? 0 : 65), FALSE, FALSE, 0); return vbox; } /*! \fn gchar * page_name (int p) \brief get CPMD input creation assistant page name \param p the page id */ gchar * page_name (int p) { if (p > 0 && p <4) { if (p == 1) { return g_strdup_printf ("The %s section - Calculation options", cpmd_elements[1]); } else if (p == 2) { return g_strdup_printf ("The %s section - Thermostat options", cpmd_elements[1]); } else { return g_strdup_printf ("The %s section - RESTART options", cpmd_elements[1]); } } else if (p == 0) { return g_strdup_printf ("The %s section", cpmd_elements[p]); } else { return g_strdup_printf ("The %s section", cpmd_elements[p-2]); } } /*! \fn void add_cpmd_pages () \brief add pages to the CPMD input file creation assistant */ void add_cpmd_pages () { int i; gchar * info; GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); GtkWidget * page; for (i=0; i Finalize the creation of the CPMD input file now !
"); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 100); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, conclu, markup_label("\n \tNote: You can re-open this assitant later if required to adjust your choices\n", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (assist, conclu); gtk_assistant_set_page_title (assist, conclu, "Create the input file now !"); gtk_assistant_set_page_type (assist, conclu, GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (assist, conclu, TRUE); gtk_assistant_update_buttons_state (assist); } /*! \fn void proj_unselect_all_atoms () \brief unselect all atom(s) in the target project of the assistant */ void proj_unselect_all_atoms () { int i, j; for (i=0; i natomes; i++) { for (j=0; j<2; j++) { qm_proj -> atoms[0][i].pick[j] = FALSE; qm_proj -> atoms[0][i].label[j] = FALSE; } } qm_view -> picked = 0; init_default_shaders (qm_view); } /*! \fn G_MODULE_EXPORT void on_qm_assistant_cancel (GtkAssistant * assistant, gpointer data) \brief cancel QM / QM-MM input file creation \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_cancel (GtkAssistant * assistant, gpointer data) { destroy_this_widget (GTK_WIDGET(assistant)); proj_unselect_all_atoms (); // restore selection if any from calc.c restore_ogl_selection (qm_view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data) \brief QM / QM-MM input file creation cancel event GTK4 \param assistant the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWindow * assistant, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) \brief QM / QM-MM input file creation cancel event GTK3 \param assistant the GtkWidget sending the signal \param event \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_qm_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) #endif { on_qm_assistant_cancel (((GtkAssistant *)assistant), data); return TRUE; } /*! \fn G_MODULE_EXPORT void on_qm_assistant_close (GtkAssistant * assistant, gpointer data) \brief close QM / QM-MM input creation assistant \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_close (GtkAssistant * assistant, gpointer data) { // Apply changes ... then close window destroy_this_widget (GTK_WIDGET(assistant)); // Saving // Cleaning proj_unselect_all_atoms (); // restore selection if any from calc.c restore_ogl_selection (qm_view); } /*! \fn G_MODULE_EXPORT gint on_qm_assistant_go_forward (gint current_page, gpointer data) \brief QM / QM-MM assistant go to the next page \param current_page the current assistant page \param data the associated data pointer */ G_MODULE_EXPORT gint on_qm_assistant_go_forward (gint current_page, gpointer data) { int i = GPOINTER_TO_INT(data); if (i == 0) { switch (current_page) { case MAXDATAQM+4: return -1; break; case 2: if (tmp_cpmd -> calc_type == 2 || tmp_cpmd -> calc_type == 3) { return 3; } else { return 4; } break; case 5: if ((int)tmp_cpmd -> default_opts[2]) { return current_page+1; } else if (tmp_cpmd -> calc_type == 6) { return current_page+2; } else { return current_page+3; } break; case 6: if (tmp_cpmd -> calc_type == 6) { return current_page+1; } else { return current_page+2; } default: return current_page+1; break; } } else { switch (current_page) { case MAXDATAQM+4: return -1; break; default: return current_page+1; break; } } } /*! \fn G_MODULE_EXPORT void on_qm_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) \brief prepare QM / QM-MM assistant pages before display \param assistant the GtkAssistant sending the signal \param page the current page \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) { int i = gtk_assistant_get_current_page (assistant); // field_unselect_all (); switch (i) { case 0: if (is_the_widget_visible(qm_preview_but)) gtk_widget_hide (qm_preview_but); break; default: if (! is_the_widget_visible(qm_preview_but)) gtk_widget_show (qm_preview_but); break; } } /*! \fn gboolean go_for_it (int i, int j, gboolean print[2]) \brief add tab to the QM / QM-MM file preview window notebook \param i tab id \param j last tab id \param print basis and pseudopotential printing status */ gboolean go_for_it (int i, int j, gboolean print[2]) { if (tmp_cp2k -> input_type && i<=j-3) return TRUE; if (i==0) return TRUE; if (i==j-2 && print[0]) return TRUE; if (i==j-1 && print[1]) return TRUE; return FALSE; } /*! \fn G_MODULE_EXPORT void show_qm_file_preview (GtkButton * but, gpointer data) \brief show QM / QM-MM input file preview \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_qm_file_preview (GtkButton * but, gpointer data) { int i, j, k, l, c; c = GPOINTER_TO_INT(data); gchar * ptitle[5] = {"CP2K input file", "forces.inc", "system.inc", "motion.inc", "coord.inc"}; gchar * wtite[2] = {" input file preview", " input files preview"}; gchar * str; GtkWidget * scrollsets; GtkWidget * aview; GtkWidget * notebook; l = 0; gboolean print[2]; if (c) { j = 6; notebook = gtk_notebook_new (); if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) l = 1; if (tmp_cp2k -> input_type) { str = g_strdup_printf ("%s %s", co_type[c], wtite[1]); } else { str = g_strdup_printf ("%s %s", co_type[c], wtite[0]); } print[0] = print[1] = FALSE; for (i=0; i nspec; i++) { if (tmp_cp2k -> spec_data[i][0] != -1) { print[0] = TRUE; break; } } for (i=0; i nspec; i++) { if (tmp_cp2k -> spec_data[i][1] != -1) { print[1] = TRUE; break; } } } else { j = 1; str = g_strdup_printf ("%s %s", co_type[c], wtite[0]); } GtkWidget * preview = dialogmodal (str, GTK_WINDOW (qm_assistant)); g_free (str); if (c) { add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area(preview), notebook, FALSE, FALSE, 0); } else { scrollsets = create_scroll (dialog_get_content_area(preview), 700, 350, GTK_SHADOW_ETCHED_IN); } k = -1; for (i=0; i j+l-3) { str = g_strdup_printf ("%s", tmp_cp2k -> files[i-(j+l-3)]); } else { str = g_strdup_printf ("%s", ptitle[(i == j-3+l) ? 4 : i]); } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scrollsets, gtk_label_new (str)); g_free (str); } else { add_container_child (CONTAINER_SCR, scrollsets, aview); } } if (c) { if (tmp_cp2k -> input_type || i != j+l-3) { print_cp2k ((i >= j+l-3) ? i+1-l: i, gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); } } else { print_all_sections (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); } } run_this_gtk_dialog (preview, G_CALLBACK(run_destroy_dialog), NULL); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_saving_qm (GtkNativeDialog * info, gint response_id, gpointer data) \brief apply QM / QM-MM assistant and create input file(s) - running the dialog GTK3 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_saving_qm (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_saving_qm (GtkDialog * info, gint response_id, gpointer data) \brief apply QM / QM-MM assistant and create input file(s) - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_saving_qm (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int i, j, k, l; int c = GPOINTER_TO_INT(data); gboolean result = FALSE; gboolean done = FALSE; GtkTextBuffer * buffer = NULL; GtkTextIter bStart; GtkTextIter bEnd; GError * err = NULL; gchar * text; gchar * filename; gchar * direname; gchar * cp2sp[2] = {"basis.inc", "pseudo.inc"}; gchar * cp2file[4] = {"forces.inc", "system.inc", "motion.inc", "coord.inc"}; switch (response_id) { case GTK_RESPONSE_ACCEPT: filename = file_chooser_get_file_name (chooser); direname = file_chooser_get_current_folder (chooser); if (filename != NULL) { done = TRUE; if (! c || (c && ! tmp_cp2k -> input_type)) buffer = add_buffer (NULL, NULL, NULL); switch (c) { case 0: print_all_sections (buffer); break; case 1: j = 6; k = 0; if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) k = 1; for (i=0; i input_type) { l = (i >= j+k-3) ? i+1-k: i; if (tmp_cp2k -> input_type) { buffer = add_buffer (NULL, NULL, NULL); if (i > 0) filename = g_strdup_printf ("%s/%s", direname, cp2file[l-1]); print_cp2k (l, buffer); gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); text = gtk_text_buffer_get_text (buffer, & bStart, & bEnd, FALSE); gtk_text_buffer_set_modified (buffer, FALSE); result = g_file_set_contents (filename, text, -1, & err); g_free (text); g_object_unref (buffer); if (! result && err) { show_error (g_strdup_printf ("Error while saving input file: %s\n Error: %s", filename, err -> message), 0, qm_assistant); g_error_free (err); } g_free (filename); } else if (l != 5 && l != 6) { print_cp2k (l, buffer); } } } break; } if (! c || (c && ! tmp_cp2k -> input_type)) { gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); text = gtk_text_buffer_get_text (buffer, & bStart, & bEnd, FALSE); gtk_text_buffer_set_modified (buffer, FALSE); result = g_file_set_contents (filename, text, -1, & err); g_free (text); g_object_unref (buffer); if (! result && err) { /* error saving file, show message to user */ show_error (g_strdup_printf ("Error while saving input file: %s\n Error: %s", filename, err -> message), 0, qm_assistant); g_error_free (err); } g_free (filename); } if (c) { // save pseudo and basis auto for (i=0; i<2; i++) { buffer = add_buffer (NULL, NULL, NULL); filename = g_strdup_printf ("%s/%s", direname, cp2sp[i]); print_cp2k (i+5, buffer); gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); text = gtk_text_buffer_get_text (buffer, & bStart, & bEnd, FALSE); result = g_file_set_contents (filename, text, -1, & err); g_free (text); if (! result && err) { /* error saving file, show message to user */ show_error (g_strdup_printf ("Error while saving file %s: %s", cp2sp[i], err -> message), 0, qm_assistant); g_error_free (err); break; } g_free (filename); g_object_unref (buffer); } } } break; default: done = TRUE; break; } if (done) { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } if (c && result) { if (tmp_cp2k -> input_type) { if (tmp_cp2k -> opts[CP2RUN] > 1.0 && tmp_cp2k -> opts[CP2RUN] < 4.0) { show_info ("The input files 'forces.inc', 'system.inc', 'motion.inc' and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file.", 0, qm_assistant); } else { show_info ("The input files 'forces.inc', 'system.inc', and 'coord.inc'\n" "as well as the files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file.", 0, qm_assistant); } } else { show_info ("The files 'basis.inc' and 'pseudo.inc'\n" "for the atomic basis set and peudo-potentials\n" "were saved in the same directory as the main input file.", 0, qm_assistant); } } } /*! \fn G_MODULE_EXPORT void on_qm_assistant_apply (GtkAssistant * assistant, gpointer data) \brief apply QM / QM-MM assistant and create input file(s) - creating the dialog \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_qm_assistant_apply (GtkAssistant * assistant, gpointer data) { int c = GPOINTER_TO_INT(data); gchar * text; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileFilter * filter1, * filter2; gchar * qm_type[2] = {"CPMD", "CP2K"}; const gchar * qm_name[2] = {"CPMD input file (*.in)", "CP2K input file (*.inp)"}; const gchar * qm_ext[2] = {".in", ".inp"}; text = g_strdup_printf ("Saving %s input file(s)", qm_type[c]); info = create_file_chooser (text, GTK_WINDOW(assistant), GTK_FILE_CHOOSER_ACTION_SAVE, "Save"); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); g_free (text); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), qm_name[c]); text = g_strdup_printf ("*%s", qm_ext[c]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), text); g_free (text); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), "All files (*)"); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*"); gtk_file_chooser_add_filter (chooser, filter2); text = g_strdup_printf ("%s%s", prepare_for_title(qm_proj -> name), qm_ext[c]); file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, text); g_free (text); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_saving_qm), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_saving_qm), data); #endif } /*! \fn void create_qm_input_file (int c, int p, int s) \brief initialize an ab-initio MD input file creation assistant \param c 0 = CPMD, 1 = CP2K \param p the target project \param s 0 = ab-initio, 1 = QM-MM */ void create_qm_input_file (int c, int p, int s) { gchar * qm_type[2] = {"first-principles", "QM-MM"}; qm_assistant = gtk_assistant_new (); gtk_widget_set_size_request (qm_assistant, 800, 600); int i, j; //field_color = TRUE; field_object = -1; //selected_aspec = -1; opengl_project_changed (p); qm_proj = get_project_by_id(p); for (i=0; i cpmd_input[s] == NULL) { qm_proj -> cpmd_input[s] = g_malloc0 (sizeof*qm_proj -> cpmd_input[s]); qm_proj -> cpmd_input[s] -> calc_type = 0; qm_proj -> cpmd_input[s] -> thermostats = 0; qm_proj -> cpmd_input[s] -> ions_thermostat = NULL; qm_proj -> cpmd_input[s] -> elec_thermostat = NULL; qm_proj -> cpmd_input[s] -> dummies = 0; qm_proj -> cpmd_input[s] -> dummy = NULL; qm_proj -> cpmd_input[s] -> fixat = 0; qm_proj -> cpmd_input[s] -> fixlist = NULL; qm_proj -> cpmd_input[s] -> fixcoord = NULL; qm_proj -> cpmd_input[s] -> restart[0] = 0; qm_proj -> cpmd_input[s] -> restart[1] = 100; qm_proj -> cpmd_input[s] -> restart[2] = 2; qm_proj -> cpmd_input[s] -> restart[3] = 0; qm_proj -> cpmd_input[s] -> restart[4] = 1; for (i=5; i<9; i++) qm_proj -> cpmd_input[s] -> restart[i] = 0; qm_proj -> cpmd_input[s] -> restart[9] = 0; for (i=0; i<17; i++) qm_proj -> cpmd_input[s] -> default_opts[i] = default_cpmd_options[i]; for (i=0; i<24; i++) qm_proj -> cpmd_input[s] -> calc_opts[i] = default_calc_options[i]; qm_proj -> cpmd_input[s] -> pp = allocdint (qm_proj -> nspec, 2); for (i=0; i nspec; i++) qm_proj -> cpmd_input[s] -> pp[i][0] = qm_proj -> cpmd_input[s] -> pp[i][1] = 1; qm_proj -> cpmd_input[s] -> info = g_strdup_printf (" Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d", prepare_for_title(qm_proj -> name), qm_proj -> natomes, qm_proj -> nspec); } tmp_cpmd = qm_proj -> cpmd_input[s]; } else { is_cpmd = FALSE; if (qm_proj -> cp2k_input[s] == NULL) { qm_proj -> cp2k_input[s] = g_malloc0 (sizeof*qm_proj -> cp2k_input[s]); qm_proj -> cp2k_input[s] -> input_type = 0; for (i=0; i<2; i++) { qm_proj -> cp2k_input[s] -> fixat[i] = 0; qm_proj -> cp2k_input[s] -> fixlist[i] = NULL; qm_proj -> cp2k_input[s] -> fixcoord[i] = NULL; } qm_proj -> cp2k_input[s] -> thermostats = 0; qm_proj -> cp2k_input[s] -> ions_thermostat = NULL; for (i=0; i<5; i++) qm_proj -> cp2k_input[s] -> files[i] = NULL; for (i=0; i<41; i++) qm_proj -> cp2k_input[s] -> opts[i] = default_cp2k_options[i]; qm_proj -> cp2k_input[s] -> opts[CP2SYM] = find_cp2k_sym (); for (i=0; i<3; i++) { for (j=0;j<4;j++) qm_proj -> cp2k_input[s] -> extra_opts[i][j] = default_cp2k_extra[i][j]; if (i == 0) qm_proj -> cp2k_input[s] -> extra_opts[i][2] = default_vdw_cut[0]; } qm_proj -> cp2k_input[s] -> spec_data = allocdint(qm_proj -> nspec, 2); qm_proj -> cp2k_input[s] -> spec_files = g_malloc (qm_proj -> nspec*sizeof*qm_proj -> cp2k_input[s] -> spec_files); for (i=0; i nspec; i++) { qm_proj -> cp2k_input[s] -> spec_data[i][0] = cp2k_is_basis_in_database (i); qm_proj -> cp2k_input[s] -> spec_data[i][1] = cp2k_is_pseudo_in_database (i); qm_proj -> cp2k_input[s] -> spec_files[i] = g_malloc0 (2*sizeof*qm_proj -> cp2k_input[s] -> spec_files[i]); qm_proj -> cp2k_input[s] -> spec_files[i][0] = NULL; qm_proj -> cp2k_input[s] -> spec_files[i][1] = NULL; } gchar * defname[2]={"basis.inc", "pseudo.inc"}; for (j=0;j<2;j++) { for (i=0; i nspec; i++) { if (qm_proj -> cp2k_input[s] -> spec_data[i][j] > -1) { qm_proj -> cp2k_input[s] -> files[1+j] = g_strdup_printf ("%s", defname[j]); break; } } } qm_proj -> cp2k_input[s] -> info = g_strdup_printf (" Project name: %s\n" " Total number of atoms: %d\n" " Number of chemical species: %d", prepare_for_title(qm_proj -> name), qm_proj -> natomes, qm_proj -> nspec); } tmp_cp2k = qm_proj -> cp2k_input[s]; } qm_coord = qm_proj -> coord; qm_view = qm_proj -> modelgl; gtk_window_set_resizable (GTK_WINDOW (qm_assistant), FALSE); gtk_window_set_modal (GTK_WINDOW (qm_assistant), TRUE); gchar * str = g_strdup_printf ("Basic %s - %s - calculation assistant", co_type[c], qm_type[s]); gtk_window_set_title (GTK_WINDOW(qm_assistant), str); g_free (str); GtkWidget * intro = create_vbox (BSEP); gchar * info = g_strdup_printf ("\tThis assistant will help you to setup a %s %s\n" "\tcalculation using %s 3D model as starting point\n" "\nPlease note that the %s code offers so many calculation options that it is not possible\n" "to provide a description and offer a comprehensive usage guide for each of them. \n" "Therefore this assistant only provides help towards basics and / or frequently used %s instructions. \n\n" "In any case if you intent to use the %s code please refer to the user manual.", qm_type[s], co_type[c], qm_proj -> name, co_type[c], co_type[c], co_type[c]); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 50); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label("\n \tNote: You can re-open this assistant later if required to adjust your choices\n", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (GTK_ASSISTANT (qm_assistant), intro); str = g_strdup_printf ("%s calculation set-up", co_type[c]); gtk_assistant_set_page_title (GTK_ASSISTANT (qm_assistant), intro, str); g_free (str); gtk_assistant_set_page_type (GTK_ASSISTANT (qm_assistant), intro, GTK_ASSISTANT_PAGE_INTRO); gtk_assistant_set_page_complete (GTK_ASSISTANT (qm_assistant), intro, qm_assist_init); if (c == 0) { add_cpmd_pages (); } else { add_cp2k_pages (); } gtk_assistant_set_forward_page_func (GTK_ASSISTANT (qm_assistant), on_qm_assistant_go_forward, GINT_TO_POINTER(c), NULL); qm_preview_but = create_button ("Preview", IMG_STOCK, EDITF, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_qm_file_preview), GINT_TO_POINTER(c)); gtk_assistant_add_action_widget (GTK_ASSISTANT (qm_assistant), qm_preview_but); g_signal_connect (G_OBJECT (qm_assistant), "prepare", G_CALLBACK(on_qm_assistant_prepare), GINT_TO_POINTER(c)); g_signal_connect (G_OBJECT (qm_assistant), "cancel", G_CALLBACK(on_qm_assistant_cancel), GINT_TO_POINTER(c)); g_signal_connect (G_OBJECT (qm_assistant), "close", G_CALLBACK(on_qm_assistant_close), GINT_TO_POINTER(c)); g_signal_connect (G_OBJECT (qm_assistant), "apply", G_CALLBACK(on_qm_assistant_apply), GINT_TO_POINTER(c)); add_gtk_close_event (qm_assistant, G_CALLBACK(on_qm_assistant_cancel_event), GINT_TO_POINTER(c)); gtk_assistant_set_page_complete (GTK_ASSISTANT (qm_assistant), gtk_assistant_get_nth_page(GTK_ASSISTANT (qm_assistant), 0), TRUE); show_the_widgets (qm_preview_but); show_the_widgets (qm_assistant); if (c == 0) { for (i=0; i calc_type]); if (tmp_cpmd -> calc_type != 2) gtk_widget_hide (electron_box); } gtk_widget_hide (qm_preview_but); } Atomes-GNU-1.1.14/src/calc/cpmd/cpmd_nose.c000066400000000000000000001622471457665371200202400ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cpmd_nose.c * @short Functions to prepare the thermostat(s) configuration widgets for QM / QM-MM input files * @author Sébastien Le Roux */ /* * This file: 'cpmd_nose.c' * * Contains: * - The functions to prepare the thermostat(s) configuration widgets for QM / QM-MM input files * * List of functions: int get_num_thermo (); int is_not_thermostated (int at, int therm); int is_fixed_atom (int at); int in_dummy (int at, int id); gboolean are_all_atoms_thermostated (); gboolean was_it_selected (int id, int at); void set_going_forward (); void clean_nose_widgets (); void thermo_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void thermo_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void remove_nose_thermostat (int num_to_remove); void init_thermostats (int type, int elec); void clean_thermostat (int new_type); void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb); void atom_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void atom_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void fill_thermo_atom_model (int therm); void select_atom_from_model (int therm); void create_selection_button (GtkWidget * box, int num, int id, gpointer data); void create_nose_thermo_param_box (int therm_id); void create_selection_combo (int id, int num, int type, GCallback handler); void add_thermostat (int extra); void prepare_therm_ions (); void prepare_therm_elec (); void thermo_type_box (GtkWidget * vbox, gchar * str, int id); G_MODULE_EXPORT void select_thermo (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_remove_nose_thermostat (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void cpmd_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void select_atoms_not_thermostated (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_select_atom_from_model (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void atom_selection_button (GtkButton * but, gpointer data); G_MODULE_EXPORT void changed_nose_thermo_id_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void add_or_remove_thermostat (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_thermo_box_nose (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_thermo_box (GtkComboBox * box, gpointer data); GtkWidget * create_nose_box (int n); GtkWidget * thermo_box (); thermostat * get_thermo (); thermostat * get_active_thermostat (int id); thermostat * init_thermo (int id, int type, int sys); */ #include "global.h" #include "interface.h" #include "glview.h" #include "calc.h" #include "cpmd.h" #include "cp2k.h" extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern ColRGBA init_color (int id, int numid); extern void proj_unselect_all_atoms (); extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); extern dummy_atom * get_active_dummy (int id); extern void create_dummy_param_box (int dummy_id); char * c_thermo[2][CP2NTHERM][4] = {{{"Initial temperature: ", " ", " ", " "}, {"Target temperature: ","Tolerance: ", " ", " "}, {"Target temperature: ", "Target frequency: ", " ", " "}, {" ", " ", " ", " "}, {" ", " ", " ", " "}}, {{" ", " ", " ", " "}, {"Time constant (Langevin): ", "Time constant (Nosë-Hoover): ", "Mass: ", "Chi: "}, {"Time constant: ", " ", " ", " "}, {" ", " ", " ", " "}, {"Length: ", "Multiple time steps: ", "Time constant: ", "Yoshida integrator: "}}}; char * u_thermo[2][CP2NTHERM][4] = {{{" K", " ", " ", " "}, {" K", " K", " ", " "}, {" K", " cm-1", " ", " "}, {" ", " ", " ", " "}, {" ", " ", " ", " "}}, {{" ", " ", " ", " "}, {" fs", " fs", " fs-1", " fs-1"}, {" fs", " ", " ", " "}, {" ", " ", " ", " "}, {" ", " ", " fs", " "}}}; char * ue_thermo[CP2NTHERM][4] = {{" a.u.", " ", " ", " "}, {" a.u.", " ", " ", " "}, {" a.u.", " a.u.", " ", " "}, {" a.u.", " cm-1", " ", " "}}; int v_thermo[2][CP2NTHERM] = {{1, 2, 2, 0, 0}, {0, 4, 1, 0, 4}}; double d_thermo[2][CP2NTHERM][4] = {{{ 300.0, 0.0, 0.0, 0.0}, { 300.0, 20.0, 0.0, 0.0}, { 300.0, 200.0, 0.0, 0.0}, { 0.0, 0.0, 0.0, 0.0}, { 0.0, 0.0, 0.0, 0.0}}, {{ 0.0, 0.0, 0.0, 0.0}, { 100.0, 100.0, 1.0, 1.0}, { 100.0, 0.0, 0.0, 0.0}, { 0.0, 0.0, 0.0, 0.0}, { 3.0, 2.0, 1000.0, 3.0}}}; GtkWidget * sel_but[3]; GtkWidget * sel_img[3]; GtkWidget * electron_box; GtkWidget * therm_ions; GtkWidget * therm_elec; GtkWidget * therm_param_ions; GtkWidget * therm_param_elec; GtkWidget * nose_box; GtkWidget * combo_id[2]; GtkWidget * combo_id_box[2]; GtkWidget * nose_id_box[2]; GtkCellRenderer * thermo_renderer[6]; GtkTreeViewColumn * thermo_col[6]; int n_therm; int at_col; int * old_thermo; int ** old_fixed; int num_cpmd_objects; int the_therm; gboolean fixco; GtkTreeStore * add_model; /*! \fn thermostat * get_thermo () \brief get QM / QM-MM ions thermostat */ thermostat * get_thermo () { if (is_cpmd) { return tmp_cpmd -> ions_thermostat; } else { return tmp_cp2k -> ions_thermostat; } } /*! \fn int get_num_thermo () \brief get the number of thermostat(s) */ int get_num_thermo () { if (is_cpmd) { return tmp_cpmd -> thermostats; } else { return tmp_cp2k -> thermostats; } } /*! \fn gboolean are_all_atoms_thermostated () \brief are all atom(s) in the model thermostated ? */ gboolean are_all_atoms_thermostated () { int i, j; thermostat * thermo = get_thermo(); j = 0; if (thermo -> sys < LOCAL) return TRUE; for (i=0; i natoms; if (thermo -> next != NULL) thermo = thermo -> next; } if (j == qm_proj -> natomes) { return TRUE; } else { return FALSE; } } /*! \fn void set_going_forward () \brief QM / QM-MM assistant going forward on thermostat page */ void set_going_forward () { GtkAssistant * assist = GTK_ASSISTANT(qm_assistant); GtkWidget * page = gtk_assistant_get_nth_page (assist, (is_cpmd) ? 3 : 5); gtk_assistant_set_page_complete (assist, page, are_all_atoms_thermostated ()); } /*! \fn void clean_nose_widgets () \brief clean thermostat widgets */ void clean_nose_widgets () { combo_id_box[0] = destroy_this_widget (combo_id_box[0]); combo_id[0] = destroy_this_widget (combo_id[0]); nose_id_box[1] = destroy_this_widget (nose_id_box[1]); nose_id_box[0] = destroy_this_widget (nose_id_box[0]); nose_box = destroy_this_widget (nose_box); } /*! \fn thermostat * get_active_thermostat (int id) \brief get thermostat using id \param id the thermostat id */ thermostat * get_active_thermostat (int id) { if (id < 0) { return tmp_cpmd -> elec_thermostat; } else { thermostat * thermo = get_thermo (); while (thermo -> id != id) { if (thermo -> next != NULL) thermo = thermo -> next; } return thermo; } } /*! \fn G_MODULE_EXPORT void select_thermo (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select QM / QM-MM thermostat toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void select_thermo (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { get_active_thermostat (old_thermo[n_therm-1]) -> show = FALSE; old_thermo[n_therm-1] = -1; n_therm --; gtk_tree_store_set (* model, & iter, 5, 0, -1); //toviz.c = 0; } else { n_therm ++; gtk_tree_store_set (* model, & iter, 5, 1, -1); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & old_thermo[n_therm-1], -1); old_thermo[n_therm-1] --; get_active_thermostat (old_thermo[n_therm-1]) -> show = TRUE; //toviz.c = 1; } // Viz } /*! \fn void thermo_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the QM / QM-MM thermostat selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void thermo_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, 0, & i, -1); i = abs(i); gtk_tree_model_get (mod, iter, 5, & j, -1); set_renderer_color (j, renderer, init_color (i-1, num_cpmd_objects)); } /*! \fn void thermo_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the QM / QM-MM thermostat selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void thermo_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); if (j > 0 && i != 4) { gtk_cell_renderer_set_visible (renderer, TRUE); if (i < 5) thermo_set_color (col, renderer, mod, iter, data); } else if (j > 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (i == 4) { gtk_cell_renderer_set_visible (renderer, TRUE); thermo_set_color (col, renderer, mod, iter, data); } else { gtk_cell_renderer_set_visible (renderer, FALSE); } } GtkWidget * create_nose_box (int n); /*! \fn G_MODULE_EXPORT void run_remove_nose_thermostat (GtkDialog * dialog, gint response_id, gpointer data) \brief remove thermostat(s) - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_nose_thermostat (GtkDialog * dialog, gint response_id, gpointer data) { int i, j; int num_to_remove = GPOINTER_TO_INT(data); gboolean done = FALSE; gchar * str; thermostat * thermo; switch (response_id) { case GTK_RESPONSE_APPLY: if (n_therm == num_to_remove) { done = TRUE; // Now we remove all selected thermostats: for (i=0; i id == old_thermo[i]) { if (thermo -> next != NULL) { if (thermo -> prev != NULL) { thermo -> next -> prev = thermo -> prev; thermo -> prev -> next = thermo -> next; } else { tmp_cpmd -> ions_thermostat = thermo -> next; tmp_cpmd -> ions_thermostat -> prev = NULL; } } else { thermo -> prev -> next = NULL; } g_free (thermo); break; } if (thermo -> next != NULL) thermo = thermo -> next; } } if (is_cpmd) { tmp_cpmd -> thermostats -= num_to_remove; } else { tmp_cp2k -> thermostats -= num_to_remove; } thermo = get_thermo(); for (j=0; j id = j; if (thermo -> next != NULL) thermo = thermo -> next; } clean_nose_widgets (); nose_box = create_nose_box (get_thermo() -> type); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_param_ions, nose_box, FALSE, FALSE, 0); //int j; //for (j=1; j<4; j++) print_the_section (j, 0, qmbuffer[j]);); show_the_widgets (therm_param_ions); } else { str = g_strdup_printf ("You must select %d thermostat(s) to be deleted !", num_to_remove); show_warning (str, qm_assistant); g_free (str); } break; default: done = TRUE; break; } if (done) destroy_this_dialog (dialog); } /*! \fn void remove_nose_thermostat (int num_to_remove) \brief remove thermostat(s) - creating the dialog \param num_to_remove the number of thermostat(s) to remove */ void remove_nose_thermostat (int num_to_remove) { int i, j, k; gchar * str; // int cpmd_object = 0; str = g_strdup_printf ("Select the %d thermostat(s) to be removed", num_to_remove); GtkWidget * rthermo = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rthermo), "Apply", GTK_RESPONSE_APPLY); gchar * mol_title[6] = {"Id", "Target T°", "Frequency", "Atom(s)", " ", "Select"}; gchar * ctype[6] = {"text", "text", "text", "text", "text", "active"}; GType col_type[6] = {G_TYPE_INT, G_TYPE_DOUBLE, G_TYPE_DOUBLE, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN}; GtkTreeIter thermo_level, atom_level; n_therm = 0; old_thermo = allocint(get_num_thermo()); GtkTreeStore * remove_model = gtk_tree_store_newv (6, col_type); GtkWidget * remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); for (i=0; i<6; i++) { if (i < 5) { thermo_renderer[i] = gtk_cell_renderer_text_new (); } else { thermo_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(thermo_renderer[i]), TRUE); g_signal_connect (G_OBJECT(thermo_renderer[i]), "toggled", G_CALLBACK(select_thermo), & remove_model); } thermo_col[i] = gtk_tree_view_column_new_with_attributes (mol_title[i], thermo_renderer[i], ctype[i], i, NULL); gtk_tree_view_column_set_alignment (thermo_col[i], 0.5); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), thermo_col[i]); gtk_tree_view_column_set_cell_data_func (thermo_col[i], thermo_renderer[i], thermo_set_visible, GINT_TO_POINTER(i), NULL); } // fill model thermostat * thermo = get_thermo(); for (i=0; i params[0], 2, thermo -> params[1], 3, thermo -> natoms, 4, " ", 5, 0, -1); for (j=0; j natoms; j++) { gtk_tree_store_append (remove_model, & atom_level, & thermo_level); k = qm_proj -> atoms[0][thermo -> list[j]].sp; str = g_strdup_printf ("%s%d", exact_name(qm_proj -> chemistry -> label[k]), thermo -> list[j]+1); gtk_tree_store_set (remove_model, & atom_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, 0, 4, str, 5, 0, -1); g_free (str); } if (thermo -> next != NULL) thermo = thermo -> next; } num_cpmd_objects = get_num_thermo(); g_object_unref (remove_model); i = ((num_cpmd_objects+1)*40 < 500) ? (num_cpmd_objects+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rthermo), 450, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); run_this_gtk_dialog (rthermo, G_CALLBACK(run_remove_nose_thermostat), GINT_TO_POINTER(num_to_remove)); } /*! \fn thermostat * init_thermo (int id, int type, int sys) \brief initialize new thermostat \param id the new thermostat id \param type the type of thermostat \param sys the thermostat system */ thermostat * init_thermo (int id, int type, int sys) { thermostat * thermo = g_malloc0 (sizeof*thermo); thermo -> id = id; thermo -> type = type; thermo -> sys = sys; thermo -> show = FALSE; if (id < 0) { thermo -> params[0] = 0.5; thermo -> params[1] = (type == 0) ? 0.2: 200.0; } else { int i; for (i=0; i params[i] = d_thermo[!is_cpmd][type][i]; } } return thermo; } /*! \fn void init_thermostats (int type, int elec) \brief initialize thermostat(s) \param type the type of thermostat \param elec 1 = fictitious electronic thermostat */ void init_thermostats (int type, int elec) { //int i = (type == ULTRA) ? qm_proj -> nspec: 1; if (is_cpmd) { tmp_cpmd -> thermostats = 1; tmp_cpmd -> ions_thermostat = init_thermo (0, type, 0); } else { tmp_cp2k -> thermostats = 1; tmp_cp2k -> ions_thermostat = init_thermo (0, type, 0); } if (is_cpmd && elec) tmp_cpmd -> elec_thermostat = init_thermo (-1, type, 0); } /*! \fn void clean_thermostat (int new_type) \brief free thermostat data, then initialiaze new type of thermostat \param new_type the new type of thermostat */ void clean_thermostat (int new_type) { int i; thermostat * thermo = get_thermo (); if (thermo -> sys > 0) { for (i=0; i next != NULL) thermo = thermo -> next; } for (i=0; i prev != NULL) { thermo = thermo -> prev; g_free (thermo -> next); } } } g_free (thermo); init_thermostats (new_type, 0); } G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data); /*! \fn void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb) \brief create thermostat parameters configuration widgets \param vbox the GtkWidget sending the signal \param id thermostat id, -2 if fictitious electronic \param jd number of parameter(s) for this thermostat \param la thermostat parameter name(s) \param lb thermostat parameter unit(s) */ void nose_parameters (GtkWidget * vbox, int id, int jd, gchar ** la, gchar ** lb) { thermostat * thermo = get_active_thermostat (id); //gchar * itemp[2]={"Initial temperature:", "Target temperature:"}; GtkWidget * hbox; GtkWidget * widg; int i, j; i = (id < 0) ? id : 0; for (j=0; j params[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lb[j], -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } } /*! \fn G_MODULE_EXPORT void cpmd_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select CPMD atom id toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void cpmd_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; int i, j; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, at_col, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { j = 0; n_therm --; old_thermo[i-1] = 0; qm_view -> picked --; } else { j = 1; n_therm ++; old_thermo[i-1] = 1; qm_view -> picked ++; } qm_proj -> atoms[0][i-1].pick[0] = j; qm_proj -> atoms[0][i-1].label[0] = j; init_default_shaders (qm_view); gtk_tree_store_set (* model, & iter, 3, j, -1); } /*! \fn G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select CP2K fixed id toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer * */ G_MODULE_EXPORT void cp2k_select_coord_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j; j = GPOINTER_TO_INT(data); GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(add_model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(add_model), & iter, at_col, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { old_fixed[i-1][j-4] = 0; } else { old_fixed[i-1][j-4] = 1; } gtk_tree_store_set (add_model, & iter, (fixco) ? j : j-2, old_fixed[i-1][j-4], -1); } /*! \fn void atom_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the CPMD atom selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void atom_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; gtk_tree_model_get (mod, iter, 1, & i, -1); gtk_tree_model_get (mod, iter, 3, & j, -1); set_renderer_color (j, renderer, init_color (i-1, num_cpmd_objects)); k = GPOINTER_TO_INT(data); if (k == 2) { gchar * str; gtk_tree_model_get (mod, iter, 2, & str, -1); g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } } /*! \fn void atom_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the CPMD atom selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void atom_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, at_col, & j, -1); if (j == 0 && i != 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (j == 0) { gtk_cell_renderer_set_visible (renderer, TRUE); } else if (j > 0 && i == 0) { gtk_cell_renderer_set_visible (renderer, FALSE); } else if (j > 0) { if (i < 4) { gtk_cell_renderer_set_visible (renderer, TRUE); } else { gtk_tree_model_get (mod, iter, 3, & k, -1); gtk_cell_renderer_set_visible (renderer, k); } if (i < 3) atom_set_color (col, renderer, mod, iter, data); } } /*! \fn int is_not_thermostated (int at, int therm) \brief is atom thermostated ? \param at the atom id \param therm the thermostat id */ int is_not_thermostated (int at, int therm) { int i, j; thermostat * thermo = get_thermo (); for (i=0; i natoms; j++) { if (thermo -> list[j] == at) { if (i == therm) { return 2; } else { return 0; } } } if (thermo -> next != NULL) thermo = thermo -> next; } return 1; } /*! \fn int is_fixed_atom (int at) \brief is atom fixed ? \param at the atom id */ int is_fixed_atom (int at) { int i; if (is_cpmd) { for (i=0; i fixat; i++) { if (tmp_cpmd -> fixlist[i] == at) { return i+2; } } } else { for (i=0; i fixat[0]; i++) { if (tmp_cp2k -> fixlist[0][i] == at) { return i+2; } } } return 1; } /*! \fn int in_dummy (int at, int id) \brief is atom in dummy ? \param at the atom id \param id the dummy list id */ int in_dummy (int at, int id) { dummy_atom * dummy = get_active_dummy (-(id+2)); int i; if (dummy -> natoms == qm_proj -> natomes) return 2; for (i=0; i natoms; i++) { if (dummy -> list[i] == at) return 2; } return 1; } /*! \fn gboolean was_it_selected (int id, int at) \brief was this atom already selected ? \param id the selection type \param at the atom id */ gboolean was_it_selected (int id, int at) { if (id < -1) { return in_dummy (at, id); } else if (id == -1) { return is_fixed_atom (at); } else { return is_not_thermostated (at, id); } } /*! \fn void fill_thermo_atom_model (int therm) \brief fill thermostat atom model \param therm the thermostat id */ void fill_thermo_atom_model (int therm) { int i, j, k, l, m; gchar * str; GtkTreeIter spec_level; GtkTreeIter atom_level; k = 0; for (i=0; i< qm_proj -> nspec; i++) { gtk_tree_store_append (add_model, & spec_level, NULL); gtk_tree_store_set (add_model, & spec_level, 0, qm_proj -> chemistry -> label[i], 1, 0, 3, 0, 4, 0, -1); for (j=0; j< qm_proj -> natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { k ++; l = was_it_selected (therm, j); if (fixco) { if (is_cpmd) { if (tmp_cpmd -> fixat > 0) { for (m=0; m fixat; m++) { if (qm_proj -> atoms[0][j].coord[2] == tmp_cpmd-> fixlist[m]) { l = 0; break; } } } } else { if (tmp_cp2k -> fixat[1] > 0) { for (m=0; m fixat[1]; m++) { if (qm_proj -> atoms[0][j].coord[2] == tmp_cp2k -> fixlist[1][m]) { l = 0; break; } } } } } if (l) { gtk_tree_store_append (add_model, & atom_level, & spec_level); str = g_strdup_printf ("%s%d", exact_name(qm_proj -> chemistry -> label[i]), j+1); if (fixco) { gtk_tree_store_set (add_model, & atom_level, 0, 0, 1, k, 2, str, 3, old_thermo[j], 4, old_fixed[j][0], 5, old_fixed[j][1], 6, old_fixed[j][2], at_col, j+1, -1); } else { gtk_tree_store_set (add_model, & atom_level, 0, 0, 1, k, 2, str, 3, old_thermo[j], at_col, j+1, -1); } g_free (str); } } } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data) \brief select atom to thermostat toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_atoms_not_thermostated (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_atoms_not_thermostated (GtkToggleButton * but, gpointer data) \brief select atom to thermostat toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_atoms_not_thermostated (GtkToggleButton * but, gpointer data) #endif { int h, i, j, k, l, m; h = GPOINTER_TO_INT (data); #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif for (i=0; i natomes; i++) { m = 0; if (j) { k = l = m = 1; if (was_it_selected(h, i) != 1) { m = 0; } } else if (old_thermo[i]) { k = -1; l = 0; m = 1; } if (m) { n_therm += k; old_thermo[i] = l; if (l) qm_view -> picked ++; qm_proj -> atoms[0][i].pick[0] = l; qm_proj -> atoms[0][i].label[0] = l; } } gtk_tree_store_clear (add_model); fill_thermo_atom_model (h); init_default_shaders (qm_view); } /*! \fn G_MODULE_EXPORT void run_select_atom_from_model (GtkDialog * dialog, gint response_id, gpointer data) \brief select atom from model - running the dialgo \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_select_atom_from_model (GtkDialog * dialog, gint response_id, gpointer data) { int i, j; gboolean done = FALSE; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (n_therm > 1) { str = g_strdup_printf ("%d atoms have been selected !", n_therm); } else if (n_therm) { str = g_strdup_printf ("A single atom has been selected !"); } else { str = g_strdup_printf ("Not at single atom has been selected !"); } str = g_strdup_printf ("%s\nis this correct ?", str); selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed) { done = TRUE; if (fixco) { for (i=0; i natomes; i++) { if (old_thermo[i] && ! old_fixed[i][0] && ! old_fixed[i][1] && ! old_fixed[i][2]) { str = g_strdup_printf ("Atom %d has been selected but not coordinates are frozen !\n" "Unselect atom %d or select coordinate(s) to freeze !", i+1, i+1); show_warning (str, qm_assistant); done = FALSE; } } } } thermostat * thermo; dummy_atom * dummy; if (done) { if (the_therm < -1) { dummy = get_active_dummy (-(the_therm+2)); dummy -> natoms = n_therm; if (dummy -> list != NULL) { g_free (dummy -> list); dummy -> list = NULL; } if (n_therm > 0 && n_therm < qm_proj -> natomes) { dummy -> list = allocint (n_therm); j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; dummy -> list[j] = i; } } } } else if (the_therm == -1) { if (is_cpmd) { if (tmp_cpmd -> fixlist != NULL) { g_free (tmp_cpmd -> fixlist); tmp_cpmd -> fixlist = NULL; if (tmp_cpmd -> fixcoord != NULL) { g_free (tmp_cpmd -> fixcoord); tmp_cpmd -> fixcoord = NULL; } } if (n_therm > 0) { tmp_cpmd -> fixlist = allocint (n_therm); if (fixco) tmp_cpmd -> fixcoord = allocdint (n_therm, 3); tmp_cpmd -> fixat = n_therm; j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; tmp_cpmd -> fixlist[j] = i; if (fixco) { tmp_cpmd -> fixcoord[j][0] = old_fixed[i][0]; tmp_cpmd -> fixcoord[j][1] = old_fixed[i][1]; tmp_cpmd -> fixcoord[j][2] = old_fixed[i][2]; } } } } } else { if (tmp_cp2k -> fixlist[0] != NULL) { g_free (tmp_cp2k -> fixlist[0]); tmp_cp2k -> fixlist[0] = NULL; if (tmp_cp2k -> fixcoord[0] != NULL) { g_free (tmp_cp2k -> fixcoord[0]); tmp_cp2k -> fixcoord[0] = NULL; } } if (n_therm > 0) { tmp_cp2k -> fixlist[0] = allocint (n_therm); tmp_cp2k -> fixcoord[0] = allocdint (n_therm, 3); tmp_cp2k -> fixat[0] = n_therm; j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; tmp_cp2k -> fixlist[0][j] = i; tmp_cp2k -> fixcoord[0][j][0] = old_fixed[i][0]; tmp_cp2k -> fixcoord[0][j][1] = old_fixed[i][1]; tmp_cp2k -> fixcoord[0][j][2] = old_fixed[i][2]; } } } } } else { thermo = get_active_thermostat (the_therm); thermo -> natoms = n_therm; if (thermo -> list != NULL) { g_free (thermo -> list); thermo -> list = NULL; } if (n_therm > 0) { thermo -> list = allocint (n_therm); j = -1; for (i=0; i< qm_proj -> natomes; i++) { if (old_thermo[i]) { j ++; thermo -> list[j] = i; } } } } } break; case GTK_RESPONSE_CLOSE: done = TRUE; break; } if (done) destroy_this_dialog (dialog); } /*! \fn void select_atom_from_model (int therm) \brief select atom from model - creating the dialog \param therm the thermostat id */ void select_atom_from_model (int therm) { int i, j, k, l, m; the_therm = therm; GtkTreeViewColumn * ato_col[8]; GtkCellRenderer * ato_cell[8]; gchar * ato_title[2][8] = {{"Species", "Id (*)", "Atom", "Viz.3D & Select", " "}, {"Species", "Id (*)", "Atom", "Viz.3D & Select", "x", "y", "z", " "}}; gchar * ctype[2][8] = {{"text", "text", "text", "active", "text", "active", "active", "active"}, {"text", "text", "text", "active", "active", "active", "active", "text"}}; GType col_type[2][8] = {{G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INT}, {G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT}}; gchar * str; at_col = 4; fixco = FALSE; qm_view -> picked = 0; if (! is_cpmd && the_therm == -1) { fixco = TRUE; } else if (is_cpmd) { if ((int)tmp_cpmd -> default_opts[DEFFI] == 2) fixco = TRUE; } if (the_therm < -1) { str = g_strdup_printf ("Select atom(s) to construct dummy N°%d", -(the_therm+1)); } else if (the_therm == -1) { str = g_strdup_printf ("Select atom(s) to fix"); if (fixco) { g_free (str); at_col = 7; str = g_strdup_printf ("Select atom(s) and coordinate(s) to fix"); } } else { str = g_strdup_printf ("Add atom(s) to thermostat N°%d", the_therm+1); } GtkWidget * amol = dialogmodal (str, GTK_WINDOW(qm_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(amol), "Apply", GTK_RESPONSE_APPLY); n_therm = 0; i = (fixco) ? 1 : 0; j = (fixco) ? 8 : 5; add_model = gtk_tree_store_newv (j, col_type[i]); GtkWidget * add_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); for (k=0; k natomes); if (fixco) { old_fixed = allocdint (qm_proj -> natomes, 3); } k = l = 0; for (i=0; i < qm_proj -> nspec; i++) { for (j=0; j < qm_proj -> natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { k ++; m = was_it_selected (the_therm, j); if (m) { l ++; n_therm += (m > 1) ? 1 : 0; old_thermo[j] = (m > 1) ? 1 : 0; qm_proj -> atoms[0][j].pick[0] = old_thermo[j]; qm_view -> picked += old_thermo[j]; if (fixco && m > 1) { if (is_cpmd) { old_fixed[j][0] = tmp_cpmd -> fixcoord[m-2][0]; old_fixed[j][1] = tmp_cpmd -> fixcoord[m-2][1]; old_fixed[j][2] = tmp_cpmd -> fixcoord[m-2][2]; } else { old_fixed[j][0] = tmp_cp2k -> fixcoord[0][m-2][0]; old_fixed[j][1] = tmp_cp2k -> fixcoord[0][m-2][1]; old_fixed[j][2] = tmp_cp2k -> fixcoord[0][m-2][2]; } } } } } } fill_thermo_atom_model (the_therm); init_default_shaders (qm_view); num_cpmd_objects = l; g_object_unref (add_model); i = ((qm_proj -> nspec + l)*37 < 500) ? (qm_proj -> nspec + l)*37 : 500; //GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN, 0); GtkWidget * scrollsets = create_scroll (dialog_get_content_area (amol), 320, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, add_tree); str = g_strdup_printf (" (*) Order of appearance in the input file"); GtkWidget * vbox = dialog_get_content_area (amol); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); if (the_therm != -1) { if (get_num_thermo() > 1 || the_therm < -1) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (0); gchar * lab[2] = {"All non-thermostated atom(s)", "All atom(s)"}; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (lab[(the_therm > -1) ? 0 : 1], -1, -1, FALSE, G_CALLBACK(select_atoms_not_thermostated), GINT_TO_POINTER(the_therm)), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } } run_this_gtk_dialog (amol, G_CALLBACK(run_select_atom_from_model), & fixco); proj_unselect_all_atoms (); if (the_therm > -1) set_going_forward (); g_free (old_thermo); fixco = FALSE; } /*! \fn G_MODULE_EXPORT void atom_selection_button (GtkButton * but, gpointer data) \brief select atom(s) to be thermostated \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void atom_selection_button (GtkButton * but, gpointer data) { int num, id; int i = GPOINTER_TO_INT(data); select_atom_from_model (i); if (i < -1) { id = 2; num = get_active_dummy (-(i+2)) -> natoms; } else if (i == -1) { id = 1; num = (is_cpmd) ? tmp_cpmd -> fixat : tmp_cp2k -> fixat[0]; } else { id = 0; thermostat * thermo = get_active_thermostat (i); num = thermo -> natoms; } gchar * stra, * strb; if (num == 0) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf ("%d atom(s)", num); strb = g_strdup_printf (APPLY); } set_image_from_icon_name (sel_img[id], strb); gtk_button_set_label (but, stra); g_free (stra); g_free (strb); if (is_cpmd) { // CPMD if (i < -1) { print_the_section (8, 0, qmbuffer[8]); } else if (i == -1) { print_the_section (8, 0, qmbuffer[8]); } else { for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } } else { // CP2K } } /*! \fn void create_selection_button (GtkWidget * box, int num, int id, gpointer data) \brief create thermostat atom(s) selection button \param box the GtkWidget sending the signal \param num the number of atom(s) already selected \param id 0 = ionic, 1 = fictitious electronic \param data the associated data pointer */ void create_selection_button (GtkWidget * box, int num, int id, gpointer data) { int i = GPOINTER_TO_INT(data); GtkWidget * hbox = cpmd_box (box, "Atom(s) selection: ", 5, 20, (i < -1) ? 120 : 220); gchar * str; if (num == 0) { str = g_strdup_printf ("Not picked yet !"); sel_img[id] = stock_image (DELETEB); } else { str = g_strdup_printf ("%d atom(s)", (int)num); sel_img[id] = stock_image (APPLY); } sel_but[id] = gtk_button_new_with_label (str); gtk_widget_set_size_request (sel_but[id], 150, -1); g_free (str); g_signal_connect (G_OBJECT(sel_but[id]), "clicked", G_CALLBACK(atom_selection_button), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_but[id], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sel_img[id], FALSE, FALSE, 30); } /*! \fn void create_nose_thermo_param_box (int therm_id) \brief create thermostat configuration widgets \param therm_id the thermostat id */ void create_nose_thermo_param_box (int therm_id) { gchar * str; nose_id_box[1] = destroy_this_widget (nose_id_box[1]); str = g_strdup_printf ("Configuration for thermostat N°%d: ", therm_id+1); nose_id_box[1] = create_vbox (BSEP); cpmd_box (nose_id_box[1], str, 5, 5, 220); g_free (str); thermostat * thermo = get_active_thermostat (therm_id); create_selection_button (nose_id_box[1], thermo -> natoms, 0, GINT_TO_POINTER(therm_id)); nose_parameters (nose_id_box[1], therm_id, v_thermo[!is_cpmd][thermo->type], c_thermo[!is_cpmd][thermo->type], u_thermo[!is_cpmd][thermo->type]); add_box_child_start (GTK_ORIENTATION_VERTICAL, nose_id_box[0], nose_id_box[1], FALSE, FALSE, 0); show_the_widgets (nose_id_box[1]); } /*! \fn G_MODULE_EXPORT void changed_nose_thermo_id_box (GtkComboBox * box, gpointer data) \brief change thermostat id \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_nose_thermo_id_box (GtkComboBox * box, gpointer data) { int i; i = gtk_combo_box_get_active (box); create_nose_thermo_param_box (i); } /*! \fn void create_selection_combo (int id, int num, int type, GCallback handler) \brief create thermostat selection combo box \param id 0 = ionic, 1 = fictitious electronic \param num the number of thermostat \param type the type of thermostat \param handler the associated callback */ void create_selection_combo (int id, int num, int type, GCallback handler) { int i, j; gchar * str; gchar * lab[2]={"Thermostat", "Dummy atom"}; combo_id_box[id] = destroy_this_widget (combo_id_box[id]); combo_id_box[id] = create_combo (); for (i=0; i 0) { gtk_combo_box_set_active (GTK_COMBO_BOX(combo_id_box[id]), 0); if (id == 0) { create_nose_thermo_param_box (0); } else { create_dummy_param_box (0); } } else { gtk_combo_box_set_active (GTK_COMBO_BOX(combo_id_box[id]), -1); widget_set_sensitive (combo_id_box[id], FALSE); } g_signal_connect (G_OBJECT (combo_id_box[id]), "changed", handler, GINT_TO_POINTER(j)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, combo_id[id], combo_id_box[id], FALSE, FALSE, 0); show_the_widgets (combo_id[id]); } /*! \fn void add_thermostat (int extra) \brief add thermostat(s) \param extra the number of thermostat(s) to add */ void add_thermostat (int extra) { int i, j; thermostat * thermo = get_thermo (); j = get_num_thermo (); while (thermo -> next != NULL) thermo = thermo -> next; for (i=0; i next = init_thermo (i+j, thermo -> type, thermo -> sys); thermo -> next -> prev = thermo; if (i < extra-1) thermo = thermo -> next; } if (is_cpmd) { tmp_cpmd -> thermostats += extra; } else { tmp_cp2k -> thermostats += extra; } // finally update the combobox create_selection_combo (0, get_num_thermo (), get_thermo() -> type, G_CALLBACK(changed_nose_thermo_id_box)); } /*! \fn G_MODULE_EXPORT void add_or_remove_thermostat (GtkSpinButton * res, gpointer data) \brief add / remove thermostat \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_or_remove_thermostat (GtkSpinButton * res, gpointer data) { int id = gtk_spin_button_get_value_as_int(res); int i, j, k; gchar * str; gboolean add_thermo = TRUE; thermostat * thermo = get_thermo(); if (id != get_num_thermo ()) { if (id > get_num_thermo ()) { // adding thermostats // ok if: 1) all atoms do not already have a thermostat assigned // 2) number of thermostat(s) to create < number of atoms that do have a thermostat assigned j = 0; for (i=0; i natoms; if (thermo -> next != NULL) thermo = thermo -> next; } if (j < qm_proj -> natomes) { // Number of thermostat to create k = id - get_num_thermo (); if (k < (qm_proj -> natomes - j)) { if (k > 1) { str = g_strdup_printf ("Do you really want to add %d thermostat(s) ?", k); add_thermo = ask_yes_no ("Adding thermostat(s) ?", str, GTK_MESSAGE_QUESTION, qm_assistant); g_free (str); } if (add_thermo) { add_thermostat (k); } else { // Set value back to the number of ionic thermostats gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)get_num_thermo ()); } } else { show_warning ("It is not possible to create so many thermostats", qm_assistant); gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)get_num_thermo ()); } } else { show_warning ("All atoms arleady have a thermostat assigned", qm_assistant); gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)get_num_thermo ()); } } else { // removing thermostats remove_nose_thermostat (get_num_thermo () - id); } } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), (double)(get_num_thermo ())); if (is_cpmd) for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data) \brief update thermostat parameter value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_thermo_parameter (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (i < 0) { if (tmp_cpmd -> elec_thermostat -> params[i+2] != v) { tmp_cpmd -> elec_thermostat -> params[i+2] = v; update_entry_double (res, v); } } else { if (get_num_thermo () > 1) { j = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_id_box[0])); } else { j = 0; } thermostat * thermo = get_active_thermostat (j); if (i < 2) { if (thermo -> params[i] != v) { thermo -> params[i] = v; update_entry_double (res, v); } } else { if ((int)thermo -> params[i] != (int)v) { thermo -> params[i] = v; update_entry_int (res, (int)v); } } } if (is_cpmd) for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn GtkWidget * create_nose_box (int n) \brief create thermostat configuration widgets \param n the thermostat system */ GtkWidget * create_nose_box (int n) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * widg; if (n > GLOBAL) { hbox = cpmd_box (vbox, "Number of thermostat(s): ", 5, 5, 220); widg = spin_button (G_CALLBACK(add_or_remove_thermostat), (double)(get_num_thermo ()), 1.0, (double)qm_proj -> natomes, 1.0, 0, 100, NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); combo_id[0] = cpmd_box (vbox, "Thermostat to configure: ", 5, 5, 220); nose_id_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, nose_id_box[0], FALSE, FALSE, 10); create_selection_combo (0, get_num_thermo (), get_thermo () -> type, G_CALLBACK(changed_nose_thermo_id_box)); create_nose_thermo_param_box (0); } else { nose_parameters (vbox, 0, v_thermo[!is_cpmd][get_thermo()->type], c_thermo[!is_cpmd][get_thermo()->type], u_thermo[!is_cpmd][get_thermo()->type]); } return vbox; } /*! \fn G_MODULE_EXPORT void changed_thermo_box_nose (GtkComboBox * box, gpointer data) \brief change the type of the ionic thermostat \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_thermo_box_nose (GtkComboBox * box, gpointer data) { int i; i = gtk_combo_box_get_active (box); if (i != get_thermo () -> sys) { clean_thermostat (get_thermo () -> type); clean_nose_widgets (); get_thermo () -> sys = i; nose_box = create_nose_box (get_thermo () -> sys); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_param_ions, nose_box, FALSE, FALSE, 0); int j; if (is_cpmd) for (j=1; j<4; j++) print_the_section (j, 0, qmbuffer[j]); show_the_widgets (therm_param_ions); } set_going_forward (); } /*! \fn void prepare_therm_ions () \brief prepare ions thermostat widgets */ void prepare_therm_ions () { int i, j, k; GtkWidget * hbox; GtkWidget * tbox; gchar * str; clean_nose_widgets (); therm_param_ions = destroy_this_widget (therm_param_ions); therm_param_ions = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_ions, therm_param_ions, FALSE, FALSE, 0); i = (is_cpmd) ? 1 : 0; //if (is_cpmd) { if (get_thermo () -> type > i) { hbox = cpmd_box (therm_param_ions, "Thermostat type: ", 5, 5, 220); tbox = create_combo (); j = 2; // For QM-MM: qm_view -> bonding + 2; for (k=0; k sys); g_signal_connect (G_OBJECT (tbox), "changed", G_CALLBACK(changed_thermo_box_nose), NULL); } } nose_box = create_nose_box (get_thermo () -> sys); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_param_ions, nose_box, FALSE, FALSE, 0); show_the_widgets (therm_param_ions); if (is_cpmd) for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn void prepare_therm_elec () \brief prepare electrons thermostat widgets */ void prepare_therm_elec () { therm_param_elec = destroy_this_widget (therm_param_elec); therm_param_elec = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, therm_elec, therm_param_elec, FALSE, FALSE, 0); int i; nose_parameters (therm_param_elec, -2, v_thermo[0][tmp_cpmd -> elec_thermostat -> type], c_thermo[0][tmp_cpmd -> elec_thermostat -> type], ue_thermo[tmp_cpmd -> elec_thermostat -> type]); show_the_widgets (therm_param_elec); for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void changed_thermo_box (GtkComboBox * box, gpointer data) \brief change the thermostat family (ionic / fictitious electronic) \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_thermo_box (GtkComboBox * box, gpointer data) { int i, j; i = gtk_combo_box_get_active (box); j = GPOINTER_TO_INT (data); if (j == 0 && i != get_thermo () -> type) { clean_thermostat (i); thermostat * thermo = get_thermo(); thermo -> sys = GLOBAL; prepare_therm_ions (); } else if (j == -1) { if (i != tmp_cpmd -> elec_thermostat -> type) { g_free (tmp_cpmd -> elec_thermostat); tmp_cpmd -> elec_thermostat = init_thermo (-1, i, 0); tmp_cpmd -> elec_thermostat -> sys = 0; prepare_therm_elec (); } } set_going_forward (); } /*! \fn void thermo_type_box (GtkWidget * vbox, gchar * str, int id) \brief prepare the thermostat option widgets \param vbox the GtkWidget sending the signal \param str thermostat information \param id the type of thermostat */ void thermo_type_box (GtkWidget * vbox, gchar * str, int id) { int i; GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * tbox = create_combo (); for (i=0; i elec_thermostat -> type); } else { thermostat * thermo = get_thermo(); gtk_combo_box_set_active (GTK_COMBO_BOX(tbox), thermo -> type); } g_signal_connect (G_OBJECT (tbox), "changed", G_CALLBACK(changed_thermo_box), GINT_TO_POINTER(id)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, tbox, FALSE, FALSE, 0); } /*! \fn GtkWidget * thermo_box () \brief create the thermostat configuration widgets */ GtkWidget * thermo_box () { gchar * thermo_info[2] = {"Ionic subsystem thermostat: ", "Thermostat: "}; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * vvbox; nose_id_box[0] = nose_id_box[1] = NULL; therm_param_ions = NULL; therm_param_elec = NULL; nose_box = NULL; combo_id_box[0] = NULL; combo_id[0] = NULL; if (get_num_thermo() == 0) init_thermostats (0, 1); // Thermostat type ions vvbox = create_vbox (BSEP); gtk_widget_set_size_request (vvbox, (is_cpmd) ? 525 : -1, (is_cpmd) ? 350 : 260); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 0); thermo_type_box (vvbox, thermo_info[!is_cpmd], 0); therm_ions = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, therm_ions, FALSE, FALSE, (is_cpmd) ? 0 : 20); prepare_therm_ions (); // Thermostat type electrons if (is_cpmd) { electron_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, electron_box, FALSE, FALSE, 5); thermo_type_box (electron_box, "Fictitious electronic subsystem: ", -1); therm_elec = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, electron_box, therm_elec, FALSE, FALSE, 0); prepare_therm_elec (); } return vbox; } Atomes-GNU-1.1.14/src/calc/cpmd/cpmd_print.c000066400000000000000000000517621457665371200204270ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cpmd_print.c * @short Functions to print the CPMD input file(s) * @author Sébastien Le Roux */ /* * This file: 'cpmd_print.c' * * Contains: * - The functions to print the CPMD input file(s) * * List of functions: void print_info_section (GtkTextBuffer * buf); void print_this_thermostat (thermostat * thermo, int id, GtkTextBuffer * buf); void print_thermostat (GtkTextBuffer * buf); void print_restart (GtkTextBuffer * buf); void print_cpmd_section (GtkTextBuffer * buf); void print_dft_section (GtkTextBuffer * buf); void print_vdw_section (GtkTextBuffer * buf); void print_prop_section (GtkTextBuffer * buf); void print_system_section (GtkTextBuffer * buf); void print_atoms_section (GtkTextBuffer * buf); void print_the_section (int s, int p, GtkTextBuffer * buffer); */ #include "global.h" #include "interface.h" #include "calc.h" #include "cpmd.h" extern dummy_atom * get_active_dummy (int id); int cpmd_sym[NSYM] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 12, 14}; /*! \fn void print_info_section (GtkTextBuffer * buf) \brief print the CPMD input file INFO section \param buf the GtkTextBuffer to print into */ void print_info_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (" This input was prepared using %s\n\n", PACKAGE); print_info (str, NULL, buf); g_free (str); if (tmp_cpmd -> info != NULL) print_info (tmp_cpmd -> info, NULL, buf); print_info ("\n\n", NULL, buf); } /*! \fn void print_this_thermostat (thermostat * thermo, int id, GtkTextBuffer * buf) \brief print CPMD thermostat parameters \param thermo the target thermostat \param id 0 = ionic, 1 = fictitious electronic \param buf the GtkTextBuffer to print into */ void print_this_thermostat (thermostat * thermo, int id, GtkTextBuffer * buf) { int i, j, k, l, m; gchar * temp[2]={"TEMPERATURE", "TEMPERATURE ELECTRONS"}; gchar * tobj[2]={"IONS", "ELECTRONS"}; gchar * str = NULL; if (thermo -> type == 0) { str = g_strdup_printf ("\n\n %s\n", temp[id]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" %f", thermo -> params[0]); print_info (str, NULL, buf); g_free (str); } else { if (thermo -> sys == GLOBAL) { str = g_strdup_printf ("\n\n %s %s\n", termoke[thermo -> type-1], tobj[id]); } else if (thermo -> sys == LOCAL) { str = g_strdup_printf ("\n\n %s %s %s\n", termoke[thermo -> type-1], tobj[id], nosekey[1]); } print_info (str, NULL, buf); g_free (str); if (thermo -> sys == LOCAL) { str = g_strdup_printf (" %d\n", tmp_cpmd -> thermostats); print_info (str, NULL, buf); g_free (str); for (i=0; i thermostats; i++) { for (j=0; j<2; j++) { str = g_strdup_printf (" %11.5lf", thermo -> params[j]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); if (thermo-> next != NULL) thermo = thermo-> next; } str = g_strdup_printf (" %d\n", tmp_cpmd -> thermostats); print_info (str, NULL, buf); g_free (str); thermo = tmp_cpmd -> ions_thermostat; for (i=0; i thermostats; i++) { l = 0; str = g_strdup_printf (" %d", i+1); print_info (str, NULL, buf); g_free (str); for (j=0; j < qm_proj-> nspec; j++) { for (k=0; k < qm_proj-> natomes; k++) { if (qm_proj -> atoms[0][k].sp == j) { l++; for (m=0; m < thermo -> natoms; m++) { if (thermo -> list[m] == k) { str = g_strdup_printf (" %d", l); print_info (str, NULL, buf); g_free (str); } } } } } if (i < tmp_cpmd -> thermostats-1) print_info ("\n", NULL, buf); if (thermo-> next != NULL) thermo = thermo-> next; } } else { for (j=0; j<2; j++) { str = g_strdup_printf (" %11.5lf", thermo -> params[j]); print_info (str, NULL, buf); g_free (str); } } } } /*! \fn void print_thermostat (GtkTextBuffer * buf) \brief print the CPMD input file THERMOSTAT section \param buf the GtkTextBuffer to print into */ void print_thermostat (GtkTextBuffer * buf) { gchar * str; int id = (tmp_cpmd -> calc_type == 2) ? BAROC : BAROB; if ((int)tmp_cpmd -> calc_opts[id]) { str = g_strdup_printf ("\n\n %s", calc_box_keys[tmp_cpmd -> calc_type][(int)tmp_cpmd -> calc_opts[id]]); print_info (str, NULL, buf); g_free (str); } id = (tmp_cpmd -> calc_type == 2) ? ANNIC : ANNIB; if ((int)tmp_cpmd -> calc_opts[id]) { str = g_strdup_printf ("\n\n ANNEALING IONS\n %f", tmp_cpmd -> calc_opts[id+1]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type == 2) { if ((int)tmp_cpmd -> calc_opts[ANNEC]) { str = g_strdup_printf ("\n\n ANNEALING ELECTRONS\n %f", tmp_cpmd -> calc_opts[AFAEC]); print_info (str, NULL, buf); g_free (str); } } print_this_thermostat (tmp_cpmd -> ions_thermostat, 0, buf); if (tmp_cpmd -> calc_type == 2) { print_this_thermostat (tmp_cpmd -> elec_thermostat, 1, buf); } } /*! \fn void print_restart (GtkTextBuffer * buf) \brief print the CPMD input file RESTART section \param buf the GtkTextBuffer to print into */ void print_restart (GtkTextBuffer * buf) { gchar * str; if (tmp_cpmd -> restart[0] < 2) { str = g_strdup_printf ("\n\n INITIALIZE WAVEFUNCTION %s", rest_kw[tmp_cpmd -> restart[0]]); print_info (str, NULL, buf); g_free (str); } else { print_info ("\n\n RESTART WAVEFUNCTION LATEST", NULL, buf); print_info ("\n RESTART COORDINATES LATEST", NULL, buf); if (tmp_cpmd -> calc_type > 1 && tmp_cpmd -> calc_type < 4) { print_info ("\n RESTART ACCUMULATORS LATEST", NULL, buf); print_info ("\n RESTART VELOCITIES LATEST", NULL, buf); if (tmp_cpmd -> ions_thermostat -> type > 0) print_info ("\n RESTART NOSEP LATEST", NULL, buf); if (tmp_cpmd -> calc_type == 2 && tmp_cpmd -> elec_thermostat -> type == 1) print_info ("\n RESTART NOSEE LATEST", NULL, buf); } } } /*! \fn void print_cpmd_section (GtkTextBuffer * buf) \brief print CPMD input file CPMD section \param buf the GtkTextBuffer to print into */ void print_cpmd_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (" %s", calc_kw[tmp_cpmd -> calc_type]); print_info (str, NULL, buf); g_free (str); int i; switch (tmp_cpmd -> calc_type) { case 0: str = g_strdup_printf ("\n\n CONVERGENCE ORBITAL\n %E\n\n", tmp_cpmd -> calc_opts[CONVO]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" %s\n\n", calc_box_keys[0][(int)tmp_cpmd -> calc_opts[OPTIO]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" MAXITER\n %d", (int)tmp_cpmd -> calc_opts[STEPO]); print_info (str, NULL, buf); g_free (str); break; case 1: str = g_strdup_printf ("\n\n CONVERGENCE GEOMETRY\n %E\n\n", tmp_cpmd -> calc_opts[CONVG]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" %s\n\n", calc_box_keys[1][(int)tmp_cpmd -> calc_opts[OPTIG]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" MAXSTEP\n %d", (int)tmp_cpmd -> calc_opts[STEPG]); print_info (str, NULL, buf); g_free (str); break; case 2: str = g_strdup_printf ("\n\n MAXSTEP\n %d", (int)tmp_cpmd -> calc_opts[STEPC]); print_info (str, NULL, buf); g_free (str); break; case 3: str = g_strdup_printf ("\n\n MAXSTEP\n %d", (int)tmp_cpmd -> calc_opts[STEPB]); print_info (str, NULL, buf); g_free (str); break; case 4: str = g_strdup_printf ("\n %d", (int)tmp_cpmd -> calc_opts[KSUNO]); print_info (str, NULL, buf); g_free (str); if ((int)tmp_cpmd -> calc_opts[RHOUT]) { str = g_strdup_printf ("\n RHOOUT BANDS\n %d\n ", (int)tmp_cpmd -> calc_opts[NBAND]); print_info (str, NULL, buf); g_free (str); } break; case 5: str = g_strdup_printf (" %s", calc_box_keys[4][(int)tmp_cpmd -> calc_opts[VIBRA]]); print_info (str, NULL, buf); g_free (str); break; case 6: break; } print_restart (buf); if (tmp_cpmd -> calc_type < 4) { if (tmp_cpmd -> calc_type == 0) { i = TSTPO; } else if (tmp_cpmd -> calc_type == 1) { i = TSTPG; } else if (tmp_cpmd -> calc_type == 2) { i = TSTPC; } else { i = TSTPB; } str = g_strdup_printf ("\n\n TIMESTEP\n %f", tmp_cpmd -> calc_opts[i]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type != 3) { str = g_strdup_printf ("\n\n EMASS\n %f", tmp_cpmd -> default_opts[DEFEM]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type == 2 || tmp_cpmd -> calc_type == 3) print_thermostat (buf); if (tmp_cpmd -> default_opts[DEFLS] == 1.0) { print_info ("\n\n LOCAL SPIN DENSITY", NULL, buf); } if (tmp_cpmd -> default_opts[DEFVD] == 1.0) { print_info ("\n\n VDW CORRECTION", NULL, buf); } gchar * sv_key[2] = {"STORE", "RESTFILE"}; for (i=0; i<2; i++) { str = g_strdup_printf ("\n\n %s\n %d", sv_key[i], tmp_cpmd -> restart[i+1]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> calc_type != 0 && tmp_cpmd -> restart[3]) { print_info ("\n\n TRAJECTORY SAMPLE", NULL, buf); if (tmp_cpmd -> restart[4]) print_info (" XYZ", NULL, buf); if (tmp_cpmd -> restart[5]) print_info (" FORCES", NULL, buf); str = g_strdup_printf ("\n %d", tmp_cpmd -> restart[3]); print_info (str, NULL, buf); g_free (str); } if (tmp_cpmd -> restart[6]) { print_info ("\n\n PRINT", NULL, buf); if (tmp_cpmd -> restart[7]) print_info (" INFO", NULL, buf); //if (tmp_cpmd -> restart[8]) print_info (" EIGENVALUES", NULL, buf); if (tmp_cpmd -> restart[8]) print_info (" COORDINATES", NULL, buf); if (tmp_cpmd -> restart[9]) print_info (" FORCES", NULL, buf); str = g_strdup_printf ("\n %d", tmp_cpmd -> restart[6]); print_info (str, NULL, buf); g_free (str); } print_info ("\n\n", NULL, buf); } /*! \fn void print_dft_section (GtkTextBuffer * buf) \brief print the CPMD input file DFT section \param buf the GtkTextBuffer to print into */ void print_dft_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (" FUNCTIONAL %s", default_keywords[0][(int)tmp_cpmd -> default_opts[DEFDF]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf ("\n\n GC-CUTOFF\n %E\n\n", tmp_cpmd -> default_opts[DEFGC]); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_vdw_section (GtkTextBuffer * buf) \brief print the CPMD input file VDW section \param buf the GtkTextBuffer to print into */ void print_vdw_section (GtkTextBuffer * buf) { gchar * str = g_strdup_printf (" EMPIRICAL CORRECTION\n" " VDW PARAMETERS\n" " ALL DFT-D2\n" " S6GRIMME\n %s\n" " END EMPIRICAL CORRECTION\n\n", default_keywords[0][(int)tmp_cpmd -> default_opts[DEFDF]]); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_prop_section (GtkTextBuffer * buf) \brief print the CPMD input file PROPERTIES section \param buf the GtkTextBuffer to print into */ void print_prop_section (GtkTextBuffer * buf) { } /*! \fn void print_system_section (GtkTextBuffer * buf) \brief print the CPMD input file SYSTEM section \param buf the GtkTextBuffer to print into */ void print_system_section (GtkTextBuffer * buf) { double u, v; gchar * str; u = 0.52917721; if ((int)tmp_cpmd -> default_opts[DEFAN]) { u = 1.0; print_info (" ANGSTROM\n\n", NULL, buf); } if (! (int)tmp_cpmd -> default_opts[DEFVE]) { str = g_strdup_printf (" SYMMETRY\n %d\n\n", cpmd_sym[(int)tmp_cpmd -> default_opts[DEFSY]]); print_info (str, NULL, buf); g_free (str); } print_info (" CELL", NULL, buf); if ((int)tmp_cpmd -> default_opts[DEFVE]) { print_info (" VECTORS", NULL, buf); if (((int)tmp_cpmd -> default_opts[DEFAB])) { print_info (" ABSOLUTE", NULL, buf); } } else { if (((int)tmp_cpmd -> default_opts[DEFAB])) { print_info (" ABSOLUTE", NULL, buf); } if (((int)tmp_cpmd -> default_opts[DEFDG])) { print_info (" DEGREE", NULL, buf); } } int i, j; if ((int)tmp_cpmd -> default_opts[DEFVE]) { for (i=0; i<3; i++) { print_info ("\n ", NULL, buf); for (j=0; j<3; j++) { v = qm_proj -> cell.box[0].vect[i][j] / u; str = g_strdup_printf (" %12.6lf", v); print_info (str, NULL, buf); g_free (str); } } } else { print_info ("\n ", NULL, buf); for (i=0; i<2; i++) { for (j=0; j<3; j++) { if (i == 0) { if ((int)tmp_cpmd -> default_opts[DEFAB]) { v = qm_proj -> cell.box[0].param[i][j] / u; } else { if (j==0) { v = qm_proj -> cell.box[0].param[i][j] / u; } else if (qm_proj -> cell.box[0].param[i][0] != 0.0) { v = qm_proj -> cell.box[0].param[i][j] / qm_proj -> cell.box[0].param[i][0]; } else { v = -1.0; } } } else { if ((int)tmp_cpmd -> default_opts[DEFDG]) { v = qm_proj -> cell.box[0].param[i][j]; } else { v = cos (qm_proj -> cell.box[0].param[i][j]*pi/180.0); } } str = g_strdup_printf (" %12.6lf", v); print_info (str, NULL, buf); g_free (str); } } } print_info ("\n\n", NULL, buf); str = g_strdup_printf (" CUTOFF\n %15.10lf\n\n", tmp_cpmd -> default_opts[DEFCU]); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_atoms_section (GtkTextBuffer * buf) \brief print the CPMD input file ATOMS section \param buf the GtkTextBuffer to print into */ void print_atoms_section (GtkTextBuffer * buf) { int i, j, k, l, m; gchar * str; double u = ((int)tmp_cpmd -> default_opts[DEFAN]) ? 1.0 : 0.52917721; if ((int)tmp_cpmd -> default_opts[DEFCO] && ((int)tmp_cpmd -> default_opts[DEFFI] == 0 || ((int)tmp_cpmd -> default_opts[DEFFI] > 0 && tmp_cpmd -> fixat > 0))) { str = g_strdup_printf (" CONSTRAINTS\n FIX %s\n", default_keywords[5][(int)tmp_cpmd -> default_opts[DEFFI]]); print_info (str, NULL, buf); g_free (str); if ((int)tmp_cpmd -> default_opts[DEFFI] > 0) { str = g_strdup_printf (" %d\n ", tmp_cpmd -> fixat); print_info (str, NULL, buf); g_free (str); k = m = 0; for (i=0; i nspec; i++) { for (j=0; j natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { k ++; for (l=0; lfixat; l++) { if (qm_proj -> atoms[0][j].id == tmp_cpmd -> fixlist[l]) { m ++; str = g_strdup_printf (" %d", k); print_info (str, NULL, buf); g_free (str); if ((int)tmp_cpmd -> default_opts[DEFFI] == 2) { str = g_strdup_printf (" %d %d %d\n", tmp_cpmd -> fixcoord[l][0], tmp_cpmd -> fixcoord[l][1], tmp_cpmd -> fixcoord[l][2]); print_info (str, NULL, buf); g_free (str); if (m < tmp_cpmd->fixat) { print_info (" ", NULL, buf); } } } } } } } if ((int)tmp_cpmd -> default_opts[DEFFI] != 2) print_info ("\n", NULL, buf); } print_info (" END CONSTRAINTS\n\n", NULL, buf); } if ((int)tmp_cpmd -> default_opts[DEFDU] && tmp_cpmd -> dummies > 0) { gchar * dtype[3]={" TYPE1", " TYPE2", " TYPE3"}; str = g_strdup_printf (" DUMMY ATOMS\n %d\n", tmp_cpmd -> dummies); print_info (str, NULL, buf); g_free (str); dummy_atom * dumm; for (i=0; i dummies; i++) { dumm = get_active_dummy (i); print_info (dtype[dumm -> type], NULL, buf); if (dumm -> type == 0) { str = g_strdup_printf (" %12.6lf %12.6lf %12.6lf\n", dumm -> xyz[0], dumm -> xyz[1], dumm -> xyz[2]); } else if (dumm -> natoms > 0) { if ( dumm -> natoms < qm_proj -> natomes) { l = 0; str = g_strdup_printf (" %d", dumm -> natoms); for (j=0; j nspec; j++) { for (k=0; k natomes; k++) { if (qm_proj -> atoms[0][k].sp == j) { l ++; for (m=0; m natoms; m++) { if (qm_proj -> atoms[0][k].id == dumm -> list[m]) { str = g_strdup_printf ("%s %d", str, l); } } } } } } else if (dumm -> natoms == qm_proj -> natomes) { str = g_strdup_printf (" %d", -1); } str = g_strdup_printf ("%s\n", str); } else { str = g_strdup_printf ("\n"); } print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); } for (i=0; i nspec; i++) { str = g_strdup_printf ("*%s-%s.psp\n", exact_name(qm_proj -> chemistry -> label[i]), default_keywords[0][(int)tmp_cpmd -> default_opts[DEFDF]]); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf (" LMAX=%s LOC=%s\n %d\n", default_keywords[7][(int)tmp_cpmd -> pp[i][0]], default_keywords[8][(int)tmp_cpmd -> pp[i][1]], qm_proj -> chemistry -> nsps[i]); print_info (str, NULL, buf); g_free (str); for (j=0; j natomes; j++) { if (qm_proj -> atoms[0][j].sp == i) { str = g_strdup_printf (" %12.6lf %12.6lf %12.6lf\n", qm_proj -> atoms[0][j].x/u, qm_proj -> atoms[0][j].y/u, qm_proj -> atoms[0][j].z/u); print_info (str, NULL, buf); g_free (str); } } print_info ("\n", NULL, buf); } } /*! \fn void print_the_section (int s, int p, GtkTextBuffer * buffer) \brief print CPMD input section \param s the section id \param p 0 = section preview, 1 = complete input file \param buffer the GtkTextBuffer to print into */ void print_the_section (int s, int p, GtkTextBuffer * buffer) { int i; gchar * str; if (buffer != NULL) { if (s > 0 && s < 4) { i = 1; } else if (s == 0) { i = 0; } else { i = s - 2; } if (! p) { GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buffer, & bStart); gtk_text_buffer_get_end_iter (buffer, & bEnd); gtk_text_buffer_delete (buffer, & bStart, & bEnd); } if (p && s > 0) print_info ("\n\n", NULL, buffer); str = g_strdup_printf ("&%s\n\n", cpmd_elements[i]); print_info (str, "bold", buffer); g_free (str); if (s == 0) { print_info_section (buffer); } else if (s < 4) { print_cpmd_section (buffer); } else { switch (s) { case 4: print_dft_section (buffer); break; case 5: print_vdw_section (buffer); break; case 6: print_prop_section (buffer); break; case 7: print_system_section (buffer); break; case 8: print_atoms_section (buffer); break; } } print_info ("&END", "bold", buffer); } } Atomes-GNU-1.1.14/src/calc/cpmd/cpmd_restart.c000066400000000000000000000204501457665371200207450ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cpmd_restart.c * @short Functions to configure the restart section for the CPMD input file creation assistant * @author Sébastien Le Roux */ /* * This file: 'cpmd_restart.c' * * Contains: * - The functions to configure the restart section for the CPMD input file creation assistant * * List of functions: G_MODULE_EXPORT void update_restart_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void update_restart_check (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_restart_box (GtkComboBox * box, gpointer data); GtkWidget * restart_box (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "calc.h" #include "cpmd.h" extern void print_the_section (int s, int p, GtkTextBuffer * buffer); extern GtkWidget * cpmd_box (GtkWidget * box, gchar * lab, int v_space, int h_space, int dim); /*! \fn G_MODULE_EXPORT void update_restart_parameter (GtkEntry * res, gpointer data) \brief CPMD input file update restart parameter value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_restart_parameter (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); j = (int)v; if (j != tmp_cpmd -> restart[i]) { tmp_cpmd -> restart[i] = j; } update_entry_int (res, tmp_cpmd -> restart[i]); for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } GtkWidget * sace[2]; GtkWidget * trap_box[2]; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data) \brief CPMD input file restart option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_restart_check (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void update_restart_check (GtkToggleButton * but, gpointer data) \brief CPMD input file restart option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_restart_check (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j; #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif tmp_cpmd -> restart[i] = (j) ? 1 : 0; if (i == 3 || i == 6) { if (tmp_cpmd -> restart[i]) tmp_cpmd -> restart[i] = 10; update_entry_int (GTK_ENTRY(sace[i/6]), (tmp_cpmd -> restart[i]) ? TRUE : FALSE); widget_set_sensitive (trap_box[i/6], j); } for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn G_MODULE_EXPORT void changed_restart_box (GtkComboBox * box, gpointer data) \brief CPMD input file change restart type \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_restart_box (GtkComboBox * box, gpointer data) { tmp_cpmd -> restart[0] = gtk_combo_box_get_active (box); int i; for (i=1; i<4; i++) print_the_section (i, 0, qmbuffer[i]); } /*! \fn GtkWidget * restart_box () \brief prepare the CPMD input preparation assistant restart widgets */ GtkWidget * restart_box () { int i; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; // Thermostat type ions gtk_widget_set_size_request (vbox, 525, 350); // Initialization: Random / Atom / Restart hbox = cpmd_box (vbox, "Initialization for the Wavefunction:", 20, 5, 230); GtkWidget * box = create_combo (); for (i=0; i<3; i++) { combo_text_append (box, rest_opts[i]); } gtk_combo_box_set_active (GTK_COMBO_BOX(box), tmp_cpmd -> restart[0]); g_signal_connect (G_OBJECT (box), "changed", G_CALLBACK(changed_restart_box), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, box, FALSE, FALSE, 5); // Save restart every hbox = cpmd_box (vbox, "Save the information required for a restart every:", 5, 5, 340); GtkWidget * widg = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_int (GTK_ENTRY(widg), tmp_cpmd -> restart[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new("steps"), FALSE, FALSE, 10); // Num of restart: hbox = cpmd_box (vbox, "Number of restart file(s): ", 0, 5, 340); widg = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(2)); update_entry_int (GTK_ENTRY(widg), tmp_cpmd -> restart[2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 0); // Trajectory: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button("Create a trajectory", -1, -1, tmp_cpmd -> restart[3], G_CALLBACK(update_restart_check), GINT_TO_POINTER(3)), FALSE, FALSE, 20); trap_box[0] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox,trap_box[0], FALSE, FALSE, 0); hbox = cpmd_box (trap_box[0], "Save the atomic coordinates every: ", 0, 25, 300); sace[0] = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(3)); update_entry_int (GTK_ENTRY(sace[0]), tmp_cpmd -> restart[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sace[0], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new("steps"), FALSE, FALSE, 10); hbox = cpmd_box (trap_box[0], "Write XYZ format", 0, 25, 300); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(NULL, -1, -1, tmp_cpmd -> restart[4], G_CALLBACK(update_restart_check), GINT_TO_POINTER(4)), FALSE, FALSE, 0); hbox = cpmd_box (trap_box[0], "Write atomic forces", 0, 25, 300); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(NULL, -1, -1, tmp_cpmd -> restart[5], G_CALLBACK(update_restart_check), GINT_TO_POINTER(5)), FALSE, FALSE, 0); widget_set_sensitive (trap_box[0], tmp_cpmd -> restart[3]); // Print information add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button("Print extra data in the global output file", -1, -1, tmp_cpmd -> restart[6], G_CALLBACK(update_restart_check), GINT_TO_POINTER(6)), FALSE, FALSE, 20); trap_box[1] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, trap_box[1], FALSE, FALSE, 0); hbox = cpmd_box (trap_box[1], "Save the extra information every: ", 0, 25, 300); sace[1] = create_entry (G_CALLBACK(update_restart_parameter), 100, 15, FALSE, GINT_TO_POINTER(6)); update_entry_int (GTK_ENTRY(sace[1]), tmp_cpmd -> restart[6]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sace[1], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new("steps"), FALSE, FALSE, 10); hbox = cpmd_box (trap_box[1], "Select the information to print:", 5, 25, 300); widget_set_sensitive (trap_box[1], tmp_cpmd -> restart[6]); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, trap_box[1], hbox, FALSE, FALSE, 0); gchar * print_str[3]={"Information", "Coordinates", "Forces"}; for (i=0; i<3; i++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(print_str[i], -1, -1, tmp_cpmd -> restart[i+7], G_CALLBACK(update_restart_check), GINT_TO_POINTER(i+7)), FALSE, FALSE, 5); } return vbox; } Atomes-GNU-1.1.14/src/calc/dl_poly/000077500000000000000000000000001457665371200166305ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_active.c000066400000000000000000000172601457665371200211140ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_active.c * @short Functions to retrieve data in the force field structure * @author Sébastien Le Roux */ /* * This file: 'dlp_active.c' * * Contains: * - The functions to retrieve data in the force field structure * * List of functions: field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid); field_molecule * get_active_field_molecule (int a); field_nth_body * get_active_body (int a, int b); field_external * get_active_external (int a); field_atom* get_active_atom (int a, int b); field_shell * get_active_shell (int a, int b); field_constraint * get_active_constraint (int a, int b); field_pmf * get_active_pmf (int a, int b); field_rigid * get_active_rigid (int a, int b); field_tethered * get_active_tethered (int a, int b); field_prop * get_active_prop (struct field_prop * pr, int a); field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids); field_struct * get_active_struct (int s, int a, int b); */ #include "dlp_field.h" /*! \fn field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid) \brief retrieve field molecule from overall atom id in the model \param this_proj the target project \param aid the target atom id */ field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid) { int i; field_molecule * fmol = this_proj -> force_field[activef] -> first_molecule; field_atom* fat; while (fmol) { fat = fmol -> first_atom; while (fat) { for (i=0; i num; i++) { if (fat -> list[i] == aid) return fmol; } fat = fat -> next; } fmol = fmol -> next; } return NULL; } /*! \fn field_molecule * get_active_field_molecule (int a) \brief retrieve field molecule \param a the id of the field molecule to retrieve */ field_molecule * get_active_field_molecule (int a) { int i; field_molecule * tfmol = tmp_field -> first_molecule; for (i=0; i next != NULL) tfmol = tfmol -> next; } return tfmol; } /*! \fn field_nth_body * get_active_body (int a, int b) \brief retrieve field nth body interaction \param a the id of the body interaction to retrieve \param b the type of body interaction */ field_nth_body * get_active_body (int a, int b) { int i; field_nth_body * body; body = tmp_field -> first_body[b]; for (i=0; i next != NULL) body = body -> next; } return body; } /*! \fn field_external * get_active_external (int a) \brief retrieve external field property \param a the id of the external field property to retrieve */ field_external * get_active_external (int a) { int i; field_external * external; external = tmp_field -> first_external; for (i=0; i next != NULL) external = external -> next; } return external; } /*! \fn field_atom* get_active_atom (int a, int b) \brief retrieve field atom \param a the id of the field molecule \param b the id of the field atom to retrieve */ field_atom* get_active_atom (int a, int b) { int i; field_atom* ato; ato = get_active_field_molecule (a) -> first_atom; for (i=0; i next != NULL) ato = ato -> next; } return ato; } /*! \fn field_shell * get_active_shell (int a, int b) \brief retrieve shell property \param a the id of the field molecule \param b the id of the shell property to retrieve */ field_shell * get_active_shell (int a, int b) { int i; field_shell * shl; shl = get_active_field_molecule (a) -> first_shell; for (i=0; i next != NULL) shl = shl -> next; } return shl; } /*! \fn field_constraint * get_active_constraint (int a, int b) \brief retrieve constraint property \param a the id of the field molecule \param b the id of the constraint to retrieve */ field_constraint * get_active_constraint (int a, int b) { int i; field_constraint * cons; cons = get_active_field_molecule (a) -> first_constraint; for (i=0; i next != NULL) cons = cons -> next; } return cons; } /*! \fn field_pmf * get_active_pmf (int a, int b) \brief retrieve PMF property \param a the id of the field molecule \param b the id of the PMF property to retrieve */ field_pmf * get_active_pmf (int a, int b) { int i; field_pmf * pmf; pmf = get_active_field_molecule (a) -> first_pmf; for (i=0; i next != NULL) pmf = pmf -> next; } return pmf; } /*! \fn field_rigid * get_active_rigid (int a, int b) \brief retrieve rigid property \param a the id of the field molecule \param b the id of the rigid property to retrieve */ field_rigid * get_active_rigid (int a, int b) { int i; field_rigid * rig; rig = get_active_field_molecule (a) -> first_rigid; for (i=0; i next != NULL) rig = rig -> next; } return rig; } /*! \fn field_tethered * get_active_tethered (int a, int b) \brief retrieve tethered property \param a the id of the field molecule \param b the id of the tethered to retrieve */ field_tethered * get_active_tethered (int a, int b) { int i; field_tethered * tet; tet = get_active_field_molecule (a) -> first_tethered; for (i=0; i next != NULL) tet = tet -> next; } return tet; } /*! \fn field_prop * get_active_prop (struct field_prop * pr, int a) \brief the field molecule structural property id to retrieve \param pr the pointer on the field molecule properties to browse \param a the id of the field molecule property to retrieve */ field_prop * get_active_prop (struct field_prop * pr, int a) { field_prop * prop; prop = pr; int i; for (i=0; i next != NULL) prop = prop -> next; } return prop; } /*! \fn field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids) \brief retrieve field molecule structural property using atoms \param pr the pointer on the field molecule properties to browse \param ti the number of atoms for this property \param ids the atoms to search for */ field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids) { field_prop * prop = NULL; prop = pr; gboolean done; int i; while (prop != NULL) { done = TRUE; for (i=0; i aid[i] != ids[i]) { done = FALSE; break; } } if (done) break; prop = prop -> next; } return prop; } /*! \fn field_struct * get_active_struct (int s, int a, int b) \brief retrieve field structural property \param s the type of structural property \param a the field molecule id \param b the structural property id to retrieve */ field_struct * get_active_struct (int s, int a, int b) { int i; field_struct * str; str = get_active_field_molecule (a) -> first_struct[s]; for (i=0; i next != NULL) str = str -> next; } return str; } Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_atom.c000066400000000000000000000604451457665371200206040ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_atom.c * @short Functions to handle atom selection(s) when creating a force field \n Functions to remove / add field atom from a force field * @author Sébastien Le Roux */ /* * This file: 'dlp_atom.c' * * Contains: * - The functions to handle atom selection(s) when creating a force field - The functions to remove / add field atom from a force field * * List of functions: void set_sensitive_atom (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void atom_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void clean_old_atom (field_atom* at, int atos, int * atid); void adjust_field_struct (int oid, int k, field_struct * olds); void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda); G_MODULE_EXPORT void select_field_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_remove_atom_from_field_molecule (GtkDialog * rmol, gint response_id, gpointer data); G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); */ #include "dlp_field.h" #include "calc.h" #include "interface.h" #include "glview.h" int active_sel; int * new_at; int ** sel_at; int a_ato; extern int * astr; extern int vdw_id; extern ColRGBA init_color (int id, int numid); field_atom* at_to_remove; GtkTreeViewColumn * ato_col[4]; GtkCellRenderer * ato_cell[4]; extern GtkWidget * remove_label; extern GtkCellRenderer * remove_renderer[5]; extern GtkTreeViewColumn * remove_col[5]; extern float val; extern float * val_at; extern void field_selection (int i, int viz, int lab, int aid); extern void field_unselect_all (); extern void compare_non_bonded (gchar * fatom); extern void init_all_impropers_inversions (int stru); extern void init_default_shaders (glwin * view); /*! \fn void set_sensitive_atom (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field atom set renderer sensitivity in the DL-POLY atom(s) selection tree model \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void set_sensitive_atom (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int m; gtk_tree_model_get (mod, iter, 0, & m, -1); if (a_ato && m-1 != new_at[0]) { gtk_cell_renderer_set_visible (renderer, FALSE); } else { gtk_cell_renderer_set_visible (renderer, TRUE); } } /*! \fn void atom_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field atom set renderer color and markup in the DL-POLY atom(s) selection tree model \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void atom_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, 3, & j, -1); gtk_tree_model_get (mod, iter, 0, & i, -1); set_renderer_color (j, renderer, init_color (i, num_field_objects)); } /*! \fn G_MODULE_EXPORT void select_field_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select field atom toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void select_field_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j; GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { toviz.c = 0; tmp_fbt = get_active_atom (tmp_fmol -> id, new_at[a_ato-1]); for (j=0; j num; j++) field_selection (tmp_fbt -> list[j], FALSE, FALSE, new_at[a_ato-1]); new_at[a_ato-1] = -1; a_ato --; gtk_tree_store_set (* model, & iter, 3, 0, -1); } else { a_ato ++; gtk_tree_store_set (* model, & iter, 3, 1, -1); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & i, -1); new_at[a_ato-1] = i-1; toviz.c = 1; tmp_fbt = get_active_atom (tmp_fmol -> id, new_at[a_ato-1]); for (j=0; j num; j++) field_selection (tmp_fbt -> list[j], TRUE, TRUE, new_at[a_ato-1]); } init_default_shaders (tmp_view); gtk_tree_view_column_set_cell_data_func (remove_col[3], remove_renderer[3], set_sensitive_atom, NULL, NULL); i = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_mol[0])); if (new_at[0] == -1) { gtk_label_set_text (GTK_LABEL(remove_label), remove_text(-2, 0, at_to_remove -> name)); } else { gtk_label_set_text (GTK_LABEL(remove_label), remove_text(i, new_at[0], at_to_remove -> name)); } gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); } /*! \fn void clean_old_atom (field_atom* at, int atos, int * atid) \brief remove atom list from field atom \param at the field atom \param atos the number of atom(s) to remove \param atid the list of atom(s) id to remove */ void clean_old_atom (field_atom* at, int atos, int * atid) { int h, i, j, k, l, m; gboolean save; h = at -> num - atos*tmp_fmol -> multi; int * tlist = allocint (h); int * dlist = allocint (h); j = -1; for (i=0; i < at -> num; i++) { save = TRUE; for (k=0; k list_id[i] == atid[k]) { save = FALSE; break; } } if (save) { j ++; tlist[j] = at -> list[i]; dlist[j] = at -> list_id[i]; } } at -> num = h; g_free (at -> list); at -> list = duplicate_int (h, tlist); g_free (at -> list_id); at -> list_id = duplicate_int (h, dlist); for (i=0; i list[i]; l = at -> list_id[i]; for (m=0; m< tmp_fmol -> multi; m++) { if (tmp_proj -> atoms[0][k].coord[2] == tmp_fmol -> fragments[m]) break; } tmp_fmol -> atoms_id[l][m].b = i; } g_free (tlist); g_free (dlist); } // extern void print_all_field_struct (field_molecule * mol, int str); /*! \fn void adjust_field_struct (int oid, int k, field_struct * olds) \brief adjust field molecule structural property \param oid the target field atom type \param k the type of structural property to adjust \param olds the field molecule structural property to adjust */ void adjust_field_struct (int oid, int k, field_struct * olds) { int i, j; gboolean doit; field_struct * str; i = struct_id(k); int * aids = allocint (i); while (olds) { doit = TRUE; if (oid < 0) { for (j=0; j aid[j]; } else { for (j=0; j aid[j] < oid) { aids[j] = olds -> aid[j]; } else if (olds -> aid[j] > oid) { aids[j] = olds -> aid[j] - 1; } else { doit = FALSE; } } } if (doit) { j = get_struct_id_from_atom_id (k, aids); if (j > 0) { str = get_active_struct (k, tmp_fmol -> id, j-1); str -> def = duplicate_field_prop (olds -> def, k); if (olds -> other) { duplicate_other_prop (oid, olds, str); } } } olds = olds -> next; } // if (k == 0) print_all_field_struct (tmp_fmol, k); g_free (aids); } /*! \fn G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data) \brief DL-POLY force field atom selection - running the dialog \param add_dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data) { gboolean done = FALSE; selection_confirmed = FALSE; int i, j, k; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_ato > 0 && a_ato < tmp_fat -> num / tmp_fmol -> multi) { if (a_ato > 1) { str = g_strdup_printf ("%d atoms have been selected !", a_ato); str = g_strdup_printf ("%s\nConfirm this choice and create a new field atom to describe them ?", str); } else { str = g_strdup_printf ("A single atom has been selected !"); str = g_strdup_printf ("%s\nIs this correct, create a new field atom to describe it ?", str); } field_question (str, G_CALLBACK(confirm_selection), NULL); if (selection_confirmed) { done = TRUE; i = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_mol[0])); tmp_fbt = get_active_atom (i, tmp_fmol -> atoms-1); new_at = allocint(a_ato); j = 0; for (k=0; k num/tmp_fmol -> multi; k++) { if (sel_at[1][k]) { new_at[j] = sel_at[0][k]; j ++; } } tmp_fbt -> next = init_field_atom (tmp_fmol -> atoms, OTHER, tmp_fat -> sp, a_ato*tmp_fmol -> multi, -1, new_at); tmp_fbt -> next -> prev = g_malloc (sizeof*tmp_fbt -> next -> prev); tmp_fbt -> next -> prev = tmp_fbt; tmp_fmol -> atoms ++; clean_old_atom (tmp_fat, a_ato, new_at); g_free (new_at); field_struct * struct_saved[8]; for (k=0; k<8; k++) { struct_saved[k] = duplicate_field_struct_list (tmp_fmol -> first_struct[k], FALSE); } init_all_field_struct (FALSE); // Cross check saved vs. new struct for (k=0; k<8; k++) { adjust_field_struct (-1, k, struct_saved[k]); clean_field_struct_list (struct_saved[k]); } // Update non bonded interactions compare_non_bonded (tmp_fbt -> next -> name); } } break; default: done = TRUE; break; } if (done) { destroy_this_dialog (add_dialog); field_unselect_all (); update_field_trees (); } } /*! \fn G_MODULE_EXPORT void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data) \brief DL-POLY force field atom selection - creating the dialog \param select_dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data) { int sid = GPOINTER_TO_INT (data); gboolean done = FALSE; gboolean redone; gboolean save; gchar * str; int i, j, k, l; redone = FALSE; save = FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (sid == 6 || sid == 7) { i = sid - 6; if (tmp_fpmf -> num[i] > 0) { k = 0; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) k ++; } } else { k = a_ato; } } else if (sid == 8) { if (tmp_frig -> num > 0) { k = 0; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) k ++; } } else { k = a_ato; } } else { k = a_ato; } if (k > 1) { if (sid < 2 || sid > 4) { str = g_strdup_printf ("%d atoms selected !\nIs this correct ?", k); } else { str = g_strdup_printf ("%d atoms selected !\nOnly a single atom is required !", k); redone = TRUE; } } else if (k == 1) { switch (sid) { case 1: str = g_strdup_printf ("A single atom selected !\nIs this correct ?"); break; default: done = TRUE; save = TRUE; break; } } else { str = g_strdup_printf ("No atom selected !\nIs this correct ?"); } if (! done) { selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed && ! redone) { done = TRUE; save = TRUE; } } break; default: done = TRUE; break; } if (done) { destroy_this_dialog (select_dialog); if (save) { if (sid == 1) { tmp_fat -> frozen = a_ato; for (i=0; i < tmp_fat -> num/tmp_fmol -> multi; i++) { j = sel_at[0][i]; k = sel_at[1][i]; for (l=0; l num; l++) { if (tmp_fat -> list_id[l] == j) { tmp_fat -> frozen_id[l] = k; } } } } else if ((sid > 1 && sid < 6) || sid == 9) { for (j=0; j mol -> natoms; j++) if (sel_at[0][j]) break; switch (sid) { case 2: tmp_fshell -> ia[0] = j+1; break; case 3: tmp_fshell -> ia[1] = j+1; break; case 4: tmp_fcons -> ia[0] = j+1; break; case 5: tmp_fcons -> ia[1] = j+1; break; case 9: tmp_ftet -> num = j+1; break; } } else if (sid == 6 || sid == 7) { tmp_fpmf -> num[i] = k; tmp_fpmf -> list[i] = NULL; tmp_fpmf -> weight[i] = NULL; if (k > 0) { tmp_fpmf -> list[i] = allocint(tmp_fpmf -> num[i]); tmp_fpmf -> weight[i] = allocfloat(tmp_fpmf -> num[i]); k = -1; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) { k ++; tmp_fpmf -> list[i][k] = j; tmp_fpmf -> weight[i][k] = val_at[j]; } } } } else if (sid == 8) { tmp_frig -> num = k; tmp_frig -> list = NULL; if (k > 0) { tmp_frig -> list = allocint(tmp_frig -> num); k = -1; for (j=0; j mol -> natoms; j++) { if (sel_at[0][j]) { k ++; tmp_frig -> list[k] = j; } } } } else if (sid > 10 && sid < SEXTERN) { i = sid - 11; tmp_fbody -> na[i] = get_active_body (vdw_id, 0)-> na[0]; tmp_fbody -> a[i] = duplicate_int (get_active_body (vdw_id, 0) -> na[0], get_active_body (vdw_id, 0)-> a[0]); tmp_fbody -> ma[i] = duplicate_int (get_active_body (vdw_id, 0)-> na[0], get_active_body (vdw_id, 0)-> ma[0]); } } field_unselect_all (); } } /*! \fn void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda) \brief merge the field atom to remove with already other field atom \param to_merge the field atom to merge the atom to remove with \param to_remove the field atom to remove \param upda update field atom(s) data lists */ void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda) { int * tmp_ato = allocint (to_merge -> num + to_remove -> num); int * tmp_atd = allocint (to_merge -> num + to_remove -> num); int * tmp_fre = allocint (to_merge -> num + to_remove -> num); int i, j, k, l; i = to_merge -> num + to_remove -> num; for (j=0; j num; j++) { tmp_ato[j] = to_merge -> list[j]; tmp_atd[j] = to_merge -> list_id[j]; tmp_fre[j] = to_merge -> frozen_id[j]; } for (j=to_merge -> num; j list[j - to_merge -> num]; tmp_atd[j] = to_remove -> list_id[j - to_merge -> num]; tmp_fre[j] = to_remove -> frozen_id[j - to_merge -> num]; } int val_a, val_b, val_c; for (j=1; j-1; k--) { if (tmp_atd[k] < val_b) break; tmp_ato[k+1] = tmp_ato[k]; tmp_atd[k+1] = tmp_atd[k]; tmp_fre[k+1] = tmp_fre[k]; } tmp_ato[k+1] = val_a; tmp_atd[k+1] = val_b; tmp_fre[k+1] = val_c; } to_merge -> num = i; g_free (to_merge -> list); to_merge -> list = duplicate_int (to_merge -> num, tmp_ato); g_free (tmp_ato); g_free (to_merge -> list_id); to_merge -> list_id = duplicate_int (to_merge -> num, tmp_atd); g_free (tmp_atd); g_free (to_merge -> frozen_id); to_merge -> frozen_id = duplicate_int (to_merge -> num, tmp_fre); g_free (tmp_fre); if (upda) { for (i=0; i num; i++) { j = to_merge -> list[i]; k = to_merge -> list_id[i]; for (l=0; l< tmp_fmol -> multi; l++) { if (tmp_proj -> atoms[0][j].coord[2] == tmp_fmol -> fragments[l]) break; } tmp_fmol -> atoms_id[k][l].a = to_merge -> id; tmp_fmol -> atoms_id[k][l].b = i; tmp_proj -> atoms[0][j].faid = to_merge -> id; } } } /*! \fn G_MODULE_EXPORT void run_remove_atom_from_field_molecule (GtkDialog * rmol, gint response_id, gpointer data) \brief remove atom from field molecule - running the dialog \param rmol the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_atom_from_field_molecule (GtkDialog * rmol, gint response_id, gpointer data) { int i, j, k; gboolean done = FALSE; gchar * str; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_ato) { i = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_mol[0])); field_atom* to_merge = get_active_atom(i, new_at[0]); str = g_strdup_printf ("Merging with atom N°%d - %s !\nIs this correct ?", new_at[0]+1, to_merge -> name); selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed) { done = TRUE; merging_atoms (to_merge, at_to_remove, TRUE); field_struct * struct_saved[8]; for (k=0; k<8; k++) { struct_saved[k] = duplicate_field_struct_list (tmp_fmol -> first_struct[k], FALSE); } // Modify the atom list j = at_to_remove -> id; if (at_to_remove -> prev == NULL) { tmp_fmol -> first_atom = at_to_remove -> next; tmp_fmol -> first_atom -> prev = NULL; } else if (at_to_remove -> next == NULL) { tmp_fct = at_to_remove -> prev; tmp_fct -> next = NULL; } else { tmp_fct -> next = at_to_remove -> next; at_to_remove -> next -> prev = tmp_fct; } // Finally clearing atom id tmp_fct = tmp_fmol -> first_atom; for (k=0; k atoms; k++) { tmp_fct -> id = k; if (tmp_fct -> next != NULL) tmp_fct = tmp_fct -> next; } tmp_fmol -> atoms --; init_all_field_struct (FALSE); // Cross check saved vs. new struct for (k=0; k<8; k++) { adjust_field_struct (j, k, struct_saved[k]); clean_field_struct_list (struct_saved[k]); } // Non-bonded interactions: compare_non_bonded (to_merge -> name); } } break; default: done = TRUE; break; } if (done) destroy_this_dialog (rmol); } /*! \fn G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove atom from field molecule - creating the dialog \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data) { at_to_remove = (field_atom*) data; int i, j; field_object = 1; gchar * str = g_strdup_printf ("Select the field atom to merge atom \"%s\" with", at_to_remove -> name); GtkWidget * rmol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rmol), "Apply", GTK_RESPONSE_APPLY); GtkWidget * remove_tree = NULL; GtkTreeIter iter; gchar * mol_title[4] = {"Id", "Name", "Number", "Viz.3D & Merge with"}; gchar * ctype[4] = {"text", "text", "text", "active"}; GType col_type[4] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN}; a_ato = 0; new_at = allocint(1); GtkTreeStore * remove_model = gtk_tree_store_newv (4, col_type); remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); num_field_objects = tmp_fmol -> atoms; for (i=0; i<4; i++) { if (i < 3) { remove_renderer[i] = gtk_cell_renderer_text_new (); } else { remove_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(remove_renderer[i]), TRUE); g_signal_connect (G_OBJECT(remove_renderer[i]), "toggled", G_CALLBACK(select_field_atom), & remove_model); } remove_col[i] = gtk_tree_view_column_new_with_attributes (mol_title[i], remove_renderer[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), remove_col[i]); if (i < 3) { gtk_tree_view_column_set_cell_data_func (remove_col[i], remove_renderer[i], atom_set_color_and_markup, NULL, NULL); } } // Clean 3D viz field_unselect_all (); // fill model j = 0; tmp_fat = tmp_fmol -> first_atom; for (i=0; i atoms; i++) { if (tmp_fat -> sp == at_to_remove -> sp && tmp_fat -> id != at_to_remove -> id) { j ++; gtk_tree_store_append (remove_model, & iter, NULL); gtk_tree_store_set (remove_model, & iter, 0, tmp_fat -> id+1, 1, tmp_fat -> name, 2, tmp_fat -> num, 3, 0, -1); } if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } g_object_unref (remove_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(remove_tree)); i = ((j+1)*40 < 500) ? (j+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rmol), 375, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); remove_label = markup_label(remove_text(-2, 0, at_to_remove -> name), -1, -1, 0.5, 0.5); gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (rmol), remove_label, FALSE, FALSE, 0); run_this_gtk_dialog (rmol, G_CALLBACK(run_remove_atom_from_field_molecule), NULL); field_unselect_all (); update_field_trees (); } Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_comp.c000066400000000000000000000144711457665371200206000ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_comp.c * @short Functions to compare and adjust field body parameters * @author Sébastien Le Roux */ /* * This file: 'dlp_comp.c' * * Contains: * - The functions to compare and adjust field body parameters * * List of functions: void compare_body (gchar * fatom, field_nth_body * new_body, int n_body, field_nth_body * old_body, int o_body); void compare_non_bonded (gchar * fatom); */ #include "global.h" #include "interface.h" #include "glwindow.h" #include "glview.h" #include "dlp_field.h" field_nth_body * comp_fbody; extern void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody); /*! \fn void compare_body (gchar * fatom, field_nth_body * new_body, int n_body, field_nth_body * old_body, int o_body) \brief compare, and if require ajdust, two lists of field body properties \param fatom the name of the field atom to search for \param new_body 1st list of field body property(ies) \param n_body the number of field body in this 1st list \param old_body 2nd list of field body property(ies) \param o_body the number of field body in this 2nd list */ void compare_body (gchar * fatom, field_nth_body * new_body, int n_body, field_nth_body * old_body, int o_body) { int i, j, k, l, m, n, o, p; field_nth_body * tmp_new = new_body; field_nth_body * tmp_old; field_nth_body * new_guy; field_nth_body * old_one; field_nth_body * new_one; gboolean doit; for (i=0; i ma[0][0], tmp_new -> a[0][0]) -> name) == 0 && g_strcmp0 (fatom, get_active_atom (tmp_new -> ma[1][0], tmp_new -> a[1][0]) -> name) == 0) new_guy = tmp_new; for (k=0; k<2; k++) { for (l=0; l<2; l++) { if (g_strcmp0 (get_active_atom (tmp_new -> ma[k][0], tmp_new -> a[k][0]) -> name, get_active_atom (tmp_old -> ma[l][0], tmp_old -> a[l][0]) -> name) == 0) doit = TRUE; if (doit) break; } if (g_strcmp0 (get_active_atom (tmp_new -> ma[k][0], tmp_new -> a[k][0]) -> name, get_active_atom (tmp_old -> ma[k][0], tmp_old -> a[k][0]) -> name) == 0) doit = TRUE; if (doit) break; } // Same atoms copy the body params if (doit) duplicate_nbody_params (tmp_new, tmp_old); if (tmp_old -> next != NULL) tmp_old = tmp_old -> next; } if (tmp_new -> next != NULL) tmp_new = tmp_new -> next; } for (i=1; i<5; i++) { tmp_fbody = tmp_field -> first_body[i]; k = body_at (i); new_one = get_active_body (tmp_field -> nbody[i], i); m = 0; for (j=0; j nbody[i]; j++) { for (l=0; l na[l] > 0) { doit = FALSE; for (n=0; n na[l]; n++) { if (g_strcmp0 (get_active_atom (tmp_fbody -> ma[l][n], tmp_fbody -> a[l][n]) -> name, fatom) == 0) { doit = TRUE; o = n; break; } } if (doit) { if (tmp_fbody -> na[l] > 1) { // Add new nth_body new_one -> next = duplicate_field_nth_body (tmp_fbody); old_one = duplicate_field_nth_body (tmp_fbody); new_one -> next -> prev = new_one; new_one = new_one -> next; new_one -> id ++; new_one -> na[l] = new_guy -> na[0]; new_one -> a[l] = duplicate_int (new_guy -> na[0], new_guy -> a[0]); new_one -> ma[l] = duplicate_int (new_guy -> na[0], new_guy -> ma[0]); p = 0; old_one -> na[l] --; old_one -> a[l] = NULL; old_one -> a[l] = g_malloc (old_one -> na[l]*sizeof*old_one -> a[l]); old_one -> ma[l] = NULL; old_one -> ma[l] = g_malloc (old_one -> na[l]*sizeof*old_one -> ma[l]); for (n=0; n na[l]; n++) { if (n != o) { old_one -> a[l][p] = tmp_fbody -> a[l][n]; old_one -> ma[l][p] = tmp_fbody -> ma[l][n]; } } tmp_fbody -> a[l] = NULL; tmp_fbody -> ma[l] = NULL; tmp_fbody -> na[l] --; tmp_fbody -> a[l] = duplicate_int (tmp_fbody -> na[l], old_one -> a[l]); tmp_fbody -> ma[l] = duplicate_int (tmp_fbody -> na[l], old_one -> ma[l]); m ++; } else if (tmp_fbody -> na[l] == 1) { tmp_fbody -> a[l][0] = new_guy -> a[0][0]; tmp_fbody -> ma[l][0] = new_guy -> ma[0][0]; } } } } if (tmp_fbody -> next != NULL) tmp_fbody = tmp_fbody -> next; } tmp_field -> nbody[i] += m; } tmp_field -> first_body[0] = NULL; tmp_field -> first_body[0] = duplicate_field_nth_body (new_body); tmp_new = tmp_field -> first_body[0]; tmp_old = new_body; for (i=1; i next = duplicate_field_nth_body (tmp_old -> next); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; tmp_old = tmp_old -> next; } tmp_field -> nbody[0] = n_body; } /*! \fn void compare_non_bonded (gchar * fatom) \brief compare non bond interaction parameters \param fatom the name of the target field atom */ void compare_non_bonded (gchar * fatom) { int nbody = init_vdw (FALSE); // comp_fbody is prepared in init_vdw compare_body (fatom, comp_fbody, nbody, tmp_field -> first_body[0], tmp_field -> nbody[0]); } Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_control.c000066400000000000000000003176731457665371200213340ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_control.c * @short Functions to handle the creation of the DL-POLY CONTROL file * @author Sébastien Le Roux */ /* * This file: 'dlp_control.c' * * Contains: * - The functions to handle the creation of the DL-POLY CONTROL file * * List of functions: G_MODULE_EXPORT void set_order (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_thermo_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_nvs (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_semi (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_thermostat (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_ensemble (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_md_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void show_advance_time_step (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_md_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_impact (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void show_impact_dialog (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_equi_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_equi_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_equi (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_out_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_out (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_print_level (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_ana_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_ana (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_io_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_io (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_io_method (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_elec_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void adjust_precision (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_elec_eval (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_elec (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_vdw_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_vdw_mix (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_vdw (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_met (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_sys_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_sys_restart (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void check_sys (GtkToggleButton * but, gpointer data); GtkWidget * create_thermo_options (int ensemble, int thermo); GtkWidget * create_thermo_box (int ensemble); GtkWidget * create_ensemble_box (); GtkWidget * create_md_box (); GtkWidget * create_equi_box (); GtkWidget * create_traj_box (); GtkWidget * create_dump_box (); GtkWidget * create_out_box (); GtkWidget * create_overall_box (); GtkWidget * create_analyze_box (); GtkWidget * create_job_box (); GtkWidget * create_io_box (); GtkWidget * create_misc_box (); GtkWidget * create_elec_param_box (); GtkWidget * create_electro_box (); GtkWidget * create_vdws_box (); GtkWidget * create_metal_box (); GtkWidget * create_sys_box (); GtkWidget * create_restart_box (); GtkWidget * vbox_control (int f); */ #include "dlp_field.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "bind.h" extern ColRGBA init_color (int id, int numid); extern gboolean print_ana (); gchar * celemts[MAXDATC] = {"System information", "Calculation details", "Non-bonded interactions", "Equilibration", "Thermodynamics", "Molecular dynamics", "Output options", "Computational details"}; gchar * celets[MAXDATC] = {"system information", "calculation details", "non-bonded interactions", "equilibration", "thermodynamics", "molecular dynamics", "output options", "computational details"}; #define DLP_ENS 4 #define DLP_ENS_TYPE 10 gchar * md_ensemble[DLP_ENS] = {"NVE", "NVT", "NPT", "NST"}; gchar * md_thermo[DLP_ENS_TYPE] = {"Evans", "Langevin", "Andersen", "Berendsen", "Nosë-Hoover", "Gentle Stochastic", "DPD", "Martyna-Tuckerman-Klein", "Two temperature model", "Inhomogeneous Langevin"}; // In the following, 0 = no thermo, > 0 = thermo and num of opts + 1 int md_ens_opt[DLP_ENS][DLP_ENS_TYPE] = {{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 2, 3, 2, 2, 3, 3, 0, 4, 4}, {0, 3, 0, 3, 3, 0, 0, 3, 0, 0}, {0, 3, 0, 3, 3, 0, 0, 3, 0, 0}}; gchar * opts_nvt[9][3]={{NULL, NULL, NULL}, {"Relaxation speed constant (friction):", NULL, NULL}, {"Relaxation time:", "Softness [0.0 - 1.0]:", NULL}, {"Relaxation constant:", NULL, NULL}, {"Relaxation constant:", NULL, NULL}, {"Relaxation constant:", "Langevin friction:", NULL}, {"Shardlow's splitting order:", "Global drag coefficient:", NULL}, {"Relaxation constant:", "Enhancement of relaxation constant:", "Cut-off particle velocity for friction enhancement:"}, {"Relaxation constant:", "Enhancement of relaxation constant:", "Cut-off particle velocity for friction enhancement:"}}; gchar * unit_nvt[9][3]={{NULL, NULL, NULL}, {"ps-1", NULL, NULL}, {"ps", NULL, NULL}, {"ps", NULL, NULL}, {"ps", NULL, NULL}, {"ps", "ps-1", NULL}, {NULL, "Dalton ps-1", NULL}, {"ps-1", "ps-1", "Å ps-1"}, {"ps-1", "ps-1", "Å ps-1"}}; gchar * opts_npt_nvs[2][3] = {{"Thermostat relaxation speed constant (friction):", "Barostat relaxation speed constant (friction):", NULL}, {"Thermostat relaxation time:", "Barostat relaxation time:", "Target surface tension:"}}; gchar * unit_npt_nvs[2][3] = {{"ps-1", "ps-1", NULL}, {"ps", "ps", "dyn cm-1"}}; gchar * extra_nvs[4] = {"Standard", "Area", "Tension", "Orthorhombic"}; GtkWidget * check_nvs_butt[4]; GtkWidget * nvs_label; GtkWidget * nvs_entry; GtkWidget * nvs_unit; GtkWidget * nvs_check[2]; GtkWidget * o_ent_vbox; GtkWidget * o_vbox; GtkWidget * e_vbox; GtkWidget * ens_box; GtkWidget * bath_box; GtkWidget * thermo_option_box; /*! \fn G_MODULE_EXPORT void set_order (GtkComboBox * box, gpointer data) \brief CONTROL file change thermostat order \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_order (GtkComboBox * box, gpointer data) { tmp_field -> thermo_opts[0] = gtk_combo_box_get_active (box); } /*! \fn G_MODULE_EXPORT void set_thermo_param (GtkEntry * res, gpointer data) \brief CONTROL file thermostat update parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_thermo_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (i == 9) { if ((v == 0.0 || v >= 1.0) && v != tmp_field -> thermo_opts[i]) { tmp_field -> thermo_opts[i] = v; } else if (v < 1.0 && v != 0.0) { show_warning ("Target temperature for the pseudo bath must be ≥ 1.0 K,\n" "Alternatively set value to 0.0 K to system temperature.", field_assistant); } } else if (v >= 0.0 && v != tmp_field -> thermo_opts[i]) { tmp_field -> thermo_opts[i] = v; } update_entry_double(res, tmp_field -> thermo_opts[i]); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_nvs (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_nvs (GtkToggleButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_nvs (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT(data); tmp_field -> thermo_opts[3] = (double) i; for (j=0; j<2; j++) { widget_set_sensitive (nvs_check[j], FALSE); } for (j=0; j<4; j++) { if (j != i) { if (j == 2) { update_entry_text (GTK_ENTRY(nvs_entry), ""); widget_set_sensitive (nvs_label, FALSE); widget_set_sensitive (nvs_entry, FALSE); widget_set_sensitive (nvs_unit, FALSE); } } else if (j == i && i == 2) { widget_set_sensitive (nvs_label, TRUE); widget_set_sensitive (nvs_entry, TRUE); widget_set_sensitive (nvs_unit, TRUE); update_entry_double (GTK_ENTRY(nvs_entry), 0.0); tmp_field -> thermo_opts[4] = 0.0; widget_set_sensitive (nvs_check[0], TRUE); } else if (j == i && i == 3) { widget_set_sensitive (nvs_check[1], TRUE); } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_semi (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_semi (GtkToggleButton * but, gpointer data) \brief CONTROL file thermostat change parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_semi (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j; #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif tmp_field -> thermo_opts[i] = j; if (i == 6) widget_set_sensitive (bath_box, j); } /*! \fn GtkWidget * create_thermo_options (int ensemble, int thermo) \brief CONTROL file create thermostat option box \param ensemble the thermodynamic ensemble \param thermo the type of thermostat */ GtkWidget * create_thermo_options (int ensemble, int thermo) { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; gboolean val; int i, j; switch (ensemble) { case 1: for (i=0; i<3; i++) { if (opts_nvt[thermo][i] != NULL) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(opts_nvt[thermo][i], 350, -1, 1.0, 0.5), FALSE, FALSE, 50); if (thermo == 6 && i == 0) { GtkWidget * o_combo = create_combo(); combo_text_append (o_combo, "s1"); combo_text_append (o_combo, "s2"); gtk_combo_box_set_active (GTK_COMBO_BOX(o_combo), (int)tmp_field -> thermo_opts[i]); g_signal_connect (G_OBJECT (o_combo), "changed", G_CALLBACK(set_order), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, o_combo, FALSE, FALSE, 5); } else { entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); } if (unit_nvt[thermo][i] != NULL) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(unit_nvt[thermo][i], 20, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } } break; default: for (i=0; i<2; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(opts_npt_nvs[(thermo) ? 1 : 0][i], 310, -1, 1.0, 0.5), FALSE, FALSE, 50); entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(unit_npt_nvs[(thermo) ? 1 : 0][i], 20, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (ensemble == 3) { GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hhbox, FALSE, FALSE, 0); GtkWidget * vvbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, hhbox, vvbox, FALSE, FALSE, 50); gtk_box_set_homogeneous (GTK_BOX (vvbox), TRUE); for (i=0; i<4; i++) { hbox = create_hbox (5); val = ((int)tmp_field -> thermo_opts[3] == i) ? TRUE : FALSE; #ifdef GTK4 check_nvs_butt[i] = check_button (extra_nvs[i], 100, -1, val, G_CALLBACK(check_nvs), GINT_TO_POINTER(i)); if (i) { gtk_check_button_set_group ((GtkCheckButton *)extra_nvs[i], (GtkCheckButton *)extra_nvs[0]); } #else if (! i) { check_nvs_butt[i] = radio_button (extra_nvs[i], 100, -1, val, G_CALLBACK(check_nvs), GINT_TO_POINTER(i)); } else { check_nvs_butt[i] = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON(check_nvs_butt[0]), extra_nvs[i]); } #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_nvs_butt[i], FALSE, FALSE, 20); if (i == 2) { nvs_label = markup_label(opts_npt_nvs[1][2], 150, -1, 0.0, 0.5); widget_set_sensitive (nvs_label, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_label, FALSE, FALSE, 0); j = 4; nvs_entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(j)); widget_set_sensitive (nvs_entry, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_entry, FALSE, FALSE, 10); if (val) update_entry_double (GTK_ENTRY(nvs_entry), tmp_field -> thermo_opts[4]); nvs_unit = markup_label(unit_npt_nvs[1][2], 50, -1, 0.0, 0.5); widget_set_sensitive (nvs_unit, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_unit, FALSE, FALSE, 0); } if (i > 1) { val = (((int)tmp_field -> thermo_opts[3] == i) && tmp_field -> thermo_opts[5] == 1.0) ? TRUE : FALSE; nvs_check[i-2] = check_button("Semi-anisotropic constraint", 200, -1, val, G_CALLBACK(check_semi), GINT_TO_POINTER(5)); widget_set_sensitive (nvs_check[i-2], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, nvs_check[i-2], FALSE, FALSE, 10); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); } } break; } return vbox; } /*! \fn G_MODULE_EXPORT void set_thermostat (GtkComboBox * box, gpointer data) \brief CONTROL file change thermostat option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_thermostat (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); switch (i) { case 0: tmp_field -> thermostat = gtk_combo_box_get_active (box); for (j=0; j<6; j++) tmp_field -> thermo_opts[j] = 0.0; if (tmp_field -> ensemble) { o_ent_vbox = destroy_this_widget (o_ent_vbox); o_ent_vbox = create_thermo_options (tmp_field -> ensemble, tmp_field -> thermostat); add_box_child_start (GTK_ORIENTATION_VERTICAL, o_vbox, o_ent_vbox, FALSE, FALSE, 0); show_the_widgets (o_ent_vbox); } break; case 1: tmp_field -> thermo_opts[7] = gtk_combo_box_get_active (box); break; } } /*! \fn GtkWidget * create_thermo_box (int ensemble) \brief CONTROL file create thermostat box parameters \param ensemble the target thermodynamic ensemble */ GtkWidget * create_thermo_box (int ensemble) { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Thermostat:", 100, -1, 0.0, 0.5), FALSE, FALSE, 30); GtkWidget * thermo_box = create_combo(); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, thermo_box, FALSE, FALSE, 0); int i; for (i=0; i thermostat); g_signal_connect (G_OBJECT (thermo_box), "changed", G_CALLBACK(set_thermostat), GINT_TO_POINTER(0)); if (ensemble) { o_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, o_vbox, FALSE, FALSE, 0); o_ent_vbox = create_thermo_options (ensemble, tmp_field -> thermostat); add_box_child_start (GTK_ORIENTATION_VERTICAL, o_vbox, o_ent_vbox, FALSE, FALSE, 0); } return vbox; } /*! \fn G_MODULE_EXPORT void set_ensemble (GtkComboBox * box, gpointer data) \brief CONTROL file change thermodynamic ensemble parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ensemble (GtkComboBox * box, gpointer data) { int i; if (tmp_field -> ensemble) { for (i=0; i<4; i++) { check_nvs_butt[i] = destroy_this_widget (check_nvs_butt[i]); } thermo_option_box = destroy_this_widget (thermo_option_box); } tmp_field -> ensemble = gtk_combo_box_get_active (box); tmp_field -> thermostat = 0; for (i=0; i<6; i++) tmp_field -> thermo_opts[i] = 0.0; if (tmp_field -> ensemble) { thermo_option_box = create_thermo_box (tmp_field -> ensemble); show_the_widgets (thermo_option_box); add_box_child_start (GTK_ORIENTATION_VERTICAL, ens_box, thermo_option_box, FALSE, FALSE, 0); } } /*! \fn GtkWidget * create_ensemble_box () \brief CONTROL file create thermodynamic ensemble parameter widgets */ GtkWidget * create_ensemble_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Ensemble:", 100, -1, 0.0, 0.5), FALSE, FALSE, 30); GtkWidget * ensemble = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ensemble, FALSE, FALSE, 0); int i; for (i=0; i ensemble); g_signal_connect (G_OBJECT (ensemble), "changed", G_CALLBACK(set_ensemble), NULL); ens_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ens_box, FALSE, FALSE, 0); if (tmp_field -> ensemble) { thermo_option_box = create_thermo_box (tmp_field -> ensemble); add_box_child_start (GTK_ORIENTATION_VERTICAL, ens_box, thermo_option_box, FALSE, FALSE, 0); } gtk_widget_set_size_request (vbox, -1, 390); gboolean val = (tmp_field -> thermo_opts[6] == 1.0) ? TRUE : FALSE; bath_box = create_hbox (5); add_box_child_end (vbox, bath_box, FALSE, FALSE, 0); add_box_child_end (vbox, check_button("Use pseudo thermal bath", 100, -1, val, G_CALLBACK(check_semi), GINT_TO_POINTER(6)), FALSE, FALSE, 5); widget_set_sensitive (bath_box, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label("Thermostat type:", 150, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, combo, FALSE, FALSE, 00); combo_text_append (combo, "Langevin + Direct"); combo_text_append (combo, "Langevin"); combo_text_append (combo, "Gauss"); combo_text_append (combo, "Direct"); gtk_combo_box_set_active (GTK_COMBO_BOX(combo), (int)tmp_field -> thermo_opts[7]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_thermostat), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label("Thickness:", 100, -1, 1.0, 0.5), FALSE, FALSE, 0); GtkWidget * entry = create_entry(G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(8)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[8]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label("Target T°:", 100, -1, 1.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_thermo_param), 100, 10, FALSE, GINT_TO_POINTER(9)); update_entry_double (GTK_ENTRY(entry), tmp_field -> thermo_opts[9]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bath_box, markup_label("K", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); return vbox; } GtkWidget * step_button; GtkWidget * extra_vbox[2]; GtkWidget * extra_lab[4]; gchar * md_data[6] = {"Target temperature:", "Verlet integrator:", "Number of steps:", "Time step δt:", "Target pressure:", ""}; gchar * md_extra[2][4] = {{"Shake iterations limit:", "Shake tolerance:", "", ""}, {"Rattle iterations limit:", "Rattle tolerance:", "FIQA iterations limit:", "FIQA quaternions tolerance:"}}; gchar * md_unit[6] = {"K", "", "", "ps", "katms", ""}; gchar * extra_unit[4] = {"cycle(s)", "", "cycle(s)", ""}; gchar * dt_data[3] = {"Maximum time step:", "Maximum distance allowed:", "Minimum distance allowed:"}; gchar * dt_unit[3] = {"ps", "Å", "Å"}; gchar * md_combo[2][2] = {{"Velocity", "Leapfrog"}, {"Fixed", "Variable"}}; /*! \fn G_MODULE_EXPORT void set_md_param (GtkEntry * res, gpointer data) \brief CONTROL file update MD parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_md_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (i == 14) { if (v >= 1.0 && v <= tmp_proj -> natomes) { tmp_field -> md_opts[i] = v; } } else if (v >= 0.0 && v != tmp_field -> md_opts[i]) { tmp_field -> md_opts[i] = v; } if (i == 2 || i == 9 || i == 11 || i == 14 || i == 15) { update_entry_int (res, (int)tmp_field -> md_opts[i]); } else { update_entry_double (res, tmp_field -> md_opts[i]); } } /*! \fn G_MODULE_EXPORT void show_advance_time_step (GtkButton * but, gpointer data) \brief CONTROL file advanced time step - creating the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_advance_time_step (GtkButton * but, gpointer data) { GtkWidget * dialog = dialogmodal ("Variable time step information", GTK_WINDOW(field_assistant)); GtkWidget * vbox = dialog_get_content_area (dialog); GtkWidget * hbox; GtkWidget * entry; int i, j; i = 6; for (j=0; j<3; j++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(dt_data[j], 250, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_md_param), 100, 10, FALSE, GINT_TO_POINTER(i+j)); update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[i+j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(dt_unit[j], 30, -1, 0.0, 0.5), FALSE, FALSE, 5); } run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn G_MODULE_EXPORT void set_md_combo (GtkComboBox * box, gpointer data) \brief CONTROL file change MD parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_md_combo (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); tmp_field -> md_opts[i] = gtk_combo_box_get_active (box); if (i == 3) widget_set_sensitive (step_button, (int)tmp_field -> md_opts[i]); if (i == 3 && tmp_field -> md_opts[i] == 1.0) show_advance_time_step (NULL, NULL); if (i == 1) { gtk_widget_set_visible (extra_vbox[1], (int)tmp_field -> md_opts[1]); for (j=0 ;j<2; j++) { gtk_label_set_text (GTK_LABEL(extra_lab[2*j]), md_extra[(int)tmp_field -> md_opts[i]][2*j]); gtk_label_set_text (GTK_LABEL(extra_lab[2*j+1]), md_extra[(int)tmp_field -> md_opts[i]][2*j+1]); } } } GtkWidget * impact_but; gchar * imp_dir[3] = {"on x:", "on y:", "on z:"}; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data) \brief CONTROL file particle impact change parameter toggle callback GTK3 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_impact (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_impact (GtkToggleButton * but, gpointer data) \brief CONTROL file particle impact change parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_impact (GtkToggleButton * but, gpointer data) #endif { gboolean i; #ifdef GTK4 i = gtk_check_button_get_active (but); #else i = gtk_toggle_button_get_active (but); #endif tmp_field -> md_opts[13] = (i) ? 1.0 : 0.0; widget_set_sensitive (impact_but, i); } /*! \fn G_MODULE_EXPORT void show_impact_dialog (GtkButton * but, gpointer data) \brief CONTROL file particle impact - creating the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_impact_dialog (GtkButton * but, gpointer data) { GtkWidget * dialog = dialogmodal ("Initiate impact on particle", GTK_WINDOW(field_assistant)); GtkWidget * vbox = dialog_get_content_area (dialog); GtkWidget * hbox, * hhbox; GtkWidget * entry; int i, j; gchar * str; gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); gchar * imp_info[4] = {"Index of the particle to impact: ", "Time step of impact:", "Energy of impact:", "Direction (from center of mass):"}; gchar * imp_unit[2] = {"nth step", "k eV"}; gchar * imp_dir[3] = {"on x:", "on y:", "on z:"}; for (i=0; i<4; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(imp_info[i], 200, -1, 1.0, 0.5), FALSE, FALSE, 5); if (i < 3) { j = (i < 2) ? 5 : 10; entry = create_entry (G_CALLBACK(set_md_param), j*10, j + j/6, FALSE, GINT_TO_POINTER(i+14)); if (i < 2) { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> md_opts[i+14]); } else { update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[i+14]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); if (! i) { str = g_strdup_printf ("in [1-%d]", tmp_proj -> natomes); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 30, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(imp_unit[i-1], 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } } else { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); hhbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 50); for (j=0; j<3; j++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(imp_dir[j], 50, -1, 1.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(j+17)); update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[j+17]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, entry, FALSE, FALSE, 5); } } } run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn GtkWidget * create_md_box () \brief CONTROL file create molecular dynamics parameter widgets */ GtkWidget * create_md_box () { GtkWidget * vbox = create_vbox (BSEP); gtk_widget_set_size_request (vbox, -1, 450); GtkWidget * hbox; GtkWidget * combo; GtkWidget * entry; int i, j, k, l; l = 0; for (i=0; i<3; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); for (j=0; j<2; j++, l++) { k = (j) ? 110 : 150; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(md_data[2*i+j], k, -1, 1.0, 0.5), FALSE, FALSE, 5); if (j) { if (i < 2) { combo = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 0); for (k=0; k<2; k++) { combo_text_append (combo, md_combo[i][k]); } gtk_combo_box_set_active (GTK_COMBO_BOX(combo), 0); gtk_widget_set_size_request (combo, 100, -1); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_md_combo), GINT_TO_POINTER(l)); if (i) { l ++; entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(l)); update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[l]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(md_unit[l-1], 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } } else { step_button = create_button ("Time step details", IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_advance_time_step), NULL); widget_set_sensitive (step_button, (int)tmp_field -> md_opts[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, step_button, FALSE, FALSE, 10); } } else { entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(l)); if (i == 1 && j == 0) { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> md_opts[l]); } else { update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[l]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(md_unit[2*i+j], 60, -1, 0.0, 0.5), FALSE, FALSE, 0); } } } k = (int)tmp_field -> md_opts[1]; l = 9; gchar * extra_info[2] = {"Bond constraint(s) dynamics:", "Rotational motion of rigid body(ies):"}; for (i=0; i<2; i++) { extra_vbox[i] = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, extra_vbox[i], FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, extra_vbox[i], markup_label(extra_info[i], 250, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, extra_vbox[i], hbox, FALSE, FALSE, 0); for (j=0; j<2; j++, l++) { extra_lab[2*i+j] = markup_label(md_extra[k][2*i+j], 150+j*100, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, extra_lab[2*i+j], FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_md_param), 100, 11, FALSE, GINT_TO_POINTER(l)); if (j) { update_entry_double (GTK_ENTRY(entry), tmp_field -> md_opts[l]); } else { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> md_opts[l]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); if (! j) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(extra_unit[2*i+j], 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } } gtk_widget_set_visible (extra_vbox[1], (int)tmp_field -> md_opts[1]); for (i=0 ;i<2; i++) { gtk_label_set_text (GTK_LABEL(extra_lab[2*i]), md_extra[(int)tmp_field -> md_opts[1]][2*i]); gtk_label_set_text (GTK_LABEL(extra_lab[2*i+1]), md_extra[(int)tmp_field -> md_opts[1]][2*i+1]); } hbox = create_hbox (5); add_box_child_end (vbox, hbox, FALSE, FALSE, 0); gboolean val = (tmp_field -> md_opts[13] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button("Initiate impact on particle", 100, -1, val, G_CALLBACK(check_impact), NULL), FALSE, FALSE, 10); impact_but = create_button ("Impact details", IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_impact_dialog), NULL); widget_set_sensitive (impact_but, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, impact_but, FALSE, FALSE, 10); return vbox; } GtkWidget * equi_lab[6]; GtkWidget * equi_entry[3]; GtkWidget * equi_box[9]; gchar * equi_info[8]= {"Equilibrate for the first:", "Scale temperature:", "Cap forces:", "Resample the momenta distribution:", "Minimize system configuration:", "Optimize system configuration from start:", "Perform zero temperature (10 K) optimization", "Include equilibration data in statistics"}; gchar * equi_data[5]= {"Every:", "fmax=", "During:", "Minimize:", "Optimize"}; gchar * equi_unit[3]= {"step(s)", "kBT / Å", "step(s)"}; gchar * equi_min[3]= {"Force", "Energy", "Distance"}; gchar * equi_minu[3]= {"kBT / Å", "", "Å"}; double equi_lim[2][3] = {{1.0, 0.0, 0.000001}, {1000.0, 0.01, 0.1}}; float init_minop[3]={50.0, 0.005, 0.005}; /*! \fn G_MODULE_EXPORT void set_equi_combo (GtkComboBox * box, gpointer data) \brief CONTROL file change equilibration parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_equi_combo (GtkComboBox * box, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); tmp_field -> equi_opts[i] = gtk_combo_box_get_active (box); j = (i == 9) ? 11 : 14; k = (i == 9) ? 0 : 1; tmp_field -> equi_opts[j] = init_minop[(int)tmp_field -> equi_opts[i]]; update_entry_double (GTK_ENTRY(equi_entry[2*k]), tmp_field -> equi_opts[j]); gtk_label_set_text (GTK_LABEL(equi_lab[4*k]), g_strdup_printf ("%s:", equi_min[(int)tmp_field -> equi_opts[i]])); gtk_label_set_text (GTK_LABEL(equi_lab[4*k+1]), g_strdup_printf ("%s", equi_minu[(int)tmp_field -> equi_opts[i]])); gtk_label_set_use_markup (GTK_LABEL(equi_lab[4*k+1]), TRUE); } /*! \fn G_MODULE_EXPORT void set_equi_param (GtkEntry * res, gpointer data) \brief CONTROL file update equilibration parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_equi_param (GtkEntry * res, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (i == 10 || i == 14) { j = (i == 10) ? 9 : 13; if (v >= equi_lim[0][(int)tmp_field -> equi_opts[j]] && v <= equi_lim[1][(int)tmp_field -> equi_opts[j]]) { tmp_field -> equi_opts[i] = v; } else { gchar * str = g_strdup_printf ("Minimization parameter must be in [ %f - %f ]", equi_lim[0][(int)tmp_field -> equi_opts[j]], equi_lim[1][(int)tmp_field -> equi_opts[j]]); show_warning (str, field_assistant); g_free (str); } } else if (v >= 0.0 && v != tmp_field -> equi_opts[i]) { tmp_field -> equi_opts[i] = v; } if (i == 1 || i == 3 || i == 7 || i == 11) { update_entry_int (res, (int)tmp_field -> equi_opts[i]); } else { update_entry_double (res, tmp_field -> equi_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data) \brief CONTROL file change equilibration parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_equi (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_equi (GtkToggleButton * but, gpointer data) \brief CONTROL file change equilibration parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_equi (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j; #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif k = 2*i + 2*(i/5) + i/6 - i/7; tmp_field -> equi_opts[k] = (j) ? 1.0 : 0.0; if (i < 6) widget_set_sensitive (equi_box[i], j); } /*! \fn GtkWidget * create_equi_box () \brief CONTROL file create equilibration parameter widgets */ GtkWidget * create_equi_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox, * hhbox; GtkWidget * entry; GtkWidget * combo; gboolean val; int i, j, k, l, m; hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); val = (tmp_field -> equi_opts[0] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button("Equilibrate", 100, -1, val, G_CALLBACK(check_equi), GINT_TO_POINTER(0)), FALSE, FALSE, 5); equi_box[0] = create_vbox (5); widget_set_sensitive (equi_box[0], val); gtk_box_set_homogeneous (GTK_BOX (equi_box[0]), TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, equi_box[0], FALSE, FALSE, 0); for (i=0; i<8; i++) { hbox = create_hbox (5); j = 2*i + 2*(i/5) - i/7; k = (i != 2) ? 5 : 10; l = j + 1; add_box_child_start (GTK_ORIENTATION_VERTICAL, equi_box[0], hbox, FALSE, FALSE, 0); if (i < 4) { entry = create_entry (G_CALLBACK(set_equi_param), k*10, k + k/6, FALSE, GINT_TO_POINTER(l)); if (i == 2) { update_entry_double (GTK_ENTRY(entry), tmp_field -> equi_opts[l]); } else { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> equi_opts[l]); } } if (i) { val = (tmp_field -> equi_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(equi_info[i], 300, -1, val, G_CALLBACK(check_equi), GINT_TO_POINTER(i)), FALSE, FALSE, 5); if (i == 4 || i == 5) { hhbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, equi_box[0], hhbox, FALSE, FALSE, 0); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, hbox, FALSE, FALSE, 50); } equi_box[i] = create_hbox (5); widget_set_sensitive (equi_box[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, equi_box[i], FALSE, FALSE, 5); if (i < 6) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], markup_label(equi_data[i-1], 100, -1, 0.8, 0.5), FALSE, FALSE, 0); if (i < 4) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], markup_label(equi_unit[i-1], 100, -1, 0.0, 0.5), FALSE, FALSE, 0); } else if (i < 6) { combo = create_combo(); for (m=0; m<3; m++) combo_text_append (combo, equi_min[m]); gtk_combo_box_set_active (GTK_COMBO_BOX(combo), (int)tmp_field -> equi_opts[l]); gtk_widget_set_size_request (combo, 100, -1); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_equi_combo), GINT_TO_POINTER(l)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], combo, FALSE, FALSE, 5); for (m=i-4; m<2; m++, l++) { equi_lab[(i-4)*2+2*m] = markup_label((i == 4 && m) ? equi_data[0] : g_strdup_printf ("%s:", equi_min[(int)tmp_field -> equi_opts[l]]), 75, -1, 0.8, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], equi_lab[(i-4)*2+2*m], FALSE, FALSE, 0); k = (i == 4 && m) ? 5 : 10; equi_entry[i-4+m] = create_entry (G_CALLBACK(set_equi_param), k*10, k + k/6, FALSE, GINT_TO_POINTER(l+1+m/2)); if (i == 4 && m) { update_entry_int (GTK_ENTRY(equi_entry[i-4+m]), (int)tmp_field -> equi_opts[l+1+m/2]); } else { update_entry_double (GTK_ENTRY(equi_entry[i-4+m]), tmp_field -> equi_opts[l+1+m/2]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], equi_entry[i-4+m], FALSE, FALSE, 5); equi_lab[(i-4)*2+2*m+1] = markup_label((i == 4 && m) ? equi_unit[0] : equi_minu[(int)tmp_field -> equi_opts[l]], 50, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, equi_box[i], equi_lab[(i-4)*2+2*m+1], FALSE, FALSE, 0); } } } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(equi_info[i], 250, -1, 0.8, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(equi_unit[i], 100, -1, 0.0, 0.5), FALSE, FALSE, 0); } } return vbox; } gchar * traj_data[4] = {"Defects:", "Displacements:", "History:", "Atom's MSD:"}; gchar * traj_info[4][3] = {{"From step:", "Every:", "Site interstitial cutoff:"}, {"From step:", "Every:", "Qualifying cutoff:"}, {"From step:", "Every:", "Data level:"}, {"From step:", "Every:", NULL}}; gchar * traj_level[3]={"0", "1", "2"}; gchar * out_print[3]={"Radial distribution functions (RDFs):", "Velocity autocorrelation functions (VAFs):", "Z density profile:"}; GtkWidget * out_hbox[11]; GtkWidget * out_entry[3]; /*! \fn G_MODULE_EXPORT void set_out_param (GtkEntry * res, gpointer data) \brief CONTROL file update output information parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_out_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (i == 3 || i == 7 || i == 23) { if (v >= 0.0 && v != tmp_field -> out_opts[i]) { tmp_field -> out_opts[i] = v; } update_entry_double (res, tmp_field -> out_opts[i]); if (i == 23) { update_entry_double (GTK_ENTRY(out_entry[0]), tmp_field -> out_opts[i]); update_entry_double (GTK_ENTRY(out_entry[2]), tmp_field -> out_opts[i]); } } else { if ((int)v != (int)tmp_field -> out_opts[i]) { tmp_field -> out_opts[i] = (int)v; } update_entry_int (res, (int)tmp_field -> out_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data) \brief CONTROL file change output information parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_out (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_out (GtkToggleButton * but, gpointer data) \brief CONTROL file change output information parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_out (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j; #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif if (i < 7) { k = 4*i - i/4 - 2*(i/5) - 2*(i/6); tmp_field -> out_opts[k] = (j) ? 1.0 : 0.0; widget_set_sensitive (out_hbox[i], j); } else { tmp_field -> out_opts[i] = (j) ? 1.0 : 0.0; if (i < 29) { k = (i == 21) ? 7 : (i == 24) ? 8 : 9; widget_set_sensitive (out_hbox[k], j); if (i == 24) widget_set_sensitive (out_hbox[10], j); } } } /*! \fn G_MODULE_EXPORT void set_print_level (GtkComboBox * box, gpointer data) \brief CONTROL file change print level \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_print_level (GtkComboBox * box, gpointer data) { tmp_field -> out_opts[12] = gtk_combo_box_get_active (box); } /*! \fn GtkWidget * create_traj_box () \brief CONTROL file create MD trajectory parameter widgets */ GtkWidget * create_traj_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * combo; GtkWidget * entry; gboolean val; int i, j, k, l; for (i=0; i<4; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); k = (i < 4) ? 4*i : 15; val = (tmp_field -> out_opts[k] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(traj_data[i], 150, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(i)), FALSE, FALSE, 5); out_hbox[i] = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[i], FALSE, FALSE, 0); widget_set_sensitive (out_hbox[i], val); for (j=0; j<3-i/3; j++) { l = (j == 2) ? 150 : 50; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label(traj_info[i][j], l, -1, 1.0, 0.5), FALSE, FALSE, 5); if (i != 2 || j != 2) { l = (j<2) ? 50 : 100; entry = create_entry (G_CALLBACK(set_out_param), l, l/10, FALSE, GINT_TO_POINTER(k+j+1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], entry, FALSE, FALSE, 0); if (j == 2) { update_entry_double (GTK_ENTRY(entry), tmp_field -> out_opts[k+j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[k+j+1]); if (j) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label("step(s)", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } } else { combo = create_combo(); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], combo, FALSE, FALSE, 0); for (l=0; l<3; l++) combo_text_append (combo, traj_level[l]); gtk_combo_box_set_active (GTK_COMBO_BOX(combo), (int)tmp_field -> out_opts[k+j+1]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_print_level), NULL); } } } return vbox; } /*! \fn GtkWidget * create_dump_box () \brief CONTROL file create dump parameter widgets */ GtkWidget * create_dump_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Dump restart information every:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_out_param), 50, 6, FALSE, GINT_TO_POINTER(30)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[30]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("step(s)", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); return vbox; } gchar * out_data[3] = {"Print system data:", "Accumulate statistics data:", "Rolling average stack:"}; gchar * out_info[3] = {"Every:", "Every:", " "}; /*! \fn GtkWidget * create_out_box () \brief CONTROL file create output information widgets */ GtkWidget * create_out_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; gboolean val; int i, j; for (i=4; i<7; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); j = 2*(i-4)+15; val = (tmp_field -> out_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(out_data[i-4], 200, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(i)), FALSE, FALSE, 5); out_hbox[i] = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[i], FALSE, FALSE, 0); widget_set_sensitive (out_hbox[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label(out_info[i-4], 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_out_param), 50, 5, FALSE, GINT_TO_POINTER(j+1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], entry, FALSE, FALSE, 0); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i], markup_label("step(s)", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } return vbox; } /*! \fn GtkWidget * create_overall_box () \brief CONTROL file create overall parameter widgets */ GtkWidget * create_overall_box () { GtkWidget * vbox = create_vbox (5); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); GtkWidget * hbox, * hhbox; GtkWidget * entry; gboolean val; int i, k, l, m, n; i = 6; for (l=0; l<3; l++) { k = 21 + 3*l; hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); val = (tmp_field -> out_opts[k] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(out_print[l], 300, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(k)), FALSE, FALSE, 5); out_hbox[i+l+1] = create_hbox (5); widget_set_sensitive (out_hbox[i+l+1], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[i+l+1], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label("Every:", 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_out_param), 50, 5, FALSE, GINT_TO_POINTER(k+1)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> out_opts[k+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label("step(s)", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label("Bin size:", 100, -1, 1.0, 0.5), FALSE, FALSE, 5); m = (l==1) ? k + 2 : 23; n = (l==1) ? 1 : 2; out_entry[l] = create_entry (G_CALLBACK(set_out_param), n*50, n*5, FALSE, GINT_TO_POINTER(m)); if (l != 1) { update_entry_double (GTK_ENTRY(out_entry[l]), tmp_field -> out_opts[m]); } else { update_entry_int (GTK_ENTRY(out_entry[l]), (int)tmp_field -> out_opts[m]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], out_entry[l], FALSE, FALSE, 0); if (l != 1) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[i+l+1], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } if (l == 1) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); out_hbox[10] = create_hbox (0); hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 0); gtk_widget_set_size_request (hhbox, 330, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, out_hbox[10], FALSE, FALSE, 0); val = (tmp_field -> out_opts[29] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, out_hbox[10], check_button("Ignore time-averaging for the VAFs", 100, -1, val, G_CALLBACK(check_out), GINT_TO_POINTER(29)), FALSE, FALSE, 5); widget_set_sensitive (out_hbox[10], val); } } return vbox; } GtkWidget * ana_box[5]; gchar * ana_info[5]={"All:", "Bonds:", "Angles:", "Dihedrals:", "Inversions:"}; gchar * ana_param[3]={"Every:", "Num. δ", "Cutoff = "}; /*! \fn G_MODULE_EXPORT void set_ana_param (GtkEntry * res, gpointer data) \brief CONTROL file update analysis parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ana_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (v >= 0.0 && v != tmp_field -> ana_opts[i]) { tmp_field -> ana_opts[i] = v; } if (i == 3 || i == 7) { update_entry_double (GTK_ENTRY(res), tmp_field -> ana_opts[i]); } else { update_entry_int (GTK_ENTRY(res), (int)tmp_field -> ana_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data) \brief CONTROL file change analysis parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_ana (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_ana (GtkToggleButton * but, gpointer data) \brief CONTROL file change analysis parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_ana (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j; #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif tmp_field -> ana_opts[i] = (j) ? 1.0 : 0.0; switch (i) { case 14: k = 4; break; case 11: k = 3; break; default: k = i / 4; break; } widget_set_sensitive (ana_box[k], j); } /*! \fn GtkWidget * create_analyze_box () \brief CONTROL file create analysis parameter widgets */ GtkWidget * create_analyze_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox; GtkWidget * entry; gboolean val; gchar * str; int i, j; for (i=0; i<5; i++) { hbox = create_hbox (5); j = (i < 3) ? 4*i: 11 + 3*(i-3); val = (tmp_field -> ana_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(ana_info[i], 100, -1, val, G_CALLBACK(check_ana), GINT_TO_POINTER(j)), FALSE, FALSE, 5); ana_box[i] = create_hbox (5); widget_set_sensitive (ana_box[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ana_box[i], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(ana_param[0], 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_ana_param), 50, 5, FALSE, GINT_TO_POINTER(j+1)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> ana_opts[j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label("step(s)", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); if (i < 2) { str = g_strdup_printf ("%sr in [0 : r]", ana_param[1]); } else if (i == 3) { str = g_strdup_printf ("%s° in [-180 : 180]", ana_param[1]); } else { str = g_strdup_printf ("%s° in [0 : 180]", ana_param[1]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(str, 160, -1, 1.0, 0.5), FALSE, FALSE, 5); g_free (str); entry = create_entry (G_CALLBACK(set_ana_param), 50, 5, FALSE, GINT_TO_POINTER(j+2)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> ana_opts[j+2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], entry, FALSE, FALSE, 0); if (i < 2) { str = g_strdup_printf ("δr"); } else { str = g_strdup_printf ("δ°"); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(str, 50, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); if (i < 2) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label(ana_param[2], 50, -1, 1.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_ana_param), 100, 11, FALSE, GINT_TO_POINTER(j+3)); update_entry_double (GTK_ENTRY(entry), tmp_field -> ana_opts[j+3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ana_box[i], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } } return vbox; } GtkWidget * time_box[2]; GtkWidget * io_box[2]; GtkWidget * io_pre; GtkWidget * misc_box; gchar * time_info[2]={"Set job time:", "Set job closure time:"}; gchar * tps_info[2]={"run time:", "closure time:"}; gchar * io_rw_m[4] = {"MPI I/O", "FORTRAN I/O", "Traditional master I/O", "netCDF I/O"}; gchar * io_info[2] = {"General Input/Output (I/O) read interface:", "General Input/Output (I/O) write interface:"}; gchar * io_para[4] = {"Reader count:", "Batch size:", "Buffer size:", "// error check"}; gchar * io_pres[2] = {"Float - 32 bit", "Double - 64 bit"}; gchar * io_type[2] = {"Sorted", "Unsorted"}; GtkWidget * io_hp[2][4]; GtkWidget * check_e[2]; /*! \fn G_MODULE_EXPORT void set_io_param (GtkEntry * res, gpointer data) \brief CONTROL file update I/O parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_io_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (i < 2) { if (v >= 0.0 && v != tmp_field -> io_opts[2*i+1]) { tmp_field -> io_opts[2*i+1] = v; } update_entry_double (GTK_ENTRY(res), tmp_field -> io_opts[2*i+1]); } else { if (i == 7 || i == 15) { if (v >= 1.0 && v <= 100000000.0) { if (v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } } else { show_warning ("The batch size or max. number of particles by batch\n" "must be in [1 - 10 000 000]", field_assistant); } } else if (i == 8 || i == 16) { if (v >= 100.0 && v <= 100000.0) { if (v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } } else { show_warning ("The buffer size or max. number of ASCII line records by batch\n" "must be in [100 - 100 000]", field_assistant); } } else if (i == 19 || i == 20 || i == 21) { if (v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } } else if (v > 0.0 && v != tmp_field -> io_opts[i]) { tmp_field -> io_opts[i] = v; } update_entry_int (GTK_ENTRY(res), (int)tmp_field -> io_opts[i]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data) \brief CONTROL file change I/O parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_io (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_io (GtkToggleButton * but, gpointer data) \brief CONTROL file change I/O parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_io (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j; #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif if (i < 2) { tmp_field -> io_opts[2*i] = (j) ? 1.0 : 0.0; widget_set_sensitive (time_box[i], j); } else { tmp_field -> io_opts[i] = (j) ? 1.0 : 0.0; if (i < 18) { k = (i == 4) ? 0 : 1; widget_set_sensitive (io_box[k], j); } else if (i == 18) { widget_set_sensitive (misc_box, j); } } } /*! \fn G_MODULE_EXPORT void set_io_method (GtkComboBox * box, gpointer data) \brief CONTROL file change I/O method \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_io_method (GtkComboBox * box, gpointer data) { int i, j, k; gboolean l; i = GPOINTER_TO_INT(data); j = gtk_combo_box_get_active (box); tmp_field -> io_opts[i] = (double)j; if (i < 12) { k = (i == 5) ? 0 : 1; l = (j == 2) ? FALSE : TRUE; widget_set_sensitive (io_hp[k][0], l); widget_set_sensitive (io_hp[k][2], l); widget_set_sensitive (check_e[k], l); if (i == 11) { l = (j == 3) ? TRUE : FALSE; widget_set_sensitive (io_pre, l); } } } /*! \fn GtkWidget * create_job_box () \brief CONTROL file create job parameter vidgets */ GtkWidget * create_job_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * entry; gboolean val; int i; for (i=0; i<2; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); val = (tmp_field -> io_opts[2*i] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(time_info[i], 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(i)), FALSE, FALSE, 5); time_box[i] = create_hbox (5); widget_set_sensitive (time_box[i], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, time_box[i], FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_io_param), 100, 11, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> io_opts[i*2+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, time_box[i], entry, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, time_box[i], markup_label("s", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } return vbox; } /*! \fn GtkWidget * create_io_box () \brief CONTROL file create I/O parameter vidgets */ GtkWidget * create_io_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * combo; GtkWidget * entry; gboolean val; int i, j, k; gboolean l, m; k = 4; for (i=0; i<2; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); val = (tmp_field -> io_opts[k] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(io_info[i], 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(k)), FALSE, FALSE, 5); io_box[i] = create_vbox (5); widget_set_sensitive (io_box[i], val); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, io_box[i], FALSE, FALSE, 0); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, io_box[i], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Method:", 100, -1, 1.0, 0.5), FALSE, FALSE, 5); combo = create_combo(); for (j=0; j<4; j++) { combo_text_append(combo, io_rw_m[j]); } k ++; gtk_combo_box_set_active (GTK_COMBO_BOX(combo), (int)tmp_field -> io_opts[k]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_io_method), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 5); l = tmp_field -> io_opts[k] == 2.0 ? FALSE : TRUE; m = tmp_field -> io_opts[k] == 3.0 ? TRUE : FALSE; if (i) { io_pre = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, io_pre, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_pre, markup_label("Real precision:", 150, -1, 1.0, 0.5), FALSE, FALSE, 5); combo = create_combo(); for (j=0; j<2; j++) combo_text_append(combo, io_pres[j]); k ++; gtk_combo_box_set_active (GTK_COMBO_BOX(combo), (int)tmp_field -> io_opts[k]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_io_method), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_pre, combo, FALSE, FALSE, 5); widget_set_sensitive (io_pre, m); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Type:", 50, -1, 1.0, 0.5), FALSE, FALSE, 5); combo = create_combo(); for (j=0; j<2; j++) combo_text_append(combo, io_type[j]); k ++; gtk_combo_box_set_active (GTK_COMBO_BOX(combo), (int)tmp_field -> io_opts[k]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_io_method), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 5); } hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, io_box[i], hbox, FALSE, FALSE, 0); for (j=0; j<3; j++) { io_hp[i][j] = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, io_hp[i][j], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_hp[i][j], markup_label(io_para[j], 100, -1, 1.0, 0.5), FALSE, FALSE, 5); k++; entry = create_entry (G_CALLBACK(set_io_param), 70, 8, FALSE, GINT_TO_POINTER(k)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> io_opts[k]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, io_hp[i][j], entry, FALSE, FALSE, 5); if (j == 1) widget_set_sensitive (io_hp[i][j], l); } k++; check_e[i] = check_button(io_para[j], 50, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(k)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_e[i], FALSE, FALSE, 20); widget_set_sensitive (check_e[i], l); k ++; } return vbox; } /*! \fn GtkWidget * create_misc_box () \brief CONTROL file create miscalleanous parameter vidgets */ GtkWidget * create_misc_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * entry; gchar * str; gboolean val; int i; hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); val = (tmp_field -> io_opts[18] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button("Random number generator seeds:", 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(18)), FALSE, FALSE, 5); misc_box = create_hbox (5); widget_set_sensitive (misc_box, val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, misc_box, FALSE, FALSE, 0); for (i=19; i<22; i++) { str = g_strdup_printf ("n%d", i-18); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, misc_box, markup_label(str, 50, -1, 1.0, 0.5), FALSE, FALSE, 5); g_free (str); entry = create_entry (G_CALLBACK(set_io_param), 70, 10, FALSE, GINT_TO_POINTER(i)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> io_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, misc_box, entry, FALSE, FALSE, 5); } hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); val = (tmp_field -> io_opts[22] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button("Limits to 2 the number of processors in z direction for slab simulations", 200, -1, val, G_CALLBACK(check_io), GINT_TO_POINTER(22)), FALSE, FALSE, 5); return vbox; } GtkWidget * elec_box[4]; GtkWidget * pres_spin; gchar * eval_m[10] = {"Direct Coulomb sum", "Distance dependent dielectric Coulomb sum", "Ewald sum (auto)", "Ewald sum", "Reaction field electrostatics", "Reaction field with Fennel damping", "Reaction field with Fennel damping (auto)", "Force-shifted Coulomb sum", "Force-shifted Coulomb sum with Fennel damping", "Force-shifted Coulomb sum with Fennel damping (auto)"}; /*! \fn G_MODULE_EXPORT void set_elec_param (GtkEntry * res, gpointer data) \brief CONTROL file update electrostatic interactions parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_elec_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (i == 1) { if (v > 0.0 && v != tmp_field -> elec_opts[i]) { tmp_field -> elec_opts[i] = v; } else if (v < 0.0) { show_warning ("Cutoff must be > 0.0 Å", field_assistant); } } else if (i == 3) { if (v > 0.0 && v != tmp_field -> elec_opts[i]) { if (v >= min(0.05, 0.5*tmp_field -> elec_opts[1]/100.0)) { tmp_field -> elec_opts[i] = v; } else { show_warning ("Padding must be ≥ min(0.05, 0.5%rcut) Å", field_assistant); } } else if (v < 0.0) { show_warning ("Padding must be > 0.0 Å", field_assistant); } } else { if (i != 6 && (v >= 0.0 && v != tmp_field -> elec_opts[i])) { tmp_field -> elec_opts[i] = v; } else if (i == 6) { if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 6.0 || tmp_field -> elec_opts[5] == 9.0) { int j = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(pres_spin)); double w = v * pow (10, j); if ((w >= 1e-20 && w <= 0.5) && w != tmp_field -> elec_opts[i]) { tmp_field -> elec_opts[i] = w; w = v; } else if (w < 1e-20 || w > 0.5) { show_warning ("Precision must be in [10-20 - 0.5]", field_assistant); w = tmp_field -> elec_opts[i] / pow (10, j); } } else if (v >= 0.0 && v != tmp_field -> elec_opts[i]) { tmp_field -> elec_opts[i] = v; } } } if (i == 10) { if (tmp_field -> elec_opts[i] == 0.0) tmp_field -> elec_opts[i] = 1.0; if (tmp_field -> elec_opts[i] > 10.0) tmp_field -> elec_opts[i] = 4.0; update_entry_int (GTK_ENTRY(res), (int)tmp_field -> elec_opts[i]); } else if (i == 7 || i == 8 || i == 9) { update_entry_int (GTK_ENTRY(res), (int)tmp_field -> elec_opts[i]); } else { if (i == 6) { update_entry_double (GTK_ENTRY(res), v); } else { update_entry_double (GTK_ENTRY(res), tmp_field -> elec_opts[i]); } } } /*! \fn G_MODULE_EXPORT void adjust_precision (GtkSpinButton * res, gpointer data) \brief CONTROL file update electrostatic interactions precision spin callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void adjust_precision (GtkSpinButton * res, gpointer data) { int powa = gtk_spin_button_get_value_as_int(res); double v = tmp_field -> elec_opts[6]; while (v < 0.1) { v = v*10; } v = v*10; tmp_field -> elec_opts[6] = v * pow(10, powa); } /*! \fn GtkWidget * create_elec_param_box () \brief CONTROL file create electrostatic interactions parameter box */ GtkWidget * create_elec_param_box () { GtkWidget * vbox, * vvbox; GtkWidget * hbox, * hhbox; GtkWidget * entry; vvbox = create_hbox (5); vbox = create_vbox (5); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, vvbox, vbox, FALSE, FALSE, 50); gchar * dir[3] = {"x:", "y:", "z:"}; if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 6.0 || tmp_field -> elec_opts[5] == 9.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Precision:", 180, -1, 0.0, 0.5), FALSE, FALSE, 0); // tmp_field -> elec_opts[6] = 1e-20; entry = create_entry (G_CALLBACK(set_elec_param), 100, 11, FALSE, GINT_TO_POINTER(6)); double v = tmp_field -> elec_opts[6]; int i = -1; while (v < 0.1) { v = v*10; i --; } update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[6] / pow(10,i)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" x 10-", 5, -1, 0.0, 0.5), FALSE, FALSE, 0); pres_spin = spin_button (G_CALLBACK(adjust_precision), i, -20, -1, 1, 0, 15, NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, pres_spin, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("in [10-20 - 0.5]", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } else if (tmp_field -> elec_opts[5] == 3.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Ewald convergence parameter:", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); // tmp_field -> elec_opts[6] = 1.0; entry = create_entry (G_CALLBACK(set_elec_param), 100, 11, FALSE, GINT_TO_POINTER(6)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[6]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å-1", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Maximum k vector index in directions:", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); int i; for (i=0; i<3; i++) { hhbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(dir[i], 10, -1, 0.0, 0.5), FALSE, FALSE, 0); // tmp_field -> elec_opts[7+i] = 1.0; entry = create_entry (G_CALLBACK(set_elec_param), 50, 5, FALSE, GINT_TO_POINTER(7+i)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> elec_opts[7+i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 5); } } else if (tmp_field -> elec_opts[5] == 5.0 || tmp_field -> elec_opts[5] == 8.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Fennell damping parameter (α):", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_elec_param), 100, 11, FALSE, GINT_TO_POINTER(6)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[6]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å-1", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 3.0) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Evaluate k-space contribution to the Ewald sum every:", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_elec_param), 50, 5, FALSE, GINT_TO_POINTER(10)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> elec_opts[10]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("step(s)", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } return vvbox; } /*! \fn G_MODULE_EXPORT void set_elec_eval (GtkComboBox * box, gpointer data) \brief CONTROL file change electrostatics evaluation method \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_elec_eval (GtkComboBox * box, gpointer data) { tmp_field -> elec_opts[5] = gtk_combo_box_get_active (box); elec_box[3] = destroy_this_widget (elec_box[3]); elec_box[3] = create_elec_param_box (); show_the_widgets (elec_box[3]); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[2], elec_box[3], FALSE, FALSE, 10); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data) \brief change CONTROL file electrostatics option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_elec (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_elec (GtkToggleButton * but, gpointer data) \brief change CONTROL file electrostatics option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_elec (GtkToggleButton * but, gpointer data) #endif { int i = GPOINTER_TO_INT(data); gboolean j; #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif tmp_field -> elec_opts[i] = (j) ? 1.0 : 0.0; if (! i) widget_set_sensitive (elec_box[j], j); if (i == 2) widget_set_sensitive (elec_box[1], j); } /*! \fn GtkWidget * create_electro_box () \brief CONTROL file create electrostatic interactions parameter vidgets */ GtkWidget * create_electro_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; gboolean val = (tmp_field -> elec_opts[0] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button("Evaluate electrostatics interactions", -1, -1, val, G_CALLBACK(check_elec), GINT_TO_POINTER(0)), FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); elec_box[0] = create_vbox(5); widget_set_sensitive (elec_box[0], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, elec_box[0], FALSE, FALSE, 50); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Long range interaction cutoff [rcut]:", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * entry = create_entry (G_CALLBACK(set_elec_param), 100, 10, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); val = (tmp_field -> elec_opts[2] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button("Add padding to rcut:", 150, -1, val, G_CALLBACK(check_elec), GINT_TO_POINTER(2)), FALSE, FALSE, 0); elec_box[1] = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, elec_box[1], FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_elec_param), 100, 10, FALSE, GINT_TO_POINTER(3)); update_entry_double (GTK_ENTRY(entry), tmp_field -> elec_opts[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, elec_box[1], entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, elec_box[1], markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); widget_set_sensitive (elec_box[1], val); val = (tmp_field -> elec_opts[4] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], check_button("Use extended coulombic exclusion", -1, -1, val, G_CALLBACK(check_elec), GINT_TO_POINTER(4)), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Evaluation method:", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); int i; for (i=0; i<10; i++) { combo_text_append(combo, eval_m[i]); } gtk_combo_box_set_active (GTK_COMBO_BOX(combo), (int)tmp_field -> elec_opts[5]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_elec_eval), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 10); elec_box[2] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[0], elec_box[2], FALSE, FALSE, 0); elec_box[3] = create_elec_param_box (); add_box_child_start (GTK_ORIENTATION_VERTICAL, elec_box[2], elec_box[3], FALSE, FALSE, 10); return vbox; } GtkWidget * vdw_box[2]; gchar * eval_vdw[6] = {"Lorentz-Berthelot", "Fender-Halsey", "Hogervorst", "Halgren HHG", "Tang-Toennies", "Functional"}; /*! \fn G_MODULE_EXPORT void set_vdw_param (GtkEntry * res, gpointer data) \brief CONTROL file udpate VdW parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_vdw_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (i == 1) { if (v > 0.0 && v != tmp_field -> vdw_opts[i]) { tmp_field -> vdw_opts[i] = v; } else if (v < 0.0) { show_warning ("Cutoff must be > 0.0 Å", field_assistant); } } update_entry_double (GTK_ENTRY(res), tmp_field -> vdw_opts[i]); } /*! \fn G_MODULE_EXPORT void set_vdw_mix (GtkComboBox * box, gpointer data) \brief CONTROL file change VdW mixing rule \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_vdw_mix (GtkComboBox * box, gpointer data) { tmp_field -> vdw_opts[5] = gtk_combo_box_get_active (box); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data) \brief change CONTROL file VdW option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_vdw (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_vdw (GtkToggleButton * but, gpointer data) \brief change CONTROL file VdW option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_vdw (GtkToggleButton * but, gpointer data) #endif { int i, j; j = GPOINTER_TO_INT(data); #ifdef GTK4 i = gtk_check_button_get_active (but); #else i = gtk_toggle_button_get_active (but); #endif tmp_field -> vdw_opts[j] = (double)i; if (j == 0) widget_set_sensitive (vdw_box[0], i); if (j == 4) widget_set_sensitive (vdw_box[1], i); } /*! \fn GtkWidget * create_vdws_box () \brief CONTROL file create VdW parameter vidgets */ GtkWidget * create_vdws_box () { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; gboolean val = (tmp_field -> vdw_opts[0] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button("Evaluate Van der Waals interactions", -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(0)), FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); vdw_box[0] = create_vbox(5); gtk_box_set_homogeneous (GTK_BOX (vdw_box[0]), TRUE); widget_set_sensitive (vdw_box[0], val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vdw_box[0], FALSE, FALSE, 50); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Short range interaction cutoff:", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * entry = create_entry (G_CALLBACK(set_vdw_param), 100, 10, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), tmp_field -> vdw_opts[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å", 50, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button("Enforce direct calculation of van der Waals interactions", -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(2)), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button("Apply force-shifting (contributions smoothly fall to zero near rcut)", -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(3)), FALSE, FALSE, 5); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button("Apply mixing rule (when needed and if possible generate cross species interactions)", -1, -1, val, G_CALLBACK(check_vdw), GINT_TO_POINTER(4)), FALSE, FALSE, 5); vdw_box[1] = create_vbox(5); val = (tmp_field -> vdw_opts[4] == 1.0) ? TRUE : FALSE; widget_set_sensitive (vdw_box[1], val); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[0], vdw_box[1], FALSE, FALSE, 0); hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vdw_box[1], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Mixing rule:", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * combo = create_combo(); int i; for (i=0; i<6; i++) { combo_text_append(combo, eval_vdw[i]); } gtk_combo_box_set_active (GTK_COMBO_BOX(combo), (int)tmp_field -> vdw_opts[5]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_vdw_mix), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 10); return vbox; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data) \brief change CONTROL file metal interactions toggle callback GTK3 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_met (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_met (GtkToggleButton * but, gpointer data) \brief change CONTROL file metal interactions toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_met (GtkToggleButton * but, gpointer data) #endif { int i, j; j = GPOINTER_TO_INT(data); #ifdef GTK4 i = gtk_check_button_get_active (but); #else i = gtk_toggle_button_get_active (but); #endif tmp_field -> met_opts[j] = (double)i; } /*! \fn GtkWidget * create_metal_box () \brief create CONTROL file metal interaction widgets */ GtkWidget * create_metal_box () { GtkWidget * vbox = create_vbox (BSEP); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); GtkWidget * hbox; gboolean val = (tmp_field -> met_opts[0] == 1.0) ? TRUE : FALSE; hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button("Enforce direct calculation of metal interactions by explicit potentials, does not work with *EAM* potentials", -1, 25, val, G_CALLBACK(check_met), GINT_TO_POINTER(0)), FALSE, FALSE, 5); val = (tmp_field -> met_opts[1] == 1.0) ? TRUE : FALSE; hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button("Switch the default embedding functions, F, from F(ρ) to F(√ρ)", -1, 25, val, G_CALLBACK(check_met), GINT_TO_POINTER(1)), FALSE, FALSE, 5); return vbox; } /*! \fn G_MODULE_EXPORT void set_sys_param (GtkEntry * res, gpointer data) \brief update CONTROL file system option parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sys_param (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); if (i == 9) { if (v >= 1.0 && v != tmp_field -> sys_opts[i]) { tmp_field -> sys_opts[i] = v; } else if (v < 1.0) { show_warning ("Subcelling threshold density must be ≥ 1.0", field_assistant); } } else if (v >= 0.0 && v != tmp_field -> sys_opts[i]) { tmp_field -> sys_opts[i] = v; } if (i > 10) { update_entry_int (GTK_ENTRY(res), (int)tmp_field -> sys_opts[i]); } else { update_entry_double (GTK_ENTRY(res), tmp_field -> sys_opts[i]); } } GtkWidget * sys_box[4]; gchar * sys_opts[10] = {"Relative dielectric constant εr", "Allowed local variation of system density:", "Ignore the particle indices in CONFIG file", "Ignore strict checks, hide warnings and assume safe simulation parameters", "Skip detailed topology reporting during read of FIELD file in output", "Ignore center of mass removal during the calculation", "Set tolerance for relaxed shell model:", "Set the subcelling threshold density of particles per link cell:", "Create an expanded version of the current model:", "Restart calculation:"}; /*! \fn G_MODULE_EXPORT void set_sys_restart (GtkComboBox * box, gpointer data) \brief change CONTROL file system option \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sys_restart (GtkComboBox * box, gpointer data) { tmp_field -> sys_opts[15] = gtk_combo_box_get_active (box); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data) \brief change CONTROL file system option toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_sys (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void check_sys (GtkToggleButton * but, gpointer data) \brief change CONTROL file system option toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void check_sys (GtkToggleButton * but, gpointer data) #endif { int i, k; i = GPOINTER_TO_INT(data); gboolean j; #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif tmp_field -> sys_opts[i] = (j) ? 1.0 : 0.0; if (i > 5) { k = i - 6; if (i == 14) k = 3; widget_set_sensitive (sys_box[k], j); } } /*! \fn GtkWidget * create_sys_box () \brief prepare the DL-POLY CONTROL file system options widgets */ GtkWidget * create_sys_box () { GtkWidget * vbox; GtkWidget * hbox, * hhbox; GtkWidget * entry; gboolean val; hhbox = create_hbox (5); vbox = create_vbox (5); gtk_box_set_homogeneous (GTK_BOX (vbox), TRUE); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, vbox, FALSE, FALSE, 10); int i, j, k; for (i=0; i<9; i++) { hbox = create_hbox(5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); if (i < 2) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(sys_opts[i], 300, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(set_sys_param), 100, 10, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), tmp_field -> sys_opts[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); if (i) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("%", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { j = (i < 7) ? i : (i == 7) ? 8 : 10; val = (tmp_field -> sys_opts[j] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(sys_opts[i], -1, 25, val, G_CALLBACK(check_sys), GINT_TO_POINTER(i)), FALSE, FALSE, 5); if (i > 5) { sys_box[i-6] = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sys_box[i-6], FALSE, FALSE, 0); widget_set_sensitive (sys_box[i-6], val); if (i < 8) { entry = create_entry (G_CALLBACK(set_sys_param), 100, 10, FALSE, GINT_TO_POINTER(j+1)); update_entry_double (GTK_ENTRY(entry), tmp_field -> sys_opts[j+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], entry, FALSE, FALSE, 10); if (i == 6) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], markup_label("D Å ps-2", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { for (k=0; k<3; k++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], markup_label(imp_dir[k], 50, -1, 1.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_sys_param), 50, 5, FALSE, GINT_TO_POINTER(j+k+1)); update_entry_int (GTK_ENTRY(entry), (int)tmp_field -> sys_opts[j+k+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[i-6], entry, FALSE, FALSE, 5); } } } } } return hhbox; } /*! \fn GtkWidget * create_restart_box () \brief prepare the DL-POLY CONTROL file restart widgets */ GtkWidget * create_restart_box () { GtkWidget * vbox = create_vbox (5); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); gboolean val = (tmp_field -> sys_opts[14] == 1.0) ? TRUE : FALSE; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button(sys_opts[9], -1, 25, val, G_CALLBACK(check_sys), GINT_TO_POINTER(14)), FALSE, FALSE, 5); sys_box[3] = create_hbox(5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sys_box[3], FALSE, FALSE, 0); widget_set_sensitive (sys_box[3], val); gchar * rtype[3]={"Continue current simulation", "Start new simulation from older run without temperature reset", "Start new simulation from older run with temperature reset"}; GtkWidget * combo = create_combo(); int i; for (i=0; i<3; i++) combo_text_append(combo, rtype[i]); gtk_combo_box_set_active (GTK_COMBO_BOX(combo), (int)tmp_field -> sys_opts[15]); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_sys_restart), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, sys_box[3], combo, FALSE, FALSE, 20); return vbox; } /*! \fn GtkWidget * vbox_control (int f) \brief crerate DL-POLY option widgets \param f the page number in the CONTROL file section of the DL-POLY input file(s) creation assistant */ GtkWidget * vbox_control (int f) { GtkWidget * vbox; vbox = create_vbox (5); switch (f) { case 0: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Global options:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_sys_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Restart options:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_restart_box(), FALSE, FALSE, 0); break; case 1: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Intra-molecular probability denisty function (PDF) analysis:", 350, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_analyze_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Overall analysis:", 250, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_overall_box(), FALSE, FALSE, 0); break; case 2: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Van der Waals (Non-bonded short range):", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_vdws_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Electrostatics (Non-bonded long range):", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_electro_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Metallic interactions:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_metal_box(), FALSE, FALSE, 0); break; case 3: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Equilibration:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_equi_box(), FALSE, FALSE, 0); break; case 4: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Thermodynamics:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_ensemble_box(), FALSE, FALSE, 0); break; case 5: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Molecular dynamics:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_md_box(), FALSE, FALSE, 0); break; case 6: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Output information:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_out_box(), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Trajectory file(s):", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_traj_box(), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Restart file:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_dump_box(), FALSE, FALSE, 10); break; case 7: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Job options:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_job_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("I/O options:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_io_box(), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Other options:", 250, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_misc_box(), FALSE, FALSE, 0); break; default: break; } return vbox; } /* 0: System options: 0 = Epsilon 1 = Density variation 2 = no index 3 = no strict 4 = no topology 5 = no vafar 6 = no vom 7 = Set tolerance for rsm ... 8 = ... rsm tolerance 9 = Set subscelling threshold ... 10 = ... subscelling threshold 11 = Create expanded system ... 12 = ... x ... 13 = ... y ... 14 = ... z 15 = Restart calc ... 16 = ... restart type 1: Calc. options: 0 = All PDFs 1 = All: every 2 = All: ndelta 3 = All: cutoff 4 = Bonds PDFs 5 = Bonds: every 6 = Bonds: ndelta 7 = Bonds: cutoff 8 = Angles PDFs 9 = Angles: every 10 = Angles: ndelta 11 = Dihedrals PDFs 12 = Dihedrals: every 13 = Dihedrals: ndelta 14 = Inversions PDFs 15 = Inversions: every 16 = Inversions: ndelta 17 = print pdfs 18 = rdf 19 = every n steps 20 = bin size 21 = print velocity autocorrelation functions 22 = every n steps 23 = print z-dens 24 = every n steps 25 = Job time 26 = Job closure 2: Electro. stat options: 0 = Evaluate (or not) electrostatics 1 = Electrostatics evaluation method 2 = Param 1 3 = Param 2 4 = Param 3 5 = Param 4 3: Equil. options: 0 = Equil 1 = Equi for n steps 2 = Scale temp 3 = Scale temp: every 4 = cap forces 5 = cap: force max 6 = Resample 7 = Resample: during 8 = Minimize 9 = Minimize: string 10 = Minimize: target 11 = Minimize: every 12 = Optimize 13 = Optimize: string 14 = Optimize: target 15 = zero temp MD 16 = collect 4: Thermo options: 0 = Ensemble 1 = Thermostat 2 to 7 = Thermostat options 5: MD options 0 = target temp 1 = integrator 2 = MD steps 3 = Time step type 4 = Time step 5 = Max time step 6 = Max dist. per time step 7 = Min dist. per time step 8 = Target pressure 9 = shake limit 10 = shake tol 11 = FIQA lim 12 = FIQA tol 17 = Initiate impact 18 = particle index 19 = MD step 20 = impact energy 21 = impact x direct 22 = impact y direct 23 = impact z direct 6: Output options: 0 = Write defects trajectory ... 1 = ... start time to dump defects 2 = ... time step to dump defects 3 = ... site interstitial cutoff 4 = write displacements trajectory ... 5 = ... start time to dump displacements 6 = ... time step to dump displacements 7 = ... displacement qualifying cutoff 8 = Write history/trajectory file ... 9 = ... start time to dump trajectory 10 = ... time step to dump trajectory 11 = ... data level [0=coord, 1=0+velo, 2=1+forces] 12 = Write MSDTMP file ... 13 = ... start time to dump trajectory 14 = ... time step to dump trajectory 15 = print data ... 16 = ... every n steps 17 = accumulate stat ... 18 = ... every n step(s) 19 = set rolling avertage stack ... 20 = ... to n time step(s) 21 = Write RDFs ... 22 = ... every n step(s) 23 = ... bin size * 24 = Write VAFs ... 25 = ... every n step(s) 26 = ... bin size 27 = Write z-dens ... 28 = ... every n step(s) 29 = Ignore time average for VAFs 30 = Dump restart every n step(s) */ Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_copy.c000066400000000000000000000473311457665371200206150ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_copy.c * @short Functions to copy force field and related data structures * @author Sébastien Le Roux */ /* * This file: 'dlp_copy.c' * * Contains: * - The functions to copy force field and related data structures * * List of functions: gboolean check_this_other_prop (int oid, int nat, field_prop * other); void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr); void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody); field_atom* duplicate_field_atom (field_atom* old_fat); field_shell * duplicate_field_shell (field_shell * old_shell); field_constraint * duplicate_field_constraint (field_constraint * old_cons); field_pmf * duplicate_field_pmf (field_pmf * old_pmf); field_rigid * duplicate_field_rigid (field_rigid * old_rig); field_tethered * duplicate_field_tethered (field_tethered * old_tet); field_prop * duplicate_field_prop (field_prop * old_prop, int ti); field_struct * duplicate_field_struct (field_struct * old_fstr); field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init); field_nth_body * duplicate_field_nth_body (field_nth_body * old_fbody); field_external * duplicate_field_external (field_external * old_fext); field_molecule * duplicate_field_molecule (field_molecule * old_fmol); classical_field * duplicate_classical_field (classical_field * init_field); */ #include "dlp_field.h" #include "global.h" extern void print_all_field_struct (field_molecule * mol, int str); /*! \fn field_atom* duplicate_field_atom (field_atom* old_fat) \brief create copy of a field atom data structure \param old_fat the field atom to duplicate */ field_atom* duplicate_field_atom (field_atom* old_fat) { field_atom* new_fat; new_fat = g_malloc0 (sizeof*new_fat); new_fat -> id = old_fat -> id; new_fat -> fid = old_fat -> fid; new_fat -> afid = old_fat -> afid; new_fat -> name = g_strdup_printf ("%s", old_fat -> name); new_fat -> num = old_fat -> num; new_fat -> sp = old_fat -> sp; new_fat -> type = old_fat -> type; new_fat -> mass = old_fat -> mass; new_fat -> charge = old_fat -> charge; new_fat -> frozen = old_fat -> frozen; new_fat -> show = FALSE; new_fat -> list = duplicate_int (old_fat -> num, old_fat -> list); /* g_debug ("Debug copy atom: %d", new_fat -> id); int i; for (i=0; i num; i++) g_debug ("old_fat -> list[%d]= %d", i, old_fat -> list[i]); for (i=0; i num; i++) g_debug ("new_fat -> list[%d]= %d", i, new_fat -> list[i]); */ new_fat -> list_id = duplicate_int (old_fat -> num, old_fat -> list_id); new_fat -> frozen_id = duplicate_bool (old_fat -> num, old_fat -> frozen_id); new_fat -> prev = NULL; new_fat -> next = NULL; return new_fat; } /*! \fn field_shell * duplicate_field_shell (field_shell * old_shell) \brief create copy of a field shell data structure \param old_shell the field shell to duplicate */ field_shell * duplicate_field_shell (field_shell * old_shell) { field_shell * new_shell; new_shell = g_malloc0 (sizeof*new_shell); new_shell -> id = old_shell -> id; new_shell -> ia[0] = old_shell -> ia[0]; new_shell -> ia[1] = old_shell -> ia[1]; new_shell -> m = old_shell -> m; new_shell -> z = old_shell -> z; new_shell -> k2 = old_shell -> k2; new_shell -> k4 = old_shell -> k4; new_shell -> vdw = old_shell -> vdw; new_shell -> use = old_shell -> use; new_shell -> show = old_shell -> show; new_shell -> prev = NULL; new_shell -> next = NULL; return new_shell; } /*! \fn field_constraint * duplicate_field_constraint (field_constraint * old_cons) \brief create copy of a field constraint data structure \param old_cons the field constraint to duplicate */ field_constraint * duplicate_field_constraint (field_constraint * old_cons) { field_constraint * new_cons; new_cons = g_malloc0 (sizeof*new_cons); new_cons -> id = old_cons -> id; new_cons -> ia[0] = old_cons -> ia[0]; new_cons -> ia[1] = old_cons -> ia[1]; new_cons -> length = old_cons -> length; new_cons -> use = old_cons -> use; new_cons -> show = old_cons -> show; new_cons -> prev = NULL; new_cons -> next = NULL; return new_cons; } /*! \fn field_pmf * duplicate_field_pmf (field_pmf * old_pmf) \brief create copy of a field PMF data structure \param old_pmf the field PMF to duplicate */ field_pmf * duplicate_field_pmf (field_pmf * old_pmf) { field_pmf * new_pmf; new_pmf = g_malloc0 (sizeof*new_pmf); new_pmf -> id = old_pmf -> id; new_pmf -> length = old_pmf -> length; int i; for (i=0; i<2; i++) { new_pmf -> num[i] = old_pmf -> num[i]; new_pmf -> list[i] = duplicate_int (old_pmf -> num[i], old_pmf -> list[i]); new_pmf -> weight[i] = duplicate_float (old_pmf -> num[i], old_pmf -> weight[i]); } new_pmf -> show = old_pmf -> show; new_pmf -> use = old_pmf -> use; new_pmf -> next = NULL; new_pmf -> prev = NULL; return new_pmf; } /*! \fn field_rigid * duplicate_field_rigid (field_rigid * old_rig) \brief create copy of a field rigid data structure \param old_rig the field rigid to duplicate */ field_rigid * duplicate_field_rigid (field_rigid * old_rig) { field_rigid * new_rig; new_rig = g_malloc0 (sizeof*new_rig); new_rig -> id = old_rig -> id; new_rig -> num = old_rig -> num; new_rig -> list = duplicate_int (old_rig -> num, old_rig -> list); new_rig -> show = old_rig -> show; new_rig -> use = old_rig -> use; new_rig -> next = NULL; new_rig -> prev = NULL; return new_rig; } /*! \fn field_tethered * duplicate_field_tethered (field_tethered * old_tet) \brief create copy of a field tethered data structure \param old_tet the field tethered to duplicate */ field_tethered * duplicate_field_tethered (field_tethered * old_tet) { field_tethered * new_tet; new_tet = g_malloc0 (sizeof*new_tet); new_tet -> id = old_tet -> id; new_tet -> num = old_tet -> num; new_tet -> show = old_tet -> show; new_tet -> use = old_tet -> use; new_tet -> next = NULL; new_tet -> prev = NULL; return new_tet; } /*! \fn field_prop * duplicate_field_prop (field_prop * old_prop, int ti) \brief create a copy of a field property \param old_prop the field property to duplicate \param ti the type of field property */ field_prop * duplicate_field_prop (field_prop * old_prop, int ti) { field_prop * new_prop; new_prop = g_malloc0 (sizeof*new_prop); new_prop -> aid = duplicate_int (struct_id(ti+7), old_prop -> aid); new_prop -> key = old_prop -> key; new_prop -> pid = old_prop -> pid; new_prop -> fpid = old_prop -> fpid; new_prop -> val = NULL; if (fvalues[activef][ti+1][new_prop -> key] > 0) { new_prop -> val = duplicate_float (fvalues[activef][ti+1][new_prop -> key], old_prop -> val); } new_prop -> show = old_prop -> show; new_prop -> use = old_prop -> use; new_prop -> next = NULL; new_prop -> prev = NULL; return new_prop; } /*! \fn gboolean check_this_other_prop (int oid, int nat, field_prop * other) \brief check if field atom already in field property \param oid the field atom id to search for \param nat the number of atoms in the field property \param other the field structural property to check */ gboolean check_this_other_prop (int oid, int nat, field_prop * other) { if (oid > -1) { int i; for (i=0; i atoms_id[other -> aid[i]][0].a == oid) return FALSE; } } return TRUE; } /*! \fn void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr) \brief create copy of a field property 'other' list \param oid the target field atom id \param old_fstr the field property to duplicate \param new_fstr the field property to store the results */ void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr) { int i = struct_id(new_fstr -> st+7); field_prop * tmp_new; field_prop * tmp_old = old_fstr -> other; while (tmp_old) { if (check_this_other_prop(oid, i, tmp_old)) { if (new_fstr -> other) { tmp_new -> next = duplicate_field_prop (tmp_old, old_fstr -> st); tmp_new = tmp_new -> next; } else { new_fstr -> other = duplicate_field_prop (tmp_old, old_fstr -> st); tmp_new = new_fstr -> other; } } tmp_old = tmp_old -> next; } } /*! \fn field_struct * duplicate_field_struct (field_struct * old_fstr) \brief create copy of a field structural element \param old_fstr the field structural element to duplicate */ field_struct * duplicate_field_struct (field_struct * old_fstr) { field_struct * new_fstr; new_fstr = g_malloc0 (sizeof*new_fstr); new_fstr -> st = old_fstr -> st; new_fstr -> id = old_fstr -> id; new_fstr -> num = old_fstr -> num; new_fstr -> aid = duplicate_int (struct_id(old_fstr -> st+7), old_fstr -> aid); new_fstr -> av = old_fstr -> av; new_fstr -> def = duplicate_field_prop (old_fstr -> def, old_fstr -> st); new_fstr -> other = NULL; if (old_fstr -> other != NULL) duplicate_other_prop (-1, old_fstr, new_fstr); new_fstr -> prev = NULL; new_fstr -> next = NULL; return new_fstr; } /*! \fn field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init) \brief create copy of list of field structural element(s) \param list_str the list of field structural element(s) to duplicate \param init */ field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init) { field_struct * str_list = duplicate_field_struct (list_str); if (init) str_list -> def -> use = FALSE; field_struct * tmp_str = str_list; field_struct * tmp_fst = list_str; while (tmp_fst -> next) { tmp_str -> next = duplicate_field_struct (tmp_fst -> next); tmp_str -> next -> prev = tmp_str; if (init) tmp_str -> next -> def -> use = FALSE; tmp_str = tmp_str -> next; tmp_fst = tmp_fst -> next; } return str_list; } /*! \fn void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody) \brief copy field body parameter list \param new_fbody the body parameters to fill \param old_fbody the body parameters to duplicate */ void duplicate_nbody_params (field_nth_body * new_fbody, field_nth_body * old_fbody) { new_fbody -> key = old_fbody -> key; new_fbody -> val = duplicate_float (fvalues[activef][9+new_fbody -> bd][new_fbody -> key], old_fbody -> val); new_fbody -> show = old_fbody -> show; new_fbody -> use = old_fbody -> use; } /*! \fn field_nth_body * duplicate_field_nth_body (field_nth_body * old_fbody) \brief create copy of a field body property \param old_fbody the field body property to duplicate */ field_nth_body * duplicate_field_nth_body (field_nth_body * old_fbody) { field_nth_body * new_fbody; int i, j; new_fbody = g_malloc0 (sizeof*new_fbody); new_fbody -> id = old_fbody -> id; new_fbody -> bd = old_fbody -> bd; if (old_fbody -> fpid) new_fbody -> fpid = duplicate_int (2, old_fbody -> fpid); j = body_at (old_fbody -> bd); new_fbody -> na = duplicate_int (j, old_fbody -> na); new_fbody -> ma = NULL; new_fbody -> ma = g_malloc (j*sizeof*new_fbody -> ma); new_fbody -> a = NULL; new_fbody -> a = g_malloc (j*sizeof*new_fbody -> a); for (i=0; i ma[i] != NULL) { new_fbody -> ma[i] = duplicate_int (old_fbody -> na[i], old_fbody -> ma[i]); } else { new_fbody -> ma[i] = NULL; } if (old_fbody -> a[i] != NULL) { new_fbody -> a[i] = duplicate_int (old_fbody -> na[i], old_fbody -> a[i]); } else { new_fbody -> a[i] = NULL; } } duplicate_nbody_params (new_fbody, old_fbody); new_fbody -> prev = NULL; new_fbody -> next = NULL; return new_fbody; } /*! \fn field_external * duplicate_field_external (field_external * old_fext) \brief create copy of a field external property \param old_fext the field external property to duplicate */ field_external * duplicate_field_external (field_external * old_fext) { field_external * new_fext; new_fext = g_malloc0 (sizeof*new_fext); new_fext -> id = old_fext -> id; new_fext -> key = old_fext -> key; new_fext -> val = NULL; if (old_fext -> val != NULL) { new_fext -> val = duplicate_float (fvalues[activef][SEXTERN-6][new_fext -> key], old_fext -> val); } new_fext -> use = old_fext -> use; new_fext -> next = NULL; new_fext -> prev = NULL; return new_fext; } /*! \fn field_molecule * duplicate_field_molecule (field_molecule * old_fmol) \brief create copy of a field molecule \param old_fmol the feld molecule to duplicate */ field_molecule * duplicate_field_molecule (field_molecule * old_fmol) { int i, j; field_molecule * new_fmol; new_fmol = g_malloc0 (sizeof*new_fmol); new_fmol -> id = old_fmol -> id; new_fmol -> multi = old_fmol -> multi; new_fmol -> name = g_strdup_printf ("%s", old_fmol -> name); new_fmol -> show = old_fmol -> show; new_fmol -> show_id = old_fmol -> show_id; new_fmol -> atoms = old_fmol -> atoms; new_fmol -> first_atom = NULL; new_fmol -> tethered = old_fmol -> tethered; new_fmol -> first_tethered = NULL; new_fmol -> rigids = old_fmol -> rigids; new_fmol -> first_rigid = NULL; new_fmol -> pmfs = old_fmol -> pmfs; new_fmol -> first_pmf = NULL; new_fmol -> first_constraint = NULL; new_fmol -> constraints = old_fmol -> constraints; new_fmol -> first_shell = NULL; new_fmol -> shells = old_fmol -> shells; new_fmol -> mol = g_malloc0 (sizeof*new_fmol -> mol); new_fmol -> mol = & tmp_proj -> modelfc -> mols[0][old_fmol -> mol -> id]; // Duplicating atoms new_fmol -> fragments = NULL; new_fmol -> fragments = allocint(new_fmol -> multi); for (i=0; i multi; i++) new_fmol -> fragments[i] = old_fmol -> fragments[i]; new_fmol -> first_atom = duplicate_field_atom (old_fmol -> first_atom); field_atom* tmp_fat = new_fmol -> first_atom; field_atom* tmp_fa = old_fmol -> first_atom; for (i=1; i atoms; i++) { tmp_fat -> next = duplicate_field_atom (tmp_fa -> next); tmp_fat -> next -> prev = tmp_fat; tmp_fat = tmp_fat -> next; tmp_fa = tmp_fa -> next; } new_fmol -> atoms_id = g_malloc (new_fmol -> mol -> natoms*sizeof*new_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { new_fmol -> atoms_id[i] = g_malloc0 (new_fmol -> multi*sizeof*new_fmol -> atoms_id[i]); for (j=0; j multi; j++) { new_fmol -> atoms_id[i][j].a = old_fmol -> atoms_id[i][j].a; new_fmol -> atoms_id[i][j].b = old_fmol -> atoms_id[i][j].b; } } for (i=0; i<8; i++) { // Duplicating bonds / br / angles / ar / diherdrals / impropers / tr / inversions new_fmol -> nstruct[i] = old_fmol -> nstruct[i]; new_fmol -> first_struct[i] = NULL; if (old_fmol -> nstruct[i] > 0) { new_fmol -> first_struct[i] = duplicate_field_struct (old_fmol -> first_struct[i]); field_struct * tmp_str = new_fmol -> first_struct[i]; field_struct * tmp_fst = old_fmol -> first_struct[i]; for (j=1; j nstruct[i]; j++) { tmp_str -> next = duplicate_field_struct (tmp_fst -> next); tmp_str -> next -> prev = tmp_str; tmp_str = tmp_str -> next; tmp_fst = tmp_fst -> next; } } } new_fmol -> next = NULL; new_fmol -> prev = NULL; return new_fmol; } /*! \fn classical_field * duplicate_classical_field (classical_field * init_field) \brief create copy of a force field \param init_field the force field to duplicate */ classical_field * duplicate_classical_field (classical_field * init_field) { classical_field * new_field = NULL; new_field = g_malloc (sizeof*new_field); int i, j, k; // All for (i=0; i afp[i] = init_field -> afp[i]; for (i=0; i<2; i++) new_field -> prepare_file[i] = init_field -> prepare_file[i]; // Control new_field -> ensemble = init_field -> ensemble; new_field -> thermostat = init_field -> thermostat; for (i=0; i<17; i++) new_field -> sys_opts[i] = init_field -> sys_opts[i]; for (i=0; i<23; i++) new_field -> io_opts[i] = init_field -> io_opts[i]; for (i=0; i<17; i++) new_field -> ana_opts[i] = init_field -> ana_opts[i]; for (i=0; i<11; i++) new_field -> elec_opts[i] = init_field -> elec_opts[i]; for (i=0; i<6; i++) new_field -> vdw_opts[i] = init_field -> vdw_opts[i]; for (i=0; i<2; i++) new_field -> met_opts[i] = init_field -> met_opts[i]; for (i=0; i<17; i++) new_field -> equi_opts[i] = init_field -> equi_opts[i]; for (i=0; i<10; i++) new_field -> thermo_opts[i] = init_field -> thermo_opts[i]; for (i=0; i<20; i++) new_field -> md_opts[i] = init_field -> md_opts[i]; for (i=0; i<31; i++) new_field -> out_opts[i] = init_field -> out_opts[i]; // Field new_field -> energy_unit = init_field -> energy_unit; new_field -> atom_init = init_field -> atom_init; new_field -> molecules = init_field -> molecules; if (new_field -> molecules) { field_molecule * fmol; new_field -> first_molecule = duplicate_field_molecule (init_field -> first_molecule); fmol = new_field -> first_molecule; tmp_fmol = init_field -> first_molecule; for (i=1; i molecules; i++) { fmol -> next = duplicate_field_molecule (tmp_fmol -> next); fmol -> next -> prev = fmol; fmol = fmol -> next; tmp_fmol = tmp_fmol -> next; } // Duplicating nth_body for (i=0; i<5; i++) { new_field -> first_body[i] = NULL; new_field -> nbody[i] = init_field -> nbody[i]; if (init_field -> nbody[i] > 0) { new_field -> first_body[i] = duplicate_field_nth_body (init_field -> first_body[i]); field_nth_body * tmp_fbod = new_field -> first_body[i]; field_nth_body * tmp_fbo = init_field -> first_body[i]; for (j=1; j nbody[i]; j++) { tmp_fbod -> next = duplicate_field_nth_body (tmp_fbo -> next); tmp_fbod -> next -> prev = tmp_fbod; tmp_fbod = tmp_fbod -> next; tmp_fbo = tmp_fbo -> next; } } } // Tersoff cross terms new_field -> cross = NULL; if (init_field -> cross != NULL) { new_field -> cross = g_malloc (tmp_field -> nbody[2]*sizeof*new_field -> cross); for (i=0; i nbody[2]; i++) { new_field -> cross[i] = g_malloc (tmp_field -> nbody[2]*sizeof*new_field -> cross[i]); for (j=0; j nbody[2]; k++) new_field -> cross[i][j] = duplicate_double (3, init_field -> cross[i][j]); } } // Duplicating external fields new_field -> first_external = NULL; new_field -> extern_fields = init_field -> extern_fields; if (init_field -> extern_fields > 0) { new_field -> first_external = duplicate_field_external (init_field -> first_external); field_external * tmp_fext = new_field -> first_external; field_external * tmp_ftxt = init_field -> first_external; for (i=1; i extern_fields; i++) { tmp_fext -> next = duplicate_field_external (tmp_ftxt -> next); tmp_fext -> next -> prev = tmp_fext; tmp_fext = tmp_fext -> next; tmp_ftxt = tmp_ftxt -> next; } } } return new_field; } Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_edit.c000066400000000000000000003451141457665371200205700ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_edit.c * @short Functions to edit DL-POLY force field parameters * @author Sébastien Le Roux */ /* * This file: 'dlp_edit.c' * * Contains: * - The functions to edit DL-POLY force field parameters * * List of functions: int get_num_vdw_max (); gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b); gboolean tersoff_question (); gboolean body_identicals (field_nth_body * body, int nbd, int * na, int ** ma, int ** ba); gchar * get_this_vdw_string (); gchar * field_str (int a); gchar * body_str (int a); gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key); void select_atom_set_color (GtkCellRenderer * renderer, int i); void select_atom_set_cmv (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void update_field_dist (float v); void adjust_vdw_interactions (gboolean add_shell); void edit_parameters (int f, int id); void update_tersoffs (int id, int key); void check_tersoffs (int id, int key); G_MODULE_EXPORT void update_atom_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_field_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_cross_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_cross_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_field_key_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void visualize_it (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void select_it (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void field_molecule_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void edit_unit_weight (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data); G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data); G_MODULE_EXPORT void selection_button (GtkButton * but, gpointer data); G_MODULE_EXPORT void changed_atom_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void shell_in_vdw (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_edit_parameters (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * combo_cross (field_nth_body * body); GtkWidget * parameters_box (int obj, int key, gchar ** words, float * data); GtkWidget * param_prop_param_box (int pid); */ #include "global.h" #include "interface.h" #include "glwindow.h" #include "glview.h" #include "dlp_field.h" #include "calc.h" extern int * atoms_id; extern int ** atoms_id_list; extern char *** ff_atoms; extern gchar * felemts[MAXDATA+1]; extern gchar * elemts[MAXDATA]; extern gchar * mo_title[8]; extern int fetypes[2][16]; extern void clean_up_molecules_info (gboolean usel); extern void select_object (int id, int jd, int kd); extern G_MODULE_EXPORT void run_add_atom_dialog (GtkDialog * add_dialog, gint response_id, gpointer data); extern void field_selection (int i, int viz, int lab, int aid); extern void field_unselect_all (); extern void compare_non_bonded (gchar * fatom); extern void visualize_single_struct (int id, int jd, int kd, int * ids); extern void visualize_body (int viz, int bd, field_nth_body * body); extern void init_default_shaders (glwin * view); extern GtkWidget * create_field_prop_combo (int f, int is_moy); extern void check_atom_for_updates (); extern void check_to_visualize_properties_for_this_field_mol (int pid, int mol); extern GtkWidget * ff_p_combo[2]; GtkWidget * field_key_combo; GtkWidget * p_box; GtkWidget * cross_vbox, * cross_hbox; GtkWidget * param_box; GtkWidget * img_but[4]; GtkWidget * shell_but; GtkWidget * shell_hbox[3]; GtkWidget * shell_cbox[2]; GtkWidget * body_lab; GtkWidget * afftype; int is_moy; int * edit_atids; /*! \fn gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b) \brief are the 2 field property identicals ? \param ti the type of field property \param ai the number of field atoms for this field property \param pro_a 1st field property \param pro_b 2nd field property */ gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b) { if (pro_a -> key != pro_b -> key) return FALSE; if (pro_a -> use != pro_b -> use) return FALSE; if (pro_a -> show != pro_b -> show) return FALSE; int i; /*for (i=0; i aid[i] != pro_b -> aid[i]) return FALSE; }*/ for (i=0; i key]; i++) { if (pro_a -> val[i] != pro_b -> val[i]) return FALSE; } return TRUE; } /*! \fn void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key) \brief adjust field property \param fil the type of field property \param sti the number of field atoms for this type of field property \param tmp the pointer of the field property list \param ids the list of field atoms \param key the key value to adjust */ void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key) { int i, j, k, l; gboolean add; add = FALSE; field_prop * pro, * ptmp; if (ids[0] < 0) { // Default prop if (tmp == NULL) { // New val for default field prop tmp_fstr -> def = init_field_prop (fil, key, tmp_fstr -> def -> show, tmp_fstr -> def -> use); } else { tmp_fstr -> def = duplicate_field_prop (tmp, fil); } } else { // Not default, between specified atoms if (tmp != NULL) { pro = get_active_prop_using_atoms (tmp_fstr -> other, sti, ids); if (pro == NULL) { // No 'other' yet, but is it identical to default ? if (! are_identical_prop (fil+1, sti, tmp, tmp_fstr -> def)) { add = TRUE; } } else if (! are_identical_prop (fil+1, sti, tmp, pro)) { add = TRUE; } } else { if (tmp_fstr -> other == NULL) { add = TRUE; j = key; k = tmp_fstr -> def -> show; l = tmp_fstr -> def -> use; } else { pro = get_active_prop_using_atoms (tmp_fstr -> other, sti, ids); if (pro == NULL) { if (key != tmp_fstr -> def -> key) { add = TRUE; j = key; k = tmp_fstr -> def -> show; l = tmp_fstr -> def -> use; } } else if (key != pro -> key) { add = TRUE; j = key; } } } if (add) { if (tmp_fstr -> other == NULL) { if (tmp != NULL) { tmp_fstr -> other = duplicate_field_prop (tmp, fil); } else { tmp_fstr -> other = init_field_prop (fil, j, k, l); for (i=0; i other -> aid[i] = ids[i]; } } else if (pro == NULL) { pro = tmp_fstr -> other; while (pro -> next != NULL) pro = pro -> next; if (tmp != NULL) { pro -> next = duplicate_field_prop (tmp, fil); } else { pro -> next = init_field_prop (fil, j, k, l); pro = pro -> next; for (i=0; i aid[i] = ids[i]; } } else { if (tmp != NULL) { // Modifying an existing 'other' prop pro -> key = tmp -> key; pro -> val = NULL; if (fvalues[activef][fil+1][tmp -> key] > 0) { pro -> val = duplicate_float (fvalues[activef][fil+1][tmp -> key], tmp -> val); } pro -> show = tmp -> show; pro -> use = tmp -> use; } else { pro -> key = j; pro -> val = NULL; pro -> val = allocfloat (fvalues[activef][fil+1][j]); } } } } if (tmp_fstr -> other != NULL) { ptmp = tmp_fstr -> other; while (ptmp) { if (are_identical_prop (fil+1, sti, ptmp, tmp_fstr -> def)) { if (ptmp -> next != NULL) { if (ptmp -> prev != NULL) { ptmp -> prev -> next = ptmp -> next; ptmp -> next -> prev = ptmp -> prev; } else { ptmp -> next -> prev = NULL; } } else if (ptmp -> prev != NULL) { ptmp -> prev -> next = NULL; } else { g_free (tmp_fstr -> other); tmp_fstr -> other = NULL; ptmp = NULL; } } if (ptmp) ptmp = ptmp -> next; } } if (tmp_fstr -> other != NULL) { ptmp = tmp_fstr -> other; ptmp -> pid = 0; while (ptmp -> next != NULL) { ptmp -> next -> pid = ptmp -> pid + 1; ptmp = ptmp -> next; } } } /*! \fn G_MODULE_EXPORT void update_atom_parameter (GtkEntry * res, gpointer data) \brief update field atom parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_atom_parameter (GtkEntry * res, gpointer data) { int i = GPOINTER_TO_INT(data); double v; const gchar * m = entry_get_text (res); if (i > -1) { v = atof(m); update_entry_double (res, v); } switch (i) { case -1: tmp_fat -> name = g_strdup_printf ("%s", m); break; case 0: tmp_fat -> mass = v; break; case 1: tmp_fat -> charge = v; break; case 2: tmp_fshell -> m = v; break; case 3: tmp_fshell -> z = v; break; case 4: tmp_fshell -> k2 = v; break; case 5: tmp_fshell -> k4 = v; break; case 6: tmp_fcons -> length = v; break; case 7: tmp_fpmf -> length = v; break; } } int object_is; /*! \fn G_MODULE_EXPORT void update_field_parameter (GtkEntry * res, gpointer data) \brief update field parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_field_parameter (GtkEntry * res, gpointer data) { int i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); update_entry_double (res, v); if (object_is > 0 && object_is < 9) { tmp_fprop -> val[i] = v; } else { switch (object_is) { case 0: tmp_ftet -> val[i] = v; break; case 14: tmp_fext -> val[i] = v; break; default: tmp_fbody -> val[i] = v; break; } } } GtkWidget * centry[3]; GtkWidget * cross_box; double *** cross = NULL; int num_body_d; gboolean change_tersoff; /*! \fn G_MODULE_EXPORT void update_cross_parameter (GtkEntry * res, gpointer data) \brief update field cross parameter entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cross_parameter (GtkEntry * res, gpointer data) { int j, k; k = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); update_entry_double (res, v); j = gtk_combo_box_get_active (GTK_COMBO_BOX(cross_box)); cross[tmp_fbody -> id][j][k] = cross[j][tmp_fbody -> id][k] = v; } /*! \fn G_MODULE_EXPORT void changed_cross_combo (GtkComboBox * box, gpointer data) \brief change field cross combo \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_cross_combo (GtkComboBox * box, gpointer data) { int i, j; i = gtk_combo_box_get_active (box); for (j=0; j<3; j++) { // g_debug ("Updating entry:: id= %d, i= %d, j= %d", tmp_fbody -> id, i, j); update_entry_double (GTK_ENTRY(centry[j]), cross[tmp_fbody -> id][i][j]); } } /*! \fn GtkWidget * combo_cross (field_nth_body * body) \brief create field cross configuration widgets \param body the pointer on the first non bonded field structure */ GtkWidget * combo_cross (field_nth_body * body) { GtkWidget * combo; combo = create_combo (); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(changed_cross_combo), NULL); if (tmp_field -> first_body[2] && tmp_fbody -> na[0] > -1) { field_nth_body * obody; obody = tmp_field -> first_body[2]; while (obody) { combo_text_append (combo, get_active_atom(obody -> ma[0][0], obody -> a[0][0]) -> name); obody = obody -> next; } } return combo; } /*! \fn gchar * get_this_vdw_string () \brief get VdW formalism description string */ gchar * get_this_vdw_string () { gchar * str = NULL; if (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) { str = g_strdup_printf ("U(rij) = Ɛij x [ (r0ij/rij)12 - 2.0 (r0ij/rij)6 ]\n" "\t\twith Ɛij = sqrt (Ɛi x Ɛj)\n" "\t\tand r0ij = r0i/2.0 + r0j/2.0"); } else if (tmp_field -> type == CVFF || tmp_field -> type == CVFF_AUG) { str = g_strdup_printf ("U(rij) = (Aij/rij)12 - 2.0 (Bij/rij)6\n" "\t\twith Aij = sqrt (Ai x Aj)\n" "\t\tand Bij = sqrt (Bi x Bj)"); } else if (tmp_field -> type >= CFF91 && tmp_field -> type <= COMPASS) { str = g_strdup_printf ("U(rij) = Ɛij x [ 2.0 (r0ij/rij)9 - 3.0 (r0ij/rij)6 ]\n" "\t\twith Ɛij = 2.0 sqrt (Ɛi x Ɛj) x (r0i3 r0j3) / (r0i6 + r0j6)\n" "\t\tand r0ij = [(r0i6 + r0j6)/2.0] 1/6"); } return str; } /*! \fn GtkWidget * parameters_box (int obj, int key, gchar ** words, float * data) \brief pepare field property edition parameters \param obj the type of field property \param key the key type for this field property, if any \param words the parameter(s) labels \param data the actual value(s) for the parameter(s) */ GtkWidget * parameters_box (int obj, int key, gchar ** words, float * data) { int i; gchar * str = NULL; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * lab; GtkWidget * entry; object_is = obj; if (obj > -1 && key > -1) { if (fvalues[activef][obj][key] > 0) { for (i=0; i< fvalues[activef][obj][key]; i++) { if (obj == 11 && key == 0 && i == 0) { hbox = create_hbox (0); lab = markup_label ("Single terms:", 100, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); str = g_strdup_printf (" %s", words[i]); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 50); entry = create_entry (G_CALLBACK(update_field_parameter), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), data[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (obj == 11 && key == 0) { cross_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cross_vbox, FALSE, FALSE, 0); cross_hbox = create_hbox (0); lab = markup_label ("Cross terms with atom:", 160, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cross_hbox, lab, FALSE, FALSE, 30); cross_box = combo_cross (tmp_fbody); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cross_hbox, cross_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cross_vbox, cross_hbox, FALSE, FALSE, 10); for (i=11; i< 14; i++) { hbox = create_hbox (0); str = g_strdup_printf (" %s", words[i]); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 50); centry[i-11] = create_entry (G_CALLBACK(update_cross_parameter), 100, 15, FALSE, GINT_TO_POINTER(i-11)); update_entry_double (GTK_ENTRY(centry[i-11]), cross[tmp_fbody -> id][0][i-11]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, centry[i-11], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cross_vbox, hbox, FALSE, FALSE, 0); } if (tmp_fbody -> na[0] < 0) { widget_set_sensitive (cross_vbox, FALSE); } else { gtk_combo_box_set_active (GTK_COMBO_BOX(cross_box), 0); } } } else { hbox = create_hbox (0); str = g_strdup_printf ("Tabulated"); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } if (obj == 9 && tmp_field -> type >= CFF91 && tmp_field -> type <= COMPASS) { str = g_strdup_printf ("In %s, non-bonded interactions are evaluated using: \n%s\nTherefore the parameters provided by the force field are incompatible with the DL-POLY options.", field_acro[tmp_field -> type], get_this_vdw_string()); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); g_free (str); } else if (obj == 9 && key == 0 && (tmp_field -> type <= CVFF_AUG || tmp_field -> type > COMPASS)) { if (tmp_field -> type < CVFF) { str = g_strdup_printf ("In %s, 12-6 non-bonded interactions are evaluated using: \n%s\nA and B" " are calculated using Ɛi/j and r0i/j provided by the force field parameters.", field_acro[tmp_field -> type], get_this_vdw_string()); if (tmp_field -> type > AMBER99) { str = g_strdup_printf ("%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored.", str, field_acro[tmp_field -> type]); } } else { str = g_strdup_printf ("In %s, 12-6 non-bonded interactions are evaluated using: \n%s\nA and B" " are calculated using Ai/j and Bi/j provided by the force field parameters.", field_acro[tmp_field -> type], get_this_vdw_string()); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); g_free (str); } else if ((obj == 3 || obj == 4) && tmp_field -> type > AMBER99 && tmp_field -> type < CVFF) { hbox = create_hbox (0); str = g_strdup_printf ("Urey-Bradley terms provided by the %s force field are ignored.\n", field_acro[tmp_field -> type]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); g_free (str); } } return vbox; } /*! \fn gchar * field_str (int a) \brief get field external name \param a the field external id */ gchar * field_str (int a) { gchar * str = g_strdup_printf ("External field"); if (a > -1) { str = g_strdup_printf ("%s: %s", str, fnames[activef][15][a]); } return str; } /*! \fn gboolean tersoff_question () \brief change Tersoff potential ? */ gboolean tersoff_question () { gchar * text = "Are you sure to want to change the type of Tersoff potential ?\n" "Tersoff (ter) and KIHS (kihs) forms cannot be mixed\n" "Therefore this choice will affect all Tersoff potential(s)" "Any previous parameters will be erased !"; if (num_body_d > 1) { return ask_yes_no ("Change Tersoff potential ?!", text, GTK_MESSAGE_QUESTION, field_assistant); } else { change_tersoff = TRUE; return TRUE; } } /*! \fn GtkWidget * param_prop_param_box (int pid) \brief prepare field parameter edition widgets \param pid the type of field parameter */ GtkWidget * param_prop_param_box (int pid) { switch (pid) { case MOLIMIT-9: return parameters_box (0, tmp_ftet -> key, fvars_teth[activef][tmp_ftet -> key], tmp_ftet -> val); break; case MOLIMIT-1: return parameters_box (pid-6, tmp_fprop -> key, fvars_inversion[activef][tmp_fprop -> key], tmp_fprop -> val); break; case MOLIMIT: return parameters_box (pid-6, tmp_fbody -> key, fvars_vdw[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+1: return parameters_box (pid-6, tmp_fbody -> key, fvars_met[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+2: return parameters_box (pid-6, tmp_fbody -> key, fvars_ters[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+3: return parameters_box (pid-6, tmp_fbody -> key, fvars_tbd[activef][tmp_fbody -> key], tmp_fbody -> val); break; case MOLIMIT+4: return parameters_box (pid-6, tmp_fbody -> key, fvars_fbd[activef][tmp_fbody -> key], tmp_fbody -> val); break; case SEXTERN: return parameters_box (14, tmp_fext -> key, fvars_fext[activef][tmp_fext -> key], tmp_fext -> val); break; default: switch ((pid-7)/2) { case 0: return parameters_box (pid-6, tmp_fprop -> key, fvars_bond[activef][tmp_fprop -> key], tmp_fprop -> val); break; case 1: return parameters_box (pid-6, tmp_fprop -> key, fvars_angle[activef][tmp_fprop -> key], tmp_fprop -> val); break; default: return parameters_box (pid-6, tmp_fprop -> key, fvars_dihedral[activef][tmp_fprop -> key], tmp_fprop -> val); break; } break; } } /*! \fn G_MODULE_EXPORT void changed_field_key_combo (GtkComboBox * box, gpointer data) \brief change field key \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_field_key_combo (GtkComboBox * box, gpointer data) { int i, j; gboolean changeit; i = GPOINTER_TO_INT(data); j = gtk_combo_box_get_active (box); if (i > 6 && i < MOLIMIT) { if (j != tmp_fprop -> key) { tmp_fprop -> key = j; tmp_fprop -> val = NULL; tmp_fprop -> val = allocfloat (fvalues[activef][i-6][j]); changeit = TRUE; } } else { changeit = FALSE; switch (i) { case 6: if (j != tmp_ftet -> key) { tmp_ftet -> key = j; tmp_ftet -> val = NULL; tmp_ftet -> val = allocfloat (fvalues[activef][0][j]); changeit = TRUE; } break; case SEXTERN: if (j != tmp_fext -> key) { tmp_fext -> key = j; gtk_label_set_text (GTK_LABEL(body_lab), field_str(tmp_fext -> key)); gtk_label_set_use_markup (GTK_LABEL(body_lab), TRUE); tmp_fext -> val = NULL; tmp_fext -> val = allocfloat (fvalues[activef][SEXTERN-6][j]); changeit = TRUE; } break; default: if (j != tmp_fbody -> key) { changeit = TRUE; if (i == MOLIMIT+2) changeit = tersoff_question (); if (changeit) { tmp_fbody -> key = j; tmp_fbody -> val = NULL; tmp_fbody -> val = allocfloat (fvalues[activef][i-6][j]); if (i == MOLIMIT+2 && j == 0) { cross = alloctdouble (num_body_d, num_body_d, 3); } else if (j == 1 && cross != NULL) { g_free (cross); cross = NULL; } } else { gtk_combo_box_set_active (box, tmp_fbody -> key); } } break; } } if (changeit) { if (ff_p_combo[0]) gtk_combo_box_set_active (GTK_COMBO_BOX(ff_p_combo[0]), 0); if (ff_p_combo[1]) gtk_combo_box_set_active (GTK_COMBO_BOX(ff_p_combo[1]), 0); p_box = destroy_this_widget (p_box); p_box = param_prop_param_box (i); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, param_box, p_box, FALSE, FALSE, 0); show_the_widgets (param_box); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data) \brief visualize object toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void visualize_it (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void visualize_it (GtkToggleButton * but, gpointer data) \brief visualize object toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void visualize_it (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT (data); j = 0; #ifdef GTK4 toviz.c = gtk_check_button_get_active (but); #else toviz.c = gtk_toggle_button_get_active (but); #endif if (i < MOLIMIT) { j = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_mol[i-1])); tmp_fmol = get_active_field_molecule (j); } if (is_moy) { visualize_object (i, row_id, j); if (i < MOLIMIT) check_to_visualize_properties_for_this_field_mol (i, j); } else { visualize_single_struct (i, row_id, j, edit_atids); if (i < MOLIMIT) { check_to_visualize_properties_for_this_field_mol (i, j); tmp_fprop -> show = toviz.c; } } if (i < MOLIMIT) tmp_fmol = get_active_field_molecule (j); init_default_shaders (tmp_view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data) \brief select object toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_it (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_it (GtkToggleButton * but, gpointer data) \brief select object toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_it (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT (data); #ifdef GTK4 toviz.c = gtk_check_button_get_active (but); #else toviz.c = gtk_toggle_button_get_active (but); #endif if (i < MOLIMIT) j = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_mol[i-1])); if (is_moy) { select_object (i, row_id, j); } else { tmp_fprop -> use = toviz.c; } } extern ColRGBA init_color (int id, int numid); extern int active_sel; extern int a_ato; extern int ** sel_at; extern void run_select_atom_dialog (GtkDialog * select_dialog, gint response_id, gpointer data); GtkWidget * add_tree; int vdw_id; /*! \fn G_MODULE_EXPORT void field_molecule_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select atom in field molecule toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void field_molecule_select_atom_id (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; int h, i, j, k, l, m, n; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & i, -1); if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { toviz.c = 0; a_ato --; } else { toviz.c = 1; a_ato ++; } if (active_sel < 11) { sel_at[0][i-1] = toviz.c; } switch (active_sel) { case 0: j = i-1; break; case 1: j = i-1; break; case 2: j = tmp_fshell -> id; break; case 3: j = tmp_fshell -> id; break; case 4: j = tmp_fcons -> id; break; case 5: j = tmp_fcons -> id; break; case 6: j = tmp_fpmf -> id; break; case 7: j = tmp_fpmf -> id; break; case 8: j = tmp_frig -> id; break; case 9: j = tmp_ftet -> id; break; default: j = tmp_fbody -> id; break; } if (active_sel < 10) { for (k=0; k multi; k++) { l = tmp_fmol -> atoms_id[i-1][k].a; m = tmp_fmol -> atoms_id[i-1][k].b; n = get_active_atom (tmp_fmol -> id, l) -> list[m]; field_selection (n, toviz.c, toviz.c, i-1); } } else { h = vdw_id = sel_at[0][i-1]; field_nth_body * tmp_fbo = tmp_field -> first_body[0]; for (k=0; k nbody[0]; k++) { if (tmp_fbo -> id == h) { visualize_body (toviz.c, h, tmp_fbo); break; } else if (tmp_fbo -> next != NULL) { tmp_fbo = tmp_fbo -> next; } } } init_default_shaders (tmp_view); j = (active_sel > 5 && active_sel < 8) ? 1 : 0; gtk_tree_store_set (* model, & iter, 3+j, toviz.c, -1); gtk_widget_hide (add_tree); gtk_widget_show (add_tree); } /*! \fn void select_atom_set_color (GtkCellRenderer * renderer, int i) \brief set cell renderer color \param renderer the target GtkCellRen \param i the color id */ void select_atom_set_color (GtkCellRenderer * renderer, int i) { set_renderer_color (i, renderer, init_color (i-1, num_field_objects)); } /*! \fn void select_atom_set_cmv (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field atom set renderer color, markup and visibility in the property edition atom(s) selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void select_atom_set_cmv (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int h, i, j, k; gchar * str = NULL; gtk_tree_model_get (mod, iter, 0, & h, -1); if (active_sel < 11) { gtk_tree_model_get (mod, iter, 1, & i, -1); } else { i = ! h; } j = GPOINTER_TO_INT(data); switch (j) { case 0: gtk_cell_renderer_set_visible (renderer, ! i); break; case 1: if (active_sel > 10) { gtk_tree_model_get (mod, iter, 1, & str, -1); g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); i = h; } gtk_cell_renderer_set_visible (renderer, i); break; case 2: gtk_tree_model_get (mod, iter, 2, & str, -1); g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); gtk_cell_renderer_set_visible (renderer, i); break; case 3: gtk_cell_renderer_set_visible (renderer, ! i); break; case 4: if ((active_sel > 1 && active_sel < 6) || active_sel > 8) { if (active_sel > 10) { gtk_tree_model_get (mod, iter, 3, & k, -1); } else { k = sel_at[0][h-1]; } if (k || ! a_ato) { gtk_cell_renderer_set_visible (renderer, TRUE); } else { gtk_cell_renderer_set_visible (renderer, ! a_ato); } } else { gtk_cell_renderer_set_visible (renderer, ! i); } break; } if (active_sel < 2 && j < 4) { for (i=0; i num/tmp_fmol -> multi; i++) { if (sel_at[0][i]+1 == abs(h)) break; } if (sel_at[1][i]) { select_atom_set_color (renderer, sel_at[0][i]+1); } else { select_atom_set_color (renderer, sel_at[1][i]); } } else if (j < 4) { if (h < 0) h = -h; if (active_sel < 11) { k = (sel_at[0][h-1]) ? h : 0; } else { gtk_tree_model_get (mod, iter, 3, & k, -1); } select_atom_set_color (renderer, k); } } float * val_at; /* * G_MODULE_EXPORT void edit_unit_weight (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) \brief on edit unit weight callback \param cell the GtkCellRendererToggle sending the signal \param string_path the path in the tree store * gchar \param data the associated data pointer */ G_MODULE_EXPORT void edit_unit_weight (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) { GtkTreeStore ** model = (GtkTreeStore **)data; GtkTreeIter iter; int i; GtkTreePath * path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (GTK_TREE_MODEL(* model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(* model), & iter, 0, & i, -1); val_at[i] = atof(new_text); } /*! \fn G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data) \brief select atom id from field molecule - creating the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data) { int i, j, k, l, m, n, o, p, q; GtkTreeIter id_level; GtkTreeIter atom_level; GtkTreeViewColumn * ato_col[5]; GtkCellRenderer * ato_cell[5]; gchar * ato_title[5] = {"Atom Id", "Fragment", "Atom", "Weight (1)", "Viz.3D & Select"}; gchar * nbd_title[5] = {"Atom Id", "Field atom", "Field molecule(s)", " ", "Viz.3D & Select"}; gchar * ctype[5]={"text", "text", "text", "text", "active"}; GType col_type[2][5] = {{G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_FLOAT}, {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_BOOLEAN}}; GType cbl_type[4] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN}; field_object = 1; active_sel = GPOINTER_TO_INT (data); gboolean add; gchar * str; q = (active_sel > 5 && active_sel < 8) ? 1 : 0; switch (active_sel) { case 0: str = g_strdup_printf ("Please select the new atom(s)"); o = -1; p = -1; break; case 1: str = g_strdup_printf ("Please select the atom(s) to freeze / unfreeze"); o = -1; p = -1; break; case 2: str = g_strdup_printf ("Please select the core atom"); o = tmp_fshell -> ia[0]-1; p = tmp_fshell -> ia[1]-1; break; case 3: str = g_strdup_printf ("Please select the atom(s) to shell"); o = tmp_fshell -> ia[1]-1; p = tmp_fshell -> ia[0]-1; break; case 4: str = g_strdup_printf ("Please select the first atom"); o = tmp_fcons -> ia[0]-1; p = tmp_fcons -> ia[1]-1; break; case 5: str = g_strdup_printf ("Please select the second atom"); o = tmp_fcons -> ia[1]-1; p = tmp_fcons -> ia[0]-1; break; case 6: str = g_strdup_printf ("Please select the atom(s) in the first unit"); break; case 7: str = g_strdup_printf ("Please select the atom(s) in the second unit"); break; case 8: str = g_strdup_printf ("Please select the atom(s) in the rigid unit"); p = -1; break; case 9: str = g_strdup_printf ("Please select the tethered atom"); o = tmp_ftet -> num-1; p = -1; break; case 11: if (tmp_fbody -> bd == 2) { str = g_strdup_printf ("Please select the type of field atom"); } else { str = g_strdup_printf ("Please select the first type of field atom"); } break; case 12: str = g_strdup_printf ("Please select the second type of field atom"); break; case 13: str = g_strdup_printf ("Please select the third type of field atom"); break; case 14: str = g_strdup_printf ("Please select the fourth type of field atom"); break; } GtkWidget * amol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(amol), "Apply", GTK_RESPONSE_APPLY); a_ato = 0; GtkTreeStore * add_model; if (active_sel < 11) { add_model = gtk_tree_store_newv (4+q, col_type[q]); } else { add_model = gtk_tree_store_newv (4, cbl_type); } add_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); if (active_sel < 11) { num_field_objects = tmp_fmol -> mol -> natoms; } for (i=0; i<4+q; i++) { k = i; if (i < 3+q) { ato_cell[i] = gtk_cell_renderer_text_new (); } else { if (! q) k ++; ato_cell[i] = gtk_cell_renderer_toggle_new (); if (active_sel > 1) gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(ato_cell[i]), TRUE); g_signal_connect (G_OBJECT(ato_cell[i]), "toggled", G_CALLBACK(field_molecule_select_atom_id), & add_model); } if (active_sel < 11) { ato_col[i] = gtk_tree_view_column_new_with_attributes (ato_title[k], ato_cell[i], ctype[k], i, NULL); } else { ato_col[i] = gtk_tree_view_column_new_with_attributes (nbd_title[k], ato_cell[i], ctype[k], i, NULL); } gtk_tree_view_append_column (GTK_TREE_VIEW(add_tree), ato_col[i]); gtk_tree_view_column_set_alignment (ato_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (ato_col[i], ato_cell[i], select_atom_set_cmv, GINT_TO_POINTER(k), NULL); if (q && i == 3) { g_object_set (ato_cell[i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(ato_cell[i]), "edited", G_CALLBACK(edit_unit_weight), & add_model); } } // Clean 3D viz field_unselect_all (); // fill model if (active_sel < 2) { sel_at = allocdint(2, tmp_fat -> num/tmp_fmol -> multi); } else if (active_sel < 11) { sel_at = allocdint(2, tmp_fmol -> mol -> natoms); } else { field_nth_body * tmp_fbo = tmp_field -> first_body[0]; k = 0; for (i=0; i nbody[0]; i++) { if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbo -> ma[1][0], tmp_fbo -> a[1][0]) -> name) == 0) k ++; if (tmp_fbo -> next != NULL) tmp_fbo = tmp_fbo -> next; } sel_at = allocdint(1, k); num_field_objects = k; } if (active_sel < 2) { l = 0; for (i=0; i mol -> natoms; i++) { if (tmp_fmol -> atoms_id[i][0].a == tmp_fat -> id) { j = tmp_fmol -> atoms_id[i][0].b; k = tmp_fat -> list_id[j]; sel_at[0][l] = k; if (active_sel) { sel_at[1][l] = tmp_fat -> frozen_id[j]; } else { sel_at[1][l] = 0; } l ++; } } for (i=0; i num/tmp_fmol -> multi; i++) { gtk_tree_store_append (add_model, & id_level, NULL); gtk_tree_store_set (add_model, & id_level, 0, sel_at[0][i]+1, 1, 0, 3, 0, -1); if (sel_at[1][i]) { field_molecule_select_atom_id (GTK_CELL_RENDERER_TOGGLE(ato_cell[3]), gtk_tree_path_to_string(gtk_tree_model_get_path(GTK_TREE_MODEL(add_model), & id_level)), & add_model); } for (j=0; j< tmp_fmol -> multi; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); k = sel_at[0][i]; l = tmp_fmol -> atoms_id[k][j].b; m = tmp_fat -> list[l]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), m+1); gtk_tree_store_set (add_model, & atom_level, 0, -(sel_at[0][i]+1), 1, tmp_fmol -> fragments[j]+1, 2, str, -1); g_free (str); } } } else if (active_sel < 4) { for (i=0; i mol -> natoms; i++) { if (i != p) { gtk_tree_store_append (add_model, & id_level, NULL); gtk_tree_store_set (add_model, & id_level, 0, i+1, 1, 0, 3, 0, -1); tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); for (j=0; j< tmp_fmol -> multi; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); k = tmp_fat -> list[tmp_fmol -> atoms_id[i][j].b]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), k+1); gtk_tree_store_set (add_model, & atom_level, 0, -(i+1), 1, tmp_fmol -> fragments[j]+1, 2, str, -1); g_free (str); } } } } else if (active_sel < 6 || (active_sel > 7 && active_sel < 11)) { for (i=0; i mol -> natoms; i++) { if (i != p) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); gtk_tree_store_append (add_model, & id_level, NULL); if (active_sel < 6 || active_sel == 9) { if (i == o) { k = 1; } else { k = 0; } } else { k = 0; if (tmp_frig -> num > 0) { for (j=0; j num; j++) { if (i == tmp_frig -> list[j]) { k = 1; break; } } } } sel_at[0][i] = k; gtk_tree_store_set (add_model, & id_level, 0, i+1, 1, 0, 3, 0, -1); if (sel_at[0][i]) { field_molecule_select_atom_id (GTK_CELL_RENDERER_TOGGLE(ato_cell[3]), gtk_tree_path_to_string(gtk_tree_model_get_path(GTK_TREE_MODEL(add_model), & id_level)), & add_model); } for (j=0; j< tmp_fmol -> multi; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); l = tmp_fat -> list[tmp_fmol -> atoms_id[i][j].b]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), l+1); gtk_tree_store_set (add_model, & atom_level, 0, -(i+1), 1, tmp_fmol -> fragments[j]+1, 2, str, -1); g_free (str); } } } } else if (active_sel > 10) { m = active_sel-11; field_nth_body * tmp_fbo = tmp_field -> first_body[0]; k = 0; for (i=0; i nbody[0]; i++) { // need to find the atoms name if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbo -> ma[1][0], tmp_fbo -> a[1][0]) -> name) == 0) { add = TRUE; for (j=0; j < body_at(tmp_fbody -> bd); j++) { if (j != m && tmp_fbody -> na[j] > -1) { if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbody -> ma[j][0], tmp_fbody -> a[j][0]) -> name) == 0) add = FALSE; } } if (add) { gtk_tree_store_append (add_model, & id_level, NULL); l = 0; if (tmp_fbody -> na[m] > -1) { if (g_strcmp0 (get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name, get_active_atom (tmp_fbody -> ma[m][0], tmp_fbody -> a[m][0]) -> name) == 0) { l = 1; vdw_id = tmp_fbo -> id; a_ato = 1; } } gtk_tree_store_set (add_model, & id_level, 0, k+1, 1, exact_name(get_active_atom (tmp_fbo -> ma[0][0], tmp_fbo -> a[0][0]) -> name), 3, l, -1); sel_at[0][k] = tmp_fbo -> id; for (j=0; j na[0]; j++) { gtk_tree_store_append (add_model, & atom_level, & id_level); gtk_tree_store_set (add_model, & atom_level, 0, 0, 2, get_active_field_molecule(tmp_fbo -> ma[0][j]) -> name, 3, 0, -1); } } k ++; } if (tmp_fbo -> next != NULL) tmp_fbo = tmp_fbo -> next; } } else { val_at = allocfloat (tmp_fmol -> mol -> natoms); if (active_sel == 5) { k = 1; m = 0; } else { k = 0; m = 1; } for (i=0; i mol -> natoms; i++) { add = TRUE; if (tmp_fpmf -> num[k] > 0) { for (l=0; l num[k]; l++) { if (i == tmp_fpmf -> list[k][l]) { add = FALSE; break; } } } if (add) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); gtk_tree_store_append (add_model, & id_level, NULL); n = 0; if (tmp_fpmf -> num[m] > 0) { for (l=0; l num[m]; l++) { if (i == tmp_fpmf -> list[m][l]) { n = 1; break; } } } val_at[i] = tmp_fat -> mass; sel_at[0][i] = n; gtk_tree_store_set (add_model, & id_level, 0, i+1, 1, 0, 3, val_at[i], 4, 0, -1); if (sel_at[0][i]) { field_molecule_select_atom_id (GTK_CELL_RENDERER_TOGGLE(ato_cell[4]), gtk_tree_path_to_string(gtk_tree_model_get_path(GTK_TREE_MODEL(add_model), & id_level)), & add_model); } for (l=0; l< tmp_fmol -> multi; l++) { gtk_tree_store_append (add_model, & atom_level, & id_level); n = tmp_fat -> list[tmp_fmol -> atoms_id[i][l].b]; str = g_strdup_printf ("%s%d", exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp]), n+1); gtk_tree_store_set (add_model, & atom_level, 0, -(i+1), 1, tmp_fmol -> fragments[l]+1, 2, str, -1); g_free (str); } } } } g_object_unref (add_model); if (active_sel < 2) { j = tmp_fat -> num/tmp_fmol -> multi; } else { j = num_field_objects; } i = ((j+1)*37 < 500) ? (j+1)*37 : 500; if (active_sel > 10) q = 1; GtkWidget * vbox = dialog_get_content_area (amol); GtkWidget * scrollsets = create_scroll (vbox, 320+q*100, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, add_tree); if (q && active_sel < 11) { str = g_strdup_printf (" (1) if all 0.0 then atomic weight(s) will be used by DL-POLY"); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } if (active_sel < 2) { str = g_strdup_printf ("The atom(s) above will be described\n" "in the force field using the parameters\n" "of the %s field atom.\n", tmp_fat -> name); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.5, 0.5), FALSE, FALSE, 0); g_free (str); } show_the_widgets (amol); switch (active_sel) { case 0: run_this_gtk_dialog (amol, G_CALLBACK(run_add_atom_dialog), NULL); break; default: run_this_gtk_dialog (amol, G_CALLBACK(run_select_atom_dialog), GINT_TO_POINTER(active_sel)); if (active_sel == 1) { str = g_strdup_printf ("%d atom(s)", tmp_fat -> frozen); if (but) gtk_button_set_label (but, str); } break; } g_free (sel_at); if (q && active_sel < 11) g_free (val_at); } GtkWidget * av_lgt; /*! \fn void update_field_dist (float v) \brief update field distance widget \param v the new value */ void update_field_dist (float v) { gchar * str; if (v < 0.0) { str = g_strdup_printf (" "); } else { str = g_strdup_printf ("%8.3f", v); } gtk_label_set_text (GTK_LABEL(av_lgt), str); gtk_label_set_use_markup (GTK_LABEL(av_lgt), TRUE); } /*! \fn gchar * body_str (int a) \brief get body potential string name \param a the type of potential */ gchar * body_str (int a) { int i, j; j = body_at (a); gchar * str = g_strdup_printf ("%s ", felemts[a+MOLIMIT+1]); for (i=0; i na[i] > -1) { str = g_strdup_printf ("%s%s", str, get_active_atom (tmp_fbody -> ma[i][0], tmp_fbody -> a[i][0]) -> name); } if (i < j-1 && j > 1) str = g_strdup_printf ("%s - ", str); } str = g_strdup_printf ("%s", str); return str; } /*! \fn G_MODULE_EXPORT void selection_button (GtkButton * but, gpointer data) \brief select field object callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void selection_button (GtkButton * but, gpointer data) { select_atom_id_from_fied_molecule (NULL, data); int i, j, k, l, m, n, o, p, q, r; i = GPOINTER_TO_INT(data); gchar * stra, * strb; if (i == 2 || i == 3) { j=i-2; if (! tmp_fshell -> ia[j]) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); } else { k = tmp_fshell -> ia[j]-1; l = tmp_fmol -> atoms_id[k][0].a; stra = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (tmp_fmol -> id, l) -> sp]), tmp_fshell -> ia[j]); strb = g_strdup_printf (APPLY); } } else if (i == 4 || i == 5) { j=i-4; if (! tmp_fcons -> ia[j]) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); } else { k = tmp_fcons -> ia[j] - 1; l = tmp_fmol -> atoms_id[k][0].a; stra = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (tmp_fmol -> id, l) -> sp]), tmp_fcons -> ia[j]); strb = g_strdup_printf (APPLY); } } else if (i == 6 || i == 7) { j=i-6; if (! tmp_fpmf -> num[j]) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf ("%d atom(s)", tmp_fpmf -> num[j]); strb = g_strdup_printf (APPLY); } } else if (i == 8) { j=0; if (! tmp_frig -> num) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf ("%d atom(s)", tmp_frig -> num); strb = g_strdup_printf (APPLY); } } else if (i == 9) { j=0; if (! tmp_ftet -> num) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); } else { k = tmp_fmol -> atoms_id[tmp_ftet -> num - 1][0].a; stra = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (tmp_fmol -> id, k) -> sp]), tmp_ftet -> num); strb = g_strdup_printf (APPLY); } } else if (i == 11 || i == 12 || i == 13 || i == 14) { j=i-11; if (tmp_fbody -> na[j] < 0) { stra = g_strdup_printf ("Not picked yet !"); strb = g_strdup_printf (DELETEB); } else { stra = g_strdup_printf ("%s", exact_name(get_active_atom (tmp_fbody -> ma[j][0]-1, tmp_fbody -> a[j][0]) -> name)); strb = g_strdup_printf (APPLY); } if (tmp_fbody -> bd == 2) { cross_box = destroy_this_widget (cross_box); cross_box = combo_cross (tmp_fbody); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cross_hbox, cross_box, FALSE, FALSE, 0); gtk_widget_show (cross_box); } if (tmp_fbody -> na[j] < 0) { widget_set_sensitive (cross_vbox, FALSE); } else { widget_set_sensitive (cross_vbox, TRUE); gtk_combo_box_set_active (GTK_COMBO_BOX(cross_box), 0); } gtk_label_set_text (GTK_LABEL(body_lab), body_str (tmp_fbody -> bd)); gtk_label_set_use_markup (GTK_LABEL(body_lab), TRUE); } set_image_from_icon_name (img_but[j], strb); g_free (strb); if (i == 4 || i == 5) { if (tmp_fcons -> ia[0] && tmp_fcons -> ia[1]) { // update_distance tmp_fcons -> av = 0.0; for (k=0; k multi; k++) { l = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][k].a; m = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][k].b; n = get_active_atom (tmp_fmol -> id, l) -> list[m]; l = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][k].a; m = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][k].b; o = get_active_atom (tmp_fmol -> id, l) -> list[m]; tmp_fcons -> av += distance_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][n], & tmp_proj -> atoms[0][o]).length; } tmp_fcons -> av /= tmp_fmol -> multi; } update_field_dist (tmp_fcons -> av); } else if (i == 6 || i == 7) { if (tmp_fpmf -> num[0] > 0 && tmp_fpmf -> num[1] > 0) { atom at[2][tmp_fmol -> multi]; float ma[2][tmp_fmol -> multi]; gboolean all_zero = TRUE; float v; for (k=0; k<2; k++) { for (l=0; l num[k]; l++) { if (tmp_fpmf -> weight[k][l] != 0.0) { all_zero = FALSE; break; } } if (! all_zero) break; } for (k=0; k<2; k++) { for (l=0; l multi; l++) { ma[k][l] = 0.0; at[k][l].x = 0.0; at[k][l].y = 0.0; at[k][l].z = 0.0; } } for (k=0; k<2; k++) { for (l=0; l num[k]; l++) { m = tmp_fpmf -> list[k][l]; for (n=0; n multi; n++) { o = tmp_fmol -> atoms_id[m][n].a; p = tmp_fmol -> atoms_id[m][n].b; q = get_active_atom (tmp_fmol -> id, o) -> list[p]; if (all_zero) { r = tmp_proj -> atoms[0][q].sp; v = tmp_proj -> chemistry -> chem_prop[CHEM_M][r]; } else { v = tmp_fpmf -> weight[k][l]; } at[k][n].x += v * tmp_proj -> atoms[0][q].x; at[k][n].y += v * tmp_proj -> atoms[0][q].y; at[k][n].z += v * tmp_proj -> atoms[0][q].z; ma[k][n] += v; } } } v = 0.0; for (n=0; n multi; n++) { for (k=0; k<2; k++) { at[k][n].x /= ma[k][n]; at[k][n].y /= ma[k][n]; at[k][n].z /= ma[k][n]; } v += distance_3d (& tmp_proj -> cell, 0, & at[0][n], & at[1][n]).length; } tmp_fpmf -> av = v / tmp_fmol -> multi; } update_field_dist (tmp_fpmf -> av); } gtk_button_set_label (but, stra); gtk_widget_set_size_request ((GtkWidget *)but, 150, -1); g_free (stra); } /*! \fn G_MODULE_EXPORT void changed_atom_combo (GtkComboBox * box, gpointer data) \brief change atom \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_atom_combo (GtkComboBox * box, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); j = gtk_combo_box_get_active (box); switch (i) { case 0: widget_set_sensitive (afftype, (j) ? TRUE : FALSE); k = -1; if (tmp_fat -> afid > -1) { for (k=0; k sp]; k++) { if (atoms_id_list[tmp_fat -> sp][k] == tmp_fat -> afid) break; } } gtk_combo_box_set_active (GTK_COMBO_BOX(afftype), k+1); if (j) { tmp_fat -> mass =(tmp_fat -> afid < 0) ? tmp_proj -> chemistry -> chem_prop[CHEM_M][tmp_fat -> sp] : get_force_field_atom_mass (tmp_fat -> sp, tmp_fat -> afid); } else { tmp_fat -> mass = tmp_proj -> chemistry -> chem_prop[CHEM_M][tmp_fat -> sp]; } break; case 1: if (j > 0) { tmp_fat -> afid = atoms_id_list[tmp_fat -> sp][j - 1]; } else { tmp_fat -> afid = - 1; } tmp_fat -> mass = get_force_field_atom_mass (tmp_fat -> sp, j-1); check_atom_for_updates (); break; } } /*! \fn gchar * get_body_element_name (field_nth_body * body, int aid, int nbd) \brief get field body potential element name \param body the field body potential \param aid the atom id, if any \param nbd the body potential id */ gchar * get_body_element_name (field_nth_body * body, int aid, int nbd) { int i, j; i = body -> ma[aid][0]; if (! nbd) { return g_strdup_printf ("%s", get_active_atom (i, body -> a[aid][0]) -> name); } else { j = get_active_shell (i, body -> a[aid][0]-nbd+1) -> ia[0]; return g_strdup_printf ("%s_sh", get_active_atom (i, j) -> name); } } /*! \fn gboolean body_identicals (field_nth_body * body, int nbd, int * na, int ** ma, int ** ba) \brief are these non bonded potentials identicals ? \param body the field non bonded property \param nbd number of distinct interactions \param na number of atoms (0 = 1st pot, 1 = 2nd pot) \param ma 1st potential data \param ba 2nd potential data */ gboolean body_identicals (field_nth_body * body, int nbd, int * na, int ** ma, int ** ba) { gchar * stra, * strb, * strc, * strd; int i, j; stra = get_body_element_name (body, 0, 0); strb = get_body_element_name (body, 1, 0); i = ma[0][0]; if (ba[0][0] < nbd) { strc = g_strdup_printf ("%s", get_active_atom (i, ba[0][0]) -> name); } else { j = get_active_shell (i, ba[0][0]-nbd) -> ia[0]; strc = g_strdup_printf ("%s_sh", get_active_atom (i, j) -> name); } i = ma[1][0]; if (ba[1][0] < nbd) { strd = g_strdup_printf ("%s", get_active_atom (i, ba[1][0]) -> name); } else { j = get_active_shell (i, ba[1][0]-nbd) -> ia[0]; strd = g_strdup_printf ("%s_sh", get_active_atom (i, j) -> name); } gboolean res = FALSE; if (g_strcmp0(stra, strc) == 0 && g_strcmp0(strb, strd) == 0) res = TRUE; if (g_strcmp0(stra, strd) == 0 && g_strcmp0(strb, strc) == 0) res = TRUE; // g_debug ("stra= %s, strb= %s, strc= %s, strd= %s:: res= %d", stra, strb, strc, strd, res); g_free (stra); g_free (strb); g_free (strc); g_free (strd); return res; } /*! \fn int get_num_vdw_max () \brief Get the number of field shell interactions */ int get_num_vdw_max () { int i; field_molecule * molff; field_shell * shellff; molff = tmp_field -> first_molecule; i = 0; while (molff) { i += molff -> atoms; shellff = molff -> first_shell; while (shellff) { if (shellff -> use && shellff -> vdw && shellff -> ia[0] > -1) i ++; shellff = shellff -> next; } molff = molff -> next; } return i; } /*! \fn void adjust_vdw_interactions (gboolean add_shell) \brief adjust VdW interactions \param add_shell update field shells */ void adjust_vdw_interactions (gboolean add_shell) { int i, j, k, l, m, n; field_molecule * molff; field_atom* atff; field_shell * shellff; field_nth_body * bodyff; i = get_num_vdw_max (); m = i * (i+1) / 2; n = (add_shell) ? i * (i-1) / 2 : (i+1) * (i+2) / 2; bodyff = get_active_body (0, 0); while (bodyff) { for (j=0; j<2; j++) { k = bodyff -> ma[j][0]; if (bodyff -> a[j][0] >= n) { bodyff -> a[j][0] -= n; bodyff -> a[j][0] += m; } } bodyff = bodyff -> next; } if (add_shell) { gboolean add_vdw; gchar * str; gchar ** to_be_vdw = g_malloc (i*sizeof*to_be_vdw); int * vdw_mlist = allocint (i); int ** vdw_aids = allocdint (i,i); int ** vdw_mids = allocdint (i,i); int vdw_na[2]; int * vdw_a[2], * vdw_ma[2]; int nbd = m; molff = tmp_field -> first_molecule; l = 0; while (molff) { atff = molff -> first_atom; while (atff) { add_vdw = TRUE; for (k=0; k name) == 0) { add_vdw = FALSE; vdw_mlist[k] ++; vdw_mids[k][vdw_mlist[k]] = molff -> id; vdw_aids[k][vdw_mlist[k]] = atff -> id; break; } } if (add_vdw) { to_be_vdw[k] = g_strdup_printf ("%s", atff -> name); vdw_mids[k][0] = molff -> id; vdw_aids[k][0] = atff -> id; l ++; } atff = atff -> next; } shellff = molff -> first_shell; while (shellff) { if (shellff -> use && shellff -> vdw && shellff -> ia[0] > -1) { add_vdw = TRUE; atff = get_active_atom (molff -> id, shellff -> ia[0]); str = g_strdup_printf ("%s_sh", atff -> name); for (k=0; k id; vdw_aids[k][vdw_mlist[k]] = shellff -> id + nbd; break; } } if (add_vdw) { to_be_vdw[k] = g_strdup_printf ("%s", str); vdw_mids[k][0] = molff -> id; vdw_aids[k][0] = shellff -> id + nbd; l ++; } g_free (str); } shellff = shellff -> next; } molff = molff -> next; } i = tmp_field -> nbody[0]; j = 0; for (k=0; k next; } if (! bodyff) { bodyff = get_active_body (i+j, 0); bodyff -> next = init_field_nth_body (i+j, 0, vdw_na, vdw_ma, vdw_a); bodyff -> next -> prev = bodyff; j ++; } } for (m=0; m next; } if (! bodyff) { bodyff = get_active_body (i+j, 0); bodyff -> next = init_field_nth_body (i+j, 0, vdw_na, vdw_ma, vdw_a); bodyff -> next -> prev = bodyff; j ++; } } } tmp_field -> nbody[0] += j; } else { atff = get_active_atom (tmp_fmol -> id, tmp_fshell -> ia[0]); gchar * str = g_strdup_printf ("%s_sh", atff -> name); gchar * stra, * strb; bodyff = get_active_body (0, 0); i = 0; while (bodyff) { stra = get_body_element_name (bodyff, 0, m+1); strb = get_body_element_name (bodyff, 1, m+1); if (g_strcmp0(str,stra) == 0 || g_strcmp0(str,strb) == 0) { if (bodyff -> next) { bodyff -> prev -> next = bodyff -> next; bodyff -> next -> prev = bodyff -> prev; } else { bodyff = bodyff -> prev; g_free (bodyff -> next); bodyff -> next = NULL; } i ++; } g_free (stra); g_free (strb); bodyff = bodyff -> next; } g_free (str); tmp_field -> nbody[0] -= i; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data) \brief VdW in shell toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void shell_in_vdw (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void shell_in_vdw (GtkToggleButton * but, gpointer data) \brief VdW in shell toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void shell_in_vdw (GtkToggleButton * but, gpointer data) #endif { #ifdef GTK4 tmp_fshell -> vdw = gtk_check_button_get_active (but); #else tmp_fshell -> vdw = gtk_toggle_button_get_active (but); #endif adjust_vdw_interactions (tmp_fshell -> vdw); } dint rep; gchar * rep_atom_name; /*! \fn G_MODULE_EXPORT void run_edit_parameters (GtkDialog * dialog, gint response_id, gpointer data) \brief edit field parameter - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_edit_parameters (GtkDialog * dialog, gint response_id, gpointer data) { if (rep.a > 6 && rep.a < MOLIMIT) { adjust_field_prop (rep.a-7, rep.b, tmp_fprop, edit_atids, tmp_fprop -> key); } else if (rep.a == 1) { if (g_strcmp0 (rep_atom_name, tmp_fat -> name) != 0) { // Atom name's change, need to update non bonded interactions compare_non_bonded (tmp_fat -> name); } g_free (rep_atom_name); rep_atom_name = NULL; } destroy_this_dialog (dialog); } /*! \fn void edit_parameters (int f, int id) \brief edit field parameter - creating the dialog \param f the type of parameter to edit \param id the field molecule id, if any */ void edit_parameters (int f, int id) { gchar * str = g_strdup_printf ("%s parameter(s)", felemts[f+1]); GtkWidget * dialog = dialogmodal(str, GTK_WINDOW(field_assistant)); GtkWidget * lab; GtkWidget * entry; GtkWidget * but; GtkWidget * hbox; GtkWidget * combo; GtkWidget * box = dialog_get_content_area (dialog); gboolean show_it; gboolean use_it; gchar * cs_name[3]={"Core atom: ", "Shell atom: ", "Selection: "}; gchar * cs_param[4]={"Mass:", "Charge:", "k2 ", "k4 "}; gchar * cs_unit[4]={"g mol-1", " ", "Å-2", "Å-4"}; gchar * co_name[4]={"First atom: ", "Second atom: ", "Third atom: ", "Fourth atom: "}; gchar * pm_name[2]={"First unit: ", "Second unit: "}; int i, j, k, l, m; float v; gchar * ba; is_moy = 1; show_it = use_it = FALSE; for (i=0; i<2; i++) ff_p_combo[i] = NULL; if (f < MOLIMIT) { i = gtk_combo_box_get_active(GTK_COMBO_BOX(combo_mol[f-1])); lab = markup_label (g_strdup_printf ("\tMolecule: \t%s", get_active_field_molecule(i) -> name), -1, 30, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); tmp_fmol = get_active_field_molecule (i); } switch (f) { case 1: // Atom edit tmp_fat = get_active_atom(i, id); rep_atom_name = g_strdup_printf("%s", tmp_fat -> name); lab = markup_label (g_strdup_printf ("\tAtom: \t\t%s", rep_atom_name), -1, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Element:"); lab = markup_label (str, 120, 30, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); str = g_strdup_printf ("%s", exact_name(tmp_proj -> chemistry -> element[tmp_fat -> sp])); lab = markup_label (str, -1, -1, 0.5, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Field parameters:"); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); combo = create_combo (); combo_text_append (combo, "Manual"); combo_text_append (combo, "Automatic"); gtk_combo_box_set_active (GTK_COMBO_BOX(combo), (tmp_fat -> afid > -1) ? 1 : 0); widget_set_sensitive (combo, atoms_id[tmp_fat -> sp]); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(changed_atom_combo), GINT_TO_POINTER(0)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Force field type *:"); lab = markup_label (str, 120, 30, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); afftype = create_combo (); combo_text_append (afftype, "None"); k = 0; for (i=0; i sp]; i++) { j = atoms_id_list[tmp_fat -> sp][i]; str = g_strdup_printf ("%s", exact_name(ff_atoms[j][2])); if (g_strcmp0 (ff_atoms[j][3], " ") != 0) str = g_strdup_printf ("%s : %s", str, ff_atoms[j][3]); combo_text_append (afftype, str); g_free (str); if (atoms_id_list[tmp_fat -> sp][i] == tmp_fat -> afid) k = i+1; } gtk_combo_box_set_active (GTK_COMBO_BOX(afftype), k); g_signal_connect (G_OBJECT(afftype), "changed", G_CALLBACK(changed_atom_combo), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, afftype, FALSE, FALSE, 0); widget_set_sensitive (afftype, (tmp_fat -> afid > -1) ? TRUE : FALSE); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Name: "); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 100, 15, FALSE, GINT_TO_POINTER(-1)); update_entry_text (GTK_ENTRY(entry), tmp_fat -> name); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Mass: "); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 100, 15, FALSE, GINT_TO_POINTER(0)); update_entry_double (GTK_ENTRY(entry), tmp_fat -> mass); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Charge: "); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), tmp_fat -> charge); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Frozen: "); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); str = g_strdup_printf ("%d atom(s)", tmp_fat -> frozen); but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(select_atom_id_from_fied_molecule), GINT_TO_POINTER(1)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); break; case 2: // Shell edit tmp_fshell = get_active_shell (i, id); str = g_strdup_printf ("\tCore-Shell N°%d", tmp_fshell -> id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); for (k=0; k<2; k++) { hbox = create_hbox (0); lab = markup_label (cs_name[k], 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (! tmp_fshell -> ia[k]) { str = g_strdup_printf ("Not picked yet !"); img_but[k] = stock_image (DELETEB); } else { j = tmp_fshell -> ia[k] - 1; l = tmp_fmol -> atoms_id[j][0].a; str = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (i, l) -> sp]), tmp_fshell -> ia[k]); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(k+2)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); } /*for (k=0; k<3; k++) { shell_hbox[k] = create_hbox (0); lab = markup_label (cs_name[k], 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], lab, FALSE, FALSE, 10); if ((k < 2 && tmp_fshell -> ia[k] == -1) || (k == 2 && ! tmp_fshell -> ib)) { str = g_strdup_printf ("Not picked yet !"); img_but[k] = stock_image (DELETEB); } else { if (k < 2) { str = g_strdup_printf ("Selected !"); } else { str = g_strdup_printf ("%d atom(s) selected !", tmp_fshell -> ia[1]-1); } img_but[k] = stock_image (APPLY); } if (k < 2) { shell_cbox[k] = create_combo (); combo_text_append (shell_cbox[k], "Not picked yet !"); switch (k) { case 0: tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { combo_text_append (shell_cbox[k], tmp_fat -> name); tmp_fat = tmp_fat -> next; } break; case 1: combo_text_append (shell_cbox[k], "All atoms"); combo_text_append (shell_cbox[k], "Selected atoms"); break; } l = (! k) ? tmp_fshell -> ia[k]+1 : (tmp_fshell -> ia[k] < 1) ? tmp_fshell -> ia[k]+1 : 2; gtk_combo_box_set_active (GTK_COMBO_BOX(shell_cbox[k]), l); g_signal_connect (G_OBJECT(shell_cbox[k]), "changed", G_CALLBACK(changed_shell_combo), GINT_TO_POINTER(k)); gtk_widget_set_size_request (shell_cbox[k], 150, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], shell_cbox[k], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, shell_hbox[k], FALSE, FALSE, 0); } else { shell_but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(2)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], shell_but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shell_hbox[k], img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, shell_hbox[k], FALSE, FALSE, 0); } g_free (str); } */ for (k=0; k<4; k++) { hbox = create_hbox (0); lab = markup_label (cs_param[k], 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 150, 15, FALSE, GINT_TO_POINTER(2+k)); v = (! k) ? tmp_fshell -> m : (k == 1) ? tmp_fshell -> z : (k == 2) ? tmp_fshell -> k2 : tmp_fshell -> k4; update_entry_double (GTK_ENTRY(entry), v); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); if (k < 2) { str = g_strdup_printf ("%s", cs_unit[k]); } else { str = g_strdup_printf ("%s %s", fkeysw[activef][0][tmp_field -> energy_unit], cs_unit[k]); } lab = markup_label (str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); lab = markup_label("Use non-bonded: ", 185, 40, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, tmp_fshell -> vdw, G_CALLBACK(shell_in_vdw), NULL), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_fshell -> show; use_it = tmp_fshell -> use; break; case 3: // Constraint edit tmp_fcons = get_active_constraint (i, id); str = g_strdup_printf ("\tBond constraint N°%d", tmp_fcons -> id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); for (k=0; k<2; k++) { hbox = create_hbox (0); lab = markup_label (co_name[k], 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (! tmp_fcons -> ia[k]) { str = g_strdup_printf ("Not picked yet !"); img_but[k] = stock_image (DELETEB); } else { j = tmp_fcons -> ia[k]-1; l = tmp_fmol -> atoms_id[j][0].a; str = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (i, l) -> sp]), tmp_fcons -> ia[k]); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(k+4)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); str = g_strdup_printf ("Av. distance (1): "); lab = markup_label (str, 100, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); av_lgt = markup_label ("", 150, 50, 0.5, 0.5); update_field_dist (tmp_fcons -> av); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, av_lgt, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Length: "); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 150, 15, FALSE, GINT_TO_POINTER(6)); update_entry_double (GTK_ENTRY(entry), tmp_fcons -> length); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_fcons -> show; use_it = tmp_fcons -> use; break; case 4: // Pmf edit tmp_fpmf = get_active_pmf (i, id); str = g_strdup_printf ("\tMean force potential N°%d", tmp_fpmf -> id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); for (k=0; k<2; k++) { hbox = create_hbox (0); lab = markup_label (pm_name[k], 100, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (tmp_fpmf -> num[k] == 0) { str = g_strdup_printf ("Not picked yet !"); img_but[k] = stock_image (DELETEB); } else { str = g_strdup_printf ("%d atom(s)", tmp_fpmf -> num[k]); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(k+6)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } hbox = create_hbox (0); str = g_strdup_printf ("Av. d1-2 (1): "); lab = markup_label (str, 100, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); av_lgt = markup_label ("", 150, 50, 0.5, 0.5); update_field_dist (tmp_fpmf -> av); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, av_lgt, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Length: "); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); entry = create_entry (G_CALLBACK(update_atom_parameter), 150, 15, FALSE, GINT_TO_POINTER(7)); update_entry_double (GTK_ENTRY(entry), tmp_fpmf -> length); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf ("[Å]"); lab = markup_label (str, -1, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_fpmf -> show; use_it = tmp_fpmf -> use; break; case 5: // Rigid edit tmp_frig = get_active_rigid (i, id); str = g_strdup_printf ("\tRigid unit N°%d", id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Atom(s): "); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (tmp_frig -> num == 0) { str = g_strdup_printf ("Not picked yet !"); img_but[0] = stock_image (DELETEB); } else { str = g_strdup_printf ("%d atom(s)", tmp_frig -> num); img_but[0] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(8)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[0], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_frig -> show; use_it = tmp_frig -> use; break; case 6: // Tethered tmp_ftet = get_active_tethered (i, id); str = g_strdup_printf ("\tTethered atom N°%d", id+1); lab = markup_label (str, 300, 50, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); hbox = create_hbox (0); str = g_strdup_printf ("Atom: "); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (! tmp_ftet -> num) { str = g_strdup_printf ("Not picked yet !"); img_but[0] = stock_image (DELETEB); } else { k = tmp_fmol -> atoms_id[tmp_ftet -> num-1][0].a; str = g_strdup_printf ("%s - %d", exact_name(tmp_proj -> chemistry -> label[get_active_atom (i, k) -> sp]), tmp_ftet -> num); img_but[0] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(9)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[0], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); show_it = tmp_ftet -> show; use_it = tmp_ftet -> use; break; case SEXTERN: tmp_fext = get_active_external (id); body_lab = markup_label (field_str(tmp_fext -> key), 250, 50, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, body_lab, FALSE, FALSE, 0); use_it = tmp_fext -> use; break; default: if (f < MOLIMIT) { // Bond, angle, dihedral, improper, inversion edit tmp_fstr = get_active_struct (f-7, i, id); m = struct_id (f); str = g_strdup_printf ("\t%s type N°%d\n\tField atoms: ", mo_title[f-7], id+1); for (k=0; k and ", str); str = g_strdup_printf ("%s%s", str, get_active_atom (i, tmp_fstr -> aid[k]) -> name); if (m > 2 && k < m-1) str = g_strdup_printf ("%s, ", str); } str = g_strdup_printf ("%s", str); edit_atids = allocint (m); gtk_tree_model_get (GTK_TREE_MODEL(field_model[f]), & field_iter, 0, & is_moy, -1); if (! is_moy) { str = g_strdup_printf ("%s\n\tBetween atoms: ", str); for (k=0; k and ", str); str = g_strdup_printf ("%s%s", str, ba); if (m > 2 && k < m-1) str = g_strdup_printf ("%s, ", str); } str = g_strdup_printf ("%s", str); if (tmp_fstr -> other) { tmp_fprop = get_active_prop_using_atoms (tmp_fstr -> other, m, edit_atids); if (! tmp_fprop) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop -> next) tmp_fprop = tmp_fprop -> next; tmp_fprop -> next = duplicate_field_prop (tmp_fstr -> def, f-7); tmp_fprop = tmp_fprop -> next; for (k=0; k aid[k] = edit_atids[k]; } } else { tmp_fstr -> other = duplicate_field_prop (tmp_fstr -> def, f-7); for (k=0; k other -> aid[k] = edit_atids[k]; tmp_fprop = tmp_fstr -> other; } } else { for (l=0; l def; } add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label (str, -1, (is_moy) ? 70 : 100, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); show_it = tmp_fprop -> show; use_it = tmp_fprop -> use; } else { l = f - MOLIMIT; tmp_fbody = get_active_body (id, l); body_lab = markup_label (body_str (tmp_fbody -> bd), 250, 50, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, body_lab, FALSE, FALSE, 0); if (l > 0) { for (k=0; k< body_at(l); k++) { hbox = create_hbox (0); if (l == 2) { lab = markup_label ("Tersoff atom: ", 100, -1, 0.0, 0.5); } else { lab = markup_label (co_name[k], 100, -1, 0.0, 0.5); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); if (tmp_fbody -> na[k] < 0) { str = g_strdup_printf ("Not picked yet !"); img_but[k] = stock_image (DELETEB); } else { str = g_strdup_printf ("%s", get_active_atom (tmp_fbody -> ma[k][0], tmp_fbody -> a[k][0]) -> name); img_but[k] = stock_image (APPLY); } but = create_button (str, IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(selection_button), GINT_TO_POINTER(11+k)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_but[k], FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } } show_it = tmp_fbody -> show; use_it = tmp_fbody -> use; } break; } if (f < SEXTERN) { hbox = create_hbox (0); lab = markup_label("Visualize in the model: ", (f == 1) ? 150 : 185, 40, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, show_it, G_CALLBACK(visualize_it), GINT_TO_POINTER(f)), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } if (f == 1) { str = g_strdup_printf ("* this will be used to adjust bonding, angles, etc ... accordingly,\n" " providing that some parameters can be found in the force field data.\n" " Please note that comments are directly imported from the force field file."); lab = markup_label (str, -1, 75, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); } if (f > 1) { hbox = create_hbox (0); lab = markup_label("Use to create force field: ", 185, 40, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, use_it, G_CALLBACK(select_it), GINT_TO_POINTER(f)), FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); if (f > 5) { if (f > 6 && f < 16) { if (f != 15 || tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { hbox = create_hbox (0); gchar * funits[5] ={"Ev", "kcal mol-1", "kJ mol-1", "K B-1", "DL_POLY internal units"}; str = g_strdup_printf ("Field parameters *:"); lab = markup_label (str, 120, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_field_prop_combo (f, is_moy), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); str = g_strdup_printf ("* Available parameters with matching chemical species,\n" " %s force field energy related parameters in: %s \n" " if required conversion to FIELD file energy unit will be performed upon selection.\n" " Please note that comments are directly imported from the force field file.\n", field_acro[tmp_field -> type], funits[ff_unit]); lab = markup_label (str, -1, 75, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, lab, FALSE, FALSE, 0); } } hbox = create_hbox (0); str = g_strdup_printf ("Potential: "); lab = markup_label (str, 100, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); field_key_combo = create_combo (); for (j=0; j key); break; case SEXTERN: gtk_combo_box_set_active (GTK_COMBO_BOX(field_key_combo), tmp_fext -> key); break; default: if (f < MOLIMIT) { gtk_combo_box_set_active (GTK_COMBO_BOX(field_key_combo), tmp_fprop -> key); } else { // non nonded gtk_combo_box_set_active (GTK_COMBO_BOX(field_key_combo), tmp_fbody -> key); } break; } g_signal_connect (G_OBJECT(field_key_combo), "changed", G_CALLBACK(changed_field_key_combo), GINT_TO_POINTER(f)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, param_box, p_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, param_box, FALSE, FALSE, 5); } else if (f == 3) { hbox = create_hbox (0); str = g_strdup_printf (" (1) average distance between the 2 atoms\n" "\tas measured in the 3D model"); lab = markup_label (str, 320, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } else if (f == 4) { hbox = create_hbox (0); str = g_strdup_printf (" (1) average distance between the barycenters\n" "\tof units 1 and 2 as measured in the model"); lab = markup_label (str, 320, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); } } rep.a = f; rep.b = m; g_signal_connect (G_OBJECT(dialog), "response", G_CALLBACK(run_edit_parameters), NULL); show_the_widgets (dialog); if (f == 2) { if (tmp_fshell -> ia[0] < 0 || tmp_fshell -> ia[1] < 1) gtk_widget_hide (shell_hbox[2]); if (tmp_fshell -> ia[0] < 0) widget_set_sensitive (shell_hbox[1], FALSE); } dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } /*! \fn void update_tersoffs (int id, int key) \brief update non bonded potential \param id potential id \param key potenntial type */ void update_tersoffs (int id, int key) { int i; field_nth_body * bod = tmp_field -> first_body[2]; for (i=0; i nbody[2]; i++) { if (i != id) { if (bod -> key != key) { bod -> key = key; bod -> val = NULL; bod -> val = allocfloat (fvalues[activef][MOLIMIT-4][bod -> key]); } } if (bod -> next != NULL) bod = bod -> next; } if (key && tmp_field -> cross != NULL) { g_free (tmp_field -> cross); tmp_field -> cross = NULL; } } /*! \fn void check_tersoffs (int id, int key) \brief check non bonded potential \param id potential id \param key potential type */ void check_tersoffs (int id, int key) { int i, j; if (change_tersoff && id != -1) update_tersoffs (id, key); if (! key) { if (tmp_field -> cross) { g_free (tmp_field -> cross); tmp_field -> cross = NULL; } if (cross) { tmp_field -> cross = g_malloc (tmp_field -> nbody[2]*sizeof*tmp_field -> cross); for (i=0; i nbody[2]; i++) { tmp_field -> cross[i] = g_malloc (tmp_field -> nbody[2]*sizeof*tmp_field -> cross[i]); for (j=0; j nbody[2]; j++) tmp_field -> cross[i][j] = duplicate_double (3, cross[i][j]); } } else { tmp_field -> cross = alloctdouble (tmp_field -> nbody[2], tmp_field -> nbody[2], 3); } } } /*! \fn G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) \brief edit field property callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT (data); gchar * tmp; switch (i) { case 0: if (action == NULL) { tmp_fmol = get_active_field_molecule (row_id); tmp = g_strdup_printf ("Please enter name for new molecule N°%d", tmp_field -> molecules); tmp_fmol -> name = g_strdup_printf("MOL-%d", i); tmp = cask (tmp, "Molecule name:", 0, tmp_fmol -> name, field_assistant); if (tmp != NULL) { tmp_fmol -> name = g_strdup_printf ("%s", tmp); g_free (tmp); } } else { tmp_fmol = get_active_field_molecule (row_id); tmp = g_strdup_printf ("Please enter name for molecule N°%d", row_id+1); tmp = cask (tmp, "Molecule name:", 0, tmp_fmol -> name, field_assistant); if (tmp != NULL) { tmp_fmol -> name = g_strdup_printf ("%s", tmp); g_free (tmp); clean_up_molecules_info (FALSE); } } break; default: if (i == MOLIMIT+2) { num_body_d = tmp_field -> nbody[2]; cross = NULL; if (tmp_field -> cross != NULL) { cross = g_malloc (tmp_field -> nbody[2]*sizeof*cross); for (j=0; j nbody[2]; j++) { cross[j] = g_malloc (tmp_field -> nbody[2]*sizeof*cross[j]); for (k=0; k nbody[2]; k++) cross[j][k] = duplicate_double (3, tmp_field -> cross[j][k]); } } change_tersoff = FALSE; } edit_parameters (i, row_id); if (i == MOLIMIT+2) check_tersoffs (tmp_fbody -> id, tmp_fbody -> key); update_field_trees (); break; } } /*! \fn G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) \brief add field property callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) { int i, j, k, l, m; gboolean save_it; i = GPOINTER_TO_INT (data); field_molecule * fmol; if (i < MOLIMIT) { j = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_mol[i-1])); tmp_fmol = fmol = get_active_field_molecule (j); } if (i == 2) { if (fmol -> first_shell == NULL) { fmol -> first_shell = init_field_shell (fmol -> shells, 0, 0); } else { tmp_fshell = get_active_shell (j, fmol -> shells); tmp_fshell -> next = init_field_shell (fmol -> shells, 0, 0); tmp_fshell -> next -> prev = g_malloc (sizeof*tmp_fshell -> next -> prev); tmp_fshell -> next -> prev = tmp_fshell; } row_id = fmol -> shells; edit_parameters (i, fmol -> shells); if (tmp_fshell -> ia[0] || tmp_fshell -> ia[1]) { fmol -> shells ++; if (! tmp_fshell -> ia[0] || ! tmp_fshell -> ia[1]) tmp_fshell -> use = FALSE; } else { tmp_fshell = get_active_shell (j, fmol -> shells); tmp_fshell -> next = NULL; if (fmol -> shells == 0) fmol -> first_shell = NULL; } } else if (i == 3) { if (fmol -> first_constraint == NULL) { fmol -> first_constraint = init_field_constraint (fmol -> constraints, 0, 0); } else { tmp_fcons = get_active_constraint (j, fmol -> constraints); tmp_fcons -> next = init_field_constraint (fmol -> constraints, 0, 0); tmp_fcons -> next -> prev = g_malloc0 (sizeof*tmp_fcons -> next -> prev); tmp_fcons -> next -> prev = tmp_fcons; } row_id = fmol -> constraints; edit_parameters (i, fmol -> constraints); if (tmp_fcons -> ia[0] || tmp_fcons -> ia[1]) { fmol -> constraints ++; if (! tmp_fcons -> ia[0] || ! tmp_fcons -> ia[1]) tmp_fcons -> use = FALSE; } else { tmp_fcons = get_active_constraint (j, fmol -> constraints); tmp_fcons -> next = NULL; if (fmol -> constraints == 0) fmol -> first_constraint = NULL; } } else if (i == 4) { if (fmol -> first_pmf == NULL) { fmol -> first_pmf = init_field_pmf (fmol -> pmfs, NULL, NULL, NULL); } else { tmp_fpmf = get_active_pmf (j, fmol -> pmfs); tmp_fpmf -> next = init_field_pmf (fmol -> pmfs, NULL, NULL, NULL); tmp_fpmf -> next -> prev = g_malloc0 (sizeof*tmp_fpmf -> next -> prev); tmp_fpmf -> next -> prev = tmp_fpmf; } row_id = fmol -> pmfs; edit_parameters (i, fmol -> pmfs); if (tmp_fpmf -> num[0] > 0 || tmp_fpmf -> num[1] > 0) { fmol -> pmfs ++; if (tmp_fpmf -> length == 0.0 || tmp_fpmf -> num[0] == 0 || tmp_fpmf -> num[1] == 0) tmp_fpmf -> use = FALSE; if (tmp_fpmf -> use) { toviz.c = TRUE; select_object (i, fmol -> pmfs, j); } } else { tmp_fpmf = get_active_pmf (j, fmol -> pmfs); tmp_fpmf -> next = NULL; if (fmol -> pmfs == 0) fmol -> first_pmf = NULL; } } else if (i == 5) { if (fmol -> first_rigid == NULL) { fmol -> first_rigid = init_field_rigid (fmol -> rigids, 0, NULL); } else { tmp_frig = get_active_rigid (j, fmol -> rigids); tmp_frig -> next = init_field_rigid (fmol -> rigids, 0, NULL); tmp_frig -> next -> prev = g_malloc0 (sizeof*tmp_frig -> next -> prev); tmp_frig -> next -> prev = tmp_frig; } row_id = fmol -> rigids; edit_parameters (i, fmol -> rigids); if (tmp_frig -> num > 0) { fmol -> rigids ++; tmp_frig -> use = TRUE; } else { tmp_frig = get_active_rigid (j, fmol -> rigids); tmp_frig -> next = NULL; if (fmol -> rigids == 0) fmol -> first_rigid = NULL; } } else if (i == 6) { if (fmol -> first_tethered == NULL) { fmol -> first_tethered = init_field_tethered (fmol -> tethered, 0); } else { tmp_ftet = get_active_tethered (j, fmol -> tethered); tmp_ftet -> next = init_field_tethered (fmol -> tethered, 0); tmp_ftet -> next -> prev = g_malloc0 (sizeof*tmp_ftet -> next -> prev); tmp_ftet -> next -> prev = tmp_ftet; } row_id = fmol -> tethered; edit_parameters (i, fmol -> tethered); if (tmp_ftet -> num) { fmol -> tethered ++; tmp_ftet -> use = TRUE; } else { tmp_ftet = get_active_tethered (j, fmol -> tethered); tmp_ftet -> next = NULL; if (fmol -> tethered == 0) fmol -> first_tethered = NULL; } } else if (i == SEXTERN) { if (tmp_field -> first_external == NULL) { tmp_field -> first_external = init_field_external (tmp_field -> extern_fields); } else { tmp_fext = get_active_external (tmp_field -> extern_fields-1); tmp_fext -> next = init_field_external (tmp_field -> extern_fields); tmp_fext -> next -> prev = g_malloc0 (sizeof*tmp_fext -> next -> prev); tmp_fext -> next -> prev = tmp_fext; } row_id = tmp_field -> extern_fields; edit_parameters (i, tmp_field -> extern_fields); if (tmp_fext -> use && tmp_fext -> key > -1) { tmp_field -> extern_fields ++; } else { tmp_fext = get_active_external (tmp_field -> extern_fields); tmp_fext -> next = NULL; if (tmp_field -> extern_fields == 0) tmp_field -> first_external = NULL; } } else { j = i - MOLIMIT; row_id = tmp_field -> nbody[j]; if (tmp_field -> first_body[j] == NULL) { tmp_field -> first_body[j] = init_field_nth_body (tmp_field -> nbody[j], j, NULL, NULL, NULL); } else { tmp_fbody = get_active_body (tmp_field -> nbody[j], j); tmp_fbody -> next = init_field_nth_body (tmp_field -> nbody[j], j, NULL, NULL, NULL); tmp_fbody -> next -> prev = g_malloc0 (sizeof*tmp_fbody -> next -> prev); tmp_fbody -> next -> prev = tmp_fbody; } if (j == 2) { cross = NULL; cross = alloctdouble (tmp_field -> nbody[j]+1, tmp_field -> nbody[j]+1, 3); if (tmp_field -> cross != NULL) { for (k=0; k nbody[j]; k++) { for (l=0; l nbody[j]; l++) { for (m=0; m<3; m++) cross[k][l][m] = cross[l][k][m] = tmp_field -> cross[k][l][m]; } } } else { tmp_field -> cross = alloctdouble (1, 1, 3); } } edit_parameters (i, tmp_field -> nbody[j]); save_it = FALSE; k = body_at (j); for (l=0; l na[l] > -1) save_it = TRUE; if (save_it) { tmp_field -> nbody[j] ++; for (l=0; l na[l] < 0) tmp_fbody -> use = FALSE; if (j == 2) check_tersoffs (tmp_fbody -> id, tmp_fbody -> key); } else { tmp_fbody = get_active_body (tmp_field -> nbody[j], j); tmp_fbody -> next = NULL; if (tmp_field -> nbody[j] == 0) tmp_field -> first_body[j] = NULL; } } update_field_trees (); } /*! \fn G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove field property callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data) { int i, j, k, l, m, n, o; i = GPOINTER_TO_INT (data); gchar * str; if (i < MOLIMIT) { j = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_mol[i-1])); tmp_fmol = get_active_field_molecule (j); str = g_strdup_printf ("Delete %s N°%d from molecule %s, is this correct ?", elemts[i], row_id+1, tmp_fmol -> name); } else { str = g_strdup_printf ("Delete %s, is this correct ?", elemts[i]); } selection_confirmed = FALSE; field_question (str, G_CALLBACK(confirm_selection), NULL); g_free (str); if (selection_confirmed) { if (i == 2) { tmp_fshell = get_active_shell (j, row_id); if (tmp_fshell == tmp_fmol -> first_shell) { if (tmp_fshell -> next != NULL) { tmp_fmol -> first_shell = tmp_fmol -> first_shell -> next; tmp_fmol -> first_shell -> prev = NULL; } else { tmp_fmol -> first_shell = NULL; } } else if (tmp_fshell -> next == NULL) { tmp_fshell = tmp_fshell -> prev; tmp_fshell -> next = NULL; } else { tmp_fshell -> prev -> next = tmp_fshell -> next; tmp_fshell -> next -> prev = tmp_fshell -> prev; } tmp_fmol -> shells --; tmp_fshell = tmp_fmol -> first_shell; for (j=0; j shells; j++) { tmp_fshell -> id = j; if (tmp_fshell -> next != NULL) tmp_fshell = tmp_fshell -> next; } } else if (i == 3) { tmp_fcons = get_active_constraint (j, row_id); if (tmp_fcons == tmp_fmol -> first_constraint) { if (tmp_fcons -> next != NULL) { tmp_fmol -> first_constraint = tmp_fmol -> first_constraint -> next; tmp_fmol -> first_constraint -> prev = NULL; } else { tmp_fmol -> first_constraint = NULL; } } else if (tmp_fcons -> next == NULL) { tmp_fcons = tmp_fcons -> prev; tmp_fcons -> next = NULL; } else { tmp_fcons -> prev -> next = tmp_fcons -> next; tmp_fcons -> next -> prev = tmp_fcons -> prev; } tmp_fmol -> constraints --; tmp_fcons = tmp_fmol -> first_constraint; for (j=0; j constraints; j++) { tmp_fcons -> id = j; if (tmp_fcons -> next != NULL) tmp_fcons = tmp_fcons -> next; } } else if (i == 4) { tmp_fpmf = get_active_pmf (j, row_id); if (tmp_fpmf == tmp_fmol -> first_pmf) { if (tmp_fpmf -> next != NULL) { tmp_fmol -> first_pmf = tmp_fmol -> first_pmf -> next; tmp_fmol -> first_pmf -> prev = NULL; } else { tmp_fmol -> first_pmf = NULL; } } else if (tmp_fpmf -> next == NULL) { tmp_fpmf = tmp_fpmf -> prev; tmp_fpmf -> next = NULL; } else { tmp_fpmf -> prev -> next = tmp_fpmf -> next; tmp_fpmf -> next -> prev = tmp_fpmf -> prev; } tmp_fmol -> pmfs --; tmp_fpmf = tmp_fmol -> first_pmf; for (j=0; j pmfs; j++) { tmp_fpmf -> id = j; if (tmp_fpmf -> next != NULL) tmp_fpmf = tmp_fpmf -> next; } } else if (i == 5) { tmp_frig = get_active_rigid (j, row_id); if (tmp_frig == tmp_fmol -> first_rigid) { if (tmp_frig -> next != NULL) { tmp_fmol -> first_rigid = tmp_fmol -> first_rigid -> next; tmp_fmol -> first_rigid -> prev = NULL; } else { tmp_fmol -> first_rigid = NULL; } } else if (tmp_frig -> next == NULL) { tmp_frig = tmp_frig -> prev; tmp_frig -> next = NULL; } else { tmp_frig -> prev -> next = tmp_frig -> next; tmp_frig -> next -> prev = tmp_frig -> prev; } tmp_fmol -> rigids --; tmp_frig = tmp_fmol -> first_rigid; for (j=0; j rigids; j++) { tmp_frig -> id = j; if (tmp_frig -> next != NULL) tmp_frig = tmp_frig -> next; } } else if (i == 6) { tmp_ftet = get_active_tethered (j, row_id); if (tmp_ftet == tmp_fmol -> first_tethered) { if (tmp_ftet -> next != NULL) { tmp_fmol -> first_tethered = tmp_fmol -> first_tethered -> next; tmp_fmol -> first_tethered -> prev = NULL; } else { tmp_fmol -> first_tethered = NULL; } } else if (tmp_ftet -> next == NULL) { tmp_ftet = tmp_ftet -> prev; tmp_ftet -> next = NULL; } else { tmp_ftet -> prev -> next = tmp_ftet -> next; tmp_ftet -> next -> prev = tmp_ftet -> prev; } tmp_fmol -> tethered --; tmp_ftet = tmp_fmol -> first_tethered; for (j=0; j tethered; j++) { tmp_ftet -> id = j; if (tmp_ftet -> next != NULL) tmp_ftet = tmp_ftet -> next; } } else if (i == SEXTERN) { tmp_fext = get_active_external (row_id); if (tmp_fext == tmp_field -> first_external) { if (tmp_fext -> next != NULL) { tmp_field -> first_external = tmp_field -> first_external -> next; tmp_field -> first_external -> prev = NULL; } else { tmp_field -> first_external = NULL; } } else if (tmp_fext -> next == NULL) { tmp_fext = tmp_fext -> prev; tmp_fext -> next = NULL; } else { tmp_fext -> prev -> next = tmp_fext -> next; tmp_fext -> next -> prev = tmp_fext -> prev; } tmp_field -> extern_fields --; tmp_fext = tmp_field -> first_external; for (k=0; k extern_fields; k++) { tmp_fext -> id = k; if (tmp_fext -> next != NULL) tmp_fext = tmp_fext -> next; } } else { j = i - MOLIMIT; tmp_fbody = get_active_body (row_id, j); if (j == 2) { cross = NULL; if (tmp_field -> nbody[j] > 1) { cross = alloctdouble (tmp_field -> nbody[j]-1, tmp_field -> nbody[j]-1, 3); m = -1; for (k=0; k nbody[j]; k++) { if (k != tmp_fbody -> id) { m ++; n = -1; for (l=0; l nbody[j]; l++) { if (l != tmp_fbody -> id) { n ++; for (o=0; o<3; o++) cross[m][n][o] = cross[n][m][o] = tmp_field -> cross[k][l][o]; } } } } } } if (tmp_fbody == tmp_field -> first_body[j]) { if (tmp_fbody -> next != NULL) { tmp_field -> first_body[j] = tmp_field -> first_body[j] -> next; tmp_field -> first_body[j] -> prev = NULL; } else { tmp_field -> first_body[j] = NULL; } } else if (tmp_fbody -> next == NULL) { tmp_fbody = tmp_fbody -> prev; tmp_fbody -> next = NULL; } else { tmp_fbody -> prev -> next = tmp_fbody -> next; tmp_fbody -> next -> prev = tmp_fbody -> prev; } tmp_field -> nbody[j] --; g_free (tmp_fbody); tmp_fbody = tmp_field -> first_body[j]; k = 0; while (tmp_fbody) { tmp_fbody -> id = k; k ++; tmp_fbody = tmp_fbody -> next; } if (j == 2) check_tersoffs (-1, tmp_field -> first_body[j] -> key); } update_field_trees (); } } Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_ff_match.c000066400000000000000000001532061457665371200214110ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_ff_match.c * @short Functions the list the available database parameters for the atom database window * @author Sébastien Le Roux */ /* * This file: 'dlp_ff_match.c' * * Contains: * - The functions the list the available database parameters for the atom database window * * List of functions: int this_body_has_atom (field_nth_body * body, char * name); gboolean is_this_object_a_match (int fsid, int nat, int * ffc, int * fpar); static gboolean update_rend (GtkTreeModel * model, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT gboolean on_ff_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); gchar * get_this_prop_param (int sid, int key, int calc, int newp, float * val); gchar * get_this_prop_string (int sid, int oid, int type, int calc); void update_result_list (int sid, field_object_match * new_match); void fill_update_model (GtkTreeStore * store); void get_update_tree_data (GtkWidget * tree, gpointer data, GtkTreePath * path); void ff_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void ff_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void win_update_tree (GtkWidget * vbx); void look_up_this_field_object (int fsid, int fpid, int ssid, int nat, int * fsp, int * fat); void check_this_fprop (int fsid, int fpid, int ssid, int * fat, int * fsp); void check_atom_for_updates (); G_MODULE_EXPORT void changed_update_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void on_ff_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_ff_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_toggle_update (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_check_atom_for_updates (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void changed_field_prop_combo (GtkComboBox * box, gpointer data); GtkWidget * create_update_tree (); GtkWidget * create_field_prop_combo (int f, int is_moy); GtkTreeModel * global_render_tree (); field_data * get_ff_data (int i, int j); field_object_match * duplicate_match (field_object_match * old_m); dint get_visible (gboolean result, gchar * the_name); */ #include "global.h" #include "interface.h" #include "glwindow.h" #include "glview.h" #include "dlp_field.h" extern int * atoms_id; extern int ** atoms_id_list; extern int * field_objects; extern char *** ff_atoms; extern char * fvars_bond[2][FBONDS][FBONDS_P]; extern char * fvars_angle[2][FANGLES][FANGLES_P]; extern char * fvars_dihedral[2][FDIHEDRAL][FDIHEDRAL_P]; extern char * fvars_inversion[2][FINVERS][FINVERS_P]; extern char * fvars_vdw[2][FVDW][FVDW_P]; extern gchar * felemts[MAXDATA+1]; extern GtkWidget * afftype; extern GtkWidget * field_key_combo; extern GtkWidget * p_box; extern GtkWidget * param_box; field_object_match * up_match[9]; field_object_match * tmp_match, * other_match; field_data * ff_data; extern GtkWidget * param_prop_param_box (int pid); extern gchar * get_this_vdw_string (); extern G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); #define NUCOL 8 GtkTreeViewColumn * update_col[NUCOL]; GtkCellRenderer * update_renderer[NUCOL]; GtkWidget * update_tree; GtkWidget * ff_p_combo[2]; GtkTreeStore * update_model; dint up; GtkTreeModel * prop_to_up; field_object_match * tmp_res[9]; dint pup[2]; gboolean vdw_same_atom; /*! \fn gboolean is_this_object_a_match (int fsid, int nat, int * ffc, int * fpar) \brief check if object matches parameters from the database \param fsid the type of field property \param nat the number of atoms for this field property \param ffc object data \param fpar field database data */ gboolean is_this_object_a_match (int fsid, int nat, int * ffc, int * fpar) { int i, j; int has_x = 0; gboolean a_match, b_match; for (i=0; i0", "k'/3", "k''/4"}; char * vanq[4] = {"k/2", "θ0", "k'/3", "k''/4"}; char * vdwij[2] = {"Ɛi", "r0i/2.0"}; switch (sid/2) { case 0: if (newp && (key == 0 || key == 5)) { vars = (char **)vbdq; } else { vars = (char **)fvars_bond[key]; } break; case 1: if (newp && key < 2) { vars = (char **)vanq; } else { vars = (char **)fvars_angle[key]; } break; default: if (sid > 7) { if (newp && (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) && ! calc) { vars = (char **)vdwij; } else { vars = (char **)fvars_vdw[key]; } } else if (sid < 7) { vars = (char **)fvars_dihedral[key]; } else { vars = (char **)fvars_inversion[key]; } break; } return g_strdup_printf ("%s pot. (%s)", fnames[activef][(sid > 7) ? 10 : sid+2][key], parameters_info ((sid > 7) ? 9 : sid+1, key, vars, val)); } /*! \fn gchar * get_this_prop_string (int sid, int oid, int type, int calc) \brief get property name \param sid the type of field property \param oid the number of atoms for this field property \param type the id of the force field database \param calc from the tree model (1) or from the selection combo box (0) */ gchar * get_this_prop_string (int sid, int oid, int type, int calc) { gchar * str; int i, j, k, l; i = (sid > 7) ? 1 : struct_id (sid+7); ff_data = get_ff_data (sid, type); float * val; for (j=0; j atoms_id[oid][j]; if (j > 0) { str = g_strdup_printf ("%s-%s", str, (k < 0) ? "X" : ff_atoms[k][2]); } else { str = g_strdup_printf ("%s", (k < 0) ? "X" : ff_atoms[k][2]); } } j = abs(ff_data -> key)-1; k = fvalues[activef][(sid < 8) ? sid+1 : 9][j]; val = allocfloat (k); for (l=0; l param[oid][l]; // Here if (sid == 8 && calc) { if (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) { float v = sqrt(ff_data -> param[oid][0]*ff_data -> param[oid][0]); val[0] = v*pow((double)(ff_data -> param[oid][1] + ff_data -> param[oid][1]), 12.0); val[1] = 2.0 * v * pow((double)(ff_data -> param[oid][1] + ff_data -> param[oid][1]), 6.0); } else if (tmp_field -> type <= CVFF_AUG) { for (l=0; l<2; l++) val[l] = sqrt(ff_data -> param[oid][l]*ff_data -> param[oid][l]); } } str = g_strdup_printf ("%s: %s", str, get_this_prop_param(sid, j, calc, 1, val)); g_free (val); return str; } /*! \fn field_object_match * duplicate_match (field_object_match * old_m) \brief create a copy of a field match \param old_m the field match to duplicate */ field_object_match * duplicate_match (field_object_match * old_m) { field_object_match * new_m = g_malloc0 (sizeof*new_m); new_m -> id = old_m -> id; new_m -> obj = old_m -> obj; new_m -> oid = old_m -> oid; new_m -> type = old_m -> type; new_m -> use = old_m -> use; return new_m; } /*! \fn void update_result_list (int sid, field_object_match * new_match) \brief update avialable parameter list \param sid the type of field property \param new_match the field match */ void update_result_list (int sid, field_object_match * new_match) { if (tmp_res[sid]) { field_object_match * map, * mbp; map = duplicate_match (new_match); mbp = tmp_res[sid]; while (mbp) { if (mbp -> id == map -> id && mbp -> obj == map -> obj) { // Changing a value already saved if (mbp -> next && mbp -> prev) { mbp -> prev -> next = map; map -> prev = mbp -> prev; map -> next = mbp -> next; mbp -> next -> prev = map; } else if (mbp -> next) { mbp -> next -> prev = map; map -> next = mbp -> next; } else if (mbp -> prev) { mbp -> prev -> next = map; map -> prev = mbp -> prev; } } else if (! mbp -> next) { mbp -> next = map; map -> prev = mbp -> next; mbp = mbp -> next; } mbp = mbp -> next; } } else { tmp_res[sid] = duplicate_match (new_match); } } /*! \fn void fill_update_model (GtkTreeStore * store) \brief fill the parameters database tree store \param store the GtkTreeStore to fill */ void fill_update_model (GtkTreeStore * store) { GtkTreeIter prop_level, struct_level; field_atom* upat; int g, h, i, j; gchar * str; gchar * stra, * strb, * strc, * strd, * stre; for (i=0; i<9; i++) { g = (i==8) ? i+1 : i; h = (i==8) ? 2 : struct_id (i+7); if (up_match[i]) { if (g%2 && i < 6) { if (i == 3 && tmp_field -> type > AMBER99 && tmp_field -> type < CVFF_AUG) { str = g_strdup_printf ("%s(s) (2,3)", felemts[8+g]); } else { str = g_strdup_printf ("%s(s) (2)", felemts[8+g]); } } else if (i < 8) { if (i == 2 && tmp_field -> type > AMBER99 && tmp_field -> type < CVFF_AUG) { str = g_strdup_printf ("%s(s) (3)", felemts[8+g]); } else { str = g_strdup_printf ("%s(s)", felemts[8+g]); } } else if (tmp_field -> type <= AMBER99 || tmp_field -> type > COMPASS) { str = g_strdup_printf ("%s(s) (3)", felemts[8+i]); } else if (tmp_field -> type <= CHARMMSI) { str = g_strdup_printf ("%s(s) (4)", felemts[8+i]); } else { str = g_strdup_printf ("%s(s)", felemts[8+i]); } gtk_tree_store_append (store, & prop_level, NULL); gtk_tree_store_set (store, & prop_level, 0, -(i+1), 1, 0, 2, str, 3, NULL, 4, NULL, 5, NULL, 6, NULL, NUCOL-1, FALSE, -1); g_free (str); tmp_match = up_match[i]; while (tmp_match) { if (i<8) { tmp_fstr = get_active_struct (i, tmp_fmol -> id, tmp_match -> id); if (tmp_match -> obj > 0) { tmp_fprop = get_active_prop (tmp_fstr -> other, tmp_match -> obj - 1); tmp_match -> use = TRUE; } else { tmp_fprop = tmp_fstr -> def; tmp_match -> use = TRUE; } } else { tmp_fbody = get_active_body (tmp_match -> obj, 0); tmp_match -> use = TRUE; } for (j=0; j id, tmp_fstr -> aid[j]); } else { upat = get_active_atom (tmp_fbody -> ma[j][0], tmp_fbody -> a[j][0]); } if (j > 0) { stra = g_strdup_printf ("%s - ""%s""", stra, upat -> name); if (tmp_match -> obj > 0 && i < 8) strb = g_strdup_printf ("%s-%d", strb, tmp_fprop -> aid[j]+1); strc = g_strdup_printf ("%s - %s", strc, tmp_proj -> chemistry -> label[upat -> sp]); } else { stra = g_strdup_printf ("""%s""", upat -> name); if (tmp_match -> obj > 0 && i < 8) strb = g_strdup_printf ("%d", tmp_fprop -> aid[j]+1); strc = g_strdup_printf ("%s", tmp_proj -> chemistry -> label[upat -> sp]); } } other_match = tmp_match; if (tmp_match -> use) { update_result_list (i, tmp_match); strd = g_strdup_printf ("%s", get_this_prop_string (i, other_match -> oid, other_match -> type, 1)); } else { strd = g_strdup_printf ("Select ..."); } if (i < 8) { stre = g_strdup_printf ("%s", get_this_prop_param(i, tmp_fprop -> key, 1, 0, tmp_fprop -> val)); } else { stre = g_strdup_printf ("%s", get_this_prop_param(i, tmp_fbody -> key, 1, 0, tmp_fbody -> val)); } if (tmp_match -> obj > 0 && i < 8) { str = g_strdup_printf ("%s", strb); g_free (strb); } else { str = g_strdup_printf ("%s (*)", stra); } gtk_tree_store_append (store, & struct_level, & prop_level); while (other_match && other_match -> id == tmp_match -> id && other_match -> obj == tmp_match -> obj) { other_match = other_match -> next; } gtk_tree_store_set (store, & struct_level, 0, i, 1, (i == 8) ? tmp_match -> obj : tmp_match -> id, 2, NULL, 3, str, 4, strc, 5, strd, 6, stre, NUCOL-1, tmp_match -> use, -1); g_free (str); g_free (stra); g_free (strc); g_free (strd); g_free (stre); tmp_match = other_match; } } } } /*! \fn GtkTreeModel * global_render_tree () \brief create the field property combo box model that contains the list of available parameters */ GtkTreeModel * global_render_tree () { int i, j; GtkTreeIter iter; GtkTreeStore * store; gchar * str; store = gtk_tree_store_new (1, G_TYPE_STRING); gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, "Select ...", -1); for (i=0; i<9; i++) { j = 0; if (up_match[i]) { other_match = up_match[i]; while (other_match) { j ++; str = g_strdup_printf ("%s", get_this_prop_string (i, other_match -> oid, other_match -> type, 1)); gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, str, -1); g_free (str); other_match = other_match -> next; } } } return gtk_tree_model_filter_new(GTK_TREE_MODEL (store), NULL); } /*! \fn dint get_visible (gboolean result, gchar * the_name) \brief get cell renderer visibility poitner \param result is renderer visible or not ? \param the_name the target name */ dint get_visible (gboolean result, gchar * the_name) { dint vis; gchar * str; gboolean done = FALSE; // With the "Select ..." path starts at 1 and not 0 vis.a = vis.b = 0; int i; for (i=0; i<9; i++) { if (up_match[i]) { other_match = up_match[i]; while (other_match) { if (i == up.a && ((i < 8 && other_match -> id == up.b) || (i == 8 && other_match -> obj == up.b))) { if (result) { str = g_strdup_printf ("%s", get_this_prop_string (i, other_match -> oid, other_match -> type, 1)); if (g_strcmp0 (str, the_name) == 0) { vis.a = -1; return vis; } } vis.b ++; done = TRUE; } else if (! done) { vis.a ++; } other_match = other_match -> next; } if (done) break; } } return vis; } /*! \fn G_MODULE_EXPORT void changed_update_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) \brief change combo box in tree model callback \param combo the cell renderer combo box \param path_string the path in the tree model \param iter the tree iter \param data the associated data pointer */ G_MODULE_EXPORT void changed_update_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) { GValue val = {0, }; GObject * cmodel; dint res; g_object_get (combo, "model", & cmodel, NULL); gtk_tree_model_get_value ((GtkTreeModel *)cmodel, iter, 0, & val); if (gtk_tree_model_get_iter_from_string ((GtkTreeModel *)update_model, iter, path_string)) { gchar * str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); gtk_tree_store_set (update_model, iter, 5, str, -1); res = get_visible (TRUE, str); if (res.a < 0) { update_result_list (up.a, other_match); } } } /*! \fn void get_update_tree_data (GtkWidget * tree, gpointer data, GtkTreePath * path) \brief update force field parameters database tree model data \param tree the GtkWidget sending the signal \param data the associated data pointer \param path the path in the tree model */ void get_update_tree_data (GtkWidget * tree, gpointer data, GtkTreePath * path) { GtkTreeModel * tmodel = gtk_tree_view_get_model (GTK_TREE_VIEW(tree)); GtkTreeIter update_iter; up.a = up.b = -1; if (gtk_tree_model_get_iter (tmodel, & update_iter, path)) { gtk_tree_model_get (tmodel, & update_iter, 0, & up.a, 1, & up.b, -1); gtk_tree_model_filter_refilter ((GtkTreeModelFilter *)prop_to_up); } } #ifdef GTK4 /*! \fn void ff_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the DL-POLY force field parameters database window GTK4 \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void ff_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #else /*! \fn void ff_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the DL-POLY force field parameters database window GTK3 \param event the GdkEvent triggering the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void ff_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #endif { if (event_type == GDK_BUTTON_PRESS) { GtkTreePath * path; GtkTreeViewColumn * column; int i, j; #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(update_tree), event_x, event_y, & e_x, & e_y); gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(update_tree), e_x, e_y, & path, & column, & i, & j); #else gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(update_tree), event_x, event_y, & path, & column, & i, & j); #endif if (path != NULL) { get_update_tree_data (update_tree, data, path); } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_ff_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed signal on the DL-POLY force field parameters database window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_ff_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { ff_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_ff_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released signal on the DL-POLY force field parameters database window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_ff_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { ff_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean on_ff_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief mouse button event on the DL-POLY force field parameters database window \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_ff_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton *)event; ff_button_event (event, bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return FALSE; } #endif /*! \fn G_MODULE_EXPORT void on_toggle_update (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select field parameter toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_toggle_update (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { GtkTreeIter iter; int i; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(update_model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(update_model), & iter, 7, & i, -1); gchar * str; gtk_tree_model_get (GTK_TREE_MODEL(update_model), & iter, 5, & str, -1); dint res = get_visible(TRUE, str); g_free (str); if (res.a < 0) { tmp_match = tmp_res[up.a]; while (tmp_match) { if (tmp_match -> id == other_match -> id && tmp_match -> obj == other_match -> obj) { tmp_match -> use = ! i; break; } tmp_match = tmp_match -> next; } gtk_tree_store_set (update_model, & iter, 7, ! i, -1); } } /*! \fn static gboolean update_rend (GtkTreeModel * model, GtkTreeIter * iter, gpointer data) \brief udpate cell renderer visibility \param model the target GtkTreeModel \param iter the target tree iter \param data the associated data pointer */ static gboolean update_rend (GtkTreeModel * model, GtkTreeIter * iter, gpointer data) { GtkTreeIter upiter; dint vis; gchar * str; if (gtk_tree_model_get_iter_first(model, & upiter)) { GtkTreePath * path = gtk_tree_model_get_path(model, iter); str = gtk_tree_path_to_string(path); gtk_tree_path_free(path); if (g_strcmp0 (str, "0") == 0) return TRUE; vis = get_visible (FALSE, NULL); int p = (int)atof(str); g_free (str); if (p > vis.a && p < vis.a+vis.b+1) return TRUE; } return FALSE; } /*! \fn void field_set_markup_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief field parameter set renderer markup and visibility in the parameter database selection tree model \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void field_set_markup_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); k = (j < 0) ? 0 : 1; gtk_cell_renderer_set_visible (renderer, (i == 2) ? ! k : k); if ((j < 0 && i == 2) || (j>-1 && i != 7)) { gchar * str = NULL; gtk_tree_model_get (mod, iter, i, & str, -1); g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } } /*! \fn GtkWidget * create_update_tree () \brief create the parameters database tree model */ GtkWidget * create_update_tree () { int i; gchar * str; gchar * up_title[NUCOL]={" ", " ", "Property", "Atoms", "Species", "parameters (1)", "Actual parameters (1)", "Update ?"}; GType up_type[NUCOL] = {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN}; update_model = gtk_tree_store_newv (NUCOL, up_type); update_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(update_model)); for (i=0; i type], up_title[i]); } else { str = g_strdup_printf ("%s", up_title[i]); } if (i == 5) { update_renderer[i] = gtk_cell_renderer_combo_new(); prop_to_up = global_render_tree (); g_object_set (update_renderer[i], "model", prop_to_up, "text-column", 0, "has-entry", FALSE, "editable", TRUE, NULL); gtk_tree_model_filter_set_visible_func ((GtkTreeModelFilter *)prop_to_up, (GtkTreeModelFilterVisibleFunc)G_CALLBACK(update_rend), GTK_TREE_VIEW(update_tree), NULL); g_object_unref (prop_to_up); g_signal_connect (G_OBJECT(update_renderer[i]), "editing-started", G_CALLBACK(markup_action_renderer), NULL); g_signal_connect (G_OBJECT(update_renderer[i]), "changed", G_CALLBACK(changed_update_renderer), NULL); update_col[i] = gtk_tree_view_column_new_with_attributes (str, update_renderer[i], "text", i, NULL); } else if (i == NUCOL-1) { update_renderer[i] = gtk_cell_renderer_toggle_new (); update_col[i] = gtk_tree_view_column_new_with_attributes (str, update_renderer[i], "active", i, NULL); g_signal_connect (G_OBJECT(update_renderer[i]), "toggled", G_CALLBACK(on_toggle_update), NULL); } else { update_renderer[i] = gtk_cell_renderer_text_new(); update_col[i] = gtk_tree_view_column_new_with_attributes (str, update_renderer[i], "text", i, NULL); } g_free (str); if (i > 1) { gtk_tree_view_column_set_alignment (update_col[i], 0.5); gtk_tree_view_append_column(GTK_TREE_VIEW(update_tree), update_col[i]); gtk_tree_view_column_set_cell_data_func (update_col[i], update_renderer[i], field_set_markup_and_visible, GINT_TO_POINTER(i), NULL); } } for (i=0; i<9; i++) tmp_res[i] = NULL; fill_update_model (update_model); g_object_unref (update_model); GtkTreeSelection * update_select = gtk_tree_view_get_selection (GTK_TREE_VIEW(update_tree)); gtk_tree_selection_set_mode (update_select, GTK_SELECTION_SINGLE); #ifdef GTK4 add_widget_gesture_and_key_action (update_tree, "ff-button-pressed", G_CALLBACK(on_ff_button_pressed), NULL, "ff-button-released", G_CALLBACK(on_ff_button_released), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(update_tree), "button_press_event", G_CALLBACK(on_ff_button_event), NULL); #endif return update_tree; } /*! \fn void win_update_tree (GtkWidget * vbx) \brief update the parameters database tree model \param vbx the GtkWidget sending the signal */ void win_update_tree (GtkWidget * vbx) { int i; update_tree = NULL; update_model = NULL; for (i=0; i-1", "kJ mol-1", "K B-1", "DL_POLY internal units"}; gchar * str = g_strdup_printf ("\t(*) Each force field element can be tuned separately, if not this default parameters will be used.\n" "\t(1) %s energy unit: %s, if required conversion to FIELD file energy unit will be performed upon selection.\n" "\t(2) Restraint parameters are duplicates of the non-restraint parameters.\n", field_acro[tmp_field -> type], funits[ff_unit]); i = 3; if (tmp_field -> type > AMBER99 && tmp_field -> type < CVFF) { str = g_strdup_printf ("%s\t(%d) Urey-Bradley terms provided by the %s force field are ignored.\n", str, i, field_acro[tmp_field -> type]); i ++; } if (tmp_field -> type <= CVFF_AUG || tmp_field -> type > COMPASS) { str = g_strdup_printf ("%s\t(%d) In %s, 12-6 non-bonded interactions are evaluated using:", str, i, field_acro[tmp_field -> type]); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); if (tmp_field -> type <= CVFF_AUG || tmp_field -> type > COMPASS) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, hbox, FALSE, FALSE, 0); if (tmp_field -> type < CVFF || tmp_field -> type > COMPASS) { str = g_strdup_printf ("%s\nA and B are calculated using Ɛi/j and r0i/j provided by the force field parameters.", get_this_vdw_string()); if (tmp_field -> type > AMBER99) { str = g_strdup_printf ("%s\nScaled 1-4 exclusion parameters, provided by the %s force field, are ignored.", str, field_acro[tmp_field -> type]); } } else { str = g_strdup_printf ("%s\nA and B are calculated using Ai/j and Bi/j provided by the force field parameters.", get_this_vdw_string()); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 200); g_free (str); } } /*! \fn void look_up_this_field_object (int fsid, int fpid, int ssid, int nat, int * fsp, int * fat) \brief look up in database for this field property \param fsid the type of field property \param fpid global propert (0) or atom specific (> 0) \param ssid the id of the field property to check \param nat the number of atoms for this field property \param fat the list of field atom(s) \param fsp the list of the chemical species for the field atom(s) */ void look_up_this_field_object (int fsid, int fpid, int ssid, int nat, int * fsp, int * fat) { int i, j; tmp_obj_id = field_objects_id[(fsid < 6) ? fsid / 2 : fsid - 3]; while (tmp_obj_id) { i = tmp_obj_id -> oid; j = tmp_obj_id -> type; ff_data = get_ff_data (fsid, j); if (is_this_object_a_match (fsid, nat, fsp, ff_data -> atoms_z[i])) { if (is_this_object_a_match (fsid, nat, fat, ff_data -> atoms_id[i])) { if (up_match[fsid] == NULL) { up_match[fsid] = g_malloc0 (sizeof*up_match[fsid]); tmp_match = up_match[fsid]; } else { tmp_match -> next = g_malloc0 (sizeof*tmp_match); tmp_match = tmp_match -> next; } tmp_match -> id = ssid; tmp_match -> obj = fpid; tmp_match -> oid = i; tmp_match -> type = j; // g_debug ("Match :: fsid= %d, -> id = %d, -> obj = %d, -> oid = %d, -> type = %d", fsid, ssid, fpid, i, j); } } tmp_obj_id = tmp_obj_id -> next; } } /*! \fn void check_this_fprop (int fsid, int fpid, int ssid, int * fat, int * fsp) \brief check if the database offers parameters for a field property \param fsid the type of field property \param fpid global propert (0) or atom specific (> 0) \param ssid the id of the field property to check \param fat the list of field atom(s) \param fsp the list of the chemical species for the field atom(s) */ void check_this_fprop (int fsid, int fpid, int ssid, int * fat, int * fsp) { int i, j, k; int * ffat, * ffsp; gboolean update = TRUE; field_atom* tmpat; i = struct_id(fsid+7); for (j=0; j id, fat[j]); if (tmpat -> id != tmp_fat -> id) { if (tmpat -> afid < 0) { if (atoms_id[k] == 0 && extraz_id[(fsid < 6)? fsid/2: fsid-3][k] == 0) { update = FALSE; } } } } if (update) { // Is there any field data available ? // Check the field data for available parameters ffat = allocint(i); ffsp = allocint(i); for (j=0; j id, fat[j]) -> afid; ffsp[j] = tmp_proj -> chemistry -> chem_prop[CHEM_Z][get_active_atom (tmp_fmol -> id, fat[j]) -> sp]; } look_up_this_field_object (fsid, fpid, ssid, i, ffsp, ffat); g_free (ffat); g_free (ffsp); } } /*! \fn int this_body_has_atom (field_nth_body * body, char * name) \brief check if non bonded potential has this field atom \param body the non bonded potential to check \param name the name of the target field atom */ int this_body_has_atom (field_nth_body * body, char * name) { int i, j, k, l , m; m = 0; for (i=0; i<2; i++) { for (j=0; j na[i]; j++) { k = body -> ma[i][j]; l = body -> a[i][j]; if (g_strcmp0 (get_active_atom(k, l) -> name, name) == 0) m += (i+1); } } return m; } /*! \fn G_MODULE_EXPORT void run_check_atom_for_updates (GtkDialog * dialog, gint response_id, gpointer data) \brief check for parameters in the database to be used in the force field - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_check_atom_for_updates (GtkDialog * dialog, gint response_id, gpointer data) { int i, j, k, l, m; float v; gboolean update_vdw = FALSE; if (response_id == GTK_RESPONSE_APPLY) { for (i=0; i<9; i++) { if (tmp_res[i]) { tmp_match = other_match = tmp_res[i]; while (other_match) { if (tmp_match -> use) { if (i < 8) { tmp_fstr = get_active_struct (i, tmp_fmol -> id, tmp_match -> id); tmp_fprop = (tmp_match -> obj > 0) ? get_active_prop (tmp_fstr -> other, tmp_match -> obj - 1) : tmp_fstr -> def; g_free (tmp_fprop -> val); ff_data = get_ff_data (i, tmp_match -> type); tmp_fprop -> val = duplicate_float(ff_data -> npar, ff_data -> param[tmp_match -> oid]); // UNITS ! tmp_fprop -> fpid = tmp_match -> oid; tmp_fprop -> key = abs(ff_data -> key)-1; if ((i < 2 && (tmp_fprop -> key == 1 || tmp_fprop -> key == 5)) || ((i == 2 || i == 3) && tmp_fprop -> key < 2)) { for (l=0; l npar; l++) { if (l != 1) tmp_fprop -> val[l] *= (l+2 - l/3); } } if (ff_unit != tmp_field -> energy_unit) { v = internal_to_other[tmp_field -> energy_unit] / internal_to_other[ff_unit]; tmp_fprop -> val[0] = tmp_fprop -> val[0]*v; if ((i/2 == 1 && tmp_fprop -> key == 1) || (i/2 == 1 && tmp_fprop -> key == 3)) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; tmp_fprop -> val[3] = tmp_fprop -> val[3]*v; } else if (i/2 == 0 && tmp_fprop -> key == 1) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; } } tmp_fprop -> use = TRUE; } else { // Pot must be defined for the 2 atoms tmp_fbody = get_active_body (0, 0); ff_data = get_ff_data (i, tmp_match -> type); while (tmp_fbody) { update_vdw = FALSE; j = this_body_has_atom (tmp_fbody, tmp_fat -> name); k = tmp_match -> oid; if (j == 3) { tmp_fbody -> fpid[0] = tmp_fbody -> fpid[1] = k; j = l = k; update_vdw = TRUE; } else if (j) { j --; tmp_fbody -> fpid[j] = k; // Need to do something here ! l = (j) ? 0 : 1; update_vdw = FALSE; if (tmp_fbody -> fpid[l] > -1) { j = k; l = tmp_fbody -> fpid[l]; update_vdw = TRUE; } } if (update_vdw) { if (tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) { v = sqrt(ff_data -> param[j][0]*ff_data -> param[l][0]); tmp_fbody -> val[0] = v*pow((double)(ff_data -> param[j][1] + ff_data -> param[l][1]), 12.0); tmp_fbody -> val[1] = 2.0 * v * pow((double)(ff_data -> param[j][1] + ff_data -> param[l][1]), 6.0); } else if (tmp_field -> type <= CVFF_AUG) { for (m=0; m<2; m++) tmp_fbody -> val[m] = sqrt(ff_data -> param[j][m]*ff_data -> param[l][m]); } } tmp_fbody = tmp_fbody -> next; } } } other_match = tmp_match -> next; g_free (tmp_match); tmp_match = other_match; } } } for (i=0; i<9; i++) { if (up_match[i]) { tmp_match = other_match = up_match[i]; while (other_match) { other_match = tmp_match -> next; g_free (tmp_match); tmp_match = other_match; } up_match[i] = NULL; } } } destroy_this_dialog (dialog); } /*! \fn void check_atom_for_updates () \brief check for parameters in the database to be used in the force field - creating the dialog */ void check_atom_for_updates () { int i, j, k, l; int * fsp; gboolean update_this = FALSE; field_prop * oth; // Lookup for this atoms in bonds, etc ... and if parameters, then look for update is all atoms are field auto // Field struct (bonds, bond rest., angles, angles rest., dih, tors. rest., imp., vdw.) // g_debug ("Checking for field parameters of atoms: %s - id = %d", tmp_fat -> name, tmp_fat -> id + 1); for (i=0; i<8; i++) { up_match[i] = NULL; if ((i != 4 && i != 5) || tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { if (get_ff_data(i, 0) && tmp_field -> afp[i+15]) { k = struct_id(i+7); fsp = allocint(k); tmp_fstr = tmp_fmol -> first_struct[i]; while (tmp_fstr != NULL) { for (j=0; j aid[j] == tmp_fat -> id) { // Update this field struct parameters for (l=0; l id, tmp_fstr -> aid[l]) -> sp; } check_this_fprop (i, 0, tmp_fstr -> id, tmp_fstr -> aid, fsp); oth = tmp_fstr -> other; while (oth != NULL) { check_this_fprop (i, oth -> pid+1, tmp_fstr -> id, tmp_fstr -> aid, fsp); oth = oth -> next; } break; } } tmp_fstr = tmp_fstr -> next; } g_free (fsp); } } } up_match[8] = NULL; if (tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { tmp_fbody = get_active_body (0, 0); while (tmp_fbody && tmp_field -> afp[23]) { if (this_body_has_atom (tmp_fbody, tmp_fat -> name) == 3) { tmp_obj_id = field_objects_id[5]; while (tmp_obj_id) { i = tmp_proj -> chemistry -> chem_prop[CHEM_Z][tmp_fat -> sp]; j = tmp_obj_id -> oid; if (ff_vdw -> atoms_z[j][0] == i && (ff_vdw -> atoms_id[j][0] == tmp_fat -> afid || ff_vdw -> atoms_id[j][0] == -1)) { if (up_match[8] == NULL) { up_match[8] = g_malloc0 (sizeof*up_match[8]); tmp_match = up_match[8]; } else { tmp_match -> next = g_malloc0 (sizeof*tmp_match); tmp_match = tmp_match -> next; } tmp_match -> id = 8; tmp_match -> obj = tmp_fbody -> id; tmp_match -> oid = tmp_obj_id -> oid; tmp_match -> type = 0; tmp_match -> use = FALSE; } tmp_obj_id = tmp_obj_id -> next; } } tmp_fbody = tmp_fbody -> next; } } for (i=0; i<9; i++) { if (up_match[i] != NULL) { update_this = TRUE; break; } } if (update_this) { gchar * str = g_strdup_printf ("Update FIELD file with %s parameters using \"%s\" atom(s)", field_acro[tmp_field -> type], exact_name(ff_atoms[tmp_fat -> afid][2])); GtkWidget * dial = dialog_cancel_apply (str, field_assistant, FALSE); g_free (str); GtkWidget * vbox = dialog_get_content_area (dial); win_update_tree (vbox); run_this_gtk_dialog (dial, G_CALLBACK(run_check_atom_for_updates), NULL); } } /*! \fn G_MODULE_EXPORT void changed_field_prop_combo (GtkComboBox * box, gpointer data) \brief change the field parameter selection \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_field_prop_combo (GtkComboBox * box, gpointer data) { int i, j; dint * prop = (dint *)data; float * val, * vbl; i = gtk_combo_box_get_active (box); if (i) { tmp_match = up_match[prop -> b]; for (j=0; j next; ff_data = get_ff_data (prop -> a - 7, tmp_match -> type); if (prop -> a < 15) { tmp_fprop -> key = abs(ff_data -> key) - 1; g_free (tmp_fprop -> val); tmp_fprop -> fpid = tmp_match -> oid; tmp_fprop -> val = duplicate_float (ff_data -> npar, ff_data -> param[tmp_match -> oid]); if ((prop -> a < 9 && (tmp_fprop -> key == 0 || tmp_fprop -> key == 5)) || ((prop -> a == 9 || prop -> a == 10) && tmp_fprop -> key < 2)) { for (j=0; j npar; j++) { if (j != 1) tmp_fprop -> val[j] *= (j+2 - j/3); } } if (ff_unit != tmp_field -> energy_unit) { float v = internal_to_other[tmp_field -> energy_unit] / internal_to_other[ff_unit]; tmp_fprop -> val[0] = tmp_fprop -> val[0]*v; if (((prop -> a - 7)/2 == 1 && tmp_fprop -> key == 1) || ((prop -> a - 7)/2 == 1 && tmp_fprop -> key == 3)) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; tmp_fprop -> val[3] = tmp_fprop -> val[3]*v; } else if ((prop -> a - 7)/2 == 0 && tmp_fprop -> key == 1) { tmp_fprop -> val[2] = tmp_fprop -> val[2]*v; } } gtk_combo_box_set_active (GTK_COMBO_BOX(field_key_combo), tmp_fprop -> key); } else { // Check both atoms pot, and use same pot. tmp_fbody -> key = abs(ff_data -> key) - 1; tmp_fbody -> fpid[prop -> b] = tmp_match -> oid; val = duplicate_float (ff_data -> npar, ff_data -> param[tmp_match -> oid]); gtk_combo_box_set_active (GTK_COMBO_BOX(field_key_combo), tmp_fbody -> key); } } else { if (prop -> a < 15) { tmp_fprop -> fpid = -1; } else { tmp_fbody -> fpid[prop -> b] = -1; } } if (prop -> a == 15) { float * vcl; float eij; float rij; i = (prop -> b) ? 0 : 1; if (vdw_same_atom) { tmp_fbody -> fpid[i] = tmp_fbody -> fpid[!i]; } if (tmp_fbody -> fpid[0] > -1 && tmp_fbody -> fpid[1] > -1) { j = tmp_fbody -> fpid[i]; vbl = duplicate_float (ff_data -> npar, ff_data -> param[j]); if ((tmp_field -> type <= CHARMMSI || tmp_field -> type > COMPASS) && tmp_fbody -> key == 0) { // 12-6, recalculate A and B vcl = allocfloat (ff_data -> npar); eij = sqrt(val[0]*vbl[0]); rij = (val[1] + vbl[1]); vcl[0] = eij * pow((double) rij, 12.0); vcl[1] = 2.0 * eij * pow((double) rij, 6.0); g_free (tmp_fbody -> val); tmp_fbody -> val = duplicate_float(ff_data -> npar, vcl); g_free (vcl); } else if (tmp_field -> type == CVFF || tmp_field -> type == CVFF_AUG) { // 12-6, A-B vcl = allocfloat (ff_data -> npar); vcl[0] = sqrt(val[0]*vbl[0]); vcl[1] = sqrt(val[1]*vbl[1]); g_free (tmp_fbody -> val); tmp_fbody -> val = duplicate_float(ff_data -> npar, vcl); g_free (vcl); } g_free (vbl); } g_free (val); } p_box = destroy_this_widget (p_box); p_box = param_prop_param_box (prop -> a); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, param_box, p_box, FALSE, FALSE, 0); show_the_widgets (param_box); } /*! \fn GtkWidget * create_field_prop_combo (int f, int is_moy) \brief create field parameter selection combo box \param f the type of force field property \param is_moy global parameter (1) or atom(s) specific parameter (0) */ GtkWidget * create_field_prop_combo (int f, int is_moy) { int h, i, j, k, l, m, n; GtkWidget * vbox, * hbox; gboolean save_it; gchar * str_vdw[2]; gchar * str; h = (f == 15) ? 2 : struct_id(f); i = (f == 15) ? 2 : 1; for (j=0; j ma[j][0]; m = tmp_fbody -> a[j][0]; n = get_active_atom (l, m) -> sp; spec_z[j] = tmp_proj -> chemistry -> chem_prop[CHEM_Z][n]; } if (g_strcmp0 (str_vdw[0], str_vdw[1]) == 0) { vdw_same_atom = TRUE; i = 1; } for (j=0; j ma[j][0]; m = tmp_fbody -> a[j][0]; if (i == 1) { str = g_strdup_printf ("Atom (1 and 2) %s", str_vdw[j]); } else { str = g_strdup_printf ("Atom (%d) %s", j+1, str_vdw[j]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 150, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ff_p_combo[j], FALSE, FALSE, 10); } for (j=0; j<2; j++) g_free (str_vdw[j]); } else { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); ff_p_combo[0] = create_combo (); combo_text_append (ff_p_combo[0], "Manual"); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ff_p_combo[0], FALSE, FALSE, 10); for (j=0; j aid[j]; l = get_active_atom (tmp_fmol -> id, k) -> sp; } else { k = tmp_fprop -> aid[j]; l = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[k][0].a) -> sp; } spec_z[j] = tmp_proj -> chemistry -> chem_prop[CHEM_Z][l]; } } if (f != 15 || tmp_field -> type < CFF91 || tmp_field -> type > COMPASS) { for (j=0; j oid; l = tmp_obj_id -> type; ff_data = get_ff_data (f-7, l); save_it = FALSE; if (f < 15 && is_this_object_a_match (f-7, h, spec_z, ff_data -> atoms_z[k])) { m ++; if (tmp_fprop -> fpid == k && tmp_fprop -> key == abs(ff_data -> key)-1) n = m; save_it = TRUE; } else if (f == 15 && ff_data -> atoms_z[k][0] == spec_z[j]) { m ++; if (tmp_fbody -> fpid[j] == k) n = m; save_it = TRUE; } if (save_it) { str = g_strdup_printf ("%s", get_this_prop_string (f-7, k, l, 0)); if (ff_data -> info) { if (g_strcmp0 (ff_data -> info[k], " ") != 0) str = g_strdup_printf ("%s : %s", str, ff_data -> info[k]); } combo_text_append (ff_p_combo[j], str); g_free (str); if (up_match[j] == NULL) { up_match[j] = g_malloc0 (sizeof*up_match[j]); tmp_match = up_match[j]; } else { tmp_match -> next = g_malloc0 (sizeof*tmp_match -> next); tmp_match -> next -> id = tmp_match -> id + 1; tmp_match = tmp_match -> next; } tmp_match -> obj = f - 7; tmp_match -> oid = k; tmp_match -> type = l; } tmp_obj_id = tmp_obj_id -> next; } GList * cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(ff_p_combo[j])); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(ff_p_combo[j]), cell_list -> data, "markup", 0, NULL); } pup[j].a = f; pup[j].b = j; gtk_combo_box_set_active (GTK_COMBO_BOX(ff_p_combo[j]), n); if (m == 0) widget_set_sensitive (ff_p_combo[j], FALSE); g_signal_connect (G_OBJECT(ff_p_combo[j]), "changed", G_CALLBACK(changed_field_prop_combo), & pup[j]); } } return vbox; } Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_field.c000066400000000000000000006555501457665371200207360ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_field.c * @short Functions to prepare the DL-POLY / LAMMPS input preparation assistant \n Functions to design a classical force field * @author Sébastien Le Roux */ /* * This file: 'dlp_field.c' * * Contains: * - The functions to prepare the DL-POLY / LAMMPS input preparation assistant - The functions to design a classical force field * * List of functions: int struct_id (int f); int body_at (int b); int get_field_tree_data (GtkWidget * tree, int treeid, GtkTreePath * path); int get_field_data_id (int k, gchar * data); G_MODULE_EXPORT gint on_assistant_go_forward (gint current_page, gpointer data); gboolean set_nbd_but_sensitive (int nbid); gboolean field_file_has_energy_parameters (gboolean scale, int sca, int scb); G_MODULE_EXPORT gboolean on_pop_up_field (GtkWidget * widget, gpointer data); G_MODULE_EXPORT gboolean on_field_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data); G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data); gchar * parameters_info (int obj, int key, gchar ** words, float * data); gchar * set_field_label (int f, int m); gchar * pop_info (int i, int id); gchar * pop_edit (int i); gchar * pop_add (int i); gchar * pop_remove (int i); void set_mol_num_label (); void setup_cs_labels (int i); void fill_field_struct (GtkTreeStore * store, int id, int mo); void fill_field_body (GtkTreeStore * store, int id); void fill_field_model (GtkTreeStore * store, int f, int m); void update_field_trees (); void get_is_energy (int i, int l); void append_field_item (GMenu * menu, const gchar * name, const gchar * key, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive); void pop_up_field_context_menu (int row_id, GtkWidget * widget, double event_x, double event_y, gpointer data); void pop_up_field_context_menu (int row_id, GtkWidget * widget, GdkEvent * event, gpointer data); void field_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void field_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void field_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_markup_box (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void prop_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void pmf_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void rig_set_color_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_markup_and_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void field_set_color_markup_and_visible_box (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void get_field_iter_and_edit (gchar * path_string, gpointer data); void create_field_list (GtkWidget * vbx, int f); void close_the_assistant (GtkAssistant * assistant); void hide_show_this_pages (int start, int end, int status, int delta); void remove_classical_assistant_pages (); void add_classical_assistant_pages (int p); void create_ff_structure (int ai, int type); void on_assistant_apply (GtkAssistant * assistant, gpointer data); void create_classical_force_field (int p, int f); G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_field_params (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void run_changed_energy_unit (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void changed_energy_unit (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void changed_field_key_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void to_select_atom_id_from_fied_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void on_field_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_field_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void edit_field_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data); G_MODULE_EXPORT void to_edit_field_prop (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); G_MODULE_EXPORT void on_field_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data); G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data); G_MODULE_EXPORT void on_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data); G_MODULE_EXPORT void run_clean_field (GtkDialog * dial, gint response_id, gpointer data); G_MODULE_EXPORT void clean_field (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void clean_field (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void select_field_action (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void select_field_action (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void changed_init_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void show_force_field_preview (GtkButton * but, gpointer data); G_MODULE_EXPORT void run_on_assistant_apply (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_assistant_apply (GtkDialog * info, gint response_id, gpointer data); GtkWidget * vbox_init (int p); GtkWidget * create_combo_mol (int f); GtkWidget * create_field_tree (int f); GtkWidget * create_mol_box (int f); GtkWidget * vbox_field (int f); */ #include "dlp_field.h" #include "calc.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "bind.h" gboolean append_pages; extern GtkWidget * extra_vbox[2]; extern ColRGBA init_color (int id, int numid); extern void restore_ogl_selection (glwin * view); gchar * felemts[MAXDATA+1] = {"Energy unit", "Molecule", "Atom", "Core-shell unit", "Constraint bond", "Mean force potential", "Rigid unit", "Tethering potential", "Flexible chemical bond", "Bond restraint", "Bond angle", "Angular restraint", "Dihedral angle", "Torsional restraint", "Improper angle", "Inversion angle", "van der Waals potential", "Metal potential", "Tersoff Potential", "Three-body potential", "Four-body potential", "External field"}; gchar * elemts[MAXDATA] = {"molecule", "atom", "core-shell unit", "constraint bond", "mean force potential", "rigid unit", "tethering potential", "flexible chemical bond", "bond restraint", "bond angle", "angular restraint", "dihedral angle", "torsional restraint", "improper angle", "inversion angle", "van der Waals potential", "metal potential", "Tersoff Potential", "three-body potential", "four-body potential", "external field"}; gchar * fkeysw[2][16][21] = {{{"eV", "kcal", "kJ", "K", "internal", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 0 - Energy unit(s) {"harm", "rhrm", "quar", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 1 - Tethering pot. {"harm", "mors", "12-6", "lj ", "rhrm", "quar", "buck", "coul", "fene", "mmst", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 2 - Bond pot. {"-hrm", "-mrs", "-126", "-lj ", "-rhm", "-qur", "-bck", "-cul", "-fne", "-mst", "-tab", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 3 - Bond rest. {"harm", "quar", "thrm", "shrm", "bvs1", "bvs2", "hcos", "cos ", "mmsb", "stst", "stbe", "cmps", "mmbd", "kky ", "tab ", " ", " ", " ", " ", " ", " "}, // 4 - Angles pot. {"-hrm", "-qur", "-thm", "-shm", "-bv1", "-bv2", "-hcs", "-cos", "-msb", "-sts", "-stb", "-cmp", "-mbd", "-kky", "-tab", " ", " ", " ", " ", " ", " "}, // 5 - Angles rest. {"cos ", "harm", "hcos", "cos3", "ryck", "rbf ", "opls", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 6 - Dihedral pot. {"-cos", "-hrm", "-hcs", "-cs3", "-rck", "-rbf", "-opl", "-tab", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 8 - Torsion pot. {"cos ", "harm", "hcos", "cos3", "ryck", "rbf ", "opls", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 7 - Improper pot. {"harm", "hcos", "plan", "xpln", "calc", "tab ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 9 - Inversion pot. {"12-6", "lj ", "ljc", "nm ", "buck", "bhm ", "hbnd", "snm ", "mors", "wca ", "dpd", "14-7", "mstw", "ryb", "zbl", "zbls", "zblb", "mlj", "mbuc", "m126", "tab "}, // 10 - Vdw pot. {"eam ", "eeam", "2bea", "2bee", "fnsc", "exfs", "stch", "gupt", "mbpc", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 11 - Metal pot. {"ters", "kihs", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 12 - Tersoff pot. {"harm", "thrm", "shrm", "bvs1", "bvs2", "hbnd", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 13 - Three-body pot. {"harm", "hcos", "plan", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, // 14 - Four-body pot. {"elec", "oshr", "shrx", "grav", "magn", "sphr", "zbnd", "xpis", "zres", "zrs-", "zrs+", "osel", "ushr", " ", " ", " ", " ", " ", " ", " ", " "}}, // 15 - External fields. {{"lj", "real", "metal", "si", "cgs", "electron", "micro", "nano", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"harmonic", "class2", "fene", "fene/expand", "gromos", "harmonic/shift", "harmonic/shift/cut", "mm3", "morse", "nonlinear", "oxdna/fene", "oxdna2/fene", "oxrna2/fene", "quartic", "special", "table", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"harmonic", "charmm", "class2", "class2/p6", "cosine", "cosine/buck6d", "cosine/delta", "cosine/periodic", "cosine/shift", "cosine/shift/exp", "cosine/squared", "cross", "dipole", "fourier", "fourier/simple", "mm3", "quartic", "sdk", "table", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"cosine/shift/exp", "charmm", "charmmfsw", "class2", "fourier", "harmonic", "helix", "multi/harmonic", "nharmonic", "opls", "quadratic","spherical", "table", "table/cut", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"harmonic", "class2", "cossq", "cvff", "distance", "distharm", "fourier", "ring", "sqdistharm", "umbrella", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"inversion/harmonic", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}}; gchar * fnames[2][16][21] = {{{"Electron-Volts", "k-calories per mol", "k-Joules per mol", "Kelvin per Boltzmann", "DL_POLY internal units", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic", "Restraint", "Quartic", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic", "Morse", "12-6", "Lennard-Jones", "Restraint", "Quartic", "Buckingham", "Coulomb", "Shifted FENE", "MM3 bond stretch", "Tabulated", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic", "Morse", "12-6", "Lennard-Jones", "Restraint", "Quartic", "Buckingham", "Coulomb", "Shifted FENE", "MM3 bond stretch", "Tabulated", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic", "Quartic", "Truncated harmonic", "Screened harmonic", "Screened Vessal", "Truncated Vessal", "Harmonic cosine", "Cosine", "MM3 stretch-bend", "Compass stretch-stretch", "Compass stretch-bend", "Compass all terms", "MM3 angle bend", "KKY", "Tabulated", " ", " ", " ", " ", " ", " "}, {"Harmonic", "Quartic", "Truncated harmonic", "Screened harmonic", "Screened Vessal", "Truncated Vessal", "Harmonic cosine", "Cosine", "MM3 stretch-bend", "Compass stretch-stretch", "Compass stretch-bend", "Compass all terms", "MM3 angle bend", "KKY", "Tabulated", " ", " ", " ", " ", " ", " "}, {"Cosine", "Harmonic", "Harmonic cosine", "Triple cosine", "Ryckaert-Bellemans", "Fluorinated Ryckaert-Bellemans", "OPLS torsion", "Tabulated", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Cosine", "Harmonic", "Harmonic cosine", "Triple cosine", "Ryckaert-Bellemans", "Fluorinated Ryckaert-Bellemans", "OPLS torsion", "Tabulated", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Cosine", "Harmonic", "Harmonic cosine", "Triple cosine", "Ryckaert-Bellemans", "Fluorinated Ryckaert-Bellemans", "OPLS torsion", "Tabulated", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic", "Harmonic cosine", "Planar", "Extended Planar", "Calcite", "Tabulated", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"12-6", "Lennard-Jones", "LJ cohesive", "n-m", "Buckingham", "Born-Huggins-Meyer", "12-10 H-bond", "Shifted force n-m", "Morse", "Shifted Weeks-Chandler-Anderson", "Standard DPD", "14-7 buffered AMOEBA FF", "Morse modified", "Rydberg", "ZBL", "ZBL mixed with Morse", "ZBL mixed with Buckingham", "Lennard-Jones tapered with MDF", "Buckingham tapered with MDF", "12-6 Lennard-Jones tapered with MDF", "Tabulated"}, {"EAM", "EEAM", "2BEAM", "2BEEAM", "Finis-Sinclair", "Extended Finis-Sinclair", "Sutton-Chen", "Gupta", "MBPC", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Tersoff", "KIHS", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic", "Truncated harmonic", "Screened harmonic", "Screened Vessal", "Truncated Vessal", "H-bond", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic", "Harmonic cosine", "Planar", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Electric field", "Oscillating Shear", "Continuous Shear", "Gravitational field", "Magnetic field", "Containing Sphere", "Repulsive Wall", "X-Piston", "Molecule in HR Zone", "HR Zone (pull out)", "HR Zone (pull in)", "Osc. Electric Field", "Umbrella sampling, harm. constant", " ", " ", " ", " ", " ", " ", " ", " "}}, {{"lj", "k-calories per mol", "Electron-Volts", "k-Joules per mol", "cgs", "electron", "micro", "nano", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic","COMPASS class2 force field", "Finite extensible nonlinear elastic (FENE)", "FENE with variable size particles", "GROMOS force field", "Shifted harmonic", "Shifted truncated harmonic", "MM3 anharmonic", "Morse", "Nonlinear", "Finite extensible nonlinear elastic DNA", "Finite extensible nonlinear elastic DNA (2)", "Finite extensible nonlinear elastic RNA", "Breakable quartic", "Special bond exclusions for 1-5 pairs and beyond", "Tabulated", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic", "CHARMM force field", "COMPASS class2 force field", "COMPASS class2 force field - 6th order", "Cosine", "Cosine with Buckingham term between 1-3", "Difference of cosines", "DREIDING force field", "Cosine with a shift", "Cosine with a shift and exponential term in spring", "Cosine with squared term", "Cross term coupling angle and bond length", "Dipole orientation", "Fourier (multiple cosines)", "Fourier (single cosine)", "MM3", "Quartic", "Combination of the harmonic (SDK)", "Tabulated", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Cosine with a shift and exponential term in spring", "CHARMM force field", "CHARMM force field with force switching", "COMPASS class2 force field", "Fourier (multiple cosines)", "Harmonic", "Helix", "Harmonic with 5 terms", "Harmonic with N terms", "OPLS force field", "Quadratic", "Spherical", "Tabulated", "Tabulated with analytic cutoff", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic", "COMPASS class2 force field", "Cosine squared", "CVFF force field", "Distance between atom planes", "Out-of-the plane distance", "Fourier (multiple cosines)", "Planar conformation", "Squared distance harmonic", "DREIDING force field", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Harmonic with Wilson Decius out-of-plane", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}}; int fvalues[2][15][21] = {{{ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 0 - Tethered { 2, 3, 2, 2, 3, 4, 3, 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 1 - Bond(s) { 2, 3, 2, 2, 3, 4, 3, 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 2 - Bond restraint(s) { 2, 4, 3, 4, 4, 4, 2, 3, 4, 3, 3, 6, 2, 4, 0, 0, 0, 0, 0, 0, 0}, // 3 - Angle(s) { 2, 4, 3, 4, 4, 4, 2, 3, 4, 3, 3, 6, 2, 4, 0, 0, 0, 0, 0, 0, 0}, // 4 - Angle restraint(s) { 3, 2, 2, 3, 1, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 5 - Dihedral(s) { 3, 2, 2, 3, 1, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 6 - Torsional restraint(s) { 3, 2, 2, 3, 1, 1, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 7 - Improper(s) { 2, 2, 1, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 8 - Inversion(s) { 2, 2, 3, 4, 3, 5, 2, 5, 3, 3, 2, 2, 4, 3, 2, 7, 7, 3, 4, 3, 0}, // 9 - vdW { 0, 0, 0, 0, 7, 9, 5, 5, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 10 - Metal(s) {11,16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 11 - Tersoff(s) { 2, 3, 4, 4, 4, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 12 - 3-body { 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 13 - 4-body { 3, 2, 2, 3, 3, 4, 3, 3, 5, 5, 5, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0}}, // 14 - External(s) {{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 0 - Tethered { 2, 4, 4, 5, 2, 3, 3, 2, 3, 3, 3, 3, 3, 5, 2, 2, 0, 0, 0, 0, 0}, // 1 - Bond(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 2 - Bond restraint(s) { 2, 4, 4, 4, 1, 3, 2, 3, 2, 3, 2, 6, 2, 4, 3, 2, 4, 2, 2, 0, 0}, // 3 - Angle(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 4 - Angle restraint(s) { 3, 4, 4, 6, 4, 3, 3, 5, 2, 4, 2,11, 2, 2, 0, 0, 0, 0, 0, 0, 0}, // 5 - Dihedral(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 6 - Torsional restraint(s) { 2, 2, 2, 3, 2, 2, 5, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 7 - Improper(s) { 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 8 - Inversion(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 9 - vdW { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 10 - Metal(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 11 - Tersoff(s) { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 12 - 3-body { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, // 13 - 4-body { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}};// 14 - External(s) int fetypes[2][16] = {{DL_ENERGY, DL_TETH, DL_BONDS, DL_BONDS, DL_ANGLES, DL_ANGLES, DL_DIHEDRAL, DL_DIHEDRAL, DL_DIHEDRAL, DL_INVERS, DL_VDW, DL_METALS, DL_TERSOFFS, DL_THREEBODY, DL_FOURBODY, DL_EXTERNAL}, {LA_ENERGY, LA_TETH, LA_BONDS, 1, LA_ANGLES, 1, LA_DIHEDRAL, 1, LA_DIHEDRAL, LA_INVERS, LA_VDW, LA_METALS, LA_TERSOFFS, LA_THREEBODY, LA_FOURBODY, LA_EXTERNAL}}; int fntypes[2][15] = {{DL_TETH_P, DL_BONDS_P, DL_BONDS_P, DL_ANGLES_P, DL_ANGLES_P, DL_DIHEDRAL_P, DL_DIHEDRAL_P, DL_DIHEDRAL_P, DL_INVERS_P, DL_VDW_P, DL_METALS_P, DL_TERSOFFS_P, DL_THREEBODY_P, DL_FOURBODY_P, DL_EXTERNAL_P}, {LA_TETH_P, LA_BONDS_P, LA_BONDS_P, LA_ANGLES_P, LA_ANGLES_P, LA_DIHEDRAL_P, LA_DIHEDRAL_P, LA_DIHEDRAL_P, LA_INVERS_P, LA_VDW_P, LA_METALS_P, LA_TERSOFFS_P, LA_THREEBODY_P, LA_FOURBODY_P, LA_EXTERNAL_P}}; char * fvars_teth[2][FTETH][FTETH_P] = {{{"k", " ", " "}, {"k", "rc", " "}, {"k", "k'", "k''"}}, {{" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}}}; int feunit_teth[2][FTETH][FTETH_P] = {{{1, 0, 0}, {1, 0, 0}, {1, 0, 0}}, {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}}; char * fvars_bond[2][FBONDS][FBONDS_P] = {{{"k", "r0", " ", " ", " "}, {"E0", "r0", "k", " ", " "}, {"A", "B", " ", " ", " "}, {"ϵ", "σ", " ", " ", " "}, {"k", "r0", "rc", " ", " "}, {"k", "r0", "k'", "k''", " "}, {"A", "ρ", "C", " ", " "}, {"k", " ", " ", " ", " "}, {"k", "R0", "Δ", " ", " "}, {"k", "ro", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "}}, {{"K", "r0", " ", " ", " "}, {"r0", "K2", "K3", "K4", " "}, {"K", "R0", "ϵ", "σ", " "}, {"K", "R0", "ϵ", "σ", "Δ"}, {"K", "r0", " ", " ", " "}, {"K", "r0", "rc", " ", " "}, {"Umin", "r0", "rc", " ", " "}, {"K", "r0", " ", " ", " "}, {"D", "α", "r0", " ", " "}, {"ϵ", "r0", "λ", " ", " "}, {"ϵ", "Δ", "r0", " ", " "}, {"ϵ", "Δ", "r0", " ", " "}, {"ϵ", "Δ", "r0", " ", " "}, {"K", "B1", "B2", "Rc", "U0"}, {"wLJ", "wCoul", " ", " ", " "}, {"Interpolation style", "Distances", " ", " ", " "}}}; int feunit_bond[2][FBONDS][FBONDS_P] = {{{1, 0, 0, 0, 0}, {1, 0, 1, 0, 0}, {1, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 1, 1, 0}, {1, 0, 1, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0}, {0, 1, 1, 1, 0}, {1, 0, 1, 0, 0}, {1, 0, 1, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 1}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}}}; char * fvars_angle[2][FANGLES][FANGLES_P] = {{{"k", "θ0", " ", " ", " ", " "}, {"k", "θ0", "k'", "k''", " ", " "}, {"k", "θ0", "ρ", " ", " ", " "}, {"k", "θ0", "ρ1", "ρ2", " ", " "}, {"k", "θ0", "ρ1", "ρ2", " ", " "}, {"k", "θ0", "a", "ρ", " ", " "}, {"k", "θ0", " ", " ", " ", " "}, {"A", "δ", "m", " ", " ", " "}, {"A", "θ0", "roij", "rojk", " ", " "}, {"A", "roij", "rojk", " ", " ", " "}, {"A", "θ0", "roij", " ", " ", " "}, {"A", "B", "C", "θ0", "roij", "rojk"}, {"k", "θ0", " ", " ", " ", " "}, {"fk", "θ0", "gr", "ro", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " "}}, {{"K", "θ0", " ", " ", " ", " "}, {"K", "θ0", "Kub", "rub", " ", " "}, {"θ0", "K2", "K3", "K4", " ", " "}, {"θ0", "K2", "K3", "K4", " ", " "}, {"K", " ", " ", " ", " ", " "}, {"K", "n", "θ0", " ", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {"C", "B", "n", " ", " ", " "}, {"Umin", "θ0", " ", " ", " ", " "}, {"Umin", "θ0", "A", " ", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {"KSS", "KBS0", "KBS1", "r12,0", "r32,0", "θ0"}, {"K", "λ0", " ", " ", " ", " "}, {"K", "C0", "C1", "C2", " ", " "}, {"K", "c", "n", "", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {"θ0", "K2", "K3", "K4", " ", " "}, {"K", "θ0", " ", " ", " ", " "}, {"Interpolation style", "Angles", " ", " ", " ", " "}}}; int feunit_angle[2][FANGLES][FANGLES_P] = {{{1, 0, 0, 0, 0, 0}, {1, 0, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0}, {0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0}}}; char * fvars_dihedral[2][FDIHEDRAL][FDIHEDRAL_P] = {{{"A", "δ", "m", " ", " ", " ", " ", " ", " ", " ", " "}, {"k", "ϕ0", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"k", "ϕ0", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"A1", "A2", "A3", " ", " ", " ", " ", " ", " ", " ", " "}, {"A", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"A", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"A0", "A1", "A2", "A3", "ϕ0", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}}, {{"Umin", "θ0", "a", " ", " ", " ", " ", " ", " ", " ", " "}, {"K", "n", "d", "weighting factor", " ", " ", " ", " ", " ", " ", " "}, {"K", "n", "d", "weighting factor", " ", " ", " ", " ", " ", " ", " "}, {"Ed", "Embt", "Eebt", "Eat", "Eaat", "Ebb13", " ", " ", " ", " ", " "}, {"m", "K", "n", "d", " ", " ", " ", " ", " ", " ", " "}, {"K", "d", "n", " ", " ", " ", " ", " ", " ", " ", " "}, {"A", "B", "C", " ", " ", " ", " ", " ", " ", " ", " "}, {"A1", "A2", "A3", "A4", "A5", " ", " ", " ", " ", " ", " "}, {"n", "A", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"K1", "K2", "K3", "K4", " ", " ", " ", " ", " ", " ", " "}, {"K", "ϕ0", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"n", "C", "K", "a", "u", "L", "b", "v", "M", "c", "w"}, {"Interpolation style", "Dihedrals", " ", " ", " ", " ", " ", " ", " ", " ", " "}, {"Interpolation style", "Dihedrals", " ", " ", " ", " ", " ", " ", " ", " ", " "}}}; int feunit_dihedral[2][FDIHEDRAL][FDIHEDRAL_P] = {{{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}}; /*gchar la_dih_class2[6][9] = {{"K1", "ϕ1", "K2", "ϕ2", "K3", "ϕ3", " ", " ", " "}, {"mbt", "A1", "A2", "A3", "r2", " ", " ", " ", " "}, {"ebt", "B1", "B2", "B3", "C1", "C2", "C3", "r1", "r3"}, {"at", "D1", "D2", "D3", "E1", "E2", "E3", "θ1", "θ2"}, {"aat", "M", "θ1", "θ2", " ", " ", " ", " ", " "}, {"bb13", "N", "r1", "r3", " ", " ", " ", " ", " "}}; int feu_la_dih_class2[6][9] = {{1, 0, 1, 0, 1, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 1, 1, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 0, 0, 0, 0, 0, 0}};*/ char * fvars_inversion[2][FINVERS][FINVERS_P] = {{{"k", "ϕ0", " "}, {"k", "ϕ0", " "}, {"A", " ", " "}, {"k", "m", "ϕ0"}, {"A", "B", " "}, {" ", " ", " "}}, {{" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}, {" ", " ", " "}}}; int feunit_inversion[2][FINVERS][FINVERS_P] = {{{1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 0}}, {{1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 0, 0}}}; // LAMMPS Impropers gchar * la_improper_style_keyw[11] = {"class2", "cossq", "cvff", "distance", "distharm", "fourier", "harmonic", "inversion/harmonic", "ring", "sqdistharm", "umbrella"}; /*gchar * la_improper_style_info[11] = {"COMPASS class2 force field", "Cosine squared", "CVFF force field", "Distance between atom planes", "Out-of-the plane distance", "Fourier (multiple cosines)", "Harmonic", "Harmonic with Wilson Decius out-of-plane", "Planar conformation", "Squared distance harmonic", "DREIDING force field"}; gchar la_improper_var[11][LIMPROPERS] = {{"Ei", "Eaa", " ", " ", " "}, {"K", "χ0", " ", " ", " "}, {"K", "d", "n", " ", " "}, {"K2", "K4", " ", " ", " "} {"K", "d0", " ", " ", " "}, {"K", "C0", "C1", "C2", "all"}, {"K", "χ0", " ", " ", " "}, {"K", "ω0", " ", " ", " "}, {"K", "θ0", " ", " ", " "}, {"K", "d02", " ", " ", " "}, {"K", "ω0", " ", " ", " "}}; gchar la_imp_class2[2][7] = {{"K", "χ0", " ", " ", " ", " ", " "}, {"aa", "M1", "M2", "M3", "θ1", "θ2", "θ3"}}; int feu_la_imp_class2[2][7] = {{1, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0}}; int feu_la_improper[15][LIMPROPERS] = {{0, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 1, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}};*/ char * fvars_vdw[2][FVDW][FVDW_P] = {{{"A", "B", " ", " ", " ", " ", " "}, {"ϵ", "ρ", " ", " ", " ", " ", " "}, {"ϵ", "ρ", "c", " ", " ", " ", " "}, {"E0", "n", "m", "r0", " ", " ", " "}, {"A", "ρ", "C", " ", " ", " ", " "}, {"A", "B", "σ", "C", "D", " ", " "}, {"A", "B", " ", " ", " ", " ", " "}, {"E0", "n", "m", "r0", "rc", " ", " "}, {"E0", "r0", "k", " ", " ", " ", " "}, {"ϵ", "σ", "Δ", " ", " ", " ", " "}, {"A", "rc", " ", " ", " ", " ", " "}, {"ϵ", "ro", " ", " ", " ", " ", " "}, {"E0", "r0", "k", "c", " ", " ", " "}, {"a", "b", "σ", " ", " ", " ", " "}, {"Z1", "Z2", " ", " ", " ", " ", " "}, {"Z1", "Z2", "rm", "ξ", "E0", "r0", "k"}, {"Z1", "Z2", "rm", "ξ", "A", "ρ", "C"}, {"ϵ", "ρ", "ri", " ", " ", " ", " "}, {"A", "ρ", "C", "ri", " ", " ", " "}, {"A", "B", "ri", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " "}}, {{"A", "B", " ", " ", " ", " ", " "}, {"A", "B", " ", " ", " ", " ", " "}, {"ϵ", "ρ", " ", " ", " ", " ", " "}, {"ϵ", "ρ", "c", " ", " ", " ", " "}, {"E0", "n", "m", "r0", " ", " ", " "}, {"A", "ρ", "C", " ", " ", " ", " "}, {"A", "B", "σ", "C", "D", " ", " "}, {"E0", "n", "m", "r0", "rc", " ", " "}, {"E0", "r0", "k", " ", " ", " ", " "}, {"ϵ", "σ", "Δ", " ", " ", " ", " "}, {"A", "rc", " ", " ", " ", " ", " "}, {"ϵ", "ro", " ", " ", " ", " ", " "}, {"E0", "r0", "k", "c", " ", " ", " "}, {"a", "b", "σ", " ", " ", " ", " "}, {"Z1", "Z2", " ", " ", " ", " ", " "}, {"Z1", "Z2", "rm", "ξ", "E0", "r0", "k"}, {"Z1", "Z2", "rm", "ξ", "A", "ρ", "C"}, {"ϵ", "ρ", "ri", " ", " ", " ", " "}, {"A", "ρ", "C", "ri", " ", " ", " "}, {"A", "B", "ri", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " "}}}; int feunit_vdw[2][FVDW][FVDW_P] = {{{1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}, {{1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0}, {1, 0, 0, 1, 1, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 1, 0, 0, 1, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0}, {1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0}}}; char * fvars_met[2][FMETALS][FMETALS_P] = {{{" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {"c0", "c1", "c2", "c", "A", "d", "β", " ", " "}, {"c0", "c1", "c2", "c3", "c4", "c", "A", "d", "B"}, {"ϵ", "a", "n", "m", "c", " ", " ", " ", " "}, {"A", "r0", "p", "B", "qij", " ", " ", " ", " "}, {"ϵ", "a", "m", "α", "ro", " ", " ", " ", " "}}, {{" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {" ", " ", " ", " ", " ", " ", " ", " ", " "}, {"c0", "c1", "c2", "c", "A", "d", "β", " ", " "}, {"c0", "c1", "c2", "c3", "c4", "c", "A", "d", "B"}, {"ϵ", "a", "n", "m", "c", " ", " ", " ", " "}, {"A", "r0", "p", "B", "qij", " ", " ", " ", " "}, {"ϵ", "a", "m", "α", "ro", " ", " ", " ", " "}}}; int feunit_met[2][FMETALS][FMETALS_P] = {{{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0}}, {{0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 1, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 0, 1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0, 0, 0, 0}}}; char * fvars_ters[2][FTERSOFFS][FTERSOFFS_P] = {{{"A", "a", "B", "b", "R", "S", "β", "η", "c", "d", "h", "χ", "ω", "δ", " ", " "}, {"A", "a", "B", "b", "R", "S", "η", "δ", "c1", "c2", "c3", "c4", "c5", "h", "α", "β"}}, {{"A", "a", "B", "b", "R", "S", "β", "η", "c", "d", "h", "χ", "ω", "δ", " ", " "}, {"A", "a", "B", "b", "R", "S", "η", "δ", "c1", "c2", "c3", "c4", "c5", "h", "α", "β"}}}; int feunit_ters[2][FTERSOFFS][FTERSOFFS_P] = {{{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, {{1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}}}; char * fvars_tbd[2][FTHREEBODY][FTHREEBODY_P] = {{{"k", "θ0", " ", " ", " "}, {"k", "θ0", "ρ", " ", " "}, {"k", "θ0", "ρ1", "ρ2", " "}, {"k", "θ0", "ρ1", "ρ2", " "}, {"k", "θ0", "a", "ρ", " "}, {"Dhb", "Rhb", " ", " ", " "}}, {{"k", "θ0", " ", " ", " "}, {"k", "θ0", "ρ", " ", " "}, {"k", "θ0", "ρ1", "ρ2", " "}, {"k", "θ0", "ρ1", "ρ2", " "}, {"k", "θ0", "a", "ρ", " "}, {"Dhb", "Rhb", " ", " ", " "}}}; int feunit_tbd[2][FTHREEBODY][FTHREEBODY_P] = {{{1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}}, {{1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}, {1, 0, 0, 0, 0}}}; char * fvars_fbd[2][FFOURBODY][FFOURBODY_P] = {{{"k", "ϕ0", " "}, {"k", "ϕ0", " "}, {"A", " ", " "}}, {{"k", "ϕ0", " "}, {"k", "ϕ0", " "}, {"A", " ", " "}}}; int feunit_fbd[2][FFOURBODY][FFOURBODY_P] = {{{1, 0, 0}, {1, 0, 0}, {1, 0, 0}}, {{1, 0, 0}, {1, 0, 0}, {1, 0, 0}}}; char * fvars_fext[2][FEXTERNAL][FEXTERNAL_P] = {{{"Ex", "Ey", "Ez", " ", " ", " "}, {"A", "n", " ", " ", " ", " "}, {"A", "z0", " ", " ", " ", " "}, {"Gx", "Gy", "Gz", " ", " ", " "}, {"Hx", "Hy", "Hz", " ", " ", " "}, {"A", "R0", "n", "Rcut", " ", " "}, {"A", "z0", "p", " ", " ", " "}, {"iindglob", "jindglob", "Pink-atom", " ", " ", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"Ex", "Ey", "Ez", "ωinps-1", " ", " "}, {"igidA", "jgidA", "k", "igidB", "jgidB", "R0"}}, {{"Ex", "Ey", "Ez", " ", " ", " "}, {"A", "n", " ", " ", " ", " "}, {"A", "z0", " ", " ", " ", " "}, {"Gx", "Gy", "Gz", " ", " ", " "}, {"Hx", "Hy", "Hz", " ", " ", " "}, {"A", "R0", "n", "Rcut", " ", " "}, {"A", "z0", "p", " ", " ", " "}, {"iindglob", "jindglob", "Pink-atom", " ", " ", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"iindglob", "jindglob", "k", "zmn", "zmx", " "}, {"Ex", "Ey", "Ez", "ωinps-1", " ", " "}, {"igidA", "jgidA", "k", "igidB", "jgidB", "R0"}}}; int feunit_fext[2][FEXTERNAL][FEXTERNAL_P] = {{{1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0}}, {{1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {1, 0, 0, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0}}}; int field_v[MAXDATA] = { 8, 8, 9, 7, 8, 5, 5, 8, 8, 9, 9, 10, 10, 10, 10, 6, 6, 5, 7, 8, 3}; int field_s[MAXDATA] = {650, 520, 520, 500, 600, 450, 600, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720, 720}; int field_a[MAXDATA] = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0}; gchar * ctitle[MAXDATA][12] ={{"Id", "Name", "Multiplicity", "Chemistry", "Atom(s)", "Species", "Viz. 3D", "Viz. Atom num."}, // Molecule(s) {"Id", "Name", "Element", "Mass", "Charge", "Frozen", "Atom(s)", "Viz. 3D"}, // Atom(s) {"Id", "Core Id", "Shell", "Masse", "Charge", "k2 (1)", "k4 (2)", "Viz. 3D", "Use (3)"}, // Core-shell unit(s) {"Id", "At.1 Id", "At.2 Id", "Length [Å]", "av. d [Å] (1)", "Viz. 3D", "Use (2)"}, // Constraint(s) {"Id", "Length [Å]", "av. d12 [Å] (1)", "Unit Id", "At. Id", "Weight (2)", "Viz. 3D", "Use (3)"}, // Mean force potential(s) {"Id", "Atom(s) in unit", "List of atom(s)", "Viz. 3D", "Use(1)"}, // Rigid unit(s) {"Id", "Atom Id", "Viz. 3D", "Use (1)", "Potential"}, // Tethering potential(s) {"Id", "At.1", "At.2", "Bond(s)", "av. d [Å] (1)", "Viz. 3D", "Use (2)", "Potential (3)"}, // Bond(s) {"Id", "At.1", "At.2", "Bond restraint(s)", "av. d [Å] (1)", "Viz. 3D", "Use (2)", "Potential (3)"}, // Bond restraint(s) {"Id", "At.1", "At.2", "At.3", "Angle(s)", "av. θ [°] (1)", "Viz. 3D", "Use (2)", "Potential (3)"}, // Angle(s) {"Id", "At.1", "At.2", "At.3", "Angle restraint(s)", "av. θ [°] (1)", "Viz. 3D", "Use (2)", "Potential (3)"}, // Angle restraint(s) {"Id", "At.1", "At.2", "At.3", "At.4", "Dihedral(s)", "av. ϕ [°] (1)", "Viz. 3D", "Use (2)", "Potential (3)"}, // Dihedrals {"Id", "At.1", "At.2", "At.3", "At.4", "Torsional restraint(s)", "av. ϕ [°] (1)", "Viz. 3D", "Use (2)", "Potential (3)"}, // Torsions {"Id", "At.1", "At.2", "At.3", "At.4", "Improper(s)", "av. ϕ [°] (1)", "Viz. 3D", "Use (2)", "Potential (3)"}, // Impropers {"Id", "At.1", "At.2", "At.3", "At.4", "Inversion(s)", "av. ϕ [°] (1)", "Viz. 3D", "Use (2)", "Potential (3)"}, // Inversion(s) {"Id", "Spec.1", "Spec.2", "Viz. 3D", "Use (1)", "VdW potential"}, // VdW(s) {"Id", "At.1", "At.2", "Viz. 3D", "Use (1)", "Metal potential"}, // Metal(s) {"Id", "At.", "Viz. 3D", "Use (1)", "Tersoff Pot."}, // Tersoff potential(s) {"Id", "At.1", "At.2*", "At.3", "Viz. 3D", "Use (1)", "Three-body Pot."}, // Three-body potential(s) {"Id", "At.1*", "At.2", "At.3", "At.4", "Viz. 3D", "Use (1)", "Four-body Pot."}, // Four-body potential(s) {"Id", "Use (1)", "Field type"}}; // External field(s) GType col_type[MAXDATA][12] = {{G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 0 - Molecule(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 1 - Atom(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 2 - Core-shell unit(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 3 - Constraint(s) {G_TYPE_INT, G_TYPE_FLOAT, G_TYPE_FLOAT, G_TYPE_INT, G_TYPE_INT, G_TYPE_FLOAT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 4 - Mean force potential(s) {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 5 - Rigid unit(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 6 - Tethering potential(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 7 - Bond(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 8 - Bond restraint(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT}, // 9 - Angle(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT}, // 10 - Angle restraint(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 11 - Dihedral(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 12 - Improper(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 13 - Torsion(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, // 14 - Inversion(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 15 - vdW(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 16 - Metal(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 17 - Tersoff potential(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 18 - Three-body potential(s) {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}, // 19 - Four-body potential(s) {G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}}; // 20 - External field(s) // 0 - nothing // 1 - combo box // 2 - viz3D bool // 3 - pick bool // 4 - editable int is_special[MAXDATA][11] ={{0, 0, 0, 0, 0, 0, 2, 3, 0, 0, 0}, // Molecule(s) {0, 0, 0, 4, 4, 0, 0, 2, 0, 0, 0}, // Atom(s) {0, 0, 0, 4, 4, 4, 4, 2, 3, 0, 0}, // Core-shell unit(s) {0, 0, 0, 4, 0, 2, 3, 0, 0, 0, 0}, // Constraint(s) {0, 4, 0, 0, 0, 4, 2, 3, 0, 0, 0}, // Mean force potential(s) {0, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0}, // Rigid unit(s) {0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0}, // Tethering potential(s) {0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0}, // Bond(s) {0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0}, // Bond restrain(s) {0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0}, // Angle(s) {0, 0, 0, 0, 0, 0, 2, 3, 1, 0, 0}, // Angle restraint(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Dihedral(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Torsional restraint(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Improper(s) {0, 0, 0, 0, 0, 0, 0, 2, 3, 1, 0}, // Inversion(s) {0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0}, // vdW(s) {0, 0, 0, 2, 3, 1, 0, 0, 0, 0, 0}, // Metal(s) {0, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0}, // Tersoff potential(s) {0, 0, 0, 0, 2, 3, 1, 0, 0, 0, 0}, // Three-body potential(s) {0, 0, 0, 0, 0, 2, 3, 1, 0, 0, 0}, // Four-body potential(s) {0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0}}; // External field(s) gboolean afp_init[MAXDATC+MAXDATA] = {TRUE, // 0 - System TRUE, // 1 - Analysis TRUE, // 2 - Electrostatics TRUE, // 3 - Equilibration TRUE, // 4 - Thermodynamics TRUE, // 5 - Molecular dynamics TRUE, // 6 - Output TRUE, // 7 - Computational TRUE, // 8 - Molecule(s) TRUE, // 9 - Atom(s) FALSE, // 10 - Shell(s) FALSE, // 11 - Constraint(s) FALSE, // 12 - Mean force potential(s) FALSE, // 13 - Rigid unit(s) FALSE, // 14 - Tethering potential(s) TRUE, // 15 - Bond(s) FALSE, // 16 - Bond restraint(s) TRUE, // 17 - Angle(s) FALSE, // 18 _ Angle restraint(s) TRUE, // 19 - Dihedral(s) FALSE, // 20 - Torsional restraint(s) FALSE, // 21 - Improper(s) FALSE, // 22 - Inversion(s) TRUE, // 23 - Vdw(s) FALSE, // 24 - Metal(s) FALSE, // 25 - Tersoff potential(s) FALSE, // 26 - Three-body potential(s) FALSE, // 27 - Four-body potential(s) FALSE};// 28 - External field(s) gchar * mo_title[8]={"Bond", "Bond restraint", "Angle", "Angle restraint", "Dihedral", "Torsional restraint", "Improper", "Inversion"}; // Energy converter, values taken from DL_POLY 'read_file.f90' and 'setup_module.f90' float internal_to_other[5] = {9648.530821, 418.4, 100.0, 0.831451115, 1.0}; GtkWidget * field_assistant; GtkTreeViewColumn * field_col[MAXDATA][11]; GtkCellRenderer * field_renderer[MAXDATA][11]; GtkWidget * mol_box[MOLIMIT-1]; GtkWidget * combo_mol[MOLIMIT-1]; GtkWidget * field_tree[MAXDATA]; GtkWidget * field_label[MAXDATA]; GtkTreeStore * field_model[MAXDATA]; GtkTreeIter field_iter; int atom_init = PARTIAL_COORD_AND_SPEC; //SPEC_ONLY; classical_field * tmp_field; glwin * tmp_view = NULL; project * tmp_proj; coord_info * tmp_coord; field_molecule * tmp_fmol; molecule * tmp_mol; field_atom* tmp_fat, * tmp_fbt, * tmp_fct, * tmp_fdt; field_shell * tmp_fshell; field_constraint * tmp_fcons; field_pmf * tmp_fpmf; field_rigid * tmp_frig; field_tethered * tmp_ftet; field_prop * tmp_fprop; field_struct * tmp_fstr; field_nth_body * tmp_fbody; field_nth_body * new_body; field_external * tmp_fext; //GtkWidget * view[13]; GtkWidget * aview; GtkWidget * cs_label[2]; GtkWidget * fwin = NULL; GtkWidget * cwin = NULL; GtkWidget * mol_num_label = NULL; GtkWidget * fibox[MAXDATC+MAXDATA+2]; GtkWidget * enbox; GtkWidget * ff_but[19]; int field_object = FALSE; gboolean field_color = FALSE; int num_field_objects = 0; int row_id; extern void field_unselect_all (); extern gboolean tersoff_question (); extern void check_tersoffs (int id, int key); extern void check_to_visualize_properties (int id); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); extern void print_lammps_atom_file (GtkTextBuffer * buf); /*! \fn int struct_id (int f) \brief number of atoms in a structural element \param f the type of structural element */ int struct_id (int f) { if (f < 9) { return 2; } else if (f < 11) { return 3; } else { return 4; } } /*! \fn int body_at (int b) \brief find the number of atom(s) in a non bonded interaction \param b */ int body_at (int b) { if (b < 2) { return 2; } else if (b == 2) { return 1; } else { return b; } } model example; /*! \fn void set_mol_num_label () \brief classical force field prepare the molecule information widget */ void set_mol_num_label () { gchar * str; str = g_strdup_printf ("%d", tmp_field -> molecules); if (mol_num_label == NULL) { mol_num_label = markup_label(str, -1, -1, 0.0, 0.5); } else { gtk_label_set_text (GTK_LABEL(mol_num_label), str); gtk_label_set_use_markup (GTK_LABEL(mol_num_label), TRUE); } } /*! \fn void setup_cs_labels (int i) \brief classical force field prepare the core-shell description strings \param i the energy unit id */ void setup_cs_labels (int i) { gchar * str; str = g_strdup_printf ("\t (1) Force constant of the core-shell spring in [%s Å-2]", exact_name(fkeysw[activef][0][i])); gtk_label_set_text (GTK_LABEL(cs_label[0]), str); gtk_label_set_use_markup (GTK_LABEL(cs_label[0]), TRUE); g_free (str); str = g_strdup_printf ("\t (2) Quartic (anharmonic) force constant of the core-shell spring in [%s Å-4]" " usually k2 >> k4", exact_name(fkeysw[activef][0][i])); gtk_label_set_text (GTK_LABEL(cs_label[1]), str); gtk_label_set_use_markup (GTK_LABEL(cs_label[1]), TRUE); g_free (str); } int ** is_param; int * has_energy; int ** is_energy; gchar *** is_var; /*! \fn gchar * parameters_info (int obj, int key, gchar ** words, float * data) \brief prepare classical force field parameter description string \param obj the type of field object \param key the formalism key for this type of object \param words the string description lists \param data the value(s) to print */ gchar * parameters_info (int obj, int key, gchar ** words, float * data) { int i; gchar * str = NULL; if (fvalues[activef][obj][key] > 0) { // float v = internal_to_other[tmp_field -> energy_unit] / internal_to_other[ff_unit]; str = g_strdup_printf (" %s= %.3f", words[0], data[0]); for (i=1; i< fvalues[activef][obj][key]; i++) str = g_strdup_printf ("%s, %s= %.3f", str, words[i], data[i]); } else { str = g_strdup_printf ("Tabulated"); } return str; } extern void print_all_field_struct (field_molecule * mol, int str); /*! \fn void fill_field_struct (GtkTreeStore * store, int id, int mo) \brief classical force field fill the tree store with structural element parameter(s) \param store the tree store to fill \param id the type of structural element \param mo the id of the target field molecule */ void fill_field_struct (GtkTreeStore * store, int id, int mo) { int j, k, l; char ** vars; gchar * stra, * strb, * strc; GtkTreeIter field_level; if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } #ifdef DEBUG //g_debug ("id= %d, mo= %d", id, mo); //if (id > 5) print_all_field_struct (tmp_fmol, id); #endif tmp_fstr = tmp_fmol -> first_struct[id]; l = id + 2; while (tmp_fstr) { gtk_tree_store_append (store, & field_level, NULL); tmp_fprop = tmp_fstr -> def; stra = g_strdup_printf ("%.3f", tmp_fstr -> av); strb = g_strdup_printf ("Default: %s (%s)", fnames[activef][l][tmp_fprop -> key], exact_name(fkeysw[activef][l][tmp_fprop -> key])); if (id < 2) { vars = (char **)fvars_bond[activef][tmp_fprop -> key]; } else if (id < 4) { vars = (char **)fvars_angle[activef][tmp_fprop -> key]; } else if (id < 7) { vars = (char **)fvars_dihedral[activef][tmp_fprop -> key]; } else { vars = (char **)fvars_inversion[activef][tmp_fprop -> key]; } strc = parameters_info (l-1, tmp_fprop -> key, vars, tmp_fprop -> val); for (k=0; k aid[k]) -> name, -1); gtk_tree_store_set (store, & field_level, 0, tmp_fstr -> id+1, k+1, tmp_fstr -> num, k+2, stra, k+3, tmp_fstr -> def -> show, k+4, tmp_fstr -> def -> use, k+5, strb, k+6, strc, k+7, tmp_fstr -> id, -1); g_free (stra); g_free (strb); g_free (strc); tmp_fat = get_active_atom (mo, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (mo, tmp_fstr -> aid[1]); if (id > 1) tmp_fct = get_active_atom (mo, tmp_fstr -> aid[2]); if (id > 3) tmp_fdt = get_active_atom (mo, tmp_fstr -> aid[3]); if (id < 2) { print_dlp_bond (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } else if (id < 4) { print_dlp_angle (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } else if (id < 6) { print_dlp_dihedral (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } else if (id < 8) { print_dlp_improper_inversion (id, NULL, tmp_fstr, tmp_fmol -> fragments[0], store, & field_level); } tmp_fstr = tmp_fstr -> next; } } /*! \fn void fill_field_body (GtkTreeStore * store, int id) \brief classical force field fill the tree store with non bonded parameter(s) \param store the tree store to fill \param id the type of non bonded interaction */ void fill_field_body (GtkTreeStore * store, int id) { int i, j, k, l; gchar * stra, * strb; GtkTreeIter field_level; if (! id) { i = get_num_vdw_max (); } tmp_fbody = tmp_field -> first_body[id]; k = body_at(id); for (i=0; i < tmp_field -> nbody[id]; i++) { gtk_tree_store_append (store, & field_level, NULL); for (j=0; j na[j] > 0) { if (! id) { gtk_tree_store_set (store, & field_level, j+1, get_body_element_name (tmp_fbody, j, 0), -1); } else { l = tmp_fbody -> ma[j][0]; gtk_tree_store_set (store, & field_level, j+1, get_active_atom (l, tmp_fbody -> a[j][0]) -> name, -1); } } } stra = g_strdup_printf ("%s (%s)", fnames[activef][10+id][tmp_fbody -> key], exact_name(fkeysw[activef][10+id][tmp_fbody -> key])); if (id == 0) strb = parameters_info (9+id, tmp_fbody -> key, fvars_vdw[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 1) strb = parameters_info (9+id, tmp_fbody -> key, fvars_met[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 2) strb = parameters_info (9+id, tmp_fbody -> key, fvars_ters[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 3) strb = parameters_info (9+id, tmp_fbody -> key, fvars_tbd[activef][tmp_fbody -> key], tmp_fbody -> val); if (id == 4) strb = parameters_info (9+id, tmp_fbody -> key, fvars_fbd[activef][tmp_fbody -> key], tmp_fbody -> val); gtk_tree_store_set (store, & field_level, 0, tmp_fbody -> id+1, k+1, tmp_fbody -> show, k+2, tmp_fbody -> use, k+3, stra, k+4, strb, -1); g_free (stra); g_free (strb); if (tmp_fbody -> next != NULL) tmp_fbody = tmp_fbody -> next; } } /*! \fn void fill_field_model (GtkTreeStore * store, int f, int m) \brief classical force field fill the tree store \param store the tree store to fill \param f the type of field object \param m the target field molecule, if any */ void fill_field_model (GtkTreeStore * store, int f, int m) { GtkTreeIter field_level, unit_level, site_level; int i, j, k, l; gchar * stra, * strb, * strc, * strd; tmp_fmol = tmp_field -> first_molecule; //if (get_active_field_elements(f) > 10000 && ! tmp_field -> show_all[f]) { } //else { switch (f) { case 0: stra = NULL; for (i=0; i< tmp_field -> molecules; i++) { tmp_mol = tmp_fmol -> mol; for (j=0; j < tmp_proj -> nspec; j++) { if (tmp_mol -> species[j] > 0) { if (tmp_mol -> species[j] == 1) { if (stra == NULL) { stra = g_strdup_printf ("%s ", exact_name(tmp_proj -> chemistry -> label[j])); } else { stra = g_strdup_printf ("%s%s ", stra, exact_name(tmp_proj -> chemistry -> label[j])); } } else { if (stra == NULL) { stra = g_strdup_printf ("%s%d ", exact_name(tmp_proj -> chemistry -> label[j]), tmp_mol -> species[j]); } else { stra = g_strdup_printf ("%s%s%d ", stra, exact_name(tmp_proj -> chemistry -> label[j]), tmp_mol -> species[j]); } } } } gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_fmol -> name, 2, tmp_fmol -> multi, 3, stra, 4, tmp_mol -> natoms, 5, tmp_mol -> nspec, 6, tmp_fmol -> show, 7, tmp_fmol -> show_id, -1); g_free (stra); stra = NULL; if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } break; case 1: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fat = tmp_fmol -> first_atom; for (i=0; i < tmp_fmol -> atoms; i++) { gtk_tree_store_append (store, & field_level, NULL); stra = g_strdup_printf ("%.3f", tmp_fat -> mass); strb = g_strdup_printf ("%.2f", tmp_fat -> charge); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_fat -> name, 2, tmp_proj -> chemistry -> label[tmp_fat -> sp], 3, stra, 4, strb, 5, tmp_fat -> frozen, 6, tmp_fat -> num / tmp_fmol -> multi, 7, tmp_fat -> show, -1); g_free (stra); g_free (strb); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } break; case 2: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fshell = tmp_fmol -> first_shell; for (i=0; i < tmp_fmol -> shells; i++) { gtk_tree_store_append (store, & field_level, NULL); if (tmp_fshell -> ia[0]) { l = tmp_fmol -> atoms_id[tmp_fshell -> ia[0]-1][0].a; tmp_fat = get_active_atom (tmp_fmol -> id, l); stra = g_strdup_printf ("%d (%s)", tmp_fshell -> ia[0], exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp])); } else { stra = g_strdup_printf ("None"); } if (tmp_fshell -> ia[1]) { l = tmp_fmol -> atoms_id[tmp_fshell -> ia[1]-1][0].a; tmp_fat = get_active_atom (tmp_fmol -> id, l); strb = g_strdup_printf ("%d (%s)", tmp_fshell -> ia[1], exact_name(tmp_proj -> chemistry -> label[tmp_fat -> sp])); } else { strb = g_strdup_printf ("None"); } strc = g_strdup_printf ("%.3f", tmp_fshell -> m); strd = g_strdup_printf ("%.2f", tmp_fshell -> z); gtk_tree_store_set (store, & field_level, 0, i+1, 1, stra, 2, strb, 3, strc, 4, strd, 5, tmp_fshell -> k2, 6, tmp_fshell -> k4, 7, tmp_fshell -> show, 8, tmp_fshell -> use, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); if (tmp_fshell -> next != NULL) tmp_fshell = tmp_fshell -> next; } break; case 3: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fcons = tmp_fmol -> first_constraint; for (i=0; i < tmp_fmol -> constraints; i++) { gtk_tree_store_append (store, & field_level, NULL); if (tmp_fcons -> ia[0]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][0].a; l = get_active_atom (m, k) -> sp; stra = g_strdup_printf ("%d (%s)", tmp_fcons -> ia[0], exact_name(tmp_proj -> chemistry -> label[l])); } else { stra = g_strdup_printf ("None"); } if (tmp_fcons -> ia[1]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][0].a; l = get_active_atom (m, k) -> sp; strb = g_strdup_printf ("%d (%s)", tmp_fcons -> ia[1], exact_name(tmp_proj -> chemistry -> label[l])); } else { strb = g_strdup_printf ("None"); } gtk_tree_store_set (store, & field_level, 0, i+1, 1, stra, 2, strb, 3, tmp_fcons -> length, 4, tmp_fcons -> av, 5, tmp_fcons -> show, 6, tmp_fcons -> use, -1); g_free (stra); g_free (strb); if (tmp_fcons -> next != NULL) tmp_fcons = tmp_fcons -> next; } break; case 4: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_fpmf = tmp_fmol -> first_pmf; for (i=0; i < tmp_fmol -> pmfs; i++) { gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_fpmf -> length, 2, tmp_fpmf -> av, 3, 0, 4, 0, 5, 0.0, 6, tmp_fpmf -> show, 7, tmp_fpmf -> use, -1); for (j=0; j<2; j++) { gtk_tree_store_append (store, & unit_level, & field_level); gtk_tree_store_set (store, & unit_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, j+1, 4, 0, 5, 0.0, 6, tmp_fpmf -> show, 7, FALSE, -1); if (tmp_fpmf -> num[j] > 0) { for (k=0; k num[j]; k++) { gtk_tree_store_append (store, & site_level, & unit_level); gtk_tree_store_set (store, & site_level, 0, -(i+1), 1, 0.0, 2, 0.0, 3, -(j+1), 4, tmp_fpmf -> list[j][k]+1, 5, tmp_fpmf -> weight[j][k], 6, tmp_fpmf -> show, 7, FALSE, -1); } } } if (tmp_fpmf -> next != NULL) tmp_fpmf = tmp_fpmf -> next; } break; case 5: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_frig = tmp_fmol -> first_rigid; for (i=0; i < tmp_fmol -> rigids; i++) { gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, tmp_frig -> num, 2, NULL, 3, tmp_frig -> show, 4, tmp_frig -> use, -1); if (tmp_frig -> num > 0) { for (j=0; j num; j++) { l = tmp_fmol -> atoms_id[tmp_frig -> list[j]][0].a; k = get_active_atom (m, l) -> sp; stra = g_strdup_printf ("%d (%s)", tmp_frig -> list[j]+1, exact_name(tmp_proj -> chemistry -> label[k])); gtk_tree_store_append (store, & unit_level, & field_level); gtk_tree_store_set (store, & unit_level, 0, -(i+1), 1, 0, 2, stra, 3, FALSE, 4, FALSE, -1); g_free (stra); } } if (tmp_frig -> next != NULL) tmp_frig = tmp_frig -> next; } break; case 6: if (tmp_field -> afp[MAXDATC]) { for (j=0; j next; } tmp_ftet = tmp_fmol -> first_tethered; for (i=0; i < tmp_fmol -> tethered; i++) { j = tmp_fmol -> atoms_id[tmp_ftet -> num-1][0].a; k = get_active_atom (m, j) -> sp; stra = g_strdup_printf ("%d (%s)", tmp_ftet -> num, exact_name(tmp_proj -> chemistry -> label[k])); strb = g_strdup_printf ("%s (%s)", fnames[activef][1][tmp_ftet -> key], exact_name(fkeysw[activef][1][tmp_ftet -> key])); strc = parameters_info (0, tmp_ftet -> key, fvars_teth[activef][tmp_ftet -> key], tmp_ftet -> val); gtk_tree_store_append (store, & field_level, NULL); gtk_tree_store_set (store, & field_level, 0, i+1, 1, stra, 2, tmp_ftet -> show, 3, tmp_ftet -> use, 4, strb, 5, strc, -1); g_free (stra); g_free (strb); g_free (strc); if (tmp_ftet -> next != NULL) tmp_ftet = tmp_ftet -> next; } break; case SEXTERN: // External field tmp_fext = tmp_field -> first_external; for (i=0; i < tmp_field -> extern_fields; i++) { gtk_tree_store_append (store, & field_level, NULL); stra = g_strdup_printf ("%s (%s)", fnames[activef][15][tmp_fext -> key], exact_name(fkeysw[activef][15][tmp_fext -> key])); gtk_tree_store_set (store, & field_level, 0, tmp_fext -> id+1, 1, tmp_fext -> use, 2, stra, 3, parameters_info (14, tmp_fext -> key, fvars_fext[activef][tmp_fext -> key], tmp_fext -> val), -1); g_free (stra); if (tmp_fext -> next != NULL) tmp_fext = tmp_fext -> next; } break; default: if (f < MOLIMIT) { fill_field_struct (store, f-7, m); } else { fill_field_body (store, f - MOLIMIT); } break; } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data) \brief change classical force field parameter toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_field_params (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_field_params (GtkToggleButton * but, gpointer data) \brief change classical force field parameter toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_field_params (GtkToggleButton * but, gpointer data) #endif { int i, j; i = GPOINTER_TO_INT (data); #ifdef GTK4 tmp_field -> afp[i] = gtk_check_button_get_active (but); #else tmp_field -> afp[i] = gtk_toggle_button_get_active (but); #endif if (i == MAXDATC) { for (j=0; j afp[MAXDATC]); gtk_combo_box_set_active (GTK_COMBO_BOX(combo_mol[j]), 0); } } else if (i > MAXDATC) { gtk_widget_set_visible (fibox[i+1], tmp_field -> afp[i]); } } /*! \fn gboolean set_nbd_but_sensitive (int nbid) \brief adjust non bonded interaction button sensitivity \param nbid the type of non bonded interaction */ gboolean set_nbd_but_sensitive (int nbid) { if (nbid == 0 || nbid == 2 || nbid == 5) { return TRUE; } else { int i, j; i = (nbid == 1) ? 2 : nbid; j = 0; field_molecule * ftmp = tmp_field -> first_molecule; while (ftmp) { j += ftmp -> atoms; ftmp = ftmp -> next; } gboolean res = (j >= i) ? TRUE : FALSE; return res; } } /*! \fn gchar * set_field_label (int f, int m) \brief prepare classical force field description string \param f the type of field object(s) \param m the field molecule id, if any */ gchar * set_field_label (int f, int m) { gchar * lab; int k; if (f < MOLIMIT) { if (tmp_field -> afp[MAXDATC]) { tmp_fmol = get_active_field_molecule (m); lab = g_strdup_printf ("the %d different fragment(s) in molecule %s\n", tmp_fmol -> multi, tmp_fmol -> name); } else { lab = g_strdup_printf ("the system\n"); } } switch (f) { case 1: lab = g_strdup_printf ("%seach contains the following %d type(s) of atom", lab, tmp_fmol -> atoms); break; case 2: if (tmp_fmol -> shells == 0) { lab = g_strdup_printf ("%sdo not contains any core-shell unit", lab); } else { lab = g_strdup_printf ("%seach contains the following %d core-shell unit", lab, tmp_fmol -> shells); } break; case 3: if (tmp_fmol -> constraints == 0) { lab = g_strdup_printf ("%sdo not contains any constraint", lab); } else { lab = g_strdup_printf ("%seach contains the following %d constraint(s)", lab, tmp_fmol -> constraints); } break; case 4: if (tmp_fmol -> pmfs == 0) { lab = g_strdup_printf ("%sdo not contains any mean force potential", lab); } else { lab = g_strdup_printf ("%seach contains the following %d type(s) of mean force potential(s)", lab, tmp_fmol -> pmfs); } break; case 5: if (tmp_fmol -> rigids == 0) { lab = g_strdup_printf ("%sdo not contains any rigid unit", lab); } else { lab = g_strdup_printf ("%seach contains the following %d rigid unit(s)", lab, tmp_fmol -> rigids); } break; case 6: if (tmp_fmol -> tethered == 0) { lab = g_strdup_printf ("%sdo not contains any tethering potential(s)", lab); } else { lab = g_strdup_printf ("%seach contains the following %d tethering potential(s)", lab, tmp_fmol -> tethered); } break; case SEXTERN: if (tmp_field -> extern_fields == 0) { lab = g_strdup_printf ("the force field do not contains any external field(s)"); } else { lab = g_strdup_printf ("the force field contains the following %d external field(s)", tmp_field -> extern_fields); } break; default: if (f < MOLIMIT) { if (f == 14) { if (tmp_fmol -> nstruct[f-7] == 0) { lab = g_strdup_printf ("%sdo not contains any %s *", lab, mo_title[f-7]); } else { lab = g_strdup_printf ("%s contains the following %d type(s) of %s *", lab, tmp_fmol -> nstruct[f-7], elemts[f]); } } else { if (tmp_fmol -> nstruct[f-7] == 0) { lab = g_strdup_printf ("%sdo not contains any %s", lab, mo_title[f-7]); } else { lab = g_strdup_printf ("%s contains the following %d type(s) of %s", lab, tmp_fmol -> nstruct[f-7], elemts[f]); } } break; } else { k = f - MOLIMIT; if (tmp_field -> nbody[k] == 0) { lab = g_strdup_printf ("the force field do not contains any %s(s)", elemts[f]); } else { lab = g_strdup_printf ("the force field contains the following %d %s(s)", tmp_field -> nbody[k], elemts[f]); } break; } } return lab; } /*! \fn G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data) \brief classical force field assistant change the target molecule for the page \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); j = gtk_combo_box_get_active (box); gtk_label_set_text (GTK_LABEL(field_label[i]), set_field_label(i, j)); gtk_label_set_use_markup (GTK_LABEL(field_label[i]), TRUE); gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, j); } /*! \fn void update_field_trees () \brief classical force field assistant update all tree models */ void update_field_trees () { int i; for (i=0; i 0 && i < MOLIMIT) { changed_mol_box (GTK_COMBO_BOX (combo_mol[i-1]), GINT_TO_POINTER(i)); } else { if (i > 0) { gtk_label_set_text (GTK_LABEL(field_label[i]), set_field_label(i, 0)); gtk_label_set_use_markup(GTK_LABEL(field_label[i]), TRUE); } gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, -1); } } } /*! \fn void get_is_energy (int i, int l) \brief get the energy unit linked parameter list \param i the type of force field object \param l 1 = prepare the associated string description(s), 0 = no description(s) */ void get_is_energy (int i, int l) { int j, k; j = (i > 1 && i < 8) ? (i-1)/2 + 1 - i/7 : i; is_energy = g_malloc (fetypes[activef][i+1]*sizeof*is_energy); if (l) { is_var = g_malloc (fetypes[activef][i+1]*sizeof*is_var); } switch (j) { case 0: for (k=0; k first_molecule; while (tmp_fmol) { tmp_fshell = get_active_shell(tmp_fmol -> id, 0); while (tmp_fshell) { if (! scale) { i =1; break; } else { tmp_fshell -> k2 = (tmp_fshell -> k2 * internal_to_other[sca]) / internal_to_other[scb]; tmp_fshell -> k4 = (tmp_fshell -> k4 * internal_to_other[sca]) / internal_to_other[scb]; tmp_fshell = tmp_fshell -> next; } } tmp_fmol = tmp_fmol -> next; } for (j=0; j<15; j++) { get_is_energy (j, 0); l = 0; if (j == 0) { tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_ftet = get_active_tethered (tmp_fmol -> id, 0); while (tmp_ftet) { for (k=0; k key]; k++) { if (is_energy[tmp_ftet -> key][k]) { is_param[j][tmp_ftet -> key] ++; if (scale) tmp_ftet -> val[k]= (tmp_ftet -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_ftet = tmp_ftet -> next; } tmp_fmol = tmp_fmol -> next; } } else if (j>0 && j<9) { tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_fstr = tmp_fmol -> first_struct[j-1]; //get_active_struct (j-1, tmp_fmol -> id, 0); while (tmp_fstr) { for (k=0; k def -> key]; k++) { if (is_energy[tmp_fstr -> def -> key][k]) { is_param[j][tmp_fstr -> def -> key] ++; if (scale) tmp_fstr -> def -> val[k] = (tmp_fstr -> def -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { for (k=0; k key]; k++) { if (is_energy[tmp_fprop -> key][k]) { is_param[j][tmp_fprop -> key] ++; if (scale) tmp_fprop -> val[k] = (tmp_fprop -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_fprop = tmp_fprop -> next; } tmp_fstr = tmp_fstr -> next; } tmp_fmol = tmp_fmol -> next; } } else { tmp_fbody = get_active_body (0, j-9); while (tmp_fbody) { for (k=0; k key]; k++) { if (is_energy[tmp_fbody -> key][k]) { is_param[j][tmp_fbody -> key] ++; if (scale) tmp_fbody -> val[k] = (tmp_fbody -> val[k] * internal_to_other[sca]) / internal_to_other[scb]; l ++; } } tmp_fbody = tmp_fbody -> next; } } has_energy[j] = l; i += l; for (k=0; k energy_unit, i); tmp_field -> energy_unit = i; } g_free (is_param); destroy_this_dialog (dialog); } /*! \fn G_MODULE_EXPORT void changed_energy_unit (GtkComboBox * box, gpointer data) \brief change the classical force field energy unit - creating the dialog \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_energy_unit (GtkComboBox * box, gpointer data) { int i, j, k, l; i = gtk_combo_box_get_active (box); if (i != tmp_field -> energy_unit) { if (field_file_has_energy_parameters(FALSE, 0, 0)) { GtkWidget * dialog = gtk_dialog_new_with_buttons ("Change energy unit ?", GTK_WINDOW(field_assistant), GTK_DIALOG_MODAL, "Yes", GTK_RESPONSE_YES, "No", GTK_RESPONSE_NO, NULL); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); GtkWidget * vbox = dialog_get_content_area (dialog); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Change the energy unit ?\nThe value of all field parameters that are energy related (listed below) will be scaled accordingly.", -1, -1, 0.5, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("List of energy related parameters in your FIELD file:\n", -1, -1, 0.5, 0.5), FALSE, FALSE, 0); GtkWidget * hbox; GtkWidget * vbax, * vbbx; GtkWidget * hax, * hbx; gchar * str; // Core-Shell tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_fshell = get_active_shell(tmp_fmol -> id, 0); if (tmp_fshell) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); vbax = create_vbox (BSEP); vbbx = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbax, FALSE, FALSE, 0); hax = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbax, hax, FALSE, FALSE, 0); str = g_strdup_printf ("\t%s(s):", felemts[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hax, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbbx, FALSE, FALSE, 0); hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbbx, hbx, FALSE, FALSE, 0); str = g_strdup_printf ("k2 and k4"); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); break; } tmp_fmol = tmp_fmol -> next; } for (j=0; j<15; j++) { if (has_energy[j]) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); vbax = create_vbox (BSEP); vbbx = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbax, FALSE, FALSE, 0); hax = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbax, hax, FALSE, FALSE, 0); str = g_strdup_printf ("\t%s:", felemts[j+7]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hax, markup_label(str, 250, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbbx, FALSE, FALSE, 0); get_is_energy (j, 1); for (k=0; k energy_unit = i; } } gtk_combo_box_set_active (box, tmp_field -> energy_unit); update_field_trees (); } /*! \fn GtkWidget * vbox_init (int p) \brief classical force field assistant prepare the field object configuration widgets \param p the type of field object */ GtkWidget * vbox_init (int p) { int i, j, k, l; int col[3]={5, 4, 4}; gchar * str; GtkWidget * vbox; GtkWidget * hbox; GtkWidget * ebox; vbox = create_vbox (BSEP); hbox = create_hbox (0); str = g_strdup_printf ("Please select the %s:", felemts[0]); ebox = fbox (hbox, str); g_free (str); enbox = create_combo (); for (j=0; j energy_unit); g_signal_connect (G_OBJECT (enbox), "changed", G_CALLBACK(changed_energy_unit), GINT_TO_POINTER(0)); gtk_widget_set_size_request (enbox, 250, 30); widget_set_sensitive (enbox, ! activef); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ebox, enbox, FALSE, FALSE, 60); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); hbox = create_hbox (0); ebox = fbox (hbox, "Please select the component(s) of the force field:"); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" Intra-molecular interaction(s):", 200, 20, 0.0, 0.5), FALSE, FALSE, 10); //str = g_strdup_printf ("Use multiple molecule(s)"); //but = check_button (str, 225, 40, tmp_field -> afp[MAXDATC], G_CALLBACK(toggle_field_params), GINT_TO_POINTER(MAXDATC)); //g_free (str); //add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); hbox = create_hbox (0); k = 2+MAXDATC; l = 0; for (i=0; i<3; i++) { ebox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ebox, FALSE, FALSE, 20); for (j=0; j afp[k], G_CALLBACK(toggle_field_params), GINT_TO_POINTER(k)); g_free (str); widget_set_sensitive (ff_but[l], ! activef); add_box_child_start (GTK_ORIENTATION_VERTICAL, ebox, ff_but[l], FALSE, FALSE, 0); k ++; l ++; } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Non-bonded interaction(s)", 200, 20, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); hbox = create_hbox (0); for (i=0; i<3; i++) { ebox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ebox, FALSE, FALSE, 20); for (j=0; j<2; j++) { str = g_strdup_printf ("Use %s(s)", elemts[k-MAXDATC]); if (activef) tmp_field -> afp[k] = FALSE; ff_but[l] = check_button (str, 225, 40, tmp_field -> afp[k], G_CALLBACK(toggle_field_params), GINT_TO_POINTER(k)); k ++; g_free (str); widget_set_sensitive (ff_but[l], set_nbd_but_sensitive (l-13)); widget_set_sensitive (ff_but[l], ! activef); add_box_child_start (GTK_ORIENTATION_VERTICAL, ebox, ff_but[l], FALSE, FALSE, 0); l ++; } } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn int get_field_tree_data (GtkWidget * tree, int treeid, GtkTreePath * path) \brief retrieve classical force field data from tree model \param tree the GtkWidget sending the signal \param treeid the type of field object \param path the path in the tree model */ int get_field_tree_data (GtkWidget * tree, int treeid, GtkTreePath * path) { int res = -1; GtkTreeModel * tmodel = gtk_tree_view_get_model (GTK_TREE_VIEW(tree)); if (gtk_tree_model_get_iter (tmodel, & field_iter, path)) { gtk_tree_model_get (tmodel, & field_iter, 0, & res, -1); if (res == 0) { gtk_tree_model_get (tmodel, & field_iter, field_v[treeid]+1, & res, -1); } else { res --; } } return res; } /*! \fn int get_field_data_id (int k, gchar * data) \brief get classical force field parameter from description string \param k the type of field object \param data the target description string */ int get_field_data_id (int k, gchar * data) { int i, j; gchar * str; i = -1; for (j=0; j -1) { if (i < MOLIMIT) k = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_mol[i-1])); if (i > 6 && i < MOLIMIT) { tmp_fstr = get_active_struct (i-7, k, j); o = struct_id (i); ids = allocint (o); if (i < 9) { vars = (char **)fvars_bond[activef][l]; } else if (i < 11) { vars = (char **)fvars_angle[activef][l]; } else if (i < 14) { vars = (char **)fvars_dihedral[activef][l]; } else { vars = (char **)fvars_inversion[activef][l]; } gtk_tree_model_get (GTK_TREE_MODEL(field_model[i]), iter, 0, & m, -1); if (m) { // Default prop for (n=0; n def -> key) { adjust_field_prop (i-7, o, NULL, ids, l); // print status of field prop str = g_strdup_printf ("Default: %s", str); gtk_tree_store_set (field_model[i], iter, field_v[i]-1, str, -1); gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, vars, tmp_fstr -> def -> val), -1); update_field_trees (); } } else { // Other prop gtk_tree_store_set_value (field_model[i], iter, field_v[i]-1, & val); for (n=1; n other, o, ids) -> val), -1); } g_free (ids); } else { switch (i) { case 6: tmp_ftet = get_active_tethered (k, j-1); tmp_ftet -> key = l; tmp_ftet -> val = NULL; tmp_ftet -> val = allocfloat (fvalues[activef][i-6][l]); gtk_tree_store_set_value (field_model[i], iter, field_v[i]-1, & val); gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (0, l, fvars_teth[activef][l], tmp_ftet-> val), -1); break; case SEXTERN: tmp_fext = get_active_external(j-1); tmp_fext -> key = l; tmp_fext -> val = NULL; tmp_fext -> val = allocfloat (fvalues[activef][i-6][l]); gtk_tree_store_set_value (field_model[i], iter, 2, & val); gtk_tree_store_set (field_model[i], iter, 3, parameters_info (i-6, l, fvars_fext[activef][l], tmp_fext -> val), -1); break; default: k = i - MOLIMIT; tmp_fbody = get_active_body (j-1, k); if (k == 2) { changeit = tersoff_question (); } if (changeit) { if (k == 2) { check_tersoffs (-1, l); gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, -1); } else { tmp_fbody -> key = l; tmp_fbody -> val = NULL; tmp_fbody -> val = allocfloat (fvalues[activef][i-6][l]); gtk_tree_store_set_value (field_model[i], iter, field_v[i]-1, & val); } } else if (i == 17) { gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_ters[activef][l], tmp_fbody -> val), -1); } if (i == 15) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_vdw[activef][l], tmp_fbody -> val), -1); if (i == 16) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_met[activef][l], tmp_fbody -> val), -1); if (i == 18) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_tbd[activef][l], tmp_fbody -> val), -1); if (i == 19) gtk_tree_store_set (field_model[i], iter, field_v[i], parameters_info (i-6, l, fvars_fbd[activef][l], tmp_fbody -> val), -1); break; } } } g_free (str); g_value_unset(& vbl); } g_value_unset(& val); } /*! \fn GtkWidget * create_combo_mol (int f) \brief classical force field create molecule selection combo box \param f the type of force field object */ GtkWidget * create_combo_mol (int f) { int i; gchar * str; GtkWidget * combo = create_combo (); tmp_fmol = tmp_field -> first_molecule; for (i=0; i molecules; i++) { str = g_strdup_printf ("%d: %s", i+1, tmp_fmol -> name); combo_text_append (combo, str); g_free (str); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } widget_set_sensitive (combo, (tmp_field -> molecules > 1) ? TRUE : FALSE); gtk_combo_box_set_active (GTK_COMBO_BOX(combo), 0); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(changed_mol_box), GINT_TO_POINTER(f+1)); return combo; } int actel; /*! \fn gchar * pop_info (int i, int id) \brief get popup information message \param i the type of element \param id the id number of the element */ gchar * pop_info (int i, int id) { int j, k, l; gchar * str = NULL; actel = 0; switch (i) { case 0: tmp_fmol = get_active_field_molecule (row_id); str = g_strdup_printf ("Molecule N°%d", id+1); actel = 1; break; default: if (i < MOLIMIT) { j = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_mol[i-1])); tmp_fmol = get_active_field_molecule (j); } switch (i) { case 1: tmp_fat = get_active_atom (j, id); str = g_strdup_printf ("Atom N°%d: \"%s\"", tmp_fat -> id+1, tmp_fat -> name); actel = tmp_fat -> num; break; case 2: if (tmp_fmol -> shells > 0) { tmp_fshell = get_active_shell (j, id); actel = 1; if (tmp_fshell -> ia[0]) { k = tmp_fmol -> atoms_id[tmp_fshell -> ia[0]-1][0].a; str = g_strdup_printf ("Core-Shell N°%d: Atom %d (%s) - ", tmp_fshell -> id+1, tmp_fshell -> ia[0], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf ("Core-Shell N°%d: None - ", tmp_fshell -> id+1); } if (tmp_fshell -> ia[1]) { k = tmp_fmol -> atoms_id[tmp_fshell -> ia[1]-1][1].a; str = g_strdup_printf ("%s%d (%s)", str, tmp_fshell -> ia[1], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf ("%sNone", str); } } break; case 3: if (tmp_fmol -> constraints > 0) { tmp_fcons = get_active_constraint (j, id); actel = 1; if (tmp_fcons -> ia[0]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[0]-1][0].a; str = g_strdup_printf ("Constrained Bond N°%d: Atom %d (%s) - ", tmp_fcons -> id+1, tmp_fcons -> ia[0], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf ("Constrained Bond N°%d: None - ", tmp_fcons -> id+1); } if (tmp_fcons -> ia[1]) { k = tmp_fmol -> atoms_id[tmp_fcons -> ia[1]-1][1].a; str = g_strdup_printf ("%s%d (%s)", str, tmp_fcons -> ia[1], exact_name(tmp_proj -> chemistry -> label[get_active_atom (j, k) -> sp])); } else { str = g_strdup_printf ("%sNone", str); } } break; case 4: if (tmp_fmol -> pmfs > 0) { tmp_fpmf = get_active_pmf (j, id); actel = 1; str = g_strdup_printf ("Mean Force Potential N°%d", tmp_fpmf -> id+1); } break; case 5: if (tmp_fmol -> rigids > 0) { tmp_frig = get_active_rigid (j, id); actel = 1; str = g_strdup_printf ("Rigid Unit N°%d: %d Atom(s)", tmp_frig -> id+1, tmp_frig -> num); } break; case 6: if (tmp_fmol -> tethered > 0) { tmp_ftet = get_active_tethered (j, id); actel = 1; str = g_strdup_printf ("Tethering Potential N°%d", tmp_ftet -> id+1); } break; case SEXTERN: if (tmp_field -> extern_fields > 0) { tmp_fext = get_active_external (row_id); str = g_strdup_printf ("%s N°: %d", felemts[i+1], tmp_fext -> id+1); actel = 1; } break; default: if (i < MOLIMIT) { if (tmp_fmol -> nstruct[i-7] > 0) { actel = 1; tmp_fstr = get_active_struct (i-7, j, row_id); str = g_strdup_printf ("%s N°%d: \"", mo_title[i-7], tmp_fstr -> id+1); for (k=0; k aid[k]) -> name); if (k nbody[k] > 0) { tmp_fbody = get_active_body (row_id, k); str = g_strdup_printf ("%s N°: %d \"%s", felemts[i+1], tmp_fbody -> id+1, get_active_atom (tmp_fbody -> ma[0][0], tmp_fbody -> a[0][0]) -> name); for (l=1; l na[l] < 0) { str = g_strdup_printf ("%s - NONE", str); } else { str = g_strdup_printf ("%s - %s", str, get_active_atom (tmp_fbody -> ma[l][0], tmp_fbody -> a[l][0]) -> name); } } str = g_strdup_printf ("%s\"", str); actel = 1; } } break; } break; } return str; } /*! \fn gchar * pop_edit (int i) \brief get edit string label \param i the type of element to edit */ gchar * pop_edit (int i) { gchar * str = NULL; switch (i) { case 0: str = g_strdup_printf ("Edit Name: \"%s\"", tmp_fmol -> name); break; default: str = g_strdup_printf ("Edit %s Properties", elemts[i]); break; } return str; } /*! \fn gchar * pop_add (int i) \brief get add string label \param i the type of element to add */ gchar * pop_add (int i) { gchar * str = NULL; if ((i>1 && i<7) || (i>MOLIMIT && i1 && i<7) || (i>MOLIMIT && i 0) { str = pop_edit (i); if (str) { fmenus = g_menu_new (); append_field_item (fmenus, str, "edit-fp", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(edit_field_prop), data, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } switch (i) { case 0: if (tmp_field -> molecules < tmp_coord -> totcoord[2] && tmp_fmol -> multi > 1) { fmenus = g_menu_new (); append_field_item (fmenus, "Add New Molecule", "add-mol", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(add_molecule_to_field), data, FALSE, FALSE, FALSE, TRUE); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } if (tmp_field -> molecules > tmp_coord -> totcoord[3] && tmp_fmol -> mol -> multiplicity > 1 && tmp_fmol -> multi < tmp_fmol -> mol -> multiplicity) { fmenus = g_menu_new (); str = g_strdup_printf ("Remove Molecule %s From Field", tmp_fmol -> name); append_field_item (fmenus, str, "rem-mol", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(remove_molecule_from_field), data, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } break; default: if (i == 1) { j = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_mol[i-1])); tmp_fmol = get_active_field_molecule (j); if (actel > 1) { fmenus = g_menu_new (); str = g_strdup_printf ("Created New Field Atom From %s Atom(s)", tmp_fat -> name); append_field_item (fmenus, str, "add-fat", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_select_atom_id_from_fied_molecule), GINT_TO_POINTER(0), FALSE, FALSE, FALSE, TRUE); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } l = 0; tmp_fbt = tmp_fmol -> first_atom; for (k=0; k atoms; k++) { if (tmp_fbt -> sp == tmp_fat -> sp) l ++; if (tmp_fbt -> next != NULL) tmp_fbt = tmp_fbt -> next; } if (l > 1) { fmenus = g_menu_new (); str = g_strdup_printf ("Remove Atom %s From Field Molecule", tmp_fat -> name); append_field_item (fmenus, str, "rem-fat", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(remove_atom_from_field_molecule), (gpointer *)tmp_fat, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } } str = pop_remove (i); if (str) append_field_item (fmenu, str, "rem-fp", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(remove_field_prop), data, FALSE, FALSE, FALSE, TRUE); g_free (str); break; } } str = pop_add (i); if (str != NULL) { fmenus = g_menu_new (); append_field_item (fmenus, str, "add-prop", i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(add_field_prop), data, FALSE, FALSE, FALSE, TRUE); g_free (str); g_menu_append_section (fmenu, NULL, (GMenuModel *)fmenus); g_object_unref (fmenus); } #ifdef GTK4 menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)fmenu, GTK_POPOVER_MENU_NESTED); gtk_widget_set_parent (menu, widget); // gtk_widget_set_size_request (menu, -1, i); #else menu = gtk_menu_new_from_model ((GMenuModel *)fmenu); #endif str = g_strdup_printf ("ff-%d", i); gtk_widget_insert_action_group (menu, str, G_ACTION_GROUP(field_pop_actions)); g_free (str); #ifdef GTK4 pop_menu_at_pointer (menu, event_x, event_y); #else pop_menu_at_pointer (menu, event); #endif /* GtkWidget * prop; menu = gtk_menu_new (); if (str != NULL) { prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); if (actel > 0) add_menu_separator (menu); } if (actel > 0) { str = pop_edit (i); if (str != NULL) { prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(edit_field_prop), data); } switch (i) { case 0: if (tmp_field -> molecules < tmp_coord -> totcoord[2] && tmp_fmol -> multi > 1) { add_menu_separator (menu); prop = create_menu_item (FALSE, "Add New Molecule"); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(add_molecule_to_field), data); } if (tmp_field -> molecules > tmp_coord -> totcoord[3] && tmp_fmol -> mol -> multiplicity > 1 && tmp_fmol -> multi < tmp_fmol -> mol -> multiplicity) { add_menu_separator (menu); str = g_strdup_printf ("Remove Molecule %s From Field", tmp_fmol -> name); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(remove_molecule_from_field), (gpointer *)tmp_fmol); } break; default: if (i == 1) { j = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_mol[i-1])); tmp_fmol = get_active_field_molecule (j); if (actel > 1) { add_menu_separator (menu); str = g_strdup_printf ("Created New Field Atom From %s Atom(s)", tmp_fat -> name); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(select_atom_id_from_fied_molecule), GINT_TO_POINTER(0)); } l = 0; tmp_fbt = tmp_fmol -> first_atom; for (k=0; k atoms; k++) { if (tmp_fbt -> sp == tmp_fat -> sp) l ++; if (tmp_fbt -> next != NULL) tmp_fbt = tmp_fbt -> next; } if (l > 1) { add_menu_separator (menu); str = g_strdup_printf ("Remove Atom %s From Field Molecule", tmp_fat -> name); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(remove_atom_from_field_molecule), (gpointer *)tmp_fat); } } str = pop_remove (i); if (str != NULL) { prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(remove_field_prop), data); } break; } } str = pop_add (i); if (str != NULL) { if (actel > 0) add_menu_separator (menu); prop = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu, prop); g_signal_connect (G_OBJECT(prop), "activate", G_CALLBACK(add_field_prop), data); } pop_menu_at_pointer (menu, (GdkEvent *)event); #endif*/ } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_pop_up_field (GtkWidget * widget, gpointer data) \brief classical force field tree model popup contextual menu callback GTK3 \param widget the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_pop_up_field (GtkWidget * widget, gpointer data) { pop_up_field_context_menu (row_id, widget, NULL, data); return TRUE; } #endif #ifdef GTK4 /*! \fn void field_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief classical force field tree model button event GTK4 \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void field_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #else /*! \fn void field_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief classical force field tree model button event GTK3 \param event the GdkEvent triggering the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void field_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #endif { if (event_type == GDK_BUTTON_PRESS) { GtkTreePath * path; GtkTreeViewColumn * column; int i, j, k; i = GPOINTER_TO_INT(data); #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(field_tree[i]), event_x, event_y, & e_x, & e_y); gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(field_tree[i]), e_x, e_y, & path, & column, & j, & k); #else gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(field_tree[i]), event_x, event_y, & path, & column, & j, & k); #endif if (path != NULL) { row_id = get_field_tree_data (field_tree[i], i, path); } else { row_id = 0; } if (event_button == 3) { #ifdef GTK4 pop_up_field_context_menu (row_id, field_tree[i], event_x, event_y, data); #else pop_up_field_context_menu (row_id, field_tree[i], event, data); #endif } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_field_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief classical force field tree model button pressed callback GTK4 \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_field_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { field_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_field_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief classical force field tree model button released callback GTK4 \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_field_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { field_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean on_field_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief classical force field tree model button event callback GTK3 \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_field_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton *)event; field_button_event (event, bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return FALSE; } #endif /*! \fn void field_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the classical force field tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void field_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k, l; int tree = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & i, -1); if (tree < SEXTERN) { if (i == 0) { gtk_tree_model_get (mod, iter, field_v[tree]+1, & i, -1); i ++; } else if (i < 0) { i = - i; } for (k=0; k 5) ? 1 : 0; if (i) { gchar * str = NULL; gtk_tree_model_get (mod, iter, field_v[tree], & str, -1); g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } else { gchar * str = NULL; GtkTreeViewColumn * cal; switch (tree) { case 0: gtk_tree_model_get (mod, iter, 3, & str, -1); break; default: // CHECK THIS cal = gtk_tree_view_get_column (GTK_TREE_VIEW(field_tree[tree]), 1); if (cal == col) { gtk_tree_model_get (mod, iter, 1, & str, -1); } else { gtk_tree_model_get (mod, iter, 2, & str, -1); } break; } g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } } /*! \fn void field_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer visibility in the classical force field tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void field_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; int tree = GPOINTER_TO_INT(data); if (tree != SEXTERN) { if (tree == 4 || tree == 5) { gtk_tree_model_get (mod, iter, 0, & j, -1); if (j < 0) j = 0; } else { for (i=0; i mass = val; if (i == 1) get_active_atom (l, k) -> charge = val; if (i == 2) get_active_shell (l, k) -> m = val; if (i == 3) get_active_shell (l, k) -> z = val; if (i == 4) get_active_shell (l, k) -> k2 = val; if (i == 5) get_active_shell (l, k) -> k4 = val; if (i == 6) get_active_constraint (l, k) -> length = val; if (i == 7) get_active_pmf (l, k) -> length = val; if (i == 8) { int n, m; gtk_tree_model_get (GTK_TREE_MODEL(field_model[j]), & iter, 3, & n, 4, & m, -1); if (n < 0 && m > 0) { get_active_pmf (l, k) -> weight[-n-1][m-1] = val; } } if (j < MOLIMIT) changed_mol_box (GTK_COMBO_BOX(combo_mol[j-1]), GINT_TO_POINTER(j)); } /*! \fn void get_field_iter_and_edit (gchar * path_string, gpointer data) \brief edit field property in the classical force field tree model \param path_string the path in the tree model \param data the associated data pointer */ void get_field_iter_and_edit (gchar * path_string, gpointer data) { int i = GPOINTER_TO_INT(data); gtk_tree_model_get_iter (GTK_TREE_MODEL(field_model[i]), & field_iter, gtk_tree_path_new_from_string (path_string)); if (i == 4 || i == 5 || (i > 6 && i < MOLIMIT)) { GValue vbl = {0, }; if (i < 6) { gtk_tree_model_get_value (GTK_TREE_MODEL(field_model[i]), & field_iter, 0, & vbl); } else { gtk_tree_model_get_value (GTK_TREE_MODEL(field_model[i]), & field_iter, field_v[i]+1, & vbl); } row_id = (int) g_value_get_int (& vbl); if (i < 6) row_id = abs(row_id) - 1; } edit_field_prop (g_simple_action_new ("Dummy", NULL), NULL, data); } /*! \fn G_MODULE_EXPORT void to_edit_field_prop (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) \brief to edit data in the classical force field tree model \param cell the GtkTreeView sending the signal \param editable the editable \param path_string the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void to_edit_field_prop (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) { destroy_this_widget (GTK_WIDGET(editable)); get_field_iter_and_edit (path_string, data); } /*! \fn G_MODULE_EXPORT void on_field_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data) \brief activating row in the classical force field tree model \param treeview the GtkTreeView sending the signal \param path the path in the tree view \param col the column in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void on_field_row_activated (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data) { get_field_iter_and_edit (gtk_tree_path_to_string (path), data); } /*! \fn GtkWidget * create_field_tree (int f) \brief classical force field create the list store selection widgets \param f the page number / type of field object(s) */ GtkWidget * create_field_tree (int f) { int i, j, k, l, m; gchar * str; GtkListStore * list_store_combo; GtkTreeIter iter; gboolean combox = FALSE; l = (f > 5) ? 1 : 0; m = 0; field_model[f] = gtk_tree_store_newv (field_v[f]+l+field_a[f], col_type[f]); field_tree[f] = gtk_tree_view_new_with_model(GTK_TREE_MODEL(field_model[f])); for (i=0; i 1 && is_special[f][i] < 4) { field_renderer[f][i] = gtk_cell_renderer_toggle_new (); field_col[f][i] = gtk_tree_view_column_new_with_attributes (ctitle[f][i-m], field_renderer[f][i], "active", i, NULL); g_signal_connect (G_OBJECT(field_renderer[f][i]), "toggled", G_CALLBACK(on_toggle_visualize_or_select_object), & tmp_view -> colorp[f][is_special[f][i]-2]); if ((f == 4 && i == field_v[f]+l-1) || f == SEXTERN) gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(field_renderer[f][i]), TRUE); gtk_tree_view_column_set_clickable (field_col[f][i], TRUE); if (f != SEXTERN) { g_signal_connect (G_OBJECT(field_col[f][i]), "clicked", G_CALLBACK(visualize_or_select_all_elements), & tmp_view -> colorp[f][is_special[f][i]-2]); } } else { field_renderer[f][i] = gtk_cell_renderer_text_new(); field_col[f][i] = gtk_tree_view_column_new_with_attributes (ctitle[f][i-m], field_renderer[f][i], "text", i, NULL); } if (is_special[f][i] == 4) { g_object_set (field_renderer[f][i], "editable", TRUE, NULL); if (f < 3) { j = 2*(f-1) + i - 3; } else if (f == 3) { j = 6; } else if (f == 4) { j = (i == 1) ? 7 : 8; } g_signal_connect (G_OBJECT(field_renderer[f][i]), "edited", G_CALLBACK(edit_field_cell), GINT_TO_POINTER(j)); } if ((f == 0 && i == 3) || (f == 2 && (i == 1 || i == 2)) || (f == 3 && (i == 1 || i == 2))) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_and_markup, GINT_TO_POINTER(f), NULL); } else if (f == 4 || f == 5) { if ((f == 4 && i < 3) || (f == 5 && i < 2)) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_and_visible, GINT_TO_POINTER(f), NULL); } else if (f == 4 && (i == 3 || i == 4 || i == 5)) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], pmf_set_color_and_visible, GINT_TO_POINTER(i), NULL); } else if (f == 5 && i == 2) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], rig_set_color_and_visible, GINT_TO_POINTER(f), NULL); } else { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_visible, GINT_TO_POINTER(f), NULL); } } else if (f > 6 && f < MOLIMIT && (i == 0 || i == struct_id(f)+1)) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], prop_set_color_and_visible, GINT_TO_POINTER(f), NULL); } else if (l == 1 && i > field_v[f]-2) { if (i == field_v[f]-1) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_markup_and_visible_box, GINT_TO_POINTER(f), NULL); } else if (i == field_v[f]) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color_markup_and_visible, GINT_TO_POINTER(f), NULL); g_object_set (field_renderer[f][i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(field_renderer[f][i]), "editing-started", G_CALLBACK(to_edit_field_prop), GINT_TO_POINTER(f)); } } else if (is_special[f][i] < 2 || is_special[f][i] > 3) { gtk_tree_view_column_set_cell_data_func (field_col[f][i], field_renderer[f][i], field_set_color, GINT_TO_POINTER(f), NULL); } gtk_tree_view_column_set_alignment (field_col[f][i], 0.5); gtk_tree_view_append_column(GTK_TREE_VIEW(field_tree[f]), field_col[f][i]); } fill_field_model (field_model[f], f, 0); g_object_unref (field_model[f]); GtkTreeSelection * fieldselect = gtk_tree_view_get_selection (GTK_TREE_VIEW(field_tree[f])); gtk_tree_selection_set_mode (fieldselect, GTK_SELECTION_SINGLE); #ifdef GTK4 add_widget_gesture_and_key_action (field_tree[f], "field-button-pressed", G_CALLBACK(on_field_button_pressed), GINT_TO_POINTER(f), "field-button-released", G_CALLBACK(on_field_button_released), GINT_TO_POINTER(f), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(field_tree[f]), "button_press_event", G_CALLBACK(on_field_button_event), GINT_TO_POINTER(f)); g_signal_connect (G_OBJECT(field_tree[f]), "popup-menu", G_CALLBACK(on_pop_up_field), GINT_TO_POINTER(f)); g_signal_connect (G_OBJECT(field_tree[f]), "row-activated", G_CALLBACK(on_field_row_activated), GINT_TO_POINTER(f)); #endif return field_tree[f]; } /*! \fn void create_field_list (GtkWidget * vbx, int f) \brief classical force field creation prepare list store selection widgets \param vbx the GtkWidget sending the signal \param f the page number */ void create_field_list (GtkWidget * vbx, int f) { int i; field_tree[f] = NULL; field_model[f] = NULL; for (i=0; i<11; i++) { field_renderer[f][i] = NULL; field_col[f][i] = NULL; } GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN); if (f == 0) { gtk_widget_set_size_request (scrollsets, field_s[f], 175); } else if (f < MOLIMIT) { if (f == 1) { gtk_widget_set_size_request (scrollsets, field_s[f], 320); } else if (f == 8 || f == 10 || f == 12 || f == 13) { gtk_widget_set_size_request (scrollsets, field_s[f], 180); } else { gtk_widget_set_size_request (scrollsets, field_s[f], 220); } } else { gtk_widget_set_size_request (scrollsets, field_s[f], 300); } add_container_child (CONTAINER_SCR, scrollsets, create_field_tree(f)); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, scrollsets, FALSE, FALSE, (800-field_s[f])/2); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, hbox, FALSE, FALSE, 20); } /*! \fn GtkWidget * create_mol_box (int f) \brief classical force field create molecule selection widgets \param f the type of force field object */ GtkWidget * create_mol_box (int f) { GtkWidget * hbox; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Please select molecule: ", -1, -1, 0.0, 0.5), FALSE, FALSE, 100); combo_mol[f] = create_combo_mol (f); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo_mol[f], FALSE, FALSE, 10); return hbox; } /*! \fn GtkWidget * vbox_field (int f) \brief classical force field create page option widgets \param f the page number */ GtkWidget * vbox_field (int f) { gchar * str; GtkWidget * vbx; GtkWidget * hbx; GtkWidget * vbox; GtkWidget * hbox; vbox = create_vbox (5); if (f > 6 && f < MOLIMIT) { hbx = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbx, FALSE, FALSE, 0); vbx = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, vbx, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbx, gtk_image_new_from_file(ifield[f-7]), FALSE, FALSE, 50); } if (f == 0) { hbox = fbox (vbox, "Number of isolated molecular fragments: "); str = g_strdup_printf ("%d", tmp_coord -> totcoord[2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 75); g_free (str); str = g_strdup_printf ("\tEach of these fragments can be described separately in the force field."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); hbox = fbox (vbox, "Number of distinct molecules: "); str = g_strdup_printf ("%d", tmp_coord -> totcoord[3]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 75); g_free (str); hbox = fbox (vbox, "Number of molecules in the force field: "); set_mol_num_label (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, mol_num_label, FALSE, FALSE, 75); } else if (f < MOLIMIT) { // if f > 0, ie. atoms tab at least // need a combobox to pick the 'active' molecule and its corresponding force field // If using molecules the combo box is active, and visible // Otherwise deactivate and hide the combo box // Anyway fill the treestore according to the selection mol_box[f-1] = create_mol_box (f-1); if (f > 6 && f < MOLIMIT) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, mol_box[f-1], FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, mol_box[f-1], FALSE, FALSE, 0); } widget_set_sensitive (mol_box[f-1], tmp_field -> afp[MAXDATC]); } if (f > 6 && f < MOLIMIT) { hbox = fbox (vbx, g_strdup_printf ("%s(s) properties: ", felemts[f+1])); } else { hbox = fbox (vbox, g_strdup_printf ("%s(s) properties: ", felemts[f+1])); } if (f > 0) { field_label[f] = markup_label(set_field_label(f, 0), 120, 40, 0.35, 0.5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, field_label[f], TRUE, TRUE, 0); if (f > 6 && f < MOLIMIT) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbx, hbox, FALSE, FALSE, 10); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); } } create_field_list (vbox, f); if (f > 6 && f < MOLIMIT) { if (f == 8 || f == 10 || f == 12 || f == 13) { int g = (f < 12) ? f - 1 : 11; str = g_strdup_printf ("\t * in the FIELD file %s(s) appear in the %s section.\n" "\t They are presented separately in this assistant for clarity purposes only.", elemts[f], elemts[g]); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 14) { str = g_strdup_printf ("\t * the potential will be calculated by the sum of the 3 possible inversion terms between atoms 1 (center), 2, 3 and 4."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } str = g_strdup_printf ("\t (1) average value for the force field element as measured in the model."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf ("\t (2) only the selected element(s) will be used to create the force field."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf ("\t (3) each force field element can be tuned separately, if not the Default parameters will be used."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 2) { cs_label[0] = markup_label(" ", -1, -1, 0.0, 0.5); cs_label[1] = markup_label(" ", -1, -1, 0.0, 0.5); setup_cs_labels (tmp_field -> energy_unit); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cs_label[0], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cs_label[1], FALSE, FALSE, 0); str = g_strdup_printf ("\t (3) only the selected element(s) will be used to create the force field."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 3) { str = g_strdup_printf ("\t (1) average value for the force field element as measured in the model."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf ("\t (2) only the selected element(s) will be used to create the force field."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if (f == 4) { str = g_strdup_printf ("\t (1) average distance between the barycenters of units 1 and 2 as measured in the model."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf ("\t (2) if all 0.0 then atomic weight(s) will be used by DL-POLY."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf ("\t (3) only the selected element(s) will be used to create the force field."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } else if ((f > 2 && f < 7) || f > 11) { str = g_strdup_printf ("\t (1) only the selected element(s) will be used to create the force field."); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } return vbox; } GtkWidget * field_i_prep[2]; GtkWidget * field_i_box[2]; GtkWidget * field_i_lab[2]; GtkWidget * field_i_fixed[2]; GtkWidget * field_i_combo[2]; GtkWidget * field_i_obj[2]; GtkWidget * preview_but; gboolean assist_init; int saved_label_format[2]; int saved_label_position[2]; /*! \fn void close_the_assistant (GtkAssistant * assistant) \brief classical force field creation close the assistant \param assistant the target assistant */ void close_the_assistant (GtkAssistant * assistant) { field_assistant = destroy_this_widget (field_assistant); int j; #ifdef GTK3 // GTK3 Menu Action To Check gboolean i = (tmp_proj -> force_field[activef]) ? TRUE : FALSE; widget_set_sensitive (tmp_view -> color_styles[5], i); widget_set_sensitive (tmp_view -> color_styles[5+ATOM_MAPS], i); #endif field_color = FALSE; for (j=0; j<2; j++) { tmp_view -> anim -> last -> img -> labels_format[j] = saved_label_format[j]; tmp_view -> anim -> last -> img -> labels_position[j] = saved_label_position[j]; } field_unselect_all (); /* tmp_fmol = tmp_field -> first_molecule; for (j=0; j molecules; j++) { g_debug ("FIELD_CANCEL:: Mol= %d, show= %d, show_id= %d", j, tmp_fmol -> show, tmp_fmol -> show_id); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } */ // restore selection if any from calc.c restore_ogl_selection (tmp_view); mol_num_label = NULL; tmp_field = NULL; tmp_view = NULL; if (! assist_init) { if (tmp_proj -> force_field[activef]) { g_free (tmp_proj -> force_field[activef]); tmp_proj -> force_field[activef] = NULL; } } } /*! \fn G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data) \brief classical force field creation cancel assistant \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_assistant_cancel (GtkAssistant * assistant, gpointer data) { close_the_assistant (assistant); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data) \brief classical force field creation cancel event callback GTK4 \param assistant the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWindow * assistant, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) \brief classical force field creation cancel event callback GTK3 \param assistant the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_assistant_cancel_event (GtkWidget * assistant, GdkEvent * event, gpointer data) #endif { on_assistant_cancel (((GtkAssistant *)assistant), data); return TRUE; } /*! \fn G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data) \brief classical force field creation close assistant \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_assistant_close (GtkAssistant * assistant, gpointer data) { close_the_assistant (assistant); } /*! \fn G_MODULE_EXPORT gint on_assistant_go_forward (gint current_page, gpointer data) \brief classical force field assistant find the next page to go to \param current_page the current page id \param data the associated data pointer */ G_MODULE_EXPORT gint on_assistant_go_forward (gint current_page, gpointer data) { int i, j; j = -1; switch (current_page) { case 0: j = 1; if (! tmp_field -> prepare_file[0]) { j = MAXDATC+1; if (! tmp_field -> prepare_file[1]) j += MAXDATA+2; } return j; break; case MAXDATC+MAXDATA+2: return -1; break; default: if (current_page > MAXDATC-1 && tmp_field -> prepare_file[1]) { for (i=current_page-1; i afp[i]) { j = i+2; break; } } } else if (tmp_field -> prepare_file[0]) { for (i=current_page; i afp[i]) { j = i+1; break; } } } if (j == -1) j = MAXDATC+MAXDATA+2; return j; break; } } /*! \fn G_MODULE_EXPORT void on_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) \brief prepare classical force field assistant pages before display \param assistant the GtkAssistant sending the signal \param page the current page \param data the associated data pointer */ G_MODULE_EXPORT void on_assistant_prepare (GtkAssistant * assistant, GtkWidget * page, gpointer data) { int i, j, k; i = gtk_assistant_get_current_page (assistant); field_unselect_all (); switch (i) { case 0: // if (is_the_widget_visible(preview_but)) gtk_widget_hide (preview_but); break; case 1: // if (! is_the_widget_visible(preview_but)) gtk_widget_show (preview_but); break; case MAXDATC+MAXDATA+2: break; default: j = field_object = i-2-MAXDATC; toviz.c = 1; switch (j) { case 0: tmp_fmol = tmp_field -> first_molecule; for (k=0; k molecules; k++) { if (tmp_fmol -> show) visualize_object (j, k, -1); if (tmp_fmol -> show_id) visualize_object (-1, k, -1); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } break; default: if (j > -1 && j < SEXTERN) check_to_visualize_properties (j); break; } break; } init_default_shaders (tmp_view); } /*! \fn void hide_show_this_pages (int start, int end, int status, int delta) \brief classical force field assistant show / hide pages \param start starting page id \param end ending page id \param status 0 = hide, 1 = show \param delta delta from starting page */ void hide_show_this_pages (int start, int end, int status, int delta) { int i; for (i=start; i afp[i] : status); } } } } /*! \fn void remove_classical_assistant_pages () \brief classical force field creation remove assistant pages */ void remove_classical_assistant_pages () { int i; GtkAssistant * assist = GTK_ASSISTANT(field_assistant); mol_num_label = destroy_this_widget (mol_num_label); for (i=MAXDATC+MAXDATA+1; i>-1; i--) { gtk_assistant_remove_page (assist, i+1); fibox[i] = destroy_this_widget(fibox[i]); } } /*! \fn G_MODULE_EXPORT void run_clean_field (GtkDialog * dial, gint response_id, gpointer data) \brief clean force field data - running the dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_clean_field (GtkDialog * dial, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { gtk_assistant_set_page_complete (GTK_ASSISTANT (field_assistant), gtk_assistant_get_nth_page(GTK_ASSISTANT (field_assistant), 0), FALSE); gtk_label_set_text (GTK_LABEL(field_i_lab[1]), "Initialize force field using: "); int i; for (i=0; i<2; i++) { gtk_combo_box_set_active (GTK_COMBO_BOX(field_i_combo[i]), -1); //tmp_field -> prepare_file[i] = TRUE; widget_set_sensitive (field_i_combo[i], TRUE); widget_set_sensitive (field_i_lab[i], TRUE); widget_set_sensitive (field_i_prep[i], FALSE); field_i_obj[i] = destroy_this_widget (field_i_obj[i]); field_i_obj[i] = stock_image (CANCEL); gtk_widget_show (field_i_obj[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_obj[i], TRUE, TRUE, 25); } for (i=0; i prepare_file[i] = gtk_check_button_get_active (but); #else tmp_field -> prepare_file[i] = gtk_toggle_button_get_active (but); #endif if (i == 1) { for (j=0; j<2; j++) { widget_set_sensitive (field_i_lab[j], (tmp_field -> prepare_file[i] && ! assist_init) ? TRUE : FALSE); widget_set_sensitive (field_i_combo[j], (tmp_field -> prepare_file[i] && ! assist_init) ? TRUE : FALSE); } hide_show_this_pages (MAXDATC-1, MAXDATC+MAXDATA, tmp_field -> prepare_file[1], 1); } else { hide_show_this_pages (0, MAXDATC, tmp_field -> prepare_file[0], 0); } } /*! \fn void add_classical_assistant_pages (int p) \brief classical force field assistant add pages \param p the target project id */ void add_classical_assistant_pages (int p) { int i; gchar * info; GtkAssistant * assist = GTK_ASSISTANT(field_assistant); // Control file for (i=0; i Finalize the creation of the DL-POLY input file(s) now !"); add_box_child_start (GTK_ORIENTATION_VERTICAL, fibox[i], markup_label(info, -1, -1, 0.5, 0.5), TRUE, TRUE, 100); g_free (info); add_box_child_start (GTK_ORIENTATION_VERTICAL, fibox[i], markup_label("\n \tNote: You can re-open this assistant later if required to adjust your choices\n", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); gtk_assistant_append_page (assist, fibox[i]); gtk_assistant_set_page_title (assist, fibox[i], "Create the DL-POLY input file(s) now !"); gtk_assistant_set_page_type (assist, fibox[i], GTK_ASSISTANT_PAGE_CONFIRM); gtk_assistant_set_page_complete (assist, fibox[i], TRUE); gtk_assistant_update_buttons_state (assist); append_pages = TRUE; } gchar * field_init[3]={"Atomic species as field atom(s)", "Atomic species and total coordination(s) as field atom(s)", "Atomic species and partial coordination(s) as field atom(s)"}; // gboolean create_ff_structure (gpointer data) /*! \fn void create_ff_structure (int ai, int type) \brief create the classical force field data structure and update widgets \param ai how to initialize the force field (0 = atomic species, 1 = total coordination, 2 = partial coordination) \param type the type of force field to create (0 = DL-POLY, 1 = LAMMPS) */ void create_ff_structure (int ai, int type) { int i; //if (append_pages) remove_classical_assistant_pages (); tmp_proj -> force_field[activef] = create_force_field_data_structure (ai); tmp_proj -> force_field[activef] -> type = type; tmp_field = tmp_proj -> force_field[activef]; for (i=0; i afp[i] = afp_init[i]; for (i=0; i<2; i++) { widget_set_sensitive (field_i_prep[i], TRUE); if (activef && ! i) { widget_set_sensitive (field_i_prep[i], FALSE); tmp_field -> prepare_file[i] = FALSE; } else { #ifdef GTK4 tmp_field -> prepare_file[i] = gtk_check_button_get_active (GTK_CHECK_BUTTON(field_i_prep[i])); #else tmp_field -> prepare_file[i] = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(field_i_prep[i])); #endif } widget_set_sensitive (field_i_lab[i], FALSE); } // for (i=13; i<19; i++) widget_set_sensitive (ff_but[i], set_nbd_but_sensitive (i)); add_classical_assistant_pages (tmp_view -> proj); set_mol_num_label (); update_field_trees (); field_i_obj[1] = destroy_this_widget (field_i_obj[1]); field_i_obj[1] = stock_image (APPLY); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[1], field_i_obj[1], TRUE, TRUE, 25); gtk_label_set_text (GTK_LABEL(field_i_lab[1]), "Force field was initialized using: "); gtk_assistant_set_page_complete (GTK_ASSISTANT (field_assistant), gtk_assistant_get_nth_page(GTK_ASSISTANT (field_assistant), 0), TRUE); show_the_widgets (field_assistant); if (tmp_field -> md_opts[1] == 0.0) gtk_widget_hide (extra_vbox[1]); hide_show_this_pages (0, MAXDATC, tmp_field -> prepare_file[0], 0); hide_show_this_pages (MAXDATC-1, MAXDATC+MAXDATA, tmp_field -> prepare_file[1], 1); // return FALSE; } /*! \fn G_MODULE_EXPORT void changed_init_box (GtkComboBox * box, gpointer data) \brief classical force field change initialization parameter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_init_box (GtkComboBox * box, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); j = gtk_combo_box_get_active (box); if (j > -1) { switch (i) { case 0: tmp_field -> type = j; setup_this_force_field (j); if (tmp_field -> type == j) { field_i_obj[0] = destroy_this_widget (field_i_obj[0]); field_i_obj[0] = stock_image (APPLY); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[0], field_i_obj[0], TRUE, TRUE, 25); gtk_widget_show (field_i_obj[0]); } else { gtk_combo_box_set_active (box, -1); } break; case 1: if (tmp_field -> type > -1) { widget_set_sensitive (field_i_combo[0], FALSE); widget_set_sensitive (field_i_combo[1], FALSE); field_i_obj[1] = destroy_this_widget (field_i_obj[1]); field_i_obj[1] = gtk_spinner_new (); gtk_widget_show (field_i_obj[1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[1], field_i_obj[1], TRUE, TRUE, 25); gtk_widget_show (field_i_obj[1]); gtk_spinner_start (GTK_SPINNER(field_i_obj[1])); // gdk_threads_add_idle (create_ff_structure, GINT_TO_POINTER(j)); create_ff_structure (j, tmp_field -> type); assist_init = TRUE; } else { show_warning ("Please select the force field first !", field_assistant); } break; } } } /*! \fn G_MODULE_EXPORT void show_force_field_preview (GtkButton * but, gpointer data) \brief show classical force field input files preview \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_force_field_preview (GtkButton * but, gpointer data) { GtkWidget * preview = (activef) ? dialogmodal ("LAMMPS files preview", GTK_WINDOW(field_assistant)) : dialogmodal ("DL-POLY files preview", GTK_WINDOW(field_assistant)); GtkWidget * notebook = gtk_notebook_new (); GtkWidget * scrollsets; GtkWidget * aview; gchar * ff_files[2][3] = {{"CONTROL", "FIELD" , "CONFIG"}, {"LAMMPS.IN", "LAMMPS.DATA", ""}}; int num_files[2] = {3, 2}; int i, j; j = -1; for (i=0; i prepare_file[0]) || (i > 0 && tmp_field -> prepare_file[1])) { j ++; scrollsets = create_scroll (NULL, 700, 350, GTK_SHADOW_ETCHED_IN); aview = create_text_view (-1, -1, 0, 1, NULL, NULL, NULL); add_container_child (CONTAINER_SCR, scrollsets, aview); if (! activef) { switch (i) { case 0: print_dlp_control (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; case 1: print_dlp_field (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; case 2: print_dlp_config (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; } } else { switch (i) { case 0: break; case 1: print_lammps_atom_file (gtk_text_view_get_buffer(GTK_TEXT_VIEW(aview))); break; } } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), scrollsets, gtk_label_new (ff_files[activef][i])); } } add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (preview), notebook, FALSE, FALSE, 0); if (gtk_assistant_get_current_page (GTK_ASSISTANT (field_assistant)) > MAXDATC && tmp_field -> prepare_file[0]) gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), 1); run_this_gtk_dialog (preview, G_CALLBACK(run_destroy_dialog), NULL); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_assistant_apply (GtkNativeDialog * info, gint response_id, gpointer data) \brief on classical force field assistant apply - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_assistant_apply (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_assistant_apply (GtkDialog * info, gint response_id, gpointer data) \brief on classical force field assistant apply - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_assistant_apply (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int i; GtkTextBuffer * buffer; GtkTextIter bStart; GtkTextIter bEnd; GError * err = NULL; gboolean result = FALSE; gchar * ff_files[2][3] = {{"CONTROL", "FIELD" , "CONFIG"}, {"LAMMPS.IN", "LAMMPS.DATA", ""}}; int num_files[2] = {3, 2}; if (response_id == GTK_RESPONSE_ACCEPT) { gchar * direname = file_chooser_get_current_folder (chooser); if (direname != NULL) { gchar * filename; gchar * str; gboolean doit[3]; for (i=0; i prepare_file[0]) || (i > 0 && tmp_field -> prepare_file[1])) { filename = g_strdup_printf ("%s/%s", direname, ff_files[activef][i]); if (g_file_test(filename, G_FILE_TEST_EXISTS)) { str = g_strdup_printf ("%s file found in '%s'\nreplace existing %s file ?", ff_files[activef][i], direname, ff_files[activef][i]); doit[i] = ask_yes_no ("Replace file ?", str, GTK_MESSAGE_QUESTION, field_assistant); g_free (str); } else { doit[i] = TRUE; } } else { doit[i] = FALSE; } } for (i=0; i message), 0, field_assistant); g_error_free (err); } g_free (filename); } } g_free (direname); } } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn void on_assistant_apply (GtkAssistant * assistant, gpointer data) \brief on classical force field assistant apply - creating the dialog \param assistant the GtkAssistant sending the signal \param data the associated data pointer */ void on_assistant_apply (GtkAssistant * assistant, gpointer data) { gchar * text; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif gchar * ff_type[2] = {"DL-POLY", "LAMMPS"}; text = g_strdup_printf ("Saving %s input file(s)", ff_type[activef]); info = create_file_chooser (text, GTK_WINDOW(assistant), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, "Save"); g_free (text); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_on_assistant_apply), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_on_assistant_apply), NULL); // GTK3 Menu Action To Check gboolean i = (tmp_proj -> force_field[activef]) ? TRUE : FALSE; widget_set_sensitive (tmp_view -> color_styles[5], i); widget_set_sensitive (tmp_view -> color_styles[5+ATOM_MAPS], i); #endif } /*! \fn void create_classical_force_field (int p, int f) \brief create classical force field prepare the assistant \param p the target project id \param f 0 = DL-POLY, 1 = LAMMPS */ void create_classical_force_field (int p, int f) { field_assistant = gtk_assistant_new (); gtk_widget_set_size_request (field_assistant, 800, 600); int i, j, k; activef = f; field_color = TRUE; field_object = -1; selected_aspec = -1; opengl_project_changed (p); tmp_proj = get_project_by_id(p); tmp_coord = tmp_proj -> coord; tmp_view = tmp_proj -> modelgl; tmp_fmol = NULL; tmp_fmol = g_malloc0 (sizeof*tmp_fmol); gchar * field_type[2] = {"DL-POLY 4", "LAMMPS"}; // Preparing data structure and pointers append_pages = FALSE; if (tmp_proj -> force_field[activef] == NULL) { assist_init = FALSE; tmp_proj -> force_field[activef] = g_malloc0 (sizeof*tmp_proj -> force_field[activef]); tmp_proj -> force_field[activef] -> type = -1; tmp_proj -> force_field[activef] -> atom_init = -1; for (i=0; i<2; i++) tmp_proj -> force_field[activef] -> prepare_file[i] = TRUE; if (activef) tmp_proj -> force_field[activef] -> prepare_file[0] = FALSE; } else { assist_init = TRUE; if (tmp_proj -> force_field[activef] -> type > -1) setup_this_force_field (tmp_proj -> force_field[activef] -> type); //tmp_field = duplicate_dlpoly_field (tmp_proj -> force_field[activef]); } tmp_field = tmp_proj -> force_field[activef]; gtk_window_set_resizable (GTK_WINDOW (field_assistant), FALSE); gtk_window_set_modal (GTK_WINDOW (field_assistant), TRUE); gchar * info = g_strdup_printf ("%s calculation assistant", field_type[f]); gtk_window_set_title (GTK_WINDOW(field_assistant), info); g_free (info); GtkWidget * intro = create_vbox (BSEP); info = g_strdup_printf (" This assistant will help you to setup a %s \n" "calculation using %s 3D model as starting point", field_type[f], tmp_proj -> name); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label(info, -1, -1, 0.5, 0.5), FALSE, FALSE, 50); g_free (info); gchar * i_titles[2][2] = {{"Force field: ", "Force field: "}, {"Initialize force field using: ","Force field was initialized using: "}}; for (i=0; i<2; i++) { field_i_box[i] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, field_i_box[i], FALSE, FALSE, 0); j = (i == 0) ? tmp_field -> type + 1 : tmp_field -> atom_init + 1; k = (j) ? 1 : 0; field_i_lab[i] = markup_label(i_titles[i][k], 210, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_lab[i], FALSE, FALSE, 20); field_i_combo[i] = create_combo (); gtk_combo_box_set_active (GTK_COMBO_BOX(field_i_combo[i]), -1); switch (i) { case 0: for (j=0; j type); break; case 1: for (j=0; j<3; j++) combo_text_append (field_i_combo[i], field_init[j]); gtk_combo_box_set_active (GTK_COMBO_BOX(field_i_combo[i]), tmp_field -> atom_init); break; } widget_set_sensitive (field_i_combo[i], ! k); g_signal_connect (G_OBJECT (field_i_combo[i]), "changed", G_CALLBACK(changed_init_box), GINT_TO_POINTER(i)); field_i_fixed[i] = gtk_fixed_new (); gtk_widget_set_size_request (field_i_fixed[i], 410, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_fixed[i], FALSE, FALSE, 0); gtk_fixed_put (GTK_FIXED(field_i_fixed[i]), field_i_combo[i], 0, 0); field_i_obj[i] = (k) ? stock_image (APPLY) : stock_image (CANCEL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, field_i_box[i], field_i_obj[i], FALSE, FALSE, 25); } GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, hbox, FALSE, FALSE, 10); GtkWidget * but = check_button ("\tDelete the existing force field data and reset the parameters to the default values", -1, 40, FALSE, G_CALLBACK(clean_field), GINT_TO_POINTER(p)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 85); if (! f) { field_i_prep[0] = check_button ("\tPrepare the CONTROL file to describe the calculation", -1, 40, tmp_field -> prepare_file[0], G_CALLBACK(select_field_action), GINT_TO_POINTER(0)); field_i_prep[1] = check_button ("\tPrepare the FIELD and CONFIG files to describe the force field and the atomistic model", -1, 40, tmp_field -> prepare_file[1], G_CALLBACK(select_field_action), GINT_TO_POINTER(1)); } else { field_i_prep[0] = check_button ("\tPrepare the LAMMPS Input to describe the calculation", -1, 40, tmp_field -> prepare_file[0], G_CALLBACK(select_field_action), GINT_TO_POINTER(0)); field_i_prep[1] = check_button ("\tPrepare the LAMMPS Atom file to describe the force field and the atomistic model", -1, 40, tmp_field -> prepare_file[1], G_CALLBACK(select_field_action), GINT_TO_POINTER(1)); } for (i=0; i<2; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, hbox, FALSE, FALSE, 0); widget_set_sensitive (field_i_prep[i], assist_init); if (activef) widget_set_sensitive (field_i_prep[0], 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, field_i_prep[i], FALSE, FALSE, 50); } add_box_child_start (GTK_ORIENTATION_VERTICAL, intro, markup_label("\n \tNote: You can re-open this assistant later if required to adjust your choices\n", -1, -1, 0.0, 0.5), FALSE, FALSE, 50); gtk_assistant_append_page (GTK_ASSISTANT (field_assistant), intro); info = g_strdup_printf ("%s calculation set-up", field_type[f]); gtk_assistant_set_page_title (GTK_ASSISTANT (field_assistant), intro, info); g_free (info); gtk_assistant_set_page_type (GTK_ASSISTANT (field_assistant), intro, GTK_ASSISTANT_PAGE_INTRO); gtk_assistant_set_page_complete (GTK_ASSISTANT (field_assistant), intro, assist_init); preview_but = create_button ("Preview", IMG_STOCK, EDITF, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_force_field_preview), NULL); gtk_assistant_add_action_widget (GTK_ASSISTANT (field_assistant), preview_but); if (assist_init) { add_classical_assistant_pages (tmp_view -> proj); show_the_widgets (field_assistant); hide_show_this_pages (0, MAXDATC, tmp_field -> prepare_file[0], 0); hide_show_this_pages (MAXDATC-1, MAXDATC+MAXDATA, tmp_field -> prepare_file[1], 1); } else { show_the_widgets (field_assistant); gtk_widget_hide (preview_but); } gtk_assistant_set_forward_page_func (GTK_ASSISTANT (field_assistant), on_assistant_go_forward, NULL, NULL); g_signal_connect (G_OBJECT (field_assistant), "prepare", G_CALLBACK(on_assistant_prepare), NULL); g_signal_connect (G_OBJECT (field_assistant), "cancel", G_CALLBACK(on_assistant_cancel), NULL); g_signal_connect (G_OBJECT (field_assistant), "close", G_CALLBACK(on_assistant_close), NULL); g_signal_connect (G_OBJECT (field_assistant), "apply", G_CALLBACK(on_assistant_apply), NULL); add_gtk_close_event (field_assistant, G_CALLBACK(on_assistant_cancel_event), NULL); for (i=0; i<2; i++) { saved_label_format[i] = tmp_view -> anim -> last -> img -> labels_format[i]; saved_label_position[i] = tmp_view -> anim -> last -> img -> labels_position[i]; tmp_view -> anim -> last -> img -> labels_position[i] = 0; tmp_view -> anim -> last -> img -> labels_format[i] = ID_IN_MOLECULE; } //g_debug ("Number of pages in the assitant: %d", gtk_assistant_get_n_pages (GTK_ASSISTANT (field_assistant))); //g_debug ("Active page is: %d", gtk_assistant_get_current_page (GTK_ASSISTANT (fwin))); } Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_field.h000066400000000000000000000423121457665371200207250ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_field.h * @short Variable declarations for the creation of the DL_POLY input file(s) * @author Sébastien Le Roux */ /* * This header file: 'dlp_field.h' * * Contains: Variable declarations for the creation of the DL_POLY input file(s) */ #ifndef DLP_FIELD_H_ #define DLP_FIELD_H_ #include "global.h" // See DL_POLY user manual for the meaning // of the different parameters, key and values. #define N_FIELDS 21 extern char * field_acro[N_FIELDS]; #define DL_ENERGY 5 #define DL_BONDS 11 #define DL_ANGLES 15 #define DL_DIHEDRAL 8 #define DL_INVERS 6 #define DL_TETH 3 #define DL_VDW 21 #define DL_METALS 9 #define DL_TERSOFFS 2 #define DL_THREEBODY 6 #define DL_FOURBODY 3 #define DL_EXTERNAL 13 #define LA_ENERGY 1 #define LA_BONDS 16 #define LA_ANGLES 19 #define LA_DIHEDRAL 14 #define LA_INVERS 11 #define LA_TETH 0 #define LA_VDW 0 #define LA_METALS 0 #define LA_TERSOFFS 0 #define LA_THREEBODY 0 #define LA_FOURBODY 0 #define LA_EXTERNAL 0 #define FTETH max(DL_TETH,LA_TETH) #define FBONDS max(DL_BONDS,LA_BONDS) #define FANGLES max(DL_ANGLES,LA_ANGLES) #define FDIHEDRAL max(DL_DIHEDRAL,LA_DIHEDRAL) #define FINVERS max(DL_INVERS,LA_INVERS) #define FVDW max(DL_VDW,LA_VDW) #define FMETALS max(DL_METALS,LA_METALS) #define FTERSOFFS max(DL_TERSOFFS,LA_TERSOFFS) #define FTHREEBODY max(DL_THREEBODY,LA_THREEBODY) #define FFOURBODY max(DL_FOURBODY,LA_FOURBODY) #define FEXTERNAL max(DL_EXTERNAL,LA_EXTERNAL) #define DL_BONDS_P 4 #define DL_ANGLES_P 6 #define DL_DIHEDRAL_P 5 #define DL_INVERS_P 3 #define DL_TETH_P 3 #define DL_VDW_P 7 #define DL_METALS_P 9 #define DL_TERSOFFS_P 16 #define DL_THREEBODY_P 5 #define DL_FOURBODY_P 3 #define DL_EXTERNAL_P 6 #define LA_BONDS_P 5 #define LA_ANGLES_P 6 #define LA_DIHEDRAL_P 11 #define LA_INVERS_P 5 #define LA_TETH_P 0 #define LA_VDW_P 0 #define LA_METALS_P 0 #define LA_TERSOFFS_P 0 #define LA_THREEBODY_P 0 #define LA_FOURBODY_P 0 #define LA_EXTERNAL_P 0 #define FTETH_P max(DL_TETH_P,LA_TETH_P) #define FBONDS_P max(DL_BONDS_P,LA_BONDS_P) #define FANGLES_P max(DL_ANGLES_P,LA_ANGLES_P) #define FDIHEDRAL_P max(DL_DIHEDRAL_P,LA_DIHEDRAL_P) #define FINVERS_P max(DL_INVERS_P,LA_INVERS_P) #define FVDW_P max(DL_VDW_P,LA_VDW_P) #define FMETALS_P max(DL_METALS_P,LA_METALS_P) #define FTERSOFFS_P max(DL_TERSOFFS_P,LA_TERSOFFS_P) #define FTHREEBODY_P max(DL_THREEBODY_P,LA_THREEBODY_P) #define FFOURBODY_P max(DL_FOURBODY_P,LA_FOURBODY_P) #define FEXTERNAL_P max(DL_EXTERNAL_P,LA_EXTERNAL_P) #define MOLIMIT 15 #define SEXTERN 20 #define AMBER94 0 #define AMBER96 1 #define AMBER98 2 #define AMBER99 3 #define CHARMM22P 4 #define CHARMM22M 5 #define CHARMM35E 6 #define CHARMM36C 7 #define CHARMM36G 8 #define CHARMM36L 9 #define CHARMM36N 10 #define CHARMM36P 11 #define CHARMM36M 12 #define CHARMMSI 13 #define CVFF 14 #define CVFF_AUG 15 #define CFF91 16 #define PCFF 17 #define COMPASS 18 #define OPLSAAP 19 #define OPLSAAR 20 /*! \enum dlp_atom_types */ enum dlp_atom_types { SPEC_ONLY = 0, /*!< 0 */ // Total coord + spec TOTAL_COORD_AND_SPEC = 1, /*!< 1 */ // Partial coord + spec PARTIAL_COORD_AND_SPEC = 2, /*!< 2 */ OTHER = 3 /*!< 3 */ }; typedef struct field_prop field_prop; struct field_prop { int pid; int fpid; int key; int * aid; float * val; gboolean show; gboolean use; field_prop * next; field_prop * prev; }; typedef struct field_atom field_atom; struct field_atom { int id; int fid; // Id among force field int afid; // Atoms id among force field atoms // Type is Among dlp_atom_types int type; char * name; int num; int sp; float mass; float charge; int frozen; gboolean * frozen_id; gboolean show; // ID of atoms in project file int * list; // ID of atoms for the DL_POLY molecule int * list_id; field_atom* prev; field_atom* next; }; typedef struct field_shell field_shell; struct field_shell { int id; // 0 = select the field atom to CS // 1 = 0= all, 1 = selection int ia[2]; float z; float m; float k2; float k4; gboolean vdw; gboolean show; gboolean use; field_shell * prev; field_shell * next; }; typedef struct field_constraint field_constraint; struct field_constraint { int id; int ia[2]; float av; float length; gboolean show; gboolean use; field_constraint * prev; field_constraint * next; }; typedef struct field_pmf field_pmf; struct field_pmf { int id; float av; float length; int num[2]; int * list[2]; float * weight[2]; gboolean show; gboolean use; field_pmf * prev; field_pmf * next; }; typedef struct field_rigid field_rigid; struct field_rigid { int id; int num; int * list; gboolean show; gboolean use; field_rigid * prev; field_rigid * next; }; typedef struct field_tethered field_tethered; struct field_tethered { int id; int num; int key; float * val; gboolean show; gboolean use; field_tethered * prev; field_tethered * next; }; // See field molecule for details typedef struct field_struct field_struct; struct field_struct { // Struct id (0 = Bonds, 2 = Angles, 4 = dihedrals ...) int st; int id; int num; int * aid; // Field atom id float av; field_prop * def; field_prop * other; field_struct * prev; field_struct * next; }; // Non-bonded interactions follow // N body (Vdw, Metal, Tersoff, 3b, 4b) typedef struct field_nth_body field_nth_body; struct field_nth_body { // Body Id 0=Vdw, 1= Metal ... int bd; int id; int * fpid; int * na; // atom a num int ** ma; // atom a mol id's int ** a; // field atom a id's in mol int key; float * val; gboolean show; gboolean use; field_nth_body * prev; field_nth_body * next; }; typedef struct field_external field_external; struct field_external { int id; int key; float * val; gboolean use; field_external * prev; field_external * next; }; /* simplified atom data structure */ typedef struct field_neighbor field_neighbor; struct field_neighbor { int id; // atom id in molecule/fragment int num; // number of neighbor(s) int * vois; // list of neighbor(s) field_neighbor * prev; field_neighbor * next; }; typedef struct field_molecule field_molecule; struct field_molecule { int id; gchar * name; struct molecule * mol; int multi; int * fragments; dint ** atoms_id; int atoms; field_atom* first_atom; int shells; field_shell * first_shell; int constraints; field_constraint * first_constraint; int pmfs; field_pmf * first_pmf; int rigids; field_rigid * first_rigid; int tethered; field_tethered * first_tethered; // 0 = bonds // 1 = bonds restraints // 2 = angles // 3 = angles restraints // 4 = diehdrals // 5 = torsional restraints // 6 = impropers // 7 = inversions int nstruct[8]; field_struct * first_struct[8]; gboolean show; gboolean show_id; field_molecule * next; field_molecule * prev; }; typedef struct field_object_match field_object_match; struct field_object_match { int id; int obj; int oid; int type; gboolean use; field_object_match * next; field_object_match * prev; }; typedef struct field_data field_data; struct field_data { int key; int ** atoms_z; int ** atoms_id; int npar; float ** param; char ** info; }; extern GtkWidget * field_assistant; extern gchar * celemts[MAXDATC]; extern GtkWidget * vbox_control (int f); extern int selected_aspec; extern gchar * fkeysw[2][16][21]; extern gchar * fnames[2][16][21]; extern int fvalues[2][15][21]; extern char * fvars_teth[2][FTETH][FTETH_P]; extern char * fvars_bond[2][FBONDS][FBONDS_P]; extern char * fvars_angle[2][FANGLES][FANGLES_P]; extern char * fvars_dihedral[2][FDIHEDRAL][FDIHEDRAL_P]; extern char * fvars_inversion[2][FINVERS][FINVERS_P]; extern char * fvars_vdw[2][FVDW][FVDW_P]; extern char * fvars_met[2][FMETALS][FMETALS_P]; extern char * fvars_ters[2][FTERSOFFS][FTERSOFFS_P]; extern char * fvars_tbd[2][FTHREEBODY][FTHREEBODY_P]; extern char * fvars_fbd[2][FFOURBODY][FFOURBODY_P]; extern char * fvars_fext[2][FEXTERNAL][FEXTERNAL_P]; extern float internal_to_other[5]; extern classical_field * tmp_field; extern glwin * tmp_view; extern coord_info * tmp_coord; extern project * tmp_proj; extern field_molecule * tmp_fmol; extern molecule * tmp_mol; extern field_atom* tmp_fat, * tmp_fbt, * tmp_fct, * tmp_fdt; extern field_shell * tmp_fshell; extern field_constraint * tmp_fcons; extern field_pmf * tmp_fpmf; extern field_rigid * tmp_frig; extern field_tethered * tmp_ftet; extern field_prop * tmp_fprop; extern field_struct * tmp_fstr; extern field_nth_body * tmp_fbody; extern field_nth_body * comp_fbody; extern field_external * tmp_fext; extern int row_id; extern tint toviz; extern int field_v[MAXDATA]; extern GtkWidget * mol_box[MOLIMIT-1]; extern GtkWidget * combo_mol[MOLIMIT-1]; extern GtkTreeStore * field_model[MAXDATA]; extern GtkWidget * field_tree[MAXDATA]; extern GtkWidget * mol_num_label; extern GtkTreeIter field_iter; extern gboolean afp[MAXDATA]; extern int field_object; extern gboolean field_color; extern int num_field_objects; extern int saved_label_format[2]; extern int struct_id (int f); extern int body_at (int b); // Init field elements extern int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid); extern int test_for_bonds (field_atom* at, field_atom* bt); extern int test_for_angles (field_atom* at, field_atom* bt, field_atom* ct); extern int test_for_dihedrals (field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); extern void clean_field_struct_list (field_struct * stru); // Create force field data structure extern void set_mol_num_label (); extern G_MODULE_EXPORT void changed_mol_box (GtkComboBox * box, gpointer data); extern void update_field_trees (); extern GtkWidget * create_combo_mol (int f); extern void fill_field_model (GtkTreeStore * store, int f, int m); extern GtkWidget * create_field_tree (int f); extern classical_field * create_force_field_data_structure (int ai); // Duplicate field element: extern int * duplicate_int (int num, int * old_val); extern gboolean * duplicate_bool (int num, gboolean * old_val); extern float * duplicate_float (int num, float * old_val); extern field_atom* duplicate_field_atom (field_atom* old_fat); extern field_shell * duplicate_field_shell (field_shell * old_shell); extern field_constraint * duplicate_field_constraint (field_constraint * old_cons); extern field_rigid * duplicate_field_rigid (field_rigid * old_rig); extern field_tethered * duplicate_field_tethered (field_tethered * old_tet); extern field_prop * duplicate_field_prop (field_prop * old_prop, int ti); extern void duplicate_other_prop (int oid, field_struct * old_fstr, field_struct * new_fstr); extern field_struct * duplicate_field_struct (field_struct * old_fstr); extern field_struct * duplicate_field_struct_list (field_struct * list_str, gboolean init); extern field_nth_body * duplicate_field_nth_body (field_nth_body * old_nth_body); extern field_molecule * duplicate_field_molecule (field_molecule * old_fmol); extern classical_field * duplicate_dlpoly_field (classical_field * init_field); // Init field element: extern field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list); extern field_shell * init_field_shell (int id, int ia, int ib); extern field_constraint * init_field_constraint (int id, int ia, int ib); extern field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]); extern field_rigid * init_field_rigid (int id, int num, int * list); extern field_tethered * init_field_tethered (int id, int num); extern field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use); extern field_struct * init_field_struct (int st, int ai, int an, int * aid); extern field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba); extern field_external * init_field_external (int bi); extern void init_all_field_struct (gboolean init); extern int init_vdw (gboolean init); extern void setup_field_molecule_neighbors (int i, project * this_proj); // Get active field element: extern int get_position_in_field_atom_from_model_id (int fat, int at); extern int get_field_atom_id_from_model_id (field_molecule * fmol, int at); extern field_molecule * get_active_field_molecule_from_model_id (project * this_proj, int aid); extern int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at); extern field_molecule * get_active_field_molecule (int a); extern field_nth_body * get_active_body (int a, int b); extern field_external * get_active_external (int a); extern field_atom* get_active_atom (int a, int b); extern field_shell * get_active_shell (int a, int b); extern field_constraint * get_active_constraint (int a, int b); extern field_pmf * get_active_pmf (int a, int b); extern field_rigid * get_active_rigid (int a, int b); extern field_tethered * get_active_tethered (int a, int b); extern field_prop * get_active_prop (struct field_prop * pr, int a); extern field_prop * get_active_prop_using_atoms (struct field_prop * pr, int ti, int * ids); extern field_struct * get_active_struct (int s, int a, int b); extern int get_struct_id_from_atom_id (int ids, int * aid); // Field objects visualization: extern int get_field_objects (int id, int jd); extern gboolean show_field_object (int id, int jd, int kd); extern void visualize_object (int id, int jd, int kd); extern G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); extern G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data); // Field molecule callbacks extern void adjust_field_prop (int fil, int sti, field_prop * tmp, int * ids, int key); extern gchar * remove_text (int i, int j, gchar * str); extern G_MODULE_EXPORT void select_atom_id_from_fied_molecule (GtkButton * but, gpointer data); extern G_MODULE_EXPORT void edit_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void add_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_field_prop (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_atom_from_field_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); // OGL utils extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); extern angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct); extern angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); extern angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); // Print extern gchar * parameters_info (int obj, int key, gchar ** words, float * data); extern void print_dlp_field (GtkTextBuffer * buf); extern void print_dlp_config (GtkTextBuffer * buf); extern void print_dlp_control (GtkTextBuffer * buf); extern void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_dihedral (int di, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter); extern G_MODULE_EXPORT void setup_this_force_field (int id); extern field_object_match * field_objects_id[6]; extern field_object_match * tmp_obj_id; extern float get_force_field_atom_mass (int sp, int num); extern int ff_unit; extern field_data * ff_bonds[3]; extern field_data * ff_angles[2]; extern field_data * ff_dih[2]; extern field_data * ff_imp; extern field_data * ff_inv; extern field_data * ff_vdw; extern int ** extraz_id; #endif Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_init.c000066400000000000000000002507341457665371200206110ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_init.c * @short Functions to initialize the creation of a classical force field * @author Sébastien Le Roux */ /* * This file: 'dlp_init.c' * * Contains: * - The functions to initialize the creation of a classical force field * * List of functions: int get_position_in_field_atom_from_model_id (int fat, int at); int get_field_atom_id_from_model_id (field_molecule * fmol, int at); int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at); int get_atom_id_in_fragment_from_model_id (int frag, int at); int set_atom_id (field_atom* at, int c, int p, int id); int get_struct_id_from_atom_id (int ids, int * aid); int prepare_field_atom (int i, int j, int k, int l, int m); int test_for_bonds (field_atom* at, field_atom* bt); int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid); int bonds_between_atoms (int n, field_atom* at, field_atom* bt, int a, int b); int test_for_angles (field_atom* at, field_atom* bt, field_atom* ct); int angles_from_bonds (int n, field_atom* at, field_atom* bt, field_atom* ct); int test_for_dihedrals (field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); int dihedrals_from_angles (int n, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); int impropers_inversion (int n, int stru, int at, int bt, int ct, int dt, int a, int b, int c, int d); int coord_sphere_multiplicity (atom * at, int id, gboolean set_atom_id, gboolean in_field_atom); int find_neighbor_loop (int frag, int aid, int fai, field_atom* fat, field_neighbor * ngmb, int sid, gboolean save_it); int setup_atomic_weight (int seq); int init_vdw (gboolean init); gboolean was_not_created_struct (int ids, int num, int * aid); gboolean in_bond (int at, int bd[2]); gboolean are_neighbors (field_neighbor * ngb, int at); gboolean are_in_bond (atom ato, int at); gboolean is_numbering_possible (int frag); gboolean is_this_numbering_possible_for_this_atom (int frag, field_neighbor * ngma, int atom); gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, int init, field_neighbor * ngma_init); gboolean id_atoms_in_fragment (int frag, int seed); gchar * set_field_atom_name (field_atom* ato, field_molecule * mol); void init_all_atoms (int i); void init_all_bonds (); void init_all_angles (); void init_all_dihedrals (); void init_all_impropers_inversions (int stru); void get_weight (int seq); void find_atom_id_in_field_molecule (); void clean_field_struct_list (field_struct * stru); void init_all_field_struct (gboolean init); void init_field_molecule (int i); void init_dlpoly_field (classical_field * new_field); void init_lammps_field (classical_field * new_field); field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list); field_shell * init_field_shell (int id, int ia, int ib); field_constraint * init_field_constraint (int id, int ia, int ib); field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]); field_rigid * init_field_rigid (int id, int num, int * list); field_tethered * init_field_tethered (int id, int num); field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use); field_struct * init_field_struct (int st, int ai, int an, int * aid); field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba); field_external * init_field_external (int bi); field_neighbor * get_init_neighbor (int a); classical_field * create_force_field_data_structure (int ai); */ #include "dlp_field.h" #include "interface.h" extern void print_all_field_struct (field_molecule * mol, int str); int * astr; float val; extern int * duplicate_int (int num, int * old_val); extern float * duplicate_float (int num, float * old_val); int id_atom; int multi; int a_multi; /*! \fn int get_position_in_field_atom_from_model_id (int fat, int at) \brief retrieve atom position id in field atom id using atom id in model \param fat the target field atom \param at the target model atom id */ int get_position_in_field_atom_from_model_id (int fat, int at) { int i; field_atom* tmp_ft = get_active_atom (tmp_fmol -> id, fat); for (i=0; i num; i++) { if (tmp_ft -> list[i] == at) return i; } return -1; } /*! \fn int get_field_atom_id_from_model_id (field_molecule * fmol, int at) \brief retrieve field atom id using atom id in model \param fmol the target field molecule \param at the target model atom id */ int get_field_atom_id_from_model_id (field_molecule * fmol, int at) { int i; field_atom* fat = fmol -> first_atom; while (fat) { for (i=0; i< fat -> num; i++) { if (at == fat -> list[i]) return fat -> id; } fat = fat -> next; } return -1; } /*! \fn int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at) \brief retrieve fragment atom id using atom id in model \param fmol the target field molecule \param at the target model atom id */ int get_fragment_atom_id_from_model_id (field_molecule * fmol, int at) { int i; field_atom* fat = fmol -> first_atom; while (fat) { for (i=0; i< fat -> num; i++) { if (at == fat -> list[i]) return fat -> list_id[i]; } fat = fat -> next; } return -1; } /*! \fn int get_atom_id_in_fragment_from_model_id (int frag, int at) \brief retrieve field atom id in fragment from model id \param frag the fragment id \param at the atom id in the model */ int get_atom_id_in_fragment_from_model_id (int frag, int at) { int i, j, k; field_atom* tmp_ft; for (i=0; i< tmp_fmol -> mol -> natoms; i++) { if (tmp_fmol -> atoms_id[i][frag].a > -1 && tmp_fmol -> atoms_id[i][frag].b > -1) { tmp_ft = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][frag].a); j = tmp_fmol -> atoms_id[i][frag].b; k = tmp_ft -> list[j]; if (k == at) return i; } } return -1; } /*! \fn int set_atom_id (field_atom* at, int c, int p, int id) \brief set new fragment/molecule atom parameters \param at the target field atom \param c the fragment id \param p the list id in field atom \param id the field atom id */ int set_atom_id (field_atom* at, int c, int p, int id) { if (c == tmp_fmol -> fragments[0]) { id_atom ++; tmp_fmol -> atoms_id[id_atom][0].a = id; tmp_fmol -> atoms_id[id_atom][0].b = p; return id_atom; } else { return -1; } } /*! \fn gchar * set_field_atom_name (field_atom* ato, field_molecule * mol) \brief get name string for field atom \param ato the target field atom \param mol the target field molecule */ gchar * set_field_atom_name (field_atom* ato, field_molecule * mol) { int i, j; gchar * str; field_atom* tmpatf; switch (ato -> type) { case SPEC_ONLY: str = exact_name(tmp_proj -> chemistry -> label[ato -> sp]); break; case OTHER: tmpatf = mol -> first_atom; j = 1; while (tmpatf) { if (tmpatf -> sp == ato -> sp) j ++; tmpatf = tmpatf -> next; } str = exact_name(g_strdup_printf ("%s-%d-%d", tmp_proj -> chemistry -> label[ato -> sp], j, mol -> id+1)); break; default: i = ato -> list[0]; j = tmp_proj -> atoms[0][i].coord[ato -> type-1]; switch (ato -> type) { case TOTAL_COORD_AND_SPEC: str = g_strdup_printf ("%s-%d-%d", exact_name(tmp_proj -> chemistry -> label[ato -> sp]), tmp_coord -> geolist[0][ato -> sp][j], mol -> id+1); break; case PARTIAL_COORD_AND_SPEC: str = g_strdup_printf ("%s-%d-%d", exact_name(tmp_proj -> chemistry -> label[ato -> sp]), j+1, mol -> id+1); /*str = g_strdup_printf ("%s-%d", exact_name (env_name (tmp_proj, j, ato -> sp, ato -> type, NULL)), mol -> id+1);*/ break; } } return str; } /*! \fn field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list) \brief intialize a new type of field atom \param id the new field atom id \param type the new field atom coordination type \param at the new field atom species \param nat the number of atom(s) of for this field atom type \param coo the coordination id in coordination type, if any \param list the list of atoms that match this type of field atom */ field_atom* init_field_atom (int id, int type, int at, int nat, int coo, int * list) { int h, i, j, k, l, m, n; field_atom* ato; ato = g_malloc0 (sizeof*ato); ato -> id = id; ato -> type = type; ato -> num = nat; ato -> list = allocint (ato -> num); ato -> list_id = allocint (ato -> num); ato -> frozen_id = allocbool (ato -> num); h = 0; switch (type) { case OTHER: for (i=0; i multi; i++) { for (j=0; j < nat/tmp_fmol -> multi; j++) { k = list[j]; l = tmp_fmol -> atoms_id[k][i].a; m = tmp_fmol -> atoms_id[k][i].b; n = get_active_atom (tmp_fmol -> id, l) -> list[m]; ato -> list[h] = n; ato -> list_id[h] = k; ato -> frozen_id[h] = FALSE; tmp_fmol -> atoms_id[k][i].a = ato -> id; tmp_fmol -> atoms_id[k][i].b = h; tmp_proj -> atoms[0][n].faid = ato -> id; h ++; } } break; default: for (i=0; i < tmp_fmol -> multi; i++) { j = tmp_fmol -> fragments[i]; for (k=0; k < tmp_proj -> natomes; k++) { if (tmp_proj -> atoms[0][k].coord[2] == j && tmp_proj -> atoms[0][k].sp == at) { if (type == SPEC_ONLY) { ato -> list[h] = k; ato -> frozen_id[h] = FALSE; ato -> list_id[h] = set_atom_id (ato, tmp_proj -> atoms[0][k].coord[2], h, id); h ++; } else { if (tmp_proj -> atoms[0][k].coord[type-1] == coo) { ato -> list[h] = k; ato -> frozen_id[h] = FALSE; ato -> list_id[h] = set_atom_id (ato, tmp_proj -> atoms[0][k].coord[2], h, id); h ++; } } } } } break; } #ifdef DEBUG if (h != ato -> num) g_debug ("Something is wrong in with this field atom: id= %d, sp= %d, co= %d", id, at, coo); #endif ato -> sp = at; ato -> mass = 0.0;//get_force_field_atom_mass (at, 0); ato -> fid = (ato -> mass == 0.0) ? -1 : tmp_field -> type; ato -> afid = (ato -> mass == 0.0) ? -1 : 0; ato -> mass = (ato -> mass == 0.0) ? tmp_proj -> chemistry -> chem_prop[CHEM_M][at] : ato -> mass; ato -> name = g_strdup_printf ("%s", set_field_atom_name (ato, tmp_fmol)); ato -> charge = 0.0; ato -> frozen = 0; ato -> show = FALSE; ato -> next = NULL; ato -> prev = NULL; return ato; } /*! \fn field_shell * init_field_shell (int id, int ia, int ib) \brief initialize field core shell interaction \param id the new shell id \param ia 1st atom id in field molecule \param ib 2nd atom id in field molecule */ field_shell * init_field_shell (int id, int ia, int ib) { field_shell * shell; shell = g_malloc0 (sizeof*shell); shell -> id = id; shell -> ia[0] = ia; shell -> ia[1] = ib; shell -> k2 = 0.0; shell -> k4 = 0.0; shell -> show = FALSE; shell -> use = TRUE; shell -> next = NULL; shell -> prev = NULL; return shell; } /*! \fn field_constraint * init_field_constraint (int id, int ia, int ib) \brief initialize field bond constraint \param id the new field constraint id \param ia 1st atom id in field molecule \param ib 2nd atom id in field molecule */ field_constraint * init_field_constraint (int id, int ia, int ib) { field_constraint * cons; cons = g_malloc0 (sizeof*cons); cons -> id = id; cons -> ia[0] = ia; cons -> ia[1] = ib; cons -> av = -1.0; cons -> length = 0.0; cons -> show = FALSE; cons -> use = TRUE; cons -> next = NULL; cons -> prev = NULL; return cons; } /*! \fn field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]) \brief initialize new field mean force potential \param id the id of the new field PMF \param num the numbers of atom(s) \param list the lists of atom(s) \param w the weight list */ field_pmf * init_field_pmf (int id, int num[2], int * list[2], float * w[2]) { field_pmf * pmf; pmf = g_malloc0 (sizeof*pmf); pmf -> id = id; pmf -> av = -1.0; pmf -> length = 0.0; int i; if (num != NULL) { for (i=0; i<2; i++) { pmf -> num[i] = num[i]; pmf -> list[i] = duplicate_int (num[i], list[i]); pmf -> weight[i] = duplicate_float (num[i], w[i]); } } else { for (i=0; i<2; i++) { pmf -> num[i] = 0; pmf -> list[i] = NULL; pmf -> weight[i] = NULL; } } pmf -> show = FALSE; pmf -> use = TRUE; pmf -> next = NULL; pmf -> prev = NULL; return pmf; } /*! \fn field_rigid * init_field_rigid (int id, int num, int * list) \brief initialize new field rigid constraint \param id the id of the new field rigid \param num the number of atom(s) to fix \param list the list of atom(s) to fix */ field_rigid * init_field_rigid (int id, int num, int * list) { field_rigid * rig; rig = g_malloc0 (sizeof*rig); rig -> id = id; rig -> num = num; rig -> list = NULL; if (list != NULL) rig -> list = duplicate_int (num, list); rig -> show = FALSE; rig -> use = TRUE; rig -> next = NULL; rig -> prev = NULL; return rig; } /*! \fn field_tethered * init_field_tethered (int id, int num) \brief intialize new field tethered potential \param id the new field tethered potential id \param num the atom id in the field molecule */ field_tethered * init_field_tethered (int id, int num) { field_tethered * tet; tet = g_malloc0 (sizeof*tet); tet -> id = id; tet -> num = num; tet -> key = 0; tet -> val = allocfloat (fvalues[activef][0][0]); tet -> show = FALSE; tet -> use = TRUE; tet -> next = NULL; tet -> prev = NULL; return tet; } /*! \fn field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use) \brief initialize new field molecule structural property \param ti the type of field structural element to initialize \param key the formalism to use \param show visualize in the 3D window (yes / no) \param use use to create the force field input file (yes / no) */ field_prop * init_field_prop (int ti, int key, gboolean show, gboolean use) { field_prop * prop; prop = g_malloc0 (sizeof*prop); prop -> aid = allocint (struct_id(ti+7)); prop -> key = key; prop -> pid = -1; prop -> fpid = -1; prop -> val = allocfloat (fvalues[activef][ti+1][key]); prop -> show = show; prop -> use = use; prop -> next = NULL; prop -> prev = NULL; return prop; } /*! \fn int get_struct_id_from_atom_id (int ids, int * aid) \brief retrieve field structural element id from a list of atom id \param ids the type of structural element \param aid the list of atom id */ int get_struct_id_from_atom_id (int ids, int * aid) { int i, j; field_struct * stru = tmp_fmol -> first_struct[ids]; j = struct_id (ids+7); int res = 0; while (stru) { res = stru -> id + 1; for (i=0; i aid[i] != aid[i]) { res = 0; break; } } if (! res) { res = -(stru -> id + 1); for (i=0; i aid[i] != aid[j-1-i]) { res = 0; break; } } } if (res != 0) break; stru = stru -> next; } return res; } /*! \fn gboolean was_not_created_struct (int ids, int num, int * aid) \brief was this structural element already created ? \param ids the type of structural element \param num the number of atoms \param aid the list of atom id */ gboolean was_not_created_struct (int ids, int num, int * aid) { if (num == 0) return TRUE; int j, k; k = struct_id(ids+7); tmp_fstr = tmp_fmol -> first_struct[ids]; gboolean res; while (tmp_fstr) { res = FALSE; if (ids < 6) { for (j=0; j aid[j] != aid[j]) { res = TRUE; break; } } if (res) { res = FALSE; for (j=0; j aid[k-1-j] != aid[j]) { res = TRUE; break; } } } } else if (ids == 6) { for (j=0; j aid[j] != aid[j]) { res = TRUE; break; } } if (res) { if (tmp_fstr -> aid[0] != aid[0]) { res = TRUE; } else if (tmp_fstr -> aid[3] != aid[3]) { res = TRUE; } else if (tmp_fstr -> aid[1] == aid[2] && tmp_fstr -> aid[2] == aid[1]) { res = FALSE; } } } else { if (tmp_fstr -> aid[0] != aid[0]) { res = TRUE; } else { if (tmp_fstr -> aid[1] != aid[1]) { res = TRUE; } else if (tmp_fstr -> aid[2] == aid[2] && tmp_fstr -> aid[3] == aid[3]) { res = FALSE; } else if (tmp_fstr -> aid[2] == aid[3] && tmp_fstr -> aid[3] == aid[2]) { res = FALSE; } else { res = TRUE; } } } if (! res) return FALSE; tmp_fstr = tmp_fstr -> next; } return TRUE; } /*! \fn field_struct * init_field_struct (int st, int ai, int an, int * aid) \brief initialize field molecule new structural element \param st the type of structural element (0 = bond, 1 = angle, 2 = dihedral) \param ai the id of the new structural property \param an the number of atoms \param aid the list of field atoms */ field_struct * init_field_struct (int st, int ai, int an, int * aid) { field_struct * str; str = g_malloc0 (sizeof*str); str -> st = st; str -> id = ai; if (st == 6 || st == 7) { str -> num = 0; str -> av = 0.0; } else { str -> num = an; str -> av = val; } str -> aid = NULL; if (aid != NULL) str -> aid = duplicate_int (struct_id(st+7), aid); str -> def = init_field_prop (st, 0, FALSE, TRUE); str -> other = NULL; str -> next = NULL; str -> prev = NULL; return str; } /*! \fn field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba) \brief intialize new field non bonded interaction \param bi the new non bonded interaction id \param bd the type of non bonded interaction \param na the list of field atom(s), if any \param ma the list of field molecule(s), if any \param ba the list of atom id in field molecule, if any */ field_nth_body * init_field_nth_body (int bi, int bd, int * na, int ** ma, int ** ba) { int i, j; field_nth_body * nthbd; nthbd = g_malloc0 (sizeof*nthbd); nthbd -> id = bi; nthbd -> bd = bd; if (! bd) { nthbd -> fpid = allocint(2); nthbd -> fpid[0] = nthbd -> fpid[1] = -1; } j = body_at (bd); // Id in Vdw list if (na == NULL) { nthbd -> na = allocint (j); for (i=0; i na[i] = -1; } else { nthbd -> na = duplicate_int (j, na); } // Molecule id nthbd -> ma = NULL; nthbd -> ma = g_malloc0 (j*sizeof*nthbd -> ma); // Field atom id in molecule nthbd -> a = NULL; nthbd -> a = g_malloc0 (j*sizeof*nthbd -> a); for (i=0; i < j; i++) { if (ma != NULL) nthbd -> ma[i] = duplicate_int (na[i], ma[i]); if (ba != NULL) nthbd -> a[i] = duplicate_int (na[i], ba[i]); } nthbd -> key = 0; nthbd -> val = allocfloat (fvalues[activef][9+bd][nthbd -> key]); nthbd -> show = FALSE; nthbd -> use = TRUE; nthbd -> next = NULL; nthbd -> prev = NULL; return nthbd; } /*! \fn field_external * init_field_external (int bi) \brief intialize new field external potential \param bi the id of the new field external potential */ field_external * init_field_external (int bi) { field_external * nfext; nfext = g_malloc0 (sizeof*nfext); nfext -> id = bi; nfext -> key = -1; nfext -> val = NULL; nfext -> use = FALSE; nfext -> next = NULL; nfext -> prev = NULL; return nfext; } /*! \fn int prepare_field_atom (int i, int j, int k, int l, int m) \brief initialiaze new type of field atom \param i the new field atom id \param j the new field atom coordination type \param k the new field atom species \param l the number of atom(s) of for this field atom type \param m the coordination id in coordination type, if any */ int prepare_field_atom (int i, int j, int k, int l, int m) { if (tmp_fmol -> first_atom == NULL) { tmp_fmol -> first_atom = init_field_atom (i, j, k, l, m, NULL); tmp_fat = tmp_fmol -> first_atom; } else { tmp_fat -> next = init_field_atom (i, j, k, l, m, NULL); tmp_fat -> next -> prev = g_malloc0 (sizeof*tmp_fat -> next -> prev); tmp_fat -> next -> prev = tmp_fat; tmp_fat = tmp_fat -> next; } return 1; } /*! \fn void init_all_atoms (int i) \brief initialize all field atom(s) \param i the molecule id in the model, if any */ void init_all_atoms (int i) { int j, k, l, m, n; tmp_fmol -> first_atom = NULL; k = 0; switch (tmp_field -> atom_init) { case SPEC_ONLY: for (j=0; j nspec; j++) { if (tmp_mol -> species[j] > 0) { k += prepare_field_atom (k, tmp_field -> atom_init, j, tmp_mol -> species[j]*tmp_fmol -> multi, 0); } } break; case OTHER: break; default: for (j=0; j nspec; j++) { if (tmp_mol -> species[j] > 0) { for (l=0; l < tmp_coord -> totcoord[tmp_field -> atom_init-1]; l++) { n = 0; for (m=0; m < tmp_proj -> natomes; m++) { if (tmp_proj -> atoms[0][m].sp == j && tmp_proj -> atoms[0][m].coord[3] == i && tmp_proj -> atoms[0][m].coord[tmp_field -> atom_init -1] == l) n ++; } if (n > 0) { k += prepare_field_atom (k, tmp_field -> atom_init, j, n, l); } } } } break; } tmp_fmol -> atoms = k; } /*! \fn gboolean in_bond (int at, int bd[2]) \brief is atom at in bond bd \param at the target atom id \param bd the bond atoms id */ gboolean in_bond (int at, int bd[2]) { if (at == bd[0] || at == bd[1]) { return TRUE; } else { return FALSE; } } /*! \fn gboolean are_neighbors (field_neighbor * ngb, int at) \brief test if 2 atoms are neighbors \param ngb the neighbor data structure to test \param at the target atom id in the model */ gboolean are_neighbors (field_neighbor * ngb, int at) { int i; for (i=0; i num; i++) { if (ngb -> vois[i] == at) return TRUE; } return FALSE; } /*! \fn gboolean are_in_bond (atom ato, int at) \brief is at in ato neighbors ? \param ato the target atom \param at the target atom id */ gboolean are_in_bond (atom ato, int at) { int i; for (i=0; i num; i++) { j = at -> list[i]; for (k= 0; k < tmp_proj -> atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { m ++; val += distance_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][j], & tmp_proj -> atoms[0][l]).length; } } } if (m > 0) val /= m; if (at -> id == bt -> id) m /= 2; return m / tmp_fmol -> multi; } /*! \fn int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid) \brief prepare the creation of a field structural element \param ids the type of structural element (0 to 7) \param sid the id of the new structural element \param yes_no_num is there data to save (1 or > 1) or not (0) ? \param aid the list of field atoms */ int prepare_field_struct (int ids, int sid, int yes_no_num, int * aid) { if (yes_no_num > 0) { if (tmp_fmol -> first_struct[ids] == NULL) { tmp_fmol -> first_struct[ids] = init_field_struct (ids, sid, yes_no_num, aid); tmp_fstr = tmp_fmol -> first_struct[ids]; return 1; } else if (was_not_created_struct (ids, sid, aid)) { tmp_fstr = tmp_fmol -> first_struct[ids]; while (tmp_fstr -> next) tmp_fstr = tmp_fstr -> next; tmp_fstr -> next = init_field_struct (ids, sid, yes_no_num, aid); tmp_fstr -> next -> prev = tmp_fstr; tmp_fstr = tmp_fstr -> next; return 1; } } return 0; } /*! \fn int bonds_between_atoms (int n, field_atom* at, field_atom* bt, int a, int b) \brief search for bond(s) between two field atoms \param n the number of different bond types already found \param at 1st field atom \param bt 2nd field atom \param a 1st atom chemical species \param b 2nd atom chemical species */ int bonds_between_atoms (int n, field_atom* at, field_atom* bt, int a, int b) { if ((at -> sp == a && bt -> sp == b) || (at -> sp == b && bt -> sp == a)) { astr[0] = at -> id; astr[1] = bt -> id; n += prepare_field_struct (0, n, test_for_bonds (at, bt), astr); } return n; } /*! \fn void init_all_bonds () \brief find, and initialize all bond(s) */ void init_all_bonds () { int j, k, l; tmp_fmol -> first_struct[0] = NULL; k = 0; for (j=0; j< tmp_proj -> nspec; j++) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { tmp_fbt = tmp_fat; while (tmp_fbt) { k = bonds_between_atoms (k, tmp_fat, tmp_fbt, j, j); tmp_fbt = tmp_fbt -> next; } tmp_fat = tmp_fat -> next; } } for (j=0; j nspec-1; j++) { for (l=j+1; l nspec; l++) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { tmp_fbt = tmp_fat -> next; while (tmp_fbt) { k = bonds_between_atoms (k, tmp_fat, tmp_fbt, j, l); tmp_fbt = tmp_fbt -> next; } tmp_fat = tmp_fat -> next; } } } tmp_fmol -> nstruct[0] = k; } /*! \fn int test_for_angles (field_atom* at, * field_atom* bt, * field_atom* ct) \brief search for angle(s) between these field atoms \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom */ int test_for_angles (field_atom* at, field_atom* bt, field_atom* ct) { int i, j, k, l, m, n, o; val = 0.0; o = 0; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].numv >= 2 && tmp_proj -> atoms[0][l].faid == bt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == ct -> id) { o ++; val += angle_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][j], & tmp_proj -> atoms[0][l], & tmp_proj -> atoms[0][n]).angle; } } } } } if (o > 0) val /= o; if (at -> id == ct -> id) o /= 2; return o / tmp_fmol -> multi; } /*! \fn int angles_from_bonds (int n, * field_atom* at, * field_atom* bt, * field_atom* ct) \brief find, and initialize, angles using bonds \param n the number of different angle types already found \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom */ int angles_from_bonds (int n, field_atom* at, field_atom* bt, field_atom* ct) { astr[0] = at -> id; astr[1] = bt -> id; astr[2] = ct -> id; n += prepare_field_struct (2, n, test_for_angles (at, bt, ct), astr); return n; } /*! \fn void init_all_angles () \brief find, and intialiaze, all angle(s) using bonds */ void init_all_angles () { int m, p; tmp_fmol -> first_struct[2] = NULL; p = 0; field_struct * tmp_fst = tmp_fmol -> first_struct[0]; for (m=0; m < tmp_fmol -> nstruct[0]; m++) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[0]); tmp_fbt = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[1]); tmp_fct = tmp_fmol -> first_atom; while (tmp_fct) { p = angles_from_bonds (p, tmp_fat, tmp_fbt, tmp_fct); p = angles_from_bonds (p, tmp_fbt, tmp_fat, tmp_fct); tmp_fct = tmp_fct -> next; } if (tmp_fst -> next != NULL) tmp_fst = tmp_fst -> next; } tmp_fmol -> nstruct[2] = p; } /*! \fn int test_for_dihedrals (field_atom* at, * field_atom* bt, * field_atom* ct, * field_atom* dt) \brief search for dihedral(s) between these field atoms \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ int test_for_dihedrals (field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { int i, j, k, l, m, n, o, p, q; q = 0; val = 0.0; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == ct -> id) { for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == dt -> id) { q ++; val += dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][j], & tmp_proj -> atoms[0][l], & tmp_proj -> atoms[0][n], & tmp_proj -> atoms[0][p]).angle; } } } } } } } if (q > 0) val /= q; if (at -> id == dt -> id && bt -> id == ct -> id) q /= 2; return q / tmp_fmol -> multi; } /*! \fn int dihedrals_from_angles (int n, * field_atom* at, * field_atom* bt, * field_atom* ct, * field_atom* dt) \brief find, and initialize, dihedrals using angles \param n the number of different dihedral types already found \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ int dihedrals_from_angles (int n, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { astr[0] = at -> id; astr[1] = bt -> id; astr[2] = ct -> id; astr[3] = dt -> id; n += prepare_field_struct (4, n, test_for_dihedrals (at, bt, ct, dt), astr); return n; } /*! \fn void init_all_dihedrals () \brief find, and intialiaze, all dihedral(s) using bonds */ void init_all_dihedrals () { int n, p; tmp_fmol -> first_struct[4] = NULL; p = 0; field_struct * tmp_fst = tmp_fmol -> first_struct[2]; for (n=0; n< tmp_fmol -> nstruct[2]; n++) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[0]); tmp_fbt = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[1]); tmp_fct = get_active_atom (tmp_fmol -> id, tmp_fst -> aid[2]); tmp_fdt = tmp_fmol -> first_atom; while (tmp_fdt) { p = dihedrals_from_angles (p, tmp_fat, tmp_fbt, tmp_fct, tmp_fdt); p = dihedrals_from_angles (p, tmp_fct, tmp_fbt, tmp_fat, tmp_fdt); tmp_fdt = tmp_fdt -> next; } if (tmp_fst -> next != NULL) tmp_fst = tmp_fst -> next; } tmp_fmol -> nstruct[4] = p; } /*! \fn int impropers_inversion (int n, int stru, * int at, int bt, int ct, int dt, * int a, int b, int c, int d) \brief prepare new improper / inversion \param n the actual number of structural element \param stru the type of structural element, 6 = impropers, 7 = inversions \param at 1st field atom id \param bt 2nd field atom id \param ct 3rd field atom id \param dt 4th field atom id \param a 1st atom id in molecule/fragment \param b 2nd atom id in molecule/fragment \param c 3rd atom id in molecule/fragment \param d 4th atom id in molecule/fragment */ int impropers_inversion (int n, int stru, int at, int bt, int ct, int dt, int a, int b, int c, int d) { astr[0] = at; astr[1] = bt; astr[2] = ct; astr[3] = dt; double v; //g_debug ("Improp:: at= %d, bt= %d, ct= %d, dt= %d", at, bt, ct, dt); //g_debug ("Improp:: a= %d, b= %d, c= %d, d= %d", a, b, c, d); n += prepare_field_struct (stru, n, 1, astr); //g_debug ("tmp_fstr -> id= %d", tmp_fstr -> id); if (stru == 6) { v = dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][b], & tmp_proj -> atoms[0][c], & tmp_proj -> atoms[0][a], & tmp_proj -> atoms[0][d]).angle; } else { v = inversion_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][a], & tmp_proj -> atoms[0][b], & tmp_proj -> atoms[0][c], & tmp_proj -> atoms[0][d]).angle; } tmp_fstr -> av += v; tmp_fstr -> num ++; //g_debug ("tmp_fstr -> id = %d, tmp_fstr -> num = %d, v= %f, av= %f\n", tmp_fstr -> id, tmp_fstr -> num, v, tmp_fstr -> av); return n; } /*! \fn void init_all_impropers_inversions (int stru) \brief initialize all impropers and inversions \param stru 6 = improper(s), 7 = inversion(s) */ void init_all_impropers_inversions (int stru) { int i, j, k, l, m, n, p; int * atid, * matid; atid = allocint (tmp_proj -> coord -> cmax+1); matid = allocint (tmp_proj -> coord -> cmax+1); tmp_fmol -> first_struct[stru] = NULL; p = 0; for (i=0; i mol -> natoms; i++) { matid[0] = tmp_fmol -> atoms_id[i][0].a; j = tmp_fmol -> atoms_id[i][0].b; k = atid[0] = get_active_atom (tmp_fmol -> id, matid[0]) -> list[j]; if ((tmp_proj -> atoms[0][k].numv > 2 && stru == 6) || (tmp_proj -> atoms[0][k].numv == 3 && stru == 7)) { for (m=0; m atoms[0][k].numv; m++) { atid[m+1] = tmp_proj -> atoms[0][k].vois[m]; l = tmp_proj -> atoms[0][k].vois[m]; matid[m+1] = tmp_proj -> atoms[0][l].faid; } if (stru == 6) { for (l=0; l atoms[0][k].numv-2; l++) { for (m=l+1; m atoms[0][k].numv-1; m++) { for (n=m+1; n atoms[0][k].numv; n++) { p = impropers_inversion (p, stru, matid[0], matid[l+1], matid[m+1], matid[n+1], atid[0], atid[l+1], atid[m+1], atid[n+1]); p = impropers_inversion (p, stru, matid[0], matid[l+1], matid[n+1], matid[m+1], atid[0], atid[l+1], atid[n+1], atid[m+1]); p = impropers_inversion (p, stru, matid[0], matid[m+1], matid[n+1], matid[l+1], atid[0], atid[m+1], atid[n+1], atid[l+1]); } } } } else { p = impropers_inversion (p, stru, matid[0], matid[1], matid[2], matid[3], atid[0], atid[1], atid[2], atid[3]); p = impropers_inversion (p, stru, matid[0], matid[2], matid[1], matid[3], atid[0], atid[2], atid[1], atid[3]); p = impropers_inversion (p, stru, matid[0], matid[3], matid[1], matid[2], atid[0], atid[3], atid[1], atid[2]); } } } tmp_fmol -> nstruct[stru] = p; tmp_fstr = tmp_fmol -> first_struct[stru]; for (i=0; i nstruct[stru]; i++) { tmp_fstr -> def -> use = FALSE; tmp_fstr -> av /= tmp_fstr -> num; if (tmp_fstr -> next != NULL) tmp_fstr = tmp_fstr -> next; } g_free (atid); g_free (matid); } /*! \fn int coord_sphere_multiplicity (atom * at, int id, gboolean set_atom_id) \brief get coord sphere multiplicity in the model \param at the target atom in the model \param id the atom id in the fragment \param set_atom_id adjust field atom parameters (yes / no) */ int coord_sphere_multiplicity (atom * at, int id, gboolean set_atom_id) { int j, k, l, m; gboolean not_alone; multi = 0; a_multi = 0; tmp_fct = tmp_fmol -> first_atom; while (tmp_fct) { if (tmp_fct -> sp == at -> sp) { for (j=0; j num; j++) { k = tmp_fct -> list[j]; not_alone = TRUE; if (k != at -> id) { for (l=0; l<2; l++) { if (tmp_proj -> atoms[0][k].coord[l] != at -> coord[l]) { not_alone = FALSE; break; } } if (not_alone) { multi ++; if (tmp_fct -> id == tmp_fat -> id) a_multi ++; if (set_atom_id) { l = tmp_proj -> atoms[0][k].coord[2]; for (m=1; m multi; m++) { if (l == tmp_fmol -> fragments[m]) { tmp_fmol -> atoms_id[id][m].a = tmp_fct -> id; tmp_fmol -> atoms_id[id][m].b = j; tmp_fct -> list_id[j] = id; } } } } } } } tmp_fct = tmp_fct -> next; } return multi; } int assigned; int * i_weight; // For the molecule, indice = atom id for the molecule int * n_weight; // For the analyzed multi, indice = atom id for the project field_neighbor * init_ngb = NULL; /*! \fn field_neighbor * get_init_neighbor (int a) \brief retrieve neighbor data structure for atom a \param a the atom id in the fragment */ field_neighbor * get_init_neighbor (int a) { field_neighbor * ngb = NULL; ngb = init_ngb; while (ngb) { if (ngb -> id == a) break; ngb = ngb -> next; } return ngb; } /*! \fn gboolean is_numbering_possible (int frag) \brief compare if the atom numbering of two fragment(s) are identical, and it should \param frag the fragment id */ gboolean is_numbering_possible (int frag) { int i, j, k, l, m, n, o , p; field_neighbor * ngma, * ngmb; field_atom* fat, * fbt; for (i=0; i mol -> natoms-1; i++) { if (tmp_fmol -> atoms_id[i][frag].a > -1 && tmp_fmol -> atoms_id[i][frag].b > -1) { ngma = get_init_neighbor (i); j = tmp_fmol -> atoms_id[i][frag].a; k = tmp_fmol -> atoms_id[i][frag].b; fat = get_active_atom(tmp_fmol -> id, j); l = fat -> list[k]; for (m=i+1; m mol -> natoms; m++) { if (tmp_fmol -> atoms_id[m][frag].a > -1 && tmp_fmol -> atoms_id[m][frag].b > -1) { ngmb = get_init_neighbor (m); n = tmp_fmol -> atoms_id[m][frag].a; o = tmp_fmol -> atoms_id[m][frag].b; fbt = get_active_atom(tmp_fmol -> id, n); p = fbt -> list[o]; if (are_in_bond (tmp_proj -> atoms[0][l], p) != are_neighbors (ngma, m)) { return FALSE; } if (are_in_bond (tmp_proj -> atoms[0][p], l) != are_neighbors (ngmb, i)) { return FALSE; } } } } } return TRUE; } /*! \fn gboolean is_this_numbering_possible_for_this_atom (int frag, field_neighbor * ngma, int atom) \brief check if the id in fragment for this atom is possible or not \param frag the fragment id \param ngma the neigbbor data structure for this fragment \param atom the atom id in the model */ gboolean is_this_numbering_possible_for_this_atom (int frag, field_neighbor * ngma, int atom) { int m, n, o, p; field_atom* fbt; for (m=0; m mol -> natoms; m++) { if (m != ngma -> id) { if (tmp_fmol -> atoms_id[m][frag].a > -1 && tmp_fmol -> atoms_id[m][frag].b > -1) { n = tmp_fmol -> atoms_id[m][frag].a; o = tmp_fmol -> atoms_id[m][frag].b; fbt = get_active_atom(tmp_fmol -> id, n); p = fbt -> list[o]; if (are_in_bond (tmp_proj -> atoms[0][atom], p) != are_neighbors (ngma, m)) { return FALSE; } } } } return TRUE; } /*! \fn int find_neighbor_loop (int frag, int aid, int fai, * field_atom* fat, * field_neighbor * ngmb, * int sid, gboolean save_it) \brief find / set up field atom data for a fragment \param frag the fragment id \param aid the atom id in the model \param fai the atom id in the fragment \param fat the field atom \param ngmb the neighbor(s) list for the fragment \param sid iter to save \param save_it save field atom data (yes / no) */ int find_neighbor_loop (int frag, int aid, int fai, field_atom* fat, field_neighbor * ngmb, int sid, gboolean save_it) { int i, j, k; int iter = 0; i = fat -> num / tmp_fmol -> multi; for (j=frag*i; j < (frag+1)*i; j++) { if (fat -> list_id[j] < 0) { k = fat -> list[j]; if (are_in_bond (tmp_proj -> atoms[0][k], aid)) { //g_debug ("Are linked, n_weight[%d]= %d, i_weight[%d]= %d", k+1, n_weight[k], j+1, i_weight[j]); if (n_weight[k] == i_weight[ngmb -> id]) { tmp_fmol -> atoms_id[fai][frag].a = fat -> id; tmp_fmol -> atoms_id[fai][frag].b = j; fat -> list_id[j] = fai; if (save_it && iter == sid) return k; if (is_this_numbering_possible_for_this_atom (frag, ngmb, k)) iter ++; tmp_fmol -> atoms_id[fai][frag].a = -1; tmp_fmol -> atoms_id[fai][frag].b = -1; fat -> list_id[j] = -1; } } } } return iter; } /*! \fn gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, * int init, field_neighbor * ngma_init) \brief find atom id in fragment using the neighbor list \param frag the fragment id \param limit the total number of atom(s) in the fragment \param num_ngb the neighbor(s) list for the fragment \param search_type search type (0 = browse field molecule atom list, 1 = browse field atom list) \param init the atom id in the model \param ngma_init the target */ gboolean id_n_fold_atoms_in_fragment (int frag, int limit, int num_ngb, int search_type, int init, field_neighbor * ngma_init) { int i, j, k, l, m, n, o, p, q, r, s, t; field_neighbor * ngma, * ngmb, * ngmc; field_atom* fat, * fbt; if (assigned < limit) { if (search_type) { i = ngma_init -> id; j = tmp_fmol -> atoms_id[i][frag].a; for (k=0; k num; k++) { l = ngma_init -> vois[k]; ngma = get_init_neighbor (l); if (tmp_fmol -> atoms_id[l][frag].a < 0 && tmp_fmol -> atoms_id[l][frag].b < 0) { if (ngma -> num > num_ngb) { m = tmp_fmol -> atoms_id[l][0].a; fat = get_active_atom (tmp_fmol -> id, m); n = find_neighbor_loop (frag, init, l, fat, ngma, 0, FALSE); for (o=0; o mol -> natoms; q++) { if (q != l && tmp_fmol -> atoms_id[q][frag].a > -1 && tmp_fmol -> atoms_id[q][frag].b > -1) { ngmb = get_init_neighbor(q); t = 0; for (r=0; r num; r++) { s = ngmb -> vois[r]; ngmc = get_init_neighbor(s); if (tmp_fmol -> atoms_id[s][frag].a < 0 && tmp_fmol -> atoms_id[s][frag].b < 0 && ngmc -> num > num_ngb) t ++; } if (t) { r = tmp_fmol -> atoms_id[q][frag].a; fbt = get_active_atom (tmp_fmol -> id, r); s = tmp_fmol -> atoms_id[q][frag].b; t = fbt -> list[s]; if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 1, t, ngmb)) { return TRUE; } } } } if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 0, -1, NULL)) { return TRUE; } else { assigned --; tmp_fmol -> atoms_id[l][frag].a = -1; p = tmp_fmol -> atoms_id[l][frag].b; fat -> list_id[p] = -1; tmp_fmol -> atoms_id[l][frag].b = -1; } } } } } } return FALSE; } else { for (i=0; i mol -> natoms; i++) { if (tmp_fmol -> atoms_id[i][frag].a < 0 && tmp_fmol -> atoms_id[i][frag].b <0) { j = 0; ngma = get_init_neighbor (i); if (ngma -> num > num_ngb) { for (k=0; k natomes; k++) { if (tmp_proj -> atoms[0][k].coord[2] == tmp_fmol -> fragments[frag]) { j ++; if ((n_weight[k] == i_weight[i]) && (ngma -> num == tmp_proj -> atoms[0][k].numv)) { if (get_atom_id_in_fragment_from_model_id (frag, k) < 0) { assigned ++; l = get_field_atom_id_from_model_id (tmp_fmol, k); tmp_fmol -> atoms_id[i][frag].a = l; m = get_position_in_field_atom_from_model_id (l, k); tmp_fmol -> atoms_id[i][frag].b = m; get_active_atom(tmp_fmol -> id, l) -> list_id[m] = i; if (is_this_numbering_possible_for_this_atom (frag, ngma, k)) { if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 1, k, ngma)) { return TRUE; } else if (id_n_fold_atoms_in_fragment(frag, limit, num_ngb, 0, -1, NULL)) { return TRUE; } } tmp_fmol -> atoms_id[i][frag].a = -1; tmp_fmol -> atoms_id[i][frag].b = -1; get_active_atom(tmp_fmol -> id, l) -> list_id[m] = -1; assigned --; } } if (j == tmp_fmol -> mol -> natoms) { break; } } } return FALSE; } } } return FALSE; } } else { return TRUE; } } /*! \fn gboolean id_atoms_in_fragment (int frag, int seed) \brief find the atom field id in the fragment \param frag the fragment id \param seed seed */ gboolean id_atoms_in_fragment (int frag, int seed) { int i, j; i = 0; for (j=0; j natomes; j++) { if (tmp_proj -> atoms[0][j].coord[2] == tmp_fmol -> fragments[frag]) { if (tmp_proj -> atoms[0][j].numv > 1) i++; } } if (seed > -1) { field_neighbor * ngb = get_init_neighbor (seed); if (id_n_fold_atoms_in_fragment (frag, i, 1, 0, seed, ngb)) { return id_n_fold_atoms_in_fragment (frag, tmp_fmol -> mol -> natoms, 0, 0, seed, ngb); } else { return FALSE; } } else { if (id_n_fold_atoms_in_fragment (frag, i, 1, 0, -1, NULL)) { return id_n_fold_atoms_in_fragment (frag, tmp_fmol -> mol -> natoms, 0, 0, -1, NULL); } else { return FALSE; } } } /*! \fn void get_weight (int seq) \brief compute field weigth for the atom(s) in the model \param seq weighting sequence */ void get_weight (int seq) { int h, i, j, k; for (i=0; i natomes; i++) { for (j=0; j atoms[0][i].numv; j++) { k = tmp_proj -> atoms[0][i].vois[j]; n_weight[i] += tmp_proj -> atoms[0][k].numv; } } int * weight = duplicate_int (tmp_proj -> natomes, n_weight); for (h=1; h natomes; i++) { for (j=0; j atoms[0][i].numv; j++) { k = tmp_proj -> atoms[0][i].vois[j]; weight[i] += n_weight[k]; } } for (i=0; i natomes; i++) { n_weight[i] = weight[i]; } } g_free (weight); #ifdef DEBUG /*for (i=0; i natomes; i++) { j = tmp_proj -> atoms[0][i].sp; g_debug ("N_WEIGHT:: %s i= %d, n_weight[i] = %d", tmp_proj -> chemistry -> label[j], i+1, n_weight[i]); }*/ #endif } /*! \fn int setup_atomic_weight (int seq) \brief setup atom(s) field weight \param seq weighting sequencce */ int setup_atomic_weight (int seq) { int h, i, j, k, l; field_neighbor * ngm; i_weight = allocint (tmp_fmol -> mol -> natoms); init_ngb = NULL; for (i=0; i natomes; i++) { if (tmp_proj -> atoms[0][i].coord[2] == tmp_fmol -> fragments[0]) { if (init_ngb) { ngm -> next = g_malloc0(sizeof*ngm); ngm -> next -> prev = ngm; ngm = ngm -> next; } else { init_ngb = g_malloc0(sizeof*init_ngb); ngm = init_ngb; } ngm -> num = tmp_proj -> atoms[0][i].numv; ngm -> vois = duplicate_int (ngm -> num, tmp_proj -> atoms[0][i].vois); j = get_atom_id_in_fragment_from_model_id (0, i); ngm -> id = j; for (k=0; k num; k++) { l = ngm -> vois[k]; ngm -> vois[k] = get_atom_id_in_fragment_from_model_id (0, l); i_weight[j] += tmp_proj -> atoms[0][l].numv; } } } int * weight = duplicate_int (tmp_fmol -> mol -> natoms, i_weight); for (h=1; h mol -> natoms; i++) { ngm = get_init_neighbor (i); if (ngm) { for (j=0; j num; j++) { k = ngm -> vois[j]; weight[i] += i_weight[k]; } } } for (i=0; i mol -> natoms; i++) { i_weight[i] = weight[i]; } } #ifdef DEBUG /*field_atom* fat; for (i=0; i mol -> natoms; i++) { fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); j = tmp_fmol -> atoms_id[i][0].b; k = fat -> list[j]; l = tmp_proj -> atoms[0][k].sp; g_debug ("I_WEIGHT:: %s i= %d, i_weight[i] = %d", tmp_proj -> chemistry -> label[l], i, i_weight[i]); }*/ #endif g_free (weight); int seed = -1; for (i=0; i mol -> natoms; i++) { seed = i; for (j=0; j mol -> natoms; j++) { if (j!=i) { if (i_weight[i] == i_weight[j]) { seed = -1; break; } } } if (seed > -1) break; } get_weight (seq); return seed; } /*! \fn void find_atom_id_in_field_molecule () \brief find field atom id in field molecule (fragment multiplicity > 1) */ void find_atom_id_in_field_molecule () { int i, j, k, l; gboolean sym = FALSE; gboolean done; int ** coordnum; int start = 1; int seed = -1; assigned = 0; coordnum = allocdint(tmp_proj -> nspec, tmp_coord -> totcoord[1]); tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { if (tmp_fat -> num == tmp_fmol -> multi) { i = tmp_fat -> list_id[0]; // Multiplicity = num of atoms ... // Unic atom, ie. as much as identical molecular fragments for (j=1; j multi; j++) { for (k=1; k num; k++) { l = tmp_fat -> list[k]; if (tmp_proj -> atoms[0][l].coord[2] == tmp_fmol -> fragments[j]) { tmp_fmol -> atoms_id[i][j].a = tmp_fmol -> atoms_id[i][0].a; tmp_fmol -> atoms_id[i][j].b = k; tmp_fat -> list_id[j] = i; break; } } } assigned ++; } tmp_fat = tmp_fat -> next; } for (i=0; i< tmp_fmol -> mol -> natoms; i++) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[i][0].a); done = TRUE; for (j=0; j num; j++) { if (tmp_fat -> list_id[j] < 0) { done = FALSE; break; } } if (! done) { j = tmp_fmol -> atoms_id[i][0].b; k = tmp_fat -> list[j]; l = coord_sphere_multiplicity (& tmp_proj -> atoms[0][k], i, FALSE); coordnum[tmp_proj -> atoms[0][k].sp][tmp_proj -> atoms[0][k].coord[1]] = l+1; if (l == tmp_fmol -> multi - 1 || a_multi == tmp_fmol -> multi - 1) { coord_sphere_multiplicity (& tmp_proj -> atoms[0][k], i, TRUE); assigned ++; } } } for (i=0; i nspec; i++) { for (j=0; j totcoord[1]; j++) { if (coordnum[i][j] > 1 && coordnum[i][j] % tmp_fmol -> multi != 0) g_debug ("This should not happen"); coordnum[i][j] /= tmp_fmol -> multi; } } for (k=6; k>0; k--) { sym = TRUE; for (i=0; i nspec; i++) { for (j=0; j totcoord[1]; j++) { if (coordnum[i][j] > 1 && coordnum[i][j] >= k && coordnum[i][j] % k != 0) sym = FALSE; } } if (sym) break; } g_free (coordnum); if (assigned < tmp_fmol -> mol -> natoms) { #ifdef DEBUG if ((sym || assigned == 0)) { g_debug ("Molecule seems to be symmetric, k= %d", k); g_debug ("Mol -> id: %d", tmp_fmol -> id); g_debug ("Mol -> multi= %d", tmp_fmol -> multi); g_debug ("Mol -> field atoms= %d", tmp_fmol -> atoms); g_debug ("Mol -> atomes= %d", tmp_fmol -> mol -> natoms); g_debug ("Assigned so far= %d", assigned); } #endif // k is a weight factor // The values of the total coord of each atom's neighbors // is sum k times over, this is a safety for systems with // a peculiar symetry, otherwise it could be very very long k = 3; j = assigned; gboolean done = FALSE; if (n_weight) g_free (n_weight); n_weight = NULL; n_weight = allocint (tmp_proj -> natomes); while (! done && (seed < 0 || (tmp_fmol -> mol -> natoms && k < tmp_fmol -> mol -> natoms))) { seed = setup_atomic_weight (k); if (seed < 0) k ++; done = TRUE; } #ifdef DEBUG g_debug ("Assigning using: seed= %d, w_factor= %d", seed, k); #endif for (i=start; i multi; i++) { #ifdef DEBUG g_debug (" -> fragment id: %d", i+1); #endif assigned = j; while (! id_atoms_in_fragment (i, seed) && k < tmp_fmol -> mol -> natoms) { #ifdef DEBUG g_debug ("**********************************"); g_debug ("*** NOT ABLE TO ASSIGN NUMBERS ***"); g_debug ("*** Mol -> Id= %3d ***", tmp_fmol -> id); g_debug ("*** Mol -> Multi= %3d ***", tmp_fmol -> multi); g_debug ("*** Fragment= %3d ***", i+1); g_debug ("*** k= %3d ***", k); g_debug ("*** assigned= %10d ***", assigned); g_debug ("**********************************"); #endif k ++; if (n_weight) g_free (n_weight); n_weight = NULL; n_weight = allocint (tmp_proj -> natomes); seed = setup_atomic_weight (k); } for (l=0; l natomes; l++) { if (tmp_proj -> atoms[0][l].coord[2] == tmp_fmol -> fragments[i]) { tmp_proj -> atoms[0][l].faid = get_field_atom_id_from_model_id (tmp_fmol, l); tmp_proj -> atoms[0][l].fid = get_atom_id_in_fragment_from_model_id (i, l); } } #ifdef DEBUG g_debug (" -> done !"); #endif } } if (i_weight) g_free (i_weight); i_weight = NULL; if (n_weight) g_free (n_weight); n_weight = NULL; if (init_ngb) g_free (init_ngb); init_ngb = NULL; #ifdef DEBUG g_debug ("Assigning completed !"); #endif } /*! \fn void clean_field_struct_list (field_struct * stru) \brief clean force field structural property(ies) \param stru */ void clean_field_struct_list (field_struct * stru) { while (stru) { if (stru -> next) { stru = stru -> next; g_free (stru -> prev); } else { g_free (stru); stru = NULL; } } } /*! \fn void init_all_field_struct (gboolean init) \brief initialize the force field structural properties for a field molecule \param init search for the atom(s) force field id number(s) */ void init_all_field_struct (gboolean init) { int i; for (i=0; i natomes; i++) { if (tmp_proj -> atoms[0][i].coord[2] == tmp_fmol -> fragments[0]) { tmp_proj -> atoms[0][i].faid = get_field_atom_id_from_model_id (tmp_fmol, i); tmp_proj -> atoms[0][i].fid = get_atom_id_in_fragment_from_model_id (0, i); } } if (tmp_fmol -> multi > 1 && init) find_atom_id_in_field_molecule (); for (i=0; i<8; i++) { tmp_fmol -> nstruct[i] = 0; if (tmp_fmol -> first_struct[i] && tmp_fmol -> nstruct[i]) { clean_field_struct_list (tmp_fmol -> first_struct[i]); } tmp_fmol -> first_struct[i] = NULL; } // Bonds start astr = g_malloc0 (2*sizeof*astr); init_all_bonds (); g_free (astr); if (tmp_fmol -> nstruct[0] > 0) { tmp_fmol -> first_struct[1] = duplicate_field_struct_list (tmp_fmol -> first_struct[0], TRUE); tmp_fmol -> nstruct[1] = tmp_fmol -> nstruct[0]; } // Bonds end // Angle start astr = g_malloc0 (3*sizeof*astr); init_all_angles (); g_free (astr); if (tmp_fmol -> nstruct[2] > 0) { tmp_fmol -> nstruct[3] = tmp_fmol -> nstruct[2]; tmp_fmol -> first_struct[3] = duplicate_field_struct_list (tmp_fmol -> first_struct[2], TRUE); } // Angle end // Dihedral start astr = g_malloc0 (4*sizeof*astr); init_all_dihedrals (); // Torsional restraints if (tmp_fmol -> nstruct[4] > 0) { tmp_fmol -> nstruct[5] = tmp_fmol -> nstruct[4]; tmp_fmol -> first_struct[5] = duplicate_field_struct_list (tmp_fmol -> first_struct[4], TRUE); } // Improper and inversion angles for (i=6; i<8; i++) init_all_impropers_inversions (i); g_free (astr); } /*! \fn void init_field_molecule (int i) \brief initialiaze of field molecule data structurre \param i the id of the field molecule to initialize */ void init_field_molecule (int i) { int j, k; tmp_fmol -> id = i; tmp_fmol -> multi = tmp_mol -> multiplicity; tmp_fmol -> name = g_strdup_printf("MOL-%d", i+1); tmp_fmol -> fragments = NULL; tmp_fmol -> fragments = allocint (tmp_fmol -> multi); for (j=0; j multi; j++) { tmp_fmol -> fragments[j] = tmp_mol -> fragments[j]; } tmp_fmol -> mol = tmp_mol; // Atoms start id_atom = -1; tmp_fmol -> atoms_id = g_malloc (tmp_mol -> natoms*sizeof*tmp_fmol -> atoms_id); for (j=0; j natoms; j++) { tmp_fmol -> atoms_id[j] = g_malloc0 (tmp_fmol -> multi*sizeof*tmp_fmol -> atoms_id[j]); for (k=0; k multi; k++) { tmp_fmol -> atoms_id[j][k].a = -1; tmp_fmol -> atoms_id[j][k].b = -1; } } init_all_atoms (i); // Atoms end // setup_field_molecule_neighbors (i, tmp_proj); tmp_fmol -> shells = 0; // Field struct init_all_field_struct (TRUE); tmp_fmol -> shells = 0; tmp_fmol -> first_shell = NULL; tmp_fmol -> constraints = 0; tmp_fmol -> first_constraint = NULL; tmp_fmol -> pmfs = 0; tmp_fmol -> first_pmf = NULL; tmp_fmol -> rigids = 0; tmp_fmol -> first_rigid = NULL; tmp_fmol -> tethered = 0; tmp_fmol -> first_tethered = NULL; tmp_fmol -> show = FALSE; tmp_fmol -> show_id = FALSE; tmp_fmol -> next = NULL; tmp_fmol -> prev = NULL; } /*! \fn int init_vdw (gboolean init) \brief initialize the VdW section of a classical force field \param init */ int init_vdw (gboolean init) { int nvdw; int i, j, k, l; tmp_fmol = tmp_field -> first_molecule; i = 0; while (tmp_fmol) { i += tmp_fmol -> atoms; tmp_fmol = tmp_fmol -> next; } nvdw = i; gchar ** to_be_vdw = g_malloc (nvdw*sizeof*to_be_vdw); int * vdw_mlist = allocint (nvdw); int ** vdw_aids = allocdint (nvdw,nvdw); int ** vdw_mids = allocdint (nvdw,nvdw); int vdw_na[2]; int * vdw_a[2], * vdw_ma[2]; gboolean add_vdw; i = 0; tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { add_vdw = TRUE; for (j=0; j name) == 0) { add_vdw = FALSE; vdw_mlist[j] ++; vdw_mids[j][vdw_mlist[j]] = tmp_fmol -> id; vdw_aids[j][vdw_mlist[j]] = tmp_fat -> id; break; } } if (add_vdw) { to_be_vdw[j] = g_strdup_printf ("%s", tmp_fat -> name); vdw_mids[j][0] = tmp_fmol -> id; vdw_aids[j][0] = tmp_fat -> id; i ++; } tmp_fat = tmp_fat -> next; } tmp_fmol = tmp_fmol -> next; } j = 0 ; tmp_fbody = NULL; for (k=0; k first_body[0] = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody = tmp_field -> first_body[0]; } else { comp_fbody = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody = comp_fbody; } } else { tmp_fbody -> next = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody -> next -> prev = tmp_fbody; tmp_fbody = tmp_fbody -> next; } j ++; } for (k=0; k next = init_field_nth_body (j, 0, vdw_na, vdw_ma, vdw_a); tmp_fbody -> next -> prev = tmp_fbody; tmp_fbody = tmp_fbody -> next; j ++; } } g_free (to_be_vdw); g_free (vdw_aids); g_free (vdw_mids); g_free (vdw_mlist); return j; } /*! \fn void init_dlpoly_field (classical_field * new_field) \brief initialize DL-POLY classical force field \param new_field the force field to initialize */ void init_dlpoly_field (classical_field * new_field) { // Preparing DLPOLY Control file new_field -> sys_opts = allocdouble (17); new_field -> io_opts = allocdouble (23); new_field -> ana_opts = allocdouble (17); new_field -> elec_opts = allocdouble (11); new_field -> vdw_opts = allocdouble (6); new_field -> met_opts = allocdouble (2); new_field -> equi_opts = allocdouble (17); new_field -> thermo_opts= allocdouble (10); new_field -> md_opts = allocdouble (20); new_field -> out_opts = allocdouble (31); /* new_field -> io_opts[] */ // Set job time control (yes/no) new_field -> io_opts[0] = 1.0; // Job time control (s): new_field -> io_opts[1] = 10000.0; // Set job closure time (yes/no) new_field -> io_opts[2] = 1.0; // Job closure time (s): new_field -> io_opts[3] = 100.0; // 4 (1/0) General I/O read interace // 5 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Reader count: new_field -> io_opts[6] = 12; // Batch size: new_field -> io_opts[7] = 2000000; // Buffer size: new_field -> io_opts[8] = 20000; // 9 (1/0) Error check on general read I/O // 10 (1/0) General I/O write interace // 11 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Real precision (0 = 32 bits, 1= 64 bits) new_field -> io_opts[12] = 1; // 13 Type (0= Sorted, 1= Unsorted) // Reader count: new_field -> io_opts[14] = 12; // Batch size: new_field -> io_opts[15] = 2000000; // Buffer size: new_field -> io_opts[16] = 20000; // 17 (1/0) Error check on general write I/O // 18 (1/0) Define random number generator seeds // n1 seed: new_field -> io_opts[19] = 1; // n2 seed: new_field -> io_opts[20] = 20; // n3 seed: new_field -> io_opts[21] = 300; // 22 (1/0) limit the number of processors in the z direction /* new_field -> sys_opts[] */ // Relative dieletric constant: new_field -> sys_opts[0] = 1.0; // 1 = allowed local variation of the system density (%) // 2 (1/0) Ingore the particle indices in CONFIG file // 3 (1/0) Ignore strict checks // 4 (1/0) Skip detailed topology reporting // 5 (1/0) Ignore center of mass removal // 6 (1/0) Set tolerance of the relaxed shell model // Tolerance for the relaxed shell model: new_field -> sys_opts[7] = 1.0; // 8 (1/0) Set the subscelling threshold density of particles per link cell // Subscelling threshold density of particles per link cell: new_field -> sys_opts[9] = 50.0; // 10 (1/0) Create an expanded version of the current model ... // ... on x: new_field -> sys_opts[11] = 1.0; // ... on y: new_field -> sys_opts[12] = 1.0; // .. on z: new_field -> sys_opts[13] = 1.0; // 14 (1/0) Restart a calculation // 15 (0= Continue current, 1= Start new without T reset, 2= Start new with T reset) /* new_field -> equi_opts[] */ new_field -> equi_opts[0] = 1.0; // Equilibrate for the first N steps, N= new_field -> equi_opts[1] = 20.0; // Scale temperature every N steps, N= new_field -> equi_opts[3] = 1.0; // Cap forces fmax= new_field -> equi_opts[5] = 1000.0; // Resample the momenta distribution during N steps N= new_field -> equi_opts[7] = 1.0; // 8 (1/0) = Minimize system configuration // 9 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[10] = 50.0; // Minimization to be done every N steps, N= new_field -> equi_opts[11] = 1.0; // 12 (1/0) = Optimize system configuration from start // 13 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[14] = 50.0; // 15 (1/0) = Perform zero temperature (10K) optimization // 16 (1/0) = Include equilibration data in statistics /* new_field -> vdw_opts[] */ // Vdw cutoff // 0 (1/0) Use VdW interactions new_field -> vdw_opts[0] = 1.0; // Vdw Cutoff radius new_field -> vdw_opts[1] = 12.0; // 2 (1/0) Enforce direct VdW calculation // 3 (1/0) Apply force shifting // 4 (1/0) Apply mixing rule // 5 Mixing rule (0= LB, 1= FH, 2= H, 3= HHG, 4= TT, 5= F) /* new_field -> elec_opts[] */ // 0 (1/0) Evaluate electrostatics new_field -> elec_opts[0] = 1.0; // Long range cutoff: new_field -> elec_opts[1] = 12.0; // 2 (1/0) Add padding to rcut // 3 Padding in angstrom // 4 (1/0) Use extended coulombic exclusion // 5 Electrostatic calculation method (0= Direct, ...) new_field -> elec_opts[5] = 2.0; // Ewald precision: new_field -> elec_opts[6] = 1e-20; // 7 to 9 method options // 10 Evaluation every N steps, N= tmp_field -> elec_opts[10] = 1.0; /* new_field -> met_opts[] */ // 0 (1/0) Enable direct calculation of metal interactions // 1 (1/0) Switch the default embeding fuctions // Ensemble (0= NVE, 1= NVT, 2= NPT, 4= NST) // new_field -> ensemble // Thermostat = f(ensemble): // new_field -> thermostat /* new_field -> thermo_opts[] */ // 0-5 ensemble + thermostat related options // 6 (1/0) Use pseudo thermal bath // 7 Thermostat type (0= L+D, 1= L, 2= G, 3= D) // Thickness: new_field -> thermo_opts[8] = 2.0; // 9 = Target temperature /* new_field -> md_opts[] */ // MD target temperature (K) new_field -> md_opts[0] = 300.0; // 1 Verlet integrator (0 = velocity, 1 = leapfrog) // Number of MD steps: new_field -> md_opts[2] = 100.0; // 3 Time step (0 = fixed, 1 = variable) // Time step delta(t)= (ps) new_field -> md_opts[4] = 0.001; // Target pressure (katms): new_field -> md_opts[5] = 0.001; // Variable time step, maximum time step: new_field -> md_opts[6] = 0.001; // Variable time step, maximum distance allowed: new_field -> md_opts[7] = 0.5; // Variable time step, minimun distance allowed: new_field -> md_opts[8] = 0.01; // Shake iterations limit, in cycles: new_field -> md_opts[9] = 250.0; // Shake tolerance: new_field -> md_opts[10] = 1e-6; // FIQA iterations limit, in cycles: new_field -> md_opts[11] = 100; // FIQA quaternions tolerance: new_field -> md_opts[12] = 1e-8; // 13 (1/0) Initiate impact on particles // Index if the particle to impact: new_field -> md_opts[14] = 1.0; // Time step of the impact: new_field -> md_opts[15] = 1.0; // Energy of the imapct (keV): new_field -> md_opts[16] = 1.0; // Direction of the impact (from center of mass) ... // ... on x: new_field -> md_opts[17] = 1.0; // ... on y: new_field -> md_opts[18] = 1.0; // ... on z: new_field -> md_opts[19] = 1.0; /* new_field -> out_opts[] */ // 0 (1/0) Print Defect file ... // 1 ... starting from step // ... every N steps, N= new_field -> out_opts[2] = 1.0; // ... with a site inteerstitial cutoff: new_field -> out_opts[3] = 0.75; // 4 (1/0) Print Displacement file .. // 5 ... starting from step // ... every N steps, N= new_field -> out_opts[6] = 1.0; // ... with a qualifying cutoff: new_field -> out_opts[7] = 0.15; // 8 (1/0) Print HISTORY file ... // 9 ... starting from step // ... every N steps, N= new_field -> out_opts[10] = 1.0; // 11 Data level (0, 1, 2) // 12 (1/0) Print Atom's MSD ... // 13 ... starting from step // ... every N steps, N= new_field -> out_opts[14] = 1.0; // 15 (1/0) Print system data ... // ... every N steps, N= new_field -> out_opts[16] = 1.0; // 17 (1/0) Accumulate statistics ... // ... every N steps, N= new_field -> out_opts[18] = 1.0; // 19 (1/0) Rolling average stack ... // ... to N steps, N= new_field -> out_opts[20] = 1.0; // 21 (1/0) RDF ... // ... every N steps, N= new_field -> out_opts[22] = 1.0; // ... with a bin size= new_field -> out_opts[23] = 0.05; // 24 (1/0) Overall VAF analysis ... // ... every N steps, N= new_field -> out_opts[25] = 1.0; // ... with a bin size= new_field -> out_opts[26] = 50.0; // 27 (1/0) Z density profile ... // ... every N steps, N= new_field -> out_opts[28] = 1.0; // 29 (1/0) ignoring time-av. VAFs // Dump restart information every N steps, N= new_field -> out_opts[30] = 1000.0; /* new_field -> ana_opts[] */ // 0 (1/0) Activate all intra-molecular PDF analysis ... // ... every N steps, N= new_field -> ana_opts[1] = 1.0; // ... number of delta r in: new_field -> ana_opts[2] = 100.0; // ... Cutoff: new_field -> ana_opts[3] = 2.0; // 4 (1/0) Activate bonds PDF analysis ... // ... every N steps, N= new_field -> ana_opts[5] = 1.0; // ... number of delta r in: new_field -> ana_opts[6] = 100.0; // ... Cutoff: new_field -> ana_opts[7] = 2.0; // 8 (1/0) Activate angles analysis ... // ... every N steps, N= new_field -> ana_opts[9] = 1.0; // ... number of delta angle in: new_field -> ana_opts[10] = 90.0; // 11 (1/0) Activate dihedrals analysis ... // ... every N steps, N= new_field -> ana_opts[12] = 1.0; // ... number of delta angle in: new_field -> ana_opts[13] = 90.0; // 14 (1/0) Activate inversions analysis ... // ... every N steps, N= new_field -> ana_opts[15] = 1.0; // ... number of delta angle in: new_field -> ana_opts[16] = 90.0; } /*! \fn void init_lammps_field (classical_field * new_field) \brief initialize a LAMMPS classical force field \param new_field the force field to initialize */ void init_lammps_field (classical_field * new_field) { // Preparing LAMMPS Control file new_field -> sys_opts = allocdouble (17); new_field -> io_opts = allocdouble (23); new_field -> ana_opts = allocdouble (17); new_field -> elec_opts = allocdouble (11); new_field -> vdw_opts = allocdouble (6); new_field -> met_opts = allocdouble (2); new_field -> equi_opts = allocdouble (17); new_field -> thermo_opts= allocdouble (10); new_field -> md_opts = allocdouble (20); new_field -> out_opts = allocdouble (31); /* new_field -> io_opts[] */ // Set job time control (yes/no) new_field -> io_opts[0] = 1.0; // Job time control (s): new_field -> io_opts[1] = 10000.0; // Set job closure time (yes/no) new_field -> io_opts[2] = 1.0; // Job closure time (s): new_field -> io_opts[3] = 100.0; // 4 (1/0) General I/O read interace // 5 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Reader count: new_field -> io_opts[6] = 12; // Batch size: new_field -> io_opts[7] = 2000000; // Buffer size: new_field -> io_opts[8] = 20000; // 9 (1/0) Error check on general read I/O // 10 (1/0) General I/O write interace // 11 General I/O method (0= MPI, 1= FORTRAN, 2= Traditional, 3= netCDF) // Real precision (0 = 32 bits, 1= 64 bits) new_field -> io_opts[12] = 1; // 13 Type (0= Sorted, 1= Unsorted) // Reader count: new_field -> io_opts[14] = 12; // Batch size: new_field -> io_opts[15] = 2000000; // Buffer size: new_field -> io_opts[16] = 20000; // 17 (1/0) Error check on general write I/O // 18 (1/0) Define random number generator seeds // n1 seed: new_field -> io_opts[19] = 1; // n2 seed: new_field -> io_opts[20] = 20; // n3 seed: new_field -> io_opts[21] = 300; // 22 (1/0) limit the number of processors in the z direction /* new_field -> sys_opts[] */ // Relative dieletric constant: new_field -> sys_opts[0] = 1.0; // 1 = allowed local variation of the system density (%) // 2 (1/0) Ingore the particle indices in CONFIG file // 3 (1/0) Ignore strict checks // 4 (1/0) Skip detailed topology reporting // 5 (1/0) Ignore center of mass removal // 6 (1/0) Set tolerance of the relaxed shell model // Tolerance for the relaxed shell model: new_field -> sys_opts[7] = 1.0; // 8 (1/0) Set the subscelling threshold density of particles per link cell // Subscelling threshold density of particles per link cell: new_field -> sys_opts[9] = 50.0; // 10 (1/0) Create an expanded version of the current model ... // ... on x: new_field -> sys_opts[11] = 1.0; // ... on y: new_field -> sys_opts[12] = 1.0; // .. on z: new_field -> sys_opts[13] = 1.0; // 14 (1/0) Restart a calculation // 15 (0= Continue current, 1= Start new without T reset, 2= Start new with T reset) /* new_field -> equi_opts[] */ new_field -> equi_opts[0] = 1.0; // Equilibrate for the first N steps, N= new_field -> equi_opts[1] = 20.0; // Scale temperature every N steps, N= new_field -> equi_opts[3] = 1.0; // Cap forces fmax= new_field -> equi_opts[5] = 1000.0; // Resample the momenta distribution during N steps N= new_field -> equi_opts[7] = 1.0; // 8 (1/0) = Minimize system configuration // 9 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[10] = 50.0; // Minimization to be done every N steps, N= new_field -> equi_opts[11] = 1.0; // 12 (1/0) = Optimize system configuration from start // 13 Minimize target (0=Force, 1=Energy, 2= Distance) // Minimization threshold: new_field -> equi_opts[14] = 50.0; // 15 (1/0) = Perform zero temperature (10K) optimization // 16 (1/0) = Include equilibration data in statistics /* new_field -> vdw_opts[] */ // Vdw cutoff // 0 (1/0) Use VdW interactions new_field -> vdw_opts[0] = 1.0; // Vdw Cutoff radius new_field -> vdw_opts[1] = 12.0; // 2 (1/0) Enforce direct VdW calculation // 3 (1/0) Apply force shifting // 4 (1/0) Apply mixing rule // 5 Mixing rule (0= LB, 1= FH, 2= H, 3= HHG, 4= TT, 5= F) /* new_field -> elec_opts[] */ // 0 (1/0) Evaluate electrostatics new_field -> elec_opts[0] = 1.0; // Long range cutoff: new_field -> elec_opts[1] = 12.0; // 2 (1/0) Add padding to rcut // 3 Padding in angstrom // 4 (1/0) Use extended coulombic exclusion // 5 Electrostatic calculation method (0= Direct, ...) new_field -> elec_opts[5] = 2.0; // Ewald precision: new_field -> elec_opts[6] = 1e-20; // 7 to 9 method options // 10 Evaluation every N steps, N= tmp_field -> elec_opts[10] = 1.0; /* new_field -> met_opts[] */ // 0 (1/0) Enable direct calculation of metal interactions // 1 (1/0) Switch the default embeding fuctions // Ensemble (0= NVE, 1= NVT, 2= NPT, 4= NST) // new_field -> ensemble // Thermostat = f(ensemble): // new_field -> thermostat /* new_field -> thermo_opts[] */ // 0-5 ensemble + thermostat related options // 6 (1/0) Use pseudo thermal bath // 7 Thermostat type (0= L+D, 1= L, 2= G, 3= D) // Thickness: new_field -> thermo_opts[8] = 2.0; // 9 = Target temperature /* new_field -> md_opts[] */ // MD target temperature (K) new_field -> md_opts[0] = 300.0; // 1 Verlet integrator (0 = velocity, 1 = leapfrog) // Number of MD steps: new_field -> md_opts[2] = 100.0; // 3 Time step (0 = fixed, 1 = variable) // Time step delta(t)= (ps) new_field -> md_opts[4] = 0.001; // Target pressure (katms): new_field -> md_opts[5] = 0.001; // Variable time step, maximum time step: new_field -> md_opts[6] = 0.001; // Variable time step, maximum distance allowed: new_field -> md_opts[7] = 0.5; // Variable time step, minimun distance allowed: new_field -> md_opts[8] = 0.01; // Shake iterations limit, in cycles: new_field -> md_opts[9] = 250.0; // Shake tolerance: new_field -> md_opts[10] = 1e-6; // FIQA iterations limit, in cycles: new_field -> md_opts[11] = 100; // FIQA quaternions tolerance: new_field -> md_opts[12] = 1e-8; // 13 (1/0) Initiate impact on particles // Index if the particle to impact: new_field -> md_opts[14] = 1.0; // Time step of the impact: new_field -> md_opts[15] = 1.0; // Energy of the imapct (keV): new_field -> md_opts[16] = 1.0; // Direction of the impact (from center of mass) ... // ... on x: new_field -> md_opts[17] = 1.0; // ... on y: new_field -> md_opts[18] = 1.0; // ... on z: new_field -> md_opts[19] = 1.0; /* new_field -> out_opts[] */ // 0 (1/0) Print Defect file ... // 1 ... starting from step // ... every N steps, N= new_field -> out_opts[2] = 1.0; // ... with a site inteerstitial cutoff: new_field -> out_opts[3] = 0.75; // 4 (1/0) Print Displacement file .. // 5 ... starting from step // ... every N steps, N= new_field -> out_opts[6] = 1.0; // ... with a qualifying cutoff: new_field -> out_opts[7] = 0.15; // 8 (1/0) Print HISTORY file ... // 9 ... starting from step // ... every N steps, N= new_field -> out_opts[10] = 1.0; // 11 Data level (0, 1, 2) // 12 (1/0) Print Atom's MSD ... // 13 ... starting from step // ... every N steps, N= new_field -> out_opts[14] = 1.0; // 15 (1/0) Print system data ... // ... every N steps, N= new_field -> out_opts[16] = 1.0; // 17 (1/0) Accumulate statistics ... // ... every N steps, N= new_field -> out_opts[18] = 1.0; // 19 (1/0) Rolling average stack ... // ... to N steps, N= new_field -> out_opts[20] = 1.0; // 21 (1/0) RDF ... // ... every N steps, N= new_field -> out_opts[22] = 1.0; // ... with a bin size= new_field -> out_opts[23] = 0.05; // 24 (1/0) Overall VAF analysis ... // ... every N steps, N= new_field -> out_opts[25] = 1.0; // ... with a bin size= new_field -> out_opts[26] = 50.0; // 27 (1/0) Z density profile ... // ... every N steps, N= new_field -> out_opts[28] = 1.0; // 29 (1/0) ignoring time-av. VAFs // Dump restart information every N steps, N= new_field -> out_opts[30] = 1000.0; /* new_field -> ana_opts[] */ // 0 (1/0) Activate all intra-molecular PDF analysis ... // ... every N steps, N= new_field -> ana_opts[1] = 1.0; // ... number of delta r in: new_field -> ana_opts[2] = 100.0; // ... Cutoff: new_field -> ana_opts[3] = 2.0; // 4 (1/0) Activate bonds PDF analysis ... // ... every N steps, N= new_field -> ana_opts[5] = 1.0; // ... number of delta r in: new_field -> ana_opts[6] = 100.0; // ... Cutoff: new_field -> ana_opts[7] = 2.0; // 8 (1/0) Activate angles analysis ... // ... every N steps, N= new_field -> ana_opts[9] = 1.0; // ... number of delta angle in: new_field -> ana_opts[10] = 90.0; // 11 (1/0) Activate dihedrals analysis ... // ... every N steps, N= new_field -> ana_opts[12] = 1.0; // ... number of delta angle in: new_field -> ana_opts[13] = 90.0; // 14 (1/0) Activate inversions analysis ... // ... every N steps, N= new_field -> ana_opts[15] = 1.0; // ... number of delta angle in: new_field -> ana_opts[16] = 90.0; } /*! \fn classical_field * create_force_field_data_structure (int ai) \brief initialize classical force field \param ai how to initialize the force field (0 = atomic species, 1 = total coordination, 2 = partial coordination) */ classical_field * create_force_field_data_structure (int ai) { int i, j; classical_field * new_field; new_field = g_malloc0 (sizeof*new_field); tmp_field = new_field; new_field -> energy_unit = 1; new_field -> atom_init = ai; switch (activef) { case 0: init_dlpoly_field (new_field); break; case 1: init_lammps_field (new_field); break; } new_field -> molecules = tmp_proj -> modelfc -> mol_by_step[0]; new_field -> first_molecule = g_malloc0 (sizeof*new_field -> first_molecule); tmp_fmol = new_field -> first_molecule; j = 0; #ifdef DEBUG g_debug ("Total num of molecules: %d", tmp_proj -> modelfc -> mol_by_step[0]); #endif // DEBUG for (i=0; i < tmp_proj -> modelfc -> mol_by_step[0]; i++) { tmp_mol = & tmp_proj -> modelfc -> mols[0][i]; #ifdef DEBUG g_debug ("Init FORCE FIELD for: "); g_debug (" tmp_mol -> id= %d", tmp_mol -> id); g_debug (" tmp_mol -> multi= %d", tmp_mol -> multiplicity); g_debug (" tmp_mol -> natoms= %d", tmp_mol -> natoms); #endif // DEBUG init_field_molecule (i); j += tmp_fmol -> atoms; if (i < tmp_proj -> modelfc -> mol_by_step[0]-1) { tmp_fmol -> next = g_malloc0 (sizeof*tmp_fmol -> next); tmp_fmol = tmp_fmol -> next; } } for (i=0; i<5; i++) { tmp_field -> nbody[i] = 0; tmp_field -> first_body[i] = NULL; } // Tersoff cross terms tmp_field -> cross = NULL; // vdW start tmp_field -> nbody[0] = init_vdw (TRUE); // vdW end // External field(s) start new_field -> extern_fields = 0; new_field -> first_external = NULL; // External field(s) end // Non-bonded end return new_field; } Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_mol.c000066400000000000000000000704611457665371200204320ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_mol.c * @short Functions to add / remove molecule(s) to / from the force field * @author Sébastien Le Roux */ /* * This file: 'dlp_mol.c' * * Contains: * - The functions to add / remove molecule(s) to / from the force field * * List of functions: gchar * remove_text (int i, int j, gchar * str); void clean_up_molecules_info (gboolean usel); void set_sensitive_mol (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void clear_field_atoms (field_molecule * fmol, field_atom* at, int mols, int * mol); void molecule_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void merge_all_atoms_to_mol (field_molecule * new_mol, int mstart); void prepare_atoms_to_merge (field_atom* at, field_molecule * new_mol, field_molecule * old_mol); G_MODULE_EXPORT void select_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_add_molecule_to_field (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void run_remove_molecule_from_field (GtkDialog * rmol, gint response_id, gpointer data); G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data); field_atom* new_atom_to_merge (int id, field_molecule * fmol); */ #include "dlp_field.h" #include "calc.h" #include "interface.h" #include "glview.h" int active_col; int a_mol, b_mol; int * new_mol; extern ColRGBA init_color (int id, int numid); field_molecule * to_remove; GtkWidget * remove_label; GtkCellRenderer * remove_renderer[5]; GtkTreeViewColumn * remove_col[5]; gboolean removing = FALSE; extern void field_unselect_all (); extern gchar * set_field_atom_name (field_atom* ato, field_molecule * mol); extern void find_atom_id_in_field_molecule (field_molecule * fmol); extern void viz_fragment (field_molecule * fmol, int id, int viz); extern void check_to_visualize_properties (int id); /*! \fn gchar * remove_text (int i, int j, gchar * str) \brief get removal information text \param i -2 = remove field atom, -1 = remove field molecule \param j -1 = remove field molecule, else remove field atom \param str the name of the object to remove */ gchar * remove_text (int i, int j, gchar * str) { switch (i) { case -2: return g_strdup_printf ("The description of atom %s will be deleted\n" "and merged with the one of the selected field atom.\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly.", str, str); break; case -1: return g_strdup_printf ("The description of molecule %s will be deleted\n" "and merged with the one of the selected molecule.", str); break; default: switch (j) { case -1: return g_strdup_printf ("The description of molecule %s will be deleted\n" "and merged with the one of molecule %s", str, get_active_field_molecule(i) -> name); break; default: return g_strdup_printf ("The description of atom %s will be deleted\n" "and merged with the one of field atom %s\n" "Field object(s) using atom %s will also be deleted\n" "and the force field parameter(s) will be updated accordingly.", str, get_active_atom(i,j) -> name, str); break; } break; } } /*! \fn void clean_up_molecules_info (gboolean usel) \brief prepare molecule related widgets in the assistant \param usel unselect all atom(s) (yes / no) */ void clean_up_molecules_info (gboolean usel) { int i; for (i=0; i name)); gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); } } dint ** atomd_id_save; /*! \fn void clear_field_atoms (field_molecule * fmol, field_atom* at, int mols, int * mol) \brief clean the field atom from a list of atom(s) \param fmol the target fied molecule \param at the field atom to clean, remove specific atom(s) from it \param mols the number of fragment(s) for this molecule \param mol the list of fragment id */ void clear_field_atoms (field_molecule * fmol, field_atom* at, int mols, int * mol) { int i, j, k, l; l = 0; for (i=0; i < at -> num; i++) { k = at -> list[i]; for (j=0; j < mols; j++) { if (tmp_proj -> atoms[0][k].coord[2] == mol[j]) { l ++; } } } int * r_list = allocint (l); int * s_list = allocint (l); int * t_list = allocint (l); l = -1; at -> frozen = 0; for (i=0; i < at -> num; i++) { k = at -> list[i]; for (j=0; j < mols; j++) { if (tmp_proj -> atoms[0][k].coord[2] == mol[j]) { l ++; r_list[l] = k; s_list[l] = at -> list_id[i]; t_list[l] = at -> frozen_id[i]; if (t_list[l]) at -> frozen ++; } } } at -> num = l+1; at -> list = NULL; at -> list = allocint (at -> num); at -> list_id = NULL; at -> list_id = allocint (at -> num); at -> frozen_id = NULL; at -> frozen_id = allocbool (at -> num); for (i=0; i < at -> num; i++) { at -> list[i] = r_list[i]; at -> list_id[i] = s_list[i]; at -> frozen_id[i] = t_list[i]; j = at -> list[i]; k = at -> list_id[i]; for (l=0; l atoms[0][j].coord[2] == mol[l]) { atomd_id_save[k][l].a = at -> id; atomd_id_save[k][l].b = i; } } } g_free (r_list); g_free (s_list); g_free (t_list); } /*! \fn void molecule_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the force field molecule selection tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ void molecule_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; gtk_tree_model_get (mod, iter, active_col, & j, -1); gtk_tree_model_get (mod, iter, 0, & i, -1); set_renderer_color (j, renderer, init_color (i-1, num_field_objects)); } /*! \fn G_MODULE_EXPORT void run_add_molecule_to_field (GtkDialog * dialog, gint response_id, gpointer data) \brief add molecule to force field - running the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_add_molecule_to_field (GtkDialog * dialog, gint response_id, gpointer data) { int i, j, k; int * old_mol = NULL; gchar * str; gboolean done = FALSE; gboolean saveit = FALSE; // Id - Name - Multiplicity - Select // While selected < m apply inactif switch (response_id) { case GTK_RESPONSE_APPLY: if (a_mol > 0 && a_mol < tmp_fmol -> multi) { if (a_mol > 1) { str = g_strdup_printf ("Fragments N°%d", new_mol[0]+1); if (a_mol > 2) { for (i=1; i molecules-1) -> next = next_fmol; next_fmol -> prev = get_active_field_molecule(tmp_field -> molecules-1); next_fmol -> id = tmp_field -> molecules; next_fmol -> multi = a_mol; next_fmol -> fragments = NULL; next_fmol -> fragments = allocint(a_mol); for (i=0; i fragments[i] = new_mol[i]; // Atoms_id and field atoms atomd_id_save = g_malloc (next_fmol-> mol -> natoms*sizeof*atomd_id_save); for (i=0; i mol -> natoms; i++) { atomd_id_save[i] = g_malloc (next_fmol -> multi*sizeof*atomd_id_save[i]); } tmp_fat = next_fmol -> first_atom; for (i=0; i < next_fmol -> atoms; i++) { clear_field_atoms (next_fmol, tmp_fat, a_mol, new_mol); tmp_fat -> name = g_strdup_printf ("%s", set_field_atom_name (tmp_fat, next_fmol)); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } g_free (next_fmol -> atoms_id); next_fmol -> atoms_id = NULL; next_fmol -> atoms_id = g_malloc (next_fmol-> mol -> natoms*sizeof*next_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { next_fmol -> atoms_id[i] = g_malloc (next_fmol -> multi*sizeof*next_fmol -> atoms_id[i]); for (j=0; j multi; j++) { next_fmol -> atoms_id[i][j].a = atomd_id_save[i][j].a; next_fmol -> atoms_id[i][j].b = atomd_id_save[i][j].b; } } g_free (atomd_id_save); old_mol = allocint(old_fmol -> multi - a_mol); k = -1; for (i=0; i multi; i++) { saveit = TRUE; for (j=0; j fragments[i]) { saveit = FALSE; break; } } if (saveit) { k++; old_mol[k] = old_fmol -> fragments[i]; } } new_mol = NULL; // Now we deal with atoms_id and the field atoms atomd_id_save = g_malloc (old_fmol-> mol -> natoms*sizeof*atomd_id_save); for (i=0; i mol -> natoms; i++) { atomd_id_save[i] = g_malloc ((old_fmol -> multi - a_mol)*sizeof*atomd_id_save[i]); } tmp_fat = old_fmol -> first_atom; for (i=0; i < old_fmol -> atoms; i++) { clear_field_atoms (old_fmol, tmp_fat, old_fmol -> multi - a_mol, old_mol); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } old_fmol -> multi -= a_mol; g_free (old_fmol -> atoms_id); old_fmol -> atoms_id = NULL; old_fmol -> atoms_id = g_malloc (old_fmol-> mol -> natoms*sizeof*old_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { old_fmol -> atoms_id[i] = g_malloc (old_fmol -> multi*sizeof*old_fmol -> atoms_id[i]); for (j=0; j multi; j++) { old_fmol -> atoms_id[i][j].a = atomd_id_save[i][j].a; old_fmol -> atoms_id[i][j].b = atomd_id_save[i][j].b; } } g_free (atomd_id_save); old_fmol -> fragments = NULL; old_fmol -> fragments = allocint(old_fmol -> multi); for (i=0; i multi; i++) old_fmol -> fragments[i] = old_mol[i]; old_mol = NULL; row_id = tmp_field -> molecules; tmp_field -> molecules ++; edit_field_prop (NULL, NULL, GINT_TO_POINTER(0)); clean_up_molecules_info (TRUE); } } break; default: field_unselect_all (); done = TRUE; break; } if (done) { g_free (new_mol); new_mol = NULL; destroy_this_dialog (dialog); } } /*! \fn G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data) \brief add molecule to force field - creating the dialog \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void add_molecule_to_field (GSimpleAction * action, GVariant * parameter, gpointer data) { int i; field_object = 0; gchar * str = g_strdup_printf ("Please select the fragment(s) of the new molecule"); GtkWidget * amol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(amol), "Apply", GTK_RESPONSE_APPLY); GtkWidget * add_tree = NULL; GtkTreeIter iter; GtkTreeViewColumn * mol_col[2]; GtkCellRenderer * mol_cell[2]; gchar * mol_title[2] = {"Fragment", "Viz.3D & Select"}; gchar * ctype[2]={"text", "active"}; GType col_type[2] = {G_TYPE_INT, G_TYPE_BOOLEAN}; active_col = 1; a_mol = 0; GtkTreeStore * add_model = gtk_tree_store_newv (2, col_type); add_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(add_model)); tmp_fmol = get_active_field_molecule (row_id); for (i=0; i<2; i++) { if (i == 0) { mol_cell[i] = gtk_cell_renderer_text_new (); } else { mol_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(mol_cell[i]), "toggled", G_CALLBACK(select_mol), & add_model); } mol_col[i] = gtk_tree_view_column_new_with_attributes (mol_title[i], mol_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(add_tree), mol_col[i]); gtk_tree_view_column_set_alignment (mol_col[i], 0.5); if (i == 0) { gtk_tree_view_column_set_cell_data_func (mol_col[i], mol_cell[i], molecule_set_color, NULL, NULL); } } // fill model num_field_objects = tmp_coord-> totcoord[2]; new_mol = NULL; new_mol = allocint (tmp_fmol -> multi); for (i=0; i multi; i++) { gtk_tree_store_append (add_model, & iter, NULL); gtk_tree_store_set (add_model, & iter, 0, tmp_fmol -> fragments[i] + 1, 1, 0, -1); new_mol[i] = -1; } g_object_unref (add_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(add_tree)); i = ((tmp_fmol -> multi+1)*35 < 500) ? (tmp_fmol -> multi+1)*35 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (amol), 220, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, add_tree); run_this_gtk_dialog (amol, G_CALLBACK(run_add_molecule_to_field), NULL); } /*! \fn void merge_all_atoms_to_mol (field_molecule * new_mol, int mstart) \brief merge all field atoms to another field molecule \param new_mol the field molecule to merge the atom(s) with \param mstart the fragment id to start with */ void merge_all_atoms_to_mol (field_molecule * new_mol, int mstart) { field_atom* fat, * fbt; fat = get_active_atom (new_mol -> id, new_mol -> atoms-1); int i, j, k, l, m, n; for (i=0; i num; i++) { j = fat -> list[i]; k = fat -> list_id[i]; l = new_mol -> atoms_id[k][0].a; fbt = get_active_atom (new_mol -> id, l); fbt -> list[fbt -> num] = j; fbt -> list_id[fbt -> num] = k; m = tmp_proj -> atoms[0][j].coord[2]; for (n=mstart; n multi; n++) { if (new_mol -> fragments[n] == m) { new_mol -> atoms_id[k][n].a = fbt -> id; new_mol -> atoms_id[k][n].b = fbt -> num; break; } } fbt -> num ++; } } /*! \fn void prepare_atoms_to_merge (field_atom* at, field_molecule * new_mol, field_molecule * old_mol) \brief update the data for the newly 'merged' field atom \param at the target field atom \param new_mol the target molecule to merge with \param old_mol the molecule to remove */ void prepare_atoms_to_merge (field_atom* at, field_molecule * new_mol, field_molecule * old_mol) { int i, j; int * saved_list = allocint (at -> num); int * saved_list_id = allocint (at -> num); int * saved_frozen_id = allocbool (at -> num); for (j=0; j < at -> num; j++) { saved_list[j] = at -> list[j]; saved_list_id[j] = at -> list_id[j]; saved_frozen_id[j] = at -> frozen_id[j]; } i = at -> num; i /= (new_mol -> multi - old_mol -> multi); i *= old_mol -> multi; g_free (at -> list); at -> list = allocint (at -> num + i); g_free (at -> list_id); at -> list_id = allocint (at -> num + i); g_free (at -> frozen_id); at -> frozen_id = allocbool (at -> num + i); for (j=0; j< at -> num; j++) { at -> list[j] = saved_list[j]; at -> list_id[j] = saved_list_id[j]; at -> frozen_id[j] = saved_frozen_id[j]; } g_free (saved_list); g_free (saved_list_id); g_free (saved_frozen_id); } /*! \fn field_atom* new_atom_to_merge (int id, field_molecule * fmol) \brief merge field atoms from a field molecule \param id the id of the new field atom \param fmol the field molecule for of the atoms */ field_atom* new_atom_to_merge (int id, field_molecule * fmol) { field_atom* fat, * fbt; fat = g_malloc (sizeof*fat); fat -> id = id; fat -> sp = -1; fat -> num = fmol -> mol -> natoms * fmol -> multi; fat -> list = allocint (fmol -> mol -> natoms * fmol -> multi); fat -> list_id = allocint (fmol -> mol -> natoms * fmol -> multi); fbt = fmol -> first_atom; int i, j; i = 0; while (fbt != NULL) { for (j=0; j num; j++) { fat -> list[i] = fbt -> list[j]; fat -> list_id[i] = fbt -> list_id[j]; i ++; } fbt = fbt -> next; } return fat; } /*! \fn G_MODULE_EXPORT void run_remove_molecule_from_field (GtkDialog * rmol, gint response_id, gpointer data) \brief remove molecule from force field - running the dialog \param rmol the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_remove_molecule_from_field (GtkDialog * rmol, gint response_id, gpointer data) { int i, j; gboolean done = FALSE; switch (response_id) { case GTK_RESPONSE_APPLY: if (a_mol) { done = TRUE; field_molecule * to_merge = get_active_field_molecule(new_mol[0]); int * old_mol = allocint (to_merge -> multi); for (i=0; i multi; i++) old_mol[i] = to_merge -> fragments[i]; g_free (to_merge -> fragments); to_merge -> fragments = allocint (to_merge -> multi + to_remove -> multi); for (i=0; i multi; i++) to_merge -> fragments[i] = old_mol[i]; old_mol = NULL; for (i=to_merge -> multi; i < to_merge -> multi + to_remove -> multi; i++) { to_merge -> fragments[i] = to_remove -> fragments[i - to_merge -> multi]; } atomd_id_save = g_malloc (to_merge -> mol -> natoms*sizeof*atomd_id_save); for (i=0; i mol -> natoms; i++) { atomd_id_save[i] = g_malloc ((to_merge -> multi+to_remove -> multi)*sizeof*atomd_id_save[i]); for (j=0; j multi; j++) { atomd_id_save[i][j].a = to_merge -> atoms_id[i][j].a; atomd_id_save[i][j].b = to_merge -> atoms_id[i][j].b; } for (j=to_merge -> multi; j multi+to_remove -> multi; j++) { atomd_id_save[i][j].a = -1; atomd_id_save[i][j].b = -1; } } to_merge -> multi += to_remove -> multi; g_free (to_merge -> atoms_id); to_merge -> atoms_id = g_malloc (to_merge -> mol -> natoms*sizeof*to_merge -> atoms_id); for (i=0; i mol -> natoms; i++) { to_merge -> atoms_id[i] = g_malloc (to_merge -> multi*sizeof*to_merge -> atoms_id[i]); for (j=0; j multi; j++) { to_merge -> atoms_id[i][j].a = atomd_id_save[i][j].a; to_merge -> atoms_id[i][j].b = atomd_id_save[i][j].b; } } g_free (atomd_id_save); tmp_fat = get_active_atom (to_merge -> id, to_merge -> atoms -1); tmp_fat -> next = new_atom_to_merge (to_merge -> atoms, to_remove); to_merge -> atoms ++; tmp_fat = to_merge -> first_atom; for (i=0; i < to_merge -> atoms-1; i++) { prepare_atoms_to_merge (tmp_fat, to_merge, to_remove); if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } merge_all_atoms_to_mol (to_merge, to_merge -> multi - to_remove -> multi); tmp_fat = get_active_atom (to_merge -> id, to_merge -> atoms-2); g_free (tmp_fat -> next); tmp_fat -> next = NULL; to_merge -> atoms --; if (to_remove == tmp_field -> first_molecule) { tmp_field -> first_molecule = to_remove -> next; tmp_field -> first_molecule -> prev = NULL; } else { if (to_remove -> next != NULL) { tmp_fmol = to_remove -> prev; tmp_fmol -> next = to_remove -> next; to_remove -> next -> prev = tmp_fmol; } else { to_remove = to_remove -> prev; to_remove -> next = NULL; } } tmp_field -> molecules --; clean_up_molecules_info (TRUE); } break; default: field_unselect_all (); done = TRUE; break; } if (done) destroy_this_dialog (rmol); } /*! \fn G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove molecule from force field - creating the dialog \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void remove_molecule_from_field (GSimpleAction * action, GVariant * parameter, gpointer data) { to_remove = (field_molecule *) data; int i, j; field_object = 0; gchar * str = g_strdup_printf ("Select the molecule to merge molecule \"%s\" with", to_remove -> name); GtkWidget * rmol = dialogmodal (str, GTK_WINDOW(field_assistant)); g_free (str); gtk_dialog_add_button (GTK_DIALOG(rmol), "Apply", GTK_RESPONSE_APPLY); GtkWidget * remove_tree = NULL; GtkTreeIter iter; gchar * mol_title[4] = {"Id", "Name", "Multiplicity", "Viz.3D & Merge with"}; gchar * ctype[4]={"text", "text", "text", "active"}; GType col_type[4] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_BOOLEAN}; active_col = 3; a_mol = 0; new_mol = allocint(1); GtkTreeStore * remove_model = gtk_tree_store_newv (4, col_type); remove_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(remove_model)); for (i=0; i<4; i++) { if (i < 3) { remove_renderer[i] = gtk_cell_renderer_text_new (); } else { remove_renderer[i] = gtk_cell_renderer_toggle_new (); gtk_cell_renderer_toggle_set_radio (GTK_CELL_RENDERER_TOGGLE(remove_renderer[i]), TRUE); g_signal_connect (G_OBJECT(remove_renderer[i]), "toggled", G_CALLBACK(select_mol), & remove_model); } remove_col[i] = gtk_tree_view_column_new_with_attributes (mol_title[i], remove_renderer[i], ctype[i], i, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW(remove_tree), remove_col[i]); if (i < 3) { gtk_tree_view_column_set_cell_data_func (remove_col[i], remove_renderer[i], molecule_set_color, NULL, NULL); } else { gtk_tree_view_column_set_cell_data_func (remove_col[i], remove_renderer[i], set_sensitive_mol, NULL, NULL); } } // fill model tmp_fmol = tmp_field -> first_molecule; j = 0; for (i=0; i molecules; i++) { if (tmp_fmol != to_remove && tmp_fmol -> mol -> id == to_remove -> mol -> id) { j ++; gtk_tree_store_append (remove_model, & iter, NULL); gtk_tree_store_set (remove_model, & iter, 0, i+1, 1, tmp_fmol -> name, 2, tmp_fmol -> multi, 3, 0, -1); } if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } num_field_objects = tmp_field -> molecules; g_object_unref (remove_model); gtk_tree_view_expand_all (GTK_TREE_VIEW(remove_tree)); i = ((j+1)*40 < 500) ? (j+1)*40 : 500; GtkWidget * scrollsets = create_scroll (dialog_get_content_area (rmol), 375, i, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, remove_tree); remove_label = gtk_label_new (remove_text(-1, -1, to_remove -> name)); gtk_label_set_use_markup (GTK_LABEL(remove_label), TRUE); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (rmol), remove_label, FALSE, FALSE, 0); run_this_gtk_dialog (rmol, G_CALLBACK(run_remove_molecule_from_field), NULL); } Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_print.c000066400000000000000000002521121457665371200207720ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_print.c * @short Functions to handle the output of the DL-POLY FIELD file \n Functions to handle the output of the DL-POLY CONTROL file \n Functions to handle the output of the DL-POLY CONFIG file \n Functions to fill the structural element(s) tree models in the assistant * @author Sébastien Le Roux */ /* * This file: 'dlp_print.c' * * Contains: * - The functions to handle the output of the DL-POLY FIELD file - The functions to handle the output of the DL-POLY CONTROL file - The functions to handle the output of the DL-POLY CONFIG file - The functions to fill the structural element(s) tree models in the assistant * * List of functions: int get_num_struct_to_print (field_molecule * fmol, int sid); int get_pbc (); gboolean print_this_imp_inv (imp_inv * inv, int di, int a, int b, int c, int d); gboolean member_of_atom (field_atom* fat, int id); gboolean print_ana (); void print_field_prop (field_prop * pro, int st, field_molecule * mol); void print_field_struct (field_struct * stru, field_molecule * mol); void print_all_field_struct (field_molecule * mol, int str); void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_dihedral (int dih, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter); void print_dlp_rigid (GtkTextBuffer * buf, field_rigid * rig); void print_dlp_tet (GtkTextBuffer * buf, field_tethered * tet); void print_dlp_pmf (GtkTextBuffer * buf, field_pmf * pmf); void print_dlp_cons (GtkTextBuffer * buf, field_constraint * cons); void print_dlp_shell (GtkTextBuffer * buf, field_molecule * fmol, field_shell * shell); void print_dlp_atom (GtkTextBuffer * buf, int at, int numat); void print_dlp_molecule (GtkTextBuffer * buf, field_molecule * fmol); void print_dlp_body (GtkTextBuffer * buf, field_nth_body * body); void print_dlp_tersoff_cross (GtkTextBuffer * buf, field_nth_body * body_a, field_nth_body * body_b); void print_dlp_tersoff (GtkTextBuffer * buf, field_nth_body * body); void print_dlp_field (GtkTextBuffer * buf); void print_dlp_config (GtkTextBuffer * buf); void print_int (GtkTextBuffer * buf, int data); void print_control_int (GtkTextBuffer * buf, int data, gchar * info_a, gchar * info_b, gchar * key); void print_float (GtkTextBuffer * buf, double data); void print_control_float (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key); void print_sci (GtkTextBuffer * buf, double data); void print_control_sci (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key); void print_string (GtkTextBuffer * buf, gchar * string); void print_control_string (GtkTextBuffer * buf, gchar * string, gchar * info_a, gchar * info_b, gchar * key); void print_control_key (GtkTextBuffer * buf, gchar * info, gchar * key); void print_dlp_control (GtkTextBuffer * buf); */ #include "dlp_field.h" #include "interface.h" extern gboolean in_bond (int at, int bd[2]); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); /*! \fn void print_field_prop (field_prop * pro, int st, field_molecule * mol) \brief print force field property \param pro the field property to print \param st the type of structural element \param mol the target field molecule */ void print_field_prop (field_prop * pro, int st, field_molecule * mol) { int i, j, k, u, v; field_atom* fat; j = struct_id(st+7); #ifdef DEBUG int w; g_debug ("Prop - natomes= %d", j); #endif for (i=0; i aid[i]); #endif if (mol != NULL) { for (k=0; k< mol -> multi; k++) { u = mol -> atoms_id[pro -> aid[i]][k].a; v = mol -> atoms_id[pro -> aid[i]][k].b; fat = get_active_atom (mol -> id, u); if (v > fat -> num) { #ifdef DEBUG g_debug ("********************** BIG BUG BIG BUG BIG BUG **********************"); g_debug (" TO CHEK:: multi= %d:: at.a= %d, at.b= %d", k, u, v); g_debug ("********************** BIG BUG BIG BUG BIG BUG **********************"); #endif } else { #ifdef DEBUG w = fat -> list[v]; g_debug (" multi= %d:: at.a= %d, at.b= %d, real_id= %d", k, u, v, w); #endif } } } } #ifdef DEBUG g_debug ("Prop - key= %d", pro -> key); j = fvalues[activef][st][pro -> key]; for (i=0; i val[i]); } g_debug ("Prop - show= %d", pro -> show); g_debug ("Prop - use= %d", pro -> use); #endif } /*! \fn void print_field_struct (field_struct * stru, field_molecule * mol) \brief print force field structural element \param stru the target field structural element \param mol the target field molecule */ void print_field_struct (field_struct * stru, field_molecule * mol) { #ifdef DEBUG int i; g_debug (" "); g_debug ("Struct - st= %d", stru -> st); g_debug ("Struct - id= %d", stru -> id); g_debug ("Struct - num= %d", stru -> num); g_debug ("Struct - av= %f", stru -> av); g_debug ("Struct - natomes= %d", struct_id(stru -> st+7)); for (i=0; i st+7); i++) { g_debug (" at[%d]= %d", i, stru -> aid[i]); } g_debug ("Default property:: "); #endif print_field_prop (stru -> def, stru -> st, NULL); if (stru -> other != NULL) { #ifdef DEBUG g_debug ("Other property(ies):: "); #endif field_prop * tmp_pr; tmp_pr = stru -> other; print_field_prop (tmp_pr, stru -> st, mol); while (tmp_pr -> next != NULL) { print_field_prop (tmp_pr -> next, stru -> st, mol); tmp_pr = tmp_pr -> next; } } } /*! \fn void print_all_field_struct (field_molecule * mol, int str) \brief print all field structural element(s) \param mol the target field molecule \param str the type of structural element */ void print_all_field_struct (field_molecule * mol, int str) { int i; field_struct * tmp_s; #ifdef DEBUG g_debug (" "); g_debug ("IN MOL:: %d", mol -> id); g_debug ("PRINTING STRUCT:: %d", str); g_debug ("Total Num of Struct %d:: NUM= %d", str, mol -> nstruct[str]); #endif tmp_s = mol -> first_struct[str]; for (i=0; i nstruct[str]; i++) { print_field_struct (tmp_s, mol); if (tmp_s -> next != NULL) tmp_s = tmp_s -> next; } #ifdef DEBUG g_debug ("END STRUCT :: %d", str); #endif } typedef struct imp_inv imp_inv; struct imp_inv { int a; int b; int c; int d; imp_inv * next; imp_inv * prev; }; /*! \fn gboolean print_this_imp_inv (imp_inv * inv, int di, int a, int b, int c, int d) \brief print this improper / inversion structure or not (already printed) ? \param inv the improper / inversion structure to check \param di 6 = improper, 7 = inversion \param a 1st atom id \param b 2nd atom id \param c 3rd atom id \param d 4th atom id */ gboolean print_this_imp_inv (imp_inv * inv, int di, int a, int b, int c, int d) { if (! inv) return TRUE; while (inv) { if (di == 6) { if (inv -> a == a && inv -> d == d) { if (inv -> b == b && inv -> c == c) return FALSE; if (inv -> b == c && inv -> c == b) return FALSE; } } else { if (inv -> a == a && inv -> b == b) return FALSE; /* { if (inv -> b == b && inv -> c == d && inv -> d == c) return FALSE; if (inv -> b == c && inv -> c == b && inv -> d == d) return FALSE; if (inv -> b == c && inv -> c == d && inv -> d == b) return FALSE; if (inv -> b == d && inv -> c == b && inv -> d == c) return FALSE; if (inv -> b == d && inv -> c == c && inv -> d == b) return FALSE; }*/ } inv = inv -> next; } return TRUE; } /*! \fn gboolean member_of_atom (field_atom* fat, int id) \brief is the id atom from the model in target field atom \param fat the target field atom \param id the atom id in the model */ gboolean member_of_atom (field_atom* fat, int id) { int i; for (i=0; i num; i++) { if (tmp_fat -> list[i] == id) return TRUE; } return FALSE; } /*! \fn void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field improper(s)/inversion(s) information \param di 6 = improper(s), 7 = inversion(s) \param buf the GtkTextBuffer to print into, if input print \param dhii the field improper / inversion structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_improper_inversion (int di, GtkTextBuffer * buf, field_struct * dhii, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int a, b, c, d, e, i, j, k, l, m, n, o, p, q, r, s, t, u, v; gboolean show; gchar * stra, * strb, * strc, * strd, * stre, * strf, * strg; float w; GtkTreeIter di_level; int * ids = allocint(4); imp_inv * first_imp_inv = NULL; imp_inv * this_ii = NULL; for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { if ((tmp_proj -> atoms[0][j].numv > 2 && di == 6) || (tmp_proj -> atoms[0][j].numv == 3 && di == 7)) { a = ids[0] = tmp_fat -> list_id[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { b = ids[1] = tmp_proj -> atoms[0][l].fid; for (m=0; m atoms[0][j].numv; m++) { if (m != k) { n = tmp_proj -> atoms[0][j].vois[m]; if (tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { c = ids[2] = tmp_proj -> atoms[0][n].fid; for (o=0; o atoms[0][j].numv; o++) { if (o != k && o != m) { p = tmp_proj -> atoms[0][j].vois[o]; if (tmp_proj -> atoms[0][p].faid == tmp_fdt -> id) { d = ids[3] = tmp_proj -> atoms[0][p].fid; if (print_this_imp_inv(first_imp_inv, di, a, b, c, d)) { if (! first_imp_inv) { first_imp_inv = g_malloc0 (sizeof*first_imp_inv); this_ii = first_imp_inv; } else { this_ii -> next = g_malloc0 (sizeof*this_ii); this_ii -> next -> prev = this_ii; this_ii = this_ii -> next; } this_ii -> a = a; this_ii -> b = b; this_ii -> c = c; this_ii -> d = d; tmp_fprop = get_active_prop_using_atoms (dhii -> other, 4, ids); if (tmp_fprop == NULL) { tmp_fprop = dhii -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { if (di == 6) { stra = g_strdup_printf ("%4s\t%d\t%d\t%d\t%d",fkeysw[activef][di+2][tmp_fprop -> key], b+1, a+1, c+1, d+1); } else { stra = g_strdup_printf ("%4s\t%d\t%d\t%d\t%d",fkeysw[activef][di+2][tmp_fprop -> key], a+1, b+1, c+1, d+1); } print_info (stra, NULL, buf); g_free (stra); for (e=0; e key]; e++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[e]); print_info (stra, NULL, buf); g_free (stra); if (e == 2) { // Print 1-4 electrostatic interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); // Print 1-4 van der Waals interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); } } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", a+1); strb = g_strdup_printf ("%d", b+1); strc = g_strdup_printf ("%d", c+1); strd = g_strdup_printf ("%d", d+1); w = 0.0; for (e=0; e multi; e++) { q = tmp_fmol -> atoms_id[a][e].a; r = tmp_fmol -> atoms_id[a][e].b; s = get_active_atom (tmp_fmol -> id, q) -> list[r]; q = tmp_fmol -> atoms_id[b][e].a; r = tmp_fmol -> atoms_id[b][e].b; t = get_active_atom (tmp_fmol -> id, q) -> list[r]; q = tmp_fmol -> atoms_id[c][e].a; r = tmp_fmol -> atoms_id[c][e].b; u = get_active_atom (tmp_fmol -> id, q) -> list[r]; q = tmp_fmol -> atoms_id[d][e].a; r = tmp_fmol -> atoms_id[d][e].b; v = get_active_atom (tmp_fmol -> id, q) -> list[r]; if (di == 6) { w += dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][t], & tmp_proj -> atoms[0][u], & tmp_proj -> atoms[0][s], & tmp_proj -> atoms[0][v]).angle; } else { w += inversion_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][s], & tmp_proj -> atoms[0][t], & tmp_proj -> atoms[0][u], & tmp_proj -> atoms[0][v]).angle; } } w /= tmp_fmol -> multi; stre = g_strdup_printf ("%.3f", w); strf = g_strdup_printf ("%s (%s)", fnames[activef][di+2][tmp_fprop -> key], fkeysw[activef][di+2][tmp_fprop -> key]); strg = parameters_info (di+1, tmp_fprop -> key, fvars_dihedral[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & di_level, iter); gtk_tree_store_set (store, & di_level, 0, 0, 1, stra, 2, strb, 3, strc, 4, strd, 5, 0, 6, stre, 7, show, 8, tmp_fprop -> use, 9, strf, 10, strg, 11, dhii -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); g_free (strf); g_free (strg); } } } } } } } } } } } } } if (first_imp_inv) { this_ii = first_imp_inv; while (this_ii -> next) { this_ii = this_ii -> next; g_free (this_ii -> prev); } g_free (this_ii); } g_free (ids); } /*! \fn void print_dlp_dihedral (int dih, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field dihedral(s) information \param dih 4 = dihderale(s), 5 = dihedral restraint(s) \param buf the GtkTextBuffer to print into, if input print \param dh the field dihedral / dihedral restraint structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_dihedral (int dih, GtkTextBuffer * buf, field_struct * dh, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s; gboolean show; gchar * stra, * strb, * strc, * strd, * stre, * strf, * strg; float v; GtkTreeIter di_level; gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fdt -> id && tmp_fbt -> id && tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } int * ids = allocint(4); for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { a = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[a] = TRUE; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { b = ids[1] = tmp_proj -> atoms[0][l].fid; for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { c = ids[2] = tmp_proj -> atoms[0][n].fid; for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; d = ids[3] = tmp_proj -> atoms[0][p].fid; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == tmp_fdt -> id && (! same_atom || (same_atom && ! already_done[d]))) { tmp_fprop = get_active_prop_using_atoms (dh -> other, 4, ids); if (tmp_fprop == NULL) { tmp_fprop = dh -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { stra = g_strdup_printf ("%4s\t%d\t%d\t%d\t%d",fkeysw[activef][dih+2][tmp_fprop -> key], a+1, b+1, c+1, d+1); print_info (stra, NULL, buf); g_free (stra); for (q=0; q key]; q++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[q]); print_info (stra, NULL, buf); g_free (stra); if (q == 2) { // Print 1-4 electrostatic interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); // Print 1-4 van der Waals interaction scale factor stra = g_strdup_printf ("\t%15.10f", 0.0); print_info (stra, NULL, buf); g_free (stra); } } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", a+1); strb = g_strdup_printf ("%d", b+1); strc = g_strdup_printf ("%d", c+1); strd = g_strdup_printf ("%d", d+1); v = 0.0; for (q=0; q multi; q++) { r = tmp_fmol -> atoms_id[a][q].a; s = tmp_fmol -> atoms_id[a][q].b; e = get_active_atom (tmp_fmol -> id, r) -> list[s]; r = tmp_fmol -> atoms_id[b][q].a; s = tmp_fmol -> atoms_id[b][q].b; f = get_active_atom (tmp_fmol -> id, r) -> list[s]; r = tmp_fmol -> atoms_id[c][q].a; s = tmp_fmol -> atoms_id[c][q].b; g = get_active_atom (tmp_fmol -> id, r) -> list[s]; r = tmp_fmol -> atoms_id[d][q].a; s = tmp_fmol -> atoms_id[d][q].b; h = get_active_atom (tmp_fmol -> id, r) -> list[s]; v += dihedral_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][e], & tmp_proj -> atoms[0][f], & tmp_proj -> atoms[0][g], & tmp_proj -> atoms[0][h]).angle; } v /= tmp_fmol -> multi; stre = g_strdup_printf ("%.3f", v); strf = g_strdup_printf ("%s (%s)", fnames[activef][dih+2][tmp_fprop -> key], fkeysw[activef][dih+2][tmp_fprop -> key]); strg = parameters_info (dih+1, tmp_fprop -> key, fvars_dihedral[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & di_level, iter); gtk_tree_store_set (store, & di_level, 0, 0, 1, stra, 2, strb, 3, strc, 4, strd, 5, 0, 6, stre, 7, show, 8, tmp_fprop -> use, 9, strf, 10, strg, 11, dh -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); g_free (strf); g_free (strg); } } } } } } } } } g_free (ids); if (same_atom) g_free (already_done); } /*! \fn void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field angle(s) information \param ai 2 = angle(s), 3 = angular restraint(s) \param buf the GtkTextBuffer to print into, if input print \param an the field angle / angle restraint structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_angle (int ai, GtkTextBuffer * buf, field_struct * an, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, u; gboolean show; gchar * stra, * strb, * strc, * strd, * stre, * strf; float v; GtkTreeIter an_level; int * ids = allocint(3); gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { k = ids[0] = tmp_proj -> atoms[0][j].fid; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id) { n = ids[1] = tmp_proj -> atoms[0][m].fid; for (o=0; o atoms[0][m].numv; o++) { p = tmp_proj -> atoms[0][m].vois[o]; q = ids[2] = tmp_proj -> atoms[0][p].fid; if (p != j && tmp_proj -> atoms[0][p].faid == tmp_fct -> id && (! same_atom || (same_atom && ! already_done[q]))) { tmp_fprop = get_active_prop_using_atoms (an -> other, 3, ids); if (tmp_fprop == NULL) { tmp_fprop = an -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { stra = g_strdup_printf ("%4s\t%d\t%d\t%d",fkeysw[activef][ai+2][tmp_fprop -> key], k+1, n+1, q+1); print_info (stra, NULL, buf); g_free (stra); for (u=0; u key]; u++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[u]); print_info (stra, NULL, buf); g_free (stra); } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", k+1); strb = g_strdup_printf ("%d", n+1); strc = g_strdup_printf ("%d", q+1); v = 0.0; for (u=0; u multi; u++) { a = tmp_fmol -> atoms_id[k][u].a; b = tmp_fmol -> atoms_id[k][u].b; c = get_active_atom (tmp_fmol -> id, a) -> list[b]; d = tmp_fmol -> atoms_id[n][u].a; e = tmp_fmol -> atoms_id[n][u].b; f = get_active_atom (tmp_fmol -> id, d) -> list[e]; e = tmp_fmol -> atoms_id[q][u].a; g = tmp_fmol -> atoms_id[q][u].b; h = get_active_atom (tmp_fmol -> id, e) -> list[g]; v += angle_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][c], & tmp_proj -> atoms[0][f], & tmp_proj -> atoms[0][h]).angle; } v /= tmp_fmol -> multi; strd = g_strdup_printf ("%.3f", v); stre = g_strdup_printf ("%s (%s)", fnames[activef][ai+2][tmp_fprop -> key], fkeysw[activef][ai+2][tmp_fprop -> key]); strf = parameters_info (ai+1, tmp_fprop -> key, fvars_angle[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & an_level, iter); gtk_tree_store_set (store, & an_level, 0, 0, 1, stra, 2, strb, 3, strc, 4, 0, 5, strd, 6, show, 7, tmp_fprop -> use, 8, stre, 9, strf, 10, an -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); g_free (strf); } } } } } } } g_free (ids); if (same_atom) g_free (already_done); } /*! \fn void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter) \brief print / fill tree store with force field bond(s) information \param bi 0 = bond(s), 1 = bond restraint(s) \param buf the GtkTextBuffer to print into, if input print \param bd the field bond / bond restraint structural element(s) to print \param fi the target fragment id \param store the target GtkTreeStore to store, if assistant tab creation / refresh \param iter the target tree iter to store the data, if assistant tab creation / refresh */ void print_dlp_bond (int bi, GtkTextBuffer * buf, field_struct * bd, int fi, GtkTreeStore * store, GtkTreeIter * iter) { int i, j, k, l, m, n, o, p, q, r, s, t, u; gboolean show; gchar * stra, * strb, * strc, * strd, * stre; float v; int * ids = allocint(2); GtkTreeIter bd_level; gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fbt -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; if (tmp_proj -> atoms[0][j].coord[2] == fi) { k = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; n = ids[1] = tmp_proj -> atoms[0][m].fid; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id && (! same_atom || (same_atom && ! already_done[n]))) { tmp_fprop = get_active_prop_using_atoms (bd -> other, 2, ids); if (tmp_fprop == NULL) { tmp_fprop = bd -> def; if (buf == NULL) show = FALSE; } else if (buf == NULL) { show = tmp_fprop -> show; } if (buf != NULL && tmp_fprop -> use) { stra = g_strdup_printf ("%4s\t%d\t%d",fkeysw[activef][bi+2][tmp_fprop -> key], k+1, n+1); print_info (stra, NULL, buf); g_free (stra); for (o=0; o key]; o++) { stra = g_strdup_printf ("\t%15.10f", tmp_fprop -> val[o]); print_info (stra, NULL, buf); g_free (stra); } print_info ("\n", NULL, buf); } else if (buf == NULL) { stra = g_strdup_printf ("%d", k+1); strb = g_strdup_printf ("%d", n+1); v = 0.0; for (o=0; o multi; o++) { p = tmp_fmol -> atoms_id[k][o].a; q = tmp_fmol -> atoms_id[k][o].b; r = get_active_atom (tmp_fmol -> id, p) -> list[q]; s = tmp_fmol -> atoms_id[n][o].a; t = tmp_fmol -> atoms_id[n][o].b; u = get_active_atom (tmp_fmol -> id, s) -> list[t]; v += distance_3d (& tmp_proj -> cell, 0, & tmp_proj -> atoms[0][r], & tmp_proj -> atoms[0][u]).length; } v /= tmp_fmol -> multi; strc = g_strdup_printf ("%.3f", v); strd = g_strdup_printf ("%s (%s)", fnames[activef][bi+2][tmp_fprop -> key], fkeysw[activef][bi+2][tmp_fprop -> key]); stre = parameters_info (bi+1, tmp_fprop -> key, fvars_bond[activef][tmp_fprop -> key], tmp_fprop -> val); gtk_tree_store_append (store, & bd_level, iter); gtk_tree_store_set (store, & bd_level, 0, 0, 1, stra, 2, strb, 3, 0, 4, strc, 5, show, 6, tmp_fprop -> use, 7, strd, 8, stre, 9, bd -> id, -1); g_free (stra); g_free (strb); g_free (strc); g_free (strd); g_free (stre); } } } } } g_free (ids); if (same_atom) g_free (already_done); } /*! \fn void print_dlp_rigid (GtkTextBuffer * buf, field_rigid * rig) \brief print force field rigid \param buf the GtkTextBuffer to print into \param rig the field rigid to print */ void print_dlp_rigid (GtkTextBuffer * buf, field_rigid * rig) { gchar * str; int h, i, j, k, l, m, n; str = g_strdup_printf ("%d\t", rig -> num); j = 1; n = rig -> num; if (rig -> num > 15) { k = rig -> num - 15; l = k / 16; j += l + 1; n = k - l*16; } h = 0; for (i=0; i 1 && i == j-1)) ? n : 15+k; for (m=0; m list[h]+1); h ++; } str = g_strdup_printf ("%s\n", str); } print_info (str, NULL, buf); g_free (str); } /*! \fn void print_dlp_tet (GtkTextBuffer * buf, field_tethered * tet) \brief print force field tethered potential \param buf the GtkTextBuffer to print into \param tet the field tethered potential to print */ void print_dlp_tet (GtkTextBuffer * buf, field_tethered * tet) { gchar * str; str = g_strdup_printf ("%4s\t\%d", fkeysw[activef][1][tet -> key], tet -> num); print_info (str, NULL, buf); g_free (str); int i; for (i=0; i key]; i++) { str = g_strdup_printf ("\t%15.10f", tmp_ftet -> val[i]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); } /*! \fn void print_dlp_pmf (GtkTextBuffer * buf, field_pmf * pmf) \brief print force field mean force potential \param buf the GtkTextBuffer to print into \param pmf the field PMF to print */ void print_dlp_pmf (GtkTextBuffer * buf, field_pmf * pmf) { gchar * str; int i, j; print_info ("PMF", "bold", buf); str = g_strdup_printf ("\t%f\n", pmf -> length); print_info (str, NULL, buf); g_free (str); for (i=0; i<2; i++) { str = g_strdup_printf ("PMF UNIT %d\n", pmf -> num[i]); print_info (str, NULL, buf); g_free (str); for (j=0; j < pmf -> num[i]; j++) { str = g_strdup_printf ("%d\t%f\n", pmf -> list[i][j]+1, pmf -> weight[i][j]); print_info (str, NULL, buf); g_free (str); } } } /*! \fn void print_dlp_cons (GtkTextBuffer * buf, field_constraint * cons) \brief print force field constraint \param buf the GtkTextBuffer to print into \param cons the field constraint to print */ void print_dlp_cons (GtkTextBuffer * buf, field_constraint * cons) { gchar * str; str = g_strdup_printf ("%d\t\%d\t%f\n", cons -> ia[0], cons -> ia[1], cons -> length); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_dlp_shell (GtkTextBuffer * buf, field_molecule * fmol, field_shell * shell) \brief print force field core shell \param buf the GtkTextBuffer to print into \param fmol the target field molecule \param shell the field shell to print */ void print_dlp_shell (GtkTextBuffer * buf, field_molecule * fmol, field_shell * shell) { gchar * str; str = g_strdup_printf ("%d\t\%d\t%f\t%f\n", shell -> ia[0], shell -> ia[1], shell -> k2, shell -> k4); print_info (str, NULL, buf); g_free (str); } /*! \fn void print_dlp_atom (GtkTextBuffer * buf, int at, int numat) \brief print force field atom \param buf the GtkTextBuffer to print into \param at the list id in the target field atom \param numat the atom id in the fragment / molecule */ void print_dlp_atom (GtkTextBuffer * buf, int at, int numat) { gchar * str; if (tmp_fat -> frozen_id[at]) { str = g_strdup_printf ("%8s %15.10f %15.10f %d %d\n", tmp_fat -> name, tmp_fat -> mass, tmp_fat -> charge, numat, 1); } else { str = g_strdup_printf ("%8s %15.10f %15.10f %d\n", tmp_fat -> name, tmp_fat -> mass, tmp_fat -> charge, numat); } print_info (str, NULL, buf); g_free (str); } /*! \fn int get_num_struct_to_print (field_molecule * fmol, int sid) \brief find the number of structural element(s) to print \param fmol the target field molecule \param sid the type of structural element */ int get_num_struct_to_print (field_molecule * fmol, int sid) { int i = 0; tmp_fstr = fmol -> first_struct[sid]; while (tmp_fstr) { if (tmp_fstr -> def -> use) { i += tmp_fstr -> num; } else if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (tmp_fprop -> use) i ++; tmp_fprop = tmp_fprop -> next; } } tmp_fstr = tmp_fstr -> next; } return i; } /*! \fn void print_dlp_molecule (GtkTextBuffer * buf, field_molecule * fmol) \brief print force field molecule \param buf the GtkTextBuffer to print into \param fmol the field molecule to print */ void print_dlp_molecule (GtkTextBuffer * buf, field_molecule * fmol) { gchar * str; str = g_strdup_printf ("%s", fmol -> name); print_info (str, "bold_orange", buf); g_free (str); print_info ("\nNUMMOLS\t", "bold", buf); str = g_strdup_printf ("%d", fmol -> multi); print_info (str, "bold_green", buf); g_free (str); int i, j, k, l, m, n, o, p; j = 0; tmp_fat = fmol -> first_atom; for (i=0; i atoms; i++) { j += tmp_fat -> num; if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } j /= fmol -> multi; if (j != fmol -> mol -> natoms) g_debug ("PRINT:: Error the number of atom(s) is wrong ?!"); print_info ("\nATOMS\t", "bold", buf); str = g_strdup_printf ("%d\n", fmol -> mol -> natoms); print_info (str, "bold_blue", buf); g_free (str); for (i=0; i < fmol -> mol -> natoms ; i+=(m-i)) { j = fmol -> atoms_id[i][0].a; tmp_fat = get_active_atom (fmol -> id, j); k = fmol -> atoms_id[i][0].b; l = tmp_fat -> frozen_id[k]; for (m=i+1; m mol -> natoms; m++) { n = fmol -> atoms_id[m][0].a; o = fmol -> atoms_id[m][0].b; tmp_fbt = get_active_atom (fmol -> id, n); p = tmp_fbt -> frozen_id[o]; if (j != n || l != p) break; } print_dlp_atom (buf, k, m-i); } // Shells int ncs = 0; if (tmp_field -> afp[10]) { tmp_fshell = fmol -> first_shell; while (tmp_fshell) { if (tmp_fshell -> use) { if (tmp_fshell -> ia[0] && tmp_fshell -> ia[1]) ncs ++; } tmp_fshell = tmp_fshell -> next; } } if (ncs) { print_info ("SHELLS\t", "bold", buf); str = g_strdup_printf ("%d\n", ncs); print_info (str, "bold", buf); g_free (str); tmp_fshell = fmol -> first_shell; while (tmp_fshell) { if (tmp_fshell -> use && tmp_fshell -> ia[0] && tmp_fshell -> ia[1]) { print_dlp_shell (buf, fmol, tmp_fshell); } tmp_fshell = tmp_fshell -> next; } } // Constraints if (tmp_field -> afp[11]) { j = 0; tmp_fcons = fmol -> first_constraint; while (tmp_fcons) { if (tmp_fcons -> use) j ++; tmp_fcons = tmp_fcons -> next; } if (j > 0) { print_info ("CONSTRAINTS\t", "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold", buf); g_free (str); tmp_fcons = fmol -> first_constraint; while (tmp_fcons) { if (tmp_fcons -> use) print_dlp_cons (buf, tmp_fcons); tmp_fcons = tmp_fcons -> next; } } } // PMFs if (tmp_field -> afp[12]) { tmp_fpmf = fmol -> first_pmf; while (tmp_fpmf) { if (tmp_fpmf -> use) { print_dlp_pmf (buf, tmp_fpmf); break; } tmp_fpmf = tmp_fpmf -> next; } } // Rigid if (tmp_field -> afp[13]) { j = 0; k = 0; tmp_frig = fmol -> first_rigid; while (tmp_frig) { if (tmp_frig -> use) j ++; tmp_frig = tmp_frig -> next; } if (j > 0) { print_info ("RIGID\t", "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold", buf); g_free (str); tmp_frig = fmol -> first_rigid; while (tmp_frig) { if (tmp_frig -> use) { print_dlp_rigid (buf, tmp_frig); } tmp_frig = tmp_frig -> next; } } } // Tethering if (tmp_field -> afp[14]) { j = 0; tmp_ftet = fmol -> first_tethered; while (tmp_ftet) { if (tmp_ftet -> use && tmp_ftet -> num) j ++; tmp_ftet = tmp_ftet -> next; } if (j > 0) { print_info ("TETH\t", "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold", buf); g_free (str); tmp_ftet = fmol -> first_tethered; while (tmp_ftet) { if (tmp_ftet -> use) print_dlp_tet (buf, tmp_ftet); tmp_ftet = tmp_ftet -> next; } } } gchar * str_title[8] = {"BONDS ", "BONDS ", "ANGLES ", "ANGLES ", "DIHEDRALS ", "DIHEDRALS ", "DIHEDRALS ", "INVERSIONS "}; gboolean doprint; for (i=0; i<8; i++) { if (tmp_field -> afp[i+15]) { j = get_num_struct_to_print (fmol, i); if ((i == 0 || i == 2 || i == 4) && tmp_field -> afp[i+16]) { // To add the number of constraints j += get_num_struct_to_print (fmol, i+1); } if ((i == 4 && tmp_field -> afp[i+17]) || (i == 5 && ! tmp_field -> afp[i+14] && tmp_field -> afp[i+16])) { // To add the number of impropers k = (i == 4) ? 2 : 1; j += get_num_struct_to_print (fmol, i+k); } doprint = (i == 0 || i == 2 || i == 4 || i == 7) ? TRUE : FALSE; if ((i == 1 || i == 3 || i == 5) && ! tmp_field -> afp[i+14]) { doprint = TRUE; } else if (i == 5 && ! tmp_field -> afp[i+14]) { doprint = TRUE; } else if (i == 6 && ! tmp_field -> afp[i+13] && ! tmp_field -> afp[i+14]) { doprint = TRUE; } if (j > 0) { if (doprint) { print_info (str_title[i], "bold", buf); str = g_strdup_printf ("%d\n", j); print_info (str, "bold_blue", buf); g_free (str); } tmp_fstr = fmol -> first_struct[i]; while (tmp_fstr) { tmp_fat = get_active_atom (fmol -> id, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (fmol -> id, tmp_fstr -> aid[1]); if (i > 1) tmp_fct = get_active_atom (fmol -> id, tmp_fstr -> aid[2]); if (i > 3) tmp_fdt = get_active_atom (fmol -> id, tmp_fstr -> aid[3]); if (i == 0 || i == 1) print_dlp_bond (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); if (i == 2 || i == 3) print_dlp_angle (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); if (i == 4 || i == 5) print_dlp_dihedral (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); if (i == 6 || i == 7) print_dlp_improper_inversion (i, buf, tmp_fstr, fmol -> fragments[0], NULL, NULL); tmp_fstr = tmp_fstr -> next; } } } } print_info ("FINISH\n", "bold_orange", buf); } /*! \fn void print_dlp_body (GtkTextBuffer * buf, field_nth_body * body) \brief print force field non bonded potential \param buf the GtkTextBuffer to print into \param body the non bonded potential to print */ void print_dlp_body (GtkTextBuffer * buf, field_nth_body * body) { gchar * str; int i, j; j = body_at (body -> bd); if (! body -> bd) { for (i=0; i ma[i][0], body -> a[i][0]) -> name), NULL, buf); } str = g_strdup_printf ("%4s",fkeysw[activef][10+ body -> bd][body -> key]); print_info (str, NULL, buf); g_free (str); for (i=0; i bd][body -> key]; i++) { str = g_strdup_printf ("\t%15.10f", body -> val[i]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); } /*! \fn void print_dlp_tersoff_cross (GtkTextBuffer * buf, field_nth_body * body_a, field_nth_body * body_b) \brief print Tersoff potential cross term \param buf the GtkTextBuffer to print into \param body_a 1st non bonded potential \param body_b 2nd non bonded potential */ void print_dlp_tersoff_cross (GtkTextBuffer * buf, field_nth_body * body_a, field_nth_body * body_b) { gchar * str; int j; print_info (g_strdup_printf ("%8s\t", get_active_atom(body_a -> ma[0][0], body_a -> a[0][0]) -> name), NULL, buf); print_info (g_strdup_printf ("%8s\t", get_active_atom(body_b -> ma[0][0], body_b -> a[0][0]) -> name), NULL, buf); for (j=0; j<3; j++) { str = g_strdup_printf ("%15.10f", tmp_field -> cross[body_a -> id][body_b -> id][j]); print_info (str, NULL, buf); g_free (str); if (j<2) print_info ("\t", NULL, buf); } print_info ("\n", NULL, buf); } /*! \fn void print_dlp_tersoff (GtkTextBuffer * buf, field_nth_body * body) \brief print force field Tersoff potential \param buf the GtkTextBuffer to print into \param body the non bonded (Tersoff potential) to print */ void print_dlp_tersoff (GtkTextBuffer * buf, field_nth_body * body) { gchar * str; int i, j, k; int num[2]={2, 3}; int nc[2][3]={{5, 6, 3}, {5, 6, 5}}; j = body_at (body -> bd); k = 0; for (i=0; i key]; i++) { if (i==0) { print_info (g_strdup_printf ("%8s\t", get_active_atom(body -> ma[0][0], body -> a[0][0]) -> name), NULL, buf); str = g_strdup_printf ("%4s\t",fkeysw[activef][10+body -> bd][body -> key]); print_info (str, NULL, buf); g_free (str); } else { print_info (" \t \t", NULL, buf); } for (j=0; j key][i]; j++) { if (j > 0) print_info ("\t", NULL, buf); str = g_strdup_printf ("%15.10f", body -> val[j+k]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); k += nc[body -> key][i]; } if (! body -> key) { field_nth_body * tmp_fbo; tmp_fbo = tmp_field -> first_body[2]; while (tmp_fbo) { print_dlp_tersoff_cross (buf, body, tmp_fbo); tmp_fbo = tmp_fbo -> next; } } } /*! \fn void print_dlp_field (GtkTextBuffer * buf) \brief print DL-POLY classical force field \param buf the GtkTextBuffer to print into */ void print_dlp_field (GtkTextBuffer * buf) { int i, j; gchar * str; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); str = g_strdup_printf ("# This file was created using %s\n", PACKAGE); print_info (str, NULL, buf); g_free (str); str = g_strdup_printf ("# %s contains:\n", prepare_for_title(tmp_proj -> name)); print_info (str, NULL, buf); g_free (str); i = 0; for (j=0; j modelfc -> mol_by_step[0]; j++) { i += tmp_proj -> modelfc -> mols[0][j].multiplicity; } str = g_strdup_printf ("# - %d atoms\n" "# - %d isolated molecular fragments\n" "# - %d distinct molecules\n", tmp_proj -> natomes, i, tmp_proj -> modelfc -> mol_by_step[0]); print_info (str, NULL, buf); g_free (str); print_info ("# Energy unit:\n", NULL, buf); print_info ("UNITS ", "bold", buf); str = g_strdup_printf ("%s\n", fkeysw[activef][0][tmp_field -> energy_unit]); print_info (str, "bold_green", buf); g_free (str); print_info ("# Number of field molecules:\n", NULL, buf); print_info ("MOLECULES ", "bold", buf); str = g_strdup_printf ("%d\n", tmp_field -> molecules); print_info (str, "bold_red", buf); g_free (str); tmp_fmol = tmp_field -> first_molecule; for (i=0; i molecules; i++) { str = g_strdup_printf ("# Begin molecule %d\n", i+1); print_info (str, NULL, buf); g_free (str); print_dlp_molecule (buf, tmp_fmol); str = g_strdup_printf ("# End molecule %d\n", i+1); print_info (str, NULL, buf); g_free (str); if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } // Non bonded gchar * nd_title[5] = {"VDW", "METAL", "TERSOFF", "TBP", "FBP"}; gchar * com_ndb[5] = {"Van der Walls pair", "metal", "Tersoff", "three-body", "four-body"}; for (i=0; i<5; i++) { if (tmp_field -> afp[i+23]) { j=0; tmp_fbody = tmp_field -> first_body[i]; while (tmp_fbody) { if (tmp_fbody -> use) j++; tmp_fbody = tmp_fbody -> next; } if (j > 0) { str = g_strdup_printf ("# Non-bonded: %s potential(s)\n", com_ndb[i]); print_info (str, NULL, buf); g_free (str); print_info (nd_title[i], "bold", buf); str = g_strdup_printf (" %d\n", j); print_info (str, "bold_red", buf); tmp_fbody = tmp_field -> first_body[i]; while (tmp_fbody) { if (tmp_fbody -> use) { if (i == 2) { print_dlp_tersoff (buf, tmp_fbody); } else { print_dlp_body (buf, tmp_fbody); } } tmp_fbody = tmp_fbody -> next; } } } } // External fields if (tmp_field -> afp[28]) { i = 0; tmp_fext = tmp_field -> first_external; while (tmp_fext) { if (tmp_fext -> use) i ++; tmp_fext = tmp_fext -> next; } if (i == 1) { print_info ("EXTERN", "bold", buf); tmp_fext = tmp_field -> first_external; while (tmp_fext) { if (tmp_fext -> use) { str = g_strdup_printf ("\n%4s",fkeysw[activef][15][tmp_fext -> key]); print_info (str, NULL, buf); g_free (str); for (j=0; j key]; j++) { print_info (g_strdup_printf ("\t%15.10f", tmp_fext -> val[j]), NULL, buf); } print_info ("\n", NULL, buf); break; } tmp_fext = tmp_fext -> next; } } } print_info ("CLOSE", "bold", buf); } /*! \fn int get_pbc () \brief get the PBC DL-POLY lattice type */ int get_pbc () { box_info * box = & tmp_proj -> cell.box[0]; if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2] && box -> param[1][0] == 90.0) { if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] == box -> param[0][2]) { return 1; } else { return 2; } } else if (box -> vect[0][1] == 0.0 && box -> vect[0][2] == 0.0 && box -> vect[1][0] == 0.0 && box -> vect[1][2] == 0.0 && box -> vect[2][0] == 0.0 && box -> vect[2][1] == 0.0) { if (box -> vect[0][0] == box -> vect[1][1] && box -> vect[0][0] == box -> vect[2][2]) { return 1; } else { return 2; } } else { return 3; } } /*! \fn void print_dlp_config (GtkTextBuffer * buf) \brief print DL-POLY CONFIG file \param buf the GtkTextBuffer to print into */ void print_dlp_config (GtkTextBuffer * buf) { int h, i, j, k, l, m, n; int pbc; gchar * str; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); str = g_strdup_printf ("# DL-POLY CONFIG file created by %s, %s - %d atoms\n", PACKAGE, prepare_for_title(tmp_proj -> name), tmp_proj -> natomes); print_info (str, "bold", buf); g_free (str); if (tmp_proj -> cell.pbc) { pbc = get_pbc (); } else { pbc = 0; } str = g_strdup_printf ("%d", 0); print_info (str, "bold_red", buf); g_free (str); str = g_strdup_printf ("\t%d", pbc); print_info (str, "bold_green", buf); g_free (str); str = g_strdup_printf ("\t%d\n", tmp_proj -> natomes); print_info (str, "bold_blue", buf); g_free (str); if (pbc > 0) { for (i=0; i<3; i++) { str = g_strdup_printf ("%f\t%f\t%f\n", tmp_proj -> cell.box[0].vect[i][0], tmp_proj -> cell.box[0].vect[i][1], tmp_proj -> cell.box[0].vect[i][2]); print_info (str, NULL, buf); g_free (str); } } tmp_fmol = tmp_field -> first_molecule; h = 0; for (i=0; i molecules; i++) { for (j=0; j multi; j++) { for (k=0; k mol -> natoms; k++) { l = tmp_fmol -> atoms_id[k][j].a; m = tmp_fmol -> atoms_id[k][j].b; tmp_fat = get_active_atom (tmp_fmol -> id, l); str = g_strdup_printf ("%8s", tmp_fat -> name); print_info (str, "bold", buf); g_free (str); if (tmp_field -> sys_opts[2]) { print_info ("\n", NULL, buf); } else { str = g_strdup_printf (" %d\n", h+1); print_info (str, "bold_red", buf); g_free (str); h ++; } n = tmp_fat -> list[m]; str = g_strdup_printf ("%f\t%f\t%f\n", tmp_proj -> atoms[0][n].x, tmp_proj -> atoms[0][n].y, tmp_proj -> atoms[0][n].z); print_info (str, NULL, buf); g_free (str); } } if (tmp_fmol -> next != NULL) tmp_fmol = tmp_fmol -> next; } } gchar * ens_keyw[4] = {"nve", "nvt", "npt", "nst"}; gchar * thermo_keyw[10] = {"evans", "lang", "ander", "ber", "hoover", "gst", "dpd", "mtk", "ttm", "inhomo"}; gchar * pseudo_thermo[3] = {"langevin", "gauss", "direct"}; gchar * area_keyw[5]={"area", "tens", "tens", "orth", "orth"}; gchar * md_keyw[4]={"temp ", "steps ", "integrat ", "pres "}; gchar * md_text[4]={"# Target temperature in K\n", "# Number of MD steps\n", "# Integration time step in ps\n", "# Target presssure in k atms\n"}; gchar * min_key[3]={"force", "energy", "distance"}; //gchar * md_legend[3]={"# Target temperature", "# Number of MD steps", "# MD time step d(t)"}; /*! \fn gboolean print_ana () \brief determine if the analysis information section is required */ gboolean print_ana () { if ((int)tmp_field -> ana_opts[0] || (int)tmp_field -> ana_opts[4] || (int)tmp_field -> ana_opts[8] || (int)tmp_field -> ana_opts[11] || (int)tmp_field -> ana_opts[14]) { return TRUE; } else { return FALSE; } } extern gchar * eval_m[10]; extern gchar * eval_vdw[6]; extern gchar * io_rw_m[4]; extern gchar * io_pres[2]; gchar * elec_key[10]={"coul ", "distan ", "ewald precision ", "ewald ", "reaction ", "reaction damp ", "reaction precision ", "shift ", "shift damp ", "shift precision "}; gchar * vdw_key[6]={"lor ", "fend", "hoge", "halg", "tang", "func"}; gchar * sys_info[8]={"\n# Ignore particle indices from CONFIG file and set indices by order of reading", "\n# Ignore strict checks when reading CONFIG file, warning messages and assume safe simulation parameters", "\n# Skip detailed topology reporting when reading FIELD file", "\n# Ignore center of mass momentum removal during the simulation", "\n# Tolerance for the relaxed shell model\n", "\n# Subcelling threshold density of particle per link cell\n", "\n# Create an expanded version of the current model\n", "\n# Restart job from previous run: "}; gchar * sys_key[8]={NULL, NULL, NULL, NULL, "rlxtol ", "subcell ", "nfold ", "restart "}; gchar * sys_string[8]={"ind", "str", "top", "vom", NULL, NULL, NULL, NULL}; gchar * rest_inf[3]={"\n# Continue current simulation - require REVOLD file", "\n# Start new simulation from older run without temperature reset", "\n# Start new simulation from older run with temperature reset"}; gchar * rest_key[3]={NULL, "noscale", "scale"}; gchar * time_inf[2]={"\n\n# Set job time to ", "\n\n# Set job closure time to "}; gchar * time_key[2]={"job time ", "close time "}; gchar * io_inf[2]={"\n# I/O read interface, with:\n", "\n# I/O write interface, with:\n"}; gchar * io_key[2]={"\nio read ", "\nio writ "}; gchar * io_meth[4]={"mpiio", "direct", "master", "netcdf"}; gchar * io_pec[2]={"off", "on"}; gchar * io_typ[2]={"sorted", "unsorted"}; /*! \fn void print_int (GtkTextBuffer * buf, int data) \brief print integer value \param buf the GtkTextBuffer to print into \param data the integer value to print */ void print_int (GtkTextBuffer * buf, int data) { gchar * str = g_strdup_printf (" %d", data); print_info (str, "bold_blue", buf); g_free (str); } /*! \fn void print_control_int (GtkTextBuffer * buf, int data, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print integer value \param buf the GtkTextBuffer to print into \param data the integer value to print \param info_a 1st string to print \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_int (GtkTextBuffer * buf, int data, gchar * info_a, gchar * info_b, gchar * key) { gchar * str = g_strdup_printf ("%d", data); print_info (info_a, NULL, buf); print_info (str, NULL, buf); g_free (str); if (info_b != NULL) print_info (info_b, NULL, buf); print_info ("\n", NULL, buf); print_info (key, "bold", buf); print_int (buf, data); } /*! \fn void print_float (GtkTextBuffer * buf, double data) \brief print float value \param buf the GtkTextBuffer to print into \param data the float value to print */ void print_float (GtkTextBuffer * buf, double data) { gchar * str = g_strdup_printf (" %f", data); print_info (str, "bold_red", buf); g_free (str); } /*! \fn void print_control_float (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print float value \param buf the GtkTextBuffer to print into \param data the float value to print \param info_a 1st string to print \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_float (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) { gchar * str = g_strdup_printf ("%f", data); print_info (info_a, NULL, buf); print_info (str, NULL, buf); g_free (str); if (info_b != NULL) print_info (info_b, NULL, buf); print_info ("\n", NULL, buf); print_info (key, "bold", buf); print_float (buf, data); } /*! \fn void print_sci (GtkTextBuffer * buf, double data) \brief print float in scientific format \param buf the GtkTextBuffer to print into \param data the float value to print */ void print_sci (GtkTextBuffer * buf, double data) { gchar * str = g_strdup_printf (" %e", data); print_info (str, "bold_orange", buf); g_free (str); } /*! \fn void print_control_sci (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print float value in scientific format \param buf the GtkTextBuffer to print into \param data the float value to print \param info_a 1st string to print \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_sci (GtkTextBuffer * buf, double data, gchar * info_a, gchar * info_b, gchar * key) { gchar * str = g_strdup_printf ("%e", data); print_info (info_a, NULL, buf); print_info (str, NULL, buf); if (info_b != NULL) print_info (info_b, NULL, buf); print_info ("\n", NULL, buf); print_info (key, "bold", buf); print_info (str, "bold_orange", buf); g_free (str); } /*! \fn void print_string (GtkTextBuffer * buf, gchar * string) \brief print string \param buf the GtkTextBuffer to print into \param string the string to print */ void print_string (GtkTextBuffer * buf, gchar * string) { print_info (" ", NULL, buf); print_info (string, "bold_green", buf); } /*! \fn void print_control_string (GtkTextBuffer * buf, gchar * string, gchar * info_a, gchar * info_b, gchar * key) \brief print CONTROL file print string \param buf the GtkTextBuffer to print into \param string the string to print \param info_a 1st string to print, if any \param info_b 2nd string to print, if any \param key DL-POLY key */ void print_control_string (GtkTextBuffer * buf, gchar * string, gchar * info_a, gchar * info_b, gchar * key) { if (info_a != NULL) print_info (info_a, NULL, buf); if (info_b != NULL) print_info (info_b, NULL, buf); if (info_a != NULL) print_info ("\n", NULL, buf); print_info (key, "bold", buf); if (string) print_string (buf, string); } /*! \fn void print_control_key (GtkTextBuffer * buf, gchar * info, gchar * key) \brief print CONTROL file print key \param buf the GtkTextBuffer to print into \param info the information string, if any \param key DL-POLY key to print */ void print_control_key (GtkTextBuffer * buf, gchar * info, gchar * key) { if (info != NULL) print_info (info, NULL, buf); print_info (key, "bold", buf); } /*! \fn void print_dlp_control (GtkTextBuffer * buf) \brief print DL-POLY CONTROL file \param buf the GtkTextBuffer to print into */ void print_dlp_control (GtkTextBuffer * buf) { int i, j, k; gchar * str; gchar * str_a, * str_b, * str_c; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); str = g_strdup_printf ("# DL-POLY CONTROL file created by %s, %s - %d atoms\n\n", PACKAGE, prepare_for_title(tmp_proj -> name), tmp_proj -> natomes); print_info (str, "bold", buf); g_free (str); if (tmp_field -> sys_opts[0] != 1.0) { print_control_float (buf, tmp_field -> sys_opts[0], "# Relative dielectric constant = ", NULL, "eps "); } if (tmp_field -> sys_opts[1] != 0.0) { print_control_float (buf, tmp_field -> sys_opts[1], "\n# Allowing local variation of system density of : ", " \%", "densvar "); } for (i=2; i<10; i++) { j = (i < 7) ? i : (i == 7) ? 8 : (i == 8) ? 10 : 14; if (tmp_field -> sys_opts[j] == 1.0) { if (i == 9) { k = (int)tmp_field -> sys_opts[15]; print_control_string (buf, rest_key[k], sys_info[i-2], rest_inf[k], sys_key[i-2]); } else if (i < 6) { print_control_string (buf, sys_string[i-2], sys_info[i-2], NULL, "no "); } else { print_control_key (buf, sys_info[i-2], sys_key[i-2]); } if (i == 6 || i == 7) { print_float (buf, tmp_field -> sys_opts[j+1]); } else if (i == 8) { for (k=1; k<4; k++) print_int (buf, (int)tmp_field -> sys_opts[j+k]); } print_info ("\n", NULL, buf); } } if (tmp_field -> vdw_opts[0] == 1.0) { print_info ("\n# Non bonded short range interactions - type vdW", NULL, buf); print_control_float (buf, tmp_field -> vdw_opts[1], "\n# van Der Waals short range cutoff = ", " Ang.", "rvdw "); if (tmp_field -> vdw_opts[2] == 1.0) { print_control_string (buf, "direct", "\n# Enforce direct calculation of vdW interactions", "\n# Do not work with system using tabulated potentials", "vdw "); } if (tmp_field -> vdw_opts[3] == 1.0) { print_control_string (buf, "shift", "\n# Apply force-shifting for vdW interactions", NULL, "vdw "); } if (tmp_field -> vdw_opts[4] == 1.0) { print_control_string (buf, vdw_key[(int)tmp_field -> vdw_opts[5]], "\n# Apply mixing rule of type: ", eval_vdw[(int)tmp_field -> vdw_opts[5]], "vdw mix "); } } else { print_control_string (buf, "vdw", "\n# No van der Waals interactions (short range)", NULL, "no "); } print_info ("\n\n", NULL, buf); if (tmp_field -> elec_opts[0] == 1.0) { print_info ("\n# Non bonded long range interactions", NULL, buf); print_control_float (buf, tmp_field -> elec_opts[1], "\n# Electrostatics long range cutoff = ", " Ang.", "cut "); if (tmp_field -> elec_opts[2] == 1.0) { print_control_float (buf, tmp_field -> elec_opts[3], "\n# Use optional padding to the cutoff = ", " Ang.", "pad "); } if (tmp_field -> elec_opts[4] == 1.0) { print_control_key (buf, "\n# Use extended coulombic exclusion\n", "exclu"); } print_info ("\n# Electrostatics calculated using ", NULL, buf); print_info (eval_m[(int)tmp_field -> elec_opts[5]], NULL, buf); print_info ("\n", NULL, buf); print_info (elec_key[(int)tmp_field -> elec_opts[5]], "bold", buf); if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 6.0 || tmp_field -> elec_opts[5] == 9.0) { print_sci (buf, tmp_field -> elec_opts[6]); } else if (tmp_field -> elec_opts[5] == 3.0) { print_float (buf, tmp_field -> elec_opts[6]); for (k=7; k<10; k++) print_int (buf, (int)tmp_field -> elec_opts[k]); } else if (tmp_field -> elec_opts[5] == 5.0 || tmp_field -> elec_opts[5] == 8.0) { print_float (buf, tmp_field -> elec_opts[6]); } if (tmp_field -> elec_opts[5] == 2.0 || tmp_field -> elec_opts[5] == 3.0) { print_control_int (buf, (int)tmp_field -> elec_opts[10], "\n# Evaluate k space contribution to the Ewald sum every: ", " MD step(s)", "ewald evalu "); } } else { print_control_string (buf, "elec", "# No electrostatics interactions (long range)", NULL, "no "); } print_info ("\n", NULL, buf); if (tmp_field -> met_opts[0] == 1.0 || tmp_field -> met_opts[1] == 1.0) { print_info ("\n# Metallic interactions", NULL, buf); } if (tmp_field -> met_opts[0] == 1.0) { print_control_string (buf, "direct", "\n# Enforce direct calculation of metal interactions", "\n# This does not work with metal alloy systems using the *EAM* potentials", "metal "); } if (tmp_field -> met_opts[1] == 1.0) { print_control_string (buf, "sqrtrho", "\n# Switch the TABEAM default embedding functions, F, from F(ρ) to F(√ρ)", NULL, "metal "); } if (tmp_field -> met_opts[0] == 1.0 || tmp_field -> met_opts[1] == 1.0) print_info ("\n", NULL, buf); print_control_string (buf, ens_keyw[tmp_field -> ensemble], "\n# Thermostat information", NULL, "ensemble "); if (tmp_field -> ensemble) { switch (tmp_field -> ensemble) { case 1: i = (tmp_field -> thermostat > 6) ? tmp_field -> thermostat + 1 : tmp_field -> thermostat; break; default: i = (! tmp_field -> thermostat) ? 1 : (tmp_field -> thermostat == 3) ? 7 : tmp_field -> thermostat + 2; break; } print_string (buf, thermo_keyw[i]); if (tmp_field -> ensemble > 1 || tmp_field -> thermostat) { if (tmp_field -> ensemble == 1 && tmp_field -> thermostat == 6) { str = g_strdup_printf ("s%1d", (int)tmp_field -> thermo_opts[0]+1); print_string (buf, str); g_free (str); print_float (buf, tmp_field -> thermo_opts[1]); } else { if (tmp_field -> ensemble == 3 && tmp_field -> thermo_opts[3] > 0.0) print_string (buf, "Q"); print_float (buf, tmp_field -> thermo_opts[0]); if (tmp_field -> ensemble != 1 || (tmp_field -> thermostat == 2 || tmp_field -> thermostat == 5 || tmp_field -> thermostat > 6)) { print_float (buf, tmp_field -> thermo_opts[1]); if (tmp_field -> ensemble == 1 && tmp_field -> thermostat > 6) print_float (buf, tmp_field -> thermo_opts[2]); } } if (tmp_field -> ensemble == 3 && tmp_field -> thermo_opts[3] > 0.0) { i = (int)tmp_field -> thermo_opts[3] - 1; print_string (buf, area_keyw[i]); if (tmp_field -> thermo_opts[3] == 2.0) print_float (buf, tmp_field -> thermo_opts[4]); } if (tmp_field -> thermo_opts[5] == 1.0) print_string (buf, "semi"); } } print_info ("\n\n", NULL, buf); if (tmp_field -> thermo_opts[6] == 1.0) { print_info ("# Attach a pseudo thermal bath with:\n", NULL, buf); if (tmp_field -> thermo_opts[7] > 0.0) { str = g_strdup_printf ("# - thermostat of type: %s\n", pseudo_thermo[(int)tmp_field -> thermo_opts[7] - 1]); } else { str = g_strdup_printf ("# - thermostats of type Langevin and Direct applied successively\n"); } print_info (str, NULL, buf); g_free (str); str = g_strdup_printf ("# - thickness of thermostat layer to MD cell boundaries: %f Ang.\n", tmp_field -> thermo_opts[8]); print_info (str, NULL, buf); g_free (str); if (tmp_field -> thermo_opts[9] > 0.0) { str = g_strdup_printf ("# - Target temperature: %f K\n", tmp_field -> thermo_opts[9]); print_info (str, NULL, buf); g_free (str); } else { print_info ("# - Target temperature: system target temperature\n", NULL, buf); } print_info ("pseudo ", "bold", buf); if (tmp_field -> thermo_opts[7] > 0.0) { print_info (pseudo_thermo[(int)tmp_field -> thermo_opts[7] - 1], "bold_green", buf); } print_float (buf, tmp_field -> thermo_opts[8]); if (tmp_field -> thermo_opts[9] > 0.0) print_float (buf, tmp_field -> thermo_opts[9]); print_info ("\n\n", NULL, buf); } // MD information print_info ("# Molecular dynamics information\n", NULL, buf); for (i=0; i<2+(int)tmp_field -> md_opts[1]; i++) { print_control_key (buf, md_text[i], md_keyw[i]); switch (i) { case 0: print_float (buf, tmp_field -> md_opts[0]); if (tmp_field -> ensemble > 1) { print_info ("\n", NULL, buf); print_info (md_keyw[3], "bold", buf); print_float (buf, tmp_field -> md_opts[5]); } break; case 1: print_int (buf, (int)tmp_field -> md_opts[2]); break; case 2: print_info ("leapfrog", "bold_green", buf); break; } print_info ("\n", NULL, buf); } if (tmp_field -> md_opts[3] == 1.0) { print_control_float (buf, tmp_field -> md_opts[4], "# Variable time step, initial time step = ", " ps", "variable timestep "); print_control_float (buf, tmp_field -> md_opts[6], "\n# Maximum time step allowed = ", " ps", "mxstep "); print_control_float (buf, tmp_field -> md_opts[7], "\n# Maximum move allowed = ", " Ang.", "maxdis "); print_control_float (buf, tmp_field -> md_opts[8], "\n# Minimum move allowed = ", " Ang.", "mindis "); } else { print_control_float (buf, tmp_field -> md_opts[4], "# MD time step = ", " fs", "timestep "); } print_control_int (buf, (int)tmp_field -> md_opts[9], "\n# Shake / Rattle iterations limit: ", " cycle(s)", "mxshak "); print_control_sci (buf, tmp_field -> md_opts[10], "\n# Shake / Rattle tolerance: ", NULL, "shake "); if (tmp_field -> md_opts[1] == 1.0) { print_control_int (buf, (int)tmp_field -> md_opts[11], "\n# FIQA iterations limit: ", " cycle(s)", "mxquat "); print_control_sci (buf, tmp_field -> md_opts[12], "\n# Quaternion tolerance: ", NULL, "quater "); } if (tmp_field -> md_opts[13] == 1.0) { print_info ("\n\n# Initiate impact on particle\n# - with particle index: ", NULL, buf); str = g_strdup_printf ("%d", (int)tmp_field -> md_opts[14]); print_info (str, NULL, buf); print_info ("\n# - at MD step: ", NULL, buf); str = g_strdup_printf ("%d", (int)tmp_field -> md_opts[15]); print_info (str, NULL, buf); g_free (str); print_info ("\n# - with energy (k eV): ", NULL, buf); str = g_strdup_printf ("%f", tmp_field -> md_opts[16]); print_info (str, NULL, buf); g_free (str); print_info ("\n# - direction (x, y, z): ", NULL, buf); str = g_strdup_printf ("%f %f %f", tmp_field -> md_opts[17], tmp_field -> md_opts[18], tmp_field -> md_opts[19]); print_info (str, NULL, buf); g_free (str); print_info ("\n", NULL, buf); print_info ("impact ", "bold", buf); for (k=14; k<16; k++) print_int (buf, (int)tmp_field -> md_opts[k]); for (k=16; k<20; k++) print_float (buf, tmp_field -> md_opts[k]); } if (tmp_field -> equi_opts[0] == 1.0) { // Equilibration information print_info ("\n\n# Equilibration information", NULL, buf); print_control_int (buf, (int)tmp_field -> equi_opts[1], "\n# Equilibrate during: ", " MD step(s)", "equil "); if (tmp_field -> equi_opts[2] == 1.0) { print_control_int (buf, (int)tmp_field -> equi_opts[3], "\n# During equilibration: rescale system temperature every: ", " MD step(s)", "scale "); } if (tmp_field -> equi_opts[4] == 1.0) { print_control_float (buf, tmp_field -> equi_opts[5], "\n# During equilibration: cap forces, with fmax= ", " Kb T Ang-1", "cap "); } if (tmp_field -> equi_opts[6] == 1.0) { print_control_int (buf, (int)tmp_field -> equi_opts[7], "\n# During equilibration: resample the instantaneous momenta distribution every: ", " MD step(s)", "regaus "); } if (tmp_field -> equi_opts[8] == 1.0) { str = g_strdup_printf ("\n# Every %d step(s) during equilibration: minimize %s with target %s= %f\n", (int)tmp_field -> equi_opts[11], min_key[(int)tmp_field -> equi_opts[9]], min_key[(int)tmp_field -> equi_opts[9]], tmp_field -> equi_opts[10]); print_control_key (buf, str, "minim "); g_free (str); print_string (buf, min_key[(int)tmp_field -> equi_opts[9]]); print_int (buf, (int)tmp_field -> equi_opts[11]); print_float (buf, tmp_field -> equi_opts[10]); print_info ("\n", NULL, buf); } if (tmp_field -> equi_opts[12] == 1.0) { str = g_strdup_printf ("# At the start of the equilibration: minimize %s with target %s= %f\n", min_key[(int)tmp_field -> equi_opts[13]], min_key[(int)tmp_field -> equi_opts[13]], tmp_field -> equi_opts[14]); print_control_key (buf, str, "optim "); g_free (str); print_string (buf, min_key[(int)tmp_field -> equi_opts[13]]); print_float (buf, tmp_field -> equi_opts[14]); print_info ("\n", NULL, buf); } if (tmp_field -> equi_opts[15] == 1.0) { print_control_key (buf, "# During equilibration: perform a zero temperature MD minimization\n", "zero"); print_info ("\n", NULL, buf); } if (tmp_field -> equi_opts[16] == 1.0) { print_control_key (buf, "# Include equilibration data in overall statistics\n", "collect"); print_info ("\n", NULL, buf); } } if (print_ana()) { print_info ("\n# Analysis information", NULL, buf); if (tmp_field -> ana_opts[0] == 1.0) { print_control_string (buf, "all", "\n# Calculate and collect all intra-molecular PDFs", NULL, "ana "); for (k=1; k<3; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); print_float (buf, tmp_field -> ana_opts[3]); } if (tmp_field -> ana_opts[4] == 1.0) { print_control_string (buf, "bon", "\n# Calculate and collect bonds PDFs", NULL, "ana "); for (k=5; k<6; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); print_float (buf, tmp_field -> ana_opts[7]); } if (tmp_field -> ana_opts[8] == 1.0) { print_control_string (buf, "ang", "\n# Calculate and collect angles PDFs", NULL, "ana "); for (k=9; k<11; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); } if (tmp_field -> ana_opts[11] == 1.0) { print_control_string (buf, "dih", "\n# Calculate and collect dihedrals PDFs", NULL, "ana "); for (k=12; k<14; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); } if (tmp_field -> ana_opts[14] == 1.0) { print_control_string (buf, "inv", "\n# Calculate and collect inversions PDFs", NULL, "ana "); for (k=15; k<17; k++) print_int (buf, (int)tmp_field -> ana_opts[k]); } print_control_string (buf, "ana", "\n# Print any opted for analysis inter and intra-molecular PDFs", NULL, "print "); } print_info ("\n", NULL, buf); if (tmp_field -> out_opts[21] == 1.0 || tmp_field -> out_opts[27] == 1.0) { print_control_float (buf, tmp_field -> out_opts[23], "\n# Bin size for RDfs and Z-density distribution: ", " Ang.", "binsize "); } if (tmp_field -> out_opts[21] == 1.0) { print_control_int (buf, (int)tmp_field -> out_opts[22], "\n# Calculate and collect radial distribution functions every: ", " MD step(s)", "rdf "); print_info ("\n", NULL, buf); print_control_string (buf, "rdf", NULL, NULL, "print "); } if (tmp_field -> out_opts[27] == 1.0) { print_control_int (buf, (int)tmp_field -> out_opts[28], "\n# Calculate and collect Z-density profile every: ", " MD step(s)", "zden "); print_info ("\n", NULL, buf); print_control_string (buf, "zden", NULL, NULL, "print "); } if (tmp_field -> out_opts[24] == 1.0) { print_control_key (buf, "\n# Velocity autocorrelation functions, VAFs\n", "vaf "); for (k=25; k<27; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_info ("\n", NULL, buf); print_control_string (buf, "vaf", NULL, NULL, "print "); if (tmp_field -> out_opts[29] == 1.0) { print_control_string (buf, "vafav", "\n# Ignore time averaging for the VAFs", NULL, "no "); } } if ((int)tmp_field -> out_opts[0] || (int)tmp_field -> out_opts[4] || (int)tmp_field -> out_opts[8] || (int)tmp_field -> out_opts[12] || (int)tmp_field -> out_opts[15] || (int)tmp_field -> out_opts[17] || (int)tmp_field -> out_opts[19]) { print_info ("\n\n# Output information", NULL, buf); if ((int)tmp_field -> out_opts[0]) { print_control_key (buf, "\n# Write defects trajectory file, DEFECTS\n", "defe "); for (k=1; k<3; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_float (buf, tmp_field -> out_opts[3]); } if ((int)tmp_field -> out_opts[4]) { print_control_key (buf, "\n# Write displacement trajectory file, RSDDAT\n", "disp "); for (k=5; k<7; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_float (buf, tmp_field -> out_opts[7]); } if ((int)tmp_field -> out_opts[8]) { print_control_key (buf, "\n# Write HISTORY file\n", "traj "); for (k=9; k<11; k++) print_int (buf, (int)tmp_field -> out_opts[k]); print_float (buf, tmp_field -> out_opts[11]); } if ((int)tmp_field -> out_opts[12]) { print_control_key (buf, "\n# Write MSDTMP file\n", "msdtmp "); for (k=13; k<15; k++) print_int (buf, (int)tmp_field -> out_opts[k]); } if ((int)tmp_field -> out_opts[15]) { print_control_int (buf, (int)tmp_field -> out_opts[16], "\n# Print system data every: ", " MD step(s)", "print "); } if ((int)tmp_field -> out_opts[17]) { print_control_int (buf, (int)tmp_field -> out_opts[18], "\n# Accumulate statics data every: ", " MD step(s)", "stats "); } if ((int)tmp_field -> out_opts[19]) { print_control_int (buf, (int)tmp_field -> out_opts[20], "\n# Set rolling average stack to: ", " MD step(s)", "stack "); } } print_control_int (buf, (int)tmp_field -> out_opts[30], "\n# Dump restart information every: ", " MD step(s)", "dump "); for (i=0; i<2; i++) { if (tmp_field -> io_opts[2*i] == 1.0) { print_control_float (buf, tmp_field -> io_opts[2*i+1], time_inf[i], " s", time_key[i]); } } print_info ("\n", NULL, buf); for (i=0; i<2; i++) { j=4 + i*6; if (tmp_field -> io_opts[j] == 1.0) { j ++; print_info (io_inf[i], NULL, buf); print_info ("# - method = ", NULL, buf); print_info (io_rw_m[(int)tmp_field -> io_opts[j]], NULL, buf); j++; if (i) { if (tmp_field -> io_opts[j-1] == 3.0) { print_info ("\n# - precision = ", NULL, buf); print_info (io_pres[(int)tmp_field -> io_opts[j]], NULL, buf); } j ++; print_info ("\n# - type = ", NULL, buf); print_info (io_typ[(int)tmp_field -> io_opts[j]], NULL, buf); j++; } if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info ("\n# - j, reader count = ", NULL, buf); str_a = g_strdup_printf ("%d", (int)tmp_field -> io_opts[j]); print_info (str_a, NULL, buf); } j++; if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info ("\n# - k, batch size = ", NULL, buf); str_b = g_strdup_printf ("%d", (int)tmp_field -> io_opts[j]); print_info (str_b, NULL, buf); } j++; print_info ("\n# - l, buffer size = ", NULL, buf); str_c = g_strdup_printf ("%d", (int)tmp_field -> io_opts[j]); print_info (str_c, NULL, buf); j++; if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info ("\n# - e, parallel error check is ", NULL, buf); print_info (io_pec[(int)tmp_field -> io_opts[j]], NULL, buf); } print_info (io_key[i], "bold", buf); print_info (io_meth[(int)tmp_field -> io_opts[5+6*i]], "bold_green", buf); if (i) { if (tmp_field -> io_opts[11] == 3.0) { print_info (io_pres[(int)tmp_field -> io_opts[12]], "bold_green", buf); } print_info (" ", NULL, buf); print_info (io_typ[(int)tmp_field -> io_opts[13]], "bold_green", buf); } if (tmp_field -> io_opts[4+7*i] != 2.0) { print_info (" ", NULL, buf); print_info (str_a, "bold_blue", buf); g_free (str_a); print_info (" ", NULL, buf); print_info (str_b, "bold_blue", buf); g_free (str_b); } print_info (" ", NULL, buf); print_info (str_c, "bold_blue", buf); g_free (str_c); if (tmp_field -> io_opts[4+7*i] != 2.0) { (tmp_field -> io_opts[j] == 0.0) ? print_string (buf, "N") : print_string (buf, "Y"); } print_info ("\n", NULL, buf); j++; } } if (tmp_field -> io_opts[18] == 1.0) { print_control_key (buf, "\n# Seeds for the random number generators\n", "seed "); for (i=19; i<22; i++) print_int (buf, (int)tmp_field -> io_opts[i]); print_info ("\n", NULL, buf); } if (tmp_field -> io_opts[22] == 1.0) { print_control_key (buf, "\n# Limits to 2 the number of processors in z direction for slab simulations\n", "slab"); } print_info ("\n\n", NULL, buf); print_info ("finish", "bold", buf); // Close the CONTROL file } Atomes-GNU-1.1.14/src/calc/dl_poly/dlp_viz.c000066400000000000000000000764621457665371200204620ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file dlp_viz.c * @short functions to handle the visualization events when creating a classical force field * @author Sébastien Le Roux */ /* * This file: 'dlp_viz.c' * * Contains: * - The functions to handle the visualization events when creating a classical force field * * List of functions: int get_field_objects (int id, int jd); gboolean show_field_object (int id, int jd, int kd); void field_selection (int i, int viz, int lab, int aid); void viz_fragment (field_molecule * fmol, int id, int viz); void field_unselect_all (); void visualize_bonds (int viz, int aid, field_atom* at, field_atom* bt); void visualize_angles (int viz, int aid, field_atom* at, field_atom* bt, field_atom* ct); void visualize_dihedrals (int viz, int did, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); void visualize_imp_inv (int viz, int dih, int iid, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt); void visualize_body (int viz, int bd, field_nth_body * body); void select_object (int id, int jd, int kd); void visualize_single_struct (int id, int jd, int kd, int * ids); void visualize_object (int id, int jd, int kd); void check_to_visualize_properties_for_this_field_mol (int pid, int mol); void check_to_visualize_properties (int pid); void update_mol_tree (int a, int b); G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data); */ #include "dlp_field.h" #include "project.h" #include "glwindow.h" #include "glview.h" tint toviz; extern int is_special[MAXDATA][11]; extern void update_selection_list (atom_selection * at_list, atom * at, gboolean add); extern void init_default_shaders (glwin * view); /*! \fn void field_selection (int i, int viz, int lab, int aid) \brief select / unselect atom \param i the atom id in the model \param viz visualization status (0= hide, 1 = show) \param lab the value to display for the label \param aid the value to use for the color */ void field_selection (int i, int viz, int lab, int aid) { if (viz && tmp_proj -> atoms[0][i].pick[0] != viz) { tmp_view -> picked ++; } else if (! viz && tmp_proj -> atoms[0][i].pick[0] != viz) { tmp_view -> picked --; } tmp_proj -> atoms[0][i].pick[0] = viz; tmp_proj -> atoms[0][i].label[0] = lab; tmp_proj -> atoms[0][i].coord[4] = aid; } /*! \fn void viz_fragment (field_molecule * fmol, int id, int viz) \brief show / hide fragment \param fmol the target field molecule \param id the fragment id \param viz visualization status (0 = hide, 1 = show) */ void viz_fragment (field_molecule * fmol, int id, int viz) { int i; for (i=0; i natomes; i++) { if (tmp_proj -> atoms[0][i].coord[2] == fmol -> fragments[id]) field_selection (i, viz, viz, id); } init_default_shaders (tmp_view); } /*! \fn void field_unselect_all () \brief unselect all atoms */ void field_unselect_all () { int i; for (i=0; i natomes; i++) field_selection (i, FALSE, FALSE, 0); init_default_shaders (tmp_view); } extern gboolean in_bond (int at, int bd[2]); /*! \fn void visualize_bonds (int viz, int aid, * field_atom* at, * field_atom* bt) \brief show / hide bond / bond restraint \param viz visualization status (0 = hide, 1 = show) \param aid the id of the structural element \param at 1st field atom \param bt 2nd field atom */ void visualize_bonds (int viz, int bid, field_atom* at, field_atom* bt) { int i, j, k, l; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { field_selection (j, viz, FALSE, bid); field_selection (l, viz, FALSE, bid); } } } } /*! \fn void visualize_angles (int viz, int aid, * field_atom* at, * field_atom* bt, * field_atom* ct) \brief show / hide angle / angle restraint \param viz visualization status (0 = hide, 1 = show) \param aid the id of the structural element \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom */ void visualize_angles (int viz, int aid, field_atom* at, field_atom* bt, field_atom* ct) { int i, j, k, l, m, n; for (i=0; i num; i++) { j = at -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == bt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == ct -> id) { field_selection (j, viz, FALSE, aid); field_selection (l, viz, FALSE, aid); field_selection (n, viz, FALSE, aid); } } } } } } /*! \fn void visualize_dihedrals (int viz, int did, * field_atom* at, * field_atom* bt, * field_atom* ct, * field_atom* dt) \brief show / hide dihedral / dihedral restraint \param viz visualization status (0 = hide, 1 = show) \param did the id of the structural element \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ void visualize_dihedrals (int viz, int did, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { int i, j, k, l, m, n, o, p; for (i=0; i num; i++) { j = tmp_fat -> list[i]; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == tmp_fdt -> id) { field_selection (j, viz, FALSE, did); field_selection (l, viz, FALSE, did); field_selection (n, viz, FALSE, did); field_selection (p, viz, FALSE, did); } } } } } } } } /*! \fn void visualize_imp_inv (int viz, int dih, int iid, * field_atom* at, * field_atom* bt, * field_atom* ct, * field_atom* dt) \brief show / hide improper or inversion \param viz visualization status (0 = hide, 1 = show) \param dih 6 = improper, 7 = inversion \param iid the id of the structural element \param at 1st field atom \param bt 2nd field atom \param ct 3rd field atom \param dt 4th field atom */ void visualize_imp_inv (int viz, int dih, int iid, field_atom* at, field_atom* bt, field_atom* ct, field_atom* dt) { int i, j, k, l, m, n, o, p; for (i=0; i num; i++) { j = tmp_fat -> list[i]; if ((tmp_proj -> atoms[0][j].numv > 2 && dih == 6) || (tmp_proj -> atoms[0][j].numv == 3 && dih == 7)) { for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { for (m=0; m atoms[0][j].numv; m++) { if (m != k) { n = tmp_proj -> atoms[0][j].vois[m]; if (tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { for (o=0; o atoms[0][j].numv; o++) { if (o != k && o != m) { p = tmp_proj -> atoms[0][j].vois[o]; if (tmp_proj -> atoms[0][p].faid == tmp_fdt -> id) { field_selection (j, viz, FALSE, iid); field_selection (l, viz, FALSE, iid); field_selection (n, viz, FALSE, iid); field_selection (p, viz, FALSE, iid); } } } } } } } } } } } /*! \fn void visualize_body (int viz, int bd, field_nth_body * body) \brief show / hide non bonded interaction \param viz visualization status (0 = hide, 1 = show) \param bd the type of non bonded interaction \param body the target non bonded interaction */ void visualize_body (int viz, int bd, field_nth_body * body) { int h, i, j, k, l; l = body_at (body -> bd); for (h=0; h na[h]; i++) { tmp_fat = get_active_atom (body -> ma[h][i], body -> a[h][i]); for (j=0; j < tmp_fat -> num; j++) { k = tmp_fat -> list[j]; field_selection (k, viz, viz, bd); } } } } /*! \fn int get_field_objects (int id, int jd) \brief get the number of this type of field object \param id the tyoe of field object \param jd the field molecule id */ int get_field_objects (int id, int jd) { int kd; int i; switch (id) { case -1: kd = 0; for (i=0; i molecules; i++) kd = max(kd, get_active_field_molecule (i) -> mol -> natoms); break; case 0: kd = tmp_field -> molecules; break; case 1: kd = 0; for (i=0; i molecules; i++) kd = max(kd, get_active_field_molecule (i) -> atoms); break; case 2: kd = get_active_field_molecule (jd) -> shells; break; case 3: kd = get_active_field_molecule (jd) -> constraints; break; case 4: kd = get_active_field_molecule (jd) -> pmfs; break; case 5: kd = get_active_field_molecule (jd) -> rigids; break; case 6: kd = get_active_field_molecule (jd) -> tethered; break; case SEXTERN: kd = tmp_field -> extern_fields; break; default: if (id < MOLIMIT) { kd = get_active_field_molecule (jd) -> nstruct[id-7]; } else { kd = tmp_field -> nbody[id - MOLIMIT]; } break; } return kd; } /*! \fn void select_object (int id, int jd, int kd) \brief select structural element \param id the type of structural element \param jd the object id, if any \param kd the field molecule id */ void select_object (int id, int jd, int kd) { int i; field_object = id; num_field_objects = get_field_objects (id, kd); switch (id) { case 2: // Select a core-shell unit in a molecule tmp_fshell = get_active_shell (kd, jd); if (tmp_fshell -> ia[0] < 0 || tmp_fshell -> ia[1] < 0) toviz.c = FALSE; tmp_fshell -> use = toviz.c; break; case 3: // Select a contraint bond in a molecule tmp_fcons = get_active_constraint (kd, jd); if (! tmp_fcons -> ia[0] || ! tmp_fcons -> ia[1]) toviz.c = FALSE; tmp_fcons -> use = toviz.c; break; case 4: // Select a PMF in a molecule tmp_fpmf = get_active_field_molecule (kd) -> first_pmf; for (i=0; i < get_active_field_molecule(kd) -> pmfs; i++) { tmp_fpmf -> use = FALSE; if (tmp_fpmf -> next != NULL) tmp_fpmf = tmp_fpmf -> next; } tmp_fpmf = get_active_pmf (kd, jd); if (tmp_fpmf -> num[0] > 0 && tmp_fpmf -> num[1] > 0) tmp_fpmf -> use = toviz.c; break; case SEXTERN: tmp_fext = tmp_field -> first_external; for (i=0; i < tmp_field -> extern_fields; i++) { tmp_fext -> use = FALSE; if (tmp_fext -> next != NULL) tmp_fext = tmp_fext -> next; } tmp_fext = get_active_external (jd); tmp_fext -> use = toviz.c; break; default: if (id < MOLIMIT) { get_active_struct (id-7, kd, jd) -> def -> use = toviz.c; } else { get_active_body (jd, id - MOLIMIT) -> use = toviz.c; } break; } } /*! \fn void visualize_single_struct (int id, int jd, int kd, int * ids) \brief visualize single structural element \param id the type of structural element \param jd the object id, if any \param kd the field molecule id \param ids the list of atom id in the fragment */ void visualize_single_struct (int id, int jd, int kd, int * ids) { int i, j, k, l, m, n, o, p; int * idat; i = struct_id(id); idat = allocint (i); for (j=0; j atoms_id[k][0].a) -> id; } for (j=0; j multi; l++) { m = tmp_fmol -> atoms_id[k][l].b; n = get_active_atom (kd, tmp_fmol -> atoms_id[k][l].a) -> list[m]; field_selection (n, 0, 0, k); } } g_free (idat); i = ids[0]; j = ids[1]; for (l=0; l< tmp_fmol -> multi; l++) { m = tmp_fmol -> atoms_id[i][l].b; n = get_active_atom (kd, tmp_fmol -> atoms_id[i][l].a) -> list[m]; field_selection (n, toviz.c, 0, jd); o = tmp_fmol -> atoms_id[j][l].b; p = get_active_atom (kd, tmp_fmol -> atoms_id[j][l].a) -> list[o]; field_selection (p, toviz.c, 0, jd); } if (id > 8 && id < 15) { k = ids[2]; for (l=0; l< tmp_fmol -> multi; l++) { o = tmp_fmol -> atoms_id[k][l].b; p = get_active_atom (kd, tmp_fmol -> atoms_id[k][l].a) -> list[o]; field_selection (p, toviz.c, 0, jd); } if (id > 10) { i = ids[3]; for (l=0; l< tmp_fmol -> multi; l++) { o = tmp_fmol -> atoms_id[i][l].b; p = get_active_atom (kd, tmp_fmol -> atoms_id[i][l].a) -> list[o]; field_selection (p, toviz.c, 0, jd); } } } } /*! \fn void visualize_object (int id, int jd, int kd) \brief visualize object and update OpenGL rendering \param id the type of object \param jd the molecule id, if any \param kd the object id, if any */ void visualize_object (int id, int jd, int kd) { int l, m, n, o, p, q, r, s; field_atom* tshell; field_object = id; num_field_objects = get_field_objects (id, kd); switch (id) { case -1: // View molecule atoms id tmp_fmol = get_active_field_molecule (jd); tmp_fmol -> show_id = toviz.c; tmp_fat = tmp_fmol -> first_atom; for (m=0; m < tmp_fmol -> atoms; m++) { for (n=0; n < tmp_fat -> num; n++) { field_selection (tmp_fat -> list[n], toviz.c, toviz.c, tmp_fat -> list_id[n]); } if (tmp_fat -> next != NULL) tmp_fat = tmp_fat -> next; } break; case 0: // View an entire molecule tmp_fmol = get_active_field_molecule (jd); tmp_fmol -> show = toviz.c; for (m=0; m multi; m++) { toviz.a = 2; toviz.b = tmp_fmol -> fragments[m]; for (n=0; n natomes; n++) { if (tmp_proj -> atoms[0][n].coord[2] == toviz.b) field_selection (n, toviz.c, toviz.c, jd); } } break; case 1: // View a type of atoms in a molecule tmp_fat = get_active_atom (kd, jd); tmp_fat -> show = toviz.c; for (m=0; m num; m++) { n = tmp_fat -> list[m]; field_selection (n, toviz.c, toviz.c, jd); } break; case 2: // View a type of Core-shell unit in a molecule tmp_fshell = get_active_shell (kd, jd); tmp_fshell -> show = toviz.c; for (m=0; m<2; m++) { if (tmp_fshell -> ia[m]) { n = tmp_fshell -> ia[0]-1; tshell = get_active_atom (tmp_fmol -> id, tmp_fmol -> atoms_id[0][n].a); for (o=0; o multi; o++) { p = tmp_fmol -> atoms_id[n][o].b; field_selection (tshell -> list[p], toviz.c, toviz.c, jd); } } } break; case 3: // View a type of bond constraint in a molecule tmp_fcons = get_active_constraint (kd, jd); tmp_fcons -> show = toviz.c; for (l=0; l<2; l++) { if (tmp_fcons -> ia[l]) { for (m=0; m multi; m++) { n = tmp_fmol -> atoms_id[tmp_fcons -> ia[l]-1][m].a; o = tmp_fmol -> atoms_id[tmp_fcons -> ia[l]-1][m].b; p = get_active_atom (tmp_fmol -> id, n) -> list[o]; field_selection (p, toviz.c, toviz.c, jd); } } } break; case 4: tmp_fpmf = get_active_pmf (kd, jd); tmp_fpmf -> show = toviz.c; for (m=0; m<2; m++) { if (tmp_fpmf -> num[m] > 0) { for (n=0; n num[m]; n++) { o = tmp_fpmf -> list[m][n]; for (p=0; p multi;p++) { q = tmp_fmol -> atoms_id[o][p].a; r = tmp_fmol -> atoms_id[o][p].b; s = get_active_atom (tmp_fmol -> id, q) -> list[r]; field_selection (s, toviz.c, toviz.c, jd); } } } } break; case 5: tmp_frig = get_active_rigid (kd, jd); tmp_frig -> show = toviz.c; if (tmp_frig -> num > 0) { for (n=0; n num; n++) { o = tmp_frig -> list[n]; for (p=0; p multi;p++) { q = tmp_fmol -> atoms_id[o][p].a; r = tmp_fmol -> atoms_id[o][p].b; s = get_active_atom (tmp_fmol -> id, q) -> list[r]; field_selection (s, toviz.c, toviz.c, jd); } } } break; case 6: tmp_ftet = get_active_tethered (kd, jd); tmp_ftet -> show = toviz.c; if (tmp_ftet -> num) { o = tmp_ftet -> num-1; p = tmp_fmol -> atoms_id[o][0].a; for (q=0; q multi;q++) { r = tmp_fmol -> atoms_id[o][q].b; s = get_active_atom (tmp_fmol -> id, p) -> list[r]; field_selection (s, toviz.c, toviz.c, jd); } } break; case SEXTERN: break; default: if (id < MOLIMIT) { // View a type of bond / angles / dihedral / improper / inversion in a molecule tmp_fstr = get_active_struct (id-7, kd, jd); tmp_fat = get_active_atom (kd, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (kd, tmp_fstr -> aid[1]); if (id > 8) tmp_fct = get_active_atom (kd, tmp_fstr -> aid[2]); if (id > 10) tmp_fdt = get_active_atom (kd, tmp_fstr -> aid[3]); tmp_fstr -> def -> show = toviz.c; if (id < 9) { visualize_bonds (tmp_fstr -> def -> show, jd, tmp_fat, tmp_fbt); } else if (id < 11) { visualize_angles (tmp_fstr -> def -> show, jd, tmp_fat, tmp_fbt, tmp_fct); } else if (id < 13) { visualize_dihedrals (tmp_fstr -> def -> show, jd, tmp_fat, tmp_fbt, tmp_fct, tmp_fdt); } else if (id < 15) { visualize_imp_inv (tmp_fstr -> def -> show, id-7, jd, tmp_fat, tmp_fbt, tmp_fct, tmp_fdt); } } else { // View a non-bonded interaction tmp_fbody = get_active_body (jd, id - MOLIMIT); tmp_fbody -> show = toviz.c; visualize_body (tmp_fbody -> show, jd, tmp_fbody); } break; } } /*! \fn void check_to_visualize_properties_for_this_field_mol (int pid, int mol) \brief check if rendering is required for object in molecule \param pid the type of field object \param mol the target field molecule */ void check_to_visualize_properties_for_this_field_mol (int pid, int mol) { int h, i, j; field_prop * propv; h = toviz.c; toviz.c = 1; tmp_fmol = get_active_field_molecule (mol); i = get_field_objects (pid, mol); for (j=0; j 6 && pid < MOLIMIT) { propv = get_active_struct (pid-7, mol, j) -> other; while (propv) { if (propv -> show) visualize_single_struct (pid, j, mol, propv -> aid); propv = propv -> next; } } } toviz.c = h; } /*! \fn void check_to_visualize_properties (int pid) \brief check if it is requried to update rendering \param pid the page number in the assistant */ void check_to_visualize_properties (int pid) { int i, j; i = (pid < MOLIMIT) ? tmp_field -> molecules : 1; for (j=0; j molecules; i++) { if (get_active_field_molecule (i) -> show_id && ! a) { toviz.c = 0; visualize_object (-1, i, 0); check_to_visualize_properties (-1); toviz.c = j; } else if (get_active_field_molecule (i) -> show && a) { toviz.c = 0; visualize_object (0, i, 0); check_to_visualize_properties (0); toviz.c = j; } } if (a) { get_active_field_molecule (b) -> show_id = j; } else { get_active_field_molecule (b) -> show = j; } gtk_tree_store_clear (field_model[0]); init_default_shaders (tmp_view); fill_field_model (field_model[0], 0, -1); } /*! \fn G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on visualize force field object toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_toggle_visualize_or_select_object (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k, l, m, n; int * ids = NULL; tint * dat = (tint * )data; GtkTreeIter iter; gboolean forall; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { toviz.c = 0; } else { toviz.c = 1; } i = dat -> b; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(field_model[i]), & iter, path); forall = TRUE; if (i > 6 && i < MOLIMIT) { gtk_tree_model_get (GTK_TREE_MODEL(field_model[i]), & iter, 0, & k, -1); if (! k) { gchar * str; forall = FALSE; j = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_mol[i-1])); tmp_fmol = get_active_field_molecule (j); l = struct_id(i); ids = allocint (l); if (dat -> c == 0) { field_object = i; num_field_objects = get_field_objects (i, tmp_fmol -> id); } for (m=1; m def; } else { if (tmp_fstr -> other) { tmp_fprop = get_active_prop_using_atoms (tmp_fstr -> other, l, ids); if (! tmp_fprop) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop -> next) tmp_fprop = tmp_fprop -> next; tmp_fprop -> next = duplicate_field_prop (tmp_fstr -> def, i-7); tmp_fprop = tmp_fprop -> next; for (n=0; n aid[n] = ids[n]; } } else { tmp_fstr -> other = duplicate_field_prop (tmp_fstr -> def, i-7); for (n=0; n other -> aid[n] = ids[n]; tmp_fprop = tmp_fstr -> other; } } if (dat -> c) tmp_fprop -> use = toviz.c; if (! dat -> c) tmp_fprop -> show = toviz.c; adjust_field_prop (i-7, l, NULL, ids, tmp_fprop -> key); j = m-1; } else { j = k-1; } } else { gtk_tree_model_get (GTK_TREE_MODEL(field_model[i]), & iter, 0, & k, -1); j = k-1; } if (forall) { k = -1; if (i > 0 && i < MOLIMIT) { k = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_mol[i-1])); tmp_fmol = get_active_field_molecule (k); } if (i == 0 && dat -> c == 1) { update_mol_tree (1, j); visualize_object (-1, j, k); check_to_visualize_properties (i); } else if (dat -> c == 0) { if (i == 0) update_mol_tree (0, j); visualize_object (i, j, k); check_to_visualize_properties (i); } else { select_object (i, j, k); } } else if (dat -> c == 0) { k = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_mol[i-1])); visualize_single_struct (i, j+1, k, ids); check_to_visualize_properties (i); } if (ids) g_free (ids); if (forall || i == 4 || i == SEXTERN) { gtk_tree_store_clear (field_model[i]); fill_field_model (field_model[i], i, k); } else if (! forall && i > 0 && i != 4 && i != SEXTERN) { for (l=0; l c) break; } gtk_tree_store_set (field_model[i], & iter, l, toviz.c, -1); } } /*! \fn gboolean show_field_object (int id, int jd, int kd) \brief is the field object visible ? \param id the type of object \param jd the object id, if any \param kd the field molecule id, if any */ gboolean show_field_object (int id, int jd, int kd) { gboolean show = FALSE; switch (id) { case -1: show = get_active_field_molecule (jd) -> show; break; case 0: show = get_active_field_molecule (jd) -> show; break; case 1: show = (jd < get_active_field_molecule (kd) -> atoms) ? get_active_atom (kd, jd) -> show : FALSE; break; case 2: show = get_active_shell (kd, jd) -> show; break; case 3: show = get_active_constraint (kd, jd) -> show; break; case 4: show = get_active_pmf (kd, jd) -> show; break; case 5: show = get_active_rigid (kd, jd) -> show; break; case 6: show = get_active_tethered (kd, jd) -> show; break; default: if (id < MOLIMIT) { show = get_active_struct (id-7, kd, jd) -> def -> show; } else { show = get_active_body (jd, id - MOLIMIT) -> show; } break; } return show; } /*! \fn G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data) \brief select all element(s) in the column for visualization \param col the target GtkTreeViewColumn \param data the associated data pointer */ G_MODULE_EXPORT void visualize_or_select_all_elements (GtkTreeViewColumn * col, gpointer data) { int i, j, k, l; tint * dat = (tint *)data; i = dat -> b; j = -1; if (i > 0 && i < MOLIMIT) j = gtk_combo_box_get_active (GTK_COMBO_BOX(combo_mol[i-1])); num_field_objects = get_field_objects (i, j); if (i < 7) { switch (i) { case 0: toviz.c = (dat -> c) ? get_active_field_molecule (0) -> show_id : get_active_field_molecule (0) -> show; break; case 1: toviz.c = get_active_field_molecule (j) -> first_atom -> show; break; case 2: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_shell -> use : get_active_field_molecule (j) -> first_shell -> show; break; case 3: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_constraint -> use : get_active_field_molecule (j) -> first_constraint -> show; break; case 4: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_pmf -> use : get_active_field_molecule (j) -> first_pmf -> show; break; case 5: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_rigid -> use : get_active_field_molecule (j) -> first_rigid -> show; break; case 6: toviz.c = (dat -> c) ? get_active_field_molecule (j) -> first_tethered-> use : get_active_field_molecule (j) -> first_tethered -> show; break; } toviz.c = ! toviz.c; } else if (i > 6 && i < MOLIMIT) { if (num_field_objects) { tmp_fmol = get_active_field_molecule (j); tmp_fstr = tmp_fmol -> first_struct[i-7]; toviz.c = (dat -> c == 0) ? ! tmp_fstr -> def -> show : ! tmp_fstr -> def -> use; while (tmp_fstr) { if (dat -> c) tmp_fstr -> def -> use = toviz.c; if (! dat -> c) tmp_fstr -> def -> show = toviz.c; if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (dat -> c) tmp_fprop -> use = toviz.c; if (! dat -> c) tmp_fprop -> show = toviz.c; tmp_fprop = tmp_fprop -> next; } } tmp_fstr = tmp_fstr -> next; } } } else { tmp_fbody = tmp_field -> first_body[i - MOLIMIT]; toviz.c = (dat -> c == 0) ? ! tmp_fbody -> show : ! tmp_fbody -> use; while (tmp_fbody) { if (dat -> c) tmp_fbody -> use = toviz.c; if (! dat -> c) tmp_fbody -> show = toviz.c; tmp_fbody = tmp_fbody -> next; } } if (num_field_objects) { if (i == 0 && dat -> c == 1) { l = num_field_objects; num_field_objects = get_field_objects (-1, j); for (k=0; k c == 0) { for (k=0; k Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file amber94.c * @short Amber-94 force field, from 'parm94' * @author Sébastien Le Roux */ /* * This file: 'amber94.c' * * Contains: * Amber-94 force field, data from taken from: - the file: 'parm94' This file contains several tables: Atoms : amber94_atoms[55][4] Equi vdw : amber94_equi[2][12] Bonds : amber94_bonds[83][5] Angles : amber94_angles[191][6] Dihedrals : amber94_dihedrals[81][9] Impropers : amber94_impropers[31][8] Non bonded : amber94_vdw[34][4] */ #include "global.h" int amber94_objects[14] = {55, 2, 0, 83, 0, 0, 191, 0, 81, 0 , 0, 31, 34, 0}; int amber94_dim[14] = {4, 12, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_94 info */ char * amber94_atoms[55][4]= {{"Br", "79.90", "BR", "! bromine"}, {"C", "12.01", "C", "sp2 C carbonyl group"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS"}, {"C", "12.01", "CT", "sp3 aliphatic C"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)"}, {"Ca", "40.08", "C0", "calcium"}, {"F", "19.00", "F", "fluorine"}, {"H", "1.008", "H", "H bonded to nitrogen atoms"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H5", "H arom. bond. to C with 2 electrwd. groups"}, {"H", "1.008", "HO", "hydroxyl group"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur"}, {"H", "1.008", "HW", "H in TIP3P water"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr"}, {"I", "126.9", "I", "iodine"}, {"I", "35.45", "IM", "assumed to be Cl-"}, {"I", "22.99", "IP", "assumed to be Na+"}, {"I", "131.0", "IB", "'big ion w/ waters' for vacuum (Na+, 6H2O)"}, {"Mg", "24.305", "MG", "magnesium"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)"}, {"N", "14.01", "N2", "sp2 N in amino groups"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)"}, {"N", "14.01", "N*", "sp2 N"}, {"O", "16.00", "O", "carbonyl group oxygen"}, {"O", "16.00", "OW", "oxygen in TIP3P water"}, {"O", "16.00", "OH", "oxygen in hydroxyl group"}, {"O", "16.00", "OS", "ether and ester oxygen"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen"}, {"P", "30.97", "P", "phosphate"}, {"S", "32.06", "S", "sulphur in disulfide linkage"}, {"S", "32.06", "SH", "sulphur in cystine"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium"}, {"K", "39.10", "K", "potassium"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}, {"EP", "3.0", "EP", "extra point (mass is ignored)"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber94_equi[2][12]= {{"N", "NA", "N2", "N*", "NC", "NB", " ", " ", " ", " ", " ", " "}, {"C", "C*", "CA", "CB", "CC", "CN", "CM", "CK", "CQ", "CW", "CV", "CR"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber94 info V(R) = Kb x (R - R0)^2 */ char * amber94_bonds[83][5]= {{"OW", "HW", "553.0", "0.9572", "TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; TYR"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; TYR"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"CT", "F", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber94_angles[191][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "OH", "70.0", "117.00", " "}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"O", "C", "OH", "80.0", "126.00", " "}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA tyr"}, {"CA", "C", "OH", "70.0", "120.00", "AA tyr"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "35.0", "120.00", " "}, {"CA", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "HA", "35.0", "120.00", " "}, {"CB", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"C", "CA", "HA", "35.0", "120.00", "AA tyr"}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"CN", "CA", "HA", "35.0", "120.00", "AA trp"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"H5", "CK", "N*", "35.0", "123.05", " "}, {"H5", "CK", "NB", "35.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "35.0", "119.70", " "}, {"C", "CM", "H4", "35.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "35.0", "123.30", " "}, {"CA", "CM", "H4", "35.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "35.0", "119.70", " "}, {"CM", "CM", "H4", "35.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"H4", "CM", "N*", "35.0", "119.10", " "}, {"H5", "CQ", "NC", "35.0", "115.45", " "}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"CM", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"N*", "CT", "OS", "50.0", "109.50", " "}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"CA", "CT", "CT", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "35.0", "120.00", "AA his"}, {"H5", "CR", "NB", "35.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "35.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "35.0", "120.00", "AA his"}, {"CC", "CW", "H4", "35.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"H4", "CW", "NA", "35.0", "120.00", "AA his"}, {"C*", "CW", "H4", "35.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "30.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "30.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "30.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "30.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "30.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "30.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "35.0", "120.00", " "}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N2", "H", "35.0", "118.40", "AA arg"}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "30.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "30.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "30.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "35.0", "113.00", " "}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "35.0", "109.50", "JCC,13,(1992),963;"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber94 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber94_dihedrals[81][9]= {{"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "OH", "X", "2", "1.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "CT", "X", "4", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA|check Wendy? and NMA"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"C", "N", "CT", "C", "1", "0.20", "180.0", "2.", " "}, {"N", "CT", "C", "N", "1", "0.40", "180.0", "-4.", " "}, {"N", "CT", "C", "N", "1", "1.35", "180.0", "-2.", " "}, {"N", "CT", "C", "N", "1", "0.75", "180.0", "1.", " "}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", " "}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", " "}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", " "}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", " "}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", " "}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "check glicolWC? puc"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "CT", "N*", "CK", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber94 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber94_impropers[31][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CB", "CK", "N*", "CT", "1.0", "180.", "2.", " "}, {"C", "CM", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", " "}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"CT", "CV", "CC", "NA", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NB", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NA", "1.1", "180.", "2.", " "}, {"CB", "CT", "C*", "CW", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CM", "N2", "CA", "NC", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "N2", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"N2", "NA", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber94 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber94_vdw[34][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7682", "0.1521", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}, {"EP", "0.0", "0.0", "generic extra point"}}; Atomes-GNU-1.1.14/src/calc/force_fields/amber96.c000066400000000000000000001314501457665371200212270ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file amber96.c * @short Amber-96 force field, from 'parm96' * @author Sébastien Le Roux */ /* * This file: 'amber96.c' * * Contains: * Amber-96 force field, data from taken from: - the file: 'parm96' This file contains several tables: Atoms : amber96_atoms[54][4] Equi vdw : amber96_equi[2][12] Bonds : amber96_bonds[83][5] Angles : amber96_angles[191][6] Dihedrals : amber96_dihedrals[81][9] Impropers : amber96_impropers[31][8] Non bonded : amber96_vdw[35][4] */ #include "global.h" int amber96_objects[14] = {54, 2, 0, 83, 0, 0, 191, 0, 81, 0 , 0, 31, 35, 0}; int amber96_dim[14] = {4, 12, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_96 info */ char * amber96_atoms[54][4]= {{"Br", "79.90", "BR", "! bromine"}, {"C", "12.01", "C", "sp2 C carbonyl group"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS"}, {"C", "12.01", "CT", "sp3 aliphatic C"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)"}, {"Ca", "40.08", "C0", "calcium"}, {"F", "19.00", "F", "fluorine"}, {"H", "1.008", "H", "H bonded to nitrogen atoms"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H5", "H arom. bond. to C with 2 electrwd. groups"}, {"H", "1.008", "HO", "hydroxyl group"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur"}, {"H", "1.008", "HW", "H in TIP3P water"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr"}, {"I", "126.9", "I", "iodine"}, {"I", "35.45", "IM", "assumed to be Cl-"}, {"I", "22.99", "IP", "assumed to be Na+"}, {"I", "131.0", "IB", "'big ion w/ waters' for vacuum (Na+, 6H2O)"}, {"Mg", "24.305", "MG", "magnesium"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)"}, {"N", "14.01", "N2", "sp2 N in amino groups"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)"}, {"N", "14.01", "N*", "sp2 N"}, {"O", "16.00", "O", "carbonyl group oxygen"}, {"O", "16.00", "OW", "oxygen in TIP3P water"}, {"O", "16.00", "OH", "oxygen in hydroxyl group"}, {"O", "16.00", "OS", "ether and ester oxygen"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen"}, {"P", "30.97", "P", "phosphate"}, {"S", "32.06", "S", "sulphur in disulfide linkage"}, {"S", "32.06", "SH", "sulphur in cystine"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium"}, {"K", "39.10", "K", "potassium"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber96_equi[2][12]= {{"N", "NA", "N2", "N*", "NC", "NB", " ", " ", " ", " ", " ", " "}, {"C", "C*", "CA", "CB", "CC", "CN", "CM", "CK", "CQ", "CW", "CV", "CR"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber96 info V(R) = Kb x (R - R0)^2 */ char * amber96_bonds[83][5]= {{"OW", "HW", "553.0", "0.9572", "! TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; TYR"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; TYR"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"CT", "F", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber96_angles[191][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "OH", "70.0", "117.00", " "}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"O", "C", "OH", "80.0", "126.00", " "}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA tyr"}, {"CA", "C", "OH", "70.0", "120.00", "AA tyr"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "35.0", "120.00", " "}, {"CA", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "HA", "35.0", "120.00", " "}, {"CB", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"C", "CA", "HA", "35.0", "120.00", "AA tyr"}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"CN", "CA", "HA", "35.0", "120.00", "AA trp"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"H5", "CK", "N*", "35.0", "123.05", " "}, {"H5", "CK", "NB", "35.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "35.0", "119.70", " "}, {"C", "CM", "H4", "35.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "35.0", "123.30", " "}, {"CA", "CM", "H4", "35.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "35.0", "119.70", " "}, {"CM", "CM", "H4", "35.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"H4", "CM", "N*", "35.0", "119.10", " "}, {"H5", "CQ", "NC", "35.0", "115.45", " "}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"CM", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"N*", "CT", "OS", "50.0", "109.50", " "}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"CA", "CT", "CT", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "35.0", "120.00", "AA his"}, {"H5", "CR", "NB", "35.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "35.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "35.0", "120.00", "AA his"}, {"CC", "CW", "H4", "35.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"H4", "CW", "NA", "35.0", "120.00", "AA his"}, {"C*", "CW", "H4", "35.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "30.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "30.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "30.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "30.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "30.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "30.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "35.0", "120.00", " "}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N2", "H", "35.0", "118.40", "AA arg"}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "30.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "30.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "30.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "35.0", "113.00", " "}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "35.0", "109.50", "JCC,13,(1992),963;"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber96 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber96_dihedrals[81][9]= {{"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "OH", "X", "2", "1.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "CT", "X", "4", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA|check Wendy? and NMA"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"C", "N", "CT", "C", "1", "0.30", "180.0", "-2.", "Kollman et al. 1997"}, {"C", "N", "CT", "C", "1", "0.85", "000.0", "1.", "Kollman et al. 1997"}, {"N", "CT", "C", "N", "1", "0.30", "180.0", "-2.", "Kollman et al. 1997"}, {"N", "CT", "C", "N", "1", "0.85", "000.0", "1.", "Kollman et al. 1997"}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", " "}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", " "}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", " "}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", " "}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", " "}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "pucker anal (93')"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "CT", "CT", "OH", "1", "1.00", "0.0", "2.", "check glicolWC? puc"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "CT", "N*", "CK", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "0.50", "180.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber96 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber96_impropers[31][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CK", "CB", "N*", "CT", "1.0", "180.", "2.", " "}, {"CM", "C", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"CM", "C", "CM", "CT", "1.1", "180.", "2.", " "}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"NA", "CV", "CC", "CT", "1.1", "180.", "2.", " "}, {"NB", "CW", "CC", "CT", "1.1", "180.", "2.", " "}, {"NA", "CW", "CC", "CT", "1.1", "180.", "2.", " "}, {"CW", "CB", "C*", "CT", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"NC", "CM", "CA", "N2", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "NC", "CA", "N2", "1.1", "180.", "2.", "dac, 10/94"}, {"NA", "NC", "CA", "N2", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber96 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber96_vdw[35][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7683", "0.1520", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"CA", "1.9080", "0.0860", "Spellmeyer"}, {"CM", "1.9080", "0.0860", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}}; Atomes-GNU-1.1.14/src/calc/force_fields/amber98.c000066400000000000000000001316311457665371200212320ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file amber98.c * @short Amber-98 force field, from 'parm98' * @author Sébastien Le Roux */ /* * This file: 'amber98.c' * * Contains: * Amber-98 force field, data from taken from: - the file: 'parm98' This file contains several tables: Atoms : amber98_atoms[54][4] Equi vdw : amber98_equi[2][12] Bonds : amber98_bonds[83][5] Angles : amber98_angles[191][6] Dihedrals : amber98_dihedrals[83][9] Impropers : amber98_impropers[31][8] Non bonded : amber98_vdw[35][4] */ #include "global.h" int amber98_objects[14] = {54, 2, 0, 83, 0, 0, 191, 0, 83, 0 , 0, 31, 35, 0}; int amber98_dim[14] = {4, 12, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_98 info */ char * amber98_atoms[54][4]= {{"Br", "79.90", "BR", "! bromine"}, {"C", "12.01", "C", "sp2 C carbonyl group"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS"}, {"C", "12.01", "CT", "sp3 aliphatic C"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)"}, {"Ca", "40.08", "C0", "calcium"}, {"F", "19.00", "F", "fluorine"}, {"H", "1.008", "H", "H bonded to nitrogen atoms"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group"}, {"H", "1.008", "H5", "H arom. bond. to C with 2 electrwd. groups"}, {"H", "1.008", "HO", "hydroxyl group"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur"}, {"H", "1.008", "HW", "H in TIP3P water"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr"}, {"I", "126.9", "I", "iodine"}, {"I", "35.45", "IM", "assumed to be Cl-"}, {"I", "22.99", "IP", "assumed to be Na+"}, {"I", "131.0", "IB", "'big ion w/ waters' for vacuum (Na+, 6H2O)"}, {"Mg", "24.305", "MG", "magnesium"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)"}, {"N", "14.01", "N2", "sp2 N in amino groups"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)"}, {"N", "14.01", "N*", "sp2 N"}, {"O", "16.00", "O", "carbonyl group oxygen"}, {"O", "16.00", "OW", "oxygen in TIP3P water"}, {"O", "16.00", "OH", "oxygen in hydroxyl group"}, {"O", "16.00", "OS", "ether and ester oxygen"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen"}, {"P", "30.97", "P", "phosphate"}, {"S", "32.06", "S", "sulphur in disulfide linkage"}, {"S", "32.06", "SH", "sulphur in cystine"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium"}, {"K", "39.10", "K", "potassium"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber98_equi[2][12]= {{"N", "NA", "N2", "N*", "NC", "NB", " ", " ", " ", " ", " ", " "}, {"C", "C*", "CA", "CB", "CC", "CN", "CM", "CK", "CQ", "CW", "CV", "CR"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber98 info V(R) = Kb x (R - R0)^2 */ char * amber98_bonds[83][5]= {{"OW", "HW", "553.0", "0.9572", "! TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; TYR"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; TYR"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"CT", "F", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber98_angles[191][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "OH", "70.0", "117.00", " "}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"O", "C", "OH", "80.0", "126.00", " "}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA tyr"}, {"CA", "C", "OH", "70.0", "120.00", "AA tyr"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "35.0", "120.00", " "}, {"CA", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "HA", "35.0", "120.00", " "}, {"CB", "CA", "H4", "35.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"C", "CA", "HA", "35.0", "120.00", "AA tyr"}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"CN", "CA", "HA", "35.0", "120.00", "AA trp"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"H5", "CK", "N*", "35.0", "123.05", " "}, {"H5", "CK", "NB", "35.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "35.0", "119.70", " "}, {"C", "CM", "H4", "35.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "35.0", "123.30", " "}, {"CA", "CM", "H4", "35.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "35.0", "119.70", " "}, {"CM", "CM", "H4", "35.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"H4", "CM", "N*", "35.0", "119.10", " "}, {"H5", "CQ", "NC", "35.0", "115.45", " "}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"CM", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"N*", "CT", "OS", "50.0", "109.50", " "}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"CA", "CT", "CT", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "35.0", "120.00", "AA his"}, {"H5", "CR", "NB", "35.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "35.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "35.0", "120.00", "AA his"}, {"CC", "CW", "H4", "35.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"H4", "CW", "NA", "35.0", "120.00", "AA his"}, {"C*", "CW", "H4", "35.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "30.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "30.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "30.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "30.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "30.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "30.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "35.0", "120.00", " "}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N2", "H", "35.0", "118.40", "AA arg"}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "30.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "30.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "30.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "30.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "35.0", "113.00", " "}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "35.0", "109.50", "JCC,13,(1992),963;"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber98 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber98_dihedrals[83][9]= {{"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "OH", "X", "2", "1.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "CT", "X", "4", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA|check Wendy? and NMA"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"CT", "OS", "CT", "N*", "1", "0.383", "0.0", "-3.", " "}, {"CT", "OS", "CT", "N*", "1", "1.0", "000.0", "2.", " "}, {"C", "N", "CT", "C", "1", "0.20", "180.0", "2.", " "}, {"N", "CT", "C", "N", "1", "0.40", "180.0", "-4.", " "}, {"N", "CT", "C", "N", "1", "1.35", "180.0", "-2.", " "}, {"N", "CT", "C", "N", "1", "0.75", "180.0", "1.", " "}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", " "}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", " "}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", " "}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", " "}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", " "}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OS", "1", "1.50", "0.0", "2.", "pucker anal (93')"}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "CT", "CT", "OH", "1", "1.50", "0.0", "2.", "pucker anal (93')"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "CT", "CT", "OH", "1", "1.50", "0.0", "2.", "check glicolWC? puc"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "CT", "N*", "CK", "1", "0.00", "000.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "0.00", "000.0", "-2.", "sugar frag calc (PC)"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "sugar frag calc (PC)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber98 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber98_impropers[31][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CB", "CK", "N*", "CT", "1.0", "180.", "2.", " "}, {"C", "CM", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", " "}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"CT", "CV", "CC", "NA", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NB", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NA", "1.1", "180.", "2.", " "}, {"CB", "CT", "C*", "CW", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CM", "N2", "CA", "NC", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "N2", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"N2", "NA", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber98 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber98_vdw[35][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7683", "0.1520", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"CA", "1.9080", "0.0860", "Spellmeyer"}, {"CM", "1.9080", "0.0860", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}}; Atomes-GNU-1.1.14/src/calc/force_fields/amber99.c000066400000000000000000002053351457665371200212360ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file amber99.c * @short Amber-99 force field, from 'parm99' * @author Sébastien Le Roux */ /* * This file: 'amber99.c' * * Contains: * Amber-99 force field, data from taken from: - the file: 'parm99' This file contains several tables: Atoms : amber99_atoms[64][5] Equi vdw : amber99_equi[2][15] Bonds : amber99_bonds[116][5] Angles : amber99_angles[281][6] Dihedrals : amber99_dihedrals[164][9] Impropers : amber99_impropers[38][8] Non bonded : amber99_vdw[42][4] */ #include "global.h" int amber99_objects[14] = {64, 2, 0, 116, 0, 0, 281, 0, 164, 0 , 0, 38, 42, 0}; int amber99_dim[14] = {5, 15, 0, 5, 0, 0, 6, 0, 9, 0, 0, 8, 4, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Amber_99 info */ char * amber99_atoms[64][5]= {{"C", "12.01", "C", "! sp2 C carbonyl group", "0.616"}, {"C", "12.01", "CA", "sp2 C pure aromatic (benzene)", "0.360"}, {"C", "12.01", "CB", "sp2 aromatic C, 5 and 6 membered ring junction", "0.360"}, {"C", "12.01", "CC", "sp2 aromatic C, 5 memb. ring HIS", "0.360"}, {"C", "12.01", "CD", "sp2 C atom in the middle of: C=CD-CD=C", "0.360"}, {"C", "12.01", "CK", "sp2 C 5 memb.ring in purines", "0.360"}, {"C", "12.01", "CM", "sp2 C pyrimidines in pos. 5 and 6", "0.360"}, {"C", "12.01", "CN", "sp2 C aromatic 5 and 6 memb.ring junct.(TRP)", "0.360"}, {"C", "12.01", "CQ", "sp2 C in 5 mem.ring of purines between 2 N", "0.360"}, {"C", "12.01", "CR", "sp2 arom as CQ but in HIS", "0.360"}, {"C", "12.01", "CT", "sp3 aliphatic C", "0.878"}, {"C", "12.01", "CV", "sp2 arom. 5 memb.ring w/1 N and 1 H (HIS)", "0.360"}, {"C", "12.01", "CW", "sp2 arom. 5 memb.ring w/1 N-H and 1 H (HIS)", "0.360"}, {"C", "12.01", "C*", "sp2 arom. 5 memb.ring w/1 subst. (TRP)", "0.360"}, {"C", "12.01", "CY", "nitrile C (Howard et al.JCC,16,243,1995)", "0.360"}, {"C", "12.01", "CZ", "sp C (Howard et al.JCC,16,243,1995)", "0.360"}, {"Ca", "40.08", "C0", "calcium"}, {"H", "1.008", "H", "H bonded to nitrogen atoms", "0.161"}, {"H", "1.008", "HC", "H aliph. bond. to C without electrwd.group", "0.135"}, {"H", "1.008", "H1", "H aliph. bond. to C with 1 electrwd. group", "0.135"}, {"H", "1.008", "H2", "H aliph. bond. to C with 2 electrwd.groups", "0.135"}, {"H", "1.008", "H3", "H aliph. bond. to C with 3 eletrwd.groups", "0.135"}, {"H", "1.008", "HA", "H arom. bond. to C without elctrwd. groups", "0.167"}, {"H", "1.008", "H4", "H arom. bond. to C with 1 electrwd. group", "0.167"}, {"H", "1.008", "H5", "H arom.at C with 2 elctrwd. gr,+HCOO group", "0.167"}, {"H", "1.008", "HO", "hydroxyl group", "0.135"}, {"H", "1.008", "HS", "hydrogen bonded to sulphur (pol?)", "0.135"}, {"H", "1.008", "HW", "H in TIP3P water", "0.000"}, {"H", "1.008", "HP", "H bonded to C next to positively charged gr", "0.135"}, {"H", "1.008", "HZ", "H bond sp C (Howard et al.JCC,16,243,1995)", "0.161"}, {"F", "19.00", "F", "fluorine", "0.320"}, {"Cl", "35.45", "Cl", "chlorine (Applequist)", "1.910"}, {"Br", "79.90", "Br", "bromine (Applequist)", "2.880"}, {"I", "126.9", "I", "iodine (Applequist)", "4.690"}, {"I", "35.45", "IM", "assumed to be Cl- (ion minus)", "3.235"}, {"I", "131.0", "IB", "ion w/ waters' for vacuum (Na+, 6H2O)", "'big"}, {"Mg", "24.305", "MG", "magnesium", "0.120"}, {"N", "14.01", "N", "sp2 nitrogen in amide groups", "0.530"}, {"N", "14.01", "NA", "sp2 N in 5 memb.ring w/H atom (HIS)", "0.530"}, {"N", "14.01", "NB", "sp2 N in 5 memb.ring w/LP (HIS,ADE,GUA)", "0.530"}, {"N", "14.01", "NC", "sp2 N in 6 memb.ring w/LP (ADE,GUA)", "0.530"}, {"N", "14.01", "N2", "sp2 N in amino groups", "0.530"}, {"N", "14.01", "N3", "sp3 N for charged amino groups (Lys, etc)", "0.530"}, {"N", "14.01", "NT", "sp3 N for amino groups amino groups", "0.530"}, {"N", "14.01", "N*", "sp2 N", "0.530"}, {"N", "14.01", "NY", "nitrile N (Howard et al.JCC,16,243,1995)", "0.530"}, {"O", "16.00", "O", "carbonyl group oxygen", "0.434"}, {"O", "16.00", "O2", "carboxyl and phosphate group oxygen", "0.434"}, {"O", "16.00", "OW", "oxygen in TIP3P water", "0.000"}, {"O", "16.00", "OH", "oxygen in hydroxyl group", "0.465"}, {"O", "16.00", "OS", "ether and ester oxygen", "0.465"}, {"P", "30.97", "P", "phosphate,pol:JACS,112,8543,90,K.J.Miller", "1.538"}, {"S", "32.06", "S", "S in disulfide linkage,pol:JPC,102,2399,98", "2.900"}, {"S", "32.06", "SH", "S in cystine", "2.900"}, {"Cu", "63.55", "CU", "copper"}, {"Fe", "55.00", "FE", "iron"}, {"Li", "6.94", "Li", "lithium, ions pol:J.PhysC,11,1541,(1978)", "0.029"}, {"I", "22.99", "IP", "assumed to be Na+ (ion plus)", "0.250"}, {"Na", "22.99", "Na", "Na+, ions pol:J.PhysC,11,1541,(1978)", "0.250"}, {"K", "39.10", "K", "potassium", "1.060"}, {"Rb", "85.47", "Rb", "rubidium"}, {"Cs", "132.91", "Cs", "cesium"}, {"Zn", "65.4", "Zn", "Zn2+"}, {"LP", "3.00", "LP", "lone pair", "0.000"}}; /* Non-bonded equivalence 0= Key_a, then equi with Key_a */ char * amber99_equi[2][15]= {{"N", "NA", "N2", "N*", "NC", "NB", "NT", "NY", " ", " ", " ", " ", " ", " ", " "}, {"C*", "CA", "CB", "CC", "CD", "CK", "CM", "CN", "CQ", "CR", "CV", "CW", "CY", "CZ", " "}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= Kb (kcal mol^-1 A^2), 3= R0 (A), 4= amber99 info V(R) = Kb x (R - R0)^2 */ char * amber99_bonds[116][5]= {{"OW", "HW", "553.0", "0.9572", "! TIP3P water"}, {"HW", "HW", "553.0", "1.5136", "TIP3P water"}, {"C", "C", "310.0", "1.525", "Junmei et al, 1999"}, {"C", "CA", "469.0", "1.409", "JCC,7,(1986),230; (not used any more in TYR)"}, {"C", "CB", "447.0", "1.419", "JCC,7,(1986),230; GUA"}, {"C", "CM", "410.0", "1.444", "JCC,7,(1986),230; THY,URA"}, {"C", "CT", "317.0", "1.522", "JCC,7,(1986),230; AA"}, {"C", "N", "490.0", "1.335", "JCC,7,(1986),230; AA"}, {"C", "N*", "424.0", "1.383", "JCC,7,(1986),230; CYT,URA"}, {"C", "NA", "418.0", "1.388", "JCC,7,(1986),230; GUA.URA"}, {"C", "NC", "457.0", "1.358", "JCC,7,(1986),230; CYT"}, {"C", "O", "570.0", "1.229", "JCC,7,(1986),230; AA,CYT,GUA,THY,URA"}, {"C", "O2", "656.0", "1.250", "JCC,7,(1986),230; GLU,ASP"}, {"C", "OH", "450.0", "1.364", "JCC,7,(1986),230; (not used any more for TYR)"}, {"C", "OS", "450.0", "1.323", "Junmei et al, 1999"}, {"C", "H4", "367.0", "1.080", "Junmei et al, 1999"}, {"C", "H5", "367.0", "1.080", "Junmei et al, 1999"}, {"CA", "CA", "469.0", "1.400", "JCC,7,(1986),230; BENZENE,PHE,TRP,TYR"}, {"CA", "CB", "469.0", "1.404", "JCC,7,(1986),230; ADE,TRP"}, {"CA", "CM", "427.0", "1.433", "JCC,7,(1986),230; CYT"}, {"CA", "CN", "469.0", "1.400", "JCC,7,(1986),230; TRP"}, {"CA", "CT", "317.0", "1.510", "JCC,7,(1986),230; PHE,TYR"}, {"CA", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; PHE,TRP,TYR"}, {"CA", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; no assigned"}, {"CA", "N2", "481.0", "1.340", "JCC,7,(1986),230; ARG,CYT,GUA"}, {"CA", "NA", "427.0", "1.381", "JCC,7,(1986),230; GUA"}, {"CA", "NC", "483.0", "1.339", "JCC,7,(1986),230; ADE,CYT,GUA"}, {"CA", "OH", "450.0", "1.364", "substituted for C-OH in tyr"}, {"CB", "CB", "520.0", "1.370", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "N*", "436.0", "1.374", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NB", "414.0", "1.391", "JCC,7,(1986),230; ADE,GUA"}, {"CB", "NC", "461.0", "1.354", "JCC,7,(1986),230; ADE,GUA"}, {"CD", "HA", "367.0", "1.080", "Junmei et al, 1999"}, {"CD", "CD", "469.0", "1.400", "Junmei et al, 1999"}, {"CD", "CM", "549.0", "1.350", "Junmei et al, 1999"}, {"CD", "CT", "317.0", "1.510", "Junmei et al, 1999"}, {"CK", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE,GUA"}, {"CK", "N*", "440.0", "1.371", "JCC,7,(1986),230; ADE,GUA"}, {"CK", "NB", "529.0", "1.304", "JCC,7,(1986),230; ADE,GUA"}, {"CM", "CM", "549.0", "1.350", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "CT", "317.0", "1.510", "JCC,7,(1986),230; THY"}, {"CM", "HA", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; CYT,URA"}, {"CM", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; not assigned"}, {"CM", "N*", "448.0", "1.365", "JCC,7,(1986),230; CYT,THY,URA"}, {"CM", "OS", "480.0", "1.240", "Junmei et al, 1999"}, {"CQ", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; ADE"}, {"CQ", "NC", "502.0", "1.324", "JCC,7,(1986),230; ADE"}, {"CT", "CT", "310.0", "1.526", "JCC,7,(1986),230; AA, SUGARS"}, {"CT", "HC", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, SUGARS"}, {"CT", "H1", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; AA, RIBOSE"}, {"CT", "H2", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; SUGARS"}, {"CT", "H3", "340.0", "1.090", "changed from 331 bsd on NMA nmodes; not assigned"}, {"CT", "HP", "340.0", "1.090", "changed from 331; AA-lysine, methyl ammonium cation"}, {"CT", "N*", "337.0", "1.475", "JCC,7,(1986),230; ADE,CYT,GUA,THY,URA"}, {"CT", "N2", "337.0", "1.463", "JCC,7,(1986),230; ARG"}, {"CT", "OH", "320.0", "1.410", "JCC,7,(1986),230; SUGARS"}, {"CT", "OS", "320.0", "1.410", "JCC,7,(1986),230; NUCLEIC ACIDS"}, {"C*", "HC", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes, not needed AA"}, {"C*", "CB", "388.0", "1.459", "JCC,7,(1986),230; TRP"}, {"C*", "CT", "317.0", "1.495", "JCC,7,(1986),230; TRP"}, {"C*", "CW", "546.0", "1.352", "JCC,7,(1986),230; TRP"}, {"CB", "CN", "447.0", "1.419", "JCC,7,(1986),230; TRP"}, {"CC", "CT", "317.0", "1.504", "JCC,7,(1986),230; HIS"}, {"CC", "CV", "512.0", "1.375", "JCC,7,(1986),230; HIS(delta)"}, {"CC", "CW", "518.0", "1.371", "JCC,7,(1986),230; HIS(epsilon)"}, {"CC", "NA", "422.0", "1.385", "JCC,7,(1986),230; HIS"}, {"CC", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CN", "NA", "428.0", "1.380", "JCC,7,(1986),230; TRP"}, {"CR", "H5", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS"}, {"CR", "NA", "477.0", "1.343", "JCC,7,(1986),230; HIS"}, {"CR", "NB", "488.0", "1.335", "JCC,7,(1986),230; HIS"}, {"CT", "N", "337.0", "1.449", "JCC,7,(1986),230; AA"}, {"CT", "N3", "367.0", "1.471", "JCC,7,(1986),230; LYS"}, {"CT", "NT", "367.0", "1.471", "for neutral amines"}, {"CT", "S", "227.0", "1.810", "changed from 222.0 based on dimethylS nmodes"}, {"CT", "SH", "237.0", "1.810", "changed from 222.0 based on methanethiol nmodes"}, {"CT", "CY", "400.0", "1.458", "Howard et al JCC.16,243,1995"}, {"CT", "CZ", "400.0", "1.459", "Howard et al JCC,16,243,1995"}, {"CV", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes; HIS"}, {"CV", "NB", "410.0", "1.394", "JCC,7,(1986),230; HIS"}, {"CW", "H4", "367.0", "1.080", "changed from 340. bsd on C6H6 nmodes;HIS(epsilon,+)"}, {"CW", "NA", "427.0", "1.381", "JCC,7,(1986),230; HIS,TRP"}, {"CY", "NY", "600.0", "1.150", "Howard et al JCC,16,243,1995"}, {"CZ", "CZ", "600.0", "1.206", "Howard et al JCC,16,243,1995"}, {"CZ", "HZ", "400.0", "1.056", "Howard et al JCC,16,243,1995"}, {"O2", "P", "525.0", "1.480", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OH", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"OS", "P", "230.0", "1.610", "JCC,7,(1986),230; NA PHOSPHATES"}, {"H", "N2", "434.0", "1.010", "JCC,7,(1986),230; ADE,CYT,GUA,ARG"}, {"H", "N*", "434.0", "1.010", "for plain unmethylated bases ADE,CYT,GUA,ARG"}, {"H", "NA", "434.0", "1.010", "JCC,7,(1986),230; GUA,URA,HIS"}, {"H", "N", "434.0", "1.010", "JCC,7,(1986),230; AA"}, {"H", "N3", "434.0", "1.010", "JCC,7,(1986),230; LYS"}, {"H", "NT", "434.0", "1.010", "for neutral amines"}, {"HO", "OH", "553.0", "0.960", "JCC,7,(1986),230; SUGARS,SER,TYR"}, {"HO", "OS", "553.0", "0.960", "JCC,7,(1986),230; NUCLEOTIDE ENDS"}, {"HS", "SH", "274.0", "1.336", "JCC,7,(1986),230; CYS"}, {"S", "S", "166.0", "2.038", "JCC,7,(1986),230; CYX (SCHERAGA)"}, {"F", "CT", "367.0", "1.380", "JCC,13,(1992),963;CF4; R0=1.332 FOR CHF3"}, {"Cl", "CT", "232.0", "1.766", "6-31g* opt"}, {"Br", "CT", "159.0", "1.944", "Junmei et al,99"}, {"I", "CT", "148.0", "2.166", "Junmei et al,99"}, {"F", "CA", "386.0", "1.359", "Junmei et al,99"}, {"Cl", "CA", "193.0", "1.727", "Junmei et al,99"}, {"I", "CA", "171.0", "2.075", "Junmei et al,99"}, {"Br", "CA", "172.0", "1.890", "Junmei et al,99"}, {"LP", "O", "600.0", "0.200", "or 0.35"}, {"LP", "OH", "600.0", "0.200", "or 0.35"}, {"LP", "OS", "600.0", "0.200", "or 0.35"}, {"LP", "N3", "600.0", "0.200", "or 0.35"}, {"LP", "NT", "600.0", "0.200", "or 0.35"}, {"LP", "NB", "600.0", "0.200", "or 0.35 histidines, nucleic acids"}, {"LP", "NC", "600.0", "0.200", "or 0.35 nucleic acids"}, {"LP", "S", "600.0", "0.700", "cys,cyx,met"}, {"LP", "SH", "600.0", "0.700", "cys,cyx"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 */ char * amber99_angles[281][6]= {{"HW", "OW", "HW", "100.", "104.52", "TIP3P water"}, {"HW", "HW", "OW", "0.", "127.74", "(found in crystallographic water with 3 bonds)"}, {"C", "C", "O", "80.0", "120.00", "Junmei et al, 1999 acrolein"}, {"C", "C", "OH", "80.0", "120.00", "Junmei et al, 1999"}, {"CA", "C", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA"}, {"CA", "C", "OH", "70.0", "120.00", "AA (not used in tyr)"}, {"CB", "C", "NA", "70.0", "111.30", "NA"}, {"CB", "C", "O", "80.0", "128.80", " "}, {"CM", "C", "NA", "70.0", "114.10", " "}, {"CM", "C", "O", "80.0", "125.30", " "}, {"CT", "C", "O", "80.0", "120.40", " "}, {"CT", "C", "O2", "70.0", "117.00", " "}, {"CT", "C", "N", "70.0", "116.60", "AA general"}, {"CT", "C", "CT", "63.0", "117.00", "Junmei et al, 1999"}, {"CT", "C", "OS", "80.0", "115.00", "Junmei et al, 1999"}, {"CT", "C", "OH", "80.0", "110.00", "Junmei et al, 1999"}, {"N*", "C", "NA", "70.0", "115.40", " "}, {"N*", "C", "NC", "70.0", "118.60", " "}, {"N*", "C", "O", "80.0", "120.90", " "}, {"NA", "C", "O", "80.0", "120.60", " "}, {"NC", "C", "O", "80.0", "122.50", " "}, {"N", "C", "O", "80.0", "122.90", "AA general"}, {"O", "C", "O", "80.0", "126.00", "AA COO- terminal residues"}, {"O", "C", "OH", "80.0", "120.00", "(check with Junmei for: theta0:120.0?)"}, {"O", "C", "OS", "80.0", "125.00", "Junmei et al, 1999"}, {"O2", "C", "O2", "80.0", "126.00", "AA GLU (SCH JPC 79,2379)"}, {"H4", "C", "C", "50.0", "120.00", "Junmei et al, 1999"}, {"H4", "C", "CM", "50.0", "115.00", "Junmei et al, 1999"}, {"H4", "C", "CT", "50.0", "115.00", "Junmei et al, 1999"}, {"H4", "C", "O", "50.0", "120.00", "Junmei et al, 1999"}, {"H4", "C", "OH", "50.0", "120.00", "Junmei et al, 1999"}, {"H5", "C", "N", "50.0", "120.00", "Junmei et al, 1999"}, {"H5", "C", "O", "50.0", "119.00", "Junmei et al, 1999"}, {"H5", "C", "OH", "50.0", "107.00", "Junmei et al, 1999"}, {"H5", "C", "OS", "50.0", "107.00", "Junmei et al, 1999"}, {"C", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"C", "CA", "HA", "50.0", "120.00", "AA (not used in tyr)"}, {"CA", "CA", "CA", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CB", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes"}, {"CA", "CA", "CT", "70.0", "120.00", " "}, {"CA", "CA", "HA", "50.0", "120.00", " "}, {"CA", "CA", "H4", "50.0", "120.00", " "}, {"CA", "CA", "OH", "70.0", "120.00", "replacement in tyr"}, {"CA", "CA", "CN", "63.0", "120.00", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CB", "CA", "HA", "50.0", "120.00", " "}, {"CB", "CA", "H4", "50.0", "120.00", " "}, {"CB", "CA", "N2", "70.0", "123.50", " "}, {"CB", "CA", "NC", "70.0", "117.30", " "}, {"CM", "CA", "N2", "70.0", "120.10", " "}, {"CM", "CA", "NC", "70.0", "121.50", " "}, {"CN", "CA", "HA", "50.0", "120.00", "AA trp"}, {"NA", "CA", "NC", "70.0", "123.30", " "}, {"N2", "CA", "NA", "70.0", "116.00", " "}, {"N2", "CA", "NC", "70.0", "119.30", " "}, {"N2", "CA", "N2", "70.0", "120.00", "AA arg"}, {"F", "CA", "CA", "70.0", "121.00", "Junmei et al,99"}, {"Cl", "CA", "CA", "70.0", "118.80", "Junmei et al,99"}, {"Br", "CA", "CA", "70.0", "118.80", "Junmei et al,99"}, {"I", "CA", "CA", "70.0", "118.80", "Junmei et al,99"}, {"C", "CB", "CB", "63.0", "119.20", "changed from 85.0 bsd on C6H6 nmodes; NA gua"}, {"C", "CB", "NB", "70.0", "130.00", " "}, {"CA", "CB", "CB", "63.0", "117.30", "changed from 85.0 bsd on C6H6 nmodes; NA ade"}, {"CA", "CB", "NB", "70.0", "132.40", " "}, {"CB", "CB", "N*", "70.0", "106.20", " "}, {"CB", "CB", "NB", "70.0", "110.40", " "}, {"CB", "CB", "NC", "70.0", "127.70", " "}, {"C*", "CB", "CA", "63.0", "134.90", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"C*", "CB", "CN", "63.0", "108.80", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CB", "CN", "63.0", "116.20", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"N*", "CB", "NC", "70.0", "126.20", " "}, {"CD", "CD", "CM", "63.0", "120.00", "Junmei et al, 1999"}, {"CD", "CD", "CT", "70.0", "120.00", "Junmei et al, 1999"}, {"CM", "CD", "CT", "70.0", "120.00", "Junmei et al, 1999"}, {"HA", "CD", "HA", "35.0", "119.00", "Junmei et al, 1999"}, {"HA", "CD", "CD", "50.0", "120.00", "Junmei et al, 1999"}, {"HA", "CD", "CM", "50.0", "120.00", "Junmei et al, 1999"}, {"H5", "CK", "N*", "50.0", "123.05", " "}, {"H5", "CK", "NB", "50.0", "123.05", " "}, {"N*", "CK", "NB", "70.0", "113.90", " "}, {"C", "CM", "CM", "63.0", "120.70", "changed from 85.0 bsd on C6H6 nmodes; NA thy"}, {"C", "CM", "CT", "70.0", "119.70", " "}, {"C", "CM", "HA", "50.0", "119.70", " "}, {"C", "CM", "H4", "50.0", "119.70", " "}, {"CA", "CM", "CM", "63.0", "117.00", "changed from 85.0 bsd on C6H6 nmodes; NA cyt"}, {"CA", "CM", "HA", "50.0", "123.30", " "}, {"CA", "CM", "H4", "50.0", "123.30", " "}, {"CM", "CM", "CT", "70.0", "119.70", " "}, {"CM", "CM", "HA", "50.0", "119.70", " "}, {"CM", "CM", "H4", "50.0", "119.70", " "}, {"CM", "CM", "N*", "70.0", "121.20", " "}, {"CM", "CM", "OS", "80.0", "125.00", "Junmei et al, 1999"}, {"H4", "CM", "N*", "50.0", "119.10", " "}, {"H4", "CM", "OS", "50.0", "113.00", "Junmei et al, 1999"}, {"HA", "CM", "HA", "35.0", "120.00", "Junmei et al, 1999"}, {"HA", "CM", "CD", "50.0", "120.00", "Junmei et al, 1999"}, {"HA", "CM", "CT", "50.0", "120.00", "Junmei et al, 1999"}, {"NC", "CQ", "NC", "70.0", "129.10", " "}, {"H5", "CQ", "NC", "50.0", "115.45", " "}, {"H1", "CT", "H1", "35.0", "109.50", " "}, {"H1", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OH", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"H1", "CT", "CM", "50.0", "109.50", "Junmei et al, 1999"}, {"H1", "CT", "CY", "50.0", "110.00", "Junmei et al, 1999"}, {"H1", "CT", "CZ", "50.0", "110.00", "Junmei et al, 1999"}, {"H1", "CT", "N", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"H1", "CT", "S", "50.0", "109.50", "AA cys changed based on NMA nmodes"}, {"H1", "CT", "SH", "50.0", "109.50", "AA cyx changed based on NMA nmodes"}, {"H1", "CT", "N2", "50.0", "109.50", "AA arg changed based on NMA nmodes"}, {"H1", "CT", "NT", "50.0", "109.50", "neutral amines"}, {"H2", "CT", "H2", "35.0", "109.50", "AA lys"}, {"H2", "CT", "N*", "50.0", "109.50", "changed based on NMA nmodes"}, {"H2", "CT", "OS", "50.0", "109.50", "changed based on NMA nmodes"}, {"HP", "CT", "HP", "35.0", "109.50", "AA lys, ch3nh4+"}, {"HP", "CT", "N3", "50.0", "109.50", "AA lys, ch3nh3+, changed based on NMA nmodes"}, {"HC", "CT", "HC", "35.0", "109.50", " "}, {"HC", "CT", "CM", "50.0", "109.50", "changed based on NMA nmodes"}, {"HC", "CT", "CD", "50.0", "109.50", "Junmei et al, 1999"}, {"HC", "CT", "CZ", "50.0", "110.00", "Junmei et al, 1999"}, {"C", "CT", "H1", "50.0", "109.50", "AA general changed based on NMA nmodes"}, {"C", "CT", "HP", "50.0", "109.50", "AA zwitterion changed based on NMA nmodes"}, {"C", "CT", "HC", "50.0", "109.50", "AA gln changed based on NMA nmodes"}, {"C", "CT", "N", "63.0", "110.10", "AA general"}, {"C", "CT", "N3", "80.0", "111.20", "AA amino terminal residues"}, {"C", "CT", "CT", "63.0", "111.10", "AA general"}, {"C", "CT", "OS", "60.0", "109.50", "Junmei et al, 1999"}, {"CA", "CT", "HC", "50.0", "109.50", "AA tyr changed based on NMA nmodes"}, {"CC", "CT", "CT", "63.0", "113.10", "AA his"}, {"CC", "CT", "HC", "50.0", "109.50", "AA his changed based on NMA nmodes"}, {"CM", "CT", "CT", "63.0", "111.00", "Junmei et al, 1999 (last change: Mar24,99)"}, {"CM", "CT", "OS", "50.0", "109.50", "Junmei et al, 1999"}, {"CT", "CT", "CT", "40.0", "109.50", " "}, {"CT", "CT", "HC", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H1", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "H2", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "HP", "50.0", "109.50", "changed based on NMA nmodes"}, {"CT", "CT", "N*", "50.0", "109.50", " "}, {"CT", "CT", "OH", "50.0", "109.50", " "}, {"CT", "CT", "OS", "50.0", "109.50", " "}, {"CT", "CT", "S", "50.0", "114.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "CT", "SH", "50.0", "108.60", "AA cys"}, {"CT", "CT", "CA", "63.0", "114.00", "AA phe tyr (SCH JPC 79,2379)"}, {"CT", "CT", "N2", "80.0", "111.20", "AA arg (JCP 76, 1439)"}, {"CT", "CT", "N", "80.0", "109.70", "AA ala, general (JACS 94, 2657)"}, {"CT", "CT", "N3", "80.0", "111.20", "AA lys (JCP 76, 1439)"}, {"CT", "CT", "NT", "80.0", "111.20", "neutral amines"}, {"CT", "CT", "CY", "63.0", "110.00", "Junmei et al, 1999"}, {"CT", "CT", "CZ", "63.0", "110.00", "Junmei et al, 1999"}, {"C*", "CT", "CT", "63.0", "115.60", "AA trp"}, {"C*", "CT", "HC", "50.0", "109.50", "AA trp changed based on NMA nmodes"}, {"OS", "CT", "OS", "160.0", "101.00", "Junmei et al, 1999"}, {"OS", "CT", "CY", "50.0", "110.00", "Junmei et al, 1999"}, {"OS", "CT", "CZ", "50.0", "110.00", "Junmei et al, 1999"}, {"OS", "CT", "N*", "50.0", "109.50", " "}, {"F", "CT", "F", "77.0", "109.10", "JCC,13,(1992),963;"}, {"F", "CT", "H1", "50.0", "109.50", "JCC,13,(1992),963;"}, {"F", "CT", "CT", "50.0", "109.00", " "}, {"F", "CT", "H2", "50.0", "109.50", " "}, {"Cl", "CT", "CT", "50.0", "108.50", "(6-31g* opt value)"}, {"Cl", "CT", "H1", "50.0", "108.50", "(6-31g* opt value)"}, {"Br", "CT", "CT", "50.0", "108.00", "Junmei et al 99"}, {"Br", "CT", "H1", "50.0", "106.50", "Junmei et al 99"}, {"I", "CT", "CT", "50.0", "106.00", "Junmei et al,99"}, {"CT", "CC", "NA", "70.0", "120.00", "AA his"}, {"CT", "CC", "CV", "70.0", "120.00", "AA his"}, {"CT", "CC", "NB", "70.0", "120.00", "AA his"}, {"CV", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NA", "70.0", "120.00", "AA his"}, {"CW", "CC", "NB", "70.0", "120.00", "AA his"}, {"CT", "CC", "CW", "70.0", "120.00", "AA his"}, {"H5", "CR", "NA", "50.0", "120.00", "AA his"}, {"H5", "CR", "NB", "50.0", "120.00", "AA his"}, {"NA", "CR", "NA", "70.0", "120.00", "AA his"}, {"NA", "CR", "NB", "70.0", "120.00", "AA his"}, {"CC", "CV", "H4", "50.0", "120.00", "AA his"}, {"CC", "CV", "NB", "70.0", "120.00", "AA his"}, {"H4", "CV", "NB", "50.0", "120.00", "AA his"}, {"CC", "CW", "H4", "50.0", "120.00", "AA his"}, {"CC", "CW", "NA", "70.0", "120.00", "AA his"}, {"C*", "CW", "H4", "50.0", "120.00", "AA trp"}, {"C*", "CW", "NA", "70.0", "108.70", "AA trp"}, {"H4", "CW", "NA", "50.0", "120.00", "AA his"}, {"CB", "C*", "CT", "70.0", "128.60", "AA trp"}, {"CB", "C*", "CW", "63.0", "106.40", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CT", "C*", "CW", "70.0", "125.00", "AA trp"}, {"CA", "CN", "CB", "63.0", "122.70", "changed from 85.0 bsd on C6H6 nmodes; AA trp"}, {"CA", "CN", "NA", "70.0", "132.80", "AA trp"}, {"CB", "CN", "NA", "70.0", "104.40", "AA trp"}, {"CT", "CY", "NY", "80.0", "180.00", "Junmei et al, 1999"}, {"CT", "CZ", "CZ", "80.0", "180.00", "Junmei et al, 1999"}, {"CZ", "CZ", "HZ", "50.0", "180.00", "Junmei et al, 1999"}, {"C", "N", "CT", "50.0", "121.90", "AA general"}, {"C", "N", "H", "50.0", "120.00", "AA general, gln, asn,changed based on NMA nmodes"}, {"CT", "N", "H", "50.0", "118.04", "AA general, changed based on NMA nmodes"}, {"CT", "N", "CT", "50.0", "118.00", "AA pro (DETAR JACS 99,1232)"}, {"H", "N", "H", "35.0", "120.00", "ade,cyt,gua,gln,asn **"}, {"C", "N*", "CM", "70.0", "121.60", " "}, {"C", "N*", "CT", "70.0", "117.60", " "}, {"C", "N*", "H", "50.0", "119.20", "changed based on NMA nmodes"}, {"CB", "N*", "CK", "70.0", "105.40", " "}, {"CB", "N*", "CT", "70.0", "125.80", " "}, {"CB", "N*", "H", "50.0", "125.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CK", "N*", "CT", "70.0", "128.80", " "}, {"CK", "N*", "H", "50.0", "128.80", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CM", "N*", "CT", "70.0", "121.20", " "}, {"CM", "N*", "H", "50.0", "121.20", "for unmethylated n.a. bases,chngd bsd NMA nmodes"}, {"CA", "N2", "H", "50.0", "120.00", " "}, {"CA", "N2", "CT", "50.0", "123.20", "AA arg"}, {"CT", "N2", "H", "50.0", "118.40", "AA arg"}, {"H", "N2", "H", "35.0", "120.00", " "}, {"CT", "N3", "H", "50.0", "109.50", "AA lys, changed based on NMA nmodes"}, {"CT", "N3", "CT", "50.0", "109.50", "AA pro/nt"}, {"H", "N3", "H", "35.0", "109.50", "AA lys, AA(end)"}, {"CT", "NT", "H", "50.0", "109.50", "neutral amines"}, {"CT", "NT", "CT", "50.0", "109.50", "neutral amines"}, {"H", "NT", "H", "35.0", "109.50", "neutral amines"}, {"C", "NA", "C", "70.0", "126.40", " "}, {"C", "NA", "CA", "70.0", "125.20", " "}, {"C", "NA", "H", "50.0", "116.80", "changed based on NMA nmodes"}, {"CA", "NA", "H", "50.0", "118.00", "changed based on NMA nmodes"}, {"CC", "NA", "CR", "70.0", "120.00", "AA his"}, {"CC", "NA", "H", "50.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CR", "NA", "CW", "70.0", "120.00", "AA his"}, {"CR", "NA", "H", "50.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CW", "NA", "H", "50.0", "120.00", "AA his, changed based on NMA nmodes"}, {"CN", "NA", "CW", "70.0", "111.60", "AA trp"}, {"CN", "NA", "H", "50.0", "123.10", "AA trp, changed based on NMA nmodes"}, {"CB", "NB", "CK", "70.0", "103.80", " "}, {"CC", "NB", "CR", "70.0", "117.00", "AA his"}, {"CR", "NB", "CV", "70.0", "117.00", "AA his"}, {"C", "NC", "CA", "70.0", "120.50", " "}, {"CA", "NC", "CB", "70.0", "112.20", " "}, {"CA", "NC", "CQ", "70.0", "118.60", " "}, {"CB", "NC", "CQ", "70.0", "111.00", " "}, {"C", "OH", "HO", "50.0", "113.00", "(not used in tyr anymore)"}, {"CA", "OH", "HO", "50.0", "113.00", "replacement in tyr"}, {"CT", "OH", "HO", "55.0", "108.50", " "}, {"HO", "OH", "P", "45.0", "108.50", " "}, {"C", "OS", "CT", "60.0", "117.00", "Junmei et al, 1999"}, {"CM", "OS", "CT", "60.0", "117.00", "Junmei et al, 1999"}, {"CT", "OS", "CT", "60.0", "109.50", " "}, {"CT", "OS", "P", "100.0", "120.50", " "}, {"P", "OS", "P", "100.0", "120.50", " "}, {"O2", "P", "OH", "45.0", "108.23", " "}, {"O2", "P", "O2", "140.0", "119.90", " "}, {"O2", "P", "OS", "100.0", "108.23", " "}, {"OH", "P", "OS", "45.0", "102.60", " "}, {"OS", "P", "OS", "45.0", "102.60", " "}, {"CT", "S", "CT", "62.0", "98.90", "AA met"}, {"CT", "S", "S", "68.0", "103.70", "AA cyx (SCHERAGA JPC 79,1428)"}, {"CT", "SH", "HS", "43.0", "96.00", "changed from 44.0 based on methanethiol nmodes"}, {"HS", "SH", "HS", "35.0", "92.07", "AA cys"}, {"CB", "NB", "LP", "150.0", "126.0", "NA"}, {"CC", "NB", "LP", "150.0", "126.0", "his,NA"}, {"CK", "NB", "LP", "150.0", "126.0", "NA"}, {"CR", "NB", "LP", "150.0", "126.0", "his,NA"}, {"CV", "NB", "LP", "150.0", "126.0", "his,NA"}, {"C", "NC", "LP", "150.0", "120.0", "NA"}, {"CA", "NC", "LP", "150.0", "120.0", "NA"}, {"CB", "NC", "LP", "150.0", "120.0", "NA"}, {"CQ", "NC", "LP", "150.0", "120.0", "NA"}, {"CT", "N3", "LP", "150.0", "109.5", "in neutral lysine"}, {"H", "N3", "LP", "150.0", "109.5", "in neutral lysine"}, {"CT", "NT", "LP", "150.0", "109.5", " "}, {"H", "NT", "LP", "150.0", "109.5", " "}, {"C", "O", "LP", "150.0", "120.0", " "}, {"LP", "O", "LP", "150.0", "120.0", " "}, {"C", "OH", "LP", "150.0", "120.0", " "}, {"CT", "OH", "LP", "150.0", "109.5", " "}, {"HO", "OH", "LP", "150.0", "109.5", " "}, {"LP", "OH", "LP", "150.0", "109.5", " "}, {"C", "OS", "LP", "150.0", "109.5", " "}, {"CM", "OS", "LP", "150.0", "109.5", "methyl vinyl ether"}, {"CT", "OS", "LP", "150.0", "109.5", " "}, {"LP", "OS", "LP", "150.0", "109.5", " "}, {"CT", "S", "LP", "150.0", "90.0", "cys,cyx,met"}, {"CT", "SH", "LP", "150.0", "90.0", "cys,cyx,met"}, {"P", "OS", "LP", "150.0", "109.5", "NA"}, {"LP", "S", "LP", "150.0", "180.0", "cys,cyx,met"}, {"LP", "SH", "LP", "150.0", "180.0", "cys,cyx,met"}, {"HS", "SH", "LP", "150.0", "90.0", "cys"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= delta (deg), 6= n (multi), 7= amber99 info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * amber99_dihedrals[164][9]= {{"X", "C", "C", "X", "4", "14.50", "180.0", "2.", "Junmei et al, 1999"}, {"X", "C", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CB", "X", "4", "12.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CM", "X", "4", "8.70", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "C", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "N", "X", "4", "10.00", "180.0", "2.", "AA,NMA"}, {"X", "C", "N*", "X", "4", "5.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NA", "X", "4", "5.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "NC", "X", "2", "8.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "C", "O", "X", "4", "11.20", "180.0", "2.", "Junmei et al, 1999"}, {"X", "C", "OH", "X", "2", "4.60", "180.0", "2.", "Junmei et al, 1999"}, {"X", "C", "OS", "X", "2", "5.40", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CA", "CA", "X", "4", "14.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CB", "X", "4", "14.00", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CM", "X", "4", "10.20", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CA", "CN", "X", "4", "14.50", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "N2", "X", "4", "9.60", "180.0", "2.", "reinterpolated 93'"}, {"X", "CA", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "NC", "X", "2", "9.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CA", "OH", "X", "2", "1.80", "180.0", "2.", "Junmei et al, 99"}, {"X", "CB", "CB", "X", "4", "21.80", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CB", "CN", "X", "4", "12.00", "180.0", "2.", "reinterpolated 93'"}, {"X", "CB", "N*", "X", "4", "6.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NB", "X", "2", "5.10", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CB", "NC", "X", "2", "8.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "CV", "X", "4", "20.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "CW", "X", "4", "21.50", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CC", "NA", "X", "4", "5.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CC", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CD", "CD", "X", "4", "4.00", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CD", "CT", "X", "6", "0.00", "0.0", "2.", "Junmei et al, 1999"}, {"X", "CD", "CM", "X", "4", "26.60", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CK", "N*", "X", "4", "6.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CK", "NB", "X", "2", "20.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "CM", "X", "4", "26.60", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CM", "CT", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CM", "N*", "X", "4", "7.40", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CM", "OS", "X", "2", "2.10", "180.0", "2.", "Junmei et al, 1999"}, {"X", "CN", "NA", "X", "4", "6.10", "180.0", "2.", "reinterpolated 93'"}, {"X", "CQ", "NC", "X", "2", "13.60", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "CT", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "CY", "X", "3", "0.00", "0.0", "1.", "Junmei et al, 1999"}, {"X", "CT", "CZ", "X", "3", "0.00", "0.0", "1.", "Junmei et al, 1999"}, {"X", "CT", "N", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N*", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N2", "X", "6", "0.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "NT", "X", "6", "1.80", "0.0", "3.", "Junmei et al, 1999"}, {"X", "CT", "N3", "X", "9", "1.40", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OH", "X", "3", "0.50", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "OS", "X", "3", "1.15", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "S", "X", "3", "1.00", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "CT", "SH", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "C*", "CB", "X", "4", "6.70", "180.0", "2.", "intrpol.bsd.onC6H6aa"}, {"X", "C*", "CT", "X", "6", "0.00", "0.0", "2.", "JCC,7,(1986),230"}, {"X", "C*", "CW", "X", "4", "26.10", "180.0", "2.", "intrpol.bsd.on C6H6"}, {"X", "CR", "NA", "X", "4", "9.30", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CR", "NB", "X", "2", "10.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CV", "NB", "X", "2", "4.80", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "CW", "NA", "X", "4", "6.00", "180.0", "2.", "JCC,7,(1986),230"}, {"X", "OH", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"X", "OS", "P", "X", "3", "0.75", "0.0", "3.", "JCC,7,(1986),230"}, {"N", "CT", "C", "N", "1", "1.700", "180.000", "-1.", " "}, {"N", "CT", "C", "N", "1", "2.000", "180.000", "2.", " "}, {"C", "N", "CT", "C", "1", "0.850", "180.000", "-2.", " "}, {"C", "N", "CT", "C", "1", "0.800", "0.000", "1.", " "}, {"CT", "CT", "N", "C", "1", "0.50", "180.0", "-4.", "phi,psi,parm94"}, {"CT", "CT", "N", "C", "1", "0.15", "180.0", "-3.", "phi,psi,parm94"}, {"CT", "CT", "N", "C", "1", "0.00", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "CT", "N", "C", "1", "0.53", "0.0", "1.", "phi,psi,parm94"}, {"CT", "CT", "C", "N", "1", "0.100", "0.0", "-4.", "phi,psi,parm94"}, {"CT", "CT", "C", "N", "1", "0.07", "0.0", "2.", "phi,psi,parm94"}, {"H", "N", "C", "O", "1", "2.50", "180.0", "-2.", "JCC,7,(1986),230"}, {"H", "N", "C", "O", "1", "2.00", "0.0", "1.", "J.C.cistrans-NMA DE"}, {"CT", "S", "S", "CT", "1", "3.50", "0.0", "-2.", "JCC,7,(1986),230"}, {"CT", "S", "S", "CT", "1", "0.60", "0.0", "3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OH", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"OS", "P", "OS", "CT", "1", "0.25", "0.0", "-3.", "JCC,7,(1986),230"}, {"OS", "P", "OS", "CT", "1", "1.20", "0.0", "2.", "gg and gt ene.631g*/mp2"}, {"H1", "CT", "C", "O", "1", "0.80", "0.0", "-1.", "Junmei et al, 1999"}, {"H1", "CT", "C", "O", "1", "0.00", "0.0", "-2.", "Explicit of wild card X-C-CT-X"}, {"H1", "CT", "C", "O", "1", "0.08", "180.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "C", "O", "1", "0.80", "0.0", "-1.", "Junmei et al, 1999"}, {"HC", "CT", "C", "O", "1", "0.00", "0.0", "-2.", "Explicit of wild card X-C-CT-X"}, {"HC", "CT", "C", "O", "1", "0.08", "180.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "HC", "1", "0.15", "0.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "CT", "1", "0.16", "0.0", "3.", "Junmei et al, 1999"}, {"HC", "CT", "CM", "CM", "1", "0.38", "180.0", "-3.", "Junmei et al, 1999"}, {"HC", "CT", "CM", "CM", "1", "1.15", "0.0", "1.", "Junmei et al, 1999"}, {"HO", "OH", "CT", "CT", "1", "0.16", "0.0", "-3.", "Junmei et al, 1999"}, {"HO", "OH", "CT", "CT", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HO", "OH", "C", "O", "1", "2.30", "180.0", "-2.", "Junmei et al, 1999"}, {"HO", "OH", "C", "O", "1", "1.90", "0.0", "1.", "Junmei et al, 1999"}, {"CM", "CM", "C", "O", "1", "2.175", "180.0", "-2.", "Junmei et al, 1999"}, {"CM", "CM", "C", "O", "1", "0.30", "0.0", "3.", "Junmei et al, 1999"}, {"CT", "CM", "CM", "CT", "1", "6.65", "180.0", "-2.", "Junmei et al, 1999"}, {"CT", "CM", "CM", "CT", "1", "1.90", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "CT", "CT", "CT", "1", "0.18", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "CT", "CT", "CT", "1", "0.25", "180.0", "-2.", "Junmei et al, 1999"}, {"CT", "CT", "CT", "CT", "1", "0.20", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "CT", "NT", "CT", "1", "0.30", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "CT", "NT", "CT", "1", "0.48", "180.0", "2.", "Junmei et al, 1999"}, {"CT", "CT", "OS", "CT", "1", "0.383", "0.0", "-3.", " "}, {"CT", "CT", "OS", "CT", "1", "0.1", "180.0", "2.", " "}, {"CT", "CT", "OS", "C", "1", "0.383", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "CT", "OS", "C", "1", "0.80", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "OS", "1", "0.10", "0.0", "-3.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "OS", "1", "0.85", "180.0", "-2.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "OS", "1", "1.35", "180.0", "1.", "Junmei et al, 1999"}, {"CT", "OS", "CT", "N*", "1", "0.383", "0.0", "-3.", "parm98.dat, TC,PC,PAK"}, {"CT", "OS", "CT", "N*", "1", "0.65", "0.0", "2.", "Piotr et al."}, {"CT", "CZ", "CZ", "HZ", "1", "0.00", "0.0", "1.", "Junmei et al, 1999"}, {"O", "C", "OS", "CT", "1", "2.70", "180.0", "-2.", "Junmei et al, 1999"}, {"O", "C", "OS", "CT", "1", "1.40", "180.0", "1.", "Junmei et al, 1999"}, {"OS", "CT", "N*", "CK", "1", "0.00", "000.0", "-2.", "parm98, TC,PC,PAK"}, {"OS", "CT", "N*", "CK", "1", "2.50", "0.0", "1.", "parm98, TC,PC,PAK"}, {"OS", "CT", "N*", "CM", "1", "0.00", "000.0", "-2.", "parm98, TC,PC,PAK"}, {"OS", "CT", "N*", "CM", "1", "2.50", "0.0", "1.", "parm98, TC,PC,PAK"}, {"OS", "CT", "CT", "OS", "1", "0.144", "0.0", "-3.", "parm98, TC,PC,PAK"}, {"OS", "CT", "CT", "OS", "1", "1.175", "0.0", "2.", "Piotr et al."}, {"OS", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "parm98, TC,PC,PAK"}, {"OS", "CT", "CT", "OH", "1", "1.175", "0.0", "2.", "parm98, TC,PC,PAK"}, {"OH", "CT", "CT", "OH", "1", "0.144", "0.0", "-3.", "parm98, TC,PC,PAK"}, {"OH", "CT", "CT", "OH", "1", "1.175", "0.0", "2.", "parm98, TC,PC,PAK"}, {"F", "CT", "CT", "F", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"F", "CT", "CT", "F", "1", "1.20", "180.0", "1.", "Junmei et al, 1999"}, {"Cl", "CT", "CT", "Cl", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"Cl", "CT", "CT", "Cl", "1", "0.45", "180.0", "1.", "Junmei et al, 1999"}, {"Br", "CT", "CT", "Br", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"Br", "CT", "CT", "Br", "1", "0.00", "180.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "OS", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "OS", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "OH", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "OH", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "F", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "F", "1", "0.19", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "Cl", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "Cl", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "CT", "Br", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"H1", "CT", "CT", "Br", "1", "0.55", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "OS", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "OS", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "OH", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "OH", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "F", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "F", "1", "0.19", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "Cl", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "Cl", "1", "0.25", "0.0", "1.", "Junmei et al, 1999"}, {"HC", "CT", "CT", "Br", "1", "0.000", "0.0", "-3.", "JCC,7,(1986),230"}, {"HC", "CT", "CT", "Br", "1", "0.55", "0.0", "1.", "Junmei et al, 1999"}, {"H1", "CT", "NT", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "CT", "NT", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "C", "N", "LP", "1", "0.000", "180.000", "2.000", " "}, {"O", "C", "N", "LP", "1", "0.000", "180.000", "2.000", " "}, {"H1", "CT", "OH", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "CT", "OH", "LP", "1", "0.000", "0.000", "3.000", " "}, {"H1", "CT", "OS", "LP", "1", "0.000", "0.000", "3.000", " "}, {"H2", "CT", "OS", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CT", "CT", "OS", "LP", "1", "0.000", "0.000", "3.000", " "}, {"CM", "CM", "OS", "LP", "1", "0.000", "180.000", "2.000", " "}, {"HA", "CM", "OS", "LP", "1", "0.000", "180.000", "2.000", " "}, {"H4", "CM", "OS", "LP", "1", "0.000", "180.000", "2.000", " "}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= n (multi), 7= amber99 info V(psi) = Kpsi x (psi - psi0)^2 */ char * amber99_impropers[38][8]= {{"X", "X", "C", "O", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "O2", "C", "O2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "N2", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "NA", "H", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "N2", "CA", "N2", "10.5", "180.", "2.", "JCC,7,(1986),230"}, {"X", "CT", "N", "CT", "1.0", "180.", "2.", "JCC,7,(1986),230"}, {"X", "X", "CA", "HA", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CW", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CR", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CV", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CQ", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CK", "H5", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "H4", "1.1", "180.", "2.", " "}, {"X", "X", "CM", "HA", "1.1", "180.", "2.", " "}, {"X", "X", "CA", "H4", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"X", "X", "CA", "H5", "1.1", "180.", "2.", "bsd.on C6H6 nmodes"}, {"CB", "CK", "N*", "CT", "1.0", "180.", "2.", " "}, {"C", "CM", "N*", "CT", "1.0", "180.", "2.", "dac guess, 9/94"}, {"CT", "O", "C", "OH", "10.5", "180.", "2.", " "}, {"CT", "CV", "CC", "NA", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NB", "1.1", "180.", "2.", " "}, {"CT", "CW", "CC", "NA", "1.1", "180.", "2.", " "}, {"CB", "CT", "C*", "CW", "1.1", "180.", "2.", " "}, {"CA", "CA", "CA", "CT", "1.1", "180.", "2.", " "}, {"C", "CM", "CM", "CT", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CM", "N2", "CA", "NC", "1.1", "180.", "2.", "dac guess, 9/94"}, {"CB", "N2", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"N2", "NA", "CA", "NC", "1.1", "180.", "2.", "dac, 10/94"}, {"CA", "CA", "C", "OH", "1.1", "180.", "2.", "(not used in tyr!)"}, {"CA", "CA", "CA", "OH", "1.1", "180.", "2.", "in tyr"}, {"H5", "O", "C", "OH", "1.1", "180.", "2.", "Junmei et al.1999"}, {"H5", "O", "C", "OS", "1.1", "180.", "2.", " "}, {"CM", "CT", "CM", "HA", "1.1", "180.", "2.", "Junmei et al.1999"}, {"Br", "CA", "CA", "CA", "1.1", "180.", "2.", "Junmei et al.1999"}, {"CM", "H4", "C", "O", "1.1", "180.", "2.", "Junmei et al.1999"}, {"C", "CT", "N", "H", "1.1", "180.", "2.", "Junmei et al.1999"}, {"C", "CT", "N", "O", "1.1", "180.", "2.", "Junmei et al.1999"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= amber99 info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * amber99_vdw[42][4]= {{"H", "0.6000", "0.0157", "!Ferguson base pair geom."}, {"HO", "0.0000", "0.0000", "OPLS Jorgensen, JACS,110,(1988),1657"}, {"HS", "0.6000", "0.0157", "W. Cornell CH3SH --> CH3OH FEP"}, {"HC", "1.4870", "0.0157", "OPLS"}, {"H1", "1.3870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H2", "1.2870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"H3", "1.1870", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HP", "1.1000", "0.0157", "Veenstra et al JCC,8,(1992),963"}, {"HA", "1.4590", "0.0150", "Spellmeyer"}, {"H4", "1.4090", "0.0150", "Spellmeyer, one electrowithdr. neighbor"}, {"H5", "1.3590", "0.0150", "Spellmeyer, two electrowithdr. neighbor"}, {"HW", "0.0000", "0.0000", "TIP3P water model"}, {"HZ", "1.4590", "0.0150", "H bonded to sp C (Howard et al JCC 16)"}, {"O", "1.6612", "0.2100", "OPLS"}, {"O2", "1.6612", "0.2100", "OPLS"}, {"OW", "1.7683", "0.1520", "TIP3P water model"}, {"OH", "1.7210", "0.2104", "OPLS"}, {"OS", "1.6837", "0.1700", "OPLS ether"}, {"C*", "1.9080", "0.0860", "Spellmeyer"}, {"CT", "1.9080", "0.1094", "Spellmeyer"}, {"C", "1.9080", "0.0860", "OPLS"}, {"N", "1.8240", "0.1700", "OPLS"}, {"N3", "1.8240", "0.1700", "OPLS"}, {"S", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"SH", "2.0000", "0.2500", "W. Cornell CH3SH and CH3SCH3 FEP's"}, {"P", "2.1000", "0.2000", "JCC,7,(1986),230;"}, {"IM", "2.47", "0.1", "Cl- Smith and Dang, JCP 1994,100:5,3757"}, {"Li", "1.1370", "0.0183", "Li+ Aqvist JPC 1990,94,8021. (adapted)"}, {"IP", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Na", "1.8680", "0.00277", "Na+ Aqvist JPC 1990,94,8021. (adapted)"}, {"K", "2.6580", "0.000328", "K+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Rb", "2.9560", "0.00017", "Rb+ Aqvist JPC 1990,94,8021. (adapted)"}, {"Cs", "3.3950", "0.0000806", "Cs+ Aqvist JPC 1990,94,8021. (adapted)"}, {"MG", "0.7926", "0.8947", "Mg2+ Aqvist JPC 1990,94,8021.(adapted)"}, {"C0", "1.7131", "0.459789", "Ca2+ Aqvist JPC 1990,94,8021.(adapted)"}, {"Zn", "1.10", "0.0125", "Zn2+, Merz,PAK, JACS,113,8262,(1991)"}, {"F", "1.75", "0.061", "Gough et al. JCC 13,(1992),963."}, {"Cl", "1.948", "0.265", "Fox, JPCB,102,8070,(98),flex.mdl CHCl3"}, {"Br", "2.22", "0.320", "Junmei(?)"}, {"I", "2.35", "0.40", "JCC,7,(1986),230;"}, {"IB", "5.0", "0.1", "solvated ion for vacuum approximation"}, {"LP", "0.00", "0.0000", "lone pair"}}; Atomes-GNU-1.1.14/src/calc/force_fields/cff91.c000066400000000000000000010323461457665371200206770ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cff91.c * @short CFF91 force field, from 'CFF91.frc' * @author Sébastien Le Roux */ /* * This file: 'cff91.c' * * Contains: * CFF91 force field, data from taken from: - the file: 'CFF91.frc' This file contains several tables: Atoms : CFF91_atoms[93][5] Equivalence : CFF91_equivalence_auto[97][11] Equivalence : CFF91_equivalence[95][7] Quadractic bonds : CFF91_bonds_auto[667][5] Quartic bonds : CFF91_bonds[58][7] Quadratic angles : CFF91_angles_auto[330][6] Quartic angles : CFF91_angles[155][8] Torsions : CFF91_torsions_auto[216][8] Torsions : CFF91_torsions[294][11] Inversions : CFF91_inversions[70][7] Non bonded : CFF91_vdw[40][4] Bond increments : CFF91_bond_increments[560][5] */ #include "global.h" int CFF91_objects[14] = {93, 97, 95, 667, 58, 0, 330, 155, 216, 294, 70, 0, 40, 560}; int CFF91_dim[14] = {5, 11, 7, 5, 7, 0, 6, 8, 8, 11, 7, 0, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= CFF91 info */ char * CFF91_atoms[93][5]= {{"C", "12.01115", "c", "generic SP3 carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3", "sp3 carbon with 3 hHs 1 heavy", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c2", "sp3 carbon with 2 H's, 2 Heavy's", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "co", "sp3 carbon in acetals", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3m", "sp3 carbon in 3-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4m", "sp3 carbon in 4-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "coh", "sp3 carbon in acetals with hydrogen", "Ver. 2.0, Ref. 1"}, {"C", "12.01115", "c3h", "sp3 carbon in 3-membered ring with hydrogens", "Ver. 2.0, Ref. 2"}, {"C", "12.01115", "c4h", "sp3 carbon in 4-membered ring with hydrogens", "Ver. 2.0, Ref. 2"}, {"C", "12.01115", "c1", "sp3 carbon with 1 H 3 heavies", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ca", "general amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cg", "sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=", "non aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=1", "non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 3"}, {"C", "12.01115", "c=2", "non aromatic doubly bonded carbon", "Ver. 2.0, Ref. 3"}, {"C", "12.01115", "c*", "carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 4"}, {"C", "12.01115", "c\"", "carbon in carbonyl group, non_amides", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c'", "carbon in carbonyl group of amides", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cp", "sp2 aromatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c5", "sp2 aromatic carbon in 5-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c-", "C in charged carboxylate", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cr", "C in neutral arginine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c+", "C in guanidinium group", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cs", "sp2 aromatic carbon in 5 membered ring next to S", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ci", "sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ct", "sp carbon involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ct2", "sp carbon in CO2", "Ver. 2.0, Ref. 6"}, {"N", "14.00670", "na", "sp3 nitrogen in amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3m", "sp3 nitrogen in 3- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4m", "sp3 nitrogen in 4- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3n", "sp2 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "n4n", "sp2 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "nb", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nn", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n", "generic sp2 nitrogen (in amids))", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "np", "sp2 nitrogen in 5- or 6-membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "npc", "sp2 nitrogen in 5- or 6-membered ring bonded to a heavy atom", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "nh", "sp2 nitrogen in 5- or 6- membered ring with hydrogen attached", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nho", "sp2 nitrogen in 6- membered ring next to a carbonyl group and with a hydrogen", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "nh+", "protonated nitrogen in 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 2"}, {"N", "14.00670", "n+", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nr", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=", "non aromatic end doubly bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=1", "non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 3"}, {"N", "14.00670", "n=2", "non aromatic doubly bonded nitrogen", "Ver. 2.0, Ref. 3"}, {"N", "14.00670", "ni", "nitrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n1", "sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n2", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nt", "sp nitrogen involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nz", "sp nitrogen in N2", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o", "generic SP3 oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oh", "oxygen bonded to hydrogen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oc", "sp3 oxygen in ether or acetals", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oe", "sp3 oxygen in ester", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o3e", "sp3 oxygen in three membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o4e", "sp3 oxygen in four membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o'", "oxygen in carbonyl group", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "op", "sp2 aromatic in 5 membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o*", "oxygen in water", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o-", "partial double oxygen bonded to something then bonded to another partial double oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h", "generic hydrogen bound to C, Si,or H", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h*", "hydrogen bonded to nitrogen, Oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h+", "charged hydrogen in cations", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hs", "hydrogen bonded to sulfur", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hc", "hydrogen bonded to carbon", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hp", "hydrogen bonded to phosphorus", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "ho", "hydrogen bonded to oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hn", "hydrogen bonded to nitrogen", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hi", "Hydrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hw", "hydrogen in water", "Ver. 1.0, Ref. 1"}, {"D", "2.014000", "dw", "deuterium in heivy water", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s", "sp3 sulfur", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sc", "sp3 sulfur in methionines (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s3e", "sulfur in three membered ring", "Ver. 2.0, Ref. 2"}, {"S", "32.06400", "s4e", "sulfur in four membered ring", "Ver. 2.0, Ref. 2"}, {"S", "32.06400", "s1", "sp3 sulfur involved in (S-S) group of disulfides", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sh", "sp3 sulfur in sulfhydryl (-SH) group (e.g. cysteine)", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sp", "sulfur in an aromatic ring (e.g. thiophene)", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s'", "S in thioketone group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s-", "partial double sulfur bonded to something then bonded to another partial double oxygen or sulfur", "Ver. 1.0, Ref. 1"}, {"P", "30.97380", "p", "general phosphorous atom", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "si", "silicon atom", "Ver. 1.0, Ref. 1"}, {"Ca", "40.08000", "ca+", "calcium ion", "Ver. 1.0, Ref. 1"}, {"F", "18.99840", "f", "fluorine atom", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "cl", "chlorine atom", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "Cl", "chlorine ion", "Ver. 1.0, Ref. 1"}, {"Br", "79.90900", "br", "bromine atom", "Ver. 1.0, Ref. 1"}, {"Br", "79.90900", "Br", "bromine ion", "Ver. 1.0, Ref. 1"}, {"I", "126.9044", "i", "iodine atom", "Ver. 1.0, Ref. 1"}, {"Na", "22.98980", "Na", "sodium ion", "Ver. 1.0, Ref. 1"}, {"L", "1.000000", "lp", "lone pair", "Ver. 1.0, Ref. 1"}, {"Ar", "39.94800", "ar", "Argon atom", "Ver. 1.0, Ref. 1"}}; /* Equivalence table for key symbols CFF91 auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = CFF91 info */ char * CFF91_equivalence_auto[97][11]= {{"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"d", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hn", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"ho", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hs", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"hi", "h*", "hi", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"h+", "h+", "h+", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 2"}, {"c", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"cg", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"ca", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c3", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"cn", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c2", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c1", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"co", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c3m", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c4m", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"coh", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c3h", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"c4h", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 2"}, {"cp", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"c5", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"cs", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"ci", "cp", "ci", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 2"}, {"c*", "c*", "c*", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 4"}, {"c\"", "c*", "c*", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 4"}, {"c'", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"cr", "cr", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"c-", "c-", "c-", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"c+", "c+", "c+", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 2"}, {"c=1", "c=", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 2"}, {"c=2", "c=", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 2"}, {"ct", "c=", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 7"}, {"ct2", "c=", "ct", "ct2_", "c_", "ct2_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 6"}, {"na", "na", "na", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n3m", "na", "na", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n4m", "na", "na", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"np", "np", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"npc", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nho", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nh+", "nh", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"ni", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 2"}, {"nn", "nn", "nn", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"nb", "nn", "nn", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"n+", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n4", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 2"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 2"}, {"nr", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 2"}, {"n2", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 2"}, {"n1", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 2"}, {"n=1", "n=", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 2"}, {"n=2", "n=", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 2"}, {"nt", "nt", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 2"}, {"nz", "nz", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 2"}, {"o", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"oh", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"oc", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"oe", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o3e", "o", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o4e", "o", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"op", "op", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 2"}, {"o'", "o'", "o'", "o'_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"o-", "o-", "o-", "o-_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 2"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s'", "s", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s-", "s", "s-", "s-_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"sh", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 2"}, {"sp", "sp", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 2"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 2"}, {"pz", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 2"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 2"}, {"i", "i", "i", "i_", "f_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 2"}, {"cl", "cl", "cl", "cl_", "f_", "cl_", "cl_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 2"}, {"br", "br", "br", "br_", "f_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 2"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 2"}, {"sz", "sz", "sz", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "Ver. 2.0, Ref. 2"}, {"nu", "nu", "nu", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "Ver. 2.0, Ref. 2"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 2"}, {"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 2"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 2"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.0, Ref. 2"}, {"ca+", "ca+", "ca+", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "Ver. 2.0, Ref. 9"}}; /* Equivalence table for key symbols CFF91 with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = CFF91 info */ char * CFF91_equivalence[95][7]= {{"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hs", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hc", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hn", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hi", "h*", "hi", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"ho", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"h+", "h+", "h+", "h+", "h+", "h+", "Ver. 1.0, Ref. 1"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"co", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c4m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"coh", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 2"}, {"c3h", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 2"}, {"c4h", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 2"}, {"c1", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cg", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "c=1", "c=", "c=1", "c=", "Ver. 2.0, Ref. 3"}, {"c=2", "c=", "c=2", "c=", "c=2", "c=", "Ver. 2.0, Ref. 3"}, {"c*", "c*", "c*", "c*", "c*", "c*", "Ver. 2.0, Ref. 4"}, {"c\"", "c*", "c*", "c*", "c*", "c*", "Ver. 2.0, Ref. 4"}, {"c'", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cs", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"ci", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cr", "cr", "cr", "cr", "cr", "cr", "Ver. 1.0, Ref. 1"}, {"c+", "c+", "c+", "c+", "c+", "c+", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "c-", "c-", "c-", "c-", "Ver. 1.0, Ref. 1"}, {"ct", "c=", "ct", "ct", "ct", "ct", "Ver. 2.0, Ref. 7"}, {"ct2", "c=", "ct2", "ct2", "ct2", "ct2", "Ver. 2.0, Ref. 6"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 2"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 2"}, {"na", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n3m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n4m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"nn", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"nb", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"n+", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"n4", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"np", "np", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"npc", "nh", "nh", "nh", "nh", "nh", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nho", "nh", "nh", "nh", "nh", "nh", "Ver. 2.0, Ref. 2"}, {"nh+", "nh", "nh+", "nh", "nh", "nh", "Ver. 2.0, Ref. 2"}, {"nr", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n2", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n=", "n=", "n=", "n=", "n=", "n=", "Ver. 1.0, Ref. 1"}, {"n=1", "n=", "n=1", "n=", "n=1", "n=", "Ver. 1.0, Ref. 1"}, {"n=2", "n=", "n=2", "n=", "n=2", "n=", "Ver. 1.0, Ref. 1"}, {"n1", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"ni", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nt", "n=", "nt", "nt", "nt", "nt", "Ver. 2.0, Ref. 5"}, {"nz", "n=", "nz", "nz", "nz", "nz", "Ver. 1.0, Ref. 10"}, {"o'", "o'", "o'", "o'", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"op", "op", "op", "op", "op", "op", "Ver. 1.0, Ref. 1"}, {"o", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oc", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oe", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o3e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o4e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o-", "o-", "o-", "o-", "o-", "o-", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"oh", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 2"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 2"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sh", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sp", "sp", "sp", "sp", "sp", "sp", "Ver. 1.0, Ref. 1"}, {"s'", "sp", "s'", "s'", "s'", "s'", "Ver. 1.0, Ref. 11"}, {"s-", "sp", "s-", "s-", "s-", "s-", "Ver. 1.0, Ref. 11"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"pz", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.0, Ref. 1"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 1.0, Ref. 1"}, {"nu", "nu", "nu", "nu", "nu", "nu", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 2.0, Ref. 9"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= CFF91 info E = K2 * (R - R0)^2 */ char * CFF91_bonds_auto[667][5]= {{"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "ct_", "1.4000", "340.000", "Ver. 2.0, Ref. 2"}, {"c3m_", "ct2_", "1.4000", "340.0000", "Ver. 2.0, Ref. 6"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "ct2_", "1.4000", "340.0000", "Ver. 2.0, Ref. 6"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct2_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 6"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct2_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 6"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct2_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 6"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct2_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 6"}, {"na_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n3m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"n3m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"n3m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"n3m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"n3m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n4m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"n4m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"n4m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"n4m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"n4m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"s_", "s3e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s4e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"sp_", "s3e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"sp_", "s4e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"s3e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"s3e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"s3e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"s3e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"s3e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"s4e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"s4e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"s4e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"s4e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"s4e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c_", "ct2_", "1.4000", "340.0000", "Ver. 2.0, Ref. 6"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 2"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 2"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 2"}, {"c'_", "ct2_", "1.4200", "311.1492", "Ver. 2.0, Ref. 6"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 2"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 2"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 2"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 2"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 2"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 2"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 2"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 2"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 2"}, {"c'_", "br_", "1.8750", "228.2808", "Ver. 2.0, Ref. 2"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 2"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 2"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"cp_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"cp_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"cp_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 2"}, {"cp_", "ct2_", "1.4000", "321.6716", "Ver. 2.0, Ref. 6"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 2"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 2"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 2"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 2"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 2"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 2"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 2"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 2"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 2.0, Ref. 2"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 2.0, Ref. 2"}, {"ci", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 2"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 2"}, {"c=", "ct2_", "1.3300", "655.2000", "Ver. 2.0, Ref. 6"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 2"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_1", "ct2_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_2", "ct2_", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_3", "ct2_", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 2"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 2"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 2"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 2"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 2"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 2"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 2"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 2"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 2"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 2"}, {"c=", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 2"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 2"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 2"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_1", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_2", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_3", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 2"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 2"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 2"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 2"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 2"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 2"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 2"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 2"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 2"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 2"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 2"}, {"ct_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 2"}, {"ct_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 2"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 2"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 2"}, {"ct2_", "ct2_", "1.2040", "800.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 6"}, {"ct2_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 6"}, {"ct2_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 6"}, {"ct2_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 6"}, {"ct2_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 6"}, {"ct2_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 6"}, {"ct2_", "o'_", "1.1600", "615.3220", "Ver. 2.0, Ref. 6"}, {"ct2_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 6"}, {"ct2_", "s'_", "1.6000", "510.2775", "Ver. 2.0, Ref. 6"}, {"ct2_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 6"}, {"ct2_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 6"}, {"ct2_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 6"}, {"ct2_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 6"}, {"ct2_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 6"}, {"ct2_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 6"}, {"ct2_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 6"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"na_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"na_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"na_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"na_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"na_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"na_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"na_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"na_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"na_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"na_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 2"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n_", "n=", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n_", "n=_1", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n_", "n=_2", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n_", "n=_3", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n_", "n+_", "1.3670", "210.6360", "Ver. 2.0, Ref. 2"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 2"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 2"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 2"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 2"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 2"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 2"}, {"n_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"n_", "f_", "1.3250", "189.3856", "Ver. 2.0, Ref. 2"}, {"n_", "cl_", "1.6620", "227.5604", "Ver. 2.0, Ref. 2"}, {"n_", "br_", "1.8100", "206.3980", "Ver. 2.0, Ref. 2"}, {"n_", "i_", "1.9960", "186.6972", "Ver. 2.0, Ref. 2"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 2"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 2"}, {"np_", "n=", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"np_", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"np_", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"np_", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"np_", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 2"}, {"np_", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 2"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"np_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"np_", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"np_", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"np_", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"np_", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 2"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"n=", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"n=_1", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_2", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_3", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 2"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 3"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 3"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 3"}, {"n=", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"n=_1", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_2", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_3", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 2"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 3"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 3"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 3"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"n=", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 2"}, {"n=", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"n=", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"n=", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"n=", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_1", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"n=_1", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"n=_1", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"n=_1", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"n=_1", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_2", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"n=_2", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"n=_2", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"n=_2", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"n=_2", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_3", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"n=_3", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"n=_3", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"n=_3", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"n=_3", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 2"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 2"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 2"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 2"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 2"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 2"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 2"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 2"}, {"n+_", "h_", "1.0650", "461.1848", "Ver. 2.0, Ref. 2"}, {"n+_", "f_", "1.3520", "178.0372", "Ver. 2.0, Ref. 2"}, {"n+_", "cl_", "1.6890", "217.7248", "Ver. 2.0, Ref. 2"}, {"n+_", "br_", "1.8370", "196.5940", "Ver. 2.0, Ref. 2"}, {"n+_", "i_", "2.0230", "177.2764", "Ver. 2.0, Ref. 2"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 2"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 2"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 2"}, {"o_", "o'_", "1.2430", "323.1720", "Ver. 2.0, Ref. 2"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 2"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 2"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 2"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 2"}, {"o_", "h_", "0.9600", "493.8480", "Ver. 2.0, Ref. 2"}, {"o_", "f_", "1.4180", "224.0000", "Ver. 2.0, Ref. 2"}, {"o_", "cl_", "1.6500", "307.0632", "Ver. 2.0, Ref. 2"}, {"o_", "br_", "1.7980", "284.7988", "Ver. 2.0, Ref. 2"}, {"o_", "i_", "1.9840", "264.9868", "Ver. 2.0, Ref. 2"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 2"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 2"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 2"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 2"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 2"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "h_", "0.9830", "458.4610", "Ver. 2.0, Ref. 2"}, {"o'_", "f_", "1.2700", "204.0505", "Ver. 2.0, Ref. 2"}, {"o'_", "cl_", "1.6070", "251.7939", "Ver. 2.0, Ref. 2"}, {"o'_", "br_", "1.7550", "233.2954", "Ver. 2.0, Ref. 2"}, {"o'_", "i_", "1.9410", "213.2317", "Ver. 2.0, Ref. 2"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 2"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 2"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 2"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 2"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 2"}, {"op_", "h_", "0.9830", "486.0610", "Ver. 2.0, Ref. 2"}, {"op_", "f_", "1.2700", "231.6505", "Ver. 2.0, Ref. 2"}, {"op_", "cl_", "1.6070", "279.3939", "Ver. 2.0, Ref. 2"}, {"op_", "br_", "1.7550", "260.8954", "Ver. 2.0, Ref. 2"}, {"op_", "i_", "1.9410", "240.8317", "Ver. 2.0, Ref. 2"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 2"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 2"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s_", "s'_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"s_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"s_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"s_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"s_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"s_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "p_", "1.9700", "255.2524", "Ver. 2.0, Ref. 2"}, {"s'_", "h_", "1.3730", "316.8138", "Ver. 2.0, Ref. 2"}, {"s'_", "f_", "1.6600", "195.3021", "Ver. 2.0, Ref. 2"}, {"s'_", "cl_", "1.9970", "211.1368", "Ver. 2.0, Ref. 2"}, {"s'_", "br_", "2.1450", "187.6017", "Ver. 2.0, Ref. 2"}, {"s'_", "i_", "2.3310", "167.6272", "Ver. 2.0, Ref. 2"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 2"}, {"s-_", "p_", "1.9800", "210.9800", "Ver. 2.0, Ref. 2"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 2"}, {"sp_", "s'_", "1.9900", "240.0000", "Ver. 2.0, Ref. 2"}, {"sp_", "p_", "1.9900", "175.1796", "Ver. 2.0, Ref. 2"}, {"sp_", "h_", "1.3730", "236.5449", "Ver. 2.0, Ref. 2"}, {"sp_", "f_", "1.6600", "180.5021", "Ver. 2.0, Ref. 2"}, {"sp_", "cl_", "1.9970", "196.3368", "Ver. 2.0, Ref. 2"}, {"sp_", "br_", "2.1450", "172.8017", "Ver. 2.0, Ref. 2"}, {"sp_", "i_", "2.3310", "152.8272", "Ver. 2.0, Ref. 2"}, {"sp_", "si_", "2.1000", "167.4260", "Ver. 2.0, Ref. 2"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 2"}, {"p_", "h_", "1.4300", "224.0000", "Ver. 2.0, Ref. 2"}, {"p_", "f_", "1.5400", "230.3664", "Ver. 2.0, Ref. 2"}, {"p_", "cl_", "2.0430", "208.8228", "Ver. 2.0, Ref. 2"}, {"p_", "br_", "2.1800", "183.1472", "Ver. 2.0, Ref. 2"}, {"p_", "i_", "2.3110", "162.7080", "Ver. 2.0, Ref. 2"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 2"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 2"}, {"h_", "f_", "1.0230", "520.7304", "Ver. 2.0, Ref. 2"}, {"h_", "cl_", "1.3600", "345.9024", "Ver. 2.0, Ref. 2"}, {"h_", "br_", "1.5080", "314.1728", "Ver. 2.0, Ref. 2"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 2"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 2"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 2"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 2"}, {"f_", "cl_", "1.6470", "207.1180", "Ver. 2.0, Ref. 2"}, {"f_", "br_", "1.7950", "193.5000", "Ver. 2.0, Ref. 2"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 2"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 2"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 2"}, {"cl_", "br_", "2.1320", "209.1876", "Ver. 2.0, Ref. 2"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 2"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 2"}, {"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 2"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 2"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 2"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 2"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 2"}, {"si_", "si_", "2.1900", "144.0000", "Ver. 2.0, Ref. 2"}}; /* Quartic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= K3 (kcal mol-1), 5= K4 (kcal mol-1), 6= CFF91 info E = K2 * (R - R0)^2 + K3 * (R - R0)^3 + K4 * (R - R0)^4 */ char * CFF91_bonds[58][7]= {{"c", "h", "1.1010", "341.0000", "-691.8900", "844.6000", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5330", "299.6700", "-501.7700", "679.8100", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 2.0, Ref. 3"}, {"c=", "c=2", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 2.0, Ref. 3"}, {"c", "c=", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 2.0, Ref. 3"}, {"c=", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 2.0, Ref. 3"}, {"c=2", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 2.0, Ref. 3"}, {"c", "o", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 1"}, {"h*", "o", "0.9650", "532.5062", "-1282.9050", "2004.7658", "Ver. 1.0, Ref. 1"}, {"c", "na", "1.4570", "365.8052", "-699.6368", "998.4842", "Ver. 1.0, Ref. 1"}, {"h*", "na", "1.0060", "466.7400", "-1073.6018", "1251.1056", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8230", "225.2768", "-327.7057", "488.9722", "Ver. 1.0, Ref. 1"}, {"h", "s", "1.3261", "275.1123", "-531.3181", "562.9630", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0559", "197.6560", "-196.1366", "644.4103", "Ver. 1.0, Ref. 1"}, {"c", "c*", "1.5140", "312.3719", "-465.8290", "473.8300", "Ver. 1.0, Ref. 4"}, {"c*", "h", "1.1220", "304.8631", "-623.3705", "700.2828", "Ver. 1.0, Ref. 4"}, {"c*", "o'", "1.2160", "823.7948", "-1878.7940", "2303.5311", "Ver. 1.0, Ref. 4"}, {"c*", "o", "1.3649", "368.7309", "-832.4784", "1274.0231", "Ver. 1.0, Ref. 4"}, {"c'", "o'", "1.2195", "820.7018", "-1875.1000", "2303.7600", "Ver. 1.0, Ref. 1"}, {"c'", "n", "1.4160", "359.1591", "-558.4730", "1146.3810", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5202", "253.7067", "-423.0370", "396.9000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4520", "327.1657", "-547.8990", "526.5000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "1.0100", "462.7500", "-1053.6300", "1545.7570", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1110", "325.5717", "-632.1990", "726.0003", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.4314", "356.0904", "-627.6179", "1327.6345", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0862", "377.7644", "-803.4526", "894.3173", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.3485", "508.8587", "-977.6914", "1772.5134", "Ver. 1.0, Ref. 1"}, {"np", "np", "1.3121", "513.0111", "-873.6366", "1634.3437", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.0, Ref. 1"}, {"hi", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.1, Ref. 1"}, {"cp", "nh", "1.3749", "477.5202", "-848.5592", "1022.3909", "Ver. 1.0, Ref. 1"}, {"nh", "np", "1.3204", "646.7598", "-1639.8800", "6799.7099", "Ver. 1.0, Ref. 1"}, {"cp", "op", "1.3597", "547.5169", "-834.0665", "544.3090", "Ver. 1.0, Ref. 1"}, {"cp", "sp", "1.7053", "364.2568", "-457.7758", "291.1498", "Ver. 1.0, Ref. 1"}, {"cp", "o", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 1"}, {"c", "cp", "1.5010", "321.9021", "-521.8208", "572.1628", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "1.3912", "447.0438", "-784.5346", "886.1671", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "1.0012", "465.8608", "-1066.2360", "1496.5647", "Ver. 1.0, Ref. 1"}, {"h+", "n+", "1.0119", "448.6300", "-963.1917", "1248.4000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "1.5185", "293.1700", "-603.7882", "629.6900", "Ver. 1.0, Ref. 1"}, {"c", "c-", "1.5483", "253.0800", "-449.0300", "457.3200", "Ver. 1.0, Ref. 1"}, {"c-", "o-", "1.2339", "711.3500", "-1543.9000", "1858.6000", "Ver. 1.0, Ref. 1"}, {"c-", "h", "1.1331", "241.0600", "-574.7800", "853.7500", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "1.3834", "380.4600", "-814.4300", "1153.3000", "Ver. 1.0, Ref. 1"}, {"h*", "nr", "1.0023", "462.3900", "-1044.6000", "1468.7000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "1.4695", "340.2400", "-589.4800", "854.5300", "Ver. 1.0, Ref. 1"}, {"nr", "cr", "1.3200", "388.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "cr", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=", "c", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "c", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"h*", "o*", "0.9700", "563.2800", "-1428.2200", "1902.1200", "Ver. 1.1, Ref. 3"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= CFF91 info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * CFF91_angles_auto[330][6]= {{"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "c3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c3m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o3e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o3e_", "c3m_", "c3m_", "60.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "c3m_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c3m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c3m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c3m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c4m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o3e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c4m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c4m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c4m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "c3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "c4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "n3m_", "125.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "n4m_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "c3m_", "113.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "n3m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"h_", "n3m_", "c3m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"f_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"si_", "n3m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n4m_", "*", "110.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "n4m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"h_", "n4m_", "c4m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"f_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"si_", "n4m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "o_", "*", "120.0010", "72.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "op_", "*", "106.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n4m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n3m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n4m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o'_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s3e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "s3e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n3m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"n4m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o'_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s4e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "s4e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"c4m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"c3m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"c4m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"o_", "c'_", "*", "110.0000", "122.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c'_", "*", "123.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "*", "110.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "h_", "120.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "n_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 2"}, {"f_", "c'_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c'_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"o_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"s_", "cp_", "c_", "114.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"h_", "cp_", "*", "120.0000", "37.0000", "Ver. 2.0, Ref. 2"}, {"f_", "cp_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"si_", "cp_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"n_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"o_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"s_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c=_", "*", "120.0000", "37.5000", "Ver. 2.0, Ref. 2"}, {"f_", "c=_", "*", "120.0000", "96.0000", "Ver. 2.0, Ref. 2"}, {"si_", "c=_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct2_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 6"}, {"c_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"n_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"f_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"h_", "na_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"si_", "na_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "n_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"s_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "n_", "*", "120.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"f_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"h_", "n_", "*", "122.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"si_", "n_", "*", "120.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"n_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"o_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"f_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"si_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "nt_", "*", "180.0", "50.0", "Ver. 2.0, Ref. 2"}, {"c_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"n_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"o_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"h_", "o_", "*", "109.0000", "58.5000", "Ver. 2.0, Ref. 2"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"f_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"si_", "o_", "*", "124.1000", "56.4000", "Ver. 2.0, Ref. 2"}, {"si_", "o_", "si", "149.8000", "31.1000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"c_", "s_", "*", "102.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"n_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"o'_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"si_", "s_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"n_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"o_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"o'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"s_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"s'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"h_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"f_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"si_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 2"}, {"c_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"n_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"o_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "p_", "*", "120.0000", "110.0000", "Ver. 2.0, Ref. 2"}, {"s_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "p_", "*", "120.0000", "100.0000", "Ver. 2.0, Ref. 2"}, {"h_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"f_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"si_", "p_", "*", "109.5000", "30.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"c_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"n_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"o_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"s_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"h_", "si_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"f_", "si_", "*", "117.3000", "44.1000", "Ver. 2.0, Ref. 2"}, {"si_", "si_", "*", "113.4000", "33.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}}; /* Quartic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= K3, 6= K4, 7= CFF91 info Delta = Theta - Theta0 E = K2 * Delta^2 + K3 * Delta^3 + K4 * Delta^4 With: - Theta = Angle - Theta0 = Equilibrium angle */ char * CFF91_angles[155][8]= {{"h", "c", "h", "107.6600", "39.6410", "-12.9210", "-2.4318", "Ver. 1.0, Ref. 1"}, {"c", "c", "h", "110.7700", "41.4530", "-10.6040", "5.1290", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "112.6700", "39.5160", "-7.4430", "-9.5583", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 2.0, Ref. 3"}, {"c=", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=2", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=1", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=2", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=1", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c=2", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 2.0, Ref. 3"}, {"c", "c=", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 2.0, Ref. 3"}, {"c=", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 2.0, Ref. 3"}, {"h", "c=", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 2.0, Ref. 3"}, {"h", "c=2", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 2.0, Ref. 3"}, {"c", "o", "c", "104.5000", "35.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "111.2700", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 1"}, {"c", "o", "h*", "105.8000", "52.7061", "-12.1090", "-9.8681", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "112.4436", "47.2337", "-10.6612", "-10.2062", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "110.9538", "50.8652", "-4.4522", "-10.0298", "Ver. 1.0, Ref. 1"}, {"h*", "na", "h*", "107.0671", "45.2520", "-7.5558", "-9.5120", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "111.9100", "60.7147", "-13.3366", "-13.0785", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "110.6204", "51.3137", "-6.7198", "-2.6003", "Ver. 1.0, Ref. 1"}, {"c", "s", "h", "96.8479", "56.7336", "14.2713", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "112.5642", "47.0276", "-10.6790", "-10.1687", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "107.8522", "51.4949", "-13.5270", "7.0260", "Ver. 1.0, Ref. 1"}, {"c", "s", "c", "97.5000", "57.6938", "-5.0559", "-11.8206", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "100.3000", "57.2900", "-6.5301", "-11.8204", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "111.5000", "27.9677", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "97.2876", "54.4281", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "s", "h", "94.3711", "54.9676", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c*", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 4"}, {"c*", "c", "h", "107.8594", "38.0833", "-17.5074", "0.0000", "Ver. 1.0, Ref. 4"}, {"c", "c*", "h", "106.2000", "27.4878", "-1.9350", "14.5545", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o'", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o'", "116.5000", "59.6420", "-21.9179", "0.0000", "Ver. 1.0, Ref. 4"}, {"c", "c*", "c", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 4"}, {"h", "c*", "h", "108.6000", "40.0764", "-6.8139", "-8.4349", "Ver. 1.0, Ref. 4"}, {"o", "c*", "o'", "118.9855", "98.6813", "-22.2485", "10.3673", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "100.3182", "38.8631", "-3.8323", "-7.9802", "Ver. 1.0, Ref. 4"}, {"c*", "o", "h*", "111.2537", "53.5303", "-11.8454", "-11.5405", "Ver. 1.0, Ref. 4"}, {"c*", "c", "o", "106.1764", "74.4143", "-12.6018", "-48.7850", "Ver. 1.0, Ref. 4"}, {"c", "o", "c*", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "94.5209", "32.3751", "-0.6174", "-6.5639", "Ver. 1.0, Ref. 4"}, {"n", "c'", "o'", "125.5420", "92.5720", "-34.4800", "-11.1871", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "123.1451", "55.5431", "-17.2123", "0.1348", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "116.9257", "39.4193", "-10.9945", "-8.7733", "Ver. 1.0, Ref. 1"}, {"c", "n", "c'", "111.0372", "31.8958", "-6.6942", "-6.8370", "Ver. 1.0, Ref. 1"}, {"c'", "n", "h*", "117.9607", "37.4964", "-8.1837", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "h*", "113.8683", "45.9271", "-20.0824", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "114.3018", "42.6589", "-10.5464", "-9.3243", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "108.9372", "57.4010", "2.9374", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "108.5295", "51.9747", "-9.4851", "-10.9985", "Ver. 1.0, Ref. 1"}, {"c'", "c", "h", "107.7336", "40.6099", "-28.8121", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "117.8326", "45.9187", "-22.5264", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "110.3935", "52.1647", "-18.4845", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "h*", "116.9402", "37.5749", "-8.6676", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "111.5635", "39.6084", "-8.5459", "-8.5152", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c'", "121.9556", "76.3105", "-26.3166", "-17.6944", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "118.9000", "61.0226", "-34.9931", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "117.9400", "35.1558", "-12.4682", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "111.6800", "84.5159", "-48.5528", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "116.5100", "76.6970", "-35.3868", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "110.5500", "40.8275", "-13.0318", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "115.3800", "85.4923", "-6.5225", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "106.0400", "109.1158", "-42.9319", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "109.3800", "47.0120", "-17.3556", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "106.0100", "109.7746", "-9.0636", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "112.5900", "78.6418", "-16.3888", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "109.8000", "43.8408", "-9.5153", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "108.9100", "98.8519", "-5.7502", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "np", "109.3900", "119.1811", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "99.4530", "41.6499", "-5.7422", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "nh", "108.2200", "119.0383", "-24.2061", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "op", "cp", "103.4300", "112.4497", "-25.7326", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "op", "104.1700", "101.3206", "-17.3072", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "106.1700", "48.0995", "-9.0144", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "104.0100", "104.4800", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "sp", "cp", "88.2540", "130.6992", "-18.4789", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "sp", "105.5300", "96.2006", "-44.9267", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "115.9800", "36.7902", "-13.1342", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "114.2300", "92.3110", "-35.5956", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "105.0080", "107.0693", "-27.7154", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "123.4200", "73.6781", "-21.6787", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "h*", "108.1900", "53.1250", "-8.5016", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "h", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "121.4584", "61.0647", "-21.6172", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "111.8725", "40.8369", "-15.6673", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "h*", "107.5130", "42.5182", "-21.7566", "-4.3372", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "118.5414", "56.9522", "-7.2655", "0.0000", "Ver. 1.0, Ref. 1"}, {"h+", "n+", "h+", "106.1100", "45.3280", "-14.0474", "1.9350", "Ver. 1.0, Ref. 1"}, {"c", "n+", "h+", "110.5100", "49.2170", "-12.2153", "-18.9667", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "112.1300", "66.4520", "4.8694", "37.7860", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "105.8500", "72.2630", "-28.1923", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "c", "109.7700", "44.8220", "-3.9132", "0.0000", "Ver. 1.0, Ref. 1"}, {"c-", "c", "h", "109.6700", "37.9190", "-7.3877", "-8.0694", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "115.0600", "59.0960", "-15.1430", "-12.9820", "Ver. 1.0, Ref. 1"}, {"o-", "c-", "o-", "130.0100", "111.2900", "-52.3390", "-28.1070", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "104.4900", "31.3750", "-4.4023", "-6.5271", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "112.7500", "61.1530", "-14.0190", "-13.2380", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "119.0700", "45.8110", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nr", "h*", "110.9100", "31.0910", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "117.4500", "83.9840", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "117.3500", "55.0400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "107.5000", "62.6790", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "117.0900", "31.4400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "h*", "117.2000", "37.2620", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "122.9480", "40.482", "-16.2028", "0.0", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "nr", "125.532", "101.8765", "-41.8094", "0.0", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "nr", "125.532", "101.8765", "-41.8094", "0.0", "Ver. 2.0, Ref. 3"}, {"n=2", "cr", "nr", "125.532", "101.8765", "-41.8094", "0.0", "Ver. 2.0, Ref. 3"}, {"nr", "cr", "nr", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.1, Ref. 1"}, {"c", "n=", "cr", "117.0900", "31.6888", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=", "c", "h", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "c", "h", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "h", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c", "c", "n=", "117.2847", "55.4431", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h*", "o*", "h*", "103.7000", "49.8400", "-11.6000", "-8.0000", "Ver. 1.2, Ref. 1"}, {"c'", "c", "n+", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.3, Ref. 1"}, {"c", "cp", "np", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"c", "o", "cp", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.4, Ref. 1"}, {"cp", "c", "cp", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.5, Ref. 1"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= CFF91 info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * CFF91_torsions_auto[216][8]= {{"*", "c", "n3n", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n3n", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n3n", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=1", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n3n", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "ct", "n3n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n3n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n3n", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=1", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "n3n", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "o", "n3n", "*", "0.3000", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "n3n", "*", "0.3000", "2", "0.", "Ver. 2.0, Ref. 2"}, {"*", "si", "n3n", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c", "*", "0.1580", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c'", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "cp", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c=", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "c=1", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "c=2", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "c=_3", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "na", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "np", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "n=1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "n=2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c", "o", "*", "0.1300", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "s", "*", "0.1367", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "p", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c", "si", "*", "0.1111", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "c'", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "cp", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "c=", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "c=1", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "c=2", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "c=_3", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n", "*", "3.2000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n", "h", "1.2000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n=", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "n=1", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "n=2", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "n=_3", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c'", "np", "*", "5.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "np", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "o", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "op", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "sp", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c'", "si", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "cp", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "c=", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "c=1", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "c=2", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "c=_3", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "na", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "np", "*", "2.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "np", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n=", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "n=1", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "n=2", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "n=_3", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "cp", "o", "*", "1.8000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "o", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "op", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "si", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "cp", "p", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "c=2", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "c=1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "c=2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "c=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=1", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np", "h", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=1", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n=2", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n=1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "n=2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n=1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "n=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "c=", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "c=1", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=1", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=2", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "o", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "s", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "sp", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "si", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "p", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "c+", "n", "*", "3.4000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "ct", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "na", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "np", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "o", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "s", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "ct", "si", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "na", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "np", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "n=1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "na", "n=2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "na", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 3"}, {"*", "na", "o", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "s", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "na", "si", "*", "0.0667", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n", "*", "0.3750", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "np", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "np", "h", "0.3750", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "n=1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n", "n=2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n", "o", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "s", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n", "si", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 2"}, {"*", "np", "n=", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "n=1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "np", "n=2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "np", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "np", "np", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "o", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "op", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "s", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "sp", "*", "10.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "np", "si", "*", "0.2500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "n=1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"h", "np", "n=2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"h", "np", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 3"}, {"h", "np", "np", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "o", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "op", "*", "5.50000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "s", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "sp", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"h", "np", "si", "*", "0.1250", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "n=2", "*", "7.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "n=1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "n=2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 2"}, {"*", "n=1", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=1", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=2", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "o", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "s", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "si", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 3"}, {"*", "o", "o", "*", "5.0000", "2", "0.", "Ver. 2.0, Ref. 8"}, {"*", "o", "s", "*", "5.0000", "2", "0.", "Ver. 2.0, Ref. 8"}, {"*", "o", "si", "*", "0.3333", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "o", "p", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "s", "*", "5.5000", "2", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "si", "*", "0.2333", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "s", "p", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "si", "si", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 2"}, {"*", "si", "p", "*", "0.0000", "3", "0.", "Ver. 2.0, Ref. 2"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= V1, 5= Phi0, 6= V2, 7= Phi0, 8= V3, 9= Phi0, 10= CFF91 info E = SUM(n=1,3) { V(n) * [ 1 - cos(n*Phi - Phi0(n)) ] } With: - Phi0 = Equilibrium angle */ char * CFF91_torsions[294][11]= {{"h", "c", "c", "h", "-0.2432", "0.0", "0.0617", "0.0", "-0.1383", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "h", "0.0000", "0.0", "0.0316", "0.0", "-0.1781", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "0.1223", "0.0", "0.0514", "0.0", "-0.2230", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=2", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=", "c=2", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=1", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c=2", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c=", "c=", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=1", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c=", "c=2", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=1", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=1", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=1", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=1", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=1", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=1", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c", "c=", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=1", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c", "c=2", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c=2", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "c=2", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 2.0, Ref. 3"}, {"c=", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=1", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "o", "c", "0.5302", "0.0", "0.0000", "0.0", "-0.2836", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "c", "-0.5203", "0.0", "-0.3028", "0.0", "-0.3450", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "o", "-0.1435", "0.0", "0.2530", "0.0", "-0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "o", "0.7137", "0.0", "0.2660", "0.0", "-0.2545", "0.0", "Ver. 1.0, Ref. 1"}, {"o", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "h*", "0.1863", "0.0", "-0.4338", "0.0", "-0.2121", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "h*", "-0.6732", "0.0", "-0.4778", "0.0", "-0.1670", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "c", "0.1904", "0.0", "-0.1342", "0.0", "-0.2460", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "h*", "-0.5187", "0.0", "-0.4837", "0.0", "-0.1692", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "h*", "-1.1506", "0.0", "-0.6344", "0.0", "-0.1845", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "c", "-0.1406", "0.0", "0.4168", "0.0", "0.0150", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "na", "-0.2428", "0.0", "0.4065", "0.0", "-0.3079", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "na", "0.1764", "0.0", "0.1766", "0.0", "-0.5206", "0.0", "Ver. 1.0, Ref. 1"}, {"na", "c", "c", "na", "0.3805", "0.0", "0.3547", "0.0", "-0.1102", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "h", "-0.4871", "0.0", "-0.4514", "0.0", "-0.1428", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "h", "-0.5374", "0.0", "-0.5091", "0.0", "-0.1361", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "c", "s", "-1.2002", "0.0", "-1.2999", "0.0", "-0.1626", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "s", "-0.2078", "0.0", "-0.1060", "0.0", "-0.3595", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "c", "-0.5073", "0.0", "0.0155", "0.0", "-0.0671", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "c", "-0.3338", "0.0", "-0.0684", "0.0", "-0.1706", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "c", "-1.8578", "0.0", "-3.8321", "0.0", "-0.4469", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "s", "-0.6269", "0.0", "-0.9598", "0.0", "-0.4957", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "s", "-0.0610", "0.0", "-0.6387", "0.0", "-0.3072", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "c", "-1.9835", "0.0", "-1.9213", "0.0", "-0.3816", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "s", "-0.7017", "0.0", "0.0201", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "h", "-0.4956", "0.0", "-3.4601", "0.0", "-0.2482", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "h", "-0.0528", "0.0", "-3.5171", "0.0", "-0.2394", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "h", "-0.0591", "0.0", "-0.6235", "0.0", "-0.0788", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c*", "0.0929", "0.0", "0.0689", "0.0", "-0.2466", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "c", "h", "-0.1569", "0.0", "-0.2030", "0.0", "-0.1599", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "h", "0.3055", "0.0", "0.6703", "0.0", "-0.2816", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "o'", "0.6989", "0.0", "1.2089", "0.0", "-0.0445", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "h", "-0.5265", "0.0", "0.3627", "0.0", "-0.1792", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "o'", "-0.9975", "0.0", "0.9060", "0.0", "-0.0195", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "c", "0.2904", "0.0", "1.0177", "0.0", "-0.1085", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "c", "-0.4768", "0.0", "0.6051", "0.0", "-0.1205", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "c", "c*", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "c*", "o", "-0.6359", "0.0", "1.4807", "0.0", "-0.0438", "0.0", "Ver. 1.0, Ref. 4"}, {"o'", "c*", "o", "h*", "-2.7332", "0.0", "2.9646", "0.0", "-0.0155", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "h*", "-2.9126", "0.0", "1.0199", "0.0", "-0.2077", "0.0", "Ver. 1.0, Ref. 4"}, {"o", "c", "c*", "o'", "0.6444", "0.0", "0.7897", "0.0", "1.0604", "0.0", "Ver. 1.0, Ref. 4"}, {"o'", "c*", "o", "c", "0.8905", "0.0", "3.2644", "0.0", "0.2646", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "o", "c*", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "c", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "c*", "o", "1.8341", "0.0", "2.0603", "0.0", "-0.0195", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c", "o", "c*", "0.1302", "0.0", "-0.3250", "0.0", "0.1134", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "c", "-0.9993", "0.0", "0.2131", "0.0", "-0.4274", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "o", "c*", "-1.8534", "0.0", "0.1981", "0.0", "0.2423", "0.0", "Ver. 1.0, Ref. 4"}, {"o", "c", "c*", "h", "-0.0390", "0.0", "1.4052", "0.0", "0.0757", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "h*", "-1.4540", "0.0", "0.8387", "0.0", "-0.4912", "0.0", "Ver. 1.0, Ref. 4"}, {"c*", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 1.0, Ref. 4"}, {"o'", "c'", "n", "c", "0.8297", "0.0", "3.7234", "0.0", "-0.0495", "0.0", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "h*", "-1.6938", "0.0", "2.7386", "0.0", "-0.3360", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "c", "-0.7532", "0.0", "2.7392", "0.0", "0.0907", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "h*", "-0.8236", "0.0", "2.1467", "0.0", "-0.2142", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "o'", "-0.1804", "0.0", "0.0012", "0.0", "0.0371", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "n", "0.1693", "0.0", "-0.0090", "0.0", "-0.0687", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "c'", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "c'", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c'", "0.0219", "0.0", "-0.0260", "0.0", "0.0714", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "h*", "-0.0483", "0.0", "-0.0077", "0.0", "-0.0014", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "h*", "-0.0148", "0.0", "-0.0791", "0.0", "-0.0148", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "o'", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "o'", "0.0442", "0.0", "0.0292", "0.0", "0.0562", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "n", "-0.0368", "0.0", "0.0389", "0.0", "-0.0529", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c", "0.3345", "0.0", "2.5838", "0.0", "-0.4006", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "h*", "-0.0078", "0.0", "2.6186", "0.0", "-0.0900", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c'", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "c", "-0.0017", "0.0", "-0.0072", "0.0", "0.0008", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c", "0.0406", "0.0", "0.0354", "0.0", "-0.1649", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c", "c'", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "c", "n", "c", "-0.0036", "0.0", "0.0049", "0.0", "0.0039", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "c'", "-0.4066", "0.0", "1.2513", "0.0", "-0.7507", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c'", "0.1907", "0.0", "1.1212", "0.0", "0.0426", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "8.3667", "0.0", "1.1932", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.0000", "0.0", "3.9661", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "h", "0.0000", "0.0", "1.8769", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "cp", "0.0000", "0.0", "6.8517", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.0000", "0.0", "4.7675", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "np", "0.0000", "0.0", "3.6689", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "cp", "0.0000", "0.0", "7.4664", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "np", "0.0000", "0.0", "8.8338", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "cp", "0.0000", "0.0", "13.7232", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.0000", "0.0", "12.0680", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.0000", "0.0", "6.3346", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "h*", "0.0000", "0.0", "1.8202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "h*", "0.0000", "0.0", "1.3342", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "cp", "10.8765", "0.0", "6.3475", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "cp", "0.0000", "0.0", "3.7848", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nh", "11.5270", "0.0", "2.7183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "cp", "0.0000", "0.0", "20.0173", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "h*", "0.0000", "0.0", "3.5096", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "cp", "0.0000", "0.0", "9.7830", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "np", "0.0000", "0.0", "4.8266", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "np", "cp", "0.0000", "0.0", "14.4766", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "cp", "0.0000", "0.0", "7.4549", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "np", "0.0000", "0.0", "10.7803", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "0.0000", "0.0", "4.1751", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "nh", "0.0000", "0.0", "5.1942", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "nh", "0.0000", "0.0", "5.2455", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "op", "cp", "0.0000", "0.0", "27.5402", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "cp", "0.0000", "0.0", "2.6043", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "op", "0.0000", "0.0", "10.6923", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "op", "0.0000", "0.0", "3.3516", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "cp", "0.0000", "0.0", "30.4292", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "cp", "0.0000", "0.0", "15.3660", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "op", "0.0000", "0.0", "9.7415", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "np", "0.0000", "0.0", "11.8577", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "sp", "cp", "0.0000", "0.0", "31.5576", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "cp", "0.0000", "0.0", "4.2145", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "sp", "0.0000", "0.0", "9.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "sp", "0.0000", "0.0", "3.7957", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "cp", "0.0000", "0.0", "21.1715", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "cp", "0.0000", "0.0", "13.6743", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "sp", "0.0000", "0.0", "8.5974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "np", "0.0000", "0.0", "11.5762", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "cp", "0.0000", "0.0", "23.0443", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "h*", "0.0000", "0.0", "7.0570", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "nh", "0.0000", "0.0", "12.7748", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "0.0000", "0.0", "4.8498", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "o", "0.0000", "0.0", "1.7234", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "h*", "-0.6900", "0.0", "0.5097", "0.0", "0.0095", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "cp", "0.0000", "0.0", "4.4072", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "h", "0.0000", "0.0", "1.5590", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "0.0000", "0.0", "5.3826", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "nn", "0.0000", "0.0", "1.3331", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "h*", "0.0000", "0.0", "1.2190", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "cp", "0.0000", "0.0", "6.7119", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nn", "h*", "0.0000", "0.0", "2.0184", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "h+", "-0.2458", "0.0", "-0.2789", "0.0", "-0.0294", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n+", "-1.9394", "0.0", "0.0086", "0.0", "0.2775", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n+", "-0.2179", "0.0", "-0.4127", "0.0", "-0.1252", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "c", "0.3624", "0.0", "0.1012", "0.0", "-0.2486", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "c", "0.7077", "0.0", "-0.3744", "0.0", "-0.1914", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c-", "o-", "-2.5999", "0.0", "1.0488", "0.0", "-0.2089", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c-", "-0.4054", "0.0", "0.4825", "0.0", "0.4345", "0.0", "Ver. 1.0, Ref. 1"}, {"c-", "c", "c", "h", "-1.2767", "0.0", "0.5949", "0.0", "0.2379", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "o-", "1.7311", "0.0", "1.8510", "0.0", "-0.1933", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "nr", "-0.5336", "0.0", "-0.0444", "0.0", "-0.1432", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "c+", "-5.4418", "0.0", "-0.0437", "0.0", "0.8035", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "h*", "-5.0724", "0.0", "-0.4980", "0.0", "-0.4381", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "c+", "2.8272", "0.0", "-0.3930", "0.0", "-0.3847", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "h*", "1.2659", "0.0", "-0.7739", "0.0", "0.0378", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "c", "-0.6197", "0.0", "3.0539", "0.0", "0.1861", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n=", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=1", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "n=2", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "n=", "cr", "nr", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "n=1", "cr", "nr", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "n=2", "cr", "nr", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "n=", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n=1", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 2.0, Ref. 3"}, {"c", "c", "n=2", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c", "n=", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n=1", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 2.0, Ref. 3"}, {"h", "c", "c", "n=2", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 2.0, Ref. 3"}, {"h*", "nr", "cr", "n=", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"h*", "nr", "cr", "n=1", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"h*", "nr", "cr", "n=2", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 2.0, Ref. 3"}, {"n=", "c", "c", "c", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"n=1", "c", "c", "c", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "c", "c", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 2.0, Ref. 3"}, {"nr", "cr", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.1, Ref. 1"}, {"c'", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 1"}, {"c*", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 4"}, {"n+", "c", "c'", "o'", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"n", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"h", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "c'", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.3, Ref. 1"}, {"n", "c", "c-", "o-", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"n+", "c", "c'", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "c-", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"s", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "s", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c'", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 1.3, Ref. 1"}, {"c*", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 4"}, {"c*", "c", "c", "c'", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 1.3, Ref. 4"}, {"h", "c", "o", "cp", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.4, Ref. 1"}, {"cp", "cp", "o", "c", "0.0000", "0.0", "1.8000", "0.0", "0.0000", "0.0", "Ver. 1.4, Ref. 1"}, {"cp", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.5, Ref. 1"}}; /* Inversions 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= CFF91 info E = K * (Chi - Chi0)^2 */ char * CFF91_inversions[70][7]= {{"c", "c=", "c=", "h", "2.0765", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "h", "h", "2.8561", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c", "c=", "2.0568", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "c", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c*", "h", "o'", "38.4069", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "c", "o'", "38.7949", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "h", "o'", "37.8733", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c*", "o", "o'", "46.9264", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c*", "o", "o'", "45.3800", "0.0", "Ver. 1.0, Ref. 4"}, {"c", "c'", "n", "o'", "24.3329", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "n", "c'", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "o'", "23.1691", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "n", "h*", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "c'", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "o'", "27.0615", "0.0", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c'", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "7.6012", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "10.4920", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "14.3802", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "h*", "5.9154", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "nh", "7.9682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "8.8464", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "np", "4.9959", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "op", "8.1654", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "op", "10.8102", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "sp", "5.5684", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "sp", "7.3414", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "nh", "10.2877", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nh", "8.3206", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "7.1794", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "13.0421", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "cp", "6.9644", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "10.7855", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "h*", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "np", "15.0921", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "o-", "44.1500", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "o-", "45.7520", "0.0", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "h*", "1.0035", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "nr", "54.4060", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "h*", "0.3176", "0.0", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "h*", "1.0035", "0.0", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "nr", "nr", "54.4060", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "n=", "cr", "h*", "0.3176", "0.0", "Ver. 1.1, Ref. 1"}, {"cp", "cp", "c", "np", "10.4920", "0.0", "Ver. 1.3, Ref. 1"}, {"*", "c'", "*", "*", "36.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "cp", "*", "*", "10.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c=", "*", "*", "2.0568", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c+", "*", "*", "54.4060", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "na", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n", "*", "*", "0.1000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "np", "*", "*", "5.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n=", "*", "*", "0.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "nr", "*", "*", "1.0035", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "o", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "s", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "p", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c'", "*", "*", "36.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "cp", "*", "*", "10.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c=", "*", "*", "2.0568", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "c+", "*", "*", "54.4060", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "na", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n", "*", "*", "0.1000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "np", "*", "*", "5.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "n=", "*", "*", "0.5000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "nr", "*", "*", "1.0035", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "o", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "s", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}, {"*", "p", "*", "*", "0.0000", "0.0", "Ver. 2.0, Ref. 1"}}; /* Non-bonded (9-6) 0= Key, 1= r, 2= eps, 3= CFF91 info E = eps(ij) [2(R(ij)/r(ij))^9 - 3(R(ij)/r(ij))^6] where R(ij) = [(r(i)^6 + r(j)^6))/2]^(1/6) eps(ij) = 2 sqrt(eps(i) * eps(j)) * r(i)^3 * r(j)^3/[r(i)^6 + r(j)^6] */ char * CFF91_vdw[40][4]= {{"c", "4.0100", "0.0540", "Ver. 2.0, Ref. 1"}, {"c*", "3.3080", "0.1200", "Ver. 2.0, Ref. 4"}, {"c'", "3.3080", "0.1200", "Ver. 2.0, Ref. 1"}, {"cp", "4.0100", "0.0640", "Ver. 2.0, Ref. 1"}, {"c=", "4.0100", "0.0640", "Ver. 2.0, Ref. 1"}, {"c=1", "4.0100", "0.0640", "Ver. 2.0, Ref. 3"}, {"c=2", "4.0100", "0.0640", "Ver. 2.0, Ref. 3"}, {"c-", "3.9080", "0.1200", "Ver. 2.0, Ref. 1"}, {"c+", "3.3080", "0.1200", "Ver. 2.0, Ref. 1"}, {"cr", "3.3080", "0.1200", "Ver. 2.0, Ref. 1"}, {"na", "4.0700", "0.0650", "Ver. 2.0, Ref. 1"}, {"n", "4.0700", "0.1060", "Ver. 2.0, Ref. 1"}, {"nr", "4.0700", "0.1060", "Ver. 2.0, Ref. 1"}, {"np", "3.5700", "0.0410", "Ver. 2.0, Ref. 1"}, {"nh", "4.0700", "0.1340", "Ver. 2.0, Ref. 1"}, {"nn", "4.0700", "0.0650", "Ver. 2.0, Ref. 1"}, {"n=", "4.1210", "0.0620", "Ver. 2.0, Ref. 1"}, {"n=1", "4.1210", "0.0620", "Ver. 2.0, Ref. 3"}, {"n=2", "4.1210", "0.0620", "Ver. 2.0, Ref. 3"}, {"n+", "3.2620", "0.0650", "Ver. 2.0, Ref. 1"}, {"o", "3.5350", "0.2400", "Ver. 2.0, Ref. 1"}, {"o*", "3.6080", "0.2740", "Ver. 2.0, Ref. 1"}, {"o'", "3.5350", "0.2670", "Ver. 2.0, Ref. 1"}, {"op", "3.5350", "0.1090", "Ver. 2.0, Ref. 1"}, {"o-", "3.5960", "0.1670", "Ver. 2.0, Ref. 1"}, {"s", "4.0270", "0.0710", "Ver. 2.0, Ref. 1"}, {"sp", "4.0270", "0.0710", "Ver. 2.0, Ref. 1"}, {"h", "2.9950", "0.0200", "Ver. 2.0, Ref. 1"}, {"h*", "1.0980", "0.0130", "Ver. 2.0, Ref. 1"}, {"h+", "1.0980", "0.0130", "Ver. 2.0, Ref. 1"}, {"p", "4.2950", "0.2150", "Ver. 2.0, Ref. 2"}, {"f", "3.2850", "0.3050", "Ver. 2.0, Ref. 2"}, {"cl", "3.9150", "0.3050", "Ver. 2.0, Ref. 2"}, {"Cl", "4.0000", "0.4000", "Ver. 2.0, Ref. 2"}, {"br", "4.2150", "0.3050", "Ver. 2.0, Ref. 2"}, {"Br", "4.3000", "0.3600", "Ver. 2.0, Ref. 2"}, {"i", "4.8000", "0.4000", "Ver. 2.0, Ref. 2"}, {"si", "4.4350", "0.0950", "Ver. 2.0, Ref. 2"}, {"Na", "3.1440", "0.5000", "Ver. 2.0, Ref. 2"}, {"ca+", "3.4720", "0.0500", "Ver. 2.0, Ref. 2"}}; /* Bond increments To implement atomic charges */ char * CFF91_bond_increments[560][5]= {{"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c*", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"c'", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"cr", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c-", "c", "0.2300", "-0.2300", "Ver. 1.0, Ref. 1"}, {"ct", "c", "-0.0400", "0.0400", "Ver. 1.0, Ref. 1"}, {"ct2", "c", "-0.0400", "0.0400", "Ver. 2.0, Ref. 6"}, {"na", "c", "-0.0827", "0.0827", "Ver. 1.0, Ref. 1"}, {"n", "c", "-0.2108", "0.2108", "Ver. 1.0, Ref. 1"}, {"nn", "c", "-0.2108", "0.2108", "Ver. 1.0, Ref. 2"}, {"nr", "c", "-0.4802", "0.4802", "Ver. 1.0, Ref. 1"}, {"np", "c", "-0.1100", "0.1100", "Ver. 1.0, Ref. 2"}, {"nh", "c", "-0.0610", "0.0610", "Ver. 1.0, Ref. 2"}, {"n=", "c", "-0.3000", "0.3000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=2", "c", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n+", "c", "-0.1571", "0.4071", "Ver. 1.0, Ref. 1"}, {"nt", "c", "-0.3640", "0.3640", "Ver. 1.0, Ref. 2"}, {"o", "c", "-0.1133", "0.1133", "Ver. 1.0, Ref. 1"}, {"op", "c", "-0.3957", "0.3957", "Ver. 2.0, Ref. 2"}, {"s", "c", "-0.0650", "0.0650", "Ver. 1.0, Ref. 1"}, {"s'", "c", "-0.1180", "0.1180", "Ver. 2.0, Ref. 2"}, {"sp", "c", "-0.1180", "0.1180", "Ver. 2.0, Ref. 2"}, {"h", "c", "0.0530", "-0.0530", "Ver. 1.0, Ref. 1"}, {"p", "c", "-0.0110", "0.0110", "Ver. 2.0, Ref. 2"}, {"f", "c", "-0.2750", "0.2750", "Ver. 2.0, Ref. 2"}, {"cl", "c", "-0.2260", "0.2260", "Ver. 2.0, Ref. 2"}, {"br", "c", "-0.1920", "0.1920", "Ver. 2.0, Ref. 2"}, {"i", "c", "-0.1120", "0.1120", "Ver. 2.0, Ref. 2"}, {"si", "c", "0.1767", "-0.1767", "Ver. 2.0, Ref. 2"}, {"c'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c*", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c*", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"cp", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c-", "c'", "0.1368", "-0.1368", "Ver. 2.0, Ref. 2"}, {"ct", "c'", "0.0927", "-0.0927", "Ver. 2.0, Ref. 2"}, {"ct2", "c'", "0.0927", "-0.0927", "Ver. 2.0, Ref. 6"}, {"n", "c'", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 2"}, {"np", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 2"}, {"nh", "c'", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"n=", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 2"}, {"n=1", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 3"}, {"n=2", "c'", "-0.0362", "0.0362", "Ver. 2.0, Ref. 3"}, {"n+", "c'", "0.1169", "0.1331", "Ver. 2.0, Ref. 2"}, {"nt", "c'", "-0.1641", "0.1641", "Ver. 2.0, Ref. 2"}, {"cp", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c=", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c=1", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c=2", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"c-", "c*", "0.1368", "-0.1368", "Ver. 2.0, Ref. 4"}, {"ct", "c*", "0.0927", "-0.0927", "Ver. 2.0, Ref. 4"}, {"ct2", "c*", "0.0927", "-0.0927", "Ver. 2.0, Ref. 6"}, {"n", "c*", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"nn", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"np", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"nh", "c*", "0.1422", "-0.1422", "Ver. 2.0, Ref. 4"}, {"n=", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"n=1", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"n=2", "c*", "-0.0362", "0.0362", "Ver. 2.0, Ref. 4"}, {"n+", "c*", "0.1169", "0.1331", "Ver. 2.0, Ref. 4"}, {"nt", "c*", "-0.1641", "0.1641", "Ver. 2.0, Ref. 4"}, {"o", "c'", "-0.0030", "0.0030", "Ver. 1.0, Ref. 1"}, {"o", "c*", "-0.0030", "0.0030", "Ver. 1.0, Ref. 4"}, {"o'", "c'", "-0.3964", "0.3964", "Ver. 1.0, Ref. 1"}, {"o'", "c*", "-0.3964", "0.3964", "Ver. 1.0, Ref. 4"}, {"op", "c'", "-0.0283", "0.0283", "Ver. 1.0, Ref. 1"}, {"sp", "c'", "0.0130", "-0.0130", "Ver. 1.0, Ref. 1"}, {"s", "c'", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"s'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"op", "c*", "-0.0283", "0.0283", "Ver. 1.0, Ref. 4"}, {"sp", "c*", "0.0130", "-0.0130", "Ver. 1.0, Ref. 4"}, {"s", "c*", "0.0140", "-0.0140", "Ver. 2.0, Ref. 4"}, {"s'", "c*", "0.0000", "0.0000", "Ver. 2.0, Ref. 4"}, {"h", "c'", "0.0456", "-0.0456", "Ver. 1.0, Ref. 1"}, {"h", "c*", "0.0456", "-0.0456", "Ver. 1.0, Ref. 4"}, {"p", "c'", "0.2396", "-0.2396", "Ver. 2.0, Ref. 2"}, {"f", "c'", "-0.1300", "0.1300", "Ver. 2.0, Ref. 2"}, {"cl", "c'", "-0.1020", "0.1020", "Ver. 2.0, Ref. 2"}, {"br", "c'", "-0.0800", "0.0800", "Ver. 2.0, Ref. 2"}, {"i", "c'", "0.1291", "-0.1291", "Ver. 2.0, Ref. 2"}, {"si", "c'", "0.4405", "-0.4405", "Ver. 2.0, Ref. 2"}, {"p", "c*", "0.2396", "-0.2396", "Ver. 2.0, Ref. 4"}, {"f", "c*", "-0.1300", "0.1300", "Ver. 2.0, Ref. 4"}, {"cl", "c*", "-0.1020", "0.1020", "Ver. 2.0, Ref. 4"}, {"br", "c*", "-0.0800", "0.0800", "Ver. 2.0, Ref. 4"}, {"i", "c*", "0.1291", "-0.1291", "Ver. 2.0, Ref. 4"}, {"si", "c*", "0.4405", "-0.4405", "Ver. 2.0, Ref. 4"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c-", "cp", "-0.0424", "0.0424", "Ver. 2.0, Ref. 2"}, {"ct", "cp", "-0.0852", "0.0852", "Ver. 2.0, Ref. 2"}, {"ct2", "cp", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n+", "cp", "-0.0489", "0.2989", "Ver. 2.0, Ref. 2"}, {"nn", "cp", "-0.0827", "0.0827", "Ver. 1.0, Ref. 1"}, {"np", "cp", "-0.2405", "0.2405", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "0.0500", "-0.0500", "Ver. 1.0, Ref. 1"}, {"n=", "cp", "-0.1993", "0.1993", "Ver. 2.0, Ref. 2"}, {"n=1", "cp", "-0.1993", "0.1993", "Ver. 2.0, Ref. 3"}, {"n=2", "cp", "-0.1993", "0.1993", "Ver. 2.0, Ref. 3"}, {"o", "cp", "-0.0265", "0.0265", "Ver. 1.0, Ref. 1"}, {"o'", "cp", "-0.3964", "0.3964", "Ver. 2.0, Ref. 2"}, {"op", "cp", "-0.0283", "0.0283", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "0.0130", "-0.0130", "Ver. 1.0, Ref. 1"}, {"s", "cp", "0.0120", "-0.0120", "Ver. 2.0, Ref. 2"}, {"s'", "cp", "-0.0732", "0.0732", "Ver. 2.0, Ref. 2"}, {"h", "cp", "0.1268", "-0.1268", "Ver. 1.0, Ref. 1"}, {"p", "cp", "0.0380", "-0.0380", "Ver. 1.0, Ref. 2"}, {"f", "cp", "-0.1300", "0.1300", "Ver. 2.0, Ref. 2"}, {"cl", "cp", "-0.1020", "0.1020", "Ver. 2.0, Ref. 2"}, {"br", "cp", "-0.0800", "0.0800", "Ver. 2.0, Ref. 2"}, {"i", "cp", "-0.0642", "0.0642", "Ver. 2.0, Ref. 2"}, {"si", "cp", "0.2270", "-0.2270", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=1", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"ct", "c=", "-0.0852", "0.0852", "Ver. 2.0, Ref. 2"}, {"ct2", "c=", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n+", "c=", "-0.0489", "0.2989", "Ver. 2.0, Ref. 2"}, {"np", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n=", "c=", "-0.3000", "0.3000", "Ver. 2.0, Ref. 2"}, {"n=1", "c=", "-0.3000", "0.3000", "Ver. 2.0, Ref. 2"}, {"n=2", "c=", "-0.3000", "0.3000", "Ver. 2.0, Ref. 2"}, {"n=", "c=1", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=1", "c=1", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=2", "c=1", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=", "c=2", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=1", "c=2", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"n=2", "c=2", "-0.3000", "0.3000", "Ver. 2.0, Ref. 3"}, {"o", "c=", "-0.0265", "0.0265", "Ver. 1.0, Ref. 1"}, {"op", "c=", "-0.3583", "0.3583", "Ver. 2.0, Ref. 2"}, {"o'", "c=", "-0.3583", "0.3583", "Ver. 2.0, Ref. 2"}, {"s", "c=", "0.0120", "-0.0120", "Ver. 2.0, Ref. 2"}, {"sp", "c=", "-0.0732", "0.0732", "Ver. 2.0, Ref. 2"}, {"s'", "c=", "-0.0732", "0.0732", "Ver. 2.0, Ref. 2"}, {"h", "c=", "0.1268", "-0.1268", "Ver. 1.0, Ref. 1"}, {"p", "c=", "0.0380", "-0.0380", "Ver. 2.0, Ref. 2"}, {"f", "c=", "-0.1300", "0.1300", "Ver. 2.0, Ref. 2"}, {"cl", "c=", "-0.1020", "0.1020", "Ver. 2.0, Ref. 2"}, {"br", "c=", "-0.0800", "0.0800", "Ver. 2.0, Ref. 2"}, {"i", "c=", "-0.0642", "0.0642", "Ver. 2.0, Ref. 2"}, {"si", "c=", "0.2270", "-0.2270", "Ver. 2.0, Ref. 2"}, {"ct", "c=1", "-0.0852", "0.0852", "Ver. 2.0, Ref. 3"}, {"ct2", "c=1", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nn", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "c=1", "-0.0489", "0.2989", "Ver. 2.0, Ref. 3"}, {"np", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nh", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"o", "c=1", "-0.0265", "0.0265", "Ver. 2.0, Ref. 3"}, {"op", "c=1", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"o'", "c=1", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"s", "c=1", "0.0120", "-0.0120", "Ver. 2.0, Ref. 3"}, {"sp", "c=1", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"s'", "c=1", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"h", "c=1", "0.1268", "-0.1268", "Ver. 2.0, Ref. 3"}, {"p", "c=1", "0.0380", "-0.0380", "Ver. 2.0, Ref. 3"}, {"f", "c=1", "-0.1300", "0.1300", "Ver. 2.0, Ref. 3"}, {"cl", "c=1", "-0.1020", "0.1020", "Ver. 2.0, Ref. 3"}, {"br", "c=1", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"i", "c=1", "-0.0642", "0.0642", "Ver. 2.0, Ref. 3"}, {"si", "c=1", "0.2270", "-0.2270", "Ver. 2.0, Ref. 3"}, {"ct", "c=2", "-0.0852", "0.0852", "Ver. 2.0, Ref. 3"}, {"ct2", "c=2", "-0.0852", "0.0852", "Ver. 2.0, Ref. 6"}, {"na", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 3"}, {"n", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nn", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "c=2", "-0.0489", "0.2989", "Ver. 2.0, Ref. 3"}, {"np", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"nh", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"o", "c=2", "-0.0265", "0.0265", "Ver. 2.0, Ref. 3"}, {"op", "c=2", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"o'", "c=2", "-0.3583", "0.3583", "Ver. 2.0, Ref. 3"}, {"s", "c=2", "0.0120", "-0.0120", "Ver. 2.0, Ref. 3"}, {"sp", "c=2", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"s'", "c=2", "-0.0732", "0.0732", "Ver. 2.0, Ref. 3"}, {"h", "c=2", "0.1268", "-0.1268", "Ver. 2.0, Ref. 3"}, {"p", "c=2", "0.0380", "-0.0380", "Ver. 2.0, Ref. 3"}, {"f", "c=2", "-0.1300", "0.1300", "Ver. 2.0, Ref. 3"}, {"cl", "c=2", "-0.1020", "0.1020", "Ver. 2.0, Ref. 3"}, {"br", "c=2", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"i", "c=2", "-0.0642", "0.0642", "Ver. 2.0, Ref. 3"}, {"si", "c=2", "0.2270", "-0.2270", "Ver. 2.0, Ref. 3"}, {"n=", "cr", "-0.4000", "0.4000", "Ver. 1.0, Ref. 1"}, {"n=1", "cr", "-0.4000", "0.4000", "Ver. 2.0, Ref. 3"}, {"n=2", "cr", "-0.4000", "0.4000", "Ver. 2.0, Ref. 3"}, {"nr", "cr", "-0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o-", "c-", "-0.5337", "0.0337", "Ver. 1.0, Ref. 1"}, {"h", "c-", "0.0530", "-0.0530", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"ct", "c-", "-0.0432", "0.0432", "Ver. 2.0, Ref. 2"}, {"ct2", "c-", "-0.0432", "0.0432", "Ver. 2.0, Ref. 6"}, {"n", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"n+", "c-", "-0.0097", "0.2597", "Ver. 2.0, Ref. 2"}, {"nn", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"np", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"n=", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 2"}, {"n=1", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 3"}, {"n=2", "c-", "-0.1607", "0.1607", "Ver. 2.0, Ref. 3"}, {"nh", "c-", "0.0176", "-0.0176", "Ver. 2.0, Ref. 2"}, {"o", "c-", "-0.1012", "0.1012", "Ver. 2.0, Ref. 2"}, {"op", "c-", "-0.3241", "0.3241", "Ver. 2.0, Ref. 2"}, {"o'", "c-", "-0.3241", "0.3241", "Ver. 2.0, Ref. 2"}, {"s", "c-", "0.0087", "-0.0087", "Ver. 2.0, Ref. 2"}, {"s-", "c-", "-0.3777", "-0.1223", "Ver. 2.0, Ref. 2"}, {"p", "c-", "0.0857", "-0.0857", "Ver. 2.0, Ref. 2"}, {"f", "c-", "-0.2241", "0.2241", "Ver. 2.0, Ref. 2"}, {"cl", "c-", "-0.0747", "0.0747", "Ver. 2.0, Ref. 2"}, {"br", "c-", "-0.0281", "0.0281", "Ver. 2.0, Ref. 2"}, {"i", "c-", "-0.0185", "0.0185", "Ver. 2.0, Ref. 2"}, {"si", "c-", "0.2775", "-0.2775", "Ver. 2.0, Ref. 2"}, {"nr", "c+", "0.0680", "0.2653", "Ver. 1.0, Ref. 1"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ct2", "ct2", "0.0000", "0.0000", "Ver. 1.0, Ref. 6"}, {"na", "ct", "0.0636", "-0.0636", "Ver. 2.0, Ref. 2"}, {"n", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 2"}, {"nn", "ct", "-0.0920", "0.0920", "Ver. 2.0, Ref. 2"}, {"n+", "ct", "0.1508", "0.0992", "Ver. 2.0, Ref. 2"}, {"nt", "ct", "-0.2454", "0.2454", "Ver. 2.0, Ref. 2"}, {"np", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 2"}, {"nh", "ct", "0.0568", "-0.0568", "Ver. 2.0, Ref. 2"}, {"n=", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 2"}, {"n=1", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 3"}, {"n=2", "ct", "-0.1204", "0.1204", "Ver. 2.0, Ref. 3"}, {"o", "ct", "-0.0675", "0.0675", "Ver. 2.0, Ref. 2"}, {"op", "ct", "-0.2874", "0.2874", "Ver. 2.0, Ref. 2"}, {"o'", "ct", "-0.2874", "0.2874", "Ver. 2.0, Ref. 2"}, {"s", "ct", "0.0581", "-0.0581", "Ver. 2.0, Ref. 2"}, {"sp", "ct", "0.0135", "-0.0135", "Ver. 2.0, Ref. 2"}, {"s'", "ct", "0.0135", "-0.0135", "Ver. 2.0, Ref. 2"}, {"p", "ct", "0.1335", "-0.1335", "Ver. 2.0, Ref. 2"}, {"h", "ct", "0.2052", "-0.2052", "Ver. 2.0, Ref. 2"}, {"f", "ct", "-0.1873", "0.1873", "Ver. 2.0, Ref. 2"}, {"cl", "ct", "-0.0319", "0.0319", "Ver. 2.0, Ref. 2"}, {"br", "ct", "0.0173", "-0.0173", "Ver. 2.0, Ref. 2"}, {"i", "ct", "0.0281", "-0.0281", "Ver. 2.0, Ref. 2"}, {"na", "ct2", "0.0636", "-0.0636", "Ver. 2.0, Ref. 6"}, {"n", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"nn", "ct2", "-0.0920", "0.0920", "Ver. 2.0, Ref. 6"}, {"n+", "ct2", "0.1508", "0.0992", "Ver. 2.0, Ref. 6"}, {"nt", "ct2", "-0.2454", "0.2454", "Ver. 2.0, Ref. 2"}, {"np", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"nh", "ct2", "0.0568", "-0.0568", "Ver. 2.0, Ref. 6"}, {"n=", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"n=1", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"n=2", "ct2", "-0.1204", "0.1204", "Ver. 2.0, Ref. 6"}, {"o", "ct2", "-0.0675", "0.0675", "Ver. 2.0, Ref. 6"}, {"op", "ct2", "-0.2874", "0.2874", "Ver. 2.0, Ref. 6"}, {"o'", "ct2", "-0.2874", "0.2874", "Ver. 2.0, Ref. 6"}, {"s", "ct2", "0.0581", "-0.0581", "Ver. 2.0, Ref. 6"}, {"sp", "ct2", "0.0135", "-0.0135", "Ver. 2.0, Ref. 6"}, {"s'", "ct2", "0.0135", "-0.0135", "Ver. 2.0, Ref. 6"}, {"p", "ct2", "0.1335", "-0.1335", "Ver. 2.0, Ref. 6"}, {"h", "ct2", "0.2052", "-0.2052", "Ver. 2.0, Ref. 6"}, {"f", "ct2", "-0.1873", "0.1873", "Ver. 2.0, Ref. 6"}, {"cl", "ct2", "-0.0319", "0.0319", "Ver. 2.0, Ref. 6"}, {"br", "ct2", "0.0173", "-0.0173", "Ver. 2.0, Ref. 6"}, {"i", "ct2", "0.0281", "-0.0281", "Ver. 2.0, Ref. 6"}, {"si", "ct2", "0.3266", "-0.3266", "Ver. 2.0, Ref. 6"}, {"na", "na", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"nn", "na", "-0.0371", "0.0371", "Ver. 2.0, Ref. 2"}, {"np", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"nh", "na", "0.0919", "-0.0919", "Ver. 2.0, Ref. 2"}, {"n+", "na", "0.0850", "0.1650", "Ver. 2.0, Ref. 2"}, {"nt", "na", "-0.1927", "0.1927", "Ver. 2.0, Ref. 2"}, {"n=", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=1", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 3"}, {"n=2", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 3"}, {"o", "na", "-0.0254", "0.0254", "Ver. 2.0, Ref. 2"}, {"op", "na", "-0.2369", "0.2369", "Ver. 2.0, Ref. 2"}, {"o'", "na", "-0.2369", "0.2369", "Ver. 2.0, Ref. 2"}, {"s", "na", "0.0966", "-0.0966", "Ver. 2.0, Ref. 2"}, {"sp", "na", "0.0551", "-0.0551", "Ver. 2.0, Ref. 2"}, {"s'", "na", "0.0551", "-0.0551", "Ver. 2.0, Ref. 2"}, {"p", "na", "0.2518", "-0.2518", "Ver. 2.0, Ref. 2"}, {"f", "na", "-0.1415", "0.1415", "Ver. 2.0, Ref. 2"}, {"cl", "na", "0.0117", "-0.0117", "Ver. 2.0, Ref. 2"}, {"br", "na", "0.0601", "-0.0601", "Ver. 2.0, Ref. 2"}, {"i", "na", "0.0714", "-0.0714", "Ver. 2.0, Ref. 2"}, {"si", "na", "0.3501", "-0.3501", "Ver. 2.0, Ref. 2"}, {"h*", "na", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nn", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"np", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nh", "n", "0.1637", "-0.1637", "Ver. 2.0, Ref. 2"}, {"n=", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "n", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "n", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "n", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "n", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "n", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "n", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "n", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "n", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "n", "0.4395", "-0.4395", "Ver. 1.0, Ref. 1"}, {"p", "n", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "n", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "n", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "n", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "n", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "n", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"nn", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"np", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nh", "nn", "0.1637", "-0.1637", "Ver. 2.0, Ref. 2"}, {"n=", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "nn", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "nn", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "nn", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "nn", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "nn", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "nn", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "nn", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "nn", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "nn", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"p", "nn", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "nn", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "nn", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "nn", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "nn", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "nn", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"np", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "np", "-0.2823", "0.2823", "Ver. 1.0, Ref. 1"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "np", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "np", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "np", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "np", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "np", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o-", "np", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "np", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "np", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "np", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "np", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"p", "np", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "np", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "np", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "np", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "np", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "np", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=1", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 3"}, {"n=2", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 3"}, {"n+", "nh", "-0.0044", "0.2544", "Ver. 2.0, Ref. 2"}, {"nt", "nh", "-0.2783", "0.2783", "Ver. 2.0, Ref. 2"}, {"o", "nh", "-0.1090", "0.1090", "Ver. 2.0, Ref. 2"}, {"op", "nh", "-0.3148", "0.3148", "Ver. 2.0, Ref. 2"}, {"o'", "nh", "-0.3148", "0.3148", "Ver. 2.0, Ref. 2"}, {"s", "nh", "-0.0046", "0.0046", "Ver. 2.0, Ref. 2"}, {"sp", "nh", "-0.0454", "0.0454", "Ver. 2.0, Ref. 2"}, {"s'", "nh", "-0.0454", "0.0454", "Ver. 2.0, Ref. 2"}, {"h*", "nh", "0.3925", "-0.3925", "Ver. 1.0, Ref. 1"}, {"hi", "nh", "0.3925", "0.1075", "Ver. 1.0, Ref. 1"}, {"p", "nh", "0.1375", "-0.1375", "Ver. 2.0, Ref. 2"}, {"f", "nh", "-0.2220", "0.2220", "Ver. 2.0, Ref. 2"}, {"cl", "nh", "-0.0854", "0.0854", "Ver. 2.0, Ref. 2"}, {"br", "nh", "-0.0438", "0.0438", "Ver. 2.0, Ref. 2"}, {"i", "nh", "-0.0356", "0.0358", "Ver. 2.0, Ref. 2"}, {"si", "nh", "0.2278", "-0.2278", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"n+", "n=", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"nt", "n=", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"nt", "n=1", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"nt", "n=2", "-0.1186", "0.1186", "Ver. 2.0, Ref. 2"}, {"o", "n=", "0.0427", "-0.0427", "Ver. 2.0, Ref. 2"}, {"op", "n=", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o'", "n=", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"o-", "n=", "-0.1684", "0.1684", "Ver. 2.0, Ref. 2"}, {"s", "n=", "0.1753", "-0.1753", "Ver. 2.0, Ref. 2"}, {"sp", "n=", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"s'", "n=", "0.1346", "-0.1346", "Ver. 2.0, Ref. 2"}, {"h*", "n=", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"p", "n=", "0.3359", "-0.3359", "Ver. 2.0, Ref. 2"}, {"f", "n=", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"cl", "n=", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"br", "n=", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"i", "n=", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"si", "n=", "0.4368", "-0.4368", "Ver. 2.0, Ref. 2"}, {"n+", "n=1", "0.1617", "0.0883", "Ver. 2.0, Ref. 3"}, {"o", "n=1", "0.0427", "-0.0427", "Ver. 2.0, Ref. 3"}, {"op", "n=1", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"o'", "n=1", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"s", "n=1", "0.1753", "-0.1753", "Ver. 2.0, Ref. 3"}, {"sp", "n=1", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"s'", "n=1", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"h*", "n=1", "0.3278", "-0.3278", "Ver. 2.0, Ref. 3"}, {"p", "n=1", "0.3359", "-0.3359", "Ver. 2.0, Ref. 3"}, {"f", "n=1", "-0.0731", "0.0731", "Ver. 2.0, Ref. 3"}, {"cl", "n=1", "0.0897", "-0.0897", "Ver. 2.0, Ref. 3"}, {"br", "n=1", "0.1422", "-0.1422", "Ver. 2.0, Ref. 3"}, {"i", "n=1", "0.1554", "-0.1554", "Ver. 2.0, Ref. 3"}, {"si", "n=1", "0.4368", "-0.4368", "Ver. 2.0, Ref. 3"}, {"n+", "n=2", "0.1617", "0.0883", "Ver. 2.0, Ref. 3"}, {"o", "n=2", "0.0427", "-0.0427", "Ver. 2.0, Ref. 3"}, {"op", "n=2", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"s", "n=2", "0.1753", "-0.1753", "Ver. 2.0, Ref. 3"}, {"sp", "n=2", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"o'", "n=2", "-0.1684", "0.1684", "Ver. 2.0, Ref. 3"}, {"s'", "n=2", "0.1346", "-0.1346", "Ver. 2.0, Ref. 3"}, {"h*", "n=2", "0.3278", "-0.3278", "Ver. 2.0, Ref. 3"}, {"p", "n=2", "0.3359", "-0.3359", "Ver. 2.0, Ref. 3"}, {"f", "n=2", "-0.0731", "0.0731", "Ver. 2.0, Ref. 3"}, {"cl", "n=2", "0.0897", "-0.0897", "Ver. 2.0, Ref. 3"}, {"br", "n=2", "0.1422", "-0.1422", "Ver. 2.0, Ref. 3"}, {"i", "n=2", "0.1554", "-0.1554", "Ver. 2.0, Ref. 3"}, {"si", "n=2", "0.4368", "-0.4368", "Ver. 2.0, Ref. 3"}, {"n+", "n+", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o", "n+", "0.1250", "0.1250", "Ver. 2.0, Ref. 2"}, {"op", "n+", "-0.0918", "0.3418", "Ver. 2.0, Ref. 2"}, {"o'", "n+", "-0.0918", "0.3418", "Ver. 2.0, Ref. 2"}, {"s", "n+", "0.2755", "-0.0255", "Ver. 2.0, Ref. 2"}, {"sp", "n+", "0.2341", "0.0159", "Ver. 2.0, Ref. 2"}, {"s'", "n+", "0.2341", "0.0159", "Ver. 2.0, Ref. 2"}, {"h+", "n+", "0.2800", "-0.0300", "Ver. 1.0, Ref. 1"}, {"p", "n+", "0.4494", "-0.1994", "Ver. 2.0, Ref. 2"}, {"f", "n+", "0.0062", "0.2438", "Ver. 2.0, Ref. 2"}, {"cl", "n+", "0.1858", "0.0642", "Ver. 2.0, Ref. 2"}, {"br", "n+", "0.2452", "0.0048", "Ver. 2.0, Ref. 2"}, {"i", "n+", "0.2615", "-0.0115", "Ver. 2.0, Ref. 2"}, {"si", "n+", "0.5583", "-0.3083", "Ver. 2.0, Ref. 2"}, {"h*", "nr", "0.4068", "-0.4068", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o", "nt", "0.1523", "-0.1523", "Ver. 2.0, Ref. 2"}, {"op", "nt", "-0.0585", "0.0585", "Ver. 2.0, Ref. 2"}, {"o'", "nt", "-0.0585", "0.0585", "Ver. 2.0, Ref. 2"}, {"s", "nt", "0.3010", "-0.3010", "Ver. 2.0, Ref. 2"}, {"sp", "nt", "0.2612", "-0.2612", "Ver. 2.0, Ref. 2"}, {"s'", "nt", "0.2612", "-0.2612", "Ver. 2.0, Ref. 2"}, {"p", "nt", "0.4691", "-0.4691", "Ver. 2.0, Ref. 2"}, {"h", "nt", "0.4688", "-0.4688", "Ver. 2.0, Ref. 2"}, {"f", "nt", "0.0367", "-0.0367", "Ver. 2.0, Ref. 2"}, {"cl", "nt", "0.2141", "-0.2141", "Ver. 2.0, Ref. 2"}, {"br", "nt", "0.2727", "-0.2727", "Ver. 2.0, Ref. 2"}, {"i", "nt", "0.2889", "-0.2889", "Ver. 2.0, Ref. 2"}, {"si", "nt", "0.5738", "-0.5738", "Ver. 2.0, Ref. 2"}, {"h*", "o*", "0.3991", "-0.3991", "Ver. 1.0, Ref. 1"}, {"h*", "o", "0.4241", "-0.4241", "Ver. 1.0, Ref. 1"}, {"o", "o", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"op", "o", "-0.1962", "0.1962", "Ver. 2.0, Ref. 2"}, {"o'", "o", "-0.1962", "0.1962", "Ver. 2.0, Ref. 2"}, {"s", "o", "0.1143", "-0.1143", "Ver. 2.0, Ref. 2"}, {"sp", "o", "0.0766", "-0.0766", "Ver. 2.0, Ref. 2"}, {"s'", "o", "0.0766", "-0.0766", "Ver. 2.0, Ref. 2"}, {"p", "o", "0.2548", "-0.2548", "Ver. 2.0, Ref. 2"}, {"f", "o", "-0.1077", "0.1077", "Ver. 2.0, Ref. 2"}, {"cl", "o", "0.0367", "-0.0367", "Ver. 2.0, Ref. 2"}, {"br", "o", "0.0818", "-0.0818", "Ver. 2.0, Ref. 2"}, {"i", "o", "0.0924", "-0.0924", "Ver. 2.0, Ref. 2"}, {"si", "o", "0.3425", "-0.3425", "Ver. 2.0, Ref. 2"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o'", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s", "op", "0.3386", "-0.3386", "Ver. 2.0, Ref. 2"}, {"sp", "op", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"s'", "op", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"p", "op", "0.4933", "-0.4933", "Ver. 2.0, Ref. 2"}, {"h", "op", "0.4943", "-0.4943", "Ver. 2.0, Ref. 2"}, {"f", "op", "0.0888", "-0.0888", "Ver. 2.0, Ref. 2"}, {"cl", "op", "0.2585", "-0.2585", "Ver. 2.0, Ref. 2"}, {"br", "op", "0.3140", "-0.3140", "Ver. 2.0, Ref. 2"}, {"i", "op", "0.3297", "-0.3297", "Ver. 2.0, Ref. 2"}, {"si", "op", "0.5883", "-0.5883", "Ver. 2.0, Ref. 2"}, {"o'", "o'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s", "o'", "0.3386", "-0.3386", "Ver. 2.0, Ref. 2"}, {"sp", "o'", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"s'", "o'", "0.3024", "-0.3024", "Ver. 2.0, Ref. 2"}, {"p", "o'", "0.4933", "-0.4933", "Ver. 2.0, Ref. 2"}, {"h", "o'", "0.4943", "-0.4943", "Ver. 2.0, Ref. 2"}, {"f", "o'", "0.0888", "-0.0888", "Ver. 2.0, Ref. 2"}, {"cl", "o'", "0.2585", "-0.2585", "Ver. 2.0, Ref. 2"}, {"br", "o'", "0.3140", "-0.3140", "Ver. 2.0, Ref. 2"}, {"i", "o'", "0.3297", "-0.3297", "Ver. 2.0, Ref. 2"}, {"si", "o'", "0.5883", "-0.5883", "Ver. 2.0, Ref. 2"}, {"p", "o-", "0.3500", "-0.8500", "Ver. 2.0, Ref. 2"}, {"s", "s", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"sp", "s", "-0.0455", "0.0455", "Ver. 2.0, Ref. 2"}, {"s'", "s", "-0.0455", "0.0455", "Ver. 2.0, Ref. 2"}, {"p", "s", "0.1600", "-0.1600", "Ver. 2.0, Ref. 2"}, {"h", "s", "0.1392", "-0.1392", "Ver. 2.0, Ref. 2"}, {"f", "s", "-0.2380", "0.2380", "Ver. 2.0, Ref. 2"}, {"cl", "s", "-0.0898", "0.0898", "Ver. 2.0, Ref. 2"}, {"br", "s", "-0.0437", "0.0437", "Ver. 2.0, Ref. 2"}, {"i", "s", "-0.0345", "0.0345", "Ver. 2.0, Ref. 2"}, {"si", "s", "0.2634", "-0.2634", "Ver. 2.0, Ref. 2"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s'", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"p", "sp", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"h", "sp", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"f", "sp", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"cl", "sp", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"br", "sp", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"i", "sp", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"si", "sp", "0.3172", "-0.3172", "Ver. 2.0, Ref. 2"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"p", "s'", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"h", "s'", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"f", "s'", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"cl", "s'", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"br", "s'", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"i", "s'", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"si", "s'", "0.3172", "-0.3172", "Ver. 2.0, Ref. 2"}, {"p", "s-", "0.1824", "-0.6824", "Ver. 2.0, Ref. 2"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"h", "p", "-0.0356", "0.0356", "Ver. 2.0, Ref. 2"}, {"f", "p", "-0.3869", "0.3869", "Ver. 2.0, Ref. 2"}, {"cl", "p", "-0.2544", "0.2544", "Ver. 2.0, Ref. 2"}, {"br", "p", "-0.2156", "0.2156", "Ver. 2.0, Ref. 2"}, {"i", "p", "-0.2110", "0.2110", "Ver. 2.0, Ref. 2"}, {"si", "p", "0.1069", "-0.1069", "Ver. 2.0, Ref. 2"}, {"h", "h", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"f", "h", "-0.3823", "0.3823", "Ver. 2.0, Ref. 2"}, {"cl", "h", "-0.2404", "0.2404", "Ver. 2.0, Ref. 2"}, {"br", "h", "-0.1978", "0.1978", "Ver. 2.0, Ref. 2"}, {"i", "h", "-0.1923", "0.1923", "Ver. 2.0, Ref. 2"}, {"si", "h", "0.1537", "-0.1537", "Ver. 2.0, Ref. 2"}, {"f", "f", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"cl", "f", "0.1589", "-0.1589", "Ver. 2.0, Ref. 2"}, {"br", "f", "0.2099", "-0.2099", "Ver. 2.0, Ref. 2"}, {"i", "f", "0.2234", "-0.2234", "Ver. 2.0, Ref. 2"}, {"si", "f", "0.4789", "-0.4789", "Ver. 2.0, Ref. 2"}, {"cl", "cl", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"br", "cl", "0.0507", "-0.0507", "Ver. 2.0, Ref. 2"}, {"i", "cl", "0.0623", "-0.0623", "Ver. 2.0, Ref. 2"}, {"si", "cl", "0.3598", "-0.3598", "Ver. 2.0, Ref. 2"}, {"br", "br", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"i", "br", "0.0110", "-0.0110", "Ver. 2.0, Ref. 2"}, {"si", "br", "0.3273", "-0.3273", "Ver. 2.0, Ref. 2"}, {"i", "i", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"si", "i", "0.3263", "-0.3263", "Ver. 2.0, Ref. 2"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}}; Atomes-GNU-1.1.14/src/calc/force_fields/charmm22_prot.c000066400000000000000000003746351457665371200224570ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file charmm22_prot.c * @short CHARMM-charmm22_prot force field, from 'charmm22_prot' * @author Sébastien Le Roux */ /* * This file: 'charmm22_prot.c' * * Contains: * CHARMM-charmm22_prot force field, data from taken from: - the file: 'charmm22_prot' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm22_prot_atoms[47][5] Bonds : charmm22_prot_bonds[122][5] Angles : charmm22_prot_angles[324][8] Dihedrals : charmm22_prot_dihedrals[445][8] Impropers : charmm22_prot_impropers[34][8] Non bonded : charmm22_prot_vdw[47][6] */ #include "global.h" int charmm22_prot_objects[14] = {47, 0, 0, 122, 0, 0, 324, 0, 445, 0 , 0, 34, 47, 0}; int charmm22_prot_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm22_prot info */ char * charmm22_prot_atoms[47][5]= {{"H", "1.00800", "H", "polar H", "41"}, {"H", "1.00800", "HC", "N-ter H", "42"}, {"H", "1.00800", "HA", "nonpolar H", "43"}, {"H", "1.00800", "HP", "aromatic H", "44"}, {"H", "1.00800", "HB", "backbone H", "45"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "46"}, {"H", "1.00800", "HR2", "(+) his HE1", "47"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "48"}, {"H", "1.00800", "HS", "thiol hydrogen", "49"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "50"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "51"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "52"}, {"C", "12.01100", "CA", "aromatic C", "53"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "54"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "55"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "56"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "57"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "58"}, {"C", "12.01100", "CPT", "trp C between rings", "59"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "60"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "61"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "62"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "63"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "64"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "65"}, {"C", "12.01100", "CS", "thiolate carbon", "66"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "67"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "68"}, {"C", "12.01100", "C3", "cyclopropyl carbon", "69"}, {"N", "14.00700", "N", "proline N", "70"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "71"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "72"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "73"}, {"N", "14.00700", "NH1", "peptide nitrogen", "74"}, {"N", "14.00700", "NH2", "amide nitrogen", "75"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "76"}, {"N", "14.00700", "NC2", "guanidinium nitroogen", "77"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "78"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "79"}, {"O", "15.99900", "O", "carbonyl oxygen", "80"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "81"}, {"O", "15.99900", "OC", "carboxylate oxygen", "82"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "83"}, {"O", "15.99940", "OS", "ester oxygen", "84"}, {"S", "32.06000", "S", "sulphur", "85"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "86"}, {"S", "32.06000", "SS", "thiolate sulfur", "87"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm22_prot info V(R) = Kb x (R - R0)^2 */ char * charmm22_prot_bonds[122][5]= {{"NH2", "CT1", "240.00", "1.455", " "}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CPT", "CA", "305.000", "1.3680", "adm jr., 12/30/91, for jwk"}, {"CPT", "CPT", "360.000", "1.4000", "jr., 12/30/91, for jwk"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CY", "CA", "350.000", "1.3650", "jr., 5/08/91, indole CCDB structure search"}, {"CY", "CPT", "350.000", "1.4400", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "230.000", "1.5100", "Kb from alkane freq.. b0 from TRP crystal"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CA", "340.000", "1.0830", "trp, adm jr., 10/02/89"}, {"HA", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "330.000", "1.0800", "JWK 05/14/91 new r0 from indole"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HP", "CY", "350.000", "1.0800", "jr., 12/30/91, for jwk"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "463.000", "1.3650", "403.0->463.0, 1.305->1.365 guanidinium (KK)"}, {"NC2", "CT2", "261.000", "1.4900", "arg, (DS)"}, {"NC2", "CT3", "261.000", "1.4900", "methylguanidinium, adm jr., 3/26/92"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "270.000", "1.3700", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "270.000", "1.3750", "jr., 12/30/91, for jwk"}, {"NY", "H", "465.000", "0.9760", "indole JWK 08/28/89"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HR1", "CD", "330.000", "1.1100", " "}, {"O", "CD", "720.000", "1.2050", " "}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm22_prot info V(S) = Kub x (S - S0)^2 */ char * charmm22_prot_angles[324][8]= {{"H", "NH2", "CT1", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2"}, {"NH2", "CT1", "CT2", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT3", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"CT1", "CD", "OH1", "55.000", "110.50", " ", " ", "From ASPP CT2-CD-OH1"}, {"CT3", "CT1", "CD", "52.000", "108.00", " ", " ", "Ala cter"}, {"NH2", "CT1", "HB", "38.000", "109.50", "50.00", "2.1400", "From LSN NH2-CT2-HA"}, {"NH2", "CT1", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CPT", "CA", "CA", "60.000", "118.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CPT", "CA", "60.000", "122.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CY", "CA", "120.000", "107.40", "25.00", "2.26100", "jr., 12/30/91, for jwk"}, {"CPT", "NY", "CA", "110.000", "108.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 6/27/2012, for Thr with CT1 patch"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CY", "CA", "45.800", "129.4000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "CY", "CPT", "45.800", "124.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"CY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "CT1", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "NY", "CA", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA", "CA", "CA", "29.000", "120.00", "25.00", "2.15250", "trp, adm jr., 10/02/89"}, {"HA", "CA", "CPT", "41.000", "122.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"HA", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CS", "HA", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "HA", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT2", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CY", "33.430", "109.5000", " ", " ", "ADM JR., 10/02/89, from CT2CT2HA (U-B OMITTED), FOR JOANNA"}, {"HA", "CT2", "HA", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "HA", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "CA", "20.000", "126.40", "25.00", "2.18600", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT2", "HB", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "jr., 12/30/91, for jwk"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "52.000", "120.00", "90.00", "2.36420", "changed from 60.0/120.3 for guanidinium (KK)"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA", "51.500", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT3", "HA", "51.500", "107.5000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HA", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT2", "HB", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT3", "HA", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CT3", "67.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NY", "CA", "CY", "120.000", "110.00", "25.00", "2.24000", "jr., 12/30/91, for jwk"}, {"NY", "CA", "HA", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT2", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT3", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"O", "CD", "HR1", "75.000", "121.0000", " ", " ", " "}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm22_prot info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm22_prot_dihedrals[445][8]= {{"NH2", "CT1", "C", "O", "0.0000", "1", "0.00", " "}, {"NH2", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "CT1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "C", "0.000", "1", "0.00", " "}, {"H", "NH2", "CT1", "HB", "0.110", "3", "0.00", "From LSN HC-NH2-CT2-HA"}, {"H", "NH2", "CT1", "CT2", "0.110", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"H", "NH2", "CT1", "CT3", "0.110", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CA", "CPT", "CPT", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "CT2", "CT1", "C", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c"}, {"CE1", "CE1", "CT3", "HA", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPT", "CA", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "NY", "CA", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", " "}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CT2", "CT3", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CY", "CA", "NY", "CPT", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NY", "CA", "CY", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CA", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CPT", "0.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT1", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA", "CA", "CA", "CA", "3.5000", "2", "180.00", "adm jr., 10/02/89"}, {"HA", "CA", "CA", "CPT", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CA", "HA", "2.5000", "2", "180.00", "ADM JR., 10/02/89"}, {"HA", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "TRP (JES)"}, {"HA", "CA", "CPT", "CY", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CY", "CPT", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "NY", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "NY", "H", "1.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT2", "CY", "CA", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT3", "CS", "HA", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CY", "CA", "CPT", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CA", "HA", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HB", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HB", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "NY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT1", "0.2400", "1", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.1500", "2", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.2700", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "0.4000", "1", "0.00", "adm jr. 3/24/92, for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CT2", "3.5000", "2", "180.00", "JWK"}, {"NY", "CA", "CY", "HA", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CA", "HA", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CY", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CPT", "CPT", "X", "0.0000", "2", "180.00", "JWK indole 05/14/91"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1950", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "rotation barrier in Ethane (SF)"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1550", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm22_prot info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm22_prot_impropers[34][8]= {{"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "40.0000", "0", "0.0000", "5.75->40.0 GUANIDINIUM (KK)"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "100.0000", "0", "0.0000", "jr., 5/15/91, indole 3-21G HE1 out-of-plane surf."}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm22_prot info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm22_prot_vdw[47][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CPT", "-0.090000", "1.800000", "-0.090000", "1.900000", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CT1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CT2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CT3", "-0.080000", "2.060000", "-0.010000", "1.900000", " "}, {"CY", "-0.070000", "1.992400", " ", " ", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HB", "-0.022000", "1.320000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}, {"C3", "-0.020000", "2.275000", " ", " ", " "}}; Atomes-GNU-1.1.14/src/calc/force_fields/charmm22_prot_metals.c000066400000000000000000004555531457665371200240230ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file charmm22_prot_metals.c * @short * @author Sébastien Le Roux */ /* * This file: 'charmm22_prot_metals.c' * * Contains: * CHARMM-charmm22_prot_metals force field, data from taken from: - the file: 'charmm22_prot_metals' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm22_prot_metals_atoms[98][5] Bonds : charmm22_prot_metals_bonds[139][5] Angles : charmm22_prot_metals_angles[345][8] Dihedrals : charmm22_prot_metals_dihedrals[452][8] Impropers : charmm22_prot_metals_impropers[43][8] Non bonded : charmm22_prot_metals_vdw[98][6] */ #include "global.h" int charmm22_prot_metals_objects[14] = {98, 0, 0, 139, 0, 0, 345, 0, 452, 0 , 0, 43, 98, 0}; int charmm22_prot_metals_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm22_prot_metals info */ char * charmm22_prot_metals_atoms[98][5]= {{"H", "1.00800", "H", "polar H", "1"}, {"H", "1.00800", "HC", "N-ter H", "2"}, {"H", "1.00800", "HA", "nonpolar H", "3"}, {"H", "1.00800", "HT", "TIPS3P WATER HYDROGEN", "4"}, {"H", "1.00800", "HP", "aromatic H", "5"}, {"H", "1.00800", "HB", "backbone H", "6"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "7"}, {"H", "1.00800", "HR2", "(+) his HE1", "8"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "9"}, {"H", "1.00800", "HS", "thiol hydrogen", "10"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "11"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "12"}, {"H", "1.00800", "HA1", "alkane, CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "13"}, {"H", "1.00800", "HA2", "alkane, CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "14"}, {"H", "1.00800", "HA3", "alkane, CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "15"}, {"H", "1.00800", "HF1", "Aliphatic H on fluorinated C (see toppar_all22_prot_fluoro_alkanes.str)", "16"}, {"H", "1.00800", "HF2", "Aliphatic H on fluorinated C (see toppar_all22_prot_fluoro_alkanes.str)", "17"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "20"}, {"C", "12.01100", "CA", "aromatic C", "21"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "22"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "23"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "24"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "25"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "26"}, {"C", "12.01100", "CPT", "trp C between rings", "27"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "28"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "29"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "30"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "31"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "32"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "33"}, {"C", "12.01100", "CPA", "heme alpha-C", "34"}, {"C", "12.01100", "CPB", "heme beta-C", "35"}, {"C", "12.01100", "CPM", "heme meso-C", "36"}, {"C", "12.01100", "CM", "heme CO carbon", "37"}, {"C", "12.01100", "CS", "thiolate carbon", "38"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "39"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "40"}, {"C", "12.01100", "CST", "CO2 carbon ", "41"}, {"C", "12.01100", "CT", "aliphatic sp3 C, new LJ params, no hydrogens (see toppar_all22_prot_aliphatic_c27.str)", "42"}, {"C", "12.01100", "CT1x", "aliphatic sp3 C for CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "43"}, {"C", "12.01100", "CT2x", "aliphatic sp3 C for CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "44"}, {"C", "12.01100", "CT3x", "aliphatic sp3 C for CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "45"}, {"C", "12.01100", "CN", "C for cyano group (see toppar_all22_prot_pyridines.str)", "46"}, {"C", "12.01100", "CAP", "aromatic C for pyrimidines (see toppar_all22_prot_pyridines.str)", "47"}, {"C", "12.01100", "COA", "carbonyl C for pyrimidines (see toppar_all22_prot_pyridines.str)", "48"}, {"C", "12.01100", "C3", "cyclopropyl carbon", "49"}, {"N", "14.00700", "N", "proline N", "50"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "51"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "52"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "53"}, {"N", "14.00700", "NH1", "peptide nitrogen", "54"}, {"N", "14.00700", "NH2", "amide nitrogen", "55"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "56"}, {"N", "14.00700", "NC2", "guanidinium nitroogen", "57"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "58"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "59"}, {"N", "14.00700", "NPH", "heme pyrrole N", "60"}, {"N", "14.00700", "NC", "N for cyano group (see toppar_all22_prot_pyridines.str)", "61"}, {"O", "15.99900", "O", "carbonyl oxygen", "70"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "71"}, {"O", "15.99900", "OC", "carboxylate oxygen", "72"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "73"}, {"O", "15.99940", "OS", "ester oxygen", "74"}, {"O", "15.99940", "OT", "TIPS3P WATER OXYGEN", "75"}, {"O", "15.99900", "OM", "heme CO/O2 oxygen", "76"}, {"O", "15.99900", "OST", "CO2 oxygen", "77"}, {"O", "15.99900", "OCA", "carbonyl O for pyrimidines (see toppar_all22_prot_pyridines.str)", "78"}, {"S", "32.06000", "S", "sulphur", "81"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "82"}, {"S", "32.06000", "SS", "thiolate sulfur", "83"}, {"He", "4.00260", "HE", "helium", "85"}, {"Ne", "20.17970", "NE", "neon", "86"}, {"C", "12.01100", "CF1", "monofluoromethyl (see toppar_all22_prot_fluoro_alkanes.str)", "87"}, {"C", "12.01100", "CF2", "difluoromethyl (see toppar_all22_prot_fluoro_alkanes.str)", "88"}, {"C", "12.01100", "CF3", "trifluoromethyl (see toppar_all22_prot_fluoro_alkanes.str)", "89"}, {"Fe", "55.84700", "FE", "heme iron 56", "90"}, {"Cl", "35.45300", "CLAL", "Chlorine Atom (see toppar_all22_prot_aldehydes.str)", "91"}, {"F", "18.99800", "FA", "aromatic flourine (see toppar_all22_prot_pyridines.str)", "92"}, {"F", "18.99800", "F1", "Fluorine, monofluoro (see toppar_all22_prot_fluoro_alkanes.str)", "93"}, {"F", "18.99800", "F2", "Fluorine, difluoro (see toppar_all22_prot_fluoro_alkanes.str)", "94"}, {"F", "18.99800", "F3", "Fluorine, trifluoro (see toppar_all22_prot_fluoro_alkanes.str)", "95"}, {"D", "0.00000", "DUM", "dummy atom", "99"}, {"Na", "22.989770", "SOD", "Sodium Ion", "100"}, {"Mg", "24.305000", "MG", "Magnesium Ion", "101"}, {"P", "39.102000", "POT", "Potassium Ion! check masses", "102"}, {"Cs", "132.900000", "CES", "Cesium Ion", "103"}, {"Ca", "40.080000", "CAL", "Calcium Ion", "104"}, {"Cl", "35.450000", "CLA", "Chloride Ion", "105"}, {"Zn", "65.370000", "ZN", "zinc (II) cation", "106"}, {"Ag", "107.868200", "AG", "Silver metal (HH et al. 2008) ", "107"}, {"Al", "26.981539", "AL", "Aluminium metal (HH et al. 2008)", "108"}, {"Au", "196.966500", "AU", "Gold metal (HH et al. 2008)", "109"}, {"Cu", "63.546000", "CU", "Copper metal (HH et al. 2008)", "110"}, {"Ni", "58.693400", "NI", "Nickel metal (HH et al. 2008)", "111"}, {"Pb", "207.200000", "PB", "Lead metal (HH et al. 2008)", "112"}, {"Pd", "106.420000", "PD", "Palladium metal (HH et al. 2008)", "113"}, {"Pt", "195.084000", "PT", "Platinum metal (HH et al. 2008)", "114"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm22_prot_metals info V(R) = Kb x (R - R0)^2 */ char * charmm22_prot_metals_bonds[139][5]= {{"CST", "OST", "937.96", "1.1600", "to Sulfate (PSUL) link"}, {"SS", "FE", "250.0", "2.3200", "bond length optimized to reproduce "}, {"C", "C", "600.000", "1.3350", "Heme vinyl substituent (KK, from propene (JCS))"}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPB", "CE1", "450.000", "1.3800", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPB", "CPA", "299.800", "1.4432", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPB", "CPB", "340.700", "1.3464", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CPM", "CPA", "360.000", "1.3716", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPT", "CA", "305.000", "1.3680", "adm jr., 12/30/91, for jwk"}, {"CPT", "CPT", "360.000", "1.4000", "jr., 12/30/91, for jwk"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPB", "230.000", "1.4900", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPB", "230.000", "1.4900", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CY", "CA", "350.000", "1.3650", "jr., 5/08/91, indole CCDB structure search"}, {"CY", "CPT", "350.000", "1.4400", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "230.000", "1.5100", "Kb from alkane freq.. b0 from TRP crystal"}, {"FE", "CM", "258.000", "1.9000", "Heme (6-liganded): CO ligand (KK 05/13/91)"}, {"FE", "CPM", "0.000", "3.3814", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CA", "340.000", "1.0830", "trp, adm jr., 10/02/89"}, {"HA", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CPM", "367.600", "1.0900", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"HA", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "330.000", "1.0800", "JWK 05/14/91 new r0 from indole"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HP", "CY", "350.000", "1.0800", "jr., 12/30/91, for jwk"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HT", "HT", "0.000", "1.5139", "FROM TIPS3P GEOMETRY (FOR SHAKE/W PARAM)"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "463.000", "1.3650", "403.0->463.0, 1.305->1.365 guanidinium (KK)"}, {"NC2", "CT2", "261.000", "1.4900", "arg, (DS)"}, {"NC2", "CT3", "261.000", "1.4900", "methylguanidinium, adm jr., 3/26/92"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NPH", "CPA", "377.200", "1.3757", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "FE", "270.200", "1.9580", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR2", "FE", "65.000", "2.2000", "Heme (6-liganded): His ligand (KK 05/13/91)"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "270.000", "1.3700", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "270.000", "1.3750", "jr., 12/30/91, for jwk"}, {"NY", "H", "465.000", "0.9760", "indole JWK 08/28/89"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OM", "CM", "1115.000", "1.1280", "Heme (6-liganded): CO ligand (KK 05/13/91)"}, {"OM", "FE", "250.000", "1.8000", "Heme (6-liganded): O2 ligand (KK 05/13/91)"}, {"OM", "OM", "600.000", "1.2300", "Heme (6-liganded): O2 ligand (KK 05/13/91)"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OT", "HT", "450.000", "0.9572", "FROM TIPS3P GEOM"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm22_prot_metals info V(S) = Kub x (S - S0)^2 */ char * charmm22_prot_metals_angles[345][8]= {{"OST", "CST", "OST", "3000.00", "180.0000", " ", " ", "to Sulfate (PSUL) link"}, {"CS", "SS", "FE", "50.0", "100.6", " ", " ", "angle optimized to reproduce"}, {"SS", "FE", "NPH", "100.0", "90.0", " ", " ", "jr., 7/01"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPA", "CPB", "CE1", "70.000", "126.7400", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPA", "CPM", "CPA", "94.200", "125.1200", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPA", "NPH", "CPA", "139.300", "103.9000", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPB", "CE1", "CE2", "70.000", "121.5000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPB", "CPB", "CE1", "70.000", "126.7500", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CPB", "CPB", "CPA", "30.800", "106.5100", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CPM", "CPA", "CPB", "61.600", "124.0700", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPT", "CA", "CA", "60.000", "118.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CPT", "CA", "60.000", "122.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CPT", "CY", "CA", "120.000", "107.40", "25.00", "2.26100", "jr., 12/30/91, for jwk"}, {"CPT", "NY", "CA", "110.000", "108.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPB", "CPA", "65.000", "126.7400", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CPB", "CPB", "65.000", "126.7500", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT2", "CPB", "70.000", "113.0000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CY", "CA", "45.800", "129.4000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "CY", "CPT", "45.800", "124.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPB", "CPA", "65.000", "126.7400", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "CPB", "CPB", "65.000", "126.7500", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"CY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"CY", "CT2", "CT1", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.0000", " ", " ", "from TRP crystal, JWK"}, {"FE", "NPH", "CPA", "96.150", "128.0500", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"FE", "NR2", "CPH1", "30.000", "133.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"FE", "NR2", "CPH2", "30.000", "123.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "NY", "CA", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "28.000", "126.0000", " ", " ", "jr., 12/30/91, for jwk"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA", "CA", "CA", "29.000", "120.00", "25.00", "2.15250", "trp, adm jr., 10/02/89"}, {"HA", "CA", "CPT", "41.000", "122.0000", " ", " ", "jr., 5/08/91, indole CCDB structure search"}, {"HA", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP2", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "HA", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CPM", "CPA", "12.700", "117.4400", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"HA", "CPM", "FE", "0.000", "180.0000", " ", " ", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"HA", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CS", "HA", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT1", "HA", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA", "CT2", "CPB", "50.000", "109.5000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HA", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT2", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT2", "CY", "33.430", "109.5000", " ", " ", "ADM JR., 10/02/89, from CT2CT2HA (U-B OMITTED), FOR JOANNA"}, {"HA", "CT2", "HA", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA", "CT3", "CPB", "50.000", "109.5000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HA", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA", "CT3", "HA", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA", "CY", "CA", "20.000", "126.40", "25.00", "2.18600", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HA", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CPB", "50.000", "120.0000", " ", " ", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB", "CT2", "HB", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "jr., 12/30/91, for jwk"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HT", "OT", "HT", "55.000", "104.5200", " ", " ", "TIP3P GEOMETRY, ADM JR."}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "52.000", "120.00", "90.00", "2.36420", "changed from 60.0/120.3 for guanidinium (KK)"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA", "51.500", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT3", "HA", "51.500", "107.5000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HA", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT2", "HB", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT3", "HA", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NPH", "CPA", "CPB", "122.000", "111.5400", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPA", "CPM", "88.000", "124.3900", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "FE", "CM", "50.000", "90.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"NPH", "FE", "CPM", "0.000", "45.0000", " ", " ", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"NPH", "FE", "NPH", "14.390", "90.0000", " ", " ", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR2", "FE", "CM", "50.000", "180.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"NR2", "FE", "NPH", "50.000", "90.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NY", "CA", "CY", "120.000", "110.00", "25.00", "2.24000", "jr., 12/30/91, for jwk"}, {"NY", "CA", "HA", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "160.000", "130.6000", " ", " ", "jr., 12/30/91, for jwk"}, {"NY", "CPT", "CPT", "110.000", "107.4000", " ", " ", "jr., 12/30/91, for jwk"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OM", "CM", "FE", "35.000", "180.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"OM", "FE", "NPH", "5.000", "90.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"OM", "OM", "FE", "0.000", "180.0000", " ", " ", "Heme (6-liganded): ligand links (KK 05/13/91)"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm22_prot_metals info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm22_prot_metals_dihedrals[452][8]= {{"X", "FE", "SS", "X", "0.0000", "4", "0.00", "jr., 7/01"}, {"X", "CS", "SS", "X", "0.0000", "3", "0.20", "methanethiol, HS S CT3 HA"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CA", "CPT", "CPT", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "CT2", "CT1", "C", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "0.2000", "1", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c"}, {"CE1", "CE1", "CT3", "HA", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPT", "CA", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.1000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "NY", "CA", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT1", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", " "}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CT2", "CT2", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CT2", "CT3", "0.1500", "1", "0.00", "alkane update, adm jr., 3/2/92, butane trans/gauche"}, {"CT3", "CT2", "CY", "CA", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2300", "2", "180.00", "from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CY", "CA", "NY", "CPT", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NY", "CA", "CY", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CA", "0.8000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"H", "NY", "CPT", "CPT", "0.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT1", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT1", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT1", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA", "CA", "CA", "CA", "3.5000", "2", "180.00", "adm jr., 10/02/89"}, {"HA", "CA", "CA", "CPT", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CA", "HA", "2.5000", "2", "180.00", "ADM JR., 10/02/89"}, {"HA", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "TRP (JES)"}, {"HA", "CA", "CPT", "CY", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "CY", "CPT", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK"}, {"HA", "CA", "NY", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CA", "NY", "H", "1.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT2", "CY", "CA", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "JWK"}, {"HA", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA", "CT3", "CS", "HA", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA", "CY", "CA", "CPT", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CA", "HA", "1.2000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HA", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "JWK 09/05/89"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "CPB", "5.2000", "2", "180.00", "for vinyl, from butene, yin/adm jr., 12/95"}, {"HB", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB", "CT3", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HB", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "NY", "CPT", "2.0000", "2", "180.00", "jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT1", "0.2400", "1", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.1500", "2", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT1", "0.2700", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "0.4000", "1", "0.00", "adm jr. 3/24/92, for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT1", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "4.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CT2", "3.5000", "2", "180.00", "JWK"}, {"NY", "CA", "CY", "HA", "3.5000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CA", "HA", "4.0000", "2", "180.00", "JWK 09/05/89"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CA", "10.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CPT", "CPT", "CY", "5.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CPA", "CPB", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}, {"X", "CPA", "CPM", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}, {"X", "CPB", "CE1", "X", "3.0000", "2", "180.00", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"X", "CPB", "CPB", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}, {"X", "CPB", "CT2", "X", "0.0000", "6", "0.00", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"X", "CPB", "CT3", "X", "0.0000", "6", "0.00", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"X", "CPT", "CPT", "X", "0.0000", "2", "180.00", "JWK indole 05/14/91"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1950", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "rotation barrier in Ethane (SF)"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1550", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "FE", "CM", "X", "0.0500", "4", "0.00", "Heme (6-liganded): ligands (KK 05/13/91)"}, {"X", "FE", "NPH", "X", "0.0000", "2", "0.00", "Heme (6-liganded): for ic para only (KK 05/13/91)"}, {"X", "FE", "NR2", "X", "0.0500", "4", "0.00", "Heme (6-liganded): from param19.inp"}, {"X", "FE", "OM", "X", "0.0000", "4", "0.00", "Heme (6-liganded): ligands (KK 05/13/91)"}, {"X", "NPH", "CPA", "X", "0.0000", "2", "0.00", "Heme (6-liganded): dummy for auto dihe (KK 05/13/91)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm22_prot_metals info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm22_prot_metals_impropers[43][8]= {{"CPB", "CPA", "NPH", "CPA", "20.8000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"CPB", "X", "X", "CE1", "90.0000", "0", "0.0000", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT2", "X", "X", "CPB", "90.0000", "0", "0.0000", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"CT3", "X", "X", "CPB", "90.0000", "0", "0.0000", "Heme (6-liganded): substituents (KK 05/13/91)"}, {"HA", "CPA", "CPA", "CPM", "29.4000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "40.0000", "0", "0.0000", "5.75->40.0 GUANIDINIUM (KK)"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NPH", "CPA", "CPA", "FE", "137.4000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPA", "CPB", "CPB", "40.6000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPA", "CPM", "CPA", "18.3000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NPH", "CPM", "CPB", "CPA", "32.7000", "0", "0.0000", "Heme (6-liganded): porphyrin macrocycle (KK 05/13/91)"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NY", "CA", "CY", "CPT", "100.0000", "0", "0.0000", "jr., 5/15/91, indole 3-21G HE1 out-of-plane surf."}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm22_prot_metals info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm22_prot_metals_vdw[98][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CM", "-0.110000", "2.100000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPA", "-0.090000", "1.800000", " ", " ", " "}, {"CPB", "-0.090000", "1.800000", " ", " ", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CPM", "-0.090000", "1.800000", " ", " ", " "}, {"CPT", "-0.090000", "1.800000", "-0.090000", "1.900000", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CST", "-0.058000", "1.563000", " ", " ", " "}, {"CT1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CT2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CT3", "-0.080000", "2.060000", "-0.010000", "1.900000", " "}, {"CY", "-0.070000", "1.992400", " ", " ", " "}, {"CT", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT1x", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT2x", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT3x", "-0.0780", "2.040", "-0.01", "1.9", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HB", "-0.022000", "1.320000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"HT", "-0.046000", "0.224500", " ", " ", " "}, {"HA1", "-0.022", "1.3200", " ", " ", " "}, {"HA2", "-0.028", "1.3400", " ", " ", " "}, {"HA3", "-0.024", "1.3400", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NPH", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OM", "-0.120000", "1.700000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"OST", "-0.165000", "1.692000", " ", " ", " "}, {"OT", "-0.152100", "1.768200", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}, {"SOD", "-0.0469", "1.36375", " ", " ", " "}, {"POT", "-0.0870", "1.76375", " ", " ", " "}, {"CLA", "-0.150", "2.27", " ", " ", " "}, {"CAL", "-0.120", "1.367", " ", " ", " "}, {"MG", "-0.0150", "1.18500", " ", " ", " "}, {"CES", "-0.1900", "2.100", " ", " ", " "}, {"ZN", "-0.250000", "1.090000", " ", " ", " "}, {"FE", "0.000000", "0.650000", " ", " ", " "}, {"HE", "-0.021270", "1.4800", " ", " ", " "}, {"NE", "-0.086000", "1.5300", " ", " ", " "}, {"CLAL", "-0.030000", "1.908200", " ", " ", " "}, {"DUM", "-0.000000", "0.000000", " ", " ", " "}, {"AG", "-4.56", "1.4775", " ", " ", " "}, {"AL", "-4.02", "1.4625", " ", " ", " "}, {"AU", "-5.29", "1.4755", " ", " ", " "}, {"CU", "-4.72", "1.3080", " ", " ", " "}, {"NI", "-5.65", "1.2760", " ", " ", " "}, {"PB", "-2.93", "1.7825", " ", " ", " "}, {"PD", "-6.15", "1.4095", " ", " ", " "}, {"PT", "-7.80", "1.4225", " ", " ", " "}, {"CAP", "-0.070000", "1.992400", " ", " ", " "}, {"FA", "-0.12000", "1.700000", " ", " ", " "}, {"CN", "-0.200000", "1.750000", " ", " ", " "}, {"NC", "-0.600000", "1.850000", " ", " ", " "}, {"OCA", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"COA", "-0.110000", "2.000000", " ", " ", " "}, {"CF1", "-0.060000", "1.900000", " ", " ", " "}, {"CF2", "-0.042000", "2.050000", " ", " ", " "}, {"CF3", "-0.020000", "2.300000", " ", " ", " "}, {"HF1", "-0.028000", "1.3200", " ", " ", " "}, {"HF2", "-0.030000", "1.3000", " ", " ", " "}, {"F1", "-0.135", "1.63", " ", " ", " "}, {"F2", "-0.105", "1.63", " ", " ", " "}, {"F3", "-0.097", "1.60", " ", " ", " "}, {"C3", "-0.020000", "2.275000", " ", " ", " "}}; Atomes-GNU-1.1.14/src/calc/force_fields/charmm35_ethers.c000066400000000000000000000645141457665371200227610ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file charmm35_ethers.c * @short CHARMM-charmm35_ethers force field, from 'charmm35_ethers' * @author Sébastien Le Roux */ /* * This file: 'charmm35_ethers.c' * * Contains: * CHARMM-charmm35_ethers force field, data from taken from: - the file: 'charmm35_ethers' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm35_ethers_atoms[13][5] Bonds : charmm35_ethers_bonds[22][5] Angles : charmm35_ethers_angles[55][8] Dihedrals : charmm35_ethers_dihedrals[106][8] Non bonded : charmm35_ethers_vdw[13][6] */ #include "global.h" int charmm35_ethers_objects[14] = {13, 0, 0, 22, 0, 0, 55, 0, 106, 0 , 0, 0, 13, 0}; int charmm35_ethers_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 0, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm35_ethers info */ char * charmm35_ethers_atoms[13][5]= {{"H", "1.00800", "HCA1A", "Alkane H attached to C(sp3)H (eq. HA1)", "241"}, {"H", "1.00800", "HCA2A", "Alkane H attached to C(sp3)H2 (eq. HA2)", "242"}, {"H", "1.00800", "HCA3A", "Alkane H attached to C(sp3)H3 (eq. HA3)", "243"}, {"H", "1.00800", "HCA25A", "Alkane H attached to C(sp3)H2 in 5-membered ring", "244"}, {"C", "12.01100", "CC30A", "-C(sp3) Carbon (eq. CT)", "245"}, {"C", "12.01100", "CC31A", "-C(sp3)H Carbon (eq. CT1)", "246"}, {"C", "12.01100", "CC32A", "-C(sp3)H2 Carbon (eq. CT2)", "247"}, {"C", "12.01100", "CC33A", "-C(sp3)H3 Carbon (eq. CT3)", "248"}, {"C", "12.01100", "CC325A", "-C(sp3)H2 Carbon in 5-membered ring", "249"}, {"C", "12.01100", "CC325B", "-C(sp3)H2 Carbon in THF (tetrahydrofuran)", "250"}, {"C", "12.01100", "CC326A", "-C(sp3)H2 Carbon in THP (tetrahydropyran)", "251"}, {"O", "15.99940", "OC30A", "Ether Oxygen", "252"}, {"O", "15.99940", "OC305A", "Ether Oxygen in THF", "253"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm35_ethers info V(R) = Kb x (R - R0)^2 */ char * charmm35_ethers_bonds[22][5]= {{"CC31A", "HCA1A", "309.00", "1.111", "alkanes, 4/98"}, {"CC32A", "HCA2A", "309.00", "1.111", "alkanes, 4/98"}, {"CC33A", "HCA3A", "322.00", "1.111", "alkanes, 4/98"}, {"CC30A", "CC32A", "222.50", "1.538", "10/98"}, {"CC30A", "CC33A", "222.50", "1.538", "10/98"}, {"CC31A", "CC31A", "222.50", "1.500", "alkanes, 3/92"}, {"CC31A", "CC32A", "222.50", "1.538", "alkanes, 3/92"}, {"CC31A", "CC33A", "222.50", "1.538", "alkanes, 3/92"}, {"CC32A", "CC32A", "222.50", "1.530", "alkanes, 3/92"}, {"CC32A", "CC33A", "222.50", "1.528", "alkanes, 3/92"}, {"CC33A", "CC33A", "222.50", "1.530", "alkanes, 3/92"}, {"CC325A", "CC325A", "195.00", "1.548", "cyclopentane CPEN 10/17/05 viv"}, {"CC325A", "HCA25A", "307.00", "1.116", "cyclopentane CPEN 10/17/05 viv"}, {"CC325B", "OC305A", "350.00", "1.425", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CC325B", "CC325B", "195.00", "1.518", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CC325B", "HCA25A", "307.00", "1.100", "THF, THF neutron diffr., 5/30/06, viv"}, {"CC325B", "CC33A", "222.50", "1.528", "TF2M, viv"}, {"CC32A", "OC30A", "360.00", "1.415", "DEET, diethylether, alex"}, {"CC33A", "OC30A", "360.00", "1.415", "DEET, diethylether, alex"}, {"CC326A", "HCA2A", "309.00", "1.111", "THP, viv"}, {"CC326A", "CC326A", "222.50", "1.530", "THP, viv"}, {"CC326A", "OC30A", "360.00", "1.415", "DEET, diethylether, viv"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm35_ethers info V(S) = Kub x (S - S0)^2 */ char * charmm35_ethers_angles[55][8]= {{"HCA1A", "CC31A", "CC31A", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC33A", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HCA2A", "CC32A", "CC30A", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "CC31A", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "CC32A", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "CC33A", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC30A", "33.430", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC31A", "33.430", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC32A", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA3A", "CC33A", "CC33A", "37.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HCA2A", "CC32A", "HCA2A", "35.50", "109.00", "5.40", "1.802", "alkane, 3/92"}, {"HCA3A", "CC33A", "HCA3A", "35.50", "108.40", "5.40", "1.802", "alkane, 3/92"}, {"CC30A", "CC32A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC30A", "CC32A", "CC33A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC31A", "CC31A", "53.350", "111.00", "8.00", "2.561", "alkane, 3/92"}, {"CC31A", "CC31A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC31A", "CC33A", "53.350", "108.50", "8.00", "2.561", "alkane, 3/92"}, {"CC31A", "CC32A", "CC31A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC32A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC31A", "CC32A", "CC33A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC32A", "CC30A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC32A", "CC31A", "CC32A", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CC32A", "CC32A", "CC32A", "58.350", "113.60", "11.16", "2.561", "alkane, 3/92"}, {"CC32A", "CC32A", "CC33A", "58.000", "115.00", "8.00", "2.561", "alkane, 3/92"}, {"CC33A", "CC30A", "CC33A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC33A", "CC31A", "CC32A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC33A", "CC31A", "CC33A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC33A", "CC32A", "CC33A", "53.350", "114.00", "8.00", "2.561", "alkane 3/2/92"}, {"CC325A", "CC325A", "CC325A", "58.00", "106.00", "11.16", "2.561", "CPEN 10/17/05 viv"}, {"HCA25A", "CC325A", "CC325A", "35.00", "111.40", "22.53", "2.179", "CPEN 10/17/05 viv"}, {"HCA25A", "CC325A", "HCA25A", "38.50", "106.80", "5.40", "1.802", "CPEN 10/17/05 viv"}, {"HCA25A", "CC325B", "CC325B", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"HCA25A", "CC325B", "HCA25A", "38.50", "106.80", "5.40", "1.802", "THF, 10/17/05 viv"}, {"CC325B", "CC325B", "CC325B", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"OC305A", "CC325B", "CC325B", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CC325B", "OC305A", "CC325B", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"HCA25A", "CC325B", "OC305A", "70.00", "107.30", " ", " ", "THF 10/21/05, viv"}, {"HCA3A", "CC33A", "CC325B", "34.600", "110.10", "22.53", "2.179", "TF2M viv"}, {"CC325B", "CC325B", "CC33A", "58.000", "115.00", "8.00", "2.561", "TF2M viv"}, {"HCA25A", "CC325B", "CC33A", "34.600", "110.10", "22.53", "2.179", "TF2M viv"}, {"OC305A", "CC325B", "CC33A", "45.00", "111.50", " ", " ", "TF2M, viv"}, {"CC32A", "OC30A", "CC32A", "95.00", "109.70", " ", " ", "DEET, diethylether, alex"}, {"CC33A", "OC30A", "CC32A", "95.00", "109.70", " ", " ", "DEET, diethylether, alex"}, {"CC33A", "OC30A", "CC33A", "95.00", "109.70", " ", " ", "DEET, diethylether, alex"}, {"OC30A", "CC32A", "CC32A", "45.00", "111.50", " ", " ", "DEET, diethylether, alex"}, {"OC30A", "CC32A", "CC33A", "45.00", "111.50", " ", " ", "DEET, diethylether, alex"}, {"HCA3A", "CC33A", "OC30A", "60.00", "109.50", " ", " ", "phosphate, alex"}, {"HCA2A", "CC32A", "OC30A", "60.00", "109.50", " ", " ", "phosphate, alex"}, {"HCA2A", "CC326A", "CC326A", "34.500", "110.10", "22.53", "2.179", "THP, sng cyclohexane 12/05"}, {"HCA2A", "CC326A", "HCA2A", "35.50", "109.00", "5.40", "1.80200!", "viv"}, {"CC326A", "CC326A", "CC326A", "58.350", "112.00", "11.16", "2.561", "THP, sng cyclohexane 12/05"}, {"OC30A", "CC326A", "CC326A", "45.00", "111.50", " ", " ", "THP, viv"}, {"CC326A", "OC30A", "CC326A", "95.00", "109.70", " ", " ", "THP, viv"}, {"HCA2A", "CC326A", "OC30A", "45.00", "109.50", " ", " ", "THP, sng 02/06"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm35_ethers info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm35_ethers_dihedrals[106][8]= {{"CC31A", "CC30A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC30A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC30A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC30A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC30A", "CC32A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC30A", "CC32A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC31A", "CC31A", "HCA1A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "CC31A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "CC32A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC32A", "CC33A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC31A", "CC32A", "HCA2A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA1A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC31A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC32A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"CC33A", "CC31A", "CC33A", "HCA3A", "0.20000", "3", "0.00", "alkane, 3/92"}, {"HCA2A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC30A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CC31A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CC32A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CC33A", "CC32A", "CC32A", "HCA2A", "0.19000", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"HCA2A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC30A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC31A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC32A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC33A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"CC33A", "CC32A", "CC32A", "CC33A", "0.03179", "6", "180.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC33A", "0.03819", "2", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.20391", "5", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.10824", "4", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.08133", "3", "180.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC32A", "CC32A", "CC32A", "0.15051", "2", "0.0", "alkane, c27r klauda et al 2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.11251", "5", "0.0", "alkane, c27r klauda et al 2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.09458", "4", "0.0", "alkane, c27r klauda et al.2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.14975", "3", "180.0", "alkane, c27r klauda et al 2004"}, {"CC32A", "CC32A", "CC32A", "CC32A", "0.06450", "2", "0.0", "alkane, c27r klauda et al 2004"}, {"CC33A", "CC325A", "CC325A", "CC33A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC33A", "CC325A", "CC325A", "CC325A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC33A", "CC325A", "CC325A", "HCA25A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"HCA25A", "CC325A", "CC325A", "HCA25A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC325A", "CC325A", "CC325A", "HCA25A", "0.16000", "3", "0.0", "4/98, yin and mackerell, cpen, viv"}, {"CC325A", "CC325A", "CC325A", "CC325A", "0.41000", "3", "180.0", "cpen, cyclopentane, viv 10/4/05"}, {"CC33A", "CC325B", "CC325B", "CC33A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"CC33A", "CC325B", "CC325B", "CC325B", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"CC33A", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"HCA25A", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"CC325B", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thf, viv"}, {"OC305A", "CC325B", "CC325B", "HCA25A", "0.19000", "3", "0.0", "alkane, 4/98, yin and mackerell, thf viv"}, {"HCA25A", "CC325B", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CC325B", "CC325B", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"OC305A", "CC325B", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CC325B", "CC325B", "CC325B", "CC325B", "0.41000", "3", "180.0", "CPEN viv 10/4/05"}, {"HCA25A", "CC325B", "OC305A", "CC325B", "0.3000", "3", "0.0", "THF, 05/30/06, viv"}, {"OC305A", "CC325B", "CC325B", "CC325B", "0.0000", "3", "0.0", "THF, 05/30/06, viv"}, {"CC325B", "CC325B", "OC305A", "CC325B", "0.5000", "3", "0.0", "THF, 05/30/06, viv"}, {"CC33A", "CC325B", "OC305A", "CC325B", "0.3000", "3", "0.0", "THF, 05/30/06, viv"}, {"CC33A", "CC326A", "CC326A", "CC33A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"CC33A", "CC326A", "CC326A", "CC326A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"CC33A", "CC326A", "CC326A", "HCA2A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"HCA2A", "CC326A", "CC326A", "HCA2A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"HCA2A", "CC326A", "CC326A", "CC326A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp, viv"}, {"OC30A", "CC326A", "CC326A", "HCA2A", "0.19000", "3", "0.0", "4/98, yin and mackerell, thp viv"}, {"HCA2A", "CC326A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, me-thp viv"}, {"CC326A", "CC326A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, me-thp viv"}, {"OC30A", "CC326A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell, me-thp viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "0.49829", "2", "0.0", "THP, viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "-0.59844", "3", "0.0", "THP, viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "0.41746", "4", "0.0", "THP, viv"}, {"CC326A", "CC326A", "CC326A", "CC326A", "-0.24829", "5", "0.0", "THP, viv"}, {"OC30A", "CC326A", "CC326A", "CC326A", "-0.19225", "1", "0.0", "THP, sng 1/06"}, {"OC30A", "CC326A", "CC326A", "CC326A", "-1.00000", "2", "0.0", "THP, sng 1/06"}, {"OC30A", "CC326A", "CC326A", "CC326A", "0.59457", "3", "0.0", "THP, sng 1/06"}, {"OC30A", "CC326A", "CC326A", "CC326A", "-0.07862", "4", "0.0", "THP, sng 1/06"}, {"HCA3A", "CC33A", "CC33A", "HCA3A", "0.15250", "3", "0.00", "ETHA, ethane, 4/98, yin and mackerell"}, {"CC326A", "OC30A", "CC326A", "CC326A", "-0.52702", "1", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "CC326A", "0.68297", "2", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "CC326A", "-0.20977", "3", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "CC326A", "0.15037", "4", "0.0", "THP, sng 1/06"}, {"CC326A", "OC30A", "CC326A", "HCA2A", "0.28400", "3", "0.0", "DMET, viv"}, {"HCA2A", "CC32A", "CC32A", "OC30A", "0.19000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"OC30A", "CC32A", "CC33A", "HCA3A", "0.16000", "3", "0.0", "alkane, 4/98, yin and mackerell"}, {"HCA2A", "CC32A", "OC30A", "CC32A", "0.28400", "3", "0.0", "DEET, diethylether, alex"}, {"HCA3A", "CC33A", "OC30A", "CC32A", "0.28400", "3", "0.0", "DEET, diethylether, alex"}, {"HCA2A", "CC32A", "OC30A", "CC33A", "0.28400", "3", "0.0", "DEET, diethylether, alex"}, {"HCA3A", "CC33A", "OC30A", "CC33A", "0.28400", "3", "0.0", "DME, viv"}, {"CC33A", "CC32A", "OC30A", "CC32A", "0.40", "1", "0.0", "diethylether, 2/12/05, ATM"}, {"CC33A", "CC32A", "OC30A", "CC32A", "0.49", "3", "0.0", "diethylether"}, {"CC33A", "CC32A", "OC30A", "CC33A", "0.40", "1", "0.0", "diethylether, 2/12/05, ATM, MEE viv"}, {"CC33A", "CC32A", "OC30A", "CC33A", "0.49", "3", "0.0", "diethylether, MEE viv"}, {"CC32A", "CC32A", "OC30A", "CC33A", "0.57", "1", "0.0", "1,2 dimethoxyethane (DME), 2/12/05, ATM"}, {"CC32A", "CC32A", "OC30A", "CC33A", "0.29", "2", "0.0", "1,2 dimethoxyethane (DME)"}, {"CC32A", "CC32A", "OC30A", "CC33A", "0.43", "3", "0.0", "1,2 dimethoxyethane (DME)"}, {"CC32A", "CC32A", "OC30A", "CC32A", "0.57", "1", "0.0", "1,2 dimethoxyethane, 2/12/05, ATM"}, {"CC32A", "CC32A", "OC30A", "CC32A", "0.29", "2", "0.0", "1,2 dimethoxyethane"}, {"CC32A", "CC32A", "OC30A", "CC32A", "0.43", "3", "0.0", "1,2 dimethoxyethane"}, {"OC30A", "CC32A", "CC32A", "OC30A", "0.59", "1", "180.0", "1,2 dimethoxyethane, Aug 2007, HK Lee"}, {"OC30A", "CC32A", "CC32A", "OC30A", "1.16", "2", "0.0", "1,2 dimethoxyethane"}, {"OC30A", "CC32A", "CC32A", "CC33A", "0.16", "1", "180.0", "methylpropylether, 2/12/05, ATM"}, {"OC30A", "CC32A", "CC32A", "CC33A", "0.39", "2", "0.0", "methylpropylether"}, {"OC30A", "CC32A", "CC32A", "CC32A", "0.16", "1", "180.0", "methylpropylether, 2/12/05, ATM"}, {"OC30A", "CC32A", "CC32A", "CC32A", "0.39", "2", "0.0", "methylpropylether"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm35_ethers info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm35_ethers_vdw[13][6]= {{"HCA1A", "-0.0450", "1.3400", " ", " ", "1/5/05 viv"}, {"HCA2A", "-0.0350", "1.3400", " ", " ", "11/16/04 viv"}, {"HCA3A", "-0.0240", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"CC30A", "-0.0320", "2.0000", "-0.01", "1.9", "from CC31A"}, {"CC31A", "-0.0320", "2.0000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC32A", "-0.0560", "2.0100", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC33A", "-0.0780", "2.0400", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC326A", "-0.0560", "2.0100", "-0.01", "1.9", "THP, tetrahyropyran, viv"}, {"HCA25A", "-0.0350", "1.3000", " ", " ", "cyclopentane, 8/06 viv"}, {"CC325A", "-0.0600", "2.0200", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv"}, {"CC325B", "-0.0600", "2.0200", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv"}, {"OC305A", "-0.1000", "1.6500", " ", " ", "tetrahydropyran sng 1/06"}, {"OC30A", "-0.1000", "1.6500", " ", " ", "tetrahydropyran sng 1/06"}}; Atomes-GNU-1.1.14/src/calc/force_fields/charmm36_carb.c000066400000000000000000007303661457665371200224040ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file charmm36_carb.c * @short CHARMM-charmm36_carb force field, from 'charmm36_carb' * @author Sébastien Le Roux */ /* * This file: 'charmm36_carb.c' * * Contains: * CHARMM-charmm36_carb force field, data from taken from: - the file: 'charmm36_carb' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_carb_atoms[59][5] Bonds : charmm36_carb_bonds[153][5] Angles : charmm36_carb_angles[438][8] Dihedrals : charmm36_carb_dihedrals[1354][8] Non bonded : charmm36_carb_vdw[57][6] */ #include "global.h" int charmm36_carb_objects[14] = {59, 0, 0, 153, 0, 0, 438, 0, 1354, 0 , 0, 14, 57, 0}; int charmm36_carb_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_carb info */ char * charmm36_carb_atoms[59][5]= {{"H", "1.00800", "HCTIP3", "TIP3P water hydrogen", "1"}, {"O", "15.99940", "OCTIP3", "TIP3P water oxygen", "2"}, {"C", "12.01100", "CC301", "aliphatic C, no H's", "171"}, {"C", "12.01100", "CC311", "generic acyclic CH carbon", "172"}, {"C", "12.01100", "CC312", "CH carbon in linear polyols", "173"}, {"C", "12.01100", "CC3161", "C2, C3, C4 CH bound to OH", "174"}, {"C", "12.01100", "CC3162", "C1 (anomeric) CH bound to OH", "175"}, {"C", "12.01100", "CC3163", "C5 CH bound to exocylic CH2OH", "176"}, {"C", "12.01100", "CC321", "generic acyclic CH2 carbon (hexopyranose C6)", "177"}, {"C", "12.01100", "CC322", "CH2 carbon in linear polyols erh", "178"}, {"C", "12.01100", "CC3263", "C5 in xylose", "179"}, {"C", "12.01100", "CC331", "generic acyclic CH3 carbon (xyl C6, glcna/galna CT)", "180"}, {"C", "12.01100", "CC2O1", "sp2 carbon in amides, aldoses", "181"}, {"C", "12.01100", "CC2O2", "sp2 carbon in carboxylates", "182"}, {"C", "12.01100", "CC2O3", "sp2 carbon in acetone, ketoses", "183"}, {"C", "12.01100", "CC2O4", "c22 CD", "184"}, {"H", "1.00800", "HCA1", "aliphatic proton, CH", "185"}, {"H", "1.00800", "HCA2", "aliphatic proton, CH2", "186"}, {"H", "1.00800", "HCA3", "aliphatic proton, CH3", "187"}, {"H", "1.00800", "HCP1", "polar H", "188"}, {"H", "1.00800", "HCR1", "c22 HR1", "189"}, {"O", "15.99940", "OC311", "hydroxyl oxygen", "191"}, {"O", "15.99940", "OC3C61", "ether in six membered ring", "192"}, {"O", "15.99940", "OC301", "generic linear ether", "193"}, {"O", "15.99940", "OC302", "linear ether in 1-1 glycosidic linkage", "194"}, {"O", "15.99940", "OC2D1", "sp2 oxygen in amides, aldoses", "195"}, {"O", "15.99940", "OC2D2", "sp2 oxygen in carboxylates", "196"}, {"O", "15.99940", "OC2D3", "sp2 oxygen in acetone, ketoses", "197"}, {"O", "15.99940", "OC2D4", "par22 O", "198"}, {"N", "14.00700", "NC2D1", "peptide, NMA, IPAA nitrogen (C=NHR)", "200"}, {"C", "12.01100", "CC321C", "cyclohexane, thp CH2", "201"}, {"H", "1.00800", "HCA3M", "alcohol aliphatic proton, CH3", "202"}, {"H", "1.00800", "HCP1M", "EGLY hydroxyl H", "203"}, {"O", "15.99940", "OC311M", "MEOH, ETOH, PRO2, EGLY hydroxyl O", "204"}, {"C", "12.01100", "CC321D", "cyclohexane, thp CH2 model for 1-1 linkage", "205"}, {"C", "12.01100", "CC311C", "patch C1 in model compound", "206"}, {"C", "12.01100", "CC311D", "patch C1 in model compound", "207"}, {"O", "15.99940", "OC3C5M", "thf ring oxygen", "208"}, {"C", "12.01100", "CC322C", "cyclopentane, thf CH2", "209"}, {"H", "1.00800", "HCA2C2", "cyclopentane, thp aliphatic proton, CH2", "210"}, {"C", "12.01100", "CC312C", "tf2m CH1", "211"}, {"H", "1.00800", "HCA1C2", "tf2m aliphatic proton, CH1", "212"}, {"O", "15.99940", "OC3C51", "furan ring oxygen", "213"}, {"C", "12.01100", "CC3152", "furan ring carbon", "214"}, {"C", "12.01100", "CC3153", "furan ring carbon", "215"}, {"C", "12.01100", "CC3251", "furan ring carbon; C2 deoxy", "216"}, {"C", "12.01100", "CC3151", "furan ring carbon", "217"}, {"C", "12.01100", "CC3051", "furan ring carbon; C2 fructose", "218"}, {"C", "12.01100", "CC3062", "C2 on NE5AC", "219"}, {"C", "12.01100", "CC3261", "C3 on NE5AC", "220"}, {"O", "15.99940", "OC312", "OH in PO3H (phosphate) || OHL in top_all27_lipid.rtf", "221"}, {"O", "15.99940", "OC30P", "ester O in PO3H (phosphate) || OSL in top_all27_lipid.rtf", "222"}, {"O", "15.99940", "OC2DP", "=0 in P03H (phosphate) || O2L in top_all27_lipid.rtf", "223"}, {"P", "30.97400", "PC", "phosphorus || PL in top_all27_lipid.rtf", "224"}, {"S", "32.06000", "SC", "Sulfate sulfur", "225"}, {"C", "12.01100", "CC312D", "from CC322C; THF anomeric carbon", "226"}, {"O", "15.99940", "OC303", "from OC301; linear ether in P1->F3 pyranose-furanose glycosidic linkage", "227"}, {"C", "12.01100", "CC2O5", "carbonyl C on acetyl", "228"}, {"N", "14.00700", "NC311", "! Sulfamate nitrogen, xxwy", "229"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_carb info V(R) = Kb x (R - R0)^2 */ char * charmm36_carb_bonds[153][5]= {{"OC2D3", "CC2O3", "700.00", "1.215", "ketone MP2/6-31g*, CSD geometry"}, {"CC2O3", "CC331", "330.00", "1.500", "ketone MP2/6-31g*, CSD geometry"}, {"CC2O3", "CC312", "330.00", "1.500", "ketone"}, {"CC2O3", "CC322", "330.00", "1.500", "ketone"}, {"OC2D4", "CC2O4", "700.00", "1.215", "acetaldehyde, adm"}, {"HCR1", "CC2O4", "330.00", "1.110", "acetaldehyde, adm"}, {"CC2O4", "CC331", "250.00", "1.500", "acetaldehyde, adm"}, {"CC2O4", "CC312", "250.00", "1.500", "acetaldehyde, adm"}, {"CC311", "CC311", "222.50", "1.500", "par22 CT1 CT1"}, {"CC312", "CC312", "222.50", "1.485", "adm 11/08, glycerol"}, {"CC3161", "CC3163", "222.50", "1.500", "par22 CT1 CT1"}, {"CC3161", "CC3263", "222.50", "1.500", "CC3161 CC3163 og xtal xylose"}, {"CC312", "CC322", "222.50", "1.485", "adm 11/08, glycerol"}, {"CC301", "CC331", "222.50", "1.538", "genff CG301 CG331"}, {"CC311", "CC321", "222.50", "1.538", "par22 CT2 CT1"}, {"CC311", "CC331", "222.50", "1.538", "par22 CT3 CT1"}, {"CC331", "CC3163", "222.50", "1.538", "par22 CT3 CT1 og xtal alfuco"}, {"CC3161", "CC3161", "222.50", "1.480", "sng qm and crystal analysis"}, {"CC3261", "CC3161", "222.50", "1.480", "from CC3161 CC3161"}, {"CC3161", "CC3162", "222.50", "1.480", "sng qm and crystal analysis"}, {"CC3261", "CC3062", "222.50", "1.515", "og xtal kemyac"}, {"CC321", "CC3163", "222.50", "1.490", "sng qm and crystal analysis"}, {"CC312", "CC3163", "222.50", "1.490", "from CC321 CC3163"}, {"CC301", "CC2O2", "200.00", "1.522", "par22 CT1 CC"}, {"CC311", "CC2O2", "200.00", "1.522", "par22 CT1 CC"}, {"CC3163", "CC2O2", "200.00", "1.480", "og xtal"}, {"CC3062", "CC2O2", "200.00", "1.480", "og xtal"}, {"CC2O1", "CC331", "250.00", "1.520", "og ipaa and xtal acglua11 agalam10 nacman10"}, {"CC321", "CC331", "222.50", "1.528", "par22 CT3 CT2"}, {"CC321", "CC321", "222.50", "1.530", "par22 CT2 CT2"}, {"CC321C", "CC321C", "222.50", "1.530", "par22 CT2 CT2"}, {"CC321C", "CC321D", "222.50", "1.530", "par22 CT2 CT2"}, {"CC321C", "CC311C", "222.50", "1.538", "par22 CT2 CT1"}, {"CC321", "CC311C", "222.50", "1.490", "from CC321 CC3163"}, {"CC321C", "CC311D", "222.50", "1.538", "par22 CT2 CT1"}, {"CC321D", "CC311C", "222.50", "1.538", "par22 CT2 CT1"}, {"CC321", "CC2O2", "200.00", "1.522", "par22 CT2 CC"}, {"CC3161", "OC311", "410.00", "1.410", "og crystal analysis"}, {"CC3162", "OC311", "428.00", "1.400", "og crystal analysis"}, {"CC3062", "OC311", "428.00", "1.400", "from CC3162 OC311"}, {"CC301", "OC311", "428.00", "1.420", "par22 OH1 CT1"}, {"CC311", "OC311", "428.00", "1.420", "par22 OH1 CT1"}, {"CC312", "OC311", "400.00", "1.420", "adm 11/08, glycerol"}, {"CC311", "OC311M", "428.00", "1.420", "par22 OH1 CT1"}, {"CC321", "OC311", "428.00", "1.420", "par22 OH1 CT2"}, {"CC321", "OC311M", "428.00", "1.420", "par22 OH1 CT2"}, {"CC331", "OC311M", "428.00", "1.420", "par22 OH1 CT3"}, {"CC322", "OC311", "400.00", "1.420", "adm 11/08, glycerol"}, {"CC2O1", "OC2D1", "620.00", "1.230", "par22 O C"}, {"CC2O2", "OC2D2", "525.00", "1.260", "par22 OC CC"}, {"CC301", "OC301", "360.00", "1.415", "par35 CC32A OC30A"}, {"CC311", "OC301", "360.00", "1.415", "par35 CC32A OC30A"}, {"CC321", "OC301", "360.00", "1.415", "par35 CC32A OC30A"}, {"CC331", "OC301", "360.00", "1.415", "par35 CC33A OC30A"}, {"CC311D", "OC301", "360.00", "1.395", "og disac model compounds 2 and 3"}, {"CC3162", "OC301", "360.00", "1.395", "og disac model compounds 2 3 og/rmv crystals"}, {"CC3062", "OC301", "360.00", "1.395", "from CC3162 OC301"}, {"CC311D", "OC302", "360.00", "1.415", "og disac model compounds 4 5 6"}, {"CC3162", "OC302", "360.00", "1.415", "og disac model comps 4 5 6 og/rmv crystals"}, {"CC311C", "OC301", "360.00", "1.435", "og disac model compounds 7 8 9 and 10"}, {"CC3161", "OC301", "360.00", "1.415", "og/rmv disac crystals"}, {"CC321D", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC311D", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC3162", "OC3C61", "360.00", "1.425", "og crystal analysis"}, {"CC3062", "OC3C61", "360.00", "1.425", "from CC3162 OC3C61"}, {"CC321C", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC311C", "OC3C61", "360.00", "1.415", "par34 CC326A OC30A"}, {"CC3163", "OC3C61", "360.00", "1.425", "sng qm and crystal analysis"}, {"CC3263", "OC3C61", "360.00", "1.425", "CC3263 OC3C61 og xylose xtal ok"}, {"NC2D1", "CC311", "320.00", "1.430", "par22 NH1 CT1"}, {"NC2D1", "CC3161", "320.00", "1.430", "par22 NH1 CT1"}, {"NC2D1", "CC331", "320.00", "1.430", "par22 NH1 CT3"}, {"NC2D1", "CC2O1", "370.00", "1.345", "par22 NH1 C"}, {"CC311", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC312", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3161", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3162", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3163", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC311C", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC311D", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC321", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC322", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC3263", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC331", "HCA3", "322.00", "1.111", "par22 HA CT3"}, {"CC321C", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC321D", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"CC3261", "HCA2", "309.00", "1.111", "par22 HA CT2"}, {"OC311", "HCP1", "545.00", "0.960", "par22 OH1 H"}, {"OC311M", "HCP1", "545.00", "0.960", "par22 OH1 H"}, {"OC311M", "HCP1M", "545.00", "0.960", "par22 OH1 H"}, {"NC2D1", "HCP1", "440.00", "0.997", "par22 NH1 H"}, {"CC322C", "OC3C5M", "350.00", "1.425", "par34 CC325B OC305A"}, {"CC322C", "CC322C", "195.00", "1.518", "par34 CC325B CC325B"}, {"CC322C", "HCA2C2", "307.00", "1.100", "par34 CC325B HCA25A"}, {"CC312C", "CC331", "222.50", "1.528", "par34 CC325B CC33A"}, {"CC312C", "OC3C5M", "350.00", "1.425", "par34 CC325B OC305A"}, {"CC312C", "CC322C", "195.00", "1.518", "par34 CC325B CC325B"}, {"CC312C", "HCA1C2", "307.00", "1.100", "par34 CC325B HCA25A"}, {"CC312C", "OC301", "360.00", "1.395", "erh xtal analysis on disac"}, {"OC3C51", "CC3152", "350.00", "1.425", "par34 CC325B OC305A"}, {"OC3C51", "CC3051", "350.00", "1.425", "par34 CC325B OC305A"}, {"OC3C51", "CC3153", "350.00", "1.425", "par34 CC325B OC305A"}, {"OC311", "CC3152", "428.00", "1.395", "erh crystal analysis on furanose 3/09"}, {"OC311", "CC3051", "428.00", "1.395", "erh crystal analysis on furanose 3/09"}, {"OC311", "CC3151", "410.00", "1.395", "erh crystal analysis on furanose 3/09"}, {"CC3152", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3251", "HCA2", "307.00", "1.100", "par_carb CC322C HCA2C2"}, {"CC3151", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3153", "HCA1", "309.00", "1.111", "par22 HA CT1"}, {"CC3152", "CC3251", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3051", "CC3251", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3251", "CC3151", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3153", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3152", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3051", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3151", "CC3151", "195.00", "1.508", "erh crystal analysis on furanose 3/09"}, {"CC3153", "CC321", "222.50", "1.490", "par_carb CC321 CC3163 (sng qm/crystal mod); erh 2/09"}, {"CC3051", "CC321", "222.50", "1.490", "par_carb CC321 CC3163 (sng qm/crystal mod); erh 2/09"}, {"CC3152", "OC301", "360.00", "1.395", "erh xtal analysis on disac"}, {"CC321D", "CC311D", "222.50", "1.538", "par22 CT2 CT1"}, {"CC311D", "CC311D", "222.50", "1.538", "par22 CT2 CT1"}, {"CC3161", "OC30P", "360.00", "1.425", " "}, {"CC311D", "OC30P", "360.00", "1.425", " "}, {"CC3162", "OC30P", "360.00", "1.425", " "}, {"CC321", "OC30P", "360.00", "1.452", " "}, {"OC30P", "PC", "270.0", "1.675", " "}, {"OC2DP", "PC", "580.0", "1.525", " "}, {"OC312", "PC", "237.0", "1.61", " "}, {"OC312", "HCP1", "545.0", "0.960", " "}, {"SC", "OC2DP", "540.0", "1.448", "methylsulfate"}, {"SC", "OC30P", "250.0", "1.610", "methylsulfate"}, {"CC312D", "OC301", "360.00", "1.395", "OMe-THF CC312C OC301"}, {"CC312D", "OC3C5M", "350.00", "1.425", "OMe-THF CC312C OC3C5M"}, {"CC312D", "CC322C", "195.00", "1.518", "THF w/me CC312C CC322C"}, {"CC312D", "HCA1", "307.00", "1.100", "THF w/me CC312C HCA1C2"}, {"CC312D", "OC302", "360.00", "1.425", "pram, modified (from OMe-THF) to match model comp 1(raman et al.) QM minima geometry and SUCROS04 crystal"}, {"CC312C", "HCA1", "307.00", "1.100", "THF w/me CC312C HCA1C2"}, {"CC312C", "CC321", "222.50", "1.500", "pram, modified 12/26/2010 (from THF w/me) to match model comp 2(raman et al.) QM minima geometry"}, {"CC331", "OC303", "360.00", "1.415", "Ome-THF CC331 OC301"}, {"CC312C", "OC303", "360.00", "1.425", "pram, modified (from OMe-THF) to match model comp 3(raman et al.) QM minima geometry"}, {"CC311D", "OC303", "360.00", "1.395", "CC311D OC301"}, {"CC3051", "OC302", "360.00", "1.425", "CC312D OC301 - model compound 1 (raman et. al.), crystal analysis"}, {"CC3162", "OC303", "360.00", "1.395", "CC311D OC303 - model compound 3 (raman et. al.)"}, {"OC303", "CC3151", "360.00", "1.425", "CC312C OC303 - model compound 3 (raman et. al.)"}, {"OC301", "CC3051", "360.00", "1.395", "CC312C OC301 - Ome-THF"}, {"OC301", "CC312", "400.00", "1.420", "from CC312 OC311"}, {"OC301", "CC322", "400.00", "1.420", "from CC312 OC311"}, {"CC2O5", "OC301", "150.00", "1.3340", "CG2O2 OG302"}, {"CC2O5", "CC331", "200.00", "1.5220", "CG2O2 CG331"}, {"CC2O5", "OC2D1", "750.00", "1.2200", "CG2O2 OG2D1"}, {"SC", "NC311", "185.00", "1.700", "SUFMA/B, Targeting crystal survey value instead of QM, xxwy"}, {"CC3161", "NC311", "270.00", "1.455", "SUFMA/B, xxwy"}, {"NC311", "HCP1", "432.00", "1.030", "SUFMA/B, xxwy"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_carb info V(S) = Kub x (S - S0)^2 */ char * charmm36_carb_angles[438][8]= {{"CC311", "CC311", "CC321", "53.35", "111.00", "8.00", "2.561", "par22 CT2 CT1 CT1"}, {"CC322", "CC312", "CC322", "45.00", "111.00", " ", " ", "adm 11/08, glycerol"}, {"CC312", "CC312", "CC322", "45.00", "111.00", " ", " ", "adm 11/08, glycerol"}, {"CC312", "CC2O3", "OC2D3", "75.00", "121.50", " ", " ", "ketone, par22 O CD CT2"}, {"CC331", "CC2O3", "OC2D3", "75.00", "121.50", " ", " ", "ketone, par22 aldehydes.str"}, {"CC322", "CC2O3", "OC2D3", "75.00", "121.50", " ", " ", "ketone, par22 O CD CT2"}, {"CC331", "CC2O3", "CC331", "35.00", "116.00", " ", " ", "ketone, C-C-C"}, {"CC312", "CC2O3", "CC322", "35.00", "116.00", " ", " ", "ketone"}, {"CC322", "CC2O3", "CC322", "35.00", "116.00", " ", " ", "ketone"}, {"CC312", "CC312", "CC2O3", "60.00", "113.80", " ", " ", "ketone, par22 str CT3 CT2 CD"}, {"CC2O3", "CC331", "HCA3", "50.00", "109.50", " ", " ", "ketone"}, {"CC2O3", "CC322", "HCA2", "50.00", "109.50", " ", " ", "ketone, par22 HB CT2 CD"}, {"HCA1", "CC312", "CC2O3", "50.00", "109.50", " ", " ", "ketone, par22 HB CT1 CD"}, {"OC311", "CC312", "CC2O3", "55.00", "108.89", " ", " ", "ketone, og 1/06 EtOH NIST IR fit"}, {"CC2O3", "CC322", "OC311", "55.00", "108.89", " ", " ", "ketone, og 1/06 EtOH NIST IR fit"}, {"OC2D4", "CC2O4", "HCR1", "65.00", "118.00", " ", " ", "acetaldehyde, adm"}, {"HCR1", "CC2O4", "CC331", "65.00", "116.00", " ", " ", "acetaldehyde, adm"}, {"HCR1", "CC2O4", "CC312", "65.00", "116.00", " ", " ", "acetaldehyde, adm"}, {"CC312", "CC2O4", "OC2D4", "45.00", "126.00", " ", " ", "acetaldehyde, adm"}, {"CC331", "CC2O4", "OC2D4", "45.00", "126.00", " ", " ", "acetaldehyde, adm"}, {"CC312", "CC312", "CC2O4", "60.00", "113.80", " ", " ", "aldehyde, par22 CT3 CT2 CD"}, {"OC311", "CC312", "CC2O4", "55.00", "108.89", " ", " ", "aldehyde, og 1/06 EtOH NIST IR fit"}, {"CC2O4", "CC312", "HCA1", "33.00", "109.50", "30.00", "2.16300", "acetaldehyde, adm"}, {"CC2O4", "CC331", "HCA3", "33.00", "109.50", "30.00", "2.16300", "acetaldehyde, adm"}, {"CC3161", "CC3161", "CC3161", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3261", "CC3161", "CC3161", "53.35", "111.00", "8.00", "2.561", "par22 CT2 CT1 CT1"}, {"CC3161", "CC3161", "CC3163", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3161", "CC3161", "CC3263", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1; erh transferred by analogy"}, {"CC312", "CC312", "CC312", "45.00", "111.00", " ", " ", "adm 11/08, glycerol"}, {"CC3162", "CC3161", "CC3161", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3163", "CC312", "CC312", "53.35", "111.00", "8.00", "2.561", "par22 CT1 CT1 CT1"}, {"CC3062", "CC3261", "CC3161", "58.35", "113.50", "11.16", "2.561", "par22 CT1 CT2 CT1"}, {"CC3161", "CC3163", "CC321", "58.35", "113.50", "11.16", "2.561", "sng"}, {"CC3161", "CC3163", "CC312", "58.35", "113.50", "11.16", "2.561", "from CC3161 CC3163 CC321"}, {"CC3161", "CC3163", "CC331", "58.35", "113.50", "11.16", "2.561", "CC3161 CC3163 CC321 og xylose xtal ok"}, {"CC2O2", "CC311", "CC331", "52.00", "108.00", " ", " ", "par22 CT3 CT1 CC"}, {"CC2O2", "CC3163", "CC3161", "52.00", "108.00", " ", " ", "par22 CT1 CT1 CC"}, {"CC2O2", "CC301", "CC331", "52.00", "112.00", " ", " ", "og amol mp2/6-31g*"}, {"CC2O2", "CC3062", "CC3261", "52.00", "112.00", " ", " ", "from CC2O2 CC301 CC331 for ne5ac"}, {"CC321", "CC321", "CC321", "58.35", "113.60", "11.16", "2.561", "par22 CT2 CT2 CT2"}, {"CC331", "CC321", "CC321", "58.00", "115.00", "8.00", "2.561", "par22 CT3 CT2 CT2"}, {"CC331", "CC311", "CC331", "53.35", "114.00", "8.00", "2.561", "par22 CT3 CT1 CT3"}, {"CC321C", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321C", "CC311C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC321C", "CC311C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC311C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC311D", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC311C", "CC321C", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321C", "CC321D", "CC321C", "58.35", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321", "CC311C", "CC321C", "58.35", "113.50", "11.16", "2.561", "from CC3161 CC3163 CC321"}, {"CC2O2", "CC321", "CC331", "52.00", "108.00", " ", " ", "par22 CT2 CT2 CC"}, {"CC312", "CC312", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC312", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3161", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3161", "CC3162", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3261", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC3162", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3163", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3161", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC3163", "CC312", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT1"}, {"CC322", "CC312", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC321", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC331", "CC311", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT3"}, {"CC331", "CC3163", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT3"}, {"CC3263", "CC3161", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC321", "CC311", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"CC312", "CC322", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3163", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3062", "CC3261", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3161", "CC3261", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC311", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3161", "CC3263", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"CC3163", "CC331", "HCA3", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC311", "CC331", "HCA3", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC301", "CC331", "HCA3", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC2O2", "CC3163", "HCA1", "50.00", "109.50", " ", " ", "par 22 HB CT1 CC"}, {"CC2O2", "CC311", "HCA1", "50.00", "109.50", " ", " ", "par 22 HB CT1 CC"}, {"CC2O1", "CC331", "HCA3", "33.00", "109.50", "30.00", "2.163", "par22 HA CT3 C"}, {"HCA1", "CC311C", "CC321", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA1", "CC311D", "CC321C", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA1", "CC311C", "CC321C", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA1", "CC311C", "CC321D", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA2", "CC321", "CC311C", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1"}, {"HCA2", "CC321", "CC321", "26.50", "110.10", "22.53", "2.179", "par22 HA CT2 CT2"}, {"HCA2", "CC321", "CC331", "34.60", "110.10", "22.53", "2.179", "par22 HA CT2 CT3"}, {"HCA3", "CC331", "CC321", "34.60", "110.10", "22.53", "2.179", "par22 HA CT3 CT2"}, {"HCA2", "CC321C", "CC321C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321D", "CC321C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321C", "CC321D", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321C", "CC311D", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321C", "CC311C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA2", "CC321D", "CC311C", "34.50", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"CC2O2", "CC321", "HCA2", "33.00", "109.50", "30.00", "2.163", "par22 HA CT2 CC"}, {"CC3161", "CC3161", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT1"}, {"CC3162", "CC3161", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT1"}, {"CC3163", "CC3161", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT1"}, {"CC331", "CC311", "NC2D1", "70.00", "113.50", " ", " ", "par22 NH1 CT1 CT3"}, {"NC2D1", "CC2O1", "CC331", "80.00", "116.50", " ", " ", "par22 NH1 C CT3"}, {"CC3161", "NC2D1", "CC2O1", "50.00", "120.00", " ", " ", "par22 CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC311", "50.00", "120.00", " ", " ", "par22 CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC331", "50.00", "120.00", " ", " ", "par22 CT3 NH1 C"}, {"NC2D1", "CC2O1", "OC2D1", "80.00", "122.50", " ", " ", "par22 O C NH1"}, {"NC2D1", "CC3161", "HCA1", "48.00", "108.00", " ", " ", "par22 NH1 CT1 HB"}, {"NC2D1", "CC311", "HCA1", "48.00", "108.00", " ", " ", "par22 NH1 CT1 HB"}, {"NC2D1", "CC331", "HCA3", "51.50", "109.50", " ", " ", "par22 NH1 CT3 HA"}, {"HCP1", "NC2D1", "CC2O1", "34.00", "123.00", " ", " ", "par22 H NH1 C"}, {"CC3161", "NC2D1", "HCP1", "35.00", "117.00", " ", " ", "par22 H NH1 CT1"}, {"HCP1", "NC2D1", "CC311", "35.00", "117.00", " ", " ", "par22 H NH1 CT1"}, {"HCP1", "NC2D1", "CC331", "35.00", "117.00", " ", " ", "par22 H NH1 CT3"}, {"HCA2", "CC321", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC322", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC321C", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC321D", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC3261", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA2", "CC3263", "HCA2", "35.50", "109.00", "5.40", "1.802", "par22 HA CT2 HA"}, {"HCA3", "CC331", "HCA3", "35.50", "108.40", "5.40", "1.802", "par22 HA CT3 HA"}, {"CC3161", "CC3163", "OC3C61", "45.00", "110.00", " ", " ", "sng mod (qm and crystal data)"}, {"CC3161", "CC3263", "OC3C61", "45.00", "110.00", " ", " ", "CC3161 CC3163 OC3C61 + og xtal xylose"}, {"CC3161", "CC3162", "OC3C61", "45.00", "106.00", " ", " ", "og crystal analysis"}, {"OC3C61", "CC3062", "CC3261", "45.00", "111.50", " ", " ", "og xtal kemyac"}, {"CC321", "CC3163", "OC3C61", "45.00", "109.00", " ", " ", "sng mod (qm and crystal data) II"}, {"CC312", "CC3163", "OC3C61", "45.00", "109.00", " ", " ", "from C321 CC3163 OC3C61"}, {"CC331", "CC3163", "OC3C61", "45.00", "111.50", " ", " ", "par34 OC30A CC32A CC33A"}, {"CC2O2", "CC311", "OC301", "45.00", "103.00", " ", " ", "og amop mp2/631gd"}, {"CC2O2", "CC3163", "OC3C61", "45.00", "103.00", " ", " ", "og amop mp2/631gd + xtals"}, {"CC2O2", "CC301", "OC301", "45.00", "103.00", " ", " ", "from CC2O2 CC311 OC301; og amol ok"}, {"CC2O2", "CC3062", "OC301", "45.00", "103.00", " ", " ", "from CC2O2 CC301 OC301"}, {"CC2O2", "CC3062", "OC3C61", "45.00", "103.00", " ", " ", "from CC2O2 CC301 OC301"}, {"CC3161", "CC3162", "OC311", "75.70", "107.00", " ", " ", "sng mod (qm and crystal data) III"}, {"CC312", "CC312", "OC311", "75.70", "108.00", " ", " ", "adm 11/08, glycerol"}, {"CC3161", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3261", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3162", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3163", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3163", "CC312", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC3263", "CC3161", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"CC312", "CC322", "OC311", "50.00", "106.00", " ", " ", "adm 11/08, glycerol"}, {"CC3163", "CC321", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1"}, {"CC311", "CC321", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1"}, {"CC321", "CC311", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1/CT3"}, {"CC322", "CC312", "OC311", "75.70", "108.00", " ", " ", "adm 11/08, glycerol"}, {"CC331", "CC301", "OC311", "75.70", "113.00", " ", " ", "og amol mp2/631g*"}, {"CC3261", "CC3062", "OC311", "75.70", "113.00", " ", " ", "from CC331 CC301 OC311 for ne5ac"}, {"CC2O2", "CC301", "OC311", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT3; og amol ok"}, {"CC2O2", "CC3062", "OC311", "75.70", "110.10", " ", " ", "from CC2O2 CC301 OC311 for ne5ac"}, {"CC3163", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC3062", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC311", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC301", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"CC321", "CC2O2", "OC2D2", "40.00", "114.00", "50.00", "2.388", "og amop amol and xtals"}, {"OC2D1", "CC2O1", "CC331", "80.00", "121.00", " ", " ", "par22 O C CT3"}, {"OC301", "CC311", "CC331", "45.00", "111.50", " ", " ", "par35 OC30A CC32A CC33A"}, {"OC301", "CC321", "CC321", "45.00", "111.50", " ", " ", "par35 OC30A CC32A CC32A"}, {"OC301", "CC301", "CC331", "45.00", "109.00", " ", " ", "og amol mp2/631g*"}, {"OC3C61", "CC311C", "CC321", "45.00", "109.00", " ", " ", "from CC321 CC3163 OC3C61"}, {"OC3C61", "CC311C", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321C", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321C", "CC311C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321D", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321D", "CC311C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC311D", "CC321C", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC301", "CC311D", "CC321C", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3162", "CC3161", "45.00", "105.00", " ", " ", "og/rmv disac crystal analysis"}, {"OC301", "CC3062", "CC3261", "45.00", "105.00", " ", " ", "from OC301 CC3162 CC3161"}, {"OC302", "CC311D", "CC321C", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC302", "CC3162", "CC3161", "45.00", "105.00", " ", " ", "og/rmv disac crystal analysis"}, {"OC301", "CC311C", "CC321C", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3161", "CC3161", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3161", "CC3163", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC311C", "CC321D", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3161", "CC3162", "45.00", "109.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC321", "CC311C", "45.00", "106.00", " ", " ", "og fit compounds 11 and 12"}, {"OC301", "CC321", "CC3163", "45.00", "106.00", " ", " ", "og fit compounds 11 and 12"}, {"CC321", "CC321", "OC311M", "75.70", "110.10", " ", " ", "From CN7 CN8B ON5"}, {"CC331", "CC321", "OC311M", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT3"}, {"CC331", "CC311", "OC311M", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT3"}, {"CC3161", "OC311", "HCP1", "50.00", "109.00", " ", " ", "sng mod (qm and crystal data) II"}, {"CC321", "OC311", "HCP1", "50.00", "109.00", " ", " ", "sng mod (qm and crystal data)"}, {"CC3162", "OC311", "HCP1", "50.00", "109.00", " ", " ", "sng mod (qm and crystal data) II"}, {"CC3062", "OC311", "HCP1", "50.00", "109.00", " ", " ", "from CC3162 OC311 HCP1 for ne5ac"}, {"HCP1", "OC311", "CC311", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311", "CC312", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311", "CC301", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311", "CC322", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311M", "CC321", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1M", "OC311M", "CC321", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit for egly"}, {"HCP1", "OC311M", "CC311", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit"}, {"HCP1", "OC311M", "CC331", "57.50", "106.00", " ", " ", "par22 H OH1 CT3"}, {"OC311", "CC3162", "OC3C61", "45.00", "116.50", " ", " ", "og crystal analysis"}, {"OC311", "CC301", "OC301", "45.00", "116.50", " ", " ", "OC311 CC3162 OC3C61; og amol ok"}, {"OC311", "CC3062", "OC3C61", "45.00", "113.00", " ", " ", "og xtal kemyac"}, {"OC2D2", "CC2O2", "OC2D2", "100.00", "132.00", "70.00", "2.225", "og amop amol and xtals"}, {"OC301", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC301", "CC3162", "OC3C61", "90.00", "112.00", " ", " ", "og/rmv disac crystal analysis"}, {"OC301", "CC3062", "OC3C61", "90.00", "112.00", " ", " ", "from OC301 CC3162 OC3C61"}, {"OC302", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC302", "CC3162", "OC3C61", "90.00", "112.00", " ", " ", "og/rmv disac crystal analysis"}, {"CC3163", "OC3C61", "CC3162", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC3163", "OC3C61", "CC3062", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC3263", "OC3C61", "CC3162", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC311", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC32A OC30A CC32A"}, {"CC301", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC321C", "OC3C61", "CC321C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC321D", "OC3C61", "CC321C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC321D", "OC3C61", "CC311C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC311D", "OC3C61", "CC321C", "95.00", "109.70", " ", " ", "par35 CC326A OC30A CC326A"}, {"CC311D", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC321", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC321", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"CC311D", "OC302", "CC311D", "50.00", "111.50", " ", " ", "og QM theta vs phi/psi comp 4 to 6"}, {"CC3162", "OC302", "CC3162", "50.00", "111.50", " ", " ", "og QM theta vs phi/psi comp 4 to 6"}, {"CC311C", "OC301", "CC311D", "50.00", "109.20", " ", " ", "og QM theta vs phi/psi comp 7 to 10"}, {"CC3161", "OC301", "CC3162", "50.00", "109.20", " ", " ", "og QM theta vs phi/psi comp 7 to 10"}, {"CC3161", "OC301", "CC3062", "50.00", "109.20", " ", " ", "from CC3161 OC301 CC3162"}, {"HCA1", "CC312", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3161", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3162", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3163", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA2", "CC321", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA2", "CC322", "OC311", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC3162", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC3163", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA2", "CC3263", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311", "OC301", "60.00", "109.50", " ", " ", "par34 HCA2 CC32A OC30A"}, {"OC301", "CC321", "HCA2", "60.00", "109.50", " ", " ", "par34 HCA2 CC32A OC30A"}, {"OC301", "CC331", "HCA3", "60.00", "109.50", " ", " ", "par34 HCA3 CC33A OC30A"}, {"HCA3", "CC331", "OC311M", "55.00", "108.89", " ", " ", "og 1/06 MeOH NIST IR fit"}, {"HCA2", "CC321", "OC311M", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA1", "CC311", "OC311M", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit"}, {"HCA2", "CC321C", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA2", "CC321D", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311C", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311D", "OC3C61", "45.00", "109.50", " ", " ", "sng from thp"}, {"HCA1", "CC311D", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC3162", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC311D", "OC302", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC3162", "OC302", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC311C", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"HCA1", "CC3161", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"CC322C", "CC322C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"HCA2C2", "CC322C", "CC322C", "35.00", "111.40", "22.53", "2.179", "viv cyclopentane 10/17/05"}, {"HCA2C2", "CC322C", "HCA2C2", "38.50", "106.80", "5.40", "1.802", "viv cyclopentane 10/17/05"}, {"OC3C5M", "CC322C", "CC322C", "45.00", "111.10", " ", " ", "viv THF 10/21/05"}, {"CC322C", "OC3C5M", "CC322C", "95.00", "111.00", " ", " ", "viv THF 10/21/05"}, {"HCA2C2", "CC322C", "OC3C5M", "70.00", "107.30", " ", " ", "viv THF 10/21/05"}, {"HCA3", "CC331", "CC312C", "33.43", "110.10", "22.53", "2.179", "par22 HA CT3 CT1"}, {"CC322C", "CC312C", "CC331", "53.35", "114.00", "8.00", "2.561", "par22 CT3 CT1 CT2"}, {"HCA1C2", "CC312C", "CC331", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT3"}, {"OC3C5M", "CC312C", "CC331", "45.00", "111.50", " ", " ", "viv TF2M (DEE)"}, {"HCA1C2", "CC312C", "CC322C", "35.00", "111.40", "22.53", "2.179", "viv cyclopentane 10/17/05; erh 7/08"}, {"HCA2C2", "CC322C", "CC312C", "35.00", "111.40", "22.53", "2.179", "viv cyclopentane 10/17/05; erh 7/08"}, {"CC312C", "CC322C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv ; erh 7/08"}, {"CC322C", "CC312C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv ; erh 7/08"}, {"OC3C5M", "CC312C", "CC322C", "45.00", "111.10", " ", " ", "viv THF 10/21/05; erh 7/08"}, {"CC312C", "OC3C5M", "CC322C", "95.00", "111.00", " ", " ", "viv THF 10/21/05; erh 7/08"}, {"HCA1C2", "CC312C", "OC3C5M", "70.00", "107.30", " ", " ", "viv THF 10/21/05; erh 7/08"}, {"HCA1C2", "CC312C", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC301", "CC312C", "CC322C", "45.00", "106.50", " ", " ", "erh xtal analysis on disac"}, {"CC312C", "OC301", "CC331", "95.00", "109.70", " ", " ", "par35 CC33A OC30A CC32A"}, {"OC301", "CC312C", "OC3C5M", "90.00", "112.00", " ", " ", "og,erh xtal analysis on disac"}, {"OC3C51", "CC3152", "CC3251", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3051", "CC3251", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3152", "CC3151", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3051", "CC3151", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3153", "CC3151", "45.00", "111.10", " ", " ", "THF par_carb OC3C5M CC322C CC322C"}, {"OC3C51", "CC3153", "CC321", "45.00", "108.00", " ", " ", "erh crystal analysis on furanose 3/09"}, {"OC3C51", "CC3051", "CC321", "45.00", "108.00", " ", " ", "erh crystal analysis on furanose 3/09"}, {"OC311", "CC3151", "CC3251", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1; par_Sugars, CC3263 CC3161 OC311"}, {"OC311", "CC3151", "CC3153", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3151", "CC3152", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3151", "CC3051", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3151", "CC3151", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC321", "CC3153", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1"}, {"OC311", "CC321", "CC3152", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1; erh 3/08"}, {"OC311", "CC321", "CC3051", "75.70", "110.10", " ", " ", "par22 OH1 CT2 CT1; erh 3/08"}, {"OC311", "CC3152", "CC3251", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1; par_carb, CC3263 CC3161 OC311"}, {"OC311", "CC3051", "CC3251", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1; par_carb, CC3263 CC3161 OC311"}, {"OC311", "CC3152", "CC321", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1/CT3"}, {"OC311", "CC3051", "CC321", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1/CT3"}, {"OC311", "CC3152", "CC3151", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC311", "CC3051", "CC3151", "75.70", "110.10", " ", " ", "par22 OH1 CT1 CT1"}, {"OC3C51", "CC3152", "OC311", "45.00", "116.50", " ", " ", "par_carb, OC3C61 CC3162 OC311"}, {"OC3C51", "CC3051", "OC311", "45.00", "116.50", " ", " ", "par_carb, OC3C61 CC3162 OC311"}, {"OC3C51", "CC3152", "HCA1", "70.00", "107.30", " ", " ", "THF, par_carb, OC3C5M CC322C HCA2C2"}, {"OC3C51", "CC3153", "HCA1", "70.00", "107.30", " ", " ", "THF, par_carb, OC3C5M CC322C HCA2C2"}, {"OC311", "CC3152", "HCA1", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit; par_carb, HCA1 CC3162 OC311"}, {"OC311", "CC3151", "HCA1", "55.00", "108.89", " ", " ", "og 1/06 EtOH NIST IR fit; par_carb, HCA1 CC3161 OC311"}, {"CC3152", "OC311", "HCP1", "50.00", "109.00", " ", " ", "par_carb CC3162 OC311 HCP1"}, {"CC3051", "OC311", "HCP1", "50.00", "109.00", " ", " ", "par_carb CC3162 OC311 HCP1"}, {"CC3151", "OC311", "HCP1", "50.00", "109.00", " ", " ", "par_carb CC3161 OC311 HCP1"}, {"CC3153", "OC3C51", "CC3152", "95.00", "111.00", " ", " ", "THF, par_carb CC322C OC3C5M CC322C"}, {"CC3153", "OC3C51", "CC3051", "95.00", "111.00", " ", " ", "THF, par_carb CC322C OC3C5M CC322C"}, {"CC3152", "CC3251", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3051", "CC3251", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3152", "CC3151", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3051", "CC3151", "CC3151", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3251", "CC3151", "CC3153", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3151", "CC3151", "CC3153", "58.00", "109.50", "11.16", "2.561", "THF, par_carb CC322C CC322C CC322C"}, {"CC3151", "CC3153", "CC321", "58.35", "113.50", "11.16", "2.561", "sng, par_carb CC3161 CC3163 CC321; erh 7/08"}, {"CC3151", "CC3051", "CC321", "58.35", "113.50", "11.16", "2.561", "sng, par_carb CC3161 CC3163 CC321; erh 7/08"}, {"CC3152", "CC3251", "HCA2", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3051", "CC3251", "HCA2", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3251", "CC3152", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3251", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3251", "HCA2", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3153", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3152", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3051", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3151", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3152", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3151", "CC3153", "HCA1", "35.00", "111.40", "22.53", "2.179", "cyclopentane, par_carb HCA2C2 CC322C CC322C"}, {"CC3153", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1; erh 7/08"}, {"CC3152", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1; erh 7/08"}, {"CC3051", "CC321", "HCA2", "33.43", "110.10", "22.53", "2.179", "par22 HA CT2 CT1; erh 7/08"}, {"CC321", "CC3153", "HCA1", "34.50", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA2", "CC3251", "HCA2", "38.50", "106.80", "5.40", "1.802", "cyclopentane, par_carb HCA2C2 CC322C HCA2C2"}, {"HCA1", "CC3152", "OC301", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC301", "CC3152", "CC3151", "45.00", "105.00", " ", " ", "erh xtal anal on disac/furanose 3/09"}, {"CC3152", "OC301", "CC331", "95.00", "111.00", " ", " ", "erh xtal anal on furanose 3/09"}, {"OC301", "CC3152", "OC3C51", "90.00", "112.00", " ", " ", "erh xtal anal on disac"}, {"CC321C", "CC311D", "CC321C", "58.350", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC321D", "CC311D", "CC321C", "58.350", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"CC311D", "CC311D", "CC321C", "58.350", "112.00", "11.16", "2.561", "sng cyclohexane 12/05"}, {"OC3C61", "CC311D", "CC311D", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"OC3C61", "CC321D", "CC311D", "45.00", "111.50", " ", " ", "par34 OC30A CC326A CC326A"}, {"HCA1", "CC311D", "CC311D", "34.500", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"HCA2", "CC321D", "CC311D", "34.500", "110.10", "22.53", "2.179", "sng cyclohexane 12/05"}, {"HCA1", "CC311D", "CC321D", "34.500", "110.10", "22.53", "2.179", "par22 HA CT1 CT2"}, {"OC30P", "CC311D", "CC321C", "45.00", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC311D", "CC311D", "45.000", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC3161", "CC3161", "45.00", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC3161", "CC3163", "45.00", "107.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC311D", "CC321D", "45.00", "109.00", " ", " ", " "}, {"OC30P", "CC3162", "CC3161", "45.00", "109.00", " ", " ", " "}, {"OC30P", "CC3161", "CC3162", "45.00", "109.00", " ", " ", " "}, {"OC30P", "CC321", "CC311C", "75.700", "107.50", " ", " ", " "}, {"OC30P", "CC321", "CC3163", "75.700", "107.50", " ", " ", " "}, {"OC30P", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "og OMeTHP qm compounds 2 and 3"}, {"OC30P", "CC3162", "OC3C61", "90.00", "110.00", " ", " ", " "}, {"OC30P", "CC321", "HCA2", "60.0", "109.5", " ", " ", " "}, {"OC30P", "CC3162", "HCA1", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC30P", "CC3161", "HCA1", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC30P", "CC311D", "HCA1", "60.00", "109.50", " ", " ", "par35 HCA2 CC32A OC30A"}, {"OC30P", "PC", "OC2DP", "98.9", "111.6", " ", " ", " "}, {"OC2DP", "PC", "OC2DP", "120.0", "120.0", " ", " ", " "}, {"OC2DP", "PC", "OC312", "98.9", "113.23", " ", " ", "ON3 P ON4 98.9 108.23 !MP_1, ADM Jr. !"}, {"OC312", "PC", "OC312", "98.9", "104.413", " ", " ", "ON4 P ON4 98.9 104.0 !MP_0, ADM Jr. !"}, {"OC30P", "PC", "OC312", "48.1", "108.0", " ", " ", "ON2 P ON4 48.1 108.0 !MP_1, ADM Jr. !"}, {"HCP1", "OC312", "PC", "30.0", "115.0", "40.0", "2.35", " "}, {"CC3161", "OC30P", "PC", "20.0", "120.0", "35.0", "2.33", " "}, {"CC311D", "OC30P", "PC", "20.0", "120.0", "35.0", "2.33", " "}, {"CC3162", "OC30P", "PC", "20.0", "120.0", "35.0", "2.33", " "}, {"CC311D", "OC30P", "SC", "15.0", "109.00", "27.00", "1.90", "methylsulfate"}, {"CC3161", "OC30P", "SC", "15.0", "109.00", "27.00", "1.90", "methylsulfate"}, {"CC321", "OC30P", "SC", "15.0", "110.10", "27.00", "1.90", "methylsulfate"}, {"OC2DP", "SC", "OC2DP", "130.0", "109.47", "35.0", "2.45", "methylsulfate"}, {"OC30P", "SC", "OC2DP", "85.0", "98.0", " ", " ", "methylsulfate"}, {"CC311D", "OC301", "CC321", "95.00", "109.70", " ", " ", "pram, OMeTHP CC311D OC301 CC331"}, {"OC301", "CC321", "CC331", "45.00", "111.50", " ", " ", "pram, par35 OC3C7M CC321 CC331"}, {"OC301", "CC312D", "OC3C5M", "90.00", "112.00", " ", " ", "OMe-THF OC301 CC312C OC3C5M"}, {"HCA1", "CC312D", "OC301", "60.00", "109.50", " ", " ", "OMe-THF HCA1C2 CC312C OC301"}, {"OC301", "CC312D", "CC322C", "45.00", "106.50", " ", " ", "OMe-THF OC301 CC312C CC322C"}, {"CC312D", "OC301", "CC331", "95.00", "109.70", " ", " ", "OMe-THF CC312C OC301 CC331"}, {"CC311D", "OC302", "CC312D", "50.00", "111.50", " ", " ", "THP-O-THP CC311D OC302 CC311D"}, {"CC312D", "OC3C5M", "CC322C", "95.00", "111.00", " ", " ", "THF w/me CC312C OC3C5M CC322C"}, {"OC302", "CC312D", "OC3C5M", "90.00", "112.00", " ", " ", "OMe-THF OC301 CC312C OC3C5M"}, {"HCA2C2", "CC322C", "CC312D", "35.00", "111.40", "22.53", "2.179", "THF w/me HCA2C2 CC322C CC312C"}, {"CC312D", "CC322C", "CC322C", "58.00", "109.50", "11.16", "2.561", "THF w/me CC312C CC322C CC322C"}, {"OC3C5M", "CC312D", "CC322C", "45.00", "111.10", " ", " ", "THF w/me OC3C5M CC312C CC322C"}, {"OC302", "CC312D", "CC322C", "45.00", "106.50", " ", " ", "OMe-THF OC301 CC312C CC322C"}, {"HCA1", "CC312D", "OC302", "60.00", "109.50", " ", " ", "OMe-THF HCA1C2 CC312C OC301"}, {"HCA1", "CC312D", "OC3C5M", "70.00", "107.30", " ", " ", "THF w/me HCA1C2 CC312C OC3C5M"}, {"HCA1", "CC312D", "CC322C", "35.00", "111.40", "22.53", "2.179", "THF w/me HCA1C2 CC312C CC322C"}, {"HCA1", "CC312C", "OC3C5M", "70.00", "107.30", " ", " ", "THF w/me HCA1C2 CC312C OC3C5M"}, {"HCA1", "CC312C", "CC322C", "35.00", "111.40", "22.53", "2.179", "THF w/me HCA1C2 CC312C CC322C"}, {"CC321", "CC312C", "CC322C", "58.350", "113.00", "11.16", "2.561", "pram, angle eq. value modified (from CC321 CC311C CC321C),QM minima, MOLVIB on model compound 2 (raman et. al)"}, {"HCA1", "CC312C", "CC321", "34.50", "110.10", "22.53", "2.179", "THF w/me HCA1C2 CC312C CC331"}, {"HCA2", "CC321", "CC312C", "33.43", "110.10", "22.53", "2.179", "COCA-THP2 HCA2 CC321 CC311C"}, {"OC301", "CC321", "CC312C", "45.00", "106.00", " ", " ", "COCA-THP2 OC301 CC321 CC311C"}, {"OC3C5M", "CC312C", "CC321", "60.00", "109.00", " ", " ", "pram, modified (from OC3C61 CC311C CC321),QM minima, MOLVIB on model compound 2 (raman et. al)"}, {"CC312C", "OC303", "CC331", "95.00", "109.70", " ", " ", "OMe-THF CC312C OC301 CC331"}, {"OC303", "CC331", "HCA3", "60.00", "109.50", " ", " ", "OMe-THF"}, {"OC303", "CC311D", "CC321C", "45.00", "109.00", " ", " ", "OC301 CC311D CC321C"}, {"OC303", "CC311D", "OC3C61", "90.00", "110.00", " ", " ", "OC301 CC311D OC3C61"}, {"HCA1", "CC311D", "OC303", "60.00", "109.50", " ", " ", "HCA1 CC311D OC301"}, {"HCA1", "CC312C", "OC303", "60.00", "109.50", " ", " ", "HCA1C2 CC312C OC301"}, {"OC303", "CC312C", "CC322C", "45.00", "110.50", " ", " ", "pram, modified (from OC301 CC312C CC322C), model compound 3 (raman et. al) QM minima"}, {"CC311D", "OC303", "CC312C", "50.00", "109.50", " ", " ", "pram, modified (from CC311D OC302 CC311D), model compound 3 (raman et. al) QM minima, MOLVIB"}, {"OC3C5M", "CC322C", "CC312C", "45.00", "111.10", " ", " ", "THF OC3C5M CC322C CC322C"}, {"CC311C", "OC301", "CC312D", "50.00", "109.20", " ", " ", "CC311C OC301 CC311D"}, {"CC3162", "OC302", "CC3051", "50.00", "111.50", " ", " ", "CC3162 OC302 CC3162"}, {"OC302", "CC3051", "OC3C51", "90.00", "112.00", " ", " ", "OC301 CC312C OC3C51"}, {"OC302", "CC3051", "CC321", "75.70", "110.10", " ", " ", "OC311 CC3051 CC321"}, {"OC302", "CC3051", "CC3151", "45.00", "105.00", " ", " ", "OC301 CC3152 CC3151"}, {"HCA1", "CC3162", "OC303", "60.00", "109.50", " ", " ", "pram, model compound 3(raman et al) HCA1 CC311D OC303"}, {"OC303", "CC3162", "OC3C61", "90.00", "112.00", " ", " ", "OC301 CC3162 OC3C61"}, {"OC303", "CC3162", "CC3161", "45.00", "105.00", " ", " ", "OC301 CC3162 CC3161"}, {"CC3162", "OC303", "CC3151", "50.00", "109.50", " ", " ", "pram, model compound 3(raman et al) CC311D OC303 CC312C"}, {"OC303", "CC3151", "CC3153", "45.00", "110.50", " ", " ", "pram, model compound 3(raman et al) OC303 CC312C CC322C"}, {"OC303", "CC3151", "CC3151", "45.00", "110.50", " ", " ", "pram, model compound 3(raman et al) OC303 CC312C CC322C"}, {"OC303", "CC3151", "HCA1", "60.00", "109.50", " ", " ", "pram, model compound 3(raman et al) HCA1 CC312C OC303"}, {"OC303", "CC3151", "CC3051", "45.00", "110.50", " ", " ", "pram, model compound 3(raman et al) OC303 CC312C CC322C"}, {"CC3051", "CC321", "OC301", "45.00", "106.00", " ", " ", "pram, model compound 2 OC301 CC321 CC312C"}, {"CC321", "OC301", "CC3051", "95.00", "112.20", " ", " ", "pram, modified based on KESTOS,CELGIJ,PEKHES(2) crystal simulations (from OMe-thf CC312C OC301 CC331) 2/15/2010"}, {"OC301", "CC3051", "OC3C51", "90.00", "112.00", " ", " ", "OMe-THF OC301 CC312C OC3C5M"}, {"OC301", "CC3051", "CC321", "75.70", "110.10", " ", " ", "OC311 CC3051 CC321"}, {"OC301", "CC3051", "CC3151", "45.00", "106.50", " ", " ", "OMe-thf OC301 CC312C CC322C"}, {"CC3153", "CC321", "OC301", "45.00", "106.00", " ", " ", "pram, model compound 2(raman et al) OC301 CC321 CC312C"}, {"CC3152", "OC301", "CC321", "95.00", "111.00", " ", " ", "CC3152 OC301 CC331"}, {"CC3161", "OC301", "CC3152", "50.00", "109.20", " ", " ", "CC311C OC301 CC311D, model compound 4"}, {"OC301", "CC3161", "CC3263", "45.00", "109.00", " ", " ", "from OC301 CC3161 CC3163"}, {"CC3162", "OC30P", "SC", "15.00", "109.00", "27.00", "1.90", "sairam"}, {"CC321", "OC301", "CC3062", "95.00", "109.70", " ", " ", "CC3162 OC301 CC321; mjyang"}, {"OC301", "CC312", "CC312", "45.00", "106.00", " ", " ", "OC301 CC321 CC3163"}, {"OC301", "CC312", "CC322", "45.00", "106.00", " ", " ", "OC301 CC321 CC3163"}, {"CC312", "OC301", "CC3062", "95.00", "109.70", " ", " ", "from CC3162 OC301 CC321"}, {"OC301", "CC312", "HCA1", "60.00", "109.50", " ", " ", "OC301 CC321 HCA2"}, {"OC301", "CC322", "HCA2", "60.00", "109.50", " ", " ", "OC301 CC321 HCA2"}, {"OC301", "CC322", "CC312", "45.00", "106.00", " ", " ", "OC301 CC321 CC3163"}, {"CC322", "OC301", "CC3062", "95.00", "109.70", " ", " ", "from CC3162 OC301 CC321"}, {"CC3162", "CC3161", "CC3261", "53.35", "111.00", "8.00", "2.561", "from CC3162 CC3161 CC3161"}, {"CC3161", "CC3261", "CC3161", "53.35", "111.00", "8.00", "2.561", "from CC3161 CC3161 CC3161"}, {"CC3261", "CC3161", "CC3163", "53.35", "111.00", "8.00", "2.561", "from CC3161 CC3161 CC3163"}, {"CC3261", "CC3161", "OC301", "75.70", "110.10", " ", " ", "CC3261 CC3161 OC311"}, {"CC331", "CC2O5", "OC301", "55.00", "109.00", "20.00", "2.3260", "CG331 CG2O2 OG302"}, {"CC331", "CC2O5", "OC2D1", "70.00", "125.00", "20.00", "2.4420", "CG331 CG2O2 OG2D1"}, {"CC2O5", "CC331", "HCA3", "33.00", "109.50", "30.00", "2.1630", "CG2O2 CG331 HGA3"}, {"OC2D1", "CC2O5", "OC301", "90.00", "125.90", "160.00", "2.2576", "OG2D1 CG2O2 OG302"}, {"CC2O5", "OC301", "CC3161", "40.00", "109.60", "30.00", "2.2651", "CG2O2 OG302 CG311"}, {"OC2DP", "SC", "NC311", "85.00", "103.00", " ", " ", "SUFMA/B, xxwy"}, {"SC", "NC311", "HCP1", "48.00", "118.00", " ", " ", "SUFMA/B, xxwy"}, {"CC3161", "NC311", "HCP1", "48.00", "111.00", " ", " ", "SUFMA/B, xxwy"}, {"SC", "NC311", "CC3161", "50.00", "113.00", " ", " ", "SUFMA/B, xxwy"}, {"CC3161", "CC3161", "NC311", "52.00", "109.00", " ", " ", "SUFMA/B, xxwy"}, {"CC3162", "CC3161", "NC311", "52.00", "109.00", " ", " ", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "HCA1", "36.00", "109.50", " ", " ", "SUFMA/B, xxwy"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_carb info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_carb_dihedrals[1354][8]= {{"CC312", "CC312", "CC312", "CC2O3", "0.02", "1", "180.0", "erh ketone, n=6 polyol"}, {"CC312", "CC312", "CC312", "CC2O3", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC2O3", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC312", "CC312", "CC2O3", "CC322", "0.02", "1", "180.0", "erh ketone, n=6 polyol"}, {"CC312", "CC312", "CC2O3", "CC322", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC2O3", "CC322", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC2O3", "CC312", "CC312", "OC311", "2.62", "1", "180.0", "erh ketone, fit psicose"}, {"CC2O3", "CC312", "CC312", "OC311", "0.28", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O3", "CC312", "CC312", "OC311", "2.28", "3", "0.0", "C2-C3-C4-O4"}, {"CC312", "CC312", "CC2O3", "OC2D3", "2.06", "1", "0.0", "erh ketone, fit psicose"}, {"CC312", "CC312", "CC2O3", "OC2D3", "0.13", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC2O3", "OC2D3", "2.87", "3", "0.0", "C4-C3-C2-O2"}, {"CC312", "CC2O3", "CC322", "OC311", "2.94", "1", "0.0", "erh ketone, fit psicose"}, {"CC312", "CC2O3", "CC322", "OC311", "1.48", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC2O3", "CC322", "OC311", "0.50", "3", "180.0", "C3-C2-C1-O1"}, {"CC322", "CC2O3", "CC322", "OC311", "1.03", "1", "0.0", "erh ketone, fit psicose"}, {"CC322", "CC2O3", "CC322", "OC311", "2.44", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC2O3", "CC322", "OC311", "1.24", "3", "180.0", "C1-C2-C3-O3"}, {"CC322", "CC2O3", "CC312", "OC311", "1.03", "1", "0.0", "erh ketone, fit psicose"}, {"CC322", "CC2O3", "CC312", "OC311", "2.44", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC2O3", "CC312", "OC311", "1.24", "3", "180.0", "C1-C2-C3-O3"}, {"OC2D3", "CC2O3", "CC312", "OC311", "2.09", "1", "0.0", "erh ketone, fit psicose"}, {"OC2D3", "CC2O3", "CC312", "OC311", "0.17", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC2D3", "CC2O3", "CC312", "OC311", "2.15", "3", "180.0", "O2-C2-C3-O3"}, {"OC2D3", "CC2O3", "CC322", "OC311", "2.80", "1", "0.0", "erh ketone, fit psicose"}, {"OC2D3", "CC2O3", "CC322", "OC311", "0.75", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC2D3", "CC2O3", "CC322", "OC311", "0.32", "3", "180.0", "O2-C2-C1-O1"}, {"CC331", "CC2O3", "CC331", "HCA3", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC2O3", "CC312", "CC312", "HCA1", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC322", "CC2O3", "CC312", "HCA1", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC312", "CC2O3", "CC322", "HCA2", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC322", "CC2O3", "CC322", "HCA2", "0.10", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"OC2D3", "CC2O3", "CC331", "HCA3", "0.00", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"OC2D3", "CC2O3", "CC322", "HCA2", "0.00", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"OC2D3", "CC2O3", "CC312", "HCA1", "0.00", "3", "0.0", "erh ketone RIMP2/cc-pVTZ//MP2/6-31G(d)"}, {"CC2O3", "CC312", "OC311", "HCP1", "0.35", "1", "0.0", "erh ketone, n=6 polyol"}, {"CC2O3", "CC312", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O3", "CC312", "OC311", "HCP1", "0.19", "3", "180.0", "C-C-O-H"}, {"CC2O3", "CC322", "OC311", "HCP1", "0.35", "1", "0.0", "erh ketone, n=6 polyol"}, {"CC2O3", "CC322", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O3", "CC322", "OC311", "HCP1", "0.19", "3", "180.0", "C-C-O-H"}, {"CC312", "CC312", "CC312", "CC2O4", "0.02", "1", "180.0", "erh aldehyde, n=6 polyol"}, {"CC312", "CC312", "CC312", "CC2O4", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC2O4", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC312", "CC312", "CC2O4", "OC2D4", "0.17", "1", "180.0", "erh aldehyde, fit allose"}, {"CC312", "CC312", "CC2O4", "OC2D4", "0.26", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC2O4", "OC2D4", "1.04", "3", "180.0", "C3-C2-C1-O1"}, {"CC2O4", "CC312", "CC312", "OC311", "1.15", "1", "0.0", "erh aldehyde, fit allose"}, {"CC2O4", "CC312", "CC312", "OC311", "3.00", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC2O4", "CC312", "CC312", "OC311", "2.39", "3", "180.0", "C1-C2-C3-O3"}, {"OC2D4", "CC2O4", "CC312", "OC311", "0.56", "1", "180.0", "erh aldehyde, fit allose"}, {"OC2D4", "CC2O4", "CC312", "OC311", "1.60", "2", "180.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC2D4", "CC2O4", "CC312", "OC311", "0.93", "3", "0.0", "O1-C1-C2-O2"}, {"HCP1", "OC311", "CC312", "CC2O4", "0.35", "1", "0.0", "erh aldehyde, n=6 polyol"}, {"HCP1", "OC311", "CC312", "CC2O4", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"HCP1", "OC311", "CC312", "CC2O4", "0.19", "3", "180.0", "C-C-O-H"}, {"HCR1", "CC2O4", "CC331", "HCA3", "0.00", "3", "180.0", "acetaldehyde, adm"}, {"OC2D4", "CC2O4", "CC331", "HCA3", "0.20", "3", "180.0", "acetaldehyde, adm"}, {"CC312", "CC312", "CC2O4", "HCR1", "0.00", "6", "180.0", "aldehdye par22 X CT1 CD X"}, {"CC2O4", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "aldehyde par22 X CT1 CT1 X"}, {"OC2D4", "CC2O4", "CC312", "HCA1", "0.00", "6", "180.0", "aldehdye par22 X CT1 CD X"}, {"OC311", "CC312", "CC2O4", "HCR1", "0.00", "6", "180.0", "aldehdye par22 X CT1 CD X"}, {"CC3161", "CC3161", "CC3161", "CC3162", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3261", "CC3062", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3161", "CC3163", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3161", "CC3263", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3261", "CC3161", "CC3161", "CC3163", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3161", "CC3161", "CC3163", "CC321", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3163", "CC331", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3163", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3261", "CC3062", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3163", "CC312", "CC312", "CC322", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3163", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3163", "CC312", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC312", "CC312", "CC322", "0.02", "1", "180.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC312", "CC322", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC322", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC322", "CC312", "CC312", "CC322", "0.02", "1", "180.0", "erh glycerol, n=6 polyol"}, {"CC322", "CC312", "CC312", "CC322", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "CC312", "CC322", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC312", "CC312", "CC312", "CC312", "0.02", "1", "180.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC312", "CC312", "0.06", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "CC312", "2.47", "3", "0.0", "C2-C3-C4-C5"}, {"CC3161", "CC3161", "CC3161", "CC3161", "2.31", "3", "180.0", "erh fit inositol RIMP2/cc-pVTZ//MP2/631gd C1-C2-C3-C4"}, {"CC311C", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321C", "CC311C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321C", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC321C", "CC311C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC321C", "CC321C", "CC311C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC311C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC311D", "CC321C", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC3162", "CC3163", "CC3161", "CC3161", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321", "CC311C", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X og preserve ring def energy"}, {"CC3161", "CC3161", "CC3162", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3261", "CC3062", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3161", "CC3163", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3161", "CC3263", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC3161", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3162", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3163", "CC312", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3163", "CC321", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3161", "CC3261", "CC3062", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3162", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3062", "CC3261", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC3163", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3163", "CC312", "CC312", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3263", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "CC3163", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC331", "CC3163", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC331", "CC3163", "CC3161", "OC301", "0.20", "3", "0.0", "CC331 CC3163 CC3161 OC311, pram"}, {"CC2O2", "CC3163", "CC3161", "OC311", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC2O2", "CC3163", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "CC3163", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3161", "CC3162", "OC302", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3162", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3163", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC312", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "CC321", "CC321", "OC301", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC322", "CC312", "CC312", "OC311", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC322", "CC312", "CC312", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "CC312", "OC311", "2.79", "3", "180.0", "C1-C2-C3-O3"}, {"CC312", "CC312", "CC322", "OC311", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC322", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC322", "OC311", "2.79", "3", "180.0", "C3-C2-C1-O1"}, {"CC312", "CC312", "CC312", "OC311", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC312", "CC312", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "CC312", "OC311", "2.79", "3", "180.0", "C4-C3-C2-O2"}, {"CC322", "CC312", "CC322", "OC311", "0.35", "1", "0.0", "erh glycerol, n=6 polyol"}, {"CC322", "CC312", "CC322", "OC311", "0.69", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "CC322", "OC311", "2.79", "3", "180.0", "C1-C2-C3-O3"}, {"CC3161", "CC3163", "CC2O2", "OC2D2", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"OC2D2", "CC2O2", "CC311", "CC331", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"OC2D2", "CC2O2", "CC301", "CC331", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"OC2D2", "CC2O2", "CC3062", "CC3261", "0.05", "6", "180.00", "par22 X CT1 CC X"}, {"CC321C", "CC321C", "CC321C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC321C", "CC311C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC311C", "CC321C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC321C", "CC321D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC311C", "CC321D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC321C", "CC321C", "CC311D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC311C", "CC321C", "CC321C", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"CC311C", "CC321C", "CC321D", "OC3C61", "0.31", "3", "180.0", "og/sng thp"}, {"OC301", "CC311C", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311C", "CC321C", "CC321D", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311D", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC302", "CC311D", "CC321C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC2D2", "CC2O2", "CC321", "CC331", "0.05", "6", "180.0", "par22 X CT2 CC X"}, {"CC321C", "CC311C", "CC321", "OC301", "1.10", "1", "180.0", "og compounds 11 and 12"}, {"CC321C", "CC311C", "CC321", "OC301", "0.07", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311C", "CC321", "OC301", "0.15", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3163", "CC321", "OC301", "0.50", "1", "180.0", "dpatel, modified"}, {"CC3161", "CC3163", "CC321", "OC301", "0.37", "2", "180.0", "LS fit"}, {"CC3161", "CC3163", "CC321", "OC301", "0.15", "3", "0.0", " "}, {"NC2D1", "CC3161", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"NC2D1", "CC3161", "CC3161", "CC3261", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC3163", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3161", "CC3162", "OC3C61", "CC3163", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3162", "OC3C61", "CC3263", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3163", "OC3C61", "CC3062", "0.20", "3", "0.0", "og/sng thp"}, {"CC3161", "CC3263", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC321", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC312", "CC3163", "OC3C61", "CC3062", "0.20", "3", "0.0", "og/sng thp"}, {"CC331", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC2O2", "CC3163", "OC3C61", "CC3162", "0.20", "3", "0.0", "og/sng thp"}, {"CC2O2", "CC3062", "OC3C61", "CC3163", "0.20", "3", "0.0", "og/sng thp"}, {"CC331", "OC301", "CC311", "CC331", "0.40", "1", "0.0", "par35"}, {"CC331", "OC301", "CC311", "CC331", "0.49", "3", "0.0", "CC33A CC32A OC30A CC33A"}, {"CC331", "OC301", "CC301", "CC331", "0.40", "1", "0.0", "par35"}, {"CC331", "OC301", "CC301", "CC331", "0.49", "3", "0.0", "CC33A CC32A OC30A CC33A"}, {"CC3162", "OC301", "CC321", "CC321", "0.40", "1", "0.0", "par35"}, {"CC3162", "OC301", "CC321", "CC321", "0.49", "3", "0.0", "CC33A CC32A OC30A CC32A"}, {"CC2O2", "CC301", "OC301", "CC331", "0.20", "3", "0.0", "og/sng thp CC321C CC321C OC3C61 CC321C"}, {"CC2O2", "CC311", "OC301", "CC331", "0.20", "3", "0.0", "og/sng thp CC321C CC321C OC3C61 CC321C"}, {"CC3261", "CC3062", "OC3C61", "CC3163", "0.20", "3", "0.0", "og/sng thp"}, {"CC311C", "CC321C", "OC3C61", "CC321D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321C", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321C", "OC3C61", "CC321D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321D", "OC3C61", "CC311C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321C", "OC3C61", "CC311D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC321D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC311C", "CC321D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC311C", "OC3C61", "CC321D", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC311D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC321C", "CC311D", "OC301", "CC331", "0.22", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321C", "CC311D", "OC301", "CC331", "0.28", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311D", "OC301", "CC331", "0.89", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC301", "CC331", "0.22", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC3161", "CC3162", "OC301", "CC331", "0.28", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC301", "CC331", "0.89", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC301", "CC321", "0.22", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC3161", "CC3162", "OC301", "CC321", "0.28", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC301", "CC321", "0.89", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "CC311D", "OC302", "CC311D", "0.73", "1", "0.0", "og THP-1-O-1-THP"}, {"CC321C", "CC311D", "OC302", "CC311D", "0.61", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311D", "OC302", "CC311D", "0.00", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC302", "CC3162", "0.73", "1", "0.0", "og THP-1-O-1-THP"}, {"CC3161", "CC3162", "OC302", "CC3162", "0.61", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC302", "CC3162", "0.00", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "CC311D", "OC301", "CC311C", "0.41", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC321C", "CC311D", "OC301", "CC311C", "0.66", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311D", "OC301", "CC311C", "1.60", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC301", "CC3161", "0.41", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3161", "CC3162", "OC301", "CC3161", "0.66", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC301", "CC3161", "1.60", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321D", "CC311C", "OC301", "CC311D", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC321D", "CC311C", "OC301", "CC311D", "0.25", "2", "180.0", "MCSA fit"}, {"CC321D", "CC311C", "OC301", "CC311D", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3162", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", "MCSA fit"}, {"CC3162", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "CC311C", "OC301", "CC311D", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC321C", "CC311C", "OC301", "CC311D", "0.25", "2", "180.0", "MCSA fit"}, {"CC321C", "CC311C", "OC301", "CC311D", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3161", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3163", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3163", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", "MCSA fit"}, {"CC3163", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321D", "OC3C61", "CC311C", "CC321", "0.284", "3", "0.0", "from CC321C OC3C61 CC311D HCA1"}, {"CC311C", "CC321", "OC301", "CC331", "0.64", "1", "180.0", "og compounds 11 and 12"}, {"CC311C", "CC321", "OC301", "CC331", "0.03", "2", "180.0", "MCSA fit"}, {"CC311C", "CC321", "OC301", "CC331", "0.61", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3163", "CC321", "OC301", "CC3162", "0.64", "1", "180.0", "og compounds 11 and 12"}, {"CC3163", "CC321", "OC301", "CC3162", "0.03", "2", "180.0", "MCSA fit"}, {"CC3163", "CC321", "OC301", "CC3162", "0.61", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3161", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC311", "CC3161", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC311", "CC3161", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC311", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC311", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC311", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC301", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC301", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC302", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC302", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC302", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3161", "CC3161", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC301", "CC3161", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC301", "CC3161", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3161", "CC3162", "OC311", "2.65", "1", "180.0", "og ethylene glycol combo"}, {"OC301", "CC3161", "CC3162", "OC311", "0.00", "2", "0.0", " "}, {"OC301", "CC3161", "CC3162", "OC311", "0.13", "3", "180.0", " "}, {"OC301", "CC3161", "CC3162", "OC301", "0.59", "1", "180.0", "par35 OC30A CC32A CC32A OC30A"}, {"OC301", "CC3161", "CC3162", "OC301", "1.16", "2", "0.0", "og/rmv RESMOR and FABYOW10"}, {"OC311", "CC312", "CC322", "OC311", "1.34", "1", "180.0", "erh n=6 polyol"}, {"OC311", "CC312", "CC322", "OC311", "1.19", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC311", "CC312", "CC322", "OC311", "2.58", "3", "0.0", "O2-C2-C1-O1"}, {"OC311", "CC312", "CC312", "OC311", "1.34", "1", "180.0", "erh n=6 polyol"}, {"OC311", "CC312", "CC312", "OC311", "1.19", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"OC311", "CC312", "CC312", "OC311", "2.58", "3", "0.0", "O2-C2-C3-O3"}, {"OC301", "CC3161", "CC3162", "OC3C61", "2.75", "1", "180.0", "from"}, {"OC301", "CC3161", "CC3162", "OC3C61", "0.26", "2", "180.0", "OC311 CC3161 CC3162 OC3C61"}, {"OC301", "CC3161", "CC3162", "OC3C61", "0.10", "3", "0.0", " "}, {"OC301", "CC3161", "CC3163", "OC3C61", "1.36", "1", "180.0", "from"}, {"OC301", "CC3161", "CC3163", "OC3C61", "0.16", "2", "0.0", "OC311 CC3161 CC3163 OC3C61"}, {"OC301", "CC3161", "CC3163", "OC3C61", "1.01", "3", "0.0", " "}, {"OC2D2", "CC2O2", "CC311", "OC301", "0.64", "2", "180.0", "og amop mp2/ccpvtz"}, {"OC301", "CC301", "CC2O2", "OC2D2", "0.64", "2", "180.0", "og amop mp2/ccpvtz"}, {"OC3C61", "CC3163", "CC2O2", "OC2D2", "0.64", "2", "180.0", "og amop mp2/ccpvtz"}, {"OC3C61", "CC3062", "CC2O2", "OC2D2", "0.64", "2", "180.0", "from OC301 CC301 CC2O2 OC2D2"}, {"OC311", "CC301", "CC2O2", "OC2D2", "1.11", "2", "180.0", "og amol mp2/ccpvtz"}, {"OC311", "CC3062", "CC2O2", "OC2D2", "1.11", "2", "180.0", "from OC311 CC301 CC2O2 OC2D2"}, {"OC311M", "CC321", "CC321", "OC311M", "0.33", "1", "0.0", "og ethylene glycol combo_star"}, {"OC311M", "CC321", "CC321", "OC311M", "2.17", "2", "0.0", "*** ONLY for RESI EGLY ***"}, {"OC311M", "CC321", "CC321", "OC311M", "0.45", "3", "0.0", "use combo for all else"}, {"OC301", "CC311C", "CC321C", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311C", "CC321D", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC321", "CC311C", "OC3C61", "1.93", "1", "180.0", "og compounds 11 and 12"}, {"OC301", "CC321", "CC311C", "OC3C61", "0.43", "2", "0.0", "MCSA fit"}, {"OC301", "CC321", "CC311C", "OC3C61", "0.12", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC321", "CC3163", "OC3C61", "1.4906", "1", "180.00", "modified by LS fitting"}, {"OC301", "CC321", "CC3163", "OC3C61", "0.3759", "2", "0.00", " "}, {"OC301", "CC321", "CC3163", "OC3C61", "0.5916", "3", "0.00", " "}, {"HCP1", "OC311", "CC3161", "HCA1", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC3162", "HCA1", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC321", "HCA2", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC322", "HCA2", "0.18", "3", "0.0", "og methanol"}, {"HCP1", "OC311", "CC312", "HCA1", "0.18", "3", "0.0", "og methanol"}, {"HCA3", "CC331", "OC311M", "HCP1", "0.18", "3", "0.0", "og methanol"}, {"HCA2", "CC321", "OC311M", "HCP1", "0.18", "3", "0.0", "og methanol"}, {"HCA2", "CC321", "OC311M", "HCP1M", "0.18", "3", "0.0", "og methanol for egly"}, {"HCA1", "CC311", "OC311M", "HCP1", "0.18", "3", "0.0", "og methanol"}, {"HCA1", "CC3161", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3161", "CC3162", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA2", "CC3261", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA2", "CC3261", "CC3062", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3162", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3163", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3163", "CC321", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3163", "CC312", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA2", "CC3263", "CC3161", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA3", "CC331", "CC301", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC3161", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3263", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3162", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC3261", "CC3062", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3162", "OC302", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC321", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA3", "CC331", "CC3163", "OC3C61", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA3", "CC331", "CC311", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA3", "CC331", "CC301", "OC301", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA2", "CC321", "CC321", "OC301", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA1", "CC311", "CC2O2", "OC2D2", "0.05", "6", "180.0", "par22 X CT1 CC X"}, {"HCA1", "CC3163", "CC2O2", "OC2D2", "0.05", "6", "180.0", "par22 X CT1 CC X"}, {"HCA3", "CC331", "CC2O1", "OC2D1", "0.00", "3", "180.0", "par22 O C CT3 HA"}, {"HCA2", "CC322", "CC312", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC312", "CC322", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"HCA1", "CC312", "CC312", "OC311", "0.14", "3", "0.0", "og ethanol"}, {"OC311M", "CC321", "CC331", "HCA3", "0.14", "3", "0.0", "og ethanol"}, {"OC311M", "CC311", "CC331", "HCA3", "0.14", "3", "0.0", "og ethanol"}, {"OC311M", "CC321", "CC321", "HCA2", "0.14", "3", "0.0", "og ethanol"}, {"OC3C61", "CC321C", "CC321C", "HCA2", "0.16", "3", "0.0", "thp H-Cring-Cring-O"}, {"OC3C61", "CC321D", "CC321C", "HCA2", "0.16", "3", "0.0", "thp H-Cring-Cring-O"}, {"OC3C61", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC311C", "CC321", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC321C", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC321D", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC302", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC321", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC321", "CC3163", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC3161", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC301", "CC311C", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC301", "CC3161", "CC3162", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC301", "CC3161", "CC3163", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC321", "CC2O2", "OC2D2", "0.05", "6", "180.0", "par22 X CT2 CC X"}, {"HCA1", "CC3161", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3163", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"NC2D1", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"NC2D1", "CC2O1", "CC331", "HCA3", "0.00", "3", "0.0", "par22 NH1 C CT3 HA"}, {"OC301", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC311", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC301", "CC3161", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC311", "CC3161", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC3162", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC3163", "CC3161", "NC2D1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC2D1", "CC2O1", "NC2D1", "CC311", "2.50", "2", "180.0", "par22 O C NH1 CT1"}, {"OC2D1", "CC2O1", "NC2D1", "CC3161", "2.50", "2", "180.0", "par22 O C NH1 CT1"}, {"OC2D1", "CC2O1", "NC2D1", "CC331", "2.50", "2", "180.0", "par22 O C NH1 CT3"}, {"CC311", "NC2D1", "CC2O1", "CC331", "1.60", "1", "0.0", "par22 CT1 NH1 C CT3"}, {"CC311", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", " "}, {"CC3161", "NC2D1", "CC2O1", "CC331", "1.60", "1", "0.0", "par22 CT1 NH1 C CT3"}, {"CC3161", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", " "}, {"CC331", "NC2D1", "CC2O1", "CC331", "1.60", "1", "0.0", "par22 CT3 NH1 C CT3"}, {"CC331", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", " "}, {"CC2O1", "NC2D1", "CC311", "CC331", "0.50", "1", "180.0", "og fit to IPAA"}, {"CC2O1", "NC2D1", "CC3161", "CC3162", "0.50", "1", "180.0", "og fit to IPAA"}, {"CC2O1", "NC2D1", "CC3161", "CC3161", "0.50", "1", "180.0", "og fit to IPAA"}, {"CC2O1", "NC2D1", "CC3161", "CC3163", "0.50", "1", "180.0", "og fit to IPAA"}, {"HCA1", "CC3161", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3162", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3263", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC3261", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3163", "CC321", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3163", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311C", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311C", "CC321", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA1", "CC3163", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"HCA2", "CC321", "CC321", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA2", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA2", "CC321D", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"HCA2", "CC321", "CC331", "HCA3", "0.16", "3", "0.0", "par27 X CTL2 CTL3 X"}, {"HCA1", "CC312", "CC322", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC2O4", "HCR1", "0.00", "6", "180.0", "par22 X CT3 CD X"}, {"HCA1", "CC3162", "OC3C61", "CC3163", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3162", "OC3C61", "CC3263", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A;erh transferred by analogy"}, {"HCA1", "CC3163", "OC3C61", "CC3162", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3163", "OC3C61", "CC3062", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA2", "CC3263", "OC3C61", "CC3162", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A;erh transferred by analogy"}, {"HCA1", "CC311", "OC301", "CC331", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC301", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC331", "OC301", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC331", "OC301", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321", "OC301", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321C", "OC3C61", "CC321C", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321D", "OC3C61", "CC321C", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311D", "OC3C61", "CC321C", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321C", "OC3C61", "CC321D", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311C", "OC3C61", "CC321D", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321C", "OC3C61", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321D", "OC3C61", "CC311C", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311C", "OC301", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3161", "OC301", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311D", "OC302", "CC311D", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3162", "OC302", "CC3162", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC311D", "OC301", "CC311C", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3162", "OC301", "CC3161", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC321", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC311D", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA3 CC33A OC30A CC32A"}, {"CC3162", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC331", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC33A"}, {"HCA1", "CC3161", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3162", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3163", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3261", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3263", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC312", "CC322", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC312", "CC3163", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3161", "CC3162", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3163", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3163", "CC312", "CC312", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA2", "CC3263", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3163", "CC321", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "CC331", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3163", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"HCA1", "CC3161", "CC3261", "CC3062", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321", "CC311C", "CC321C", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321", "CC3163", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC3261", "CC3062", "CC2O2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC3261", "CC3161", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA3", "CC331", "CC3163", "CC3161", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC2O2", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC2O2", "CC301", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC312", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3163", "CC312", "CC312", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC312", "CC312", "CC322", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC322", "CC312", "CC322", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC321C", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC321C", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321D", "CC321C", "CC311C", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311C", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321D", "CC311C", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC331", "CC311", "CC331", "HCA3", "0.20", "3", "0.0", "par27 X CTL1 CTL3 X"}, {"CC311C", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC311C", "CC321C", "CC321D", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321", "CC321", "CC321", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC331", "CC321", "CC321", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321C", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321C", "CC321C", "CC321D", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321D", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC311D", "CC321C", "CC321C", "HCA2", "0.19", "3", "0.0", "par27 X CTL2 CTL2 X"}, {"CC321", "CC321", "CC331", "HCA3", "0.16", "3", "0.0", "par27 X CTL2 CTL3 X"}, {"CC2O2", "CC321", "CC331", "HCA3", "0.16", "3", "0.0", "par27 X CTL2 CTL3 X"}, {"HCP1", "NC2D1", "CC3161", "CC3161", "0.00", "1", "0.0", "par22 H NH1 CT1 CT1"}, {"HCP1", "NC2D1", "CC3161", "CC3162", "0.00", "1", "0.0", "par22 H NH1 CT1 CT1"}, {"HCP1", "NC2D1", "CC3161", "CC3163", "0.00", "1", "0.0", "par22 H NH1 CT1 CT1"}, {"HCP1", "NC2D1", "CC311", "CC331", "0.00", "1", "0.00", "par22 H NH1 CT1 CT3"}, {"HCP1", "NC2D1", "CC2O1", "CC331", "2.50", "2", "180.0", "par22 H NH1 C CT3"}, {"HCP1", "NC2D1", "CC3161", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 H"}, {"HCP1", "NC2D1", "CC311", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 H"}, {"HCP1", "NC2D1", "CC331", "HCA3", "0.00", "3", "0.0", "par22 HA CT3 NH1 H"}, {"HCP1", "NC2D1", "CC2O1", "OC2D1", "2.50", "2", "180.0", "par22 O C NH1 H"}, {"CC2O1", "NC2D1", "CC3161", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC311", "HCA1", "0.00", "1", "0.0", "par22 HB CT1 NH1 C"}, {"CC2O1", "NC2D1", "CC331", "HCA3", "0.00", "3", "0.0", "par22 HA CT3 NH1 C"}, {"CC312", "CC322", "OC311", "HCP1", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC322", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC322", "OC311", "HCP1", "0.19", "3", "180.0", "C2-C1-O1-HO1"}, {"CC322", "CC312", "OC311", "HCP1", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC322", "CC312", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC322", "CC312", "OC311", "HCP1", "0.19", "3", "180.0", "C1-C2-O2-HO2"}, {"CC312", "CC312", "OC311", "HCP1", "0.35", "1", "0.0", "erh n=6 polyol"}, {"CC312", "CC312", "OC311", "HCP1", "0.37", "2", "0.0", "RIMP2/cc-pVTZ//MP2/631gd"}, {"CC312", "CC312", "OC311", "HCP1", "0.19", "3", "180.0", "C2-C3-O3-HO3"}, {"CC2O2", "CC301", "OC311", "HCP1", "0.82", "3", "180.0", "og amol mp2/ccpvtz"}, {"CC2O2", "CC3062", "OC311", "HCP1", "0.82", "3", "180.0", "from CC2O2 CC301 OC311 HCP1"}, {"HCP1", "OC311", "CC301", "CC331", "0.24", "3", "0.0", "og ethanol"}, {"HCP1", "OC311", "CC301", "CC331", "0.14", "2", "0.0", " "}, {"HCP1", "OC311", "CC301", "CC331", "1.13", "1", "0.0", " "}, {"HCP1", "OC311M", "CC321", "CC331", "0.24", "3", "0.0", "og ethanol"}, {"HCP1", "OC311M", "CC321", "CC331", "0.14", "2", "0.0", " "}, {"HCP1", "OC311M", "CC321", "CC331", "1.13", "1", "0.0", " "}, {"HCP1", "OC311M", "CC311", "CC331", "0.24", "3", "0.0", "og ethanol"}, {"HCP1", "OC311M", "CC311", "CC331", "0.14", "2", "0.0", " "}, {"HCP1", "OC311M", "CC311", "CC331", "1.13", "1", "0.0", " "}, {"HCP1M", "OC311M", "CC321", "CC321", "0.40", "1", "180.0", "og ethylene glycol combo_star"}, {"HCP1M", "OC311M", "CC321", "CC321", "0.01", "2", "0.0", "*** NOT suitable for"}, {"HCP1M", "OC311M", "CC321", "CC321", "0.26", "3", "0.0", "*** HO-C-C-C- type alcohols"}, {"OC311", "CC301", "OC301", "CC331", "0.41", "1", "180.0", "from"}, {"OC311", "CC301", "OC301", "CC331", "0.89", "2", "0.0", "CC3163 OC3C61 CC3162 OC311"}, {"OC311", "CC301", "OC301", "CC331", "0.05", "3", "0.0", " "}, {"CC321C", "OC3C61", "CC311D", "OC301", "0.62", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321C", "OC3C61", "CC311D", "OC301", "1.54", "2", "0.0", "MCSA fit"}, {"CC321C", "OC3C61", "CC311D", "OC301", "0.48", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321C", "OC3C61", "CC311D", "OC302", "0.62", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321C", "OC3C61", "CC311D", "OC302", "1.54", "2", "0.0", "MCSA fit"}, {"CC321C", "OC3C61", "CC311D", "OC302", "0.48", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3163", "OC3C61", "CC3162", "OC301", "0.41", "1", "180.0", "og from"}, {"CC3163", "OC3C61", "CC3162", "OC301", "0.89", "2", "0.0", "CC3163 OC3C61 CC3162 OC311"}, {"CC3163", "OC3C61", "CC3162", "OC301", "0.05", "3", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC302", "0.41", "1", "180.0", "og from"}, {"CC3163", "OC3C61", "CC3162", "OC302", "0.89", "2", "0.0", "CC3163 OC3C61 CC3162 OC311"}, {"CC3163", "OC3C61", "CC3162", "OC302", "0.05", "3", "0.0", " "}, {"CC331", "OC301", "CC311D", "OC3C61", "0.14", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC331", "OC301", "CC311D", "OC3C61", "0.97", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC311D", "OC3C61", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC331", "OC301", "CC3162", "OC3C61", "0.14", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC331", "OC301", "CC3162", "OC3C61", "0.97", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC3162", "OC3C61", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC3162", "OC3C61", "0.14", "1", "0.0", "og OMeTHP compounds 2 and 3"}, {"CC321", "OC301", "CC3162", "OC3C61", "0.97", "2", "0.0", "MCSA fit"}, {"CC321", "OC301", "CC3162", "OC3C61", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC302", "CC311D", "OC3C61", "0.53", "1", "0.0", "og THP-1-O-1-THP"}, {"CC311D", "OC302", "CC311D", "OC3C61", "0.74", "2", "0.0", "MCSA fit"}, {"CC311D", "OC302", "CC311D", "OC3C61", "0.16", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC302", "CC3162", "OC3C61", "0.53", "1", "0.0", "og THP-1-O-1-THP"}, {"CC3162", "OC302", "CC3162", "OC3C61", "0.74", "2", "0.0", "MCSA fit"}, {"CC3162", "OC302", "CC3162", "OC3C61", "0.16", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311C", "OC301", "CC311D", "OC3C61", "0.05", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC311C", "OC301", "CC311D", "OC3C61", "0.91", "2", "0.0", "MCSA fit"}, {"CC311C", "OC301", "CC311D", "OC3C61", "1.27", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3162", "OC3C61", "0.05", "1", "180.0", "og THP-1-O-2-CYHX"}, {"CC3161", "OC301", "CC3162", "OC3C61", "0.91", "2", "0.0", "MCSA fit"}, {"CC3161", "OC301", "CC3162", "OC3C61", "1.27", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"HCP1", "OC311", "CC301", "OC301", "1.55", "1", "0.0", "HCP1 OC311 CC3162 OC3C61"}, {"HCP1", "OC311", "CC301", "OC301", "1.17", "2", "0.0", " "}, {"HCP1", "OC311", "CC301", "OC301", "1.07", "3", "0.0", " "}, {"CC3163", "CC321", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3163", "CC321", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3163", "CC321", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3161", "CC3162", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3161", "CC3162", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3161", "CC3162", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"HCP1", "OC311", "CC3162", "OC3C61", "1.55", "1", "0.0", " "}, {"HCP1", "OC311", "CC3162", "OC3C61", "1.17", "2", "0.0", " "}, {"HCP1", "OC311", "CC3162", "OC3C61", "1.07", "3", "0.0", " "}, {"CC3162", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3162", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3162", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3161", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3161", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3161", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3163", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3163", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3163", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"OC311", "CC3161", "CC3162", "OC3C61", "2.75", "1", "180.0", " "}, {"OC311", "CC3161", "CC3162", "OC3C61", "0.26", "2", "180.0", " "}, {"OC311", "CC3161", "CC3162", "OC3C61", "0.10", "3", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC311", "0.41", "1", "180.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC311", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC311", "0.05", "3", "0.0", " "}, {"OC311", "CC3161", "CC3163", "OC3C61", "1.36", "1", "180.0", " "}, {"OC311", "CC3161", "CC3163", "OC3C61", "0.16", "2", "0.0", " "}, {"OC311", "CC3161", "CC3163", "OC3C61", "1.01", "3", "0.0", " "}, {"OC311", "CC321", "CC3163", "OC3C61", "0.75", "1", "180.0", " "}, {"OC311", "CC321", "CC3163", "OC3C61", "0.17", "2", "0.0", " "}, {"OC311", "CC321", "CC3163", "OC3C61", "0.25", "3", "180.0", "og empirical lower barrier by 1.5 kcal"}, {"CC3163", "OC3C61", "CC3062", "OC311", "0.41", "1", "180.0", "CC3163 OC3C61 CC3162 OC311"}, {"CC3163", "OC3C61", "CC3062", "OC311", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3062", "OC311", "0.05", "3", "0.0", " "}, {"HCP1", "OC311", "CC3062", "OC3C61", "1.55", "1", "0.0", "from HCP1 OC311 CC3162 OC3C61"}, {"HCP1", "OC311", "CC3062", "OC3C61", "1.17", "2", "0.0", " "}, {"HCP1", "OC311", "CC3062", "OC3C61", "1.07", "3", "0.0", " "}, {"CC3261", "CC3062", "OC311", "HCP1", "0.29", "1", "0.0", "from CC3161 CC3162 OC311 HCP1"}, {"CC3261", "CC3062", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3261", "CC3062", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3163", "CC312", "OC311", "HCP1", "0.29", "1", "0.0", "from CC3163 CC321 OC311 HCP1"}, {"CC3163", "CC312", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3163", "CC312", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"OC311", "CC312", "CC3163", "OC3C61", "0.75", "1", "180.0", "from OC311 CC321 CC3163 OC3C61"}, {"OC311", "CC312", "CC3163", "OC3C61", "0.17", "2", "0.0", " "}, {"OC311", "CC312", "CC3163", "OC3C61", "0.25", "3", "180.0", " "}, {"CC3261", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", "from CC3161 CC3161 OC311 HCP1"}, {"CC3261", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3261", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3263", "CC3161", "OC311", "HCP1", "0.29", "1", "0.0", " "}, {"CC3263", "CC3161", "OC311", "HCP1", "0.62", "2", "0.0", " "}, {"CC3263", "CC3161", "OC311", "HCP1", "0.05", "3", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC311", "0.41", "1", "180.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC311", "0.89", "2", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC311", "0.05", "3", "0.0", " "}, {"OC311", "CC3161", "CC3263", "OC3C61", "1.36", "1", "180.0", " "}, {"OC311", "CC3161", "CC3263", "OC3C61", "0.16", "2", "0.0", " "}, {"OC311", "CC3161", "CC3263", "OC3C61", "1.01", "3", "0.0", " "}, {"CC3161", "CC3161", "OC301", "CC3062", "0.13", "1", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"CC3161", "CC3161", "OC301", "CC3062", "0.25", "2", "180.0", " "}, {"CC3161", "CC3161", "OC301", "CC3062", "0.06", "3", "180.0", " "}, {"CC3161", "OC301", "CC3062", "OC3C61", "0.05", "1", "180.0", "CC3161 OC301 CC3162 OC3C61"}, {"CC3161", "OC301", "CC3062", "OC3C61", "0.91", "2", "0.0", " "}, {"CC3161", "OC301", "CC3062", "OC3C61", "1.27", "3", "180.0", " "}, {"CC3261", "CC3062", "OC301", "CC3161", "0.41", "1", "180.0", "CC3161 CC3162 OC301 CC3161"}, {"CC3261", "CC3062", "OC301", "CC3161", "0.66", "2", "180.0", " "}, {"CC3261", "CC3062", "OC301", "CC3161", "1.60", "3", "0.0", " "}, {"CC3161", "OC301", "CC3062", "CC2O2", "0.284", "3", "0.0", "CC3161 OC301 CC3162 HCA1"}, {"CC3062", "OC301", "CC3161", "HCA1", "0.284", "3", "0.0", "CC3162 OC301 CC3161 HCA1"}, {"OC301", "CC3062", "CC2O2", "OC2D2", "0.64", "2", "180.0", "OC301 CC301 CC2O2 OC2D2"}, {"CC3163", "OC3C61", "CC3062", "OC301", "0.41", "1", "180.0", "CC3163 OC3C61 CC3162 OC301"}, {"CC3163", "OC3C61", "CC3062", "OC301", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3062", "OC301", "0.05", "3", "0.0", " "}, {"HCA2", "CC3261", "CC3062", "OC301", "0.20", "3", "0.0", "HCA1 CC3161 CC3162 OC301"}, {"CC3161", "CC3261", "CC3062", "OC301", "0.20", "3", "0.0", "CC3161 CC3161 CC3162 OC301"}, {"OC301", "CC3161", "CC3161", "OC301", "0.59", "1", "180.0", "OC301 CC3161 CC3162 OC301"}, {"OC301", "CC3161", "CC3161", "OC301", "1.16", "2", "0.0", " "}, {"CC3263", "CC3161", "OC301", "CC3162", "0.13", "1", "180.0", "from CC3163 CC3161 OC301 CC3162"}, {"CC3263", "CC3161", "OC301", "CC3162", "0.25", "2", "180.0", " "}, {"CC3263", "CC3161", "OC301", "CC3162", "0.06", "3", "180.0", " "}, {"OC301", "CC3161", "CC3263", "HCA2", "0.20", "3", "0.0", "from OC301 CC3161 CC3163 HCA1"}, {"OC301", "CC3161", "CC3263", "OC3C61", "1.36", "1", "180.0", "from OC301 CC3161 CC3163 OC3C61"}, {"OC301", "CC3161", "CC3263", "OC3C61", "0.16", "2", "0.0", " "}, {"OC301", "CC3161", "CC3263", "OC3C61", "1.01", "3", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC301", "0.41", "1", "180.0", "from CC3163 OC3C61 CC3162 OC301"}, {"CC3263", "OC3C61", "CC3162", "OC301", "0.89", "2", "0.0", " "}, {"CC3263", "OC3C61", "CC3162", "OC301", "0.05", "3", "0.0", " "}, {"HCA2C2", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "4/98, yin and mackerell!from X-CCT2-CCT2-X thf, viv"}, {"CC322C", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "4/98, yin and mackerell!from X-CCT2-CCT2-X thf, viv"}, {"OC3C5M", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "alkane, 4/98, yin and mackerell!from X-CCT2-CCT2-X thf viv"}, {"CC322C", "CC322C", "CC322C", "CC322C", "0.41", "3", "180.0", "viv 10/4/05 !from CCP2-CCP2-CCP2-CCP2 THF, 05/30/06, viv"}, {"HCA2C2", "CC322C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv"}, {"OC3C5M", "CC322C", "CC322C", "CC322C", "0.00", "3", "0.0", "THF, 05/30/06, viv"}, {"CC322C", "CC322C", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF, 05/30/06, viv"}, {"CC331", "CC312C", "CC312C", "CC331", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC331", "CC312C", "CC322C", "CC322C", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC331", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"HCA1C2", "CC312C", "CC331", "HCA3", "0.20", "3", "0.0", "par22 X CT1 CT3 X"}, {"CC322C", "CC312C", "CC331", "HCA3", "0.20", "3", "0.0", "par22 X CT1 CT3 X"}, {"OC3C5M", "CC312C", "CC331", "HCA3", "0.20", "3", "0.0", "par22 X CT1 CT3 X"}, {"HCA1C2", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC322C", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC322C", "CC322C", "CC312C", "HCA1C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C5M", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"CC312C", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "alkane, 4/98, yin and mackerell!from X-CCT2-CCT2-X thf, viv"}, {"CC312C", "CC322C", "CC322C", "CC322C", "0.41", "3", "180.0", "cpen viv 10/4/05 !from CCP2-CCP2-CCP2-CCP2 THF, 05/30/06, viv;"}, {"CC322C", "CC312C", "CC322C", "CC322C", "0.41", "3", "180.0", "cpen viv 10/4/05 !from CCP2-CCP2-CCP2-CCP2 THF, 05/30/06, viv;"}, {"HCA2C2", "CC322C", "OC3C5M", "CC312C", "0.30", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"HCA1C2", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"OC3C5M", "CC312C", "CC322C", "CC322C", "0.00", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"CC322C", "CC312C", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"CC322C", "CC322C", "OC3C5M", "CC312C", "0.50", "3", "0.0", "THF, 05/30/06, viv; erh 7/08"}, {"CC331", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv ! from TF2M viv"}, {"CC312C", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1C2", "CC312C", "OC301", "CC331", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"OC301", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC322C", "CC322C", "CC312C", "OC301", "0.20", "3", "0.0", "par27 X CTL2 CTL1 X"}, {"OC301", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF, 05/30/06, viv"}, {"CC322C", "CC312C", "OC301", "CC331", "0.21", "1", "180.0", "erh OMeTHF patch for model THF"}, {"CC322C", "CC312C", "OC301", "CC331", "0.34", "2", "180.0", "MCSA fit"}, {"CC322C", "CC312C", "OC301", "CC331", "0.74", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC331", "OC301", "CC312C", "OC3C5M", "0.08", "1", "0.0", "erh OMeTHF patch for model THF"}, {"CC331", "OC301", "CC312C", "OC3C5M", "0.76", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC312C", "OC3C5M", "1.18", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3152", "OC311", "HCP1", "1.17", "1", "0.0", "erh aldopentose monosac"}, {"OC3C51", "CC3152", "OC311", "HCP1", "0.85", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3152", "OC311", "HCP1", "0.37", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3051", "OC311", "HCP1", "0.90", "1", "0.0", "erh ketopentose monosac"}, {"OC3C51", "CC3051", "OC311", "HCP1", "1.14", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3051", "OC311", "HCP1", "0.11", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3152", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3051", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3152", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"OC3C51", "CC3051", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"OC3C51", "CC3153", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"OC3C51", "CC3153", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3152", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC3C51", "CC3051", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"OC311", "CC3152", "CC3251", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311"}, {"OC311", "CC3051", "CC3251", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311"}, {"OC311", "CC3051", "CC321", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311; erh 3/08"}, {"OC311", "CC3151", "CC3251", "HCA2", "0.14", "3", "0.0", "ethanol, par_carb HCA2 CC3263 CC3161 OC311"}, {"OC311", "CC3151", "CC3153", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3163 CC3161 OC311"}, {"OC311", "CC3151", "CC3152", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3162 CC3161 OC311"}, {"OC311", "CC3151", "CC3151", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3161 CC3161 OC311"}, {"OC311", "CC3152", "CC3151", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3161 CC3162 OC311"}, {"OC311", "CC3051", "CC3151", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3161 CC3162 OC311"}, {"OC311", "CC321", "CC3153", "HCA1", "0.14", "3", "0.0", "ethanol, par_carb HCA1 CC3163 CC321 OC311"}, {"OC3C51", "CC3153", "CC3151", "OC311", "0.14", "1", "0.0", "erh aldopentose monosac"}, {"OC3C51", "CC3153", "CC3151", "OC311", "0.70", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3153", "CC3151", "OC311", "0.18", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3152", "CC3151", "OC311", "1.26", "1", "180.0", "erh aldopentose monosac"}, {"OC3C51", "CC3152", "CC3151", "OC311", "1.27", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3152", "CC3151", "OC311", "0.53", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3051", "CC3151", "OC311", "0.32", "1", "180.0", "erh ketopentose monosac"}, {"OC3C51", "CC3051", "CC3151", "OC311", "0.65", "2", "180.0", "MCSA fit"}, {"OC3C51", "CC3051", "CC3151", "OC311", "2.62", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3153", "CC321", "OC311", "1.50", "1", "180.0", "erh aldopentose monosac"}, {"OC3C51", "CC3153", "CC321", "OC311", "0.58", "2", "0.0", "MCSA fit"}, {"OC3C51", "CC3153", "CC321", "OC311", "0.54", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3051", "CC321", "OC311", "0.52", "1", "0.0", "erh ketopentose monosac"}, {"OC3C51", "CC3051", "CC321", "OC311", "1.16", "2", "180.0", "MCSA fit"}, {"OC3C51", "CC3051", "CC321", "OC311", "0.33", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3152", "CC3151", "OC311", "2.87", "1", "180.0", "erh aldopentose monosac"}, {"OC311", "CC3152", "CC3151", "OC311", "0.03", "2", "0.0", "MCSA fit"}, {"OC311", "CC3152", "CC3151", "OC311", "0.23", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3051", "CC3151", "OC311", "0.12", "1", "180.0", "erh ketopentose monosac"}, {"OC311", "CC3051", "CC3151", "OC311", "1.87", "2", "180.0", "MCSA fit"}, {"OC311", "CC3051", "CC3151", "OC311", "1.64", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3151", "CC3151", "OC311", "2.87", "1", "180.0", "erh aldopentose monosac"}, {"OC311", "CC3151", "CC3151", "OC311", "0.03", "2", "0.0", "MCSA fit"}, {"OC311", "CC3151", "CC3151", "OC311", "0.23", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3051", "CC321", "OC311", "0.07", "1", "0.0", "erh ketopentose monosac"}, {"OC311", "CC3051", "CC321", "OC311", "1.99", "2", "180.0", "MCSA fit"}, {"OC311", "CC3051", "CC321", "OC311", "1.72", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3152", "OC3C51", "CC3153", "0.76", "1", "180.0", "erh aldopentose monosac"}, {"OC311", "CC3152", "OC3C51", "CC3153", "1.25", "2", "0.0", "MCSA fit"}, {"OC311", "CC3152", "OC3C51", "CC3153", "0.48", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC311", "CC3051", "OC3C51", "CC3153", "0.19", "1", "180.0", "erh ketopentose monosac"}, {"OC311", "CC3051", "OC3C51", "CC3153", "2.85", "2", "180.0", "MCSA fit"}, {"OC311", "CC3051", "OC3C51", "CC3153", "0.86", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3251", "CC3151", "CC3153", "1.83", "3", "0.0", "erh deoxy aldopentose MCSA fit"}, {"CC3051", "CC3251", "CC3151", "CC3153", "1.83", "3", "0.0", "erh xfer from deoxyaldopentose"}, {"CC3152", "CC3151", "CC3151", "CC3153", "0.64", "3", "180.0", "erh aldopentose MCSA fit"}, {"CC3051", "CC3151", "CC3151", "CC3153", "2.37", "3", "0.0", "erh ketopentose MCSA fit"}, {"CC3251", "CC3151", "CC3153", "CC321", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3151", "CC3153", "CC321", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3151", "CC3051", "CC321", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3152", "CC3251", "CC3151", "OC311", "0.39", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3152", "CC3251", "CC3151", "OC311", "1.20", "2", "0.0", "MCSA fit"}, {"CC3152", "CC3251", "CC3151", "OC311", "1.42", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC3251", "CC3151", "OC311", "0.39", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3051", "CC3251", "CC3151", "OC311", "1.20", "2", "0.0", "transferred"}, {"CC3051", "CC3251", "CC3151", "OC311", "1.42", "3", "180.0", " "}, {"CC3153", "CC3151", "CC3151", "OC311", "0.01", "1", "180.0", "erh aldopentose monosac"}, {"CC3153", "CC3151", "CC3151", "OC311", "0.72", "2", "0.0", "MCSA fit"}, {"CC3153", "CC3151", "CC3151", "OC311", "0.73", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3151", "CC3151", "OC311", "0.81", "1", "180.0", "erh aldopentose monosac"}, {"CC3152", "CC3151", "CC3151", "OC311", "1.07", "2", "0.0", "MCSA fit"}, {"CC3152", "CC3151", "CC3151", "OC311", "0.11", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC3151", "CC3151", "OC311", "2.07", "1", "0.0", "erh ketopentose monosac"}, {"CC3051", "CC3151", "CC3151", "OC311", "2.13", "2", "0.0", "MCSA fit"}, {"CC3051", "CC3151", "CC3151", "OC311", "2.71", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3251", "CC3152", "OC311", "0.56", "1", "180.0", "erh deoxy aldopentose monosac"}, {"CC3151", "CC3251", "CC3152", "OC311", "0.30", "2", "180.0", "MCSA fit"}, {"CC3151", "CC3251", "CC3152", "OC311", "0.35", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3251", "CC3051", "OC311", "0.56", "1", "180.0", "erh deoxy aldopentose monosac"}, {"CC3151", "CC3251", "CC3051", "OC311", "0.30", "2", "180.0", "transferred"}, {"CC3151", "CC3251", "CC3051", "OC311", "0.35", "3", "180.0", " "}, {"CC3151", "CC3151", "CC3152", "OC311", "0.11", "1", "180.0", "erh aldopentose monosac"}, {"CC3151", "CC3151", "CC3152", "OC311", "0.66", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3152", "OC311", "0.02", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "CC3051", "OC311", "2.23", "1", "0.0", "erh ketopentose monosac"}, {"CC3151", "CC3151", "CC3051", "OC311", "3.00", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3051", "OC311", "0.88", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3153", "CC321", "OC311", "0.01", "1", "0.0", "erh aldopentose monosac"}, {"CC3151", "CC3153", "CC321", "OC311", "0.14", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3153", "CC321", "OC311", "0.70", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3051", "CC321", "OC311", "1.59", "1", "0.0", "erh ketopentose monosac"}, {"CC3151", "CC3051", "CC321", "OC311", "0.95", "2", "180.0", "MCSA fit"}, {"CC3151", "CC3051", "CC321", "OC311", "1.95", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "CC3153", "CC3151", "OC311", "0.76", "1", "180.0", "erh aldopentose monosac"}, {"CC321", "CC3153", "CC3151", "OC311", "0.40", "2", "180.0", "MCSA fit"}, {"CC321", "CC3153", "CC3151", "OC311", "0.40", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "CC3051", "CC3151", "OC311", "0.94", "1", "0.0", "erh ketopentose monosac"}, {"CC321", "CC3051", "CC3151", "OC311", "1.59", "2", "180.0", "MCSA fit"}, {"CC321", "CC3051", "CC3151", "OC311", "0.84", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "CC3153", "OC3C51", "1.24", "3", "0.0", "erh aldopentose monosac MCSA"}, {"CC3151", "CC3151", "CC3152", "OC3C51", "1.24", "3", "0.0", "erh aldopentose monosac MCSA"}, {"CC3251", "CC3151", "CC3153", "OC3C51", "0.94", "3", "0.0", "erh deoxy aldopentose MCSA"}, {"CC3151", "CC3251", "CC3152", "OC3C51", "0.94", "3", "0.0", "erh deoxy aldopentose MCSA"}, {"CC3151", "CC3251", "CC3051", "OC3C51", "0.94", "3", "0.0", "erh deoxy aldopentose transfer"}, {"CC3151", "CC3151", "CC3051", "OC3C51", "0.62", "3", "0.0", "erh ketopentose monosac MCSA"}, {"CC3251", "CC3152", "OC311", "HCP1", "0.59", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3251", "CC3152", "OC311", "HCP1", "0.38", "2", "0.0", "MCSA fit"}, {"CC3251", "CC3152", "OC311", "HCP1", "0.13", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3251", "CC3051", "OC311", "HCP1", "0.59", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3251", "CC3051", "OC311", "HCP1", "0.38", "2", "0.0", "transferred"}, {"CC3251", "CC3051", "OC311", "HCP1", "0.13", "3", "0.0", " "}, {"CC321", "CC3051", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC321", "CC3051", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC321", "CC3051", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3152", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3151", "CC3152", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3152", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3051", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC3151", "CC3051", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3051", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3151", "CC3151", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3151", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3152", "CC3151", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3152", "CC3151", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC3151", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC3051", "CC3151", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC3051", "CC3151", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3251", "CC3151", "OC311", "HCP1", "0.59", "1", "0.0", "erh deoxy aldopentose monosac"}, {"CC3251", "CC3151", "OC311", "HCP1", "0.38", "2", "0.0", "MCSA fit"}, {"CC3251", "CC3151", "OC311", "HCP1", "0.13", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC3151", "OC311", "HCP1", "0.29", "1", "0.0", "erh aldopentose monosac"}, {"CC3153", "CC3151", "OC311", "HCP1", "0.55", "2", "0.0", "MCSA fit"}, {"CC3153", "CC3151", "OC311", "HCP1", "0.08", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC311", "HCP1", "0.12", "1", "0.0", "erh aldopentose monosac"}, {"CC3153", "CC321", "OC311", "HCP1", "0.42", "2", "0.0", "MCSA fit"}, {"CC3153", "CC321", "OC311", "HCP1", "0.29", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC321", "OC311", "HCP1", "0.40", "1", "180.0", "erh ketopentose monosac"}, {"CC3051", "CC321", "OC311", "HCP1", "0.48", "2", "0.0", "MCSA fit"}, {"CC3051", "CC321", "OC311", "HCP1", "0.19", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "CC3251", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3051", "CC3251", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3151", "CC3251", "CC3152", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3151", "CC3151", "CC3152", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3151", "CC3153", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3151", "CC3153", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3151", "CC3152", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X erh 3/08"}, {"CC3151", "CC3051", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X erh 3/08"}, {"CC3153", "CC3151", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"CC3153", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3152", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3051", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC321", "CC3153", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC321", "CC3152", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X erh3/08"}, {"CC321", "CC3051", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X erh3/08"}, {"CC3251", "CC3151", "CC3153", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"CC3152", "OC3C51", "CC3153", "CC3151", "1.00", "3", "0.0", "erh aldopentose MCSA"}, {"CC3153", "OC3C51", "CC3152", "CC3151", "1.00", "3", "0.0", "erh aldopentose MCSA"}, {"CC3153", "OC3C51", "CC3152", "CC3251", "0.45", "3", "0.0", "erh deoxy aldopentose MCSA"}, {"CC3153", "OC3C51", "CC3051", "CC3151", "0.61", "3", "0.0", "erh ketopentose MCSA"}, {"CC3153", "OC3C51", "CC3051", "CC3251", "0.61", "3", "0.0", "erh from ketopentose"}, {"CC3051", "OC3C51", "CC3153", "CC3151", "0.43", "3", "0.0", "erh ketopentose MCSA"}, {"CC3152", "OC3C51", "CC3153", "CC321", "0.30", "3", "0.0", "TF2M par_carb CC331C CC322C OC3C5M CC322C"}, {"CC3051", "OC3C51", "CC3153", "CC321", "2.58", "1", "0.0", "erh ketopentose monosac"}, {"CC3051", "OC3C51", "CC3153", "CC321", "0.24", "2", "180.0", "MCSA fit"}, {"CC3051", "OC3C51", "CC3153", "CC321", "0.36", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "OC3C51", "CC3051", "CC321", "0.24", "1", "0.0", "erh ketopentose monosac"}, {"CC3153", "OC3C51", "CC3051", "CC321", "3.00", "2", "180.0", "MCSA fit"}, {"CC3153", "OC3C51", "CC3051", "CC321", "1.38", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "OC3C51", "CC3153", "HCA1", "0.30", "3", "0.0", "THF par_carb HCA2C2 CC322C OC3C5M CC322C"}, {"CC3051", "OC3C51", "CC3153", "HCA1", "0.30", "3", "0.0", "THF par_carb HCA2C2 CC322C OC3C5M CC322C"}, {"CC3153", "OC3C51", "CC3152", "HCA1", "0.30", "3", "0.0", "THF par_carb HCA2C2 CC322C OC3C5M CC322C"}, {"HCA1", "CC3152", "CC3251", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"HCA2", "CC3251", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT2 CT1 X"}, {"HCA1", "CC3151", "CC3153", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"HCA1", "CC3151", "CC3152", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"HCA1", "CC3151", "CC3151", "HCA1", "0.20", "3", "0.0", "par22 X CT1 CT1 X"}, {"HCA1", "CC3153", "CC321", "HCA2", "0.20", "3", "0.0", "par22 X CT1 CT2 X"}, {"HCP1", "OC311", "CC3152", "HCA1", "0.18", "3", "0.0", "methanol par_carb HCP1 OC311 CC3162 HCA1"}, {"HCP1", "OC311", "CC3151", "HCA1", "0.18", "3", "0.0", "methanol par_carb HCP1 OC311 CC3161 HCA1"}, {"OC301", "CC3152", "CC3151", "OC311", "2.87", "1", "180.0", "erh aldopentose monosac"}, {"OC301", "CC3152", "CC3151", "OC311", "0.03", "2", "0.0", "MCSA fit"}, {"OC301", "CC3152", "CC3151", "OC311", "0.23", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3152", "OC301", "CC331", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"OC301", "CC3152", "CC3151", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC3151", "CC3151", "CC3152", "OC301", "0.11", "1", "180.0", "erh aldopentose monosac"}, {"CC3151", "CC3151", "CC3152", "OC301", "0.66", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3152", "OC301", "0.02", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3151", "CC3051", "OC301", "2.23", "1", "0.0", "erh ketopentose monosac"}, {"CC3151", "CC3151", "CC3051", "OC301", "3.00", "2", "0.0", "MCSA fit"}, {"CC3151", "CC3151", "CC3051", "OC301", "0.88", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC3152", "OC3C51", "CC3153", "0.76", "1", "180.0", "erh aldopentose monosac"}, {"OC301", "CC3152", "OC3C51", "CC3153", "1.25", "2", "0.0", "MCSA fit"}, {"OC301", "CC3152", "OC3C51", "CC3153", "0.48", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "OC3C51", "CC3051", "OC301", "0.19", "1", "180.0", "erh ketopentose monosac"}, {"CC3153", "OC3C51", "CC3051", "OC301", "2.85", "2", "180.0", "MCSA fit"}, {"CC3153", "OC3C51", "CC3051", "OC301", "0.86", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3151", "CC3152", "OC301", "CC331", "0.21", "1", "180.0", "erh OMeTHF patch for model THF"}, {"CC3151", "CC3152", "OC301", "CC331", "0.34", "2", "180.0", "MCSA fit"}, {"CC3151", "CC3152", "OC301", "CC331", "0.74", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC331", "OC301", "CC3152", "OC3C51", "0.08", "1", "0.0", "erh OMeTHF patch for model THF"}, {"CC331", "OC301", "CC3152", "OC3C51", "0.76", "2", "0.0", "MCSA fit"}, {"CC331", "OC301", "CC3152", "OC3C51", "1.18", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321D", "CC311D", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC3161", "CC3162", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC3161", "CC3161", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC321C", "CC311D", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"CC311D", "CC311D", "OC30P", "PC", "0.02", "3", "180.0", " "}, {"HCA1", "CC311D", "OC30P", "PC", "0.284", "3", "0.0", "dmp,eps, H-C3'-O3'-P || from the par_all27_na.prm"}, {"HCA1", "CC3161", "OC30P", "PC", "0.284", "3", "0.0", "dmp,eps, H-C3'-O3'-P || from the par_all27_na.prm"}, {"HCA1", "CC3162", "OC30P", "PC", "0.284", "3", "0.0", "dmp,eps, H-C3'-O3'-P || from the par_all27_na.prm"}, {"OC3C61", "CC311D", "OC30P", "PC", "0.38", "2", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "PC", "0.41", "3", "180.0", " "}, {"OC3C61", "CC3162", "OC30P", "PC", "0.38", "2", "0.0", " "}, {"OC3C61", "CC3162", "OC30P", "PC", "0.41", "3", "180.0", " "}, {"HCA1", "CC311D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"OC3C61", "CC311D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC3C61", "CC321D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321D", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2"}, {"CC311D", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC311D", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC321D", "HCA2", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"CC321C", "CC311D", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC311D", "CC311D", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"CC321D", "CC311D", "CC321C", "CC321C", "0.19", "3", "180.0", "og/sng cyclohexane"}, {"OC3C61", "CC311D", "CC311D", "CC321C", "0.31", "3", "180.0", "og/sng thp"}, {"OC3C61", "CC321D", "CC311D", "CC321C", "0.31", "3", "180.0", "og/sng thp"}, {"CC311D", "CC311D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"CC311D", "CC321D", "OC3C61", "CC321C", "0.20", "3", "0.0", "og/sng thp"}, {"HCA1", "CC3161", "CC3162", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3162", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3163", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC3161", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311D", "CC311D", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321C", "CC311D", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA2", "CC321D", "CC311D", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL2 X"}, {"HCA1", "CC311C", "CC321", "OC30P", "0.00", "6", "180.00", " "}, {"HCA1", "CC3163", "CC321", "OC30P", "0.00", "6", "180.00", " "}, {"CC321C", "CC311C", "CC321", "OC30P", "0.43", "3", "0.0", " "}, {"CC3161", "CC3163", "CC321", "OC30P", "0.43", "3", "0.0", " "}, {"CC3161", "CC3161", "CC3162", "OC30P", "1.76", "1", "0.0", " "}, {"CC3161", "CC3161", "CC3162", "OC30P", "2.56", "2", "0.0", " "}, {"CC3161", "CC3161", "CC3162", "OC30P", "0.01", "3", "0.0", " "}, {"CC321C", "CC321C", "CC311D", "OC30P", "1.76", "1", "0.0", " "}, {"CC321C", "CC321C", "CC311D", "OC30P", "2.56", "2", "0.0", " "}, {"CC321C", "CC321C", "CC311D", "OC30P", "0.01", "3", "0.0", " "}, {"CC3161", "CC3161", "CC3161", "OC30P", "1.76", "1", "0.0", " "}, {"CC3161", "CC3161", "CC3161", "OC30P", "2.56", "2", "0.0", " "}, {"CC3161", "CC3161", "CC3161", "OC30P", "0.01", "3", "0.0", " "}, {"CC3162", "CC3161", "CC3161", "OC30P", "1.76", "1", "0.0", " "}, {"CC3162", "CC3161", "CC3161", "OC30P", "2.56", "2", "0.0", " "}, {"CC3162", "CC3161", "CC3161", "OC30P", "0.01", "3", "0.0", " "}, {"CC3163", "CC3161", "CC3161", "OC30P", "1.76", "1", "0.0", " "}, {"CC3163", "CC3161", "CC3161", "OC30P", "2.56", "2", "0.0", " "}, {"CC3163", "CC3161", "CC3161", "OC30P", "0.01", "3", "0.0", " "}, {"CC321C", "CC311D", "CC311D", "OC30P", "1.76", "1", "0.0", " "}, {"CC321C", "CC311D", "CC311D", "OC30P", "2.56", "2", "0.0", " "}, {"CC321C", "CC311D", "CC311D", "OC30P", "0.01", "3", "0.0", " "}, {"CC321C", "OC3C61", "CC311D", "OC30P", "2.44", "3", "180.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC30P", "2.44", "3", "180.0", " "}, {"OC30P", "CC3161", "CC3161", "OC311", "2.50", "1", "180.0", " "}, {"OC30P", "CC3161", "CC3161", "OC311", "2.00", "2", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC311", "2.50", "3", "0.0", " "}, {"OC30P", "CC311D", "CC3161", "OC311", "2.50", "1", "180.0", " "}, {"OC30P", "CC311D", "CC3161", "OC311", "2.00", "2", "0.0", " "}, {"OC30P", "CC311D", "CC3161", "OC311", "2.50", "3", "0.0", " "}, {"OC30P", "CC3162", "CC3161", "OC311", "2.50", "1", "180.0", " "}, {"OC30P", "CC3162", "CC3161", "OC311", "2.00", "2", "0.0", " "}, {"OC30P", "CC3162", "CC3161", "OC311", "2.50", "3", "0.0", " "}, {"OC30P", "CC3161", "CC3162", "OC301", "2.50", "1", "180.0", " "}, {"OC30P", "CC3161", "CC3162", "OC301", "2.00", "2", "0.0", " "}, {"OC30P", "CC3161", "CC3162", "OC301", "2.50", "3", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC301", "2.50", "1", "180.0", " "}, {"OC30P", "CC3161", "CC3161", "OC301", "2.00", "2", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC301", "2.50", "3", "0.0", " "}, {"OC30P", "CC3161", "CC3161", "OC30P", "1.27", "3", "0.0", " "}, {"OC30P", "CC311D", "CC311D", "OC30P", "1.27", "3", "0.0", " "}, {"OC3C61", "CC311D", "CC311D", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC321D", "CC311D", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC3162", "CC3161", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC3163", "CC3161", "OC30P", "0.61", "3", "0.0", " "}, {"OC3C61", "CC311C", "CC321", "OC30P", "0.06", "1", "0.0", " "}, {"OC3C61", "CC311C", "CC321", "OC30P", "0.78", "2", "0.0", " "}, {"OC3C61", "CC311C", "CC321", "OC30P", "0.74", "3", "180.0", " "}, {"OC3C61", "CC3163", "CC321", "OC30P", "0.06", "1", "0.0", " "}, {"OC3C61", "CC3163", "CC321", "OC30P", "0.78", "2", "0.0", " "}, {"OC3C61", "CC3163", "CC321", "OC30P", "0.74", "3", "180.0", " "}, {"CC3161", "OC30P", "PC", "OC2DP", "0.33", "3", "0.0", " "}, {"CC3162", "OC30P", "PC", "OC2DP", "0.33", "3", "0.0", " "}, {"CC311D", "OC30P", "PC", "OC2DP", "0.33", "3", "0.0", " "}, {"CC311D", "OC30P", "PC", "OC312", "1.45", "2", "0.0", " "}, {"OC312", "PC", "OC312", "HCP1", "0.30", "3", "0.00", "terminal phosphate"}, {"OC30P", "PC", "OC312", "HCP1", "0.30", "3", "0.00", "terminal phosphate"}, {"OC2DP", "PC", "OC312", "HCP1", "0.30", "3", "0.00", "terminal phosphate"}, {"CC3161", "OC30P", "PC", "OC312", "1.45", "2", "0.0", "OC30P PC OC312 1.45 2 0.0"}, {"CC3162", "OC30P", "PC", "OC312", "1.45", "2", "0.0", " "}, {"CC321C", "CC311D", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"CC3162", "CC3161", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"CC3163", "CC3161", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"CC3161", "CC3161", "OC30P", "SC", "0.21", "3", "0.0", " "}, {"HCA1", "CC311D", "OC30P", "SC", "0.00", "3", "0.00", "methylsulfate"}, {"HCA1", "CC3161", "OC30P", "SC", "0.00", "3", "0.00", "methylsulfate"}, {"HCA2", "CC321", "OC30P", "SC", "0.284", "3", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "SC", "0.76", "1", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "SC", "0.68", "2", "0.0", " "}, {"OC3C61", "CC311D", "OC30P", "SC", "0.26", "3", "180.0", " "}, {"CC311C", "CC321", "OC30P", "SC", "1.41", "1", "180.0", " "}, {"CC311C", "CC321", "OC30P", "SC", "0.40", "2", "0.0", " "}, {"CC311C", "CC321", "OC30P", "SC", "0.21", "3", "180.0", " "}, {"CC3163", "CC321", "OC30P", "SC", "1.41", "1", "180.0", " "}, {"CC3163", "CC321", "OC30P", "SC", "0.40", "2", "0.0", " "}, {"CC3163", "CC321", "OC30P", "SC", "0.21", "3", "180.0", " "}, {"CC3161", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", " "}, {"CC311D", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", " "}, {"CC321", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", " "}, {"CC321", "CC3163", "CC3161", "OC30P", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"CC321", "OC301", "CC311D", "HCA1", "0.284", "3", "0.0", "OMeTHP CC331 OC301 CC311D HCA1"}, {"OC301", "CC321", "CC331", "HCA3", "0.20", "3", "0.0", "OC301 CC321 CC3163 HCA1"}, {"CC311D", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "OMeTHP CC311D OC301 CC331 HCA3"}, {"CC321", "OC301", "CC311D", "OC3C61", "0.36", "1", "180.0", "pr, 1-ethoxy-THP2 QM phi-psi scan"}, {"CC321", "OC301", "CC311D", "OC3C61", "0.52", "2", "0.0", "MCSA fit"}, {"CC321", "OC301", "CC311D", "OC3C61", "0.83", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC301", "CC321", "CC331", "0.72", "1", "180.0", "pr, 1-ethoxy-THP2 QM phi-psi scan"}, {"CC311D", "OC301", "CC321", "CC331", "0.34", "2", "180.0", "MCSA fit"}, {"CC311D", "OC301", "CC321", "CC331", "0.12", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC311D", "CC321C", "0.58", "1", "180.0", "pr, 1-ethoxy-THP2 QM phi-psi scan"}, {"CC321", "OC301", "CC311D", "CC321C", "0.69", "2", "180.0", "MCSA fit"}, {"CC321", "OC301", "CC311D", "CC321C", "1.16", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC322C", "CC322C", "CC312D", "OC301", "1.98", "1", "0.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC322C", "CC322C", "CC312D", "OC301", "2.56", "2", "0.0", "MCSA fit"}, {"CC322C", "CC322C", "CC312D", "OC301", "1.80", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC322C", "OC3C5M", "CC312D", "OC301", "1.88", "1", "0.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC301", "2.18", "2", "0.0", "MCSA fit"}, {"CC322C", "OC3C5M", "CC312D", "OC301", "0.24", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC322C", "CC312D", "OC301", "CC331", "0.97", "1", "180.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC322C", "CC312D", "OC301", "CC331", "0.44", "3", "180.0", "MCSA fit"}, {"CC331", "OC301", "CC312D", "OC3C5M", "0.98", "2", "0.0", "pram OMeTHF compound 5 (raman et al)"}, {"CC331", "OC301", "CC312D", "OC3C5M", "1.50", "3", "0.0", "MCSA fit"}, {"CC312D", "OC301", "CC331", "HCA3", "0.284", "3", "0.0", "OMe-THF CC312C OC301 CC331 HCA3"}, {"HCA1", "CC312D", "OC301", "CC331", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"OC301", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "OMe-THF OC301 CC312C CC322C HCA2C2"}, {"CC312D", "OC302", "CC311D", "OC3C61", "0.21", "1", "0.0", "pram model compound 1 (raman et al)"}, {"CC312D", "OC302", "CC311D", "OC3C61", "0.86", "2", "0.0", "MCSA fit"}, {"CC312D", "OC302", "CC311D", "OC3C61", "0.35", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC302", "CC312D", "OC3C5M", "0.70", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC311D", "OC302", "CC312D", "OC3C5M", "1.41", "2", "0.0", "MCSA fit"}, {"CC311D", "OC302", "CC312D", "OC3C5M", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC302", "CC312D", "CC322C", "1.23", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC311D", "OC302", "CC312D", "CC322C", "0.15", "2", "0.0", "MCSA fit"}, {"CC311D", "OC302", "CC312D", "CC322C", "0.54", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312D", "OC302", "CC311D", "CC321C", "0.18", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC312D", "OC302", "CC311D", "CC321C", "0.45", "2", "180.0", "MCSA fit"}, {"CC312D", "OC302", "CC311D", "CC321C", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312D", "OC302", "CC311D", "HCA1", "0.284", "3", "0.0", "CC311D OC302 CC311D HCA1"}, {"CC322C", "CC322C", "CC312D", "OC302", "1.98", "1", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "CC322C", "CC312D", "OC302", "2.56", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "CC322C", "CC312D", "OC302", "1.80", "3", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC302", "1.88", "1", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC302", "2.18", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC322C", "OC3C5M", "CC312D", "OC302", "0.24", "3", "0.0", "pram model compound 5 (raman et al)"}, {"OC302", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "OMe-THF OC301 CC312C CC322C HCA2C2"}, {"OC3C5M", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "THF w/me OC3C5M CC312C CC322C HCA2C2"}, {"OC3C5M", "CC312D", "CC322C", "CC322C", "0.00", "3", "0.0", "THF w/me OC3C5M CC312C CC322C CC322C"}, {"CC322C", "CC322C", "OC3C5M", "CC312D", "0.50", "3", "0.0", "THF w/me CC322C CC322C OC3C5M CC322C"}, {"CC312D", "CC322C", "CC322C", "HCA2C2", "0.19", "3", "0.0", "THF w/me CC312C CC322C CC322C HCA2C2"}, {"CC312D", "CC322C", "CC322C", "CC322C", "0.41", "3", "180.0", "THF w/me CC312C CC322C CC322C CC322C"}, {"HCA1", "CC312D", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF w/me HCA1C2 CC312C OC3C5M CC322C"}, {"HCA1", "CC312D", "CC322C", "HCA2C2", "0.20", "3", "0.0", "THF w/me HCA1C2 CC312C CC322C HCA2C2"}, {"CC322C", "CC322C", "CC312D", "HCA1", "0.20", "3", "0.0", "THF w/me CC322C CC322C CC312C HCA1C2"}, {"CC322C", "CC312D", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF w/me CC322C CC312C OC3C5M CC322C"}, {"HCA1", "CC312D", "OC302", "CC311D", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"HCA2C2", "CC322C", "OC3C5M", "CC312D", "0.30", "3", "0.0", "THF w/me HCA2C2 CC322C OC3C5M CC312C"}, {"OC3C5M", "CC312C", "CC321", "HCA2", "0.20", "3", "0.0", "COCA-THP2 OC3C61 CC311C CC321 HCA2"}, {"HCA1", "CC312C", "OC3C5M", "CC322C", "0.30", "3", "0.0", "THF w/me HCA1C2 CC312C OC3C5M CC322C"}, {"CC322C", "CC322C", "CC312C", "HCA1", "0.20", "3", "0.0", "THF w/me CC322C CC322C CC312C HCA1C2"}, {"CC322C", "CC312C", "CC321", "HCA2", "0.20", "3", "0.0", "THF w/me CC322C CC312C CC331 HCA3"}, {"HCA2C2", "CC322C", "CC312C", "HCA1", "0.20", "3", "0.0", "THF w/me HCA1C2 CC312C CC322C HCA2C2"}, {"HCA2C2", "CC322C", "CC312C", "CC321", "0.20", "3", "0.0", "THF w/me CC331 CC312C CC322C HCA2C2"}, {"HCA1", "CC312C", "CC321", "HCA2", "0.20", "3", "0.0", "THF w/me HCA1C2 CC312C CC331 HCA3"}, {"HCA1", "CC312C", "CC321", "OC301", "0.20", "3", "0.0", "OC301 CC321 CC3163 HCA1"}, {"CC321", "CC312C", "OC3C5M", "CC322C", "1.17", "3", "180.0", "pram 11/2009, model comp2 (raman et al)"}, {"CC321", "CC312C", "CC322C", "CC322C", "1.92", "3", "180.0", "MCSA fit to (psi=-180 1-D MP2/cc-pVTZ//MP2/6-31G*)"}, {"OC301", "CC321", "CC312C", "OC3C5M", "1.93", "1", "180.0", "COCA-THP2 OC301 CC321 CC311C OC3C61"}, {"OC301", "CC321", "CC312C", "OC3C5M", "0.43", "2", "0.0", " "}, {"OC301", "CC321", "CC312C", "OC3C5M", "0.12", "3", "180.0", " "}, {"CC322C", "CC312C", "CC321", "OC301", "1.10", "1", "180.0", "COCA-THP2 CC322C CC312C CC321 OC301"}, {"CC322C", "CC312C", "CC321", "OC301", "0.07", "2", "180.0", " "}, {"CC322C", "CC312C", "CC321", "OC301", "0.15", "3", "0.0", " "}, {"CC312C", "CC321", "OC301", "CC331", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331"}, {"CC312C", "CC321", "OC301", "CC331", "0.03", "2", "180.0", " "}, {"CC312C", "CC321", "OC301", "CC331", "0.61", "3", "0.0", " "}, {"CC322C", "CC312C", "OC303", "CC331", "0.41", "1", "180.0", "pram model compound 6 (raman et al)"}, {"CC322C", "CC312C", "OC303", "CC331", "0.29", "2", "0.0", "MCSA fit"}, {"CC322C", "CC312C", "OC303", "CC331", "0.42", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC303", "CC312C", "CC322C", "OC3C5M", "0.73", "1", "0.0", "pram model compound 6 (raman et al)"}, {"OC303", "CC312C", "CC322C", "OC3C5M", "2.96", "2", "0.0", "MCSA fit"}, {"OC303", "CC312C", "CC322C", "OC3C5M", "1.39", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312C", "OC303", "CC331", "HCA3", "0.284", "3", "0.0", "CC312C OC301 CC331 HCA3"}, {"HCA1", "CC312C", "OC303", "CC331", "0.284", "3", "0.0", "THF w/me HCA1C2 CC312C OC301 CC331"}, {"CC322C", "CC322C", "CC312C", "OC303", "0.20", "3", "0.0", "CC322C CC322C CC312C OC301"}, {"OC3C5M", "CC322C", "CC312C", "HCA1", "0.20", "3", "0.0", "THF OC3C5M CC312C CC322C HCA2C2"}, {"CC312C", "CC322C", "OC3C5M", "CC322C", "0.50", "3", "0.0", "THF CC322C CC322C OC3C5M CC322C"}, {"OC3C5M", "CC322C", "CC312C", "CC322C", "0.00", "3", "0.0", "THF OC3C5M CC322C CC322C CC322C"}, {"OC3C5M", "CC322C", "CC322C", "CC312C", "0.00", "3", "0.0", "THF OC3C5M CC322C CC322C CC322C"}, {"HCA1", "CC312C", "OC303", "CC311D", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"CC312C", "OC303", "CC311D", "HCA1", "0.284", "3", "0.0", "CC311D OC302 CC311D HCA1"}, {"OC303", "CC311D", "CC321C", "CC321C", "0.20", "3", "0.0", "OC301 CC311D CC321C CC321C"}, {"OC303", "CC311D", "CC321C", "HCA2", "0.20", "3", "0.0", "OC301 CC311D CC321C HCA2"}, {"CC321C", "OC3C61", "CC311D", "OC303", "0.62", "1", "0.0", "CC321C OC3C61 CC311D OC301"}, {"CC321C", "OC3C61", "CC311D", "OC303", "1.54", "2", "0.0", " "}, {"CC321C", "OC3C61", "CC311D", "OC303", "0.48", "3", "0.0", " "}, {"OC303", "CC312C", "CC322C", "HCA2C2", "0.20", "3", "0.0", "OC301 CC312C CC322C HCA2C2"}, {"CC312C", "OC303", "CC311D", "OC3C61", "0.08", "1", "0.0", "pram model compound 3 (raman et al)"}, {"CC312C", "OC303", "CC311D", "OC3C61", "0.93", "2", "0.0", "MCSA fit"}, {"CC312C", "OC303", "CC311D", "OC3C61", "0.05", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC312C", "OC303", "CC311D", "CC321C", "0.05", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC312C", "OC303", "CC311D", "CC321C", "0.38", "2", "180.0", "MCSA fit"}, {"CC312C", "OC303", "CC311D", "CC321C", "0.36", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311D", "OC303", "CC312C", "CC322C", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC311D", "OC303", "CC312C", "CC322C", "0.04", "2", "0.0", "MCSA fit"}, {"CC311D", "OC303", "CC312C", "CC322C", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"HCA1", "CC312D", "OC301", "CC311C", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"CC312D", "OC301", "CC311C", "HCA1", "0.284", "3", "0.0", "CC311D OC301 CC311C HCA1"}, {"CC312D", "OC301", "CC311C", "CC321C", "0.12", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC312D", "OC301", "CC311C", "CC321C", "0.03", "2", "180.0", "MCSA fit"}, {"CC312D", "OC301", "CC311C", "CC321C", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311C", "OC301", "CC312D", "OC3C5M", "0.52", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC311C", "OC301", "CC312D", "OC3C5M", "1.50", "2", "0.0", "MCSA fit"}, {"CC311C", "OC301", "CC312D", "OC3C5M", "0.98", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC311C", "OC301", "CC312D", "CC322C", "1.19", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC311C", "OC301", "CC312D", "CC322C", "0.16", "2", "180.0", "MCSA fit"}, {"CC311C", "OC301", "CC312D", "CC322C", "0.49", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "OC302", "CC3162", "OC3C61", "0.21", "1", "0.0", "pram model compound 1 (raman et al)"}, {"CC3051", "OC302", "CC3162", "OC3C61", "0.86", "2", "0.0", "MCSA fit"}, {"CC3051", "OC302", "CC3162", "OC3C61", "0.35", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC302", "CC3051", "OC3C51", "0.70", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC3162", "OC302", "CC3051", "OC3C51", "1.41", "2", "0.0", "MCSA fit"}, {"CC3162", "OC302", "CC3051", "OC3C51", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC302", "CC3051", "CC3151", "1.23", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC3162", "OC302", "CC3051", "CC3151", "0.15", "2", "0.0", "MCSA fit"}, {"CC3162", "OC302", "CC3051", "CC3151", "0.54", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "OC302", "CC3162", "CC3161", "0.18", "1", "180.0", "pram model compound 1 (raman et al)"}, {"CC3051", "OC302", "CC3162", "CC3161", "0.45", "2", "180.0", "MCSA fit"}, {"CC3051", "OC302", "CC3162", "CC3161", "0.75", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC302", "CC3051", "OC3C51", "CC3153", "0.19", "1", "180.0", "OC311 CC3051 OC3C51 CC3153 BFRU"}, {"OC302", "CC3051", "OC3C51", "CC3153", "2.85", "2", "180.0", " "}, {"OC302", "CC3051", "OC3C51", "CC3153", "0.86", "3", "0.0", " "}, {"CC3151", "CC3151", "CC3051", "OC302", "2.23", "1", "0.0", "CC3151 CC3151 CC3051 OC311"}, {"CC3151", "CC3151", "CC3051", "OC302", "3.00", "2", "0.0", " "}, {"CC3151", "CC3151", "CC3051", "OC302", "0.88", "3", "180.0", " "}, {"OC302", "CC3051", "CC321", "HCA2", "0.14", "3", "0.0", "OC311 CC3051 CC321 HCA2"}, {"OC302", "CC3051", "CC3151", "HCA1", "0.14", "3", "0.0", "OC311 CC3051 CC3151 HCA1"}, {"OC302", "CC3051", "CC321", "OC311", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311"}, {"OC302", "CC3051", "CC321", "OC311", "1.99", "2", "180.0", " "}, {"OC302", "CC3051", "CC321", "OC311", "1.72", "3", "180.0", " "}, {"OC302", "CC3051", "CC3151", "OC311", "0.12", "1", "180.0", "OC311 CC3051 CC3151 OC311"}, {"OC302", "CC3051", "CC3151", "OC311", "1.87", "2", "180.0", " "}, {"OC302", "CC3051", "CC3151", "OC311", "1.64", "3", "180.0", " "}, {"CC3051", "OC302", "CC3162", "HCA1", "0.284", "3", "0.0", "CC3162 OC302 CC3162 HCA1"}, {"CC321", "CC3051", "OC302", "CC3162", "0.40", "1", "180.0", "CC321 CC3051 OC311 HCP1 Fructose"}, {"CC321", "CC3051", "OC302", "CC3162", "0.48", "2", "0.0", " "}, {"CC321", "CC3051", "OC302", "CC3162", "0.19", "3", "0.0", " "}, {"OC3C61", "CC3162", "OC303", "CC3151", "0.08", "1", "0.0", "pram model compound 3 (raman et al)"}, {"OC3C61", "CC3162", "OC303", "CC3151", "0.93", "2", "0.0", "MCSA fit"}, {"OC3C61", "CC3162", "OC303", "CC3151", "0.05", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "CC3162", "OC303", "CC3151", "0.05", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3161", "CC3162", "OC303", "CC3151", "0.38", "2", "180.0", "MCSA fit"}, {"CC3161", "CC3162", "OC303", "CC3151", "0.36", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC303", "CC3151", "CC3153", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3162", "OC303", "CC3151", "CC3153", "0.04", "2", "0.0", "MCSA fit"}, {"CC3162", "OC303", "CC3151", "CC3153", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC303", "CC3151", "CC3151", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3162", "OC303", "CC3151", "CC3151", "0.04", "2", "0.0", "MCSA fit"}, {"CC3162", "OC303", "CC3151", "CC3151", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3162", "OC303", "CC3151", "HCA1", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"HCA1", "CC3162", "OC303", "CC3151", "0.284", "3", "0.0", "par35 HCA2 CC32A OC30A CC32A"}, {"CC3163", "OC3C61", "CC3162", "OC303", "0.41", "1", "180.0", "CC3163 OC3C61 CC3162 OC301"}, {"CC3163", "OC3C61", "CC3162", "OC303", "0.89", "2", "0.0", " "}, {"CC3163", "OC3C61", "CC3162", "OC303", "0.05", "3", "0.0", " "}, {"OC303", "CC3162", "CC3161", "HCA1", "0.20", "3", "0.0", "par27 X CTL1 CTL1 X"}, {"OC303", "CC3162", "CC3161", "OC311", "2.65", "1", "180.0", "OC301 CC3162 CC3161 OC311"}, {"OC303", "CC3162", "CC3161", "OC311", "0.00", "2", "0.0", " "}, {"OC303", "CC3162", "CC3161", "OC311", "0.13", "3", "180.0", " "}, {"CC3161", "CC3161", "CC3162", "OC303", "0.20", "3", "0.0", "CC3161 CC3161 CC3162 OC301"}, {"OC3C51", "CC3153", "CC3151", "OC303", "0.14", "1", "0.0", "OC3C51 CC3153 CC3151 OC311"}, {"OC3C51", "CC3153", "CC3151", "OC303", "0.70", "2", "0.0", " "}, {"OC3C51", "CC3153", "CC3151", "OC303", "0.18", "3", "0.0", " "}, {"CC3051", "CC3151", "CC3151", "OC303", "2.07", "1", "0.0", "CC3051 CC3151 CC3151 OC311"}, {"CC3051", "CC3151", "CC3151", "OC303", "2.13", "2", "0.0", " "}, {"CC3051", "CC3151", "CC3151", "OC303", "2.71", "3", "180.0", " "}, {"CC321", "CC3153", "CC3151", "OC303", "0.76", "1", "180.0", "CC321 CC3153 CC3151 OC311"}, {"CC321", "CC3153", "CC3151", "OC303", "0.40", "2", "180.0", " "}, {"CC321", "CC3153", "CC3151", "OC303", "0.40", "3", "180.0", " "}, {"OC303", "CC3151", "CC3151", "OC311", "2.87", "1", "180.0", "OC311 CC3151 CC3151 OC311"}, {"OC303", "CC3151", "CC3151", "OC311", "0.03", "2", "0.0", " "}, {"OC303", "CC3151", "CC3151", "OC311", "0.23", "3", "0.0", " "}, {"OC303", "CC3151", "CC3151", "HCA1", "0.14", "3", "0.0", "OC311 CC3151 CC3151 HCA1"}, {"OC303", "CC3151", "CC3153", "HCA1", "0.14", "3", "0.0", "OC311 CC3151 CC3153 HCA1"}, {"CC3162", "OC303", "CC3151", "CC3051", "0.07", "1", "180.0", "pram model compound 3 (raman et al)"}, {"CC3162", "OC303", "CC3151", "CC3051", "0.04", "2", "0.0", "MCSA fit"}, {"CC3162", "OC303", "CC3151", "CC3051", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"OC302", "CC3051", "CC3151", "OC303", "0.12", "1", "180.0", "OC311 CC3051 CC3151 OC311"}, {"OC302", "CC3051", "CC3151", "OC303", "1.87", "2", "180.0", " "}, {"OC302", "CC3051", "CC3151", "OC303", "1.64", "3", "180.0", " "}, {"OC3C51", "CC3051", "CC3151", "OC303", "0.32", "1", "180.0", "OC3C51 CC3051 CC3151 OC311, ketopentose monosac"}, {"OC3C51", "CC3051", "CC3151", "OC303", "0.65", "2", "180.0", " "}, {"OC3C51", "CC3051", "CC3151", "OC303", "2.62", "3", "0.0", " "}, {"CC3153", "CC3151", "CC3151", "OC303", "0.01", "1", "180.0", "CC3153 CC3151 CC3151 OC311, aldopentose monosac"}, {"CC3153", "CC3151", "CC3151", "OC303", "0.72", "2", "0.0", " "}, {"CC3153", "CC3151", "CC3151", "OC303", "0.73", "3", "0.0", " "}, {"CC321", "CC3051", "CC3151", "OC303", "0.94", "1", "0.0", "CC321 CC3051 CC3151 OC311, ketopentose monosac"}, {"CC321", "CC3051", "CC3151", "OC303", "1.59", "2", "180.0", " "}, {"CC321", "CC3051", "CC3151", "OC303", "0.84", "3", "0.0", " "}, {"OC302", "CC3051", "CC321", "OC301", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311, ketopentose monosac"}, {"OC302", "CC3051", "CC321", "OC301", "1.99", "2", "180.0", " "}, {"OC302", "CC3051", "CC321", "OC301", "1.72", "3", "180.0", " "}, {"CC321", "OC301", "CC3051", "OC3C51", "0.98", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3051", "OC3C51", "1.50", "3", "0.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC3051", "CC3151", "0.97", "1", "180.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3051", "CC3151", "0.44", "3", "180.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"HCA2", "CC321", "OC301", "CC3051", "0.284", "3", "0.0", "OMe-THF CC312D OC301 CC331 HCA3"}, {"CC321", "OC301", "CC3051", "CC321", "0.40", "1", "180.0", "CC321 CC3051 OC311 HCP1, ketopentose monosac"}, {"CC321", "OC301", "CC3051", "CC321", "0.48", "2", "0.0", " "}, {"CC321", "OC301", "CC3051", "CC321", "0.19", "3", "0.0", " "}, {"OC301", "CC3051", "CC321", "HCA2", "0.14", "3", "0.0", "OC311 CC3051 CC321 HCA2"}, {"OC301", "CC3051", "CC3151", "HCA1", "0.14", "3", "0.0", "OC311 CC3051 CC3151 HCA1"}, {"OC301", "CC3051", "CC321", "OC311", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311, ketopentose monosac"}, {"OC301", "CC3051", "CC321", "OC311", "1.99", "2", "180.0", " "}, {"OC301", "CC3051", "CC321", "OC311", "1.72", "3", "180.0", " "}, {"OC301", "CC3051", "CC3151", "OC311", "0.12", "1", "180.0", "OC311 CC3051 CC3151 OC311, ketopentose monosac"}, {"OC301", "CC3051", "CC3151", "OC311", "1.87", "2", "180.0", " "}, {"OC301", "CC3051", "CC3151", "OC311", "1.64", "3", "180.0", " "}, {"OC3C51", "CC3051", "CC321", "OC301", "1.93", "1", "180.0", "COCA-THP2 OC301 CC321 CC311C OC3C61"}, {"OC3C51", "CC3051", "CC321", "OC301", "0.43", "2", "0.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC3C51", "CC3051", "CC321", "OC301", "0.12", "3", "180.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC321", "CC3051", "CC3151", "1.10", "1", "180.0", "COCA-THP2 CC322C CC312C CC321 OC301"}, {"OC301", "CC321", "CC3051", "CC3151", "0.07", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC301", "CC321", "CC3051", "CC3151", "0.15", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3051", "CC321", "OC301", "CC3051", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331, validated by mc2 scan"}, {"CC3051", "CC321", "OC301", "CC3051", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3051", "CC321", "OC301", "CC3051", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC3C51", "CC3153", "CC321", "OC301", "1.93", "1", "180.0", "COCA-THP2 OC301 CC321 CC311C OC3C61"}, {"OC3C51", "CC3153", "CC321", "OC301", "0.43", "2", "0.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC3C51", "CC3153", "CC321", "OC301", "0.12", "3", "180.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC301", "CC3051", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331"}, {"CC3153", "CC321", "OC301", "CC3051", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3153", "CC321", "OC301", "CC3051", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC321", "CC3153", "HCA1", "0.14", "3", "0.0", "OC311 CC321 CC3153 HCA1"}, {"OC301", "CC321", "CC3153", "CC3151", "1.10", "1", "180.0", "COCA-THP2 CC322C CC312C CC321 OC301"}, {"OC301", "CC321", "CC3153", "CC3151", "0.07", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"OC301", "CC321", "CC3153", "CC3151", "0.15", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC301", "CC3162", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331, validated by mc2 scan"}, {"CC3153", "CC321", "OC301", "CC3162", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3153", "CC321", "OC301", "CC3162", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"OC301", "CC3051", "CC321", "OC301", "0.07", "1", "0.0", "OC311 CC3051 CC321 OC311, ketopentose monosac"}, {"OC301", "CC3051", "CC321", "OC301", "1.99", "2", "180.0", " "}, {"OC301", "CC3051", "CC321", "OC301", "1.72", "3", "180.0", " "}, {"CC321", "OC301", "CC3152", "OC3C51", "0.98", "2", "0.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3152", "OC3C51", "1.50", "3", "0.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"CC321", "OC301", "CC3152", "CC3151", "0.97", "1", "180.0", "pram model compound 5 (raman et al)"}, {"CC321", "OC301", "CC3152", "CC3151", "0.44", "3", "180.0", "MCSA fit MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3153", "CC321", "OC301", "CC3152", "0.64", "1", "180.0", "COCA-THP2 CC311C CC321 OC301 CC331"}, {"CC3153", "CC321", "OC301", "CC3152", "0.03", "2", "180.0", ", pram, validated by model compound 2 (raman et al)"}, {"CC3153", "CC321", "OC301", "CC3152", "0.61", "3", "0.0", ", pram, MP2/cc-pVTZ//MP2/6-31G*"}, {"HCA2", "CC321", "OC301", "CC3152", "0.284", "3", "0.0", "OMe-THF CC312D OC301 CC331 HCA3"}, {"HCA1", "CC3152", "OC301", "CC321", "0.284", "3", "0.0", "HCA1 CC3152 OC301 CC331"}, {"CC3152", "OC301", "CC3161", "CC3162", "0.12", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3152", "OC301", "CC3161", "CC3162", "0.03", "2", "180.0", "MCSA fit"}, {"CC3152", "OC301", "CC3161", "CC3162", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3152", "OC301", "CC3161", "CC3161", "0.12", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3152", "OC301", "CC3161", "CC3161", "0.03", "2", "180.0", "MCSA fit"}, {"CC3152", "OC301", "CC3161", "CC3161", "0.14", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3152", "OC3C51", "0.52", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3161", "OC301", "CC3152", "OC3C51", "1.50", "2", "0.0", "MCSA fit"}, {"CC3161", "OC301", "CC3152", "OC3C51", "0.98", "3", "0.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3152", "CC3151", "1.19", "1", "180.0", "pram model compound 4 (raman et al)"}, {"CC3161", "OC301", "CC3152", "CC3151", "0.16", "2", "180.0", "MCSA fit"}, {"CC3161", "OC301", "CC3152", "CC3151", "0.49", "3", "180.0", "MP2/cc-pVTZ//MP2/6-31G*"}, {"CC3161", "OC301", "CC3152", "HCA1", "0.284", "3", "0.0", "OMe-THF HCA1C2 CC312C OC301 CC331"}, {"HCA1", "CC3161", "OC301", "CC3152", "0.284", "3", "0.0", "CC311D OC301 CC311C HCA1"}, {"CC3263", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "CC3263 CC3161 CC3161 OC311"}, {"CC3162", "OC30P", "SC", "OC2DP", "0.17", "3", "0.0", "CC3161 OC30P SC OC2DP 0.17 3 0.0"}, {"SC", "OC30P", "CC3162", "OC3C61", "0.76", "1", "0.0", "OC3C61 CC311D OC30P SC 0.76 1 0.0"}, {"SC", "OC30P", "CC3162", "OC3C61", "0.68", "2", "0.0", "OC3C61 CC311D OC30P SC 0.68 2 0.0"}, {"SC", "OC30P", "CC3162", "OC3C61", "0.26", "3", "180.0", "OC3C61 CC311D OC30P SC 0.26 3 180.0"}, {"SC", "OC30P", "CC3162", "CC3161", "0.21", "3", "0.0", "CC3162 CC3161 OC30P SC 0.21 3 0.0"}, {"SC", "OC30P", "CC3162", "HCA1", "0.00", "3", "0.0", "HCA1 CC3161 OC30P SC 0.00 3 0.0"}, {"OC311", "CC3162", "CC3161", "OC30P", "2.50", "1", "180.0", "OC30P CC3162 CC3161 OC311 2.50 1 180.0"}, {"OC311", "CC3162", "CC3161", "OC30P", "2.00", "2", "0.0", "OC30P CC3162 CC3161 OC311 2.00 2 0.0"}, {"OC311", "CC3162", "CC3161", "OC30P", "2.50", "3", "0.0", "OC30P CC3162 CC3161 OC311 2.50 3 0.0"}, {"CC3062", "OC301", "CC321", "HCA2", "0.284", "3", "0.0", "from CC3162 OC301 CC321 HCA2"}, {"CC321", "OC301", "CC3062", "OC3C61", "0.14", "1", "0.0", "from CC321 OC301 CC3162 OC3C61"}, {"CC321", "OC301", "CC3062", "OC3C61", "0.97", "2", "0.0", " "}, {"CC321", "OC301", "CC3062", "OC3C61", "0.11", "3", "180.0", " "}, {"CC3163", "CC321", "OC301", "CC3062", "0.64", "1", "180.0", "from CC3163 CC321 OC301 CC3162"}, {"CC3163", "CC321", "OC301", "CC3062", "0.03", "2", "180.0", " "}, {"CC3163", "CC321", "OC301", "CC3062", "0.61", "3", "0.0", " "}, {"CC3261", "CC3062", "OC301", "CC321", "0.22", "1", "0.0", "from C3161 CC3162 OC301 CC321"}, {"CC3261", "CC3062", "OC301", "CC321", "0.28", "2", "180.0", " "}, {"CC3261", "CC3062", "OC301", "CC321", "0.89", "3", "0.0", " "}, {"CC321", "OC301", "CC3062", "CC2O2", "0.284", "3", "0.0", "from CC3161 OC301 CC3062 CC2O2"}, {"OC3C61", "CC3062", "OC301", "CC312", "1.3464", "1", "0.00", "RMSE = 1.59697"}, {"OC3C61", "CC3062", "OC301", "CC312", "3.0743", "2", "0.00", "RMSE = 1.59697"}, {"OC3C61", "CC3062", "OC301", "CC312", "0.8378", "3", "180.00", "RMSE = 1.59697"}, {"CC312", "CC312", "OC301", "CC3062", "3.0937", "1", "180.00", "RMSE = 1.59697"}, {"CC312", "CC312", "OC301", "CC3062", "0.7096", "2", "180.00", "RMSE = 1.59697"}, {"CC312", "CC312", "OC301", "CC3062", "0.0245", "3", "0.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC322", "OC311", "1.7749", "1", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC322", "OC311", "1.5713", "2", "0.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC322", "OC311", "1.8214", "3", "0.00", "RMSE = 1.59697"}, {"CC322", "CC312", "OC301", "CC3062", "4.2905", "1", "180.00", "RMSE = 1.59697"}, {"CC322", "CC312", "OC301", "CC3062", "0.4831", "2", "180.00", "RMSE = 1.59697"}, {"CC322", "CC312", "OC301", "CC3062", "0.0488", "3", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "OC311", "1.7164", "1", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "OC311", "0.3973", "2", "180.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "OC311", "1.9793", "3", "0.00", "RMSE = 1.59697"}, {"CC3163", "CC312", "CC312", "OC301", "0.2524", "1", "180.00", "RMSE = 1.59697"}, {"CC3163", "CC312", "CC312", "OC301", "0.4587", "2", "0.00", "RMSE = 1.59697"}, {"CC3163", "CC312", "CC312", "OC301", "1.1807", "3", "180.00", "RMSE = 1.59697"}, {"CC2O2", "CC3062", "OC301", "CC312", "1.1671", "1", "180.00", "RMSE = 1.59697"}, {"CC2O2", "CC3062", "OC301", "CC312", "1.5207", "2", "0.00", "RMSE = 1.59697"}, {"CC2O2", "CC3062", "OC301", "CC312", "1.0160", "3", "180.00", "RMSE = 1.59697"}, {"CC3261", "CC3062", "OC301", "CC312", "1.5334", "1", "180.00", "RMSE = 1.59697"}, {"CC3261", "CC3062", "OC301", "CC312", "1.5933", "2", "0.00", "RMSE = 1.59697"}, {"CC3261", "CC3062", "OC301", "CC312", "1.3811", "3", "0.00", "RMSE = 1.59697"}, {"OC301", "CC312", "CC312", "HCA1", "0.1400", "3", "0.00", "from HCA1 CC312 CC312 OC311"}, {"HCA1", "CC312", "OC301", "CC3062", "0.2840", "3", "0.00", "from CC3162 OC301 CC321 HCA2"}, {"OC301", "CC312", "CC322", "HCA2", "0.1400", "3", "0.00", "from HCA2 CC322 CC312 OC311"}, {"OC3C61", "CC3062", "OC301", "CC322", "2.1018", "1", "0.00", "RMSE = 1.5934"}, {"OC3C61", "CC3062", "OC301", "CC322", "1.4102", "2", "0.00", "RMSE = 1.5934"}, {"OC3C61", "CC3062", "OC301", "CC322", "0.4570", "3", "0.00", "RMSE = 1.5934"}, {"CC312", "CC322", "OC301", "CC3062", "2.5455", "1", "180.00", "RMSE = 1.5934"}, {"CC312", "CC322", "OC301", "CC3062", "0.7918", "2", "180.00", "RMSE = 1.5934"}, {"CC312", "CC322", "OC301", "CC3062", "0.9628", "3", "180.00", "RMSE = 1.5934"}, {"OC311", "CC312", "CC322", "OC301", "3.3150", "1", "180.00", "RMSE = 1.5934"}, {"OC311", "CC312", "CC322", "OC301", "1.6828", "2", "180.00", "RMSE = 1.5934"}, {"OC311", "CC312", "CC322", "OC301", "2.9534", "3", "180.00", "RMSE = 1.5934"}, {"CC312", "CC312", "CC322", "OC301", "0.5927", "1", "0.00", "RMSE = 1.5934"}, {"CC312", "CC312", "CC322", "OC301", "1.2961", "2", "180.00", "RMSE = 1.5934"}, {"CC312", "CC312", "CC322", "OC301", "2.1767", "3", "0.00", "RMSE = 1.5934"}, {"CC2O2", "CC3062", "OC301", "CC322", "0.4128", "1", "180.00", "RMSE = 1.5934"}, {"CC2O2", "CC3062", "OC301", "CC322", "0.2875", "2", "180.00", "RMSE = 1.5934"}, {"CC2O2", "CC3062", "OC301", "CC322", "0.0685", "3", "0.00", "RMSE = 1.5934"}, {"CC3261", "CC3062", "OC301", "CC322", "0.3336", "1", "180.00", "RMSE = 1.5934"}, {"CC3261", "CC3062", "OC301", "CC322", "0.0342", "2", "0.00", "RMSE = 1.5934"}, {"CC3261", "CC3062", "OC301", "CC322", "0.7301", "3", "180.00", "RMSE = 1.5934"}, {"OC301", "CC322", "CC312", "HCA1", "0.1400", "3", "0.0", "from HCA1 CC312 CC312 OC311"}, {"HCA2", "CC322", "OC301", "CC3062", "0.2840", "3", "0.0", "from CC3162 OC301 CC321 HCA2"}, {"HCA1", "CC3162", "CC3161", "CC3261", "0.20", "3", "0.0", "from HCA1 CC3162 CC3161 CC3161"}, {"HCA2", "CC3261", "CC3161", "CC3162", "0.20", "3", "0.0", "from HCA1 CC3161 CC3161 CC3162"}, {"CC3161", "CC3261", "CC3161", "CC3162", "0.19", "3", "180.0", "from CC3161 CC3161 CC3161 CC3162"}, {"CC3261", "CC3161", "CC3163", "CC331", "0.20", "3", "0.0", "from CC3161 CC3161 CC3163 CC331"}, {"CC3161", "CC3261", "CC3161", "CC3163", "0.19", "3", "180.0", "from CC3161 CC3161 CC3161 CC3163"}, {"HCA2", "CC3261", "CC3161", "CC3163", "0.20", "3", "0.0", "from HCA1 CC3161 CC3161 CC3163"}, {"HCA1", "CC3163", "CC3161", "CC3261", "0.20", "3", "0.0", "from HCA1 CC3163 CC3161 CC3161"}, {"HCA1", "CC3161", "CC3261", "CC3161", "0.20", "3", "0.0", "from HCA1 CC3161 CC3161 CC3161"}, {"CC3161", "CC3261", "CC3161", "OC311", "0.20", "3", "0.0", "from CC3161 CC3161 CC3161 OC311"}, {"CC3261", "CC3161", "CC3163", "OC3C61", "0.31", "3", "180.0", "from CC3161 CC3161 CC3163 OC3C61"}, {"CC3261", "CC3161", "CC3162", "OC3C61", "0.31", "3", "180.0", "from CC3161 CC3161 CC3162 OC3C61"}, {"CC3261", "CC3161", "CC3162", "OC311", "0.20", "3", "0.0", "from CC3161 CC3161 CC3162 OC311"}, {"CC3261", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "from CC3161 CC3161 CC3162 OC301"}, {"CC3162", "CC3161", "OC301", "CC2O5", "0.1300", "1", "180.0", "CC3162 CC3161 OC301 CC3162"}, {"CC3162", "CC3161", "OC301", "CC2O5", "0.2500", "2", "180.0", "CC3162 CC3161 OC301 CC3162"}, {"CC3162", "CC3161", "OC301", "CC2O5", "0.0600", "3", "180.0", "CC3162 CC3161 OC301 CC3162"}, {"CC3261", "CC3161", "OC301", "CC2O5", "1.0150", "1", "180.0", "RMSE = 2.28686"}, {"CC3261", "CC3161", "OC301", "CC2O5", "0.4550", "2", "0.0", "RMSE = 2.28686"}, {"CC3261", "CC3161", "OC301", "CC2O5", "1.0330", "3", "180.0", "RMSE = 2.28686"}, {"OC2D1", "CC2O5", "CC331", "HCA3", "0.0000", "6", "180.0", "OG2D1 CG2O2 CG331 HGA3"}, {"OC301", "CC2O5", "CC331", "HCA3", "0.0000", "6", "180.0", "OG302 CG2O2 CG331 HGA3"}, {"HCA2", "CC3261", "CC3161", "OC301", "0.1400", "3", "0.0", "HCA2 CC3261 CC3161 OC311"}, {"HCA1", "CC3161", "OC301", "CC2O5", "0.0000", "3", "0.0", "HGA1 CG311 OG302 CG2O2"}, {"CC3161", "OC301", "CC2O5", "OC2D1", "0.9650", "1", "180.0", "OG2D1 CG2O2 OG302 CG301"}, {"CC3161", "OC301", "CC2O5", "OC2D1", "3.8500", "2", "180.0", "OG2D1 CG2O2 OG302 CG301"}, {"CC3161", "OC301", "CC2O5", "CC331", "2.0500", "2", "180.0", "CG311 CG2O2 OG302 CG331"}, {"CC3161", "CC3261", "CC3161", "OC301", "0.2000", "3", "0.0", "from CC3161 CC3161 CC3161 OC311"}, {"CC3161", "CC3161", "OC301", "CC2O5", "0.1300", "1", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"CC3161", "CC3161", "OC301", "CC2O5", "0.2500", "2", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"CC3161", "CC3161", "OC301", "CC2O5", "0.0600", "3", "180.0", "CC3161 CC3161 OC301 CC3162"}, {"SC", "NC311", "CC3161", "HCA1", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"HCP1", "NC311", "CC3161", "HCA1", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"HCP1", "NC311", "CC3161", "CC3161", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"HCP1", "NC311", "CC3161", "CC3162", "0.10", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "CC3161", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "OC3C61", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "HCA1", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "HCA1", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "OC311", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "OC311", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "OC301", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3162", "OC301", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"NC311", "CC3161", "CC3161", "OC30P", "0.20", "3", "0.0", "SUFMA/B, xxwy"}, {"OC2DP", "SC", "NC311", "HCP1", "0.25", "3", "0.0", "SUFMA/B, xxwy"}, {"CC3161", "NC311", "SC", "OC2DP", "0.153", "3", "0.0", "SUFMA/B, lsfit RMSE = 1.095, xxwy"}, {"CC3161", "CC3161", "NC311", "SC", "0.161", "3", "0.0", "SUFMA/B, lsfit RMSE = 1.095, xxwy"}, {"CC3162", "CC3161", "NC311", "SC", "0.161", "3", "0.0", "SUFMA/B, lsfit RMSE = 1.095, xxwy"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_carb info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_carb_impropers[14][8]= {{"CC2O1", "CC331", "NC2D1", "OC2D1", "120.00", "0", "0.00", "par22 O X X C"}, {"NC2D1", "CC2O1", "CC3161", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"NC2D1", "CC2O1", "CC3062", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"CC2O2", "CC311", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC301", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC3163", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC3062", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"CC2O2", "CC321", "OC2D2", "OC2D2", "96.00", "0", "0.00", "par22 OC X X CC"}, {"NC2D1", "CC2O1", "CC331", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"NC2D1", "CC2O1", "CC311", "HCP1", "20.00", "0", "0.00", "par22 NH1 X X H"}, {"CC2O4", "CC331", "OC2D4", "HCR1", "50.00", "0", "0.00", "acetaldehyde adm"}, {"CC2O4", "CC312", "OC2D4", "HCR1", "50.00", "0", "0.00", "acetaldehyde adm"}, {"OC2D3", "CC331", "CC331", "CC2O3", "70.00", "0", "0.00", "ketone, acetone"}, {"OC2D3", "CC312", "CC322", "CC2O3", "70.00", "0", "0.00", " "}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_carb info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_carb_vdw[57][6]= {{"CC301", "-0.0320", "2.000", "-0.01", "1.9", "cgenff CG301"}, {"CC3062", "-0.0320", "2.000", "-0.01", "1.9", "cgenff CG301"}, {"CC311", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3161", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3162", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3163", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC321", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"CC3261", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"CC3263", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"CC331", "-0.0780", "2.040", "-0.01", "1.9", "par22, CT3x"}, {"CC2O1", "-0.1100", "2.000", " ", " ", "C"}, {"CC2O2", "-0.0700", "2.000", " ", " ", "CC"}, {"CC2O3", "-0.0900", "2.000", " ", " ", "acetone, 11/08"}, {"CC2O4", "-0.0600", "1.800", " ", " ", "acetaldehyde, 11/08"}, {"CC2O5", "-0.0980", "1.700", " ", " ", "carbonyl C, 04/15, methyl acetate viv 12/29/06"}, {"OC2D1", "-0.1200", "1.700", "-0.12", "1.40", "par22, OB"}, {"OC2D2", "-0.1200", "1.700", " ", " ", "OC"}, {"OC2D3", "-0.0500", "1.700", "-0.12", "1.40", "adm, acetone, 11/08"}, {"OC2D4", "-0.1200", "1.700", "-0.12", "1.40", "adm, acetaldehyde, 11/08"}, {"OC3C61", "-0.1000", "1.650", " ", " ", "thp 1/06"}, {"OC311", "-0.1921", "1.765", " ", " ", "MeOH and EtOH 1/06"}, {"NC2D1", "-0.2000", "1.850", "-0.20", "1.55", "par22 NH1"}, {"HCP1", "-0.0460", "0.2245", " ", " ", "polar H"}, {"HCA1", "-0.0450", "1.340", " ", " ", "1/5/05 igor"}, {"HCA2", "-0.0350", "1.340", " ", " ", "igor, 6/05"}, {"HCA3", "-0.0240", "1.340", " ", " ", "yin and mackerell, 4/98"}, {"CC312", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC322", "-0.0560", "2.010", "-0.01", "1.9", "par22, CT2x"}, {"HCR1", "-0.0460", "0.8000", " ", " ", "jr., 6/27/90, his (verified for acetaldehyde, 11/08)"}, {"HCA3M", "-0.0240", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"CC321C", "-0.0560", "2.010", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC321D", "-0.0560", "2.010", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CC311C", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC311D", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"OC301", "-0.1000", "1.6500", " ", " ", "sng, all34_ethers_1a OC30A"}, {"OC302", "-0.1000", "1.6500", " ", " ", "sng, all34_ethers_1a OC30A"}, {"HCP1M", "-0.0460", "0.2245", " ", " ", "polar H, og, 1/20/06"}, {"OC311M", "-0.1921", "1.765", " ", " ", "and EtOH optimized, og, 1/20/06"}, {"OC3C5M", "-0.1000", "1.6500", " ", " ", "sng 1/06"}, {"CC322C", "-0.0600", "2.02", "-0.01", "1.9", "CPEN, cyclopentane, MD sim. 8/06 viv !from CCP2, THF viv"}, {"HCA2C2", "-0.0350", "1.3000", " ", " ", "11/16/04 viv"}, {"CC312C", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"HCA1C2", "-0.0450", "1.340", " ", " ", "1/5/05 igor"}, {"OC3C51", "-0.1000", "1.6500", " ", " ", "par_carb, OC3C5M"}, {"CC3152", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3051", "-0.0320", "2.000", "-0.01", "1.9", "cgenff CG301"}, {"CC3251", "-0.0600", "2.02", "-0.01", "1.9", "cyclopentane, THF"}, {"CC3151", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"CC3153", "-0.0320", "2.000", "-0.01", "1.9", "alkane,isobutane 1/5/05 viv"}, {"OC2DP", "-0.12", "1.70", " ", " ", " "}, {"OC312", "-0.1521", "1.77", " ", " ", " "}, {"OC30P", "-0.1521", "1.77", " ", " ", " "}, {"PC", "-0.585", "2.15", " ", " ", "Jr."}, {"SC", "-0.47", "2.1", " ", " ", " "}, {"CC312D", "-0.0320", "2.000", "-0.01", "1.9", "CC312C"}, {"OC303", "-0.1000", "1.6500", " ", " ", " "}, {"NC311", "-0.0450", "2.000", " ", " ", "aliphatic amines, xxwy"}}; Atomes-GNU-1.1.14/src/calc/force_fields/charmm36_cgenff.c000066400000000000000000032344471457665371200227270ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file charmm36_cgenff.c * @short CHARMM-charmm36_cgenff force field, from 'charmm36_cgenff' * @author Sébastien Le Roux */ /* * This file: 'charmm36_cgenff.c' * * Contains: * CHARMM-charmm36_cgenff force field, data from taken from: - the file: 'charmm36_cgenff' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_cgenff_atoms[163][5] Bonds : charmm36_cgenff_bonds[506][5] Angles : charmm36_cgenff_angles[1561][8] Dihedrals : charmm36_cgenff_dihedrals[3937][8] Impropers : charmm36_cgenff_impropers[125][8] Non bonded : charmm36_cgenff_vdw[156][6] */ #include "global.h" int charmm36_cgenff_objects[14] = {163, 0, 0, 506, 0, 0, 1561, 0, 3937, 0 , 0, 125, 156, 0}; int charmm36_cgenff_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_cgenff info */ char * charmm36_cgenff_atoms[163][5]= {{"H", "1.00800", "HGA1", "alphatic proton, CH", "256"}, {"H", "1.00800", "HGA2", "alphatic proton, CH2", "257"}, {"H", "1.00800", "HGA3", "alphatic proton, CH3", "258"}, {"H", "1.00800", "HGA4", "alkene proton; RHC=", "259"}, {"H", "1.00800", "HGA5", "alkene proton; H2C=CR", "260"}, {"H", "1.00800", "HGA6", "aliphatic H on fluorinated C, monofluoro", "261"}, {"H", "1.00800", "HGA7", "aliphatic H on fluorinated C, difluoro", "262"}, {"H", "1.00800", "HGAAM0", "aliphatic H, NEUTRAL trimethylamine (#)", "263"}, {"H", "1.00800", "HGAAM1", "aliphatic H, NEUTRAL dimethylamine (#)", "264"}, {"H", "1.00800", "HGAAM2", "aliphatic H, NEUTRAL methylamine (#)", "265"}, {"H", "1.00800", "HGP1", "polar H", "266"}, {"H", "1.00800", "HGP2", "polar H, +ve charge", "267"}, {"H", "1.00800", "HGP3", "polar H, thiol", "268"}, {"H", "1.00800", "HGP4", "polar H, neutral conjugated -NH2 group (NA bases)", "269"}, {"H", "1.00800", "HGP5", "polar H on quarternary ammonium salt (choline)", "270"}, {"H", "1.00800", "HGPAM1", "polar H, NEUTRAL dimethylamine (#), terminal alkyne H", "271"}, {"H", "1.00800", "HGPAM2", "polar H, NEUTRAL methylamine (#)", "272"}, {"H", "1.00800", "HGPAM3", "polar H, NEUTRAL ammonia (#)", "273"}, {"H", "1.00800", "HGR51", "nonpolar H, neutral 5-mem planar ring C, LJ based on benzene", "274"}, {"H", "1.00800", "HGR52", "Aldehyde H, formamide H (RCOH); nonpolar H, neutral 5-mem planar ring C adjacent to heteroatom or + charge", "275"}, {"H", "1.00800", "HGR53", "nonpolar H, +ve charge HIS he1(+1)", "276"}, {"H", "1.00800", "HGR61", "aromatic H", "277"}, {"H", "1.00800", "HGR62", "nonpolar H, neutral 6-mem planar ring C adjacent to heteroatom", "278"}, {"H", "1.00800", "HGR63", "nonpolar H, NAD+ nicotineamide all ring CH hydrogens", "279"}, {"H", "1.00800", "HGR71", "nonpolar H, neutral 7-mem arom ring, AZUL, azulene, kevo", "280"}, {"C", "12.01100", "CG1T1", "internal alkyne R-C#C", "281"}, {"C", "12.01100", "CG1T2", "terminal alkyne H-C#C", "282"}, {"C", "12.01100", "CG1N1", "C for cyano group", "283"}, {"C", "12.01100", "CG2D1", "alkene; RHC= ; imine C", "284"}, {"C", "12.01100", "CG2D2", "alkene; H2C=", "285"}, {"C", "12.01100", "CG2D1O", "double bond carbon adjacent to heteroatom. In conjugated systems, the atom to which it is double bonded must be CG2DC1.", "286"}, {"C", "12.01100", "CG2D2O", "double bond carbon adjacent to heteroatom. In conjugated systems, the atom to which it is double bonded must be CG2DC2.", "287"}, {"C", "12.01100", "CG2DC1", "conjugated alkenes, R2C=CR2", "288"}, {"C", "12.01100", "CG2DC2", "conjugated alkenes, R2C=CR2", "289"}, {"C", "12.01100", "CG2DC3", "conjugated alkenes, H2C=", "290"}, {"C", "12.01100", "CG2N1", "conjugated C in guanidine/guanidinium", "291"}, {"C", "12.01100", "CG2N2", "conjugated C in amidinium cation", "292"}, {"C", "12.01100", "CG2O1", "carbonyl C: amides", "293"}, {"C", "12.01100", "CG2O2", "carbonyl C: esters, [neutral] carboxylic acids", "294"}, {"C", "12.01100", "CG2O3", "carbonyl C: [negative] carboxylates", "295"}, {"C", "12.01100", "CG2O4", "carbonyl C: aldehydes", "296"}, {"C", "12.01100", "CG2O5", "carbonyl C: ketones", "297"}, {"C", "12.01100", "CG2O6", "carbonyl C: urea, carbonate", "298"}, {"C", "12.01100", "CG2O7", "CO2 carbon", "299"}, {"C", "12.01100", "CG2R51", "5-mem ring, his CG, CD2(0), trp", "300"}, {"C", "12.01100", "CG2R52", "5-mem ring, double bound to N, PYRZ, pyrazole", "301"}, {"C", "12.01100", "CG2R53", "5-mem ring, double bound to N and adjacent to another heteroatom, purine C8, his CE1 (0,+1), 2PDO, kevo", "302"}, {"C", "12.01100", "CG2R57", "5-mem ring, bipyrroles", "303"}, {"C", "12.01100", "CG25C1", "same as CG2DC1 but in 5-membered ring with exocyclic double bond", "304"}, {"C", "12.01100", "CG25C2", "same as CG2DC2 but in 5-membered ring with exocyclic double bond", "305"}, {"C", "12.01100", "CG251O", "same as CG2D1O but in 5-membered ring with exocyclic double bond", "306"}, {"C", "12.01100", "CG252O", "same as CG2D2O but in 5-membered ring with exocyclic double bond", "307"}, {"C", "12.01100", "CG2R61", "6-mem aromatic C", "308"}, {"C", "12.01100", "CG2R62", "6-mem aromatic C for protonated pyridine (NIC) and rings containing carbonyls (see CG2R63) (NA)", "309"}, {"C", "12.01100", "CG2R63", "6-mem aromatic amide carbon (NA) (and other 6-mem aromatic carbonyls?)", "310"}, {"C", "12.01100", "CG2R64", "6-mem aromatic amidine and guanidine carbon (between 2 or 3 Ns and double-bound to one of them), NA, PYRM", "311"}, {"C", "12.01100", "CG2R66", "6-mem aromatic carbon bound to F", "312"}, {"C", "12.01100", "CG2R67", "6-mem aromatic carbon of biphenyl", "313"}, {"C", "12.01100", "CG2RC0", "6/5-mem ring bridging C, guanine C4,C5, trp", "314"}, {"C", "12.01100", "CG2R71", "7-mem ring arom C, AZUL, azulene, kevo", "315"}, {"C", "12.01100", "CG2RC7", "sp2 ring connection with single bond(!), AZUL, azulene, kevo", "316"}, {"C", "12.01100", "CG301", "aliphatic C, no hydrogens, neopentane", "317"}, {"C", "12.01100", "CG302", "aliphatic C, no hydrogens, trifluoromethyl", "318"}, {"C", "12.01100", "CG311", "aliphatic C with 1 H, CH", "319"}, {"C", "12.01100", "CG312", "aliphatic C with 1 H, difluoromethyl", "320"}, {"C", "12.01100", "CG314", "aliphatic C with 1 H, adjacent to positive N (PROT NTER) (+)", "321"}, {"C", "12.01100", "CG321", "aliphatic C for CH2", "322"}, {"C", "12.01100", "CG322", "aliphatic C for CH2, monofluoromethyl", "323"}, {"C", "12.01100", "CG323", "aliphatic C for CH2, thiolate carbon", "324"}, {"C", "12.01100", "CG324", "aliphatic C for CH2, adjacent to positive N (piperidine) (+)", "325"}, {"C", "12.01100", "CG331", "aliphatic C for methyl group (-CH3)", "326"}, {"C", "12.01100", "CG334", "aliphatic C for methyl group (-CH3), adjacent to positive N (PROT NTER) (+)", "327"}, {"C", "12.01100", "CG3AM0", "aliphatic C for CH3, NEUTRAL trimethylamine methyl carbon (#)", "328"}, {"C", "12.01100", "CG3AM1", "aliphatic C for CH3, NEUTRAL dimethylamine methyl carbon (#)", "329"}, {"C", "12.01100", "CG3AM2", "aliphatic C for CH3, NEUTRAL methylamine methyl carbon (#)", "330"}, {"C", "12.01100", "CG3C31", "cyclopropyl carbon", "331"}, {"C", "12.01100", "CG3C41", "cyclobutyl carbon", "332"}, {"C", "12.01100", "CG3C50", "5-mem ring aliphatic quaternary C (cholesterol, bile acids)", "333"}, {"C", "12.01100", "CG3C51", "5-mem ring aliphatic CH (proline CA, furanoses)", "334"}, {"C", "12.01100", "CG3C52", "5-mem ring aliphatic CH2 (proline CB/CG/CD, THF, deoxyribose)", "335"}, {"C", "12.01100", "CG3C53", "5-mem ring aliphatic CH adjacent to positive N (proline.H+ CA) (+)", "336"}, {"C", "12.01100", "CG3C54", "5-mem ring aliphatic CH2 adjacent to positive N (proline.H+ CD) (+)", "337"}, {"C", "12.01100", "CG3RC1", "bridgehead in bicyclic systems containing at least one 5-membered or smaller ring", "338"}, {"N", "14.00700", "NG1T1", "N for cyano group", "339"}, {"N", "14.00700", "NG1D1", "terminal N in azides, lsk", "340"}, {"N", "14.00700", "NG2D1", "N for neutral imine/Schiff's base (C=N-R, acyclic amidine, gunaidine)", "341"}, {"N", "14.00700", "NG2S0", "N,N-disubstituted amide, proline N (CO=NRR')", "342"}, {"N", "14.00700", "NG2S1", "peptide nitrogen (CO=NHR)", "343"}, {"N", "14.00700", "NG2S2", "terminal amide nitrogen (CO=NH2)", "344"}, {"N", "14.00700", "NG2S3", "external amine ring nitrogen (planar/aniline), phosphoramidate", "345"}, {"N", "14.00700", "NG2S4", "neutral hydroxamic acid", "346"}, {"N", "14.00700", "NG2O1", "NITB, nitrobenzene", "347"}, {"N", "14.00700", "NG2P1", "N for protonated imine/Schiff's base (C=N(+)H-R, acyclic amidinium, guanidinium)", "348"}, {"N", "14.00700", "NG2R43", "amide in 4-memebered ring (planar), AZDO, lsk", "349"}, {"N", "14.00700", "NG2R50", "double bound neutral 5-mem planar ring, purine N7", "350"}, {"N", "14.00700", "NG2R51", "single bound neutral 5-mem planar (all atom types sp2) ring, his, trp pyrrole (fused)", "351"}, {"N", "14.00700", "NG2R52", "protonated schiff base, amidinium, guanidinium in 5-membered ring, HIS, 2HPP, kevo", "352"}, {"N", "14.00700", "NG2R53", "amide in 5-memebered NON-SP2 ring (slightly pyramidized), 2PDO, kevo", "353"}, {"N", "14.00700", "NG2R57", "5-mem ring, bipyrroles", "354"}, {"N", "14.00700", "NG2R60", "double bound neutral 6-mem planar ring, pyr1, pyzn", "355"}, {"N", "14.00700", "NG2R61", "single bound neutral 6-mem planar ring imino nitrogen; glycosyl linkage", "356"}, {"N", "14.00700", "NG2R62", "double bound 6-mem planar ring with heteroatoms in o or m, pyrd, pyrm", "357"}, {"N", "14.00700", "NG2R67", "6-mem planar ring substituted with 6-mem planar ring (N-phenyl pyridinones etc.)", "358"}, {"N", "14.00700", "NG2RC0", "6/5-mem ring bridging N, indolizine, INDZ, kevo", "359"}, {"N", "14.00700", "NG301", "neutral trimethylamine nitrogen", "360"}, {"N", "14.00700", "NG311", "neutral dimethylamine nitrogen", "361"}, {"N", "14.00700", "NG321", "neutral methylamine nitrogen", "362"}, {"N", "14.00700", "NG331", "neutral ammonia nitrogen", "363"}, {"N", "14.00700", "NG3C51", "secondary sp3 amine in 5-membered ring", "364"}, {"N", "14.00700", "NG3N1", "N in hydrazine, HDZN", "365"}, {"N", "14.00700", "NG3P0", "quarternary N+, choline", "366"}, {"N", "14.00700", "NG3P1", "tertiary NH+ (PIP)", "367"}, {"N", "14.00700", "NG3P2", "secondary NH2+ (proline)", "368"}, {"N", "14.00700", "NG3P3", "primary NH3+, phosphatidylethanolamine", "369"}, {"O", "15.99940", "OG2D1", "carbonyl O: amides, esters, [neutral] carboxylic acids, aldehydes, uera", "370"}, {"O", "15.99940", "OG2D2", "carbonyl O: negative groups: carboxylates, carbonate", "371"}, {"O", "15.99940", "OG2D3", "carbonyl O: ketones", "372"}, {"O", "15.99940", "OG2D4", "6-mem aromatic carbonyl oxygen (nucleic bases)", "373"}, {"O", "15.99940", "OG2D5", "CO2 oxygen", "374"}, {"O", "15.99940", "OG2N1", "NITB, nitrobenzene", "375"}, {"O", "15.99940", "OG2P1", "=O in phosphate or sulfate", "376"}, {"O", "15.99940", "OG2R50", "FURA, furan", "377"}, {"O", "15.99940", "OG3R60", "O in 6-mem cyclic enol ether (PY01, PY02) or ester", "378"}, {"O", "15.99940", "OG301", "ether -O- !SHOULD WE HAVE A SEPARATE ENOL ETHER??? IF YES, SHOULD WE MERGE IT WITH OG3R60???", "379"}, {"O", "15.99940", "OG302", "ester -O-", "380"}, {"O", "15.99940", "OG303", "phosphate/sulfate ester oxygen", "381"}, {"O", "15.99940", "OG304", "linkage oxygen in pyrophosphate/pyrosulphate", "382"}, {"O", "15.99940", "OG311", "hydroxyl oxygen", "383"}, {"O", "15.99940", "OG312", "ionized alcohol oxygen", "384"}, {"O", "15.99940", "OG3C31", "epoxide oxygen, 1EOX, 1BOX, sc", "385"}, {"O", "15.99940", "OG3C51", "5-mem furanose ring oxygen (ether)", "386"}, {"O", "15.99940", "OG3C61", "DIOX, dioxane, ether in 6-membered ring !SHOULD WE MERGE THIS WITH OG3R60???", "387"}, {"S", "32.06000", "SG2D1", "thiocarbonyl S", "388"}, {"S", "32.06000", "SG2R50", "THIP, thiophene", "389"}, {"S", "32.06000", "SG311", "sulphur, SH, -S-", "390"}, {"S", "32.06000", "SG301", "sulfur C-S-S-C type", "391"}, {"S", "32.06000", "SG302", "thiolate sulfur (-1)", "392"}, {"S", "32.06000", "SG3O1", "sulfate -1 sulfur", "393"}, {"S", "32.06000", "SG3O2", "neutral sulfone/sulfonamide sulfur", "394"}, {"S", "32.06000", "SG3O3", "neutral sulfoxide sulfur", "395"}, {"C", "35.45300", "CLGA1", "CLET, DCLE, chloroethane, 1,1-dichloroethane", "396"}, {"C", "35.45300", "CLGA3", "TCLE, 1,1,1-trichloroethane", "397"}, {"C", "35.45300", "CLGR1", "CHLB, chlorobenzene", "398"}, {"Br", "79.90400", "BRGA1", "BRET, bromoethane", "399"}, {"Br", "79.90400", "BRGA2", "DBRE, 1,1-dibromoethane", "400"}, {"Br", "79.90400", "BRGA3", "TBRE, 1,1,1-dibromoethane", "401"}, {"Br", "79.90400", "BRGR1", "BROB, bromobenzene", "402"}, {"I", "126.90447", "IGR1", "IODB, iodobenzene", "403"}, {"F", "18.99800", "FGA1", "aliphatic fluorine, monofluoro", "404"}, {"F", "18.99800", "FGA2", "aliphatic fluorine, difluoro", "405"}, {"F", "18.99800", "FGA3", "aliphatic fluorine, trifluoro", "406"}, {"F", "18.99800", "FGP1", "anionic F, for ALF4 AlF4-", "407"}, {"F", "18.99800", "FGR1", "aromatic flourine", "408"}, {"P", "30.97380", "PG0", "neutral phosphate", "409"}, {"P", "30.97380", "PG1", "phosphate -1", "410"}, {"P", "30.97380", "PG2", "phosphate -2", "411"}, {"Al", "26.98154", "ALG1", "Aluminum, for ALF4, AlF4-", "412"}, {"H", "1.00800", "HGTIP3", "polar H, TIPS3P WATER HYDROGEN", "414"}, {"O", "15.99940", "OGTIP3", "TIPS3P WATER OXYGEN", "415"}, {"D", "0.00000", "DUM", "dummy atom", "416"}, {"He", "4.00260", "HE", "helium", "417"}, {"Ne", "20.17970", "NE", "neon", "418"}, {"LP", "0.00000", "LPH", "Lone pair for halogens", "457"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_cgenff info V(R) = Kb x (R - R0)^2 */ char * charmm36_cgenff_bonds[506][5]= {{"LPH", "CLGR1", "0.00", "0.0000", "aromatic halogen to lone pair"}, {"LPH", "BRGR1", "0.00", "0.0000", "aromatic halogen to lone pair"}, {"LPH", "IGR1", "0.00", "0.0000", "aromatic halogen to lone pair"}, {"CG1N1", "CG2R61", "345.00", "1.4350", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) (MP2 by kevo)"}, {"CG1N1", "CG331", "400.00", "1.4700", "ACN, acetonitrile, kevo"}, {"CG1N1", "NG1T1", "1053.00", "1.1800", "ACN, acetonitrile; 3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) (MP2 by kevo)"}, {"CG1T1", "CG1T1", "960.00", "1.2200", "2BTY, 2-butyne, kevo"}, {"CG1T1", "CG1T2", "980.00", "1.2200", "PRPY, propyne, kevo"}, {"CG1T1", "CG331", "410.00", "1.4650", "2BTY, 2-butyne, kevo"}, {"CG1T2", "HGPAM1", "426.00", "1.0700", "PRPY, propyne, xxwy and kevo"}, {"CG251O", "CG25C1", "440.00", "1.3400", "OIRD, oxindol-3-ylidene rhodanine; from PY02, 2h-pyran (re-optimize); kevo"}, {"CG251O", "CG2DC3", "570.00", "1.3400", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG2R53", "255.00", "1.4800", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "NG2R53", "200.00", "1.4100", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG251O", "SG311", "200.00", "1.7700", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "440.00", "1.3400", "OIRD, oxindol-3-ylidene rhodanine; from PY02, 2h-pyran (re-optimize); kevo"}, {"CG252O", "CG2DC3", "570.00", "1.3400", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "255.00", "1.4800", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "NG2R53", "200.00", "1.4100", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG252O", "SG311", "200.00", "1.7700", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG2DC3", "500.00", "1.3420", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG25C1", "CG2R53", "247.00", "1.4900", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2RC0", "290.00", "1.4800", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2DC3", "500.00", "1.3420", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG25C2", "CG2R53", "247.00", "1.4900", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "290.00", "1.4800", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2D1", "CG2D1", "440.00", "1.3400", "LIPID butene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D1O", "440.00", "1.3180", "PY01, 4h-pyran"}, {"CG2D1", "CG2D2", "500.00", "1.3420", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D2O", "440.00", "1.3180", "PY01, 4h-pyran"}, {"CG2D1", "CG301", "240.00", "1.5020", "CHOLEST cholesterol"}, {"CG2D1", "CG321", "365.00", "1.5020", "LIPID butene; from propene, yin,adm jr., 12/95"}, {"CG2D1", "CG331", "383.00", "1.5040", "LIPID butene, yin,adm jr., 12/95"}, {"CG2D1", "NG2D1", "500.00", "1.2760", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2D1", "NG2P1", "470.00", "1.2830", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D1", "HGA4", "360.50", "1.1000", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1", "HGR52", "360.50", "1.1000", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D1O", "CG2D2", "600.00", "1.3400", "MOET, Methoxyethene, xxwy"}, {"CG2D1O", "CG2DC1", "440.00", "1.3400", "PY02, 2h-pyran"}, {"CG2D1O", "NG301", "420.00", "1.3550", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG311", "420.00", "1.3550", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG321", "420.00", "1.4000", "AMET, ethenamine; mp2-geom, checked molvib; pram"}, {"CG2D1O", "OG301", "385.00", "1.3600", "MOET, Methoxyethene, xxwy"}, {"CG2D1O", "OG3R60", "500.00", "1.3470", "PY01, 4h-pyran"}, {"CG2D1O", "HGA4", "360.50", "1.1000", "PY01, 4h-pyran"}, {"CG2D2", "CG2D2", "510.00", "1.3300", "LIPID ethene yin,adm jr., 12/95"}, {"CG2D2", "CG2D2O", "600.00", "1.3400", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "HGA5", "365.00", "1.1000", "LIPID propene; from ethene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2DC2", "440.00", "1.3400", "PY02, 2h-pyran"}, {"CG2D2O", "NG301", "420.00", "1.3550", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG311", "420.00", "1.3550", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG321", "420.00", "1.4000", "AMET, ethenamine; mp2-geom, checked molvib; pram"}, {"CG2D2O", "OG301", "385.00", "1.3600", "MOET, Methoxyethene, xxwy"}, {"CG2D2O", "OG3R60", "500.00", "1.3470", "PY01, 4h-pyran"}, {"CG2D2O", "HGA4", "360.50", "1.1000", "PY01, 4h-pyran"}, {"CG2DC1", "CG2DC1", "440.00", "1.3400", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "CG2DC2", "300.00", "1.4500", "RETINOL 13DB, Butadiene @@@@@ Kenno: 1.47 --> 1.45 @@@@@"}, {"CG2DC1", "CG2DC3", "500.00", "1.3420", "RETINOL 13DB, Butadiene"}, {"CG2DC1", "CG2O1", "440.00", "1.4890", "RETINOL CROT"}, {"CG2DC1", "CG2O3", "440.00", "1.4890", "RETINOL PRAC"}, {"CG2DC1", "CG2O4", "300.00", "1.4798", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2O5", "300.00", "1.4800", "BEON, butenone, kevo"}, {"CG2DC1", "CG2R61", "365.00", "1.4500", "compromise between HDZ1B and STYR by kevo"}, {"CG2DC1", "CG301", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC1", "CG321", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC1", "CG331", "383.00", "1.5040", "RETINOL 13DP, 1,3-pentadiene"}, {"CG2DC1", "NG2D1", "500.00", "1.2760", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2DC1", "NG2P1", "470.00", "1.2830", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "HGA4", "360.50", "1.1000", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "HGR52", "360.50", "1.1000", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "CG2DC2", "440.00", "1.3400", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG2DC3", "500.00", "1.3420", "RETINOL 13DB, Butadiene"}, {"CG2DC2", "CG2O1", "440.00", "1.4890", "RETINOL CROT"}, {"CG2DC2", "CG2O3", "440.00", "1.4890", "RETINOL PRAC"}, {"CG2DC2", "CG2O4", "300.00", "1.4798", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2O5", "300.00", "1.4800", "BEON, butenone, kevo"}, {"CG2DC2", "CG2R61", "365.00", "1.4500", "compromise between HDZ1B and STYR by kevo"}, {"CG2DC2", "CG301", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC2", "CG321", "365.00", "1.5020", "RETINOL MECH"}, {"CG2DC2", "CG331", "383.00", "1.5040", "RETINOL 13DP, 1,3-pentadiene"}, {"CG2DC2", "NG2D1", "500.00", "1.2760", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2DC2", "NG2P1", "470.00", "1.2830", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "HGA4", "360.50", "1.1000", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "HGR52", "360.50", "1.1000", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC3", "HGA5", "365.00", "1.1000", "RETINOL BTE2, 2-butene"}, {"CG2N1", "NG2D1", "500.00", "1.3100", "MGU1, methylguanidine"}, {"CG2N1", "NG2P1", "463.00", "1.3650", "PROT 403.0->463.0, 1.305->1.365 guanidinium (KK)"}, {"CG2N1", "NG311", "500.00", "1.4400", "MGU2, methylguanidine2"}, {"CG2N1", "NG321", "450.00", "1.4400", "MGU1, methylguanidine"}, {"CG2N2", "CG2R61", "300.00", "1.4400", "BAMI, benzamidinium, mp2 geom and molvib, pram"}, {"CG2N2", "CG331", "280.00", "1.5000", "AMDN, amidinium, sz (verified by pram)"}, {"CG2N2", "NG2D1", "621.00", "1.2900", "MT2A, DH3T, fylin"}, {"CG2N2", "NG2P1", "475.00", "1.3200", "AMDN, amidinium; BAMI, benzamidinium; mp2 geom and molvib; pram"}, {"CG2N2", "NG321", "365.00", "1.4200", "MT2A, DH3T, fylin"}, {"CG2N2", "SG311", "187.00", "1.7900", "MT2R(+), HH3R, MT2A, DH3T, fylin"}, {"CG2O1", "CG2R61", "300.00", "1.4750", "3NAP, nicotamide. kevo: 1.45 -> 1.475"}, {"CG2O1", "CG2R62", "302.00", "1.4800", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2O1", "CG311", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG314", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG321", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG324", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG331", "250.00", "1.4900", "PROT Ala Dipeptide (5/91)"}, {"CG2O1", "CG3C51", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "NG2S0", "430.00", "1.3500", "DMA, Dimethylacetamide, xxwy"}, {"CG2O1", "NG2S1", "370.00", "1.3450", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "NG2S2", "430.00", "1.3600", "PROT from NG2S2 CT3, neutral glycine, adm jr."}, {"CG2O1", "OG2D1", "620.00", "1.2300", "PROT Peptide geometry, condensed phase (LK)"}, {"CG2O1", "HGR52", "317.13", "1.1000", "FORM, formamide reverted to value from par_all22_prot.inp and par_cgenff_1d.inp"}, {"CG2O2", "CG2R61", "254.00", "1.4800", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"CG2O2", "CG311", "200.00", "1.5220", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "200.00", "1.5220", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG331", "200.00", "1.5220", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "OG2D1", "750.00", "1.2200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG2O2", "OG302", "150.00", "1.3340", "LIPID methyl acetate"}, {"CG2O2", "OG311", "230.00", "1.4000", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "HGR52", "348.00", "1.0960", "FORH, formic acid, xxwy"}, {"CG2O3", "CG2O5", "250.00", "1.5200", "COMPDS peml unmodified"}, {"CG2O3", "CG2R61", "200.00", "1.5000", "3CPY, pyridine-3-carboxylate (PYRIDINE nicotinic acid), yin"}, {"CG2O3", "CG301", "200.00", "1.5220", "AMOL, alpha-methoxy-lactic acid, og par22 CT1 CC"}, {"CG2O3", "CG311", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG324", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG331", "200.00", "1.5220", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG3C51", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "250.00", "1.4900", "PROT 6-31g* AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "OG2D2", "525.00", "1.2600", "PROT adm jr. 7/23/91, acetic acid"}, {"CG2O3", "HGR52", "238.00", "1.1422", "FORA, formate, kevo"}, {"CG2O4", "CG2R61", "300.00", "1.4798", "ALDEHYDE benzaldehyde unmodified"}, {"CG2O4", "CG321", "250.00", "1.5000", "PALD, propionaldehyde from AALD adm 11/08"}, {"CG2O4", "CG331", "250.00", "1.5000", "AALD, acetaldehyde adm 11/08"}, {"CG2O4", "OG2D1", "700.00", "1.2150", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG2O4", "HGR52", "330.00", "1.1100", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG2O5", "CG2R61", "254.00", "1.4600", "3ACP, 3-acetylpyridine; BF6 BF7 C36 C37; PHMK, phenyl methyl ketone, mcs"}, {"CG2O5", "CG311", "330.00", "1.5000", "COMPDS peml re-initialized by kevo from ACO adm 11/08"}, {"CG2O5", "CG321", "330.00", "1.5000", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2O5", "CG331", "330.00", "1.5000", "ACO, acetone adm 11/08"}, {"CG2O5", "OG2D3", "700.00", "1.2300", "ACO, acetone adm 11/08"}, {"CG2O6", "NG2S1", "510.00", "1.3700", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"CG2O6", "NG2S2", "430.00", "1.3600", "UREA, Urea. Uses a slack parameter from PROT from NG2S2 CT3, neutral glycine, adm jr. ==> re-optimize"}, {"CG2O6", "OG2D1", "650.00", "1.2300", "UREA, Urea. Uses a slack parameter from PROT adm jr. 4/10/91, acetamide ==> re-optimize"}, {"CG2O6", "OG2D2", "314.50", "1.2940", "PROTMOD carbonate"}, {"CG2O6", "OG302", "350.00", "1.3500", "DMCB and DECB and DMCA, dimethyl and diehtyl carbamate and dimethyl carbonate, cacha and kevo and xxwy"}, {"CG2O6", "OG311", "185.00", "1.4800", "CO31, bicarbonate, xxwy"}, {"CG2O6", "SG2D1", "300.00", "1.6300", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2O6", "SG311", "190.00", "1.7500", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2O7", "NG2D1", "920.00", "1.1900", "MICY, EICY: isocyanates, xxwy (QM: 1.216; Crystal survey: 1.183)"}, {"CG2O7", "OG2D5", "986.00", "1.1700", "PROT CO2, JES; re-optimized by kevo (1.160); compromised with isocyanate, both crystal survey and QM data, kevo and xxwy"}, {"CG2R51", "CG2R51", "410.00", "1.3600", "PROT histidine, adm jr., 6/27/90"}, {"CG2R51", "CG2R52", "360.00", "1.4000", "PYRZ, pyrazole"}, {"CG2R51", "CG2R53", "264.00", "1.5080", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R57", "410.00", "1.3600", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51; lf"}, {"CG2R51", "CG2RC0", "350.00", "1.4300", "INDO/TRP"}, {"CG2R51", "CG2RC7", "340.00", "1.4050", "AZUL, Azulene, kevo"}, {"CG2R51", "CG321", "229.63", "1.5000", "PROT his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CG2R51", "CG331", "229.63", "1.5000", "PROT his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CG2R51", "CG3C52", "350.00", "1.5100", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline; 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C54", "325.00", "1.4960", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "NG2R50", "400.00", "1.3800", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "NG2R51", "400.00", "1.3800", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "NG2R52", "380.00", "1.3700", "PROT his, adm jr., 6/28/90"}, {"CG2R51", "NG2R57", "400.00", "1.3800", "13BPO, 1,3-bipyrrole; from CG2R51 NG2R51; lf"}, {"CG2R51", "NG2RC0", "400.00", "1.3710", "INDZ, indolizine, kevo"}, {"CG2R51", "NG3C51", "360.00", "1.4120", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "NG3P2", "330.00", "1.4800", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "OG2R50", "450.00", "1.3710", "FURA, furan"}, {"CG2R51", "OG3C51", "360.00", "1.3700", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "SG2R50", "300.00", "1.7300", "THIP, thiophene"}, {"CG2R51", "HGR51", "350.00", "1.0800", "INDO/TRP"}, {"CG2R51", "HGR52", "375.00", "1.0830", "PROT his, adm jr., 6/27/90"}, {"CG2R52", "CG2R52", "400.00", "1.3800", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2R52", "CG2RC0", "360.00", "1.4200", "INDA, 1H-indazole, kevo"}, {"CG2R52", "CG3C52", "350.00", "1.5050", "2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R50", "400.00", "1.3150", "PYRZ, pyrazole; 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R52", "490.00", "1.3000", "2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R52", "HGR52", "375.00", "1.0830", "PYRZ, pyrazole"}, {"CG2R53", "CG3C41", "200.00", "1.5600", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "CG3C52", "300.00", "1.5300", "350 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "NG2R43", "370.00", "1.3800", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "NG2R50", "400.00", "1.3200", "PROT his, ADM JR., 7/20/89"}, {"CG2R53", "NG2R51", "320.00", "1.3740", "NA A, adm jr. 11/97"}, {"CG2R53", "NG2R52", "380.00", "1.3200", "PROT his, adm jr., 6/27/90"}, {"CG2R53", "NG2R53", "460.00", "1.3800", "370 *NEW* 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "NG3C51", "380.00", "1.4000", "1.395 2IMI, 2-imidazoline, kevo"}, {"CG2R53", "OG2D1", "570.00", "1.2350", "620 *NEW* 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "OG2R50", "450.00", "1.3710", "OXAZ, oxazole"}, {"CG2R53", "OG3C51", "295.50", "1.3570", "GBL, Gamma-butyrolactone, ctsai and kevo"}, {"CG2R53", "SG2D1", "400.00", "1.6300", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "SG2R50", "300.00", "1.7300", "THAZ, thiazole"}, {"CG2R53", "SG311", "170.00", "1.7700", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "HGR52", "340.00", "1.0900", "PROT his, adm jr., 6/28/29"}, {"CG2R53", "HGR53", "333.00", "1.0700", "PROT his, adm jr., 6/27/90"}, {"CG2R57", "CG2R57", "413.00", "1.4500", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R57", "NG2R57", "390.00", "1.3950", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R61", "CG2R61", "305.00", "1.3750", "PROT benzene, JES 8/25/89"}, {"CG2R61", "CG2R62", "394.00", "1.3750", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R63", "265.00", "1.4270", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R64", "250.00", "1.3550", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R66", "305.00", "1.3700", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R67", "305.00", "1.3750", "COMPDS peml"}, {"CG2R61", "CG2RC0", "300.00", "1.3600", "INDO/TRP"}, {"CG2R61", "CG311", "230.00", "1.4900", "NAMODEL difluorotoluene"}, {"CG2R61", "CG312", "198.00", "1.4500", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG321", "230.00", "1.4900", "PROT phe,tyr, JES 8/25/89"}, {"CG2R61", "CG324", "230.00", "1.4900", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG331", "230.00", "1.4900", "PROT toluene, adm jr. 3/7/92"}, {"CG2R61", "NG2O1", "230.00", "1.4020", "NITB, nitrobenzene"}, {"CG2R61", "NG2R60", "450.00", "1.3050", "PYR1, pyridine"}, {"CG2R61", "NG2R61", "380.00", "1.3790", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "NG2R62", "450.00", "1.3050", "PYRD, pyridazine"}, {"CG2R61", "NG2RC0", "370.00", "1.3790", "INDZ, indolizine, kevo"}, {"CG2R61", "NG2S1", "305.00", "1.4140", "RETINOL PACP"}, {"CG2R61", "NG2S3", "400.00", "1.3900", "PYRIDINE aminopyridine, adm jr., 7/94"}, {"CG2R61", "NG301", "325.00", "1.4100", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "NG311", "330.00", "1.4000", "FEOZ, phenoxazine; PMSM N-phenylmethanesulfonamide; xxwy"}, {"CG2R61", "NG3N1", "680.00", "1.4100", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "OG301", "230.00", "1.3820", "COMPDS peml"}, {"CG2R61", "OG303", "340.00", "1.3800", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG311", "334.30", "1.4110", "PROT MeOH, EMB 10/10/89,"}, {"CG2R61", "OG312", "525.00", "1.2600", "PROT adm jr. 8/27/91, phenoxide"}, {"CG2R61", "OG3R60", "280.00", "1.3500", "FEOZ, phenoxazine, erh based on PY02, 2h-pyran"}, {"CG2R61", "SG311", "280.00", "1.7500", "FETZ, phenothiazine, erh based on PY02, 2h-pyran"}, {"CG2R61", "SG3O1", "230.00", "1.7800", "benzene sulfonate anion, og"}, {"CG2R61", "SG3O2", "190.00", "1.7300", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CG2R61", "CLGR1", "350.00", "1.7400", "CHLB, chlorobenzene"}, {"CG2R61", "BRGR1", "230.00", "1.9030", "BROB, bromobenzene"}, {"CG2R61", "IGR1", "190.00", "2.1150", "IODB, iodobenzene"}, {"CG2R61", "HGR61", "340.00", "1.0800", "PROT phe,tyr JES 8/25/89"}, {"CG2R61", "HGR62", "340.00", "1.0800", "NA, DFT"}, {"CG2R62", "CG2R62", "420.00", "1.3500", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R63", "302.00", "1.4030", "NA T, adm jr. 11/97"}, {"CG2R62", "CG2R64", "320.00", "1.4060", "NA C, adm jr. 11/97"}, {"CG2R62", "CG2R67", "305.00", "1.3800", "PYO2B, fylin"}, {"CG2R62", "CG331", "230.00", "1.4780", "NA T, adm jr. 11/97"}, {"CG2R62", "NG2R61", "302.00", "1.3430", "NA C, adm jr. 11/97"}, {"CG2R62", "NG2R62", "340.00", "1.3650", "TC243C, 4(3H)-quinazolinone; from CG2R61 NG2R62; isg"}, {"CG2R62", "NG2R67", "302.00", "1.3430", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R61 CG2R61; isg"}, {"CG2R62", "OG3R60", "330.00", "1.3700", "RIN, coumarin, isg"}, {"CG2R62", "HGR62", "350.00", "1.0900", "NA C,U, JWK"}, {"CG2R62", "HGR63", "350.00", "1.0900", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R63", "CG2RC0", "302.00", "1.3600", "NA G, adm jr. 11/97"}, {"CG2R63", "NG2R61", "340.00", "1.3830", "NA U,T adm jr. 11/97"}, {"CG2R63", "NG2R62", "350.00", "1.3350", "NA C, adm jr. 11/97"}, {"CG2R63", "NG2R67", "302.00", "1.3430", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from NG2R67 CG2R62, 1PH4PO; isg"}, {"CG2R63", "OG2D4", "660.00", "1.2340", "NA U,A,G par_a4 adm jr. 10/2/91"}, {"CG2R63", "OG3R60", "235.00", "1.4000", "RIN, coumarin, isg"}, {"CG2R63", "SG2D1", "373.00", "1.6550", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R64", "CG2RC0", "360.00", "1.3580", "NA A, adm jr. 11/97"}, {"CG2R64", "NG2R60", "450.00", "1.3050", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R64", "NG2R61", "400.00", "1.3920", "NA G"}, {"CG2R64", "NG2R62", "400.00", "1.3420", "NA A, adm jr. 11/97"}, {"CG2R64", "NG2R67", "400.00", "1.3920", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R64 NG2R61, NA; isg"}, {"CG2R64", "NG2S1", "305.00", "1.4140", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG2R64", "NG2S3", "360.00", "1.3660", "NA C,A,G JWK, adm jr. 10/2/91"}, {"CG2R64", "NG301", "390.00", "1.3550", "TMC, yxu"}, {"CG2R64", "SG311", "262.00", "1.7410", "2SMPYR, 2-(methylthio)-pyrimidine; from CG2R61 SG311, 4O2SM; isg"}, {"CG2R64", "HGR62", "380.00", "1.0900", "NA G,A, JWK par_a7 9/30/91"}, {"CG2R66", "CG2R67", "305.00", "1.3800", "PYO2F, fylin"}, {"CG2R66", "FGR1", "400.00", "1.3580", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R67", "300.00", "1.4900", "COMPDS peml"}, {"CG2R67", "CG2RC0", "300.00", "1.4200", "CRBZ, carbazole, erh"}, {"CG2R67", "NG2R60", "450.00", "1.3100", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R67", "NG2R67", "403.00", "1.4110", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R61 CG2R61; isg"}, {"CG2R71", "CG2R71", "360.00", "1.3850", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2RC7", "400.00", "1.3800", "AZUL, Azulene, kevo"}, {"CG2R71", "HGR71", "355.00", "1.0900", "AZUL, Azulene, kevo"}, {"CG2RC0", "CG2RC0", "360.00", "1.3850", "INDO/TRP"}, {"CG2RC0", "CG3C52", "305.00", "1.5200", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "NG2R50", "310.00", "1.3650", "NA G, adm jr. 11/97"}, {"CG2RC0", "NG2R51", "300.00", "1.3750", "NA A, adm jr. 11/97"}, {"CG2RC0", "NG2R62", "350.00", "1.3150", "NA G, adm jr. 11/97"}, {"CG2RC0", "NG2RC0", "245.00", "1.4170", "INDZ, indolizine, kevo"}, {"CG2RC0", "NG3C51", "330.00", "1.4000", "INDI, indoline, kevo"}, {"CG2RC0", "OG2R50", "450.00", "1.3700", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "OG3C51", "330.00", "1.3890", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG2RC0", "SG2R50", "300.00", "1.7600", "ZTHP, benzothiophene, kevo"}, {"CG2RC7", "CG2RC7", "230.00", "1.5200", "AZUL, Azulene, kevo"}, {"CG301", "CG311", "222.50", "1.5000", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG301", "CG321", "222.50", "1.5380", "RETINOL TMCH/MECH"}, {"CG301", "CG331", "222.50", "1.5380", "RETINOL TMCH/MECH"}, {"CG301", "OG301", "360.00", "1.4150", "AMOL, alpha-methoxy-lactic acid, og all34_ethers_1a CG32A OG30A"}, {"CG301", "OG302", "340.00", "1.4300", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide"}, {"CG301", "OG311", "428.00", "1.4200", "AMOL, alpha-methoxy-lactic acid, og par22 OH1 CT1"}, {"CG301", "CLGA3", "190.00", "1.7700", "TCLE"}, {"CG301", "BRGA3", "120.00", "1.9540", "TBRE"}, {"CG302", "CG321", "250.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG302", "CG331", "250.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG302", "FGA3", "265.00", "1.3400", "FLUROALK fluoroalkanes"}, {"CG311", "CG311", "222.50", "1.5000", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG314", "222.50", "1.5000", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG324", "222.50", "1.5300", "FLAVOP PIP1,2,3"}, {"CG311", "CG331", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG3C51", "222.50", "1.5280", "TF2M, viv"}, {"CG311", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG311", "NG2R53", "320.00", "1.4300", "drug design project, xxwy"}, {"CG311", "NG2S1", "320.00", "1.4300", "PROT NMA Gas and Liquid Phase IR Spectra (LK)"}, {"CG311", "OG301", "360.00", "1.4150", "all34_ethers_1a CG32A OG30A, gk or og"}, {"CG311", "OG302", "340.00", "1.4300", "LIPID phosphate"}, {"CG311", "OG303", "340.00", "1.4300", "LIPID phosphate"}, {"CG311", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG311", "OG312", "358.00", "1.3130", "COMPDS peml original OG311 CG311 428.000 1.4200"}, {"CG311", "CLGA1", "190.00", "1.7768", "DCLE"}, {"CG311", "BRGA2", "140.00", "1.9560", "DBRE"}, {"CG311", "HGA1", "309.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG312", "CG331", "198.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG312", "PG1", "270.00", "1.8800", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG312", "PG2", "270.00", "1.8800", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG312", "FGA2", "349.00", "1.3530", "FLUROALK fluoroalkanes"}, {"CG312", "HGA7", "346.00", "1.0828", "FLUROALK fluoroalkanes"}, {"CG314", "CG321", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG331", "222.50", "1.5380", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "NG3P2", "200.00", "1.4900", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG314", "NG3P3", "200.00", "1.4800", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG314", "HGA1", "309.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "222.50", "1.5300", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG324", "222.50", "1.5300", "FLAVOP PIP1,2,3"}, {"CG321", "CG331", "222.50", "1.5280", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG3C31", "275.00", "1.5000", "1BOX, 1-butene oxide, sc"}, {"CG321", "CG3C51", "222.50", "1.5280", "TF2M, viv"}, {"CG321", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG321", "NG2D1", "293.00", "1.4400", "EEPI, fylin"}, {"CG321", "NG2R51", "400.00", "1.4580", "ETRZ, 1-Ethyl-1,2,3-triazole, from CG331 NG2R51, kevo"}, {"CG321", "NG2S1", "320.00", "1.4300", "PROT NMA Gas and Liquid Phase IR Spectra (LK)"}, {"CG321", "NG2S3", "322.00", "1.4400", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG321", "NG311", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG321", "NG321", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG321", "OG301", "360.00", "1.4150", "diethylether, alex"}, {"CG321", "OG302", "320.00", "1.4400", "PROTNA serine/threonine phosphate"}, {"CG321", "OG303", "320.00", "1.4400", "PROTNA serine/threonine phosphate"}, {"CG321", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG321", "OG312", "450.00", "1.3300", "PROT ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG321", "OG3C61", "360.00", "1.4150", "DIOX, dioxane"}, {"CG321", "OG3R60", "280.00", "1.4000", "PY02, 2h-pyran"}, {"CG321", "PG1", "270.00", "1.8900", "BDFP, Benzylphosphonate, Sasha re-optimize?"}, {"CG321", "PG2", "270.00", "1.8900", "BDFD, Benzylphosphonate, Sasha / re-optimize?"}, {"CG321", "SG301", "214.00", "1.8160", "PROT improved CSSC torsion in DMDS 5/15/92 (FL)"}, {"CG321", "SG311", "198.00", "1.8180", "PROT fitted to C-S s 9/26/92 (FL)"}, {"CG321", "SG3O1", "185.00", "1.8070", "ESNA, ethyl sulfonate, xhe"}, {"CG321", "SG3O2", "185.00", "1.7900", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG321", "SG3O3", "185.00", "1.8100", "MESO, methylethylsulfoxide, kevo"}, {"CG321", "CLGA1", "220.00", "1.7880", "CLET, chloroethane"}, {"CG321", "BRGA1", "160.00", "1.9660", "BRET"}, {"CG321", "HGA2", "309.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG322", "CG331", "170.00", "1.5200", "FLUROALK fluoroalkanes"}, {"CG322", "FGA1", "420.00", "1.3740", "FLUROALK fluoroalkanes"}, {"CG322", "HGA6", "342.00", "1.0828", "FLUROALK fluoroalkanes"}, {"CG323", "CG331", "190.00", "1.5310", "PROT ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG323", "SG302", "205.00", "1.8360", "PROT methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG323", "HGA2", "300.00", "1.1110", "PROT ethylthiolate"}, {"CG323", "HGA3", "300.00", "1.1110", "PROT methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG324", "CG331", "222.50", "1.5280", "PROT alkane update, adm jr., 3/2/92"}, {"CG324", "CG3C31", "222.50", "1.5280", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs"}, {"CG324", "NG2O1", "226.00", "1.4900", "NIPR, nitropropane, abar"}, {"CG324", "NG2P1", "300.00", "1.4530", "RETINOL SCH2, Schiff's base, protonated #eq#"}, {"CG324", "NG3P0", "215.00", "1.5100", "LIPID tetramethylammonium"}, {"CG324", "NG3P1", "200.00", "1.4800", "FLAVOP PIP1,2,3"}, {"CG324", "NG3P2", "200.00", "1.4900", "PIP, piperidine"}, {"CG324", "NG3P3", "200.00", "1.4900", "MAMM, methylammonium 1.48 -> 1.49 based on CCSDT calc (kevo) and xtal survey (pram)"}, {"CG324", "HGA2", "284.50", "1.1000", "FLAVOP PIP1,2,3"}, {"CG324", "HGP5", "300.00", "1.0800", "LIPID tetramethylammonium"}, {"CG331", "CG331", "222.50", "1.5300", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "222.50", "1.5280", "TF2M, viv"}, {"CG331", "CG3RC1", "222.50", "1.5380", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "NG2D1", "310.00", "1.4400", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG331", "NG2R51", "400.00", "1.4580", "NA 9-M-G/T/U, adm jr."}, {"CG331", "NG2R61", "400.00", "1.4560", "NA 9-M-A/C, adm jr."}, {"CG331", "NG2S0", "315.00", "1.4340", "DMA, Dimethylacetamide, xxwy"}, {"CG331", "NG2S1", "320.00", "1.4300", "PROT NMA Gas and Liquid Phase IR Spectra (LK)"}, {"CG331", "NG2S3", "266.00", "1.4600", "NMSM, N-methyl-sulfamate; PHA, phosphoramidate; my"}, {"CG331", "NG301", "315.00", "1.4420", "TMC, yxu"}, {"CG331", "NG311", "255.00", "1.4630", "MGU2, methylguanidine2"}, {"CG331", "OG301", "360.00", "1.4150", "diethylether, alex"}, {"CG331", "OG302", "340.00", "1.4300", "PROT adm jr., 4/05/91, for PRES CG311 from methylacetate"}, {"CG331", "OG303", "340.00", "1.4300", "NA DMP, ADM Jr."}, {"CG331", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG331", "OG312", "450.00", "1.3300", "PROT methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG331", "SG301", "214.00", "1.8160", "PROT improved CSSC torsion in DMDS 5/15/92 (FL)"}, {"CG331", "SG311", "240.00", "1.8160", "PROT fitted to C-S s 9/26/92 (FL)"}, {"CG331", "SG3O1", "195.00", "1.8370", "MSNA, methyl sulfonate, xhe"}, {"CG331", "SG3O2", "210.00", "1.7900", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; compromise between crystal and mp2; xxwy and xhe"}, {"CG331", "SG3O3", "240.00", "1.8000", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"CG331", "HGA3", "322.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG334", "NG2O1", "250.00", "1.4800", "NIME, nitromethane, abar"}, {"CG334", "NG2P1", "300.00", "1.4530", "RETINOL SCH2, Schiff's base, protonated #eq#"}, {"CG334", "NG3P0", "215.00", "1.5100", "LIPID tetramethylammonium"}, {"CG334", "NG3P1", "200.00", "1.4800", "FLAVOP PIP1,2,3"}, {"CG334", "NG3P3", "200.00", "1.4800", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG334", "HGA3", "322.00", "1.1110", "PROT alkane update, adm jr., 3/2/92"}, {"CG334", "HGP5", "300.00", "1.0800", "LIPID tetramethylammonium"}, {"CG3AM0", "NG301", "235.00", "1.4540", "AMINE aliphatic amines"}, {"CG3AM0", "HGAAM0", "311.00", "1.1110", "AMINE aliphatic amines"}, {"CG3AM1", "NG311", "255.00", "1.4630", "AMINE aliphatic amines"}, {"CG3AM1", "HGAAM1", "313.80", "1.0980", "AMINE aliphatic amines"}, {"CG3AM2", "NG321", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG3AM2", "HGAAM2", "314.50", "1.0856", "AMINE aliphatic amines"}, {"CG3C31", "CG3C31", "240.00", "1.5010", "PROTMOD cyclopropane"}, {"CG3C31", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG3C31", "OG3C31", "220.00", "1.4500", "1EOX, 1-ethylene oxide, sc and kevo"}, {"CG3C31", "HGA1", "340.00", "1.0830", "PROTMOD cyclopropane"}, {"CG3C31", "HGA2", "340.00", "1.0830", "PROTMOD cyclopropane"}, {"CG3C41", "CG3C41", "270.00", "1.5400", "CBU, cyclobutane, AZDO, 2-azetidinone, lsk"}, {"CG3C41", "NG2R43", "245.00", "1.4500", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "OG3C51", "350.00", "1.4223", "OXTN, oxetane, gmu"}, {"CG3C41", "HGA2", "348.00", "1.0930", "CBU, cyclobutane, AZDO, 2-azetidinone, lsk"}, {"CG3C51", "CG3C51", "195.00", "1.5180", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C51", "CG3C52", "195.00", "1.5180", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C51", "CG3C53", "222.50", "1.5000", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG3C51", "NG2R51", "220.00", "1.4580", "NA G/T/U"}, {"CG3C51", "NG2R61", "220.00", "1.4560", "NA A/C"}, {"CG3C51", "NG2S0", "320.00", "1.4340", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "NG2S3", "360.00", "1.4620", "NABAKB phosphoramidates"}, {"CG3C51", "NG301", "220.00", "1.4560", "NADH, NDPH; Kenno: reverted to A/C from par_all27_na.prm"}, {"CG3C51", "NG321", "263.00", "1.4740", "AMINE aliphatic amines"}, {"CG3C51", "OG301", "334.30", "1.4110", "THF2, THF-2'OMe, from Nucl. Acids, ed"}, {"CG3C51", "OG303", "340.00", "1.4300", "LIPID phosphate"}, {"CG3C51", "OG311", "428.00", "1.4200", "PROT methanol vib fit EMB 11/21/89"}, {"CG3C51", "OG3C51", "350.00", "1.4250", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C51", "FGA1", "420.00", "1.3740", "FLUROALK fluoroalkanes"}, {"CG3C51", "HGA1", "307.00", "1.1000", "THF, THF neutron diffr., 5/30/06, viv"}, {"CG3C51", "HGA6", "342.00", "1.0828", "T2FU, copied from FLUROALK fluoroalkanes by kevo"}, {"CG3C52", "CG3C52", "195.00", "1.5300", "THF, nucleotide CSD/NDB survey, 5/30/06,viv; increased to 1.53 by kevo"}, {"CG3C52", "CG3C53", "222.50", "1.5270", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C54", "222.50", "1.5370", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3RC1", "222.50", "1.5240", "CARBOCY carbocyclic sugars"}, {"CG3C52", "NG2R50", "400.00", "1.4700", "2IMI, 2-imidazoline; 2HPR, 2H-pyrrole, kevo"}, {"CG3C52", "NG2R53", "370.00", "1.4500", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "NG2S0", "320.00", "1.4550", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "NG3C51", "400.00", "1.4780", "PRLD, pyrrolidine; 2PRL, 2-pyrroline, kevo"}, {"CG3C52", "OG3C51", "350.00", "1.4250", "THF, nucleotide CSD/NDB survey, 5/30/06,viv"}, {"CG3C52", "HGA2", "307.00", "1.1000", "THF, THF neutron diffr., 5/30/06, viv"}, {"CG3C53", "NG2R61", "220.00", "1.4560", "NA A/C"}, {"CG3C53", "NG3P2", "320.00", "1.4850", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "OG3C51", "240.00", "1.4460", "NA NA"}, {"CG3C53", "HGA1", "330.00", "1.0800", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C54", "210.00", "1.5600", "2IMP, 2-imidazoline.H+ ! RE-OPTIMIZE !!!, kevo"}, {"CG3C54", "NG2R52", "320.00", "1.4600", "2IMP, 2-imidazoline.H+, kevo"}, {"CG3C54", "NG3C51", "235.00", "1.4300", "IMDP, imidazolidine ! partial dbl bond ==> RE-OPTIMIZE?, erh and kevo"}, {"CG3C54", "NG3P2", "320.00", "1.5150", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93 kenno: 1.502 --> 1.515 (CGenFF is not for peptides!)"}, {"CG3C54", "HGA2", "309.00", "1.1110", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3RC1", "CG3RC1", "222.50", "1.5230", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "NG2R51", "220.00", "1.4580", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "NG2R53", "370.00", "1.4500", "CBHH, glycoluril, (CG3C52 NG2R53), jing"}, {"CG3RC1", "NG2R61", "220.00", "1.4560", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "OG3C51", "260.00", "1.4200", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG3RC1", "HGA1", "309.00", "1.1110", "CARBOCY carbocyclic sugars"}, {"NG2D1", "NG2S1", "550.00", "1.3600", "HDZ1, hydrazone model cmpd"}, {"NG2D1", "HGP1", "455.00", "1.0000", "MGU2, methylguanidine2"}, {"NG2O1", "OG2N1", "580.00", "1.2250", "NITB, nitrobenzene"}, {"NG2P1", "HGP2", "455.00", "1.0000", "RETINOL SCH2, Schiff's base, protonated"}, {"NG2R43", "HGP1", "403.00", "1.0150", "AZDO, 2-azetidinone, kevo"}, {"NG2R50", "NG2R50", "340.00", "1.2900", "OXAD, oxadiazole123"}, {"NG2R50", "NG2R51", "360.00", "1.3550", "PYRZ, pyrazole"}, {"NG2R50", "NG3C51", "420.00", "1.4110", "2PRZ, 2-pyrazoline, kevo"}, {"NG2R50", "OG2R50", "280.00", "1.3950", "ISOX, isoxazole"}, {"NG2R50", "SG2R50", "270.00", "1.7000", "ISOT, isothiazole"}, {"NG2R51", "HGP1", "474.00", "1.0100", "NA G, adm jr. 11/97"}, {"NG2R52", "HGP2", "453.00", "1.0000", "PROT his, adm jr., 6/27/90"}, {"NG2R53", "HGP1", "470.00", "1.0150", "440 *NEW* 2PDO, 2-pyrrolidinone, kevo"}, {"NG2R57", "NG2R57", "450.00", "1.3650", "11BPO, 1,1-bipyrrole, lf"}, {"NG2R61", "HGP1", "474.00", "1.0100", "NA C,U, JWK"}, {"NG2R61", "HGP2", "474.00", "1.0100", "NA C,U, JWK"}, {"NG2R62", "NG2R62", "420.00", "1.3200", "PYRD, pyridazine"}, {"NG2S1", "HGP1", "440.00", "0.9970", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S2", "HGP1", "480.00", "1.0000", "PROT adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NG2S3", "PG1", "180.00", "1.7920", "NABAKB phosphoramidates"}, {"NG2S3", "SG3O1", "224.00", "1.7000", "NMSM, N-methyl-sulfamate, my (QM: 1.74; Crystal: 1.637 1.665 1.656 1.672, aver: 1.658)"}, {"NG2S3", "HGP1", "432.50", "1.0250", "NABAKB phosphoramidates"}, {"NG2S3", "HGP4", "488.00", "1.0000", "NA A,C,G, JWK, adm jr. 7/24/91"}, {"NG311", "SG3O2", "235.00", "1.6500", "MMSM, N-methylmethanesulfonamide and other sulfonamides,(org 1.6950) compromise between crystal and mp2, xxwy"}, {"NG311", "HGP1", "442.00", "1.0210", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"NG311", "HGPAM1", "447.80", "1.0190", "AMINE aliphatic amines"}, {"NG321", "SG3O2", "240.00", "1.6800", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; (org 1.730) compromise between crystal and mp2, xxwy"}, {"NG321", "HGP1", "454.00", "1.0200", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"NG321", "HGPAM2", "453.10", "1.0140", "AMINE aliphatic amines"}, {"NG331", "HGPAM3", "455.50", "1.0140", "AMINE aliphatic amines"}, {"NG3C51", "NG3P2", "270.00", "1.4400", "PRZP, Pyrazolidine.H+, kevo"}, {"NG3C51", "HGP1", "450.00", "1.0180", "PRLD, pyrrolidine; 2PRL, 2-pyrroline, kevo"}, {"NG3N1", "NG3N1", "355.00", "1.4000", "HDZN, hydrazine, ed"}, {"NG3N1", "HGP1", "437.00", "1.0100", "HDZN, hydrazine, ed"}, {"NG3P0", "OG311", "245.00", "1.4000", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"NG3P0", "OG312", "310.00", "1.4000", "TMAO, trimethylamine N-oxide, xxwy and ejd"}, {"NG3P1", "HGP2", "403.00", "1.0400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"NG3P2", "HGP2", "460.00", "1.0060", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3P3", "HGP2", "403.00", "1.0400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"OG2P1", "PG0", "580.00", "1.4800", "MP_0 reorganization, kevo"}, {"OG2P1", "PG1", "500.00", "1.5100", "MP_1 reorganization, kevo"}, {"OG2P1", "PG2", "400.00", "1.5200", "MP_2 reorganization, kevo"}, {"OG2P1", "SG3O1", "540.00", "1.4480", "LIPID methylsulfate"}, {"OG2P1", "SG3O2", "630.00", "1.4400", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; compromise between crystal and mp2; xxwy and xhe"}, {"OG2P1", "SG3O3", "540.00", "1.5300", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"OG303", "PG0", "230.00", "1.6100", "MP_0 reorganization, kevo"}, {"OG303", "PG1", "190.00", "1.6500", "MP_1 reorganization, kevo"}, {"OG303", "PG2", "150.00", "1.6550", "MP_2 reorganization, kevo"}, {"OG303", "SG3O1", "250.00", "1.5750", "LIPID methylsulfate"}, {"OG303", "SG3O2", "235.00", "1.6000", "MMST, methyl methanesulfonate, (org 1.640) compromise between crystal and mp2, xxwy"}, {"OG304", "PG1", "330.00", "1.6750", "PPI1, PPI2, METP reorganization, kevo ! pulls against attraction"}, {"OG304", "PG2", "300.00", "1.7150", "PPI1, METP reorganization, kevo ! pulls against very strong attraction"}, {"OG311", "PG0", "237.00", "1.5800", "NA MP_1, ADM Jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG311", "PG1", "237.00", "1.6100", "MP_1 reorganization, kevo"}, {"OG311", "HGP1", "545.00", "0.9600", "PROT EMB 11/21/89 methanol vib fit; og tested on MeOH EtOH,..."}, {"SG301", "SG301", "173.00", "2.0290", "PROT improved CSSC torsion in DMDS 5/15/92 (FL)"}, {"SG311", "HGP3", "275.00", "1.3250", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"FGP1", "ALG1", "205.00", "1.7260", "aluminum tetrafluoride, ALF4, w/UB"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_cgenff info V(S) = Kub x (S - S0)^2 */ char * charmm36_cgenff_angles[1561][8]= {{"CG2R61", "CG1N1", "NG1T1", "40.00", "180.00", " ", " ", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN), yin"}, {"CG331", "CG1N1", "NG1T1", "21.20", "180.00", " ", " ", "ACN, acetonitrile, kevo"}, {"CG1T1", "CG1T1", "CG331", "19.00", "180.00", " ", " ", "2BTY, 2-butyne, kevo"}, {"CG1T2", "CG1T1", "CG331", "11.00", "180.00", " ", " ", "PRPY, propyne, kevo"}, {"CG1T1", "CG1T2", "HGPAM1", "8.00", "180.00", " ", " ", "PRPY, propyne, xxwy and kevo"}, {"CG25C1", "CG251O", "CG2R53", "40.00", "125.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "NG2R53", "40.00", "124.00", " ", " ", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C1", "CG251O", "SG311", "40.00", "124.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "CG2R53", "40.00", "119.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "NG2R53", "40.00", "130.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG251O", "SG311", "40.00", "130.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "NG2R53", "116.00", "111.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG251O", "SG311", "110.00", "111.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "CG2R53", "40.00", "125.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "NG2R53", "40.00", "124.00", " ", " ", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C2", "CG252O", "SG311", "40.00", "124.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "CG2R53", "40.00", "119.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "NG2R53", "40.00", "130.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG252O", "SG311", "40.00", "130.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "NG2R53", "116.00", "111.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG252O", "SG311", "110.00", "111.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2R53", "33.00", "113.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2RC0", "33.00", "131.50", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2R53", "33.00", "115.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2RC0", "33.00", "130.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2RC0", "45.00", "114.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2R53", "33.00", "113.00", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2RC0", "33.00", "131.50", " ", " ", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2R53", "33.00", "115.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2RC0", "33.00", "130.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2RC0", "45.00", "114.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2D1", "CG2D1", "CG301", "48.00", "123.50", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG321", "48.00", "123.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D1", "CG331", "48.00", "123.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D1", "HGA4", "52.00", "119.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2D1O", "CG2D1", "CG321", "40.00", "127.50", " ", " ", "PY01, 4h-pyran"}, {"CG2D1O", "CG2D1", "HGA4", "52.00", "119.50", " ", " ", "PY01, 4h-pyran"}, {"CG2D2", "CG2D1", "CG321", "48.00", "126.00", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2D2", "CG2D1", "CG331", "47.00", "125.20", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D2", "CG2D1", "HGA4", "42.00", "118.00", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2D1", "CG321", "40.00", "127.50", " ", " ", "PY01, 4h-pyran"}, {"CG2D2O", "CG2D1", "HGA4", "52.00", "119.50", " ", " ", "PY01, 4h-pyran"}, {"CG301", "CG2D1", "CG321", "50.00", "113.00", " ", " ", "CHOLEST cholesterol"}, {"CG301", "CG2D1", "CG331", "48.00", "123.50", " ", " ", "RETINOL TMCH"}, {"CG321", "CG2D1", "CG331", "48.00", "123.50", " ", " ", "RETINOL TMCH"}, {"CG321", "CG2D1", "HGA4", "40.00", "116.00", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG331", "CG2D1", "NG2D1", "80.00", "123.00", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated, adjusted for improper, xxwy"}, {"CG331", "CG2D1", "NG2P1", "47.00", "125.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated, adjusted for improper, xxwy"}, {"CG331", "CG2D1", "HGA4", "22.00", "117.00", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG331", "CG2D1", "HGR52", "42.00", "120.40", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"NG2D1", "CG2D1", "HGA4", "49.00", "119.50", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated, adjusted for improper, xxwy"}, {"NG2P1", "CG2D1", "HGR52", "39.00", "114.00", " ", " ", "RETINOL SCH2, Schiff's base, protonated, adjusted for improper, xxwy"}, {"CG2D1", "CG2D1O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "OG3R60", "40.00", "126.00", " ", " ", "PY01, 4h-pyran, maintain 360 around apex angle"}, {"CG2D1", "CG2D1O", "HGA4", "52.00", "122.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D2", "CG2D1O", "NG321", "80.00", "128.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"CG2D2", "CG2D1O", "OG301", "65.00", "123.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D1O", "HGA4", "44.00", "121.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "OG301", "56.00", "124.50", " ", " ", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC1", "CG2D1O", "OG3R60", "40.00", "128.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG2D1O", "HGA4", "42.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"NG301", "CG2D1O", "HGA4", "42.00", "119.00", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D1O", "HGA4", "42.00", "119.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG321", "CG2D1O", "HGA4", "30.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"OG301", "CG2D1O", "HGA4", "30.00", "115.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"OG3R60", "CG2D1O", "HGA4", "30.00", "112.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D1", "CG2D2", "HGA5", "45.00", "120.50", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1O", "CG2D2", "HGA5", "35.00", "120.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2", "HGA5", "55.50", "120.50", " ", " ", "LIPID ethene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2D2", "HGA5", "35.00", "120.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"HGA5", "CG2D2", "HGA5", "19.00", "119.00", " ", " ", "LIPID propene, yin,adm jr., 12/95"}, {"CG2D1", "CG2D2O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "OG3R60", "40.00", "126.00", " ", " ", "PY01, 4h-pyran, maintain 360 around apex angle"}, {"CG2D1", "CG2D2O", "HGA4", "52.00", "122.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D2", "CG2D2O", "NG321", "80.00", "128.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"CG2D2", "CG2D2O", "OG301", "65.00", "123.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2O", "HGA4", "44.00", "121.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "NG301", "60.00", "122.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "NG311", "60.00", "122.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "OG301", "56.00", "124.50", " ", " ", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC2", "CG2D2O", "OG3R60", "40.00", "128.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC2", "CG2D2O", "HGA4", "42.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"NG301", "CG2D2O", "HGA4", "42.00", "119.00", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D2O", "HGA4", "42.00", "119.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG321", "CG2D2O", "HGA4", "30.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram"}, {"OG301", "CG2D2O", "HGA4", "30.00", "115.50", " ", " ", "MOET, Methoxyethene, xxwy"}, {"OG3R60", "CG2D2O", "HGA4", "30.00", "112.00", " ", " ", "PY01, 4h-pyran"}, {"CG2D1O", "CG2DC1", "CG2DC2", "48.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"CG2D1O", "CG2DC1", "CG2O1", "65.00", "113.00", " ", " ", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 5.0 107.8 but that's too unlikely ==> re-optimize"}, {"CG2D1O", "CG2DC1", "CG321", "43.50", "126.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 43.50 128.00 but that's unlikely ==> re-optimize"}, {"CG2D1O", "CG2DC1", "HGA4", "42.00", "122.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG2DC1", "CG2DC2", "48.00", "123.00", " ", " ", "RETINOL 13DP, Pentadiene @@@@@ Kenno: 123.5-->123.0 @@@@@"}, {"CG2DC1", "CG2DC1", "CG2O1", "48.00", "123.50", " ", " ", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O3", "48.00", "123.50", " ", " ", "RETINOL PRAC"}, {"CG2DC1", "CG2DC1", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2DC1", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG321", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG331", "48.00", "123.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "CG2DC1", "HGA4", "42.00", "119.00", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG2DC1", "CG2DC3", "48.00", "123.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC2", "CG2DC1", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG331", "48.00", "113.00", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC2", "CG2DC1", "NG2P1", "40.00", "125.60", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC1", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC2", "CG2DC1", "HGR52", "42.00", "120.40", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2O3", "40.00", "119.00", "35.00", "2.5267", "RETINOL PRAC"}, {"CG2DC3", "CG2DC1", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O5", "35.00", "118.60", " ", " ", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC1", "CG2R61", "29.00", "122.00", " ", " ", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC1", "CG331", "48.00", "123.50", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC1", "CG321", "65.00", "123.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 125.0 124.2 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC1", "HGA4", "52.00", "119.50", " ", " ", "RETINOL CROT"}, {"CG2O3", "CG2DC1", "HGA4", "52.00", "119.50", " ", " ", "RETINOL PRAC"}, {"CG2O4", "CG2DC1", "HGA4", "32.00", "122.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2O5", "CG2DC1", "HGA4", "32.00", "123.40", " ", " ", "BEON, butenone, kevo"}, {"CG2R61", "CG2DC1", "NG2D1", "56.00", "117.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2R61", "CG2DC1", "HGA4", "32.00", "120.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b; STYR, styrene; kevo, xxwy, oashi"}, {"CG321", "CG2DC1", "CG331", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG321", "CG2DC1", "HGA4", "40.00", "116.00", " ", " ", "RETINOL PROL"}, {"CG331", "CG2DC1", "CG331", "47.00", "113.00", " ", " ", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"CG331", "CG2DC1", "HGA4", "42.00", "117.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"NG2D1", "CG2DC1", "HGA4", "38.00", "123.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"NG2P1", "CG2DC1", "HGR52", "38.00", "114.00", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D2O", "CG2DC2", "CG2DC1", "48.00", "120.00", " ", " ", "PY02, 2h-pyran"}, {"CG2D2O", "CG2DC2", "CG2O1", "65.00", "113.00", " ", " ", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 5.0 107.8 but that's too unlikely ==> re-optimize"}, {"CG2D2O", "CG2DC2", "CG321", "43.50", "126.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 43.50 128.00 but that's unlikely ==> re-optimize"}, {"CG2D2O", "CG2DC2", "HGA4", "42.00", "122.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG2DC2", "CG2DC2", "48.00", "123.00", " ", " ", "RETINOL 13DP, Pentadiene @@@@@ Kenno: 123.5-->123.0 @@@@@"}, {"CG2DC1", "CG2DC2", "CG2DC3", "48.00", "123.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC1", "CG2DC2", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG331", "48.00", "113.00", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC1", "CG2DC2", "NG2P1", "40.00", "125.60", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC1", "CG2DC2", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC1", "CG2DC2", "HGR52", "42.00", "120.40", " ", " ", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC2", "CG2O1", "48.00", "123.50", " ", " ", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O3", "48.00", "123.50", " ", " ", "RETINOL PRAC"}, {"CG2DC2", "CG2DC2", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2DC2", "CG301", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG2DC2", "CG321", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG2DC2", "CG331", "48.00", "123.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG2DC2", "HGA4", "42.00", "119.00", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC3", "CG2DC2", "CG2O3", "40.00", "119.00", "35.00", "2.5267", "RETINOL PRAC"}, {"CG2DC3", "CG2DC2", "CG2O4", "60.00", "120.00", " ", " ", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O5", "35.00", "118.60", " ", " ", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC2", "CG2R61", "29.00", "122.00", " ", " ", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC2", "CG331", "48.00", "123.50", " ", " ", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC2", "HGA4", "42.00", "118.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC2", "CG321", "65.00", "123.50", " ", " ", "NICH; Kenno: nadh/ppi, jjp1/adm jr. 7/95 says 125.0 124.2 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC2", "HGA4", "52.00", "119.50", " ", " ", "RETINOL CROT"}, {"CG2O3", "CG2DC2", "HGA4", "52.00", "119.50", " ", " ", "RETINOL PRAC"}, {"CG2O4", "CG2DC2", "HGA4", "32.00", "122.00", " ", " ", "RETINOL RTAL unmodified"}, {"CG2O5", "CG2DC2", "HGA4", "32.00", "123.40", " ", " ", "BEON, butenone, kevo"}, {"CG2R61", "CG2DC2", "NG2D1", "56.00", "117.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2R61", "CG2DC2", "HGA4", "32.00", "120.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b; STYR, styrene; kevo, xxwy, oashi"}, {"CG321", "CG2DC2", "CG331", "48.00", "123.50", " ", " ", "RETINOL MECH"}, {"CG321", "CG2DC2", "HGA4", "40.00", "116.00", " ", " ", "RETINOL PROL"}, {"CG331", "CG2DC2", "CG331", "47.00", "113.00", " ", " ", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"CG331", "CG2DC2", "HGA4", "42.00", "117.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"NG2D1", "CG2DC2", "HGA4", "38.00", "123.00", " ", " ", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"NG2P1", "CG2DC2", "HGR52", "38.00", "114.00", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG251O", "CG2DC3", "HGA5", "35.00", "120.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2DC3", "HGA5", "35.00", "120.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG25C2", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "MEOI, methyleneoxindole; from RETINOL 13DB, 1,3-Butadiene (re-optimize); kevo"}, {"CG2DC1", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC2", "CG2DC3", "HGA5", "45.00", "120.50", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA5", "CG2DC3", "HGA5", "19.00", "119.00", " ", " ", "RETINOL 13DB, 1,3-Butadiene"}, {"NG2D1", "CG2N1", "NG311", "50.00", "125.00", " ", " ", "MGU2, methylguanidine2"}, {"NG2D1", "CG2N1", "NG321", "100.00", "125.00", " ", " ", "MGU1, methylguanidine; MGU2, methylguanidine2"}, {"NG2P1", "CG2N1", "NG2P1", "52.00", "120.00", "90.00", "2.36420", "PROT changed from 60.0/120.3 for guanidinium (KK)"}, {"NG311", "CG2N1", "NG321", "50.00", "113.00", " ", " ", "MGU2, methylguanidine2 kevo: sum=363 (deliberate)"}, {"NG321", "CG2N1", "NG321", "75.00", "113.00", " ", " ", "MGU1, methylguanidine kevo: sum=363 (deliberate)"}, {"CG2R61", "CG2N2", "NG2P1", "80.00", "118.50", " ", " ", "BAMI, benzamidinium, mp2 geom and movib, pram"}, {"CG331", "CG2N2", "NG2P1", "52.00", "118.50", " ", " ", "AMDN, amidinium, mp2 geom, pram"}, {"NG2D1", "CG2N2", "NG321", "85.00", "127.00", " ", " ", "MT2A, fylin"}, {"NG2D1", "CG2N2", "SG311", "37.00", "116.40", " ", " ", "MT2A, fylin"}, {"NG2P1", "CG2N2", "NG2P1", "52.00", "123.00", "90.00", "2.36420", "AMDN, amidinium, mp2 geom and movib, pram"}, {"NG321", "CG2N2", "SG311", "56.00", "116.60", " ", " ", "MT2A, fylin"}, {"CG2DC1", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "RETINOL CROT"}, {"CG2DC1", "CG2O1", "NG2S2", "85.00", "113.00", "80.0", "2.46", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2O1", "OG2D1", "80.00", "122.50", " ", " ", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S2", "85.00", "113.00", "80.0", "2.46", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2O1", "OG2D1", "80.00", "122.50", " ", " ", "RETINOL CROT"}, {"CG2R61", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2O1", "NG2S2", "50.00", "110.23", " ", " ", "3NAP, nicotamide (PYRIDINE pyr-CONH2), yin"}, {"CG2R61", "CG2O1", "OG2D1", "30.00", "121.00", " ", " ", "reverted to 3NAP, nicotamide. Kenno: compromise with NMA and HDZ2 ==> 124.5 --> 121.00"}, {"CG2R62", "CG2O1", "NG2S2", "85.00", "113.00", "80.0", "2.46", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2O1", "OG2D1", "85.00", "118.50", "20.0", "2.43", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG311", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG311", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG311", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG314", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG314", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG314", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG321", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG321", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG321", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG324", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG324", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG324", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG331", "CG2O1", "NG2S0", "40.00", "115.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"CG331", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG331", "CG2O1", "NG2S2", "50.00", "116.50", "50.00", "2.45000", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG331", "CG2O1", "OG2D1", "80.00", "121.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG3C51", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S2", "80.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "OG2D1", "80.00", "118.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "20.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "80.00", "116.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S2", "80.00", "112.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "OG2D1", "80.00", "118.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "OG2D1", "80.00", "124.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"NG2S0", "CG2O1", "HGR52", "43.00", "115.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"NG2S1", "CG2O1", "OG2D1", "80.00", "122.50", " ", " ", "PROT NMA Vib Modes (LK)"}, {"NG2S2", "CG2O1", "OG2D1", "75.00", "122.50", "50.00", "2.37000", "PROT adm jr. 4/10/91, acetamide update"}, {"NG2S2", "CG2O1", "HGR52", "44.00", "111.00", "50.00", "1.98000", "PROT, formamide"}, {"OG2D1", "CG2O1", "HGR52", "44.00", "122.00", " ", " ", "kevo reverted to adm jr., 5/13/91, formamide geometry and vibrations"}, {"CG2R61", "CG2O2", "OG2D1", "70.00", "123.10", "20.00", "2.4420", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"CG2R61", "CG2O2", "OG302", "50.00", "111.00", "20.00", "2.3600", "MBOA, methylbenzoate (UB term has been adjusted), jal"}, {"CG2R61", "CG2O2", "OG311", "40.00", "113.90", "30.00", "2.3700", "ZOIC, benzoic acid (UB term has been adjusted), jal"}, {"CG311", "CG2O2", "OG2D1", "70.00", "125.00", "20.00", "2.44200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG311", "CG2O2", "OG302", "55.00", "109.00", "20.00", "2.3260", "AMGA, Alpha Methyl Glut Acid CDCA Amide"}, {"CG311", "CG2O2", "OG311", "55.00", "110.50", " ", " ", "drug design project, xxwy"}, {"CG321", "CG2O2", "OG2D1", "70.00", "125.00", "20.00", "2.44200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG321", "CG2O2", "OG302", "55.00", "109.00", "20.00", "2.3260", "LIPID methyl acetate"}, {"CG321", "CG2O2", "OG311", "55.00", "110.50", " ", " ", "PROT adm jr, 10/17/90, acetic acid vibrations"}, {"CG331", "CG2O2", "OG2D1", "70.00", "125.00", "20.00", "2.44200", "PROT adm jr. 5/02/91, acetic acid pure solvent; LIPID methyl acetate"}, {"CG331", "CG2O2", "OG302", "55.00", "109.00", "20.00", "2.3260", "LIPID methyl acetate"}, {"CG331", "CG2O2", "OG311", "55.00", "110.50", " ", " ", "PROT adm jr, 10/17/90, acetic acid vibrations"}, {"OG2D1", "CG2O2", "OG302", "90.00", "125.90", "160.0", "2.2576", "LIPID acetic acid"}, {"OG2D1", "CG2O2", "OG311", "50.00", "123.00", "210.00", "2.26200", "PROT adm jr, 10/17/90, acetic acid vibrations"}, {"OG2D1", "CG2O2", "HGR52", "39.00", "119.00", " ", " ", "FORH, formic acid, xxwy"}, {"OG311", "CG2O2", "HGR52", "47.00", "105.00", " ", " ", "FORH, formic acid, xxwy"}, {"CG2DC1", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.3530", "RETINOL PRAC"}, {"CG2DC2", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.3530", "RETINOL PRAC"}, {"CG2O5", "CG2O3", "OG2D2", "95.00", "116.00", " ", " ", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2R61", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.3530", "3CPY, pyridine-3-carboxylate (PYRIDINE nicotinic acid), yin"}, {"CG301", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.353", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG314", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG321", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG324", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG331", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"CG3C51", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O3", "OG2D2", "40.00", "116.00", "50.00", "2.35300", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "OG2D2", "100.00", "128.00", "70.00", "2.25870", "PROT adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OG2D2", "CG2O3", "HGR52", "45.00", "116.00", " ", " ", "FORA, formate, kevo (sum=360)"}, {"CG2DC1", "CG2O4", "OG2D1", "75.00", "126.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2DC1", "CG2O4", "HGR52", "15.00", "116.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2DC2", "CG2O4", "OG2D1", "75.00", "126.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2DC2", "CG2O4", "HGR52", "15.00", "116.00", " ", " ", "RETINOL PRAL only angle modified"}, {"CG2R61", "CG2O4", "OG2D1", "75.00", "126.00", " ", " ", "ALDEHYDE benzaldehyde only angle unmodified"}, {"CG2R61", "CG2O4", "HGR52", "15.00", "116.00", " ", " ", "ALDEHYDE benzaldehyde only angle unmodified"}, {"CG321", "CG2O4", "OG2D1", "45.00", "126.00", " ", " ", "ALDEHYDE propionaldehyde adm 11/08"}, {"CG321", "CG2O4", "HGR52", "65.00", "116.00", " ", " ", "ALDEHYDE propionaldehyde adm 11/08"}, {"CG331", "CG2O4", "OG2D1", "45.00", "126.00", " ", " ", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG331", "CG2O4", "HGR52", "65.00", "116.00", " ", " ", "ALDEHYDE acetaldehyde adm 11/08"}, {"OG2D1", "CG2O4", "HGR52", "65.00", "118.00", " ", " ", "ALDEHYDE acetaldehyde adm 11/08"}, {"CG2DC1", "CG2O5", "CG331", "35.00", "116.00", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2DC1", "CG2O5", "OG2D3", "70.00", "121.80", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2DC2", "CG2O5", "CG331", "35.00", "116.00", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2DC2", "CG2O5", "OG2D3", "70.00", "121.80", " ", " ", "BEON, butenone; from PHMK, phenyl methyl ketone; kevo"}, {"CG2O3", "CG2O5", "CG2R61", "40.00", "117.20", " ", " ", "BIPHENYLS BF7 C37, sum of equilibrium angles, kevo"}, {"CG2O3", "CG2O5", "OG2D3", "95.00", "121.50", " ", " ", "BIPHENYLS BF7, C37 new init guess by Kenno based on ACO adm 11/08 ==> re-optimize"}, {"CG2R61", "CG2O5", "CG311", "40.00", "117.20", " ", " ", "BIPHENYLS BF6 C36, sum of equilibrium angles, kevo"}, {"CG2R61", "CG2O5", "CG321", "20.00", "116.50", " ", " ", "PHEK, phenyl ethyl ketone; from 3ACP, 3-acetylpyridine; mcs"}, {"CG2R61", "CG2O5", "CG331", "60.00", "116.50", " ", " ", "PHMK, phenyl methyl ketone, mcs"}, {"CG2R61", "CG2O5", "OG2D3", "70.00", "121.30", " ", " ", "3ACP, 3-acetylpyridine; BF6 BF7 C36 C37; PHMK, phenyl methyl ketone; verified by mcs"}, {"CG311", "CG2O5", "OG2D3", "95.00", "121.50", " ", " ", "BIPHENYLS BF6, C36 new init guess by Kenno based on ACO adm 11/08 ==> re-optimize"}, {"CG321", "CG2O5", "CG321", "35.00", "115.60", " ", " ", "CHON, cyclohexanone; from ACO, acetone; yapol"}, {"CG321", "CG2O5", "CG331", "35.00", "115.60", " ", " ", "BTON, butanone; from ACO, acetone; yapol"}, {"CG321", "CG2O5", "OG2D3", "75.00", "122.20", " ", " ", "BTON, butanone; from ACO, acetone; yapol"}, {"CG331", "CG2O5", "CG331", "35.00", "115.60", " ", " ", "ACO, acetone adm 11/08"}, {"CG331", "CG2O5", "OG2D3", "75.00", "122.20", " ", " ", "ACO, acetone adm 11/08"}, {"NG2S1", "CG2O6", "OG2D1", "60.00", "125.70", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"NG2S1", "CG2O6", "OG302", "90.00", "110.30", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"NG2S2", "CG2O6", "NG2S2", "70.00", "115.00", " ", " ", "UREA, Urea"}, {"NG2S2", "CG2O6", "OG2D1", "75.00", "122.50", "50.00", "2.37000", "UREA, Urea. Uses a slack parameter from PROT adm jr. 4/10/91, acetamide update ==> re-optimize"}, {"OG2D1", "CG2O6", "OG302", "70.00", "123.50", " ", " ", "DMCB and DECB and DMCA, dimethyl and diehtyl carbamate and dimethyl carbonate, cacha and kevo"}, {"OG2D2", "CG2O6", "OG2D2", "40.00", "120.00", "99.5", "2.24127", "PROTMOD carbonate"}, {"OG2D2", "CG2O6", "OG311", "79.00", "120.00", " ", " ", "CO31, bicarbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "85.00", "105.00", " ", " ", "DMCA, dimethyl carbonate, xxwy"}, {"SG2D1", "CG2O6", "SG311", "70.00", "124.00", " ", " ", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG311", "CG2O6", "SG311", "40.00", "112.00", " ", " ", "DMTT, dimethyl trithiocarbonate, kevo"}, {"NG2D1", "CG2O7", "OG2D5", "42.00", "172.00", " ", " ", "MICY, EICY: isocyanates, xxwy"}, {"OG2D5", "CG2O7", "OG2D5", "45.00", "180.00", " ", " ", "PROT CO2, JES; re-optimized by kevo"}, {"CG2R51", "CG2R51", "CG2R51", "90.00", "107.20", " ", " ", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R52", "90.00", "106.00", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "CG2R51", "CG2R53", "100.00", "116.50", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG2R57", "90.00", "107.20", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51; lf"}, {"CG2R51", "CG2R51", "CG2RC0", "85.00", "105.70", "25.00", "2.26100", "INDO/TRP"}, {"CG2R51", "CG2R51", "CG2RC7", "70.00", "106.90", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG321", "45.80", "130.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CG2R51", "CG2R51", "CG331", "45.80", "130.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CG2R51", "CG2R51", "CG3C52", "115.00", "109.00", " ", " ", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "115.00", "109.00", " ", " ", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "CG2R51", "NG2R50", "130.00", "110.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R51", "130.00", "106.00", " ", " ", "110.6, PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R52", "145.00", "108.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R57", "130.00", "106.00", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51; lf"}, {"CG2R51", "CG2R51", "NG2RC0", "130.00", "108.20", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "NG3C51", "105.00", "111.80", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "NG3P2", "120.00", "111.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "OG2R50", "130.00", "111.70", " ", " ", "FURA, furan @@@@@ Kenno: 108-->112 @@@@@"}, {"CG2R51", "CG2R51", "OG3C51", "135.00", "113.20", " ", " ", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "CG2R51", "SG2R50", "105.00", "109.00", " ", " ", "THIP, thiophene"}, {"CG2R51", "CG2R51", "HGR51", "32.00", "126.40", "25.00", "2.17300", "INDO/TRP"}, {"CG2R51", "CG2R51", "HGR52", "22.00", "130.00", "15.00", "2.21500", "PROT adm jr., 6/27/90, his"}, {"CG2R52", "CG2R51", "HGR51", "15.00", "127.60", " ", " ", "2HPR, 2H-pyrrole; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R53", "CG2R51", "HGR51", "10.00", "117.10", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R57", "CG2R51", "NG2R51", "130.00", "106.00", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51; lf"}, {"CG2R57", "CG2R51", "HGR51", "32.00", "126.40", "25.00", "2.17300", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 HGR51; lf"}, {"CG2R57", "CG2R51", "HGR52", "22.00", "130.00", "15.00", "2.21500", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 HGR52; lf"}, {"CG2RC0", "CG2R51", "CG321", "30.00", "126.70", " ", " ", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG331", "30.00", "126.70", " ", " ", "INDO/TRP"}, {"CG2RC0", "CG2R51", "NG2R51", "100.00", "107.50", " ", " ", "ISOI, isoindole, kevo"}, {"CG2RC0", "CG2R51", "HGR51", "32.00", "126.40", "25.00", "2.25500", "INDO/TRP"}, {"CG2RC0", "CG2R51", "HGR52", "31.00", "128.50", " ", " ", "ISOI, isoindole, kevo"}, {"CG2RC7", "CG2R51", "HGR51", "32.00", "126.70", " ", " ", "AZUL, Azulene, kevo"}, {"CG321", "CG2R51", "NG2R50", "45.80", "120.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG321", "CG2R51", "NG2R51", "45.80", "124.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG321", "CG2R51", "NG2R52", "45.80", "122.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG331", "CG2R51", "NG2R51", "45.80", "124.00", " ", " ", "PROT his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"CG3C52", "CG2R51", "HGR51", "29.00", "124.60", " ", " ", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG3C54", "CG2R51", "HGR51", "13.00", "124.60", " ", " ", "124.6 3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG2R50", "CG2R51", "HGR52", "25.00", "120.00", "20.00", "2.14000", "PROT adm jr., 3/24/92"}, {"NG2R51", "CG2R51", "HGR52", "25.00", "124.00", "20.00", "2.14000", "PROT adm jr., 3/24/92"}, {"NG2R52", "CG2R51", "HGR52", "22.00", "122.00", "15.00", "2.18000", "PROT his, adm jr., 6/27/90"}, {"NG2R57", "CG2R51", "HGR52", "25.00", "124.00", "20.00", "2.14000", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 HGR52; lf"}, {"NG2RC0", "CG2R51", "HGR52", "31.00", "121.80", " ", " ", "INDZ, indolizine, kevo"}, {"NG3C51", "CG2R51", "HGR52", "35.00", "118.20", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"NG3P2", "CG2R51", "HGR52", "35.00", "119.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"OG2R50", "CG2R51", "HGR52", "50.00", "118.30", " ", " ", "FURA, furan @@@@@ Kenno: 122 --> 118 @@@@@"}, {"OG3C51", "CG2R51", "HGR52", "39.00", "116.80", " ", " ", "2DHF, 2,3-dihydrofuran, kevo"}, {"SG2R50", "CG2R51", "HGR52", "45.00", "121.00", " ", " ", "THIP, thiophene"}, {"CG2R51", "CG2R52", "NG2R50", "110.00", "110.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "CG2R52", "NG2R52", "121.00", "110.00", " ", " ", "2HPP, 2H-pyrrole.H+ C4-C5-N1, kevo"}, {"CG2R51", "CG2R52", "HGR52", "32.00", "126.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R52", "CG2R52", "NG2R50", "70.00", "106.00", " ", " ", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2R52", "CG2R52", "HGR52", "30.00", "131.00", " ", " ", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2RC0", "CG2R52", "NG2R50", "150.00", "110.40", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2RC0", "CG2R52", "HGR52", "32.00", "126.60", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "170.00", "112.00", " ", " ", "2PRZ, 2-pyrazoline; 3HPR, 3H-pyrrole N2-C3-C4, kevo"}, {"CG3C52", "CG2R52", "HGR52", "47.00", "125.00", " ", " ", "2PRZ, 2-pyrazoline; 3HPR, 3H-pyrrole H3-C3-C4, kevo"}, {"NG2R50", "CG2R52", "HGR52", "32.00", "123.00", " ", " ", "PYRZ, pyrazole"}, {"NG2R52", "CG2R52", "HGR52", "35.00", "123.50", " ", " ", "2HPP, 2H-pyrrole.H+ N1-C5-H5, kevo"}, {"CG251O", "CG2R53", "NG2R53", "55.00", "108.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG2R53", "OG2D1", "55.00", "124.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "NG2R53", "55.00", "108.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "OG2D1", "55.00", "124.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG2R53", "NG2R51", "50.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2R53", "OG2D1", "55.00", "125.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "NG2R51", "50.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "OG2D1", "55.00", "125.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R51", "CG2R53", "OG2D1", "60.80", "127.50", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R53", "OG3C51", "65.50", "105.00", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG3C41", "CG2R53", "NG2R43", "120.00", "104.50", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "CG2R53", "OG2D1", "60.00", "135.70", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C52", "CG2R53", "NG2R53", "120.00", "105.50", " ", " ", "2PDO, 2-pyrrolidinone N1-C2-C3 v, kevo"}, {"CG3C52", "CG2R53", "OG2D1", "65.00", "126.70", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG2R53", "OG3C51", "90.00", "105.80", " ", " ", "GBL, Gamma-butyrolactone, ctsai and kevo"}, {"NG2R43", "CG2R53", "OG2D1", "60.00", "134.30", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"NG2R50", "CG2R53", "NG2R50", "100.00", "111.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R51", "100.00", "113.00", " ", " ", "NA Gua 5R)"}, {"NG2R50", "CG2R53", "NG3C51", "160.00", "117.40", " ", " ", "2IMI, 2-imidazoline N1-C2-N3 d1a,d1, kevo"}, {"NG2R50", "CG2R53", "OG2R50", "120.00", "115.70", " ", " ", "OXAZ, oxazole @@@@@ Kenno: 108 --> 115.7 @@@@@"}, {"NG2R50", "CG2R53", "SG2R50", "110.00", "117.20", " ", " ", "THAZ, thiazole @@@@@ Kenno: 112 --> 117.2 @@@@@"}, {"NG2R50", "CG2R53", "HGR52", "39.00", "124.80", " ", " ", "NA Ade h8, G,A"}, {"NG2R51", "CG2R53", "OG2D1", "70.00", "127.50", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"NG2R51", "CG2R53", "HGR52", "40.00", "122.20", " ", " ", "NA Gua h8 (NN4 CG2R53HN3 124.8)"}, {"NG2R52", "CG2R53", "NG2R52", "145.00", "108.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"NG2R52", "CG2R53", "HGR53", "32.00", "126.00", "25.00", "2.14000", "PROT his, adm jr., 6/27/90"}, {"NG2R53", "CG2R53", "NG2R53", "75.00", "104.40", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "OG2D1", "65.00", "127.80", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2R53", "CG2R53", "SG2D1", "45.00", "127.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "70.00", "109.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG3C51", "CG2R53", "HGR52", "32.00", "117.80", " ", " ", "2IMI, 2-imidazoline N1-C2-H2, kevo"}, {"OG2D1", "CG2R53", "OG3C51", "64.00", "127.50", " ", " ", "GBL, Gamma-butyrolactone, ctsai and kevo"}, {"OG2D1", "CG2R53", "SG311", "55.00", "125.00", " ", " ", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2R50", "CG2R53", "HGR52", "25.00", "119.50", "20.00", "2.14000", "OXAZ, oxazole @@@@@ Kenno: 120 -->119.5 @@@@@"}, {"SG2D1", "CG2R53", "SG311", "45.00", "124.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2R50", "CG2R53", "HGR52", "30.00", "118.00", " ", " ", "THAZ, thiazole"}, {"CG2R51", "CG2R57", "CG2R51", "90.00", "107.20", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51; lf"}, {"CG2R51", "CG2R57", "CG2R57", "33.00", "126.40", " ", " ", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "42.50", "126.40", " ", " ", "13BPO, 1,3-bipyrrole, lf"}, {"CG1N1", "CG2R61", "CG2R61", "35.00", "120.00", " ", " ", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) Kenno: 119 --> 120"}, {"CG2DC1", "CG2R61", "CG2R61", "36.00", "120.00", " ", " ", "STYR, styrene and HDZ2, hydrazone model cmpd 2; xxwy and oashi; verified by kevo"}, {"CG2DC2", "CG2R61", "CG2R61", "36.00", "120.00", " ", " ", "STYR, styrene and HDZ2, hydrazone model cmpd 2; xxwy and oashi; verified by kevo"}, {"CG2N2", "CG2R61", "CG2R61", "25.00", "120.00", " ", " ", "BAMI, benzamidinium, mp2 molvib, pram"}, {"CG2O1", "CG2R61", "CG2R61", "45.00", "119.00", " ", " ", "reverted to 3NAP, nicotinamide"}, {"CG2O1", "CG2R61", "CG2RC0", "60.00", "120.00", " ", " ", "HDZ2, hydrazone model cmpd 2"}, {"CG2O2", "CG2R61", "CG2R61", "45.00", "120.00", " ", " ", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"CG2O3", "CG2R61", "CG2R61", "45.00", "119.00", " ", " ", "3CB, Benzoate. Based on a slack parameter from 3ACP, 3-acetylpyridine ==> re-optimize"}, {"CG2O4", "CG2R61", "CG2R61", "45.00", "119.80", " ", " ", "ALDEHYDE benzaldehyde unmodified"}, {"CG2O5", "CG2R61", "CG2R61", "45.00", "120.00", " ", " ", "PHMK, PHEK, sum of equilibrium angles, kevo"}, {"CG2R61", "CG2R61", "CG2R61", "40.00", "120.00", "35.00", "2.41620", "PROT JES 8/25/89"}, {"CG2R61", "CG2R61", "CG2R62", "40.00", "119.00", "35.00", "2.41620", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R61", "CG2R63", "40.00", "120.00", "35.00", "2.41620", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R64", "40.00", "115.50", "35.00", "2.41620", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R61", "CG2R66", "40.00", "119.00", "35.00", "2.41620", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R67", "40.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2RC0", "50.00", "120.00", " ", " ", "113.20 ! INDO/TRP"}, {"CG2R61", "CG2R61", "CG311", "45.80", "120.00", " ", " ", "modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG312", "45.80", "120.00", " ", " ", "BDFP, BDFD, Difuorobenzylphosphonate, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG321", "45.80", "120.00", " ", " ", "EBEN, ethylbenzene, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG324", "45.80", "120.00", " ", " ", "BPIP, N-Benzyl PIP, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "CG331", "45.80", "120.00", " ", " ", "TOLU, toluene, modified by kevo for improved transferability"}, {"CG2R61", "CG2R61", "NG2O1", "20.00", "120.00", " ", " ", "NITB, nitrobenzene"}, {"CG2R61", "CG2R61", "NG2R60", "20.00", "124.00", " ", " ", "PYRIDINE pyridine, yin"}, {"CG2R61", "CG2R61", "NG2R61", "125.00", "120.00", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "NG2R62", "20.00", "124.00", " ", " ", "PYRD, pyridazine"}, {"CG2R61", "CG2R61", "NG2RC0", "100.00", "121.40", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "RESI PACP, FRET AND OTHERS"}, {"CG2R61", "CG2R61", "NG2S3", "60.00", "121.00", " ", " ", "PYRIDINE aminopyridine, adm jr., 7/94"}, {"CG2R61", "CG2R61", "NG301", "42.00", "120.00", " ", " ", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG311", "40.00", "120.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R61", "CG2R61", "NG3N1", "48.00", "122.00", " ", " ", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "CG2R61", "OG301", "110.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "OG303", "75.00", "120.00", " ", " ", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "CG2R61", "OG311", "45.20", "120.00", " ", " ", "PYRIDINE phenol, yin"}, {"CG2R61", "CG2R61", "OG312", "40.00", "120.00", " ", " ", "PROT adm jr. 8/27/91, phenoxide"}, {"CG2R61", "CG2R61", "OG3R60", "40.00", "120.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R61", "CG2R61", "SG311", "40.00", "120.00", " ", " ", "FETZ, phenothiazine, erh"}, {"CG2R61", "CG2R61", "SG3O1", "10.00", "122.30", " ", " ", "benzene sulfonic acid anion, og"}, {"CG2R61", "CG2R61", "SG3O2", "35.00", "119.00", " ", " ", "BSAM, benzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "CLGR1", "60.00", "120.00", " ", " ", "CHLB, chlorobenzene"}, {"CG2R61", "CG2R61", "BRGR1", "45.00", "120.00", " ", " ", "BROB, bromobenzene"}, {"CG2R61", "CG2R61", "IGR1", "45.00", "120.00", " ", " ", "IODB, iodobenzene"}, {"CG2R61", "CG2R61", "HGR61", "30.00", "120.00", "22.00", "2.15250", "PROT JES 8/25/89 benzene"}, {"CG2R61", "CG2R61", "HGR62", "30.00", "120.00", "22.00", "2.15250", "BROB, bromobenzene"}, {"CG2R62", "CG2R61", "HGR61", "20.00", "121.00", "22.00", "2.15250", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R63", "CG2R61", "HGR62", "18.00", "120.00", "22.00", "2.15250", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from CG2R64 CG2R61 HGR61; isg"}, {"CG2R64", "CG2R61", "NG2R60", "20.00", "123.40", " ", " ", "PTID, pteridine, erh"}, {"CG2R64", "CG2R61", "OG311", "45.20", "120.00", " ", " ", "2A3HPD, from PYRIDINE phenol, cacha"}, {"CG2R64", "CG2R61", "HGR61", "30.00", "120.00", "22.00", "2.15250", "2AMP, 2-amino pyridine, from PROT benzene, kevo"}, {"CG2R66", "CG2R61", "CG2R66", "40.00", "117.00", "35.00", "2.41620", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "CG331", "45.80", "120.00", " ", " ", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "NG2R60", "20.00", "124.00", " ", " ", "3FLP, 3-fluoropyridine. Kenno: copied from pyridine while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL TMCH/MECH while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "HGR62", "30.00", "121.50", "22.00", "2.15250", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R61", "NG2R60", "20.00", "124.00", " ", " ", "PYRIDINE pyridine, yin"}, {"CG2R67", "CG2R61", "HGR61", "30.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R67", "CG2R61", "HGR62", "30.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2RC0", "CG2R61", "NG2R62", "20.00", "119.00", " ", " ", "PUR9, purine(N9H); PUR7, purine(N7H), kevo"}, {"CG2RC0", "CG2R61", "HGR61", "30.00", "120.00", "22.00", "2.14600", "122 INDO/TRP"}, {"CG2RC0", "CG2R61", "HGR62", "30.00", "121.50", " ", " ", "22.00 2.16830 ! PUR7, purine(N7H); PUR9, purine(N9H), kevo"}, {"CG321", "CG2R61", "NG2R60", "45.80", "122.30", " ", " ", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, cacha"}, {"CG331", "CG2R61", "NG2R60", "45.80", "122.30", " ", " ", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, cacha"}, {"NG2R60", "CG2R61", "BRGR1", "45.00", "120.00", " ", " ", "3A6BPD, Gamma-3-Amino-6-bromo Pyridine GA CDCA Amide, cacha"}, {"NG2R60", "CG2R61", "HGR62", "30.00", "116.00", "35.00", "2.10000", "PYR1, pyridine %% Kenno: 112->116"}, {"NG2R61", "CG2R61", "HGR62", "33.00", "115.00", " ", " ", "URA24S, 2,4(1H,3H)-pyrimidinedithione, isg"}, {"NG2R62", "CG2R61", "HGR62", "30.00", "116.00", "35.00", "2.10000", "PYRD, pyridazine %% Kenno: 112->116"}, {"NG2RC0", "CG2R61", "HGR62", "30.00", "118.60", " ", " ", "INDZ, indolizine, kevo"}, {"CG2O1", "CG2R62", "CG2R62", "10.00", "131.80", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "CG2R62", "40.00", "121.00", " ", " ", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R63", "120.00", "122.30", " ", " ", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "NG2R61", "23.00", "116.10", " ", " ", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "NG2R62", "30.00", "118.00", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R62", "OG3R60", "40.00", "119.70", " ", " ", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R62", "40.00", "118.00", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "CG2R63", "120.00", "116.70", " ", " ", "NA T"}, {"CG2R62", "CG2R62", "CG2R64", "85.00", "117.80", " ", " ", "NA C"}, {"CG2R62", "CG2R62", "CG2R67", "40.00", "121.00", " ", " ", "pyo3b, from CG2R61 CG2R62 CG2R62, fylin"}, {"CG2R62", "CG2R62", "CG331", "40.00", "124.20", " ", " ", "NA 5mc, adm jr. 9/9/93"}, {"CG2R62", "CG2R62", "NG2R61", "85.00", "122.90", " ", " ", "NA C"}, {"CG2R62", "CG2R62", "NG2R62", "20.00", "121.00", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R62", "CG2R62", "NG2R67", "85.00", "122.90", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 NG2R61; isg"}, {"CG2R62", "CG2R62", "OG3R60", "10.00", "119.30", " ", " ", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "HGR62", "42.00", "119.00", " ", " ", "NA nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "HGR63", "80.00", "120.50", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R63", "CG2R62", "CG2R67", "120.00", "122.30", " ", " ", "pyo2b, from CG2R61 CG2R62 CG2R63, fylin"}, {"CG2R63", "CG2R62", "CG331", "38.00", "118.70", " ", " ", "NA T, c5 methyl"}, {"CG2R63", "CG2R62", "HGR62", "30.00", "120.30", " ", " ", "NA U, h5"}, {"CG2R64", "CG2R62", "HGR62", "38.00", "120.10", " ", " ", "NA C h5"}, {"CG2R67", "CG2R62", "NG2R61", "23.00", "116.10", " ", " ", "pyo3b, from CG2R61 CG2R62 NG2R61, fylin"}, {"CG2R67", "CG2R62", "NG2R62", "30.00", "118.00", " ", " ", "PYRF, from CG2R61 CG2R62 NG2R62, fylin"}, {"CG2R67", "CG2R62", "HGR62", "42.00", "119.00", " ", " ", "pyo3b, from CG2R62 CG2R62 HGR62, fylin"}, {"CG2R67", "CG2R62", "HGR63", "80.00", "120.50", " ", " ", "PIUB, from CG2R62 CG2R62 HGR63, fylin"}, {"NG2R61", "CG2R62", "NG2R62", "50.00", "124.00", " ", " ", "PYRH, from NG2R61 CG2R64 NG2R62, fylin"}, {"NG2R61", "CG2R62", "HGR62", "44.00", "115.00", " ", " ", "NA C, h6"}, {"NG2R61", "CG2R62", "HGR63", "80.00", "117.50", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2R62", "CG2R62", "HGR62", "23.50", "120.00", "35.00", "2.10000", "43HPY, 4(3H)-pyrimidinone, isg. Adjusting angle without UB (from NG2R62 CG2R61 HGR62) is problematic ==> RE-OPTIMIZE!"}, {"NG2R62", "CG2R62", "HGR63", "50.50", "118.50", " ", " ", "PYRH, fylin"}, {"NG2R67", "CG2R62", "HGR62", "44.00", "118.10", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R63", "NG2R61", "59.00", "111.90", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R63", "NG2R67", "59.00", "113.40", " ", " ", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from YTS2; isg"}, {"CG2R61", "CG2R63", "SG2D1", "38.00", "125.10", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R62", "CG2R63", "CG2R62", "10.00", "120.80", " ", " ", "4PYO, 4(1H)-pyridinone; from CG2R62 CG2R62 CG2R62; isg"}, {"CG2R62", "CG2R63", "NG2R61", "70.00", "113.50", " ", " ", "NA T, adm jr. 11/97"}, {"CG2R62", "CG2R63", "NG2R67", "70.00", "115.70", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R62 NG2R61; isg"}, {"CG2R62", "CG2R63", "OG2D4", "100.00", "124.60", " ", " ", "NA T, o4"}, {"CG2R62", "CG2R63", "OG3R60", "10.00", "121.50", " ", " ", "RIN, coumarin, isg"}, {"CG2R62", "CG2R63", "SG2D1", "52.00", "123.50", " ", " ", "YT2S, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2RC0", "CG2R63", "NG2R61", "70.00", "107.80", " ", " ", "NA Gua 6R)"}, {"CG2RC0", "CG2R63", "OG2D4", "50.00", "124.70", " ", " ", "NA Gua"}, {"NG2R61", "CG2R63", "NG2R61", "50.00", "114.00", " ", " ", "NA U"}, {"NG2R61", "CG2R63", "NG2R62", "50.00", "116.80", " ", " ", "NA C"}, {"NG2R61", "CG2R63", "NG2R67", "50.00", "114.00", " ", " ", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61, NA; isg"}, {"NG2R61", "CG2R63", "OG2D4", "130.00", "119.40", " ", " ", "NA C, o2"}, {"NG2R61", "CG2R63", "SG2D1", "56.00", "123.00", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"NG2R62", "CG2R63", "OG2D4", "130.00", "123.80", " ", " ", "NA C"}, {"NG2R67", "CG2R63", "OG2D4", "130.00", "119.70", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from NG2R61 CG2R63 OG2D4; isg"}, {"NG2R67", "CG2R63", "SG2D1", "56.00", "123.00", " ", " ", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from YTS2; isg"}, {"OG2D4", "CG2R63", "OG3R60", "20.00", "113.90", " ", " ", "RIN, coumarin, isg"}, {"CG2R61", "CG2R64", "NG2R60", "20.00", "124.00", " ", " ", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "CG2R64", "NG2R62", "20.00", "128.00", " ", " ", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R64", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "2AMP, 2-Amino pyridine, from PACP, p-acetamide-phenol, kevo"}, {"CG2R62", "CG2R64", "NG2R62", "85.00", "119.30", " ", " ", "NA C"}, {"CG2R62", "CG2R64", "NG2S3", "81.00", "118.40", " ", " ", "NA C"}, {"CG2R62", "CG2R64", "NG301", "67.00", "120.70", " ", " ", "TMC, yxu"}, {"CG2RC0", "CG2R64", "NG2R62", "60.00", "110.70", " ", " ", "NA Ade 6R)"}, {"CG2RC0", "CG2R64", "NG2S3", "50.00", "118.60", " ", " ", "NA Ade"}, {"CG2RC0", "CG2R64", "NG301", "40.00", "120.00", " ", " ", "M6A, yxu"}, {"NG2R60", "CG2R64", "NG2S1", "40.00", "120.00", "35.00", "2.4162", "2AMP, 2-Amino pyridine, from PACP, p-acetamide-phenol, cacha (verified by kevo)"}, {"NG2R61", "CG2R64", "NG2R62", "70.00", "122.20", " ", " ", "NA Gua 6R)"}, {"NG2R61", "CG2R64", "NG2S3", "95.00", "115.40", " ", " ", "NA Gua n2"}, {"NG2R61", "CG2R64", "SG311", "20.00", "121.80", " ", " ", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from CG2R61 CG2R61 SG311; isg"}, {"NG2R61", "CG2R64", "HGR62", "80.00", "119.00", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"NG2R62", "CG2R64", "NG2R62", "60.00", "128.00", " ", " ", "NA Ade 6R) %% TEST 133.0 -> 122.2 %%"}, {"NG2R62", "CG2R64", "NG2R67", "70.00", "125.00", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R61 CG2R64 NG2R62; isg"}, {"NG2R62", "CG2R64", "NG2S3", "95.00", "122.40", " ", " ", "NA Gua"}, {"NG2R62", "CG2R64", "NG301", "78.00", "120.00", " ", " ", "TMC, yxu"}, {"NG2R62", "CG2R64", "SG311", "54.00", "116.00", " ", " ", "2SMPYR, 2-(methylthio)-pyrimidine; from CG2R61 CG2R61 SG311; isg"}, {"NG2R62", "CG2R64", "HGR62", "38.00", "116.00", " ", " ", "NA Ade h2 %% TEST 113.5 -> 118.9 %%"}, {"NG2R67", "CG2R64", "HGR62", "80.00", "119.00", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R61 CG2R64 HGR62, TC243C; isg"}, {"CG2R61", "CG2R66", "CG2R61", "40.00", "122.50", "35.00", "2.41620", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R66", "CG2R67", "40.00", "122.50", "35.00", "2.41620", "PYO2F, from CG2R61 CG2R66 CG2R61, fylin"}, {"CG2R61", "CG2R66", "FGR1", "60.00", "118.75", " ", " ", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R66", "FGR1", "60.00", "118.75", " ", " ", "PYO2F, from CG2R61 CG2R66 FGR1, fylin"}, {"CG2R61", "CG2R67", "CG2R61", "40.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R67", "CG2R66", "40.00", "120.00", " ", " ", "PYO2F, from CG2R61 CG2R67 CG2R61, fylin"}, {"CG2R61", "CG2R67", "CG2R67", "40.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R67", "CG2RC0", "50.00", "120.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "NG2R60", "58.00", "126.80", " ", " ", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "NG2R67", "50.00", "120.00", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R62", "CG2R67", "CG2R62", "40.00", "120.00", " ", " ", "pyo3b, from CG2R61 CG2R67 CG2R61, fylin"}, {"CG2R62", "CG2R67", "CG2R67", "40.00", "120.00", " ", " ", "pyo3b, from CG2R61 CG2R67 CG2R67, fylin"}, {"CG2R66", "CG2R67", "CG2R67", "40.00", "120.00", " ", " ", "PYO2F, from CG2R61 CG2R67 CG2R67, fylin"}, {"CG2R67", "CG2R67", "CG2RC0", "55.00", "110.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2R67", "NG2R60", "44.00", "113.20", " ", " ", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R71", "CG2R71", "CG2R71", "30.00", "128.60", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2RC7", "90.00", "129.30", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "HGR71", "37.00", "115.70", " ", " ", "AZUL, Azulene, kevo"}, {"CG2RC7", "CG2R71", "HGR71", "32.00", "115.00", " ", " ", "AZUL, Azulene, kevo"}, {"CG25C1", "CG2RC0", "CG2R61", "40.00", "125.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2RC0", "CG2RC0", "20.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2R61", "40.00", "125.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2RC0", "20.00", "107.00", " ", " ", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R51", "CG2RC0", "CG2R61", "130.00", "132.00", " ", " ", "133.50 ! INDO/TRP"}, {"CG2R51", "CG2RC0", "CG2RC0", "85.00", "108.00", " ", " ", "INDO/TRP"}, {"CG2R51", "CG2RC0", "NG2RC0", "90.00", "109.20", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R52", "CG2RC0", "CG2R61", "60.00", "134.10", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2R52", "CG2RC0", "CG2RC0", "90.00", "105.90", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2RC0", "CG2R67", "50.00", "120.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2RC0", "CG2RC0", "50.00", "120.00", " ", " ", "110.00 ! INDO/TRP"}, {"CG2R61", "CG2RC0", "CG3C52", "60.00", "130.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "NG2R50", "130.00", "130.00", " ", " ", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "130.00", "132.60", " ", " ", "129.50 ! INDO/TRP"}, {"CG2R61", "CG2RC0", "NG2RC0", "80.00", "118.80", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG3C51", "35.00", "130.70", " ", " ", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "OG2R50", "100.00", "129.40", " ", " ", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2RC0", "OG3C51", "50.00", "125.30", " ", " ", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG2R61", "CG2RC0", "SG2R50", "45.00", "123.70", " ", " ", "ZTHP, benzothiophene, kevo"}, {"CG2R63", "CG2RC0", "CG2RC0", "70.00", "119.60", " ", " ", "NA Gua 6R) bridgeC5"}, {"CG2R63", "CG2RC0", "NG2R50", "125.00", "129.00", " ", " ", "NA Gua bridgeC5"}, {"CG2R64", "CG2RC0", "CG2RC0", "60.00", "121.00", " ", " ", "NA Ade 6R) bridgeC5"}, {"CG2R64", "CG2RC0", "NG2R50", "100.00", "129.00", " ", " ", "NA Ade bridgeC5"}, {"CG2R67", "CG2RC0", "CG3C52", "110.00", "110.00", " ", " ", "FLRN, Fluorene, erh"}, {"CG2R67", "CG2RC0", "NG2R51", "100.00", "105.70", " ", " ", "CRBZ, carbazole, erh"}, {"CG2RC0", "CG2RC0", "CG3C52", "110.00", "110.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "CG2RC0", "NG2R50", "100.00", "110.00", " ", " ", "NA Ade 5R) bridgeC5"}, {"CG2RC0", "CG2RC0", "NG2R51", "100.00", "105.70", " ", " ", "NA Ade 5R) bridgeC4"}, {"CG2RC0", "CG2RC0", "NG2R62", "60.00", "127.40", " ", " ", "NA Ade 6R) bridgeC4"}, {"CG2RC0", "CG2RC0", "NG3C51", "100.00", "109.30", " ", " ", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "OG2R50", "110.00", "110.60", " ", " ", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "CG2RC0", "OG3C51", "80.00", "114.70", " ", " ", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG2RC0", "CG2RC0", "SG2R50", "70.00", "116.30", " ", " ", "ZTHP, benzothiophene, kevo"}, {"NG2R50", "CG2RC0", "NG2R62", "20.00", "122.60", " ", " ", "PUR7, purine(N7H), kevo"}, {"NG2R51", "CG2RC0", "NG2R62", "100.00", "126.90", " ", " ", "NA Ade bridgeC4"}, {"CG2R51", "CG2RC7", "CG2R71", "30.00", "122.70", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2RC7", "CG2RC7", "110.00", "109.50", " ", " ", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2RC7", "CG2RC7", "30.00", "127.80", " ", " ", "AZUL, Azulene, kevo"}, {"CG2D1", "CG301", "CG311", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG301", "CG321", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG301", "CG331", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2DC1", "CG301", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG301", "CG331", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG301", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG301", "CG331", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2O3", "CG301", "CG331", "52.00", "108.00", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG2O3", "CG301", "OG301", "45.00", "109.00", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG2O3", "CG301", "OG311", "75.70", "110.10", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "CG301", "CG311", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG311", "CG301", "CG321", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG311", "CG301", "CG331", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG321", "CG301", "CG321", "58.35", "113.50", "11.16", "2.561", "CHOLEST cholesterol"}, {"CG321", "CG301", "CG331", "58.35", "113.50", "11.16", "2.561", "RETINOL TMCH/MECH"}, {"CG321", "CG301", "OG301", "45.50", "114.50", " ", " ", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG331", "58.35", "113.50", "11.16", "2.561", "RETINOL TMCH/MECH"}, {"CG331", "CG301", "OG301", "45.00", "111.50", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG302", "75.70", "110.10", " ", " ", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG331", "CG301", "OG311", "75.70", "110.10", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "CLGA3", "97.00", "111.20", " ", " ", "TCLE"}, {"CG331", "CG301", "BRGA3", "98.00", "111.20", " ", " ", "TBRE"}, {"OG301", "CG301", "OG301", "70.49", "107.00", " ", " ", "DMOP, dimethoxypropane, sna"}, {"OG301", "CG301", "OG311", "45.00", "116.50", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CLGA3", "CG301", "CLGA3", "95.00", "109.00", " ", " ", "TCLE"}, {"BRGA3", "CG301", "BRGA3", "90.00", "110.50", " ", " ", "TBRE"}, {"CG321", "CG302", "FGA3", "42.00", "112.00", "30.00", "2.357", "TFE, trifluoroethanol"}, {"CG331", "CG302", "FGA3", "42.00", "112.00", "30.00", "2.357", "FLUROALK fluoroalkanes"}, {"FGA3", "CG302", "FGA3", "118.00", "107.00", "30.00", "2.155", "FLUROALK fluoroalkanes"}, {"CG2O1", "CG311", "CG311", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "CG321", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "CG331", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "NG2S1", "50.00", "107.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG311", "HGA1", "50.00", "109.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O2", "CG311", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG311", "NG2R53", "50.00", "107.00", " ", " ", "drug design project, xxwy"}, {"CG2O2", "CG311", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG311", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O3", "CG311", "CG2R61", "51.80", "107.50", " ", " ", "FBIF, Fatty acid Binding protein Inhibitor F, cacha"}, {"CG2O3", "CG311", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG311", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG311", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/09/92, for ALA cter"}, {"CG2O3", "CG311", "NG2R53", "50.00", "107.00", " ", " ", "drug design project, xxwy"}, {"CG2O3", "CG311", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG311", "OG301", "45.00", "109.00", " ", " ", "CC321 CC3163 OC3C61 optimize on PROA, gk (not affected by mistake)"}, {"CG2O3", "CG311", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O5", "CG311", "OG311", "112.00", "111.00", " ", " ", "BIPHENYL ANALOGS unmodified, peml ! reset by kevo to value from CG2O5 CG311 OG312 ==> RE-OPTIMIZE !!!"}, {"CG2O5", "CG311", "OG312", "130.00", "111.00", " ", " ", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2O5", "CG311", "HGA1", "50.00", "109.50", " ", " ", "BIPHENYL ANALOGS from PROT Alanine Dipeptide ab initio calc's (LK) consistent with adm 11/08"}, {"CG2R61", "CG311", "CG321", "51.80", "107.50", " ", " ", "Slack parameter from difluorotoluene picked up by FBIC ==> RE-OPTIMIZE !!!"}, {"CG2R61", "CG311", "CG331", "51.80", "107.50", " ", " ", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG2R61", "CG311", "HGA1", "43.00", "111.00", " ", " ", "NAMODEL difluorotoluene"}, {"CG301", "CG311", "CG311", "52.00", "108.00", " ", " ", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG301", "CG311", "CG321", "58.35", "113.50", "11.16", "2.561", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG301", "CG311", "HGA1", "34.60", "110.10", "22.53", "2.179", "CA, CHOLIC ACID, cacha, 03/06"}, {"CG311", "CG311", "CG311", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG321", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG331", "53.35", "108.50", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG311", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG311", "CG311", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG311", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG321", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG331", "53.35", "108.50", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "58.35", "113.50", "11.16", "2.561", "LIPID glycerol"}, {"CG321", "CG311", "CG324", "58.35", "110.50", "11.16", "2.56100", "FLAVOP PIP1,2,3"}, {"CG321", "CG311", "CG331", "53.35", "114.00", "8.00", "2.561", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG3C51", "53.35", "111.00", "8.00", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "NG2R53", "70.00", "113.50", " ", " ", "drug design project, xxwy"}, {"CG321", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG321", "CG311", "OG302", "115.00", "109.70", " ", " ", "NA"}, {"CG321", "CG311", "OG311", "75.70", "110.00", " ", " ", "NA"}, {"CG321", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG324", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "G3P(R/S), 01OH04"}, {"CG324", "CG311", "OG311", "75.70", "112.10", " ", " ", "FLAVOP PIP1,2,3"}, {"CG324", "CG311", "HGA1", "26.50", "111.80", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG331", "CG311", "CG331", "53.35", "114.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG3C51", "53.35", "108.50", "8.00", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "NG2S1", "70.00", "113.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG331", "CG311", "OG301", "45.00", "111.50", " ", " ", "all34_ethers_1a OC30A CC32A CC33A, gk or og (not affected by mistake)"}, {"CG331", "CG311", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG331", "CG311", "OG303", "115.00", "109.70", " ", " ", "PROTNA Ser-Phos"}, {"CG331", "CG311", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG331", "CG311", "CLGA1", "88.00", "111.20", " ", " ", "DCLE"}, {"CG331", "CG311", "BRGA2", "75.00", "111.00", " ", " ", "DBRE"}, {"CG331", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG311", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3RC1", "CG311", "OG311", "75.70", "110.10", " ", " ", "CARBOCY ncarbocyclic sugars"}, {"CG3RC1", "CG311", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG311", "HGA1", "48.00", "108.00", " ", " ", "drug design project, xxwy"}, {"NG2S1", "CG311", "HGA1", "48.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG301", "CG311", "HGA1", "60.00", "109.50", " ", " ", "all34_ethers_1a HCA2 CC32A OC30A, gk or og (not affected by mistake)"}, {"OG302", "CG311", "HGA1", "60.00", "109.50", " ", " ", "PROTNA Ser-Phos"}, {"OG303", "CG311", "HGA1", "60.00", "109.50", " ", " ", "PROTNA Ser-Phos"}, {"OG311", "CG311", "OG312", "111.90", "111.00", "100.00", "2.35000", "BIPHENYL ANALOGS, peml"}, {"OG311", "CG311", "HGA1", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG312", "CG311", "HGA1", "65.90", "117.80", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CLGA1", "CG311", "CLGA1", "95.00", "109.00", " ", " ", "DCLE"}, {"CLGA1", "CG311", "HGA1", "44.00", "108.50", " ", " ", "DCLE"}, {"BRGA2", "CG311", "BRGA2", "95.00", "110.00", " ", " ", "DBRE"}, {"BRGA2", "CG311", "HGA1", "36.00", "107.00", " ", " ", "DBRE"}, {"CG2R61", "CG312", "PG1", "90.00", "117.00", "20.0", "2.30", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG2R61", "CG312", "PG2", "90.00", "117.00", "20.0", "2.30", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG2R61", "CG312", "FGA2", "50.00", "115.00", "30.0", "2.357", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG331", "CG312", "FGA2", "50.00", "112.00", "30.00", "2.357", "FLUROALK fluoroalkanes"}, {"CG331", "CG312", "HGA7", "32.00", "112.00", "3.00", "2.168", "FLUROALK fluoroalkanes"}, {"PG1", "CG312", "FGA2", "50.00", "122.00", "30.0", "2.357", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"PG2", "CG312", "FGA2", "50.00", "122.00", "30.0", "2.357", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"FGA2", "CG312", "FGA2", "150.00", "107.00", "10.00", "2.170", "FLUROALK fluoroalkanes"}, {"FGA2", "CG312", "HGA7", "41.90", "108.89", "5.00", "1.980", "FLUROALK fluoroalkanes"}, {"CG2O1", "CG314", "CG311", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG314", "CG321", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG314", "CG331", "52.00", "108.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG314", "NG3P3", "43.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG2O1", "CG314", "HGA1", "50.00", "109.50", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O3", "CG314", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/09/92, for ALA cter"}, {"CG2O3", "CG314", "NG3P3", "43.70", "110.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG314", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG311", "CG314", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG311", "CG314", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG314", "CG321", "58.35", "113.50", "11.16", "2.561", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG321", "CG314", "NG3P2", "40.00", "110.00", " ", " ", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG321", "CG314", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG321", "CG314", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG314", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG331", "CG314", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P2", "CG314", "HGA1", "45.00", "102.30", "35.00", "2.10100", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"NG3P3", "CG314", "HGA1", "51.50", "107.50", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG2D1", "CG321", "CG2D1", "30.00", "114.00", " ", " ", "LIPID 1,4-dipentene, adm jr., 2/00"}, {"CG2D1", "CG321", "CG2DC1", "125.00", "108.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95 ! force constant is unlikely high"}, {"CG2D1", "CG321", "CG2DC2", "125.00", "108.00", " ", " ", "NICH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95 ! force constant is unlikely high"}, {"CG2D1", "CG321", "CG311", "32.00", "112.20", " ", " ", "CHOLEST cholesterol"}, {"CG2D1", "CG321", "CG321", "32.00", "112.20", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2D1", "CG321", "CG331", "32.00", "112.20", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2D1", "CG321", "OG311", "75.70", "110.10", " ", " ", "RETINOL PROL"}, {"CG2D1", "CG321", "HGA2", "45.00", "111.50", " ", " ", "LIPID 1-butene; propene, yin,adm jr., 12/95"}, {"CG2DC1", "CG321", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC1", "CG321", "OG311", "75.70", "110.10", " ", " ", "RETINOL PROL"}, {"CG2DC1", "CG321", "OG3R60", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC1", "CG321", "HGA2", "45.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG321", "CG321", "32.00", "112.20", " ", " ", "RETINOL MECH"}, {"CG2DC2", "CG321", "OG311", "75.70", "110.10", " ", " ", "RETINOL PROL"}, {"CG2DC2", "CG321", "OG3R60", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2DC2", "CG321", "HGA2", "45.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2O1", "CG321", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O1", "CG321", "CG314", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O1", "CG321", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O1", "CG321", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O1", "CG321", "NG2S1", "50.00", "107.00", " ", " ", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O1", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT alanine dipeptide, 5/09/91"}, {"CG2O2", "CG321", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "CG314", "52.00", "108.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "CG321", "52.00", "108.00", " ", " ", "LIPID alkane"}, {"CG2O2", "CG321", "CG331", "52.00", "108.00", " ", " ", "LIPID alkane"}, {"CG2O2", "CG321", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "NG321", "43.70", "110.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O2", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O3", "CG321", "CG311", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "CG314", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "CG321", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "CG331", "52.00", "108.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "NG2S1", "50.00", "107.00", " ", " ", "PROT adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "HGA1", "50.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O4", "CG321", "CG331", "60.00", "113.80", " ", " ", "ALDEHYDE propionaldehyde unmodified"}, {"CG2O4", "CG321", "CLGA1", "65.00", "111.82", " ", " ", "ALDEHYDE chloroacetaldehyde unmodified"}, {"CG2O4", "CG321", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PALD, propionaldehyde from PROT adm jr. 5/02/91, acetic acid pure solvent. Consistent with adm 11/08"}, {"CG2O5", "CG321", "CG321", "60.00", "113.80", " ", " ", "CHON, cyclohexanone; from PALD, propionaldehyde; yapol"}, {"CG2O5", "CG321", "CG331", "60.00", "111.50", " ", " ", "PHEK, phenyl ethyl ketone; from BTON, butanone; mcs"}, {"CG2O5", "CG321", "HGA2", "50.00", "109.50", " ", " ", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2R51", "CG321", "CG311", "58.35", "114.00", " ", " ", "INDO/TRP"}, {"CG2R51", "CG321", "CG314", "58.35", "114.00", " ", " ", "PROT N-terminal AA - standard parameter collided with INDO/TRP"}, {"CG2R51", "CG321", "CG331", "58.35", "114.00", " ", " ", "INDO/TRP"}, {"CG2R51", "CG321", "HGA2", "55.00", "109.50", " ", " ", "INDO/TRP"}, {"CG2R61", "CG321", "CG2R61", "51.80", "107.50", " ", " ", "PYRIDINE pyr_CH2C6H5, yin"}, {"CG2R61", "CG321", "CG311", "51.80", "107.50", " ", " ", "PROT PARALLH19 (JES)"}, {"CG2R61", "CG321", "CG314", "51.80", "107.50", " ", " ", "PROT PARALLH19 (JES)"}, {"CG2R61", "CG321", "CG321", "51.80", "107.50", " ", " ", "PYRIDINE butylpyridine, yin"}, {"CG2R61", "CG321", "CG331", "51.80", "107.50", " ", " ", "PROT ethylbenzene, adm jr., 3/7/92"}, {"CG2R61", "CG321", "NG2S1", "53.00", "115.20", " ", " ", "NZAD, N-benzylacetamide; from CG2O2 CG321 NG2S1; isg"}, {"CG2R61", "CG321", "OG302", "75.70", "110.10", " ", " ", "ABGA, Alpha Benzyl Glu Acid CDCA Amide, corrected by kevo"}, {"CG2R61", "CG321", "OG311", "75.70", "110.10", " ", " ", "toppar_all22_prot_pyridines.str has 115.1 but that appears to be a copy-paste error! - kevo"}, {"CG2R61", "CG321", "PG1", "90.00", "111.00", "20.0", "2.300", "BDFP, Benzylphosphonate re-optimize?"}, {"CG2R61", "CG321", "PG2", "90.00", "111.00", "20.0", "2.300", "BDFD, Benzylphosphonate / re-optimize?"}, {"CG2R61", "CG321", "HGA2", "49.30", "107.50", " ", " ", "PYRIDINE pyridines, yin"}, {"CG301", "CG321", "CG321", "58.35", "113.50", "11.16", "2.561", "RETINOL TMCH/MECH"}, {"CG301", "CG321", "CG331", "65.35", "113.50", " ", " ", "DMBU, dimethoxybutane, sna"}, {"CG301", "CG321", "HGA2", "26.50", "110.10", "22.53", "2.179", "RETINOL TMCH/MECH"}, {"CG302", "CG321", "OG311", "75.70", "110.10", " ", " ", "TFE, triflouroethanol"}, {"CG302", "CG321", "HGA2", "34.60", "110.10", "22.53", "2.179", "TFE, trifluoroethanol"}, {"CG311", "CG321", "CG311", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "CG314", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "CG321", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "CG324", "58.35", "110.50", "11.16", "2.56100", "FLAVOP PIP1,2,3"}, {"CG311", "CG321", "CG331", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG311", "CG321", "NG2S1", "70.00", "113.50", " ", " ", "G3P(R/S), 01OH04, cacha from CG311 CG311 NG2S1 ==> non-ideal analogy ==> re-optimize???"}, {"CG311", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG311", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG311", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG311", "CG321", "SG311", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG311", "CG321", "HGA2", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG314", "CG321", "CG321", "58.35", "113.50", "11.16", "2.56100", "PROT alkanes"}, {"CG314", "CG321", "NG2S1", "70.00", "113.50", " ", " ", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha from CG311 CG311 NG2S1 ==> non-ideal analogy ==> re-optimize???"}, {"CG314", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG314", "CG321", "SG311", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG314", "CG321", "HGA2", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG321", "CG321", "CG321", "58.35", "113.60", "11.16", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG324", "58.35", "110.50", "11.16", "2.56100", "FLAVOP PIP1,2,3"}, {"CG321", "CG321", "CG331", "58.00", "115.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "NG2D1", "103.00", "112.00", " ", " ", "EEPI, from CG321 CG321 NG2S1, fylin"}, {"CG321", "CG321", "NG2S1", "70.00", "113.50", " ", " ", "slack parameter picked up by 3CPD ==> re-optimize?"}, {"CG321", "CG321", "NG311", "43.70", "110.00", " ", " ", "K2Cn, cgenff_compromise, kevo"}, {"CG321", "CG321", "OG301", "45.00", "111.50", " ", " ", "diethylether, alex"}, {"CG321", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG321", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG321", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG321", "CG321", "OG3C61", "45.00", "111.50", " ", " ", "DIOX, dioxane"}, {"CG321", "CG321", "SG311", "58.00", "114.50", " ", " ", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG3O1", "43.00", "105.50", " ", " ", "PSNA, propyl sulfonate, xhe"}, {"CG321", "CG321", "HGA2", "26.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG324", "CG321", "CG331", "58.35", "110.50", "11.16", "2.56100", "NIPR, nitropropane, abar"}, {"CG324", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG324", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG324", "CG321", "OG311", "75.70", "112.10", " ", " ", "FLAVOP PIP1,2,3"}, {"CG324", "CG321", "OG3C61", "50.00", "106.50", " ", " ", "MORP, morpholine"}, {"CG324", "CG321", "SG311", "70.00", "110.00", " ", " ", "TMOR, thiomorpholine"}, {"CG324", "CG321", "HGA2", "26.50", "110.10", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG331", "CG321", "CG331", "53.35", "114.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG321", "CG3C31", "53.35", "111.00", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG331", "CG321", "NG2D1", "62.00", "114.00", " ", " ", "EICY, ethyl isocyanate, xxwy"}, {"CG331", "CG321", "NG2R51", "70.00", "120.00", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, from CG331 CG321 NG2S1, kevo"}, {"CG331", "CG321", "NG2S1", "70.00", "120.00", " ", " ", "DECB, diethyl carbamate, cacha and xxwy ! 120, really??? DBLCHECK WITH WENBO!!!"}, {"CG331", "CG321", "NG2S3", "27.30", "109.70", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG311", "43.70", "112.20", " ", " ", "PEI polymers, kevo"}, {"CG331", "CG321", "OG301", "45.00", "111.50", " ", " ", "diethylether, alex"}, {"CG331", "CG321", "OG302", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG331", "CG321", "OG303", "70.00", "108.40", " ", " ", "PROTNA Thr-Phos"}, {"CG331", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG331", "CG321", "OG312", "65.00", "122.00", " ", " ", "PROT ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CG331", "CG321", "SG301", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG331", "CG321", "SG311", "58.00", "114.50", " ", " ", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG331", "CG321", "SG3O1", "50.00", "105.50", " ", " ", "ESNA, ethyl sulfonate, xhe"}, {"CG331", "CG321", "SG3O2", "45.00", "105.00", " ", " ", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG331", "CG321", "SG3O3", "45.00", "105.00", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CG331", "CG321", "CLGA1", "71.00", "112.20", " ", " ", "CLET"}, {"CG331", "CG321", "BRGA1", "71.00", "111.00", " ", " ", "BRET"}, {"CG331", "CG321", "HGA2", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C31", "CG321", "HGA2", "42.00", "109.00", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG3C51", "CG321", "OG301", "75.70", "110.10", " ", " ", "3POMP, 3-phenoxymethylpyrrolidine; standard parameter; kevo"}, {"CG3C51", "CG321", "OG303", "75.70", "110.10", " ", " ", "LIPID acetic acid"}, {"CG3C51", "CG321", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG3C51", "CG321", "SG311", "58.00", "112.50", " ", " ", "PROT as in expt.MeEtS and DALC crystal, 5/15/92"}, {"CG3C51", "CG321", "HGA2", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3RC1", "CG321", "OG303", "75.70", "110.10", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG321", "HGA2", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2D1", "CG321", "HGA2", "45.00", "107.50", " ", " ", "EEPI, from NG2D1 CG331 HGA3, fylin"}, {"NG2R51", "CG321", "HGA2", "33.43", "110.10", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, from NG2R51 CG331 HGA3, kevo"}, {"NG2S1", "CG321", "HGA2", "51.50", "109.50", " ", " ", "PROT from NG2S1 CG331 HA, for lactams, adm jr."}, {"NG2S3", "CG321", "HGA2", "38.30", "105.20", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"NG311", "CG321", "NG311", "90.00", "113.00", " ", " ", "OBTZ, 1,1-dioxo-3,4-dihydro-2H-1,2,4-benzothiadiazine, xxwy"}, {"NG311", "CG321", "HGA2", "32.40", "109.50", "50.00", "2.1300", "PEI polymers, kevo"}, {"NG321", "CG321", "HGA2", "32.40", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"OG301", "CG321", "HGA2", "45.90", "108.89", " ", " ", "ETOB, Ethoxybenzene, cacha"}, {"OG302", "CG321", "HGA2", "60.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, methyl acetate"}, {"OG303", "CG321", "HGA2", "60.00", "109.50", " ", " ", "PROTNA Thr-Phos"}, {"OG311", "CG321", "HGA2", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG312", "CG321", "HGA2", "65.00", "118.30", " ", " ", "PROT ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OG3C61", "CG321", "OG3C61", "45.00", "110.50", " ", " ", "DIXB, dioxane"}, {"OG3C61", "CG321", "HGA2", "45.00", "109.50", " ", " ", "DIOX, dioxane"}, {"OG3R60", "CG321", "HGA2", "55.00", "111.50", " ", " ", "PY02, 2h-pyran"}, {"PG1", "CG321", "HGA2", "90.00", "110.00", "5.40", "1.802", "BDFP, Benzylphosphonate re-optimize?"}, {"PG2", "CG321", "HGA2", "90.00", "110.00", "5.40", "1.802", "BDFD, Benzylphosphonate / re-optimize?"}, {"SG301", "CG321", "HGA2", "38.00", "111.00", " ", " ", "PROT new S-S atom type 8/24/90"}, {"SG311", "CG321", "SG311", "100.00", "117.00", " ", " ", "THIT, trithiazine"}, {"SG311", "CG321", "HGA2", "46.10", "111.30", " ", " ", "PROT vib. freq. and HF/geo. (DTN) 8/24/90"}, {"SG3O1", "CG321", "HGA2", "49.00", "109.00", " ", " ", "ESNA, ethyl sulfonate, xhe"}, {"SG3O2", "CG321", "HGA2", "45.00", "107.00", " ", " ", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"SG3O3", "CG321", "HGA2", "45.00", "107.00", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CLGA1", "CG321", "HGA2", "42.00", "107.00", " ", " ", "CLET, chloroethane"}, {"BRGA1", "CG321", "HGA2", "36.00", "106.00", " ", " ", "BRET"}, {"HGA2", "CG321", "HGA2", "35.50", "109.00", "5.40", "1.802", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG322", "FGA1", "44.00", "112.00", "30.00", "2.369", "FLUROALK fluoroalkanes"}, {"CG331", "CG322", "HGA6", "31.00", "112.00", "3.00", "2.168", "FLUROALK fluoroalkanes"}, {"FGA1", "CG322", "HGA6", "57.50", "108.89", "5.00", "1.997", "FLUROALK fluoroalkanes"}, {"HGA6", "CG322", "HGA6", "35.50", "108.40", "10.40", "1.746", "FLUROALK fluoroalkanes"}, {"CG331", "CG323", "SG302", "55.00", "118.00", " ", " ", "PROT ethylthiolate, adm jr., 6/1/92"}, {"CG331", "CG323", "HGA2", "34.60", "110.10", "22.53", "2.17900", "PROT ethylthiolate, adm jr., 6/1/92"}, {"SG302", "CG323", "HGA2", "40.00", "112.30", " ", " ", "PROT methylthiolate, adm jr., 6/1/92"}, {"SG302", "CG323", "HGA3", "40.00", "112.30", " ", " ", "PROT methylthiolate, adm jr., 6/1/92"}, {"HGA2", "CG323", "HGA2", "35.50", "108.40", "14.00", "1.77500", "PROT methylthiolate, adm jr., 6/1/92"}, {"HGA3", "CG323", "HGA3", "35.50", "108.40", "14.00", "1.77500", "PROT methylthiolate, adm jr., 6/1/92"}, {"CG2O1", "CG324", "NG3P3", "43.70", "110.00", " ", " ", "PROT alanine (JCS)"}, {"CG2O1", "CG324", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT alanine dipeptide, 5/09/91"}, {"CG2O3", "CG324", "NG3P3", "43.70", "110.00", " ", " ", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O3", "CG324", "HGA2", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2R61", "CG324", "NG3P1", "45.00", "102.30", "35.00", "2.10100", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "HGA2", "49.30", "107.50", " ", " ", "BPIP, N-Benzyl PIP, cacha"}, {"CG311", "CG324", "NG3P1", "100.00", "110.00", " ", " ", "FLAVOP PIP1,2,3"}, {"CG311", "CG324", "NG3P2", "40.00", "110.00", " ", " ", "G3P(R/S), 01OH04"}, {"CG311", "CG324", "HGA2", "26.50", "111.80", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "NG2O1", "56.80", "109.00", " ", " ", "NIPR, nitropropane, abar"}, {"CG321", "CG324", "NG2P1", "67.70", "110.00", " ", " ", "RETINOL SCK1, protonated Schiff's base #eq#"}, {"CG321", "CG324", "NG3P0", "67.70", "115.00", " ", " ", "LIPID tetramethylammonium"}, {"CG321", "CG324", "NG3P1", "100.00", "110.00", " ", " ", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "NG3P2", "40.00", "110.00", " ", " ", "PIP, piperidine"}, {"CG321", "CG324", "NG3P3", "67.70", "110.00", " ", " ", "LIPID ethanolamine"}, {"CG321", "CG324", "HGA2", "26.50", "111.80", "22.53", "2.17900", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "HGP5", "33.43", "110.10", "22.53", "2.17900", "LIPID alkane"}, {"CG331", "CG324", "NG3P0", "67.70", "115.00", " ", " ", "LIPID tetramethylammonium"}, {"CG331", "CG324", "NG3P3", "67.70", "110.00", " ", " ", "PROT new aliphatics, adm jr., 2/3/92"}, {"CG331", "CG324", "HGA2", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG324", "HGP5", "33.43", "110.10", "22.53", "2.17900", "LIPID alkane"}, {"CG3C31", "CG324", "NG3P3", "67.70", "110.00", " ", " ", "AMCP, aminomethyl cyclopropane; from PROT new aliphatics, adm jr., 2/3/92m; jhs"}, {"CG3C31", "CG324", "HGA2", "34.60", "110.10", " ", " ", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs, UB term deleted"}, {"NG2O1", "CG324", "HGA2", "60.00", "106.30", " ", " ", "NIPR, nitropropane, abar"}, {"NG2P1", "CG324", "HGA2", "42.00", "110.10", " ", " ", "RETINOL SCK1, deprotonated Schiff's base #eq#"}, {"NG3P0", "CG324", "HGP5", "40.00", "109.50", "27.00", "2.130", "LIPID tetramethylammonium"}, {"NG3P1", "CG324", "HGA2", "45.00", "102.30", "35.00", "2.10100", "FLAVOP PIP1,2,3"}, {"NG3P2", "CG324", "HGA2", "45.00", "102.30", "35.00", "2.10100", "PIP, piperidine"}, {"NG3P3", "CG324", "HGA2", "45.00", "107.50", "35.00", "2.101", "NA methylammonium"}, {"HGA2", "CG324", "HGA2", "35.50", "109.00", "5.40", "1.80200", "PIP1,2,3"}, {"HGP5", "CG324", "HGP5", "24.00", "109.50", "28.00", "1.767", "LIPID tetramethylammonium"}, {"CG1N1", "CG331", "HGA3", "50.00", "110.50", " ", " ", "ACN, acetonitrile, kevo"}, {"CG1T1", "CG331", "HGA3", "47.00", "111.50", " ", " ", "2BTY, 2-butyne, kevo"}, {"CG2D1", "CG331", "HGA3", "42.00", "111.50", " ", " ", "LIPID 2-butene, yin,adm jr., 12/95"}, {"CG2DC1", "CG331", "HGA3", "42.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2DC2", "CG331", "HGA3", "42.00", "111.50", " ", " ", "RETINOL BTE2, 2-butene"}, {"CG2N2", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.13000", "AMDN, amidinium, mp2 geom, pram"}, {"CG2O1", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "PROT alanine dipeptide, 5/09/91"}, {"CG2O2", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O3", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG2O4", "CG331", "HGA3", "33.00", "109.50", "30.00", "2.16300", "AALD, acetaldehyde from PROT adm jr. 5/02/91, acetic acid pure solvent consistent with adm 11/08"}, {"CG2O5", "CG331", "HGA3", "50.00", "109.50", " ", " ", "methylketones 3ACP, ACO; from PROT Alanine Dipeptide ab initio calc's (LK) consistent with adm 11/08"}, {"CG2R51", "CG331", "HGA3", "55.00", "109.50", " ", " ", "INDO/TRP"}, {"CG2R61", "CG331", "HGA3", "49.30", "107.50", " ", " ", "PROT toluene, adm jr. 3/7/92"}, {"CG2R62", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "NA Alkanes, sacred"}, {"CG301", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "RETINOL TMCH/MECH"}, {"CG302", "CG331", "HGA3", "33.00", "110.50", "39.00", "2.15500", "FLUROALK fluoroalkanes"}, {"CG311", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG312", "CG331", "HGA3", "33.00", "110.50", "37.00", "2.16800", "FLUROALK fluoroalkanes"}, {"CG314", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.17900", "PROT alkanes"}, {"CG321", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG322", "CG331", "HGA3", "33.00", "110.50", "38.00", "2.18100", "FLUROALK fluoroalkanes"}, {"CG323", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.17900", "PROT ethylthiolate, adm jr., 6/1/92"}, {"CG324", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG331", "HGA3", "37.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG331", "HGA3", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3RC1", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.179", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"NG2D1", "CG331", "HGA3", "42.00", "113.50", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated"}, {"NG2R51", "CG331", "HGA3", "33.43", "110.10", " ", " ", "NA FOR 9-M-G(C), adm jr."}, {"NG2R61", "CG331", "HGA3", "33.43", "110.10", "22.53", "2.179", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"NG2S0", "CG331", "HGA3", "50.00", "105.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"NG2S1", "CG331", "HGA3", "51.50", "109.50", " ", " ", "PROT NMA crystal (JCS)"}, {"NG2S3", "CG331", "HGA3", "51.50", "107.50", " ", " ", "Was introduced for 'PROT methylguanidiniumi (MGU1, MGU2)', then (questionably) transferred to 'Phosphoramidate (PHA)'. In 2008, the atom types were split ==> RE-OPTIMIZE!!!"}, {"NG301", "CG331", "HGA3", "30.50", "109.70", "50.00", "2.1400", "TMC, from NG311 CG331 HGA3, yxu"}, {"NG311", "CG331", "HGA3", "30.50", "109.70", "50.00", "2.1400", "MGU2, methylguanidine2"}, {"OG301", "CG331", "HGA3", "45.90", "108.89", " ", " ", "MEOB, Methoxybenzene, cacha"}, {"OG302", "CG331", "HGA3", "60.00", "109.50", " ", " ", "PROT adm jr. 4/05/91, methyl acetate"}, {"OG303", "CG331", "HGA3", "60.00", "109.50", " ", " ", "NA DMP, ADM Jr."}, {"OG311", "CG331", "HGA3", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG312", "CG331", "HGA3", "65.00", "118.30", " ", " ", "PROT methoxide, adm jr., 6/1/92"}, {"SG301", "CG331", "HGA3", "38.00", "111.00", " ", " ", "PROT new S-S atom type 8/24/90"}, {"SG311", "CG331", "HGA3", "46.10", "111.30", " ", " ", "PROT vib. freq. and HF/geo. (DTN) 8/24/90"}, {"SG3O1", "CG331", "HGA3", "42.00", "110.60", " ", " ", "MSNA, methyl sulfonate, xhe"}, {"SG3O2", "CG331", "HGA3", "45.00", "108.50", " ", " ", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"SG3O3", "CG331", "HGA3", "46.10", "111.30", " ", " ", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"HGA3", "CG331", "HGA3", "35.50", "108.40", "5.40", "1.80200", "PROT alkane update, adm jr., 3/2/92"}, {"NG2O1", "CG334", "HGA3", "47.80", "108.00", " ", " ", "NIME, nitromethane, abar"}, {"NG2P1", "CG334", "HGA3", "42.00", "110.10", " ", " ", "RETINOL SCH2, Schiff's base, protonated #eq#"}, {"NG3P0", "CG334", "HGP5", "40.00", "109.50", "27.00", "2.13000", "LIPID tetramethylammonium"}, {"NG3P1", "CG334", "HGA3", "45.00", "102.30", "35.00", "2.10100", "FLAVOP PIP1,2,3"}, {"NG3P3", "CG334", "HGA3", "45.00", "107.50", "35.00", "2.10100", "PROT methylammonium (KK 03/10/92)"}, {"HGA3", "CG334", "HGA3", "35.50", "108.40", "5.40", "1.80200", "PROT alkane update, adm jr., 3/2/92"}, {"HGP5", "CG334", "HGP5", "24.00", "109.50", "28.00", "1.76700", "LIPID tetramethylammonium"}, {"NG301", "CG3AM0", "HGAAM0", "35.00", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"HGAAM0", "CG3AM0", "HGAAM0", "35.50", "108.40", "5.40", "1.8020", "AMINE aliphatic amines"}, {"NG311", "CG3AM1", "HGAAM1", "30.50", "109.70", "50.00", "2.1400", "AMINE aliphatic amines"}, {"HGAAM1", "CG3AM1", "HGAAM1", "35.80", "109.00", "5.40", "1.8020", "AMINE aliphatic amines"}, {"NG321", "CG3AM2", "HGAAM2", "32.40", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"HGAAM2", "CG3AM2", "HGAAM2", "35.00", "109.47", "5.40", "1.8020", "AMINE aliphatic amines"}, {"CG321", "CG3C31", "CG3C31", "67.35", "116.70", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG321", "CG3C31", "OG3C31", "60.35", "115.50", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG321", "CG3C31", "HGA1", "30.00", "115.40", " ", " ", "1BOX, 1-butene oxide, sc"}, {"CG324", "CG3C31", "CG3C31", "58.35", "120.00", " ", " ", "AMCP, aminomethyl cyclopropane; from FLAVOP PIP1,2,3; jhs ! Kenno: outside angle of a 3-membered ring; the QM value is ~119 and the MM ~115."}, {"CG324", "CG3C31", "HGA1", "34.60", "110.10", " ", " ", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs, UB term deleted"}, {"CG3C31", "CG3C31", "CG3C31", "77.35", "111.00", "8.00", "2.56100", "PROTMOD cyclopropane"}, {"CG3C31", "CG3C31", "OG3C31", "30.00", "103.00", " ", " ", "1EOX, 1-ethylene oxide, sc"}, {"CG3C31", "CG3C31", "HGA1", "23.00", "117.10", "22.53", "2.17900", "PROTMOD cyclopropane"}, {"CG3C31", "CG3C31", "HGA2", "23.00", "117.10", "22.53", "2.17900", "PROTMOD cyclopropane"}, {"CG3RC1", "CG3C31", "CG3RC1", "53.35", "58.50", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "HGA2", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"OG3C31", "CG3C31", "HGA1", "64.00", "118.50", " ", " ", "1BOX, 1-butene oxide, sc"}, {"OG3C31", "CG3C31", "HGA2", "68.50", "115.00", " ", " ", "1EOX, 1-ethylene oxide, sc"}, {"HGA2", "CG3C31", "HGA2", "23.00", "117.00", "5.40", "1.80200", "PROTMOD cyclopropane"}, {"CG2R53", "CG3C41", "CG3C41", "90.00", "106.00", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG2R53", "CG3C41", "HGA2", "46.00", "112.30", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C41", "CG3C41", "CG3C41", "70.00", "106.00", " ", " ", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"CG3C41", "CG3C41", "NG2R43", "90.00", "104.50", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C41", "CG3C41", "OG3C51", "89.00", "99.49", " ", " ", "OXTN, oxetane, gmu"}, {"CG3C41", "CG3C41", "HGA2", "46.00", "110.50", " ", " ", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"NG2R43", "CG3C41", "HGA2", "51.00", "110.80", " ", " ", "AZDO, 2-azetidinone, lsk and kevo"}, {"OG3C51", "CG3C41", "HGA2", "55.00", "112.00", " ", " ", "OXTN, oxetane, gmu"}, {"HGA2", "CG3C41", "HGA2", "28.00", "105.00", "5.40", "1.8067", "CBU, cyclobutane; AZDO, 2-azetidinone; QM by Nikolay Simakov; lsk and kevo"}, {"CG2O1", "CG3C51", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "NG2S0", "50.00", "108.20", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "NG2S0", "50.00", "108.20", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3C51", "CG3C52", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG311", "CG3C51", "CG3RC1", "52.00", "108.00", " ", " ", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG311", "CG3C51", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG321", "CG3C51", "CG3C51", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG321", "CG3C51", "CG3C52", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG321", "CG3C51", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "OG3C51", "45.00", "111.50", " ", " ", "TF2M, viv"}, {"CG321", "CG3C51", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG331", "CG3C51", "CG3C51", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG331", "CG3C51", "CG3C52", "58.00", "115.00", "8.00", "2.561", "TF2M viv"}, {"CG331", "CG3C51", "CG3RC1", "53.35", "108.50", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "OG3C51", "45.00", "111.50", " ", " ", "TF2M, viv"}, {"CG331", "CG3C51", "HGA1", "34.60", "110.10", "22.53", "2.179", "TF2M viv"}, {"CG3C51", "CG3C51", "CG3C51", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C53", "53.35", "111.00", "8.00", "2.56100", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3C51", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "NG2R51", "110.00", "111.00", " ", " ", "NA T/U/G, Arabinose (NF)"}, {"CG3C51", "CG3C51", "NG2R61", "110.00", "111.00", " ", " ", "NA C/A, RNA"}, {"CG3C51", "CG3C51", "NG2S3", "43.70", "110.00", " ", " ", "NABAKB phosphoramidates"}, {"CG3C51", "CG3C51", "NG301", "110.00", "111.00", " ", " ", "NADH, NDPH; Kenno: reverted to C/A, RNA from par_all27_na.prm"}, {"CG3C51", "CG3C51", "NG321", "67.70", "107.50", " ", " ", "PROT arg, (DS)"}, {"CG3C51", "CG3C51", "OG303", "115.00", "109.70", " ", " ", "PROTNA Ser-Phos"}, {"CG3C51", "CG3C51", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG3C51", "CG3C51", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "CG3C51", "FGA1", "44.00", "112.00", "30.00", "2.369", "FLUROALK fluoroalkanes"}, {"CG3C51", "CG3C51", "HGA1", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C51", "CG3C51", "HGA6", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C52", "CG3C51", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C52", "CG3C51", "CG3RC1", "53.35", "103.70", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "NG2R51", "140.00", "113.70", " ", " ", "NA"}, {"CG3C52", "CG3C51", "NG2R61", "110.00", "113.70", " ", " ", "NA C/A"}, {"CG3C52", "CG3C51", "NG2S0", "70.00", "110.80", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C51", "NG2S3", "43.70", "110.00", " ", " ", "NABAKB phosphoramidates"}, {"CG3C52", "CG3C51", "NG321", "67.70", "107.50", " ", " ", "PROT arg, (DS)"}, {"CG3C52", "CG3C51", "OG301", "58.00", "106.50", "8.00", "2.561", "THF2, THF-2'OMe c3'-c2'-om, from Nucl. Acids, ed"}, {"CG3C52", "CG3C51", "OG303", "115.00", "109.70", " ", " ", "NA"}, {"CG3C52", "CG3C51", "OG311", "75.70", "110.00", " ", " ", "NA"}, {"CG3C52", "CG3C51", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C52", "CG3C51", "FGA1", "44.00", "112.00", "30.00", "2.369", "FLUROALK fluoroalkanes"}, {"CG3C52", "CG3C51", "HGA1", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C52", "CG3C51", "HGA6", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C53", "CG3C51", "OG311", "75.70", "110.10", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"CG3C53", "CG3C51", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3RC1", "CG3C51", "NG2R51", "110.00", "108.00", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "NG2R61", "110.00", "108.00", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG303", "75.70", "110.10", " ", " ", "CARBOCY ncarbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG311", "75.70", "110.10", " ", " ", "CARBOCY ncarbocyclic sugars"}, {"CG3RC1", "CG3C51", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "OG3C51", "140.00", "108.00", " ", " ", "NA"}, {"NG2R51", "CG3C51", "HGA1", "43.00", "111.00", " ", " ", "NA From HGA1 CG3C51 NN2"}, {"NG2R61", "CG3C51", "OG3C51", "110.00", "108.00", " ", " ", "NA C/A DNA"}, {"NG2R61", "CG3C51", "HGA1", "43.00", "111.00", " ", " ", "NA"}, {"NG2S0", "CG3C51", "HGA1", "48.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S3", "CG3C51", "HGA1", "48.00", "110.00", " ", " ", "NABAKB phosphoramidates"}, {"NG301", "CG3C51", "OG3C51", "110.00", "112.00", " ", " ", "NADH, NDPH; Kenno: reverted to C/A RNA from par_all27_na.prm"}, {"NG301", "CG3C51", "HGA1", "43.00", "111.00", " ", " ", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"NG321", "CG3C51", "HGA1", "32.40", "109.50", "50.00", "2.1400", "AMINE aliphatic amines"}, {"OG301", "CG3C51", "HGA1", "45.90", "108.50", " ", " ", "THF2, THF-2'OMe h2''-c2'-om, from Nucl. Acids, ed"}, {"OG303", "CG3C51", "HGA1", "60.00", "109.50", " ", " ", "PROTNA Ser-Phos"}, {"OG311", "CG3C51", "HGA1", "45.90", "108.89", " ", " ", "PROT MeOH, EMB, 10/10/89"}, {"OG3C51", "CG3C51", "HGA1", "70.00", "107.30", " ", " ", "THF 10/21/05, viv"}, {"FGA1", "CG3C51", "HGA6", "57.50", "108.89", "5.00", "1.997", "FLUROALK fluoroalkanes"}, {"CG2R51", "CG3C52", "CG2R51", "76.00", "107.60", " ", " ", "CPDE, cyclopentadiene, kevo"}, {"CG2R51", "CG3C52", "CG2R52", "84.00", "106.00", " ", " ", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "CG3C52", "CG2R53", "45.00", "108.00", " ", " ", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "CG3C52", "CG2RC0", "40.00", "107.30", " ", " ", "INDE, indene, kevo"}, {"CG2R51", "CG3C52", "CG3C52", "52.00", "106.00", " ", " ", "105 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG3C52", "CG3C54", "52.00", "103.30", " ", " ", "106 2PRL, 2-pyrroline RE-OPTIMIZE!, kevo"}, {"CG2R51", "CG3C52", "NG2R50", "105.00", "111.60", " ", " ", "115.00 111.60 2HPR, 2H-pyrrole 1, kevo"}, {"CG2R51", "CG3C52", "NG3C51", "70.00", "105.10", " ", " ", "3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C52", "OG3C51", "75.00", "102.40", " ", " ", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG3C52", "HGA2", "52.00", "112.60", " ", " ", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG2R52", "CG3C52", "CG2RC0", "70.00", "105.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2R52", "CG3C52", "CG3C52", "80.00", "99.00", " ", " ", "99.5 99 2PRZ, 2-pyrazoline C3-C4-C5, kevo"}, {"CG2R52", "CG3C52", "HGA2", "58.00", "112.20", " ", " ", "112.2 2PRZ, 2-pyrazoline; 3HPR, 3H-pyrrole C3-C4-H4x, kevo"}, {"CG2R53", "CG3C52", "CG3C52", "70.00", "106.50", " ", " ", "2PDO, 2-pyrrolidinone C2-C3-C4, kevo"}, {"CG2R53", "CG3C52", "HGA2", "58.00", "111.00", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"CG2RC0", "CG3C52", "CG2RC0", "40.00", "95.00", " ", " ", "FLRN, Fluorene, erh"}, {"CG2RC0", "CG3C52", "CG3C52", "65.00", "108.20", " ", " ", "INDI, indoline, kevo"}, {"CG2RC0", "CG3C52", "HGA2", "38.00", "114.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG3C51", "CG3C52", "CG3C51", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C52", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C51", "CG3C52", "CG3RC1", "80.00", "105.50", "8.00", "2.56100", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "NG3C51", "84.00", "107.60", " ", " ", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "CG3C52", "HGA2", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C52", "CG3C52", "CG3C52", "58.00", "109.50", "11.16", "2.561", "THF, nucleotide CSD/NDB survey, 05/30/06, viv"}, {"CG3C52", "CG3C52", "CG3C53", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C54", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "NG2R50", "40.00", "107.10", " ", " ", "104.2 ! 105.80 2IMI, 2-imidazoline N3-C4-C5 d1,d1a, kevo"}, {"CG3C52", "CG3C52", "NG2R53", "90.00", "104.50", " ", " ", "2PDO, 2-pyrrolidinone C4-C5-N1, kevo"}, {"CG3C52", "CG3C52", "NG2S0", "70.00", "110.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "NG3C51", "84.00", "107.60", " ", " ", "107 PRLD, pyrrolidine; 103.3 2PRL, 2-pyrroline; 100.4 2IMI, 2-imidazoline; 2PRZ, 2-pyrazoline, kevo"}, {"CG3C52", "CG3C52", "OG3C51", "45.00", "111.10", " ", " ", "THF 10/21/05, viv"}, {"CG3C52", "CG3C52", "HGA2", "35.00", "111.40", "22.53", "2.179", "TF2M, viv"}, {"CG3C53", "CG3C52", "HGA2", "33.43", "110.10", "22.53", "2.17900", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C52", "NG3C51", "87.00", "110.40", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"CG3C54", "CG3C52", "HGA2", "26.50", "110.10", "22.53", "2.17900", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3RC1", "CG3C52", "CG3RC1", "58.00", "105.30", " ", " ", "NORB, Norbornane, kevo"}, {"CG3RC1", "CG3C52", "HGA2", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R50", "CG3C52", "HGA2", "44.00", "109.80", " ", " ", "2IMI, 2-imidazoline; 2HPR, 2H-pyrrole, kevo"}, {"NG2R53", "CG3C52", "HGA2", "59.00", "111.00", " ", " ", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2S0", "CG3C52", "HGA2", "48.00", "108.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C52", "HGA2", "54.00", "109.00", " ", " ", "107.7 PRLD, pyrrolidine; 110.8 2PRL, 2-pyrroline; 110.4 3PRL, 3-pyrroline; 111.4 2IMI, 2-imidazoline; 111.7 2PRZ, 2-pyrazoline, kevo"}, {"OG3C51", "CG3C52", "OG3C51", "85.00", "108.10", " ", " ", "DIOL, 1,3-Dioxolane, erh"}, {"OG3C51", "CG3C52", "HGA2", "70.00", "107.30", " ", " ", "THF 10/21/05, viv"}, {"HGA2", "CG3C52", "HGA2", "38.50", "106.80", "5.40", "1.802", "THF, 10/17/05 viv"}, {"CG2O1", "CG3C53", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "NG3P2", "50.00", "106.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "CG3C52", "52.00", "112.30", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "NG3P2", "50.00", "106.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "HGA1", "50.00", "112.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C53", "NG2R61", "110.00", "111.00", " ", " ", "NA C/A, RNA"}, {"CG3C51", "CG3C53", "OG3C51", "120.00", "106.25", " ", " ", "NA"}, {"CG3C51", "CG3C53", "HGA1", "34.50", "110.10", "22.53", "2.17900", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C52", "CG3C53", "NG3P2", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C53", "HGA1", "35.00", "118.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2R61", "CG3C53", "OG3C51", "110.00", "108.00", " ", " ", "NA C/A DNA"}, {"NG2R61", "CG3C53", "HGA1", "43.00", "111.00", " ", " ", "NA"}, {"NG3P2", "CG3C53", "HGA1", "51.50", "107.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG3C51", "CG3C53", "HGA1", "45.20", "107.24", " ", " ", "NA"}, {"CG2R51", "CG3C54", "NG2R52", "138.00", "103.10", " ", " ", "2HPP, 2H-pyrrole.H+ N1-C2-C3, kevo"}, {"CG2R51", "CG3C54", "NG3P2", "62.00", "103.00", " ", " ", "3PRP, 3-pyrroline.H+, kevo"}, {"CG2R51", "CG3C54", "HGA2", "41.00", "114.80", " ", " ", "109.8 3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "70.00", "108.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C54", "HGA2", "26.50", "110.10", "22.53", "2.17900", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C54", "NG2R52", "68.00", "106.00", " ", " ", "2IMP, 2-imidazoline.H+ 1a,1, kevo"}, {"CG3C54", "CG3C54", "HGA2", "26.50", "110.10", "22.53", "2.17900", "2IMP, 2-imidazoline.H+ ! RE-OPTIMIZE !!!, kevo"}, {"NG2R52", "CG3C54", "HGA2", "54.00", "107.00", " ", " ", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG3C51", "CG3C54", "NG3P2", "86.00", "119.00", " ", " ", "IMDP, imidazolidine ! questionable - RE-OPTIMIZE?, erh and kevo"}, {"NG3C51", "CG3C54", "HGA2", "53.00", "114.60", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"NG3P2", "CG3C54", "HGA2", "51.50", "109.15", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C54", "HGA2", "35.50", "109.00", "5.40", "1.80200", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3RC1", "CG331", "58.35", "113.50", "11.16", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3C51", "58.35", "113.50", "11.16", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3C52", "53.35", "111.00", "8.00", "2.561", "CA, Cholic acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3RC1", "53.35", "108.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG311", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG331", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3C31", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3C51", "53.35", "111.00", "8.00", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3C52", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG331", "CG3RC1", "CG3C51", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG3RC1", "CG3RC1", "58.35", "113.50", "11.16", "2.561", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C31", "CG3RC1", "CG3C51", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3C52", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "53.35", "62.50", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R51", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R61", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "CG3C52", "70.00", "109.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG3C51", "CG3RC1", "CG3RC1", "53.35", "108.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3C52", "56.00", "109.40", " ", " ", "NORB, Norbornane, kevo"}, {"CG3C52", "CG3RC1", "CG3RC1", "53.35", "111.00", "8.0", "2.561", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R51", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R61", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R51", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R53", "70.00", "113.70", " ", " ", "CBHH, glycoluril, (CG3RC1 CG3RC1 NG2R51), jing"}, {"CG3RC1", "CG3RC1", "NG2R61", "70.00", "113.70", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "OG3C51", "50.00", "109.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG3RC1", "CG3RC1", "HGA1", "34.50", "110.10", "22.53", "2.179", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG3RC1", "NG2R53", "70.00", "117.00", " ", " ", "CBHH, glycoluril, jing"}, {"NG2R53", "CG3RC1", "HGA1", "59.00", "111.00", " ", " ", "CBHH, glycoluril, (NG2R53 CG3C52 HGA2), jing"}, {"OG3C51", "CG3RC1", "OG3C51", "70.00", "105.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"OG3C51", "CG3RC1", "HGA1", "55.00", "106.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG2D1", "NG2D1", "CG321", "74.50", "111.00", " ", " ", "EEPI, from CG2D1 NG2D1 CG331, fylin"}, {"CG2D1", "NG2D1", "CG331", "67.00", "111.00", " ", " ", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG2D1", "NG2D1", "NG2S1", "100.00", "115.00", " ", " ", "HDZ1, hydrazone model cmpd"}, {"CG2DC1", "NG2D1", "NG2S1", "100.00", "115.00", " ", " ", "HDZ2, hydrazone model cmpd"}, {"CG2DC2", "NG2D1", "NG2S1", "100.00", "115.00", " ", " ", "HDZ2, hydrazone model cmpd"}, {"CG2N1", "NG2D1", "CG331", "50.00", "108.00", " ", " ", "MGU1, methylguanidine"}, {"CG2N1", "NG2D1", "HGP1", "49.00", "113.00", " ", " ", "MGU2, methylguanidine2"}, {"CG2N2", "NG2D1", "CG321", "45.00", "103.80", " ", " ", "MT2A, fylin, re-opt"}, {"CG2O7", "NG2D1", "CG331", "9.00", "136.00", " ", " ", "MICY, methyl isocyanate, xxwy"}, {"CG2R61", "NG2O1", "OG2N1", "65.00", "116.00", " ", " ", "NITB, nitrobenzene"}, {"CG324", "NG2O1", "OG2N1", "56.00", "117.00", " ", " ", "NIPR, nitropropane, abar"}, {"CG334", "NG2O1", "OG2N1", "60.00", "120.00", " ", " ", "NIME, nitromethane, abar ! we'll tolerate the angle strain in this specific case - Kenno"}, {"OG2N1", "NG2O1", "OG2N1", "105.00", "128.00", " ", " ", "NITB, nitrobenzene"}, {"CG2D1", "NG2P1", "CG334", "67.00", "123.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2D1", "NG2P1", "HGP2", "38.00", "118.80", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "NG2P1", "CG334", "67.00", "123.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "NG2P1", "HGP2", "38.00", "118.80", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "NG2P1", "CG334", "67.00", "123.60", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC2", "NG2P1", "HGP2", "38.00", "118.80", " ", " ", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2N1", "NG2P1", "CG324", "62.30", "120.00", " ", " ", "PROT 107.5->120.0 to make planar Arg (KK)"}, {"CG2N1", "NG2P1", "CG334", "62.30", "120.00", " ", " ", "PROT methylguanidinium, adm jr., 3/26/92"}, {"CG2N1", "NG2P1", "HGP2", "49.00", "120.00", " ", " ", "PROT 35.3->49.0 GUANIDINIUM (KK)"}, {"CG2N2", "NG2P1", "HGP2", "40.00", "120.00", " ", " ", "AMDN, amidinium; BAMI, benzamidinium; mp2 molvib; pram"}, {"CG324", "NG2P1", "HGP2", "40.40", "120.00", " ", " ", "PROT 107.5->120.0 to make planar Arg (KK)"}, {"CG334", "NG2P1", "HGP2", "40.40", "120.00", " ", " ", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGP2", "NG2P1", "HGP2", "25.00", "120.00", " ", " ", "PROT 40.0->25.0 GUANIDINIUM (KK)"}, {"CG2R53", "NG2R43", "CG3C41", "85.00", "111.50", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "NG2R43", "HGP1", "34.00", "129.70", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "NG2R43", "HGP1", "34.00", "125.30", " ", " ", "AZDO, 2-azetidinone, kevo"}, {"CG2R51", "NG2R50", "CG2R52", "58.00", "103.00", " ", " ", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "NG2R50", "CG2R53", "130.00", "103.50", " ", " ", "PROT his, adm jr., 6/27/90 @@@@@ Kenno: 104 --> 103.5 @@@@@"}, {"CG2R51", "NG2R50", "NG2R50", "110.00", "106.80", " ", " ", "OXAD, oxadiazole123 @@@@@ Kenno: 107.1 --> 106.8 @@@@@"}, {"CG2R52", "NG2R50", "CG2RC0", "60.00", "103.00", " ", " ", "3HIN, 3H-indole, kevo"}, {"CG2R52", "NG2R50", "CG3C52", "115.00", "102.90", " ", " ", "105.00 102.90 2HPR, 2H-pyrrole 1,1a, kevo"}, {"CG2R52", "NG2R50", "NG2R51", "160.00", "103.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R52", "NG2R50", "NG3C51", "160.00", "105.50", " ", " ", "107.5 2PRZ, 2-pyrazoline N1-N2-C3, kevo"}, {"CG2R52", "NG2R50", "OG2R50", "150.00", "103.30", " ", " ", "ISOX, isoxazole @@@@@ Kenno: 105.6 --> 103.3 @@@@@"}, {"CG2R52", "NG2R50", "SG2R50", "150.00", "111.00", " ", " ", "ISOT, isothiazole"}, {"CG2R53", "NG2R50", "CG2R53", "100.00", "101.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R50", "CG2RC0", "120.00", "103.80", " ", " ", "NA Gua 5R)"}, {"CG2R53", "NG2R50", "CG3C52", "160.00", "101.90", " ", " ", "101.0 ! 104.50 2IMI, 2-imidazoline C2-N3-C4 d1a, kevo"}, {"CG2R53", "NG2R50", "NG2R51", "100.00", "101.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R50", "OG2R50", "50.00", "103.00", " ", " ", "OXD4, oxadiazole124, xxwy"}, {"NG2R50", "NG2R50", "NG2R51", "160.00", "102.20", " ", " ", "TRZ3, triazole123 @@@@@ Kenno: 101.9 --> 102.2 @@@@@"}, {"NG2R50", "NG2R50", "OG2R50", "110.00", "103.00", " ", " ", "OXAD, oxadiazole123 @@@@@ Kenno: 105.5 --> 103.0 @@@@@"}, {"CG2R51", "NG2R51", "CG2R51", "100.00", "109.00", " ", " ", "PYRL, pyrrole"}, {"CG2R51", "NG2R51", "CG2R53", "130.00", "107.50", " ", " ", "PROT his, adm jr., 6/27/90"}, {"CG2R51", "NG2R51", "CG2RC0", "85.00", "110.00", " ", " ", "adm,dec06(112.0)INDO/TRP"}, {"CG2R51", "NG2R51", "CG321", "70.00", "127.10", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG2R51", "NG2R51", "CG3C51", "130.00", "126.00", " ", " ", "NA"}, {"CG2R51", "NG2R51", "NG2R50", "160.00", "115.00", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "NG2R51", "HGP1", "30.00", "125.50", "20.00", "2.15000", "PROT his, adm jr., 6/27/90"}, {"CG2R53", "NG2R51", "CG2RC0", "100.00", "107.20", " ", " ", "NA Gua 5R)"}, {"CG2R53", "NG2R51", "CG331", "70.00", "127.80", " ", " ", "NA 9-M-A, adm jr."}, {"CG2R53", "NG2R51", "CG3C51", "45.00", "126.30", " ", " ", "NA G"}, {"CG2R53", "NG2R51", "CG3RC1", "45.00", "127.60", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R53", "NG2R51", "NG2R50", "130.00", "114.00", " ", " ", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R51", "HGP1", "30.00", "127.00", "20.00", "2.14000", "PROT his, adm jr., 6/27/90"}, {"CG2RC0", "NG2R51", "CG2RC0", "85.00", "110.00", " ", " ", "CRBZ, carbazole, erh"}, {"CG2RC0", "NG2R51", "CG331", "70.00", "125.90", " ", " ", "NA 9-M-G, adm jr."}, {"CG2RC0", "NG2R51", "CG3C51", "45.00", "126.50", " ", " ", "NA G"}, {"CG2RC0", "NG2R51", "CG3RC1", "45.00", "126.50", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2RC0", "NG2R51", "NG2R50", "190.00", "114.50", " ", " ", "INDA, 1H-indazole, kevo"}, {"CG2RC0", "NG2R51", "HGP1", "28.00", "126.00", " ", " ", "INDO/TRP"}, {"CG321", "NG2R51", "NG2R50", "70.00", "117.90", " ", " ", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"NG2R50", "NG2R51", "NG2R50", "90.00", "121.00", " ", " ", "TRZ2, 2H-1,2,3-triazole, lf"}, {"NG2R50", "NG2R51", "HGP1", "32.00", "119.50", " ", " ", "PYRZ, pyrazole"}, {"CG2R51", "NG2R52", "CG2R53", "145.00", "108.00", " ", " ", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "NG2R52", "HGP2", "25.00", "124.90", "15.00", "2.13000", "PROT his, adm jr., 6/27/90"}, {"CG2R52", "NG2R52", "CG3C54", "101.00", "111.90", " ", " ", "2HPP, 2H-pyrrole.H+ C5-N1-C2, kevo"}, {"CG2R52", "NG2R52", "HGP2", "29.00", "123.20", " ", " ", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R53", "NG2R52", "CG3C54", "140.00", "108.00", " ", " ", "2IMP, 2-imidazoline.H+ 1,1a, kevo"}, {"CG2R53", "NG2R52", "HGP2", "25.00", "127.10", "15.00", "2.09000", "PROT his, adm jr., 6/27/90"}, {"CG3C54", "NG2R52", "HGP2", "29.00", "124.90", " ", " ", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG251O", "NG2R53", "CG2R53", "116.00", "117.50", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG251O", "NG2R53", "HGP1", "38.00", "123.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG252O", "NG2R53", "CG2R53", "116.00", "117.50", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG252O", "NG2R53", "HGP1", "38.00", "123.00", " ", " ", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "NG2R53", "CG2R53", "55.00", "120.50", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "NG2R53", "CG311", "50.00", "120.00", " ", " ", "drug design project, xxwy"}, {"CG2R53", "NG2R53", "CG3C52", "75.00", "111.00", " ", " ", "2PDO, 2-pyrrolidinone C5-N1-C2 v, kevo"}, {"CG2R53", "NG2R53", "CG3RC1", "75.00", "112.00", " ", " ", "CBHH, glycoluril, jing"}, {"CG2R53", "NG2R53", "HGP1", "38.00", "119.50", " ", " ", "2PDO, 2-pyrrolidinone (H1-N1-C2), kevo"}, {"CG3C52", "NG2R53", "HGP1", "38.00", "116.00", " ", " ", "2PDO, 2-pyrrolidinone (C5-N1-H1), kevo"}, {"CG3RC1", "NG2R53", "HGP1", "38.00", "116.00", " ", " ", "CBHH, glycoluril, (CG3C52 NG2R53 HGP1), jing"}, {"CG2R51", "NG2R57", "CG2R51", "100.00", "109.00", " ", " ", "13BPO, 1,3-bipyrrole; from CG2R51 NG2R51 CG2R51; lf"}, {"CG2R51", "NG2R57", "CG2R57", "42.00", "125.50", " ", " ", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "NG2R57", "NG2R57", "54.00", "125.50", " ", " ", "11BPO, 1,1-bipyrrole, lf"}, {"CG2R61", "NG2R60", "CG2R61", "20.00", "112.00", " ", " ", "PYRIDINE pyridine, yin"}, {"CG2R61", "NG2R60", "CG2R64", "20.00", "112.00", " ", " ", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "NG2R60", "CG2R67", "20.00", "109.20", " ", " ", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "NG2R61", "CG2R63", "10.00", "123.90", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "NG2R61", "HGP1", "33.00", "120.70", " ", " ", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R62", "NG2R61", "CG2R62", "30.00", "120.00", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "NG2R61", "CG2R63", "70.00", "122.00", " ", " ", "NA U, adm jr. 11/97"}, {"CG2R62", "NG2R61", "CG331", "70.00", "120.50", " ", " ", "NA 1-M-C, adm jr. 7/24/91"}, {"CG2R62", "NG2R61", "CG3C51", "45.00", "118.40", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R62", "NG2R61", "CG3C53", "45.00", "118.40", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R62", "NG2R61", "CG3RC1", "45.00", "115.90", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R62", "NG2R61", "HGP1", "32.00", "117.40", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "NG2R61", "HGP2", "32.00", "117.40", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R63", "NG2R61", "CG2R63", "50.00", "130.20", " ", " ", "NA U"}, {"CG2R63", "NG2R61", "CG2R64", "70.00", "131.10", " ", " ", "NA Gua 6R)G, adm jr. 11/97"}, {"CG2R63", "NG2R61", "CG331", "70.00", "115.40", " ", " ", "NA 1-M-C, adm jr."}, {"CG2R63", "NG2R61", "CG3C51", "45.00", "118.40", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R63", "NG2R61", "CG3RC1", "45.00", "120.00", " ", " ", "CARBOCY carbocyclic sugars"}, {"CG2R63", "NG2R61", "HGP1", "40.50", "115.40", " ", " ", "NA U"}, {"CG2R64", "NG2R61", "HGP1", "45.00", "115.60", " ", " ", "NA Gua"}, {"CG2R61", "NG2R62", "CG2R64", "40.00", "110.50", " ", " ", "PYRM, pyrimidine %% TEST 108.0 -> 113.4 %%"}, {"CG2R61", "NG2R62", "NG2R62", "10.00", "120.00", " ", " ", "PYRD, pyridazine"}, {"CG2R62", "NG2R62", "CG2R62", "25.00", "114.10", " ", " ", "PYRH , from CG2R62 NG2R62 CG2R64, fylin"}, {"CG2R62", "NG2R62", "CG2R64", "70.00", "115.50", " ", " ", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R63", "NG2R62", "CG2R64", "85.00", "119.10", " ", " ", "NA C"}, {"CG2R64", "NG2R62", "CG2R64", "90.00", "117.80", " ", " ", "NA Ade 6R) adm jr. 11/97"}, {"CG2R64", "NG2R62", "CG2RC0", "90.00", "115.10", " ", " ", "NA Ade 6R) %% TEST 110.1 -> 120.9 %%"}, {"CG2R64", "NG2R62", "NG2R62", "65.00", "121.00", " ", " ", "TRIB, triazine124"}, {"CG2R62", "NG2R67", "CG2R62", "30.00", "120.00", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 NG2R61 CG2R62; isg"}, {"CG2R62", "NG2R67", "CG2R63", "70.00", "128.70", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R61 NG2R61 CG2R63; isg"}, {"CG2R62", "NG2R67", "CG2R67", "52.00", "120.0", " ", " ", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R63", "NG2R67", "CG2R63", "50.00", "128.70", " ", " ", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from CG2R63 NG2R61 CG2R63, NA; isg"}, {"CG2R63", "NG2R67", "CG2R64", "70.00", "126.10", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R63 NG2R61 CG2R64; isg"}, {"CG2R63", "NG2R67", "CG2R67", "33.00", "111.30", " ", " ", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 NG2R61 CG2R63; isg"}, {"CG2R64", "NG2R67", "CG2R67", "55.00", "121.00", " ", " ", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R63 NG2R61 CG2R64; isg"}, {"CG2R51", "NG2RC0", "CG2R61", "15.00", "130.50", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R51", "NG2RC0", "CG2RC0", "100.00", "109.70", " ", " ", "INDZ, indolizine, kevo"}, {"CG2R61", "NG2RC0", "CG2RC0", "15.00", "119.80", " ", " ", "INDZ, indolizine, kevo"}, {"CG2O1", "NG2S0", "CG331", "42.00", "119.50", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"CG2O1", "NG2S0", "CG3C51", "60.00", "117.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "NG2S0", "CG3C52", "60.00", "117.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "NG2S0", "CG331", "45.00", "121.00", " ", " ", "DMF, Dimethylformamide, xxwy"}, {"CG3C51", "NG2S0", "CG3C52", "100.00", "114.20", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "NG2S1", "CG2R61", "50.00", "120.00", " ", " ", "RESI PACP, FRET AND OTHERS"}, {"CG2O1", "NG2S1", "CG2R64", "50.00", "120.00", " ", " ", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG2O1", "NG2S1", "CG311", "50.00", "120.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O1", "NG2S1", "CG321", "50.00", "120.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O1", "NG2S1", "CG331", "50.00", "120.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O1", "NG2S1", "NG2D1", "50.00", "115.00", " ", " ", "HDZ1, hydrazone model cmpd"}, {"CG2O1", "NG2S1", "HGP1", "34.00", "123.00", " ", " ", "PROT NMA Vib Modes (LK)"}, {"CG2O6", "NG2S1", "CG321", "60.00", "120.00", " ", " ", "DECB, diehtyl carbamate, from DMCB, cacha and kevo and xxwy"}, {"CG2O6", "NG2S1", "CG331", "60.00", "120.00", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo and xxwy"}, {"CG2O6", "NG2S1", "HGP1", "40.00", "121.50", " ", " ", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo and xxwy"}, {"CG2R61", "NG2S1", "HGP1", "34.00", "117.00", " ", " ", "RESI PACP, FRET AND OTHERS"}, {"CG2R64", "NG2S1", "HGP1", "34.00", "117.00", " ", " ", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG311", "NG2S1", "HGP1", "35.00", "117.00", " ", " ", "PROT NMA Vibrational Modes (LK)"}, {"CG321", "NG2S1", "HGP1", "35.00", "117.00", " ", " ", "PROT NMA Vibrational Modes (LK)"}, {"CG331", "NG2S1", "HGP1", "35.00", "117.00", " ", " ", "PROT NMA Vibrational Modes (LK)"}, {"NG2D1", "NG2S1", "HGP1", "34.00", "122.00", " ", " ", "HDZ1, hydrazone model cmpd"}, {"CG2O1", "NG2S2", "HGP1", "50.00", "120.00", " ", " ", "PROT his, adm jr. 8/13/90 geometry and vibrations"}, {"CG2O6", "NG2S2", "HGP1", "50.00", "120.00", " ", " ", "PROT his, adm jr. 8/13/90 geometry and vibrations NOW UREA ==> re-optimize???"}, {"HGP1", "NG2S2", "HGP1", "23.00", "120.00", " ", " ", "PROT adm jr. 8/13/90 geometry and vibrations"}, {"CG2R61", "NG2S3", "HGP4", "60.00", "111.60", " ", " ", "PYRIDINE aminopyridine, adm jr., 7/94 kevo: 120 --> 111.6"}, {"CG2R64", "NG2S3", "HGP4", "40.00", "121.50", " ", " ", "NA Ade h61,h62, C,A,G"}, {"CG321", "NG2S3", "SG3O1", "58.70", "104.90", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG321", "NG2S3", "HGP1", "51.80", "109.50", " ", " ", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "NG2S3", "PG1", "110.00", "118.30", "35.0", "2.33", "NABAKB phosphoramidates"}, {"CG331", "NG2S3", "SG3O1", "39.50", "103.10", " ", " ", "NMSM, N-methyl-sulfamate, my"}, {"CG331", "NG2S3", "HGP1", "35.00", "109.00", " ", " ", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "PG1", "110.00", "118.30", "35.0", "2.33", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "HGP1", "35.00", "109.00", " ", " ", "NABAKB phosphoramidates"}, {"PG1", "NG2S3", "HGP1", "30.00", "123.60", "40.0", "2.35", "NABAKB phosphoramidates"}, {"SG3O1", "NG2S3", "HGP1", "47.00", "113.10", " ", " ", "NMSM, N-methyl-sulfamate, my"}, {"HGP4", "NG2S3", "HGP4", "31.00", "117.00", " ", " ", "NA Ade C,A,G"}, {"CG2D1O", "NG301", "CG2D1O", "20.00", "114.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG301", "CG3C51", "70.00", "121.70", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG301", "CG2D2O", "20.00", "114.00", " ", " ", "NADH, NDPH; Kenno: reverted to nadh/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG301", "CG3C51", "70.00", "121.70", " ", " ", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "NG301", "CG331", "48.00", "113.50", " ", " ", "TMC, trimethylcytosine, yxu; DMAN, N,N-dimethylaniline, kevo"}, {"CG2R64", "NG301", "CG331", "48.00", "113.50", " ", " ", "TMC, trimethylcytosine, yxu"}, {"CG331", "NG301", "CG331", "42.50", "116.00", " ", " ", "TMC, trimethylcytosine, yxu; DMAN, N,N-dimethylaniline, kevo"}, {"CG3AM0", "NG301", "CG3AM0", "53.00", "110.90", " ", " ", "AMINE aliphatic amines"}, {"CG2D1O", "NG311", "CG2D1O", "20.00", "114.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1O", "NG311", "HGPAM1", "39.00", "123.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG311", "CG2D2O", "20.00", "114.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2O", "NG311", "HGPAM1", "39.00", "123.00", " ", " ", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2N1", "NG311", "CG331", "43.00", "106.00", " ", " ", "MGU2, methylguanidine2"}, {"CG2N1", "NG311", "HGPAM1", "45.00", "106.00", " ", " ", "MGU2, methylguanidine2 Kenno: 104 -> 106"}, {"CG2R61", "NG311", "CG2R61", "40.00", "109.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R61", "NG311", "CG321", "55.00", "113.00", " ", " ", "OBTZ, 1,1-dioxo-3,4-dihydro-2H-1,2,4-benzothiadiazine, xxwy"}, {"CG2R61", "NG311", "SG3O2", "35.00", "115.00", " ", " ", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "NG311", "HGP1", "40.00", "114.00", " ", " ", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "NG311", "HGPAM1", "45.00", "115.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG321", "NG311", "CG321", "40.50", "109.60", " ", " ", "5UHG, from nmgn, cgenff_compromise, kevo"}, {"CG321", "NG311", "SG3O2", "60.00", "115.00", " ", " ", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "HGP1", "46.00", "111.00", " ", " ", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "HGPAM1", "35.00", "111.00", " ", " ", "compromise between PEI0 on the one hand and OBTZ AOBT on the other hand, kevo and xxwy"}, {"CG331", "NG311", "SG3O2", "68.00", "114.00", " ", " ", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"CG331", "NG311", "HGP1", "42.30", "111.50", " ", " ", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"CG331", "NG311", "HGPAM1", "45.00", "104.00", " ", " ", "MGU2, methylguanidine2"}, {"CG3AM1", "NG311", "CG3AM1", "40.50", "112.20", "5.00", "2.4217", "AMINE aliphatic amines"}, {"CG3AM1", "NG311", "HGPAM1", "42.10", "108.90", "5.00", "2.0292", "AMINE aliphatic amines"}, {"SG3O2", "NG311", "HGP1", "42.30", "113.20", " ", " ", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"CG2D1O", "NG321", "HGPAM2", "55.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram and kevo"}, {"CG2D2O", "NG321", "HGPAM2", "55.00", "113.00", " ", " ", "AMET, ethenamine; mp2-geom, molvib; pram and kevo"}, {"CG2N1", "NG321", "HGPAM2", "55.00", "108.00", " ", " ", "MGU1, methylguanidine"}, {"CG2N2", "NG321", "HGPAM2", "50.00", "115.80", " ", " ", "MT2A, fylin"}, {"CG321", "NG321", "HGPAM2", "41.00", "112.10", " ", " ", "AMINE aliphatic amines"}, {"CG3AM2", "NG321", "HGPAM2", "41.00", "112.10", " ", " ", "AMINE aliphatic amines"}, {"CG3C51", "NG321", "HGPAM2", "41.00", "112.10", " ", " ", "AMINE aliphatic amines"}, {"SG3O2", "NG321", "HGP1", "49.00", "115.00", " ", " ", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"HGP1", "NG321", "HGP1", "38.00", "110.00", " ", " ", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"HGPAM2", "NG321", "HGPAM2", "42.00", "105.85", " ", " ", "AMINE aliphatic amines kevo: 29.50 -> 42.00 based on MAM1 molvib and AMET scans"}, {"HGPAM3", "NG331", "HGPAM3", "41.50", "107.10", " ", " ", "AMINE aliphatic amines kevo: 29.00 -> 41.50 based on MAM1 molvib and AMET scans"}, {"CG2R51", "NG3C51", "CG3C52", "45.00", "104.80", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "NG3C51", "HGP1", "43.00", "113.90", " ", " ", "2PRL, 2-pyrroline, kevo"}, {"CG2R53", "NG3C51", "CG3C52", "40.00", "107.00", " ", " ", "104.60 77 2IMI, 2-imidazoline C5-N1-C2 d1, kevo"}, {"CG2R53", "NG3C51", "HGP1", "43.00", "115.60", " ", " ", "117.7 ! 112.5 ! 30 116.5 2IMI, 2-imidazoline H1-N1-C2, kevo"}, {"CG2RC0", "NG3C51", "CG3C52", "60.00", "106.90", " ", " ", "INDI, indoline, kevo"}, {"CG2RC0", "NG3C51", "HGP1", "41.00", "114.50", " ", " ", "INDI, indoline, kevo"}, {"CG3C52", "NG3C51", "CG3C52", "140.00", "103.70", " ", " ", "102.9 PRLD, pyrrolidine; 105.4 3PRL, 3-pyrroline, kevo"}, {"CG3C52", "NG3C51", "CG3C54", "67.00", "104.10", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"CG3C52", "NG3C51", "NG2R50", "47.00", "109.00", " ", " ", "107.5 2PRZ, 2-pyrazoline C5-N1-N2, kevo"}, {"CG3C52", "NG3C51", "NG3P2", "47.00", "103.90", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"CG3C52", "NG3C51", "HGP1", "43.00", "112.00", " ", " ", "108 PRLD, pyrrolidine; 113 2PRL, 2-pyrroline; 106(v) 3PRL, 3-pyrroline; 117 2IMI, 2-imidazoline; 2PRZ, 2-pyrazoline, kevo"}, {"CG3C54", "NG3C51", "HGP1", "50.00", "109.25", " ", " ", "IMDP, imidazolidine, erh and kevo"}, {"NG2R50", "NG3C51", "HGP1", "50.00", "103.60", " ", " ", "104.9 2PRZ, 2-pyrazoline, kevo"}, {"NG3P2", "NG3C51", "HGP1", "56.00", "100.60", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"CG2R61", "NG3N1", "NG3N1", "60.00", "112.00", " ", " ", "PHHZ, phenylhydrazine, decrease angle to make HN become out of plane, ed"}, {"CG2R61", "NG3N1", "HGP1", "52.00", "115.00", " ", " ", "PHHZ, phenylhydrazine, decrease angle to make HN become out of plane, ed"}, {"NG3N1", "NG3N1", "HGP1", "55.00", "102.00", " ", " ", "HDZN, hydrazine, ed"}, {"HGP1", "NG3N1", "HGP1", "50.00", "102.00", " ", " ", "HDZN, hydrazine, ed"}, {"CG324", "NG3P0", "CG324", "60.00", "109.50", "26.", "2.466", "LIPID tetraethylammonium, from CG334 NG3P0 CG324"}, {"CG324", "NG3P0", "CG334", "60.00", "109.50", "26.", "2.466", "LIPID tetramethylammonium"}, {"CG334", "NG3P0", "CG334", "60.00", "109.50", "26.", "2.466", "LIPID tetramethylammonium"}, {"CG334", "NG3P0", "OG311", "69.00", "100.00", " ", " ", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"CG334", "NG3P0", "OG312", "80.00", "112.00", " ", " ", "TMAO, trimethylamine N-oxide, xxwy and ejd"}, {"CG324", "NG3P1", "CG324", "45.00", "115.20", " ", " ", "FLAVOP PIP1,2,3 ! tweaked 115.50 --> 115.20 by kevo"}, {"CG324", "NG3P1", "CG334", "45.00", "109.50", " ", " ", "FLAVOP PIP1,2,3"}, {"CG324", "NG3P1", "HGP2", "30.00", "110.80", "27.00", "2.07400", "FLAVOP PIP1,2,3"}, {"CG334", "NG3P1", "HGP2", "30.00", "110.80", "27.00", "2.07400", "FLAVOP PIP1,2,3"}, {"CG2R51", "NG3P2", "CG3C54", "85.00", "107.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "NG3P2", "HGP2", "38.00", "112.00", " ", " ", "2PRP, 2-pyrroline.H+, kevo"}, {"CG314", "NG3P2", "CG324", "45.00", "115.20", " ", " ", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha ! tweaked 115.50 --> 115.20 by kevo"}, {"CG314", "NG3P2", "HGP2", "30.00", "110.80", "27.00", "2.07400", "2MRB, Alpha benzyl gamma 2-methyl piperidine, cacha"}, {"CG324", "NG3P2", "CG324", "40.00", "115.20", " ", " ", "PIP, piperidine ! tweaked 115.50 --> 115.20 by kevo"}, {"CG324", "NG3P2", "HGP2", "30.00", "110.80", "27.00", "2.07400", "PIP, piperidine"}, {"CG3C53", "NG3P2", "CG3C54", "100.00", "111.00", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "NG3P2", "HGP2", "33.00", "109.50", "4.00", "2.05600", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "NG3P2", "CG3C54", "104.00", "113.00", " ", " ", "PRLP, pyrrolidine.H+, kevo"}, {"CG3C54", "NG3P2", "NG3C51", "135.00", "114.20", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"CG3C54", "NG3P2", "HGP2", "33.00", "109.50", "4.00", "2.05600", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "NG3P2", "HGP2", "42.00", "106.30", " ", " ", "PRZP, Pyrazolidine.H+, kevo"}, {"HGP2", "NG3P2", "HGP2", "51.00", "107.50", " ", " ", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "NG3P3", "HGP2", "30.00", "109.50", "20.00", "2.07400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG324", "NG3P3", "HGP2", "30.00", "109.50", "20.00", "2.07400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG334", "NG3P3", "HGP2", "30.00", "109.50", "20.00", "2.07400", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"HGP2", "NG3P3", "HGP2", "44.00", "109.50", " ", " ", "PROT new stretch and bend; methylammonium (KK 03/10/92)"}, {"CG2R51", "OG2R50", "CG2R51", "100.00", "106.00", " ", " ", "FURA, furan"}, {"CG2R51", "OG2R50", "CG2R53", "140.00", "104.00", " ", " ", "OXAZ, oxazole"}, {"CG2R51", "OG2R50", "CG2RC0", "50.00", "104.00", " ", " ", "ZFUR, benzofuran, kevo"}, {"CG2R51", "OG2R50", "NG2R50", "150.00", "108.50", " ", " ", "ISOX, isoxazole @@@@@ Kenno: 109.9 --> 108.5 @@@@@"}, {"CG2R53", "OG2R50", "NG2R50", "165.00", "109.30", " ", " ", "OXD4, oxadiazole124, xxwy"}, {"CG2D1O", "OG301", "CG331", "53.00", "109.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2D2O", "OG301", "CG331", "53.00", "109.00", " ", " ", "MOET, Methoxyethene, xxwy"}, {"CG2R61", "OG301", "CG2R61", "185.00", "120.00", " ", " ", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "OG301", "CG321", "65.00", "108.00", " ", " ", "ETOB, Ethoxybenzene, cacha"}, {"CG2R61", "OG301", "CG331", "65.00", "108.00", " ", " ", "MEOB, Methoxybenzene, cacha"}, {"CG301", "OG301", "CG331", "95.00", "109.70", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "OG301", "CG331", "95.00", "109.70", " ", " ", "all34_ethers_1a CC33A OC30A CC32A, gk or og (not affected by mistake)"}, {"CG321", "OG301", "CG321", "95.00", "109.70", " ", " ", "diethylether, alex"}, {"CG321", "OG301", "CG331", "95.00", "109.70", " ", " ", "diethylether, alex"}, {"CG331", "OG301", "CG331", "95.00", "109.70", " ", " ", "diethylether, alex!from CG321 OG301 CCT2, DME viv"}, {"CG331", "OG301", "CG3C51", "65.00", "107.00", " ", " ", "THF2, THF-2'OMe c2'-om-cm, from Nucl. Acids, ed"}, {"CG2O2", "OG302", "CG301", "40.00", "109.60", "30.00", "2.2651", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG2O2", "OG302", "CG311", "40.00", "109.60", "30.00", "2.2651", "LIPID methyl acetate"}, {"CG2O2", "OG302", "CG321", "40.00", "109.60", "30.00", "2.2651", "LIPID methyl acetate"}, {"CG2O2", "OG302", "CG331", "40.00", "109.60", "30.00", "2.2651", "LIPID methyl acetate"}, {"CG2O6", "OG302", "CG321", "40.00", "111.00", " ", " ", "DECB, diehtyl carbamate, from DMCB, cacha and kevo and xxwy"}, {"CG2O6", "OG302", "CG331", "40.00", "111.00", " ", " ", "DMCB and DMCA, dimethyl carbamate and carbonate, cacha and kevo and xxwy"}, {"CG2R61", "OG303", "PG1", "90.00", "120.00", "20.00", "2.30", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG303", "SG3O2", "33.00", "108.00", " ", " ", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG311", "OG303", "PG2", "20.00", "120.00", "35.00", "2.33", "NA IP_2"}, {"CG321", "OG303", "PG1", "20.00", "120.00", "35.00", "2.33", "NA !Reorganization: PC and others"}, {"CG321", "OG303", "PG2", "20.00", "120.00", "35.00", "2.33", "NA !Reorganization: TH5P and others"}, {"CG321", "OG303", "SG3O1", "15.00", "109.00", "27.00", "1.90", "LIPID methylsulfate"}, {"CG331", "OG303", "PG0", "20.00", "120.00", "35.0", "2.33", "LIPID phosphate !Reorganization:MP_0"}, {"CG331", "OG303", "PG1", "20.00", "120.00", "35.0", "2.33", "LIPID phosphate !Reorganization:MP_1"}, {"CG331", "OG303", "PG2", "20.00", "120.00", "35.0", "2.33", "LIPID phosphate !Reorganization:MP_2"}, {"CG331", "OG303", "SG3O1", "15.00", "109.00", "27.00", "1.90", "LIPID methylsulfate"}, {"CG331", "OG303", "SG3O2", "48.00", "113.00", " ", " ", "MMST, methyl methanesulfonate, xxwy"}, {"CG3C51", "OG303", "PG1", "20.00", "120.00", "35.0", "2.33", "BPNP and others"}, {"CG3C51", "OG303", "PG2", "20.00", "120.00", "35.0", "2.33", "TH3P and others"}, {"PG1", "OG304", "PG1", "45.00", "143.00", "40.0", "3.25", "PPI2, METP reorganization, kevo"}, {"PG1", "OG304", "PG2", "45.00", "139.50", "40.0", "3.05", "PPI1, METP reorganization, kevo"}, {"CG2O2", "OG311", "HGP1", "55.00", "115.00", " ", " ", "PROT adm jr. 5/02/91, acetic acid pure solvent"}, {"CG2O6", "OG311", "HGP1", "61.00", "116.00", " ", " ", "CO31, bicarbonate, xxwy"}, {"CG2R61", "OG311", "HGP1", "65.00", "108.00", " ", " ", "PROT JES 8/25/89 phenol"}, {"CG301", "OG311", "HGP1", "50.00", "106.00", " ", " ", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "OG311", "HGP1", "50.00", "106.00", " ", " ", "og 1/06 EtOH IR fit; was 57.5 106"}, {"CG321", "OG311", "HGP1", "50.00", "106.00", " ", " ", "sng mod (qm and crystal data); was 57.5 106"}, {"CG331", "OG311", "HGP1", "57.50", "106.00", " ", " ", "Team Sugar, HCP1M OC311M CC331M; unchanged"}, {"CG3C51", "OG311", "HGP1", "50.00", "109.00", " ", " ", "par_Sugars, CC315x OC311 HCP1; was 57.5 106"}, {"NG3P0", "OG311", "HGP1", "60.00", "101.50", " ", " ", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"PG0", "OG311", "HGP1", "30.00", "115.00", "40.00", "2.3500", "NA MP_1, ADM Jr. !Reorganization:MP_0"}, {"PG1", "OG311", "HGP1", "30.00", "115.00", "40.00", "2.3500", "NA MP_1, ADM Jr. !Reorganization:MP_1"}, {"CG3C31", "OG3C31", "CG3C31", "50.35", "97.00", " ", " ", "1EOX, 1-ethylene oxide, sc"}, {"CG2R51", "OG3C51", "CG2R53", "85.00", "104.00", " ", " ", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "OG3C51", "CG3C52", "125.00", "104.40", " ", " ", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R53", "OG3C51", "CG3C52", "90.00", "107.10", " ", " ", "GBL, Gamma-butyrolactone, ctsai"}, {"CG2RC0", "OG3C51", "CG3C52", "76.00", "108.05", " ", " ", "ZDOL, 1,3-benzodioxole, kevo"}, {"CG3C41", "OG3C51", "CG3C41", "55.00", "89.12", " ", " ", "OXTN, oxetane, gmu (CG3C52 OG3C51 CG3C52)"}, {"CG3C51", "OG3C51", "CG3C51", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "OG3C51", "CG3C52", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"CG3C51", "OG3C51", "CG3C53", "110.00", "108.00", " ", " ", "NA"}, {"CG3C52", "OG3C51", "CG3C52", "95.00", "111.00", " ", " ", "THF 10/21/05, viv"}, {"CG3C52", "OG3C51", "CG3RC1", "170.00", "109.00", " ", " ", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol, xxwy"}, {"CG321", "OG3C61", "CG321", "95.00", "109.70", " ", " ", "DIOX, dioxane"}, {"CG2D1O", "OG3R60", "CG2D1O", "40.00", "99.00", " ", " ", "PY01, 4h-pyran, maintain 720 in ring"}, {"CG2D1O", "OG3R60", "CG321", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2D2O", "OG3R60", "CG2D2O", "40.00", "99.00", " ", " ", "PY01, 4h-pyran, maintain 720 in ring"}, {"CG2D2O", "OG3R60", "CG321", "20.00", "99.00", " ", " ", "PY02, 2h-pyran"}, {"CG2R61", "OG3R60", "CG2R61", "40.00", "115.00", " ", " ", "FEOZ, phenoxazine, erh"}, {"CG2R62", "OG3R60", "CG2R63", "102.00", "126.50", " ", " ", "RIN, coumarin, isg"}, {"OG2P1", "PG0", "OG303", "98.90", "111.60", " ", " ", "LIPID phosphate !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG2P1", "PG0", "OG311", "98.90", "108.23", " ", " ", "NA MP_1, ADM Jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG303", "PG0", "OG311", "48.10", "108.00", " ", " ", "NA MP_1, ADM Jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"OG311", "PG0", "OG311", "98.90", "104.00", " ", " ", "NA MP_0, ADM Jr."}, {"CG312", "PG1", "OG2P1", "98.90", "94.00", " ", " ", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG312", "PG1", "OG311", "90.10", "90.00", " ", " ", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG321", "PG1", "OG2P1", "98.90", "103.00", " ", " ", "BDFP, Benzylphosphonate re-optimize?"}, {"CG321", "PG1", "OG311", "90.10", "94.00", " ", " ", "BDFP, BDFD, Benzylphosphonate"}, {"NG2S3", "PG1", "OG2P1", "140.00", "110.60", " ", " ", "NABAKB phosphoramidates"}, {"NG2S3", "PG1", "OG303", "60.00", "103.20", " ", " ", "NABAKB phosphoramidates"}, {"OG2P1", "PG1", "OG2P1", "104.00", "120.00", " ", " ", "MP_1 reorganization, kevo"}, {"OG2P1", "PG1", "OG303", "98.90", "107.50", " ", " ", "MP_1 reorganization, kevo"}, {"OG2P1", "PG1", "OG304", "88.90", "111.60", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1, PPI2"}, {"OG2P1", "PG1", "OG311", "98.90", "111.00", " ", " ", "MP_1 reorganization, kevo"}, {"OG303", "PG1", "OG303", "80.00", "104.30", " ", " ", "NA DMP, ADM Jr. !Reorganization: PC and others"}, {"OG303", "PG1", "OG304", "48.10", "105.00", " ", " ", "PPI1, PPI2, METP reorganization, kevo"}, {"OG303", "PG1", "OG311", "48.10", "108.00", " ", " ", "MP_1 reorganization, kevo"}, {"OG304", "PG1", "OG304", "48.10", "107.50", " ", " ", "METP reorganization, kevo"}, {"OG304", "PG1", "OG311", "48.10", "111.00", " ", " ", "PPI2 reorganization, kevo"}, {"CG312", "PG2", "OG2P1", "98.90", "94.00", " ", " ", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG321", "PG2", "OG2P1", "98.90", "103.00", " ", " ", "BDFD, Benzylphosphonate / re-optimize?"}, {"OG2P1", "PG2", "OG2P1", "104.00", "121.00", " ", " ", "MP_2 reorganization, kevo"}, {"OG2P1", "PG2", "OG303", "88.90", "111.00", " ", " ", "MP_2 reorganization, kevo"}, {"OG2P1", "PG2", "OG304", "88.90", "111.60", " ", " ", "NA nad/ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1, PPI2"}, {"CG2R51", "SG2R50", "CG2R51", "105.00", "95.00", " ", " ", "THIP, thiophene"}, {"CG2R51", "SG2R50", "CG2R53", "110.00", "97.00", " ", " ", "THAZ, thiazole @@@@@ Kenno: 95 --> 97 @@@@@"}, {"CG2R51", "SG2R50", "CG2RC0", "70.00", "99.50", " ", " ", "ZTHP, benzothiophene, kevo"}, {"CG2R51", "SG2R50", "NG2R50", "150.00", "103.00", " ", " ", "ISOT, isothiazole"}, {"CG2R53", "SG2R50", "CG2RC0", "110.00", "97.00", " ", " ", "ZTHZ, benzothiazole, kevo"}, {"CG321", "SG301", "SG301", "72.50", "103.30", " ", " ", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"CG331", "SG301", "SG301", "72.50", "103.30", " ", " ", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"CG251O", "SG311", "CG2R53", "75.00", "92.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "SG311", "CG2R53", "75.00", "92.00", " ", " ", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2N2", "SG311", "CG321", "59.00", "94.70", " ", " ", "DH3T, transferred from MT2A , fylin"}, {"CG2N2", "SG311", "CG331", "59.00", "94.70", " ", " ", "MT2A, fylin"}, {"CG2O6", "SG311", "CG331", "60.00", "96.00", " ", " ", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2R61", "SG311", "CG2R61", "50.00", "109.00", " ", " ", "FETZ, phenothiazine, erh"}, {"CG2R64", "SG311", "CG331", "66.00", "91.00", " ", " ", "2SMPYR, 2-(methylthio)-pyrimidine; from CG2O6 SG311 CG331; isg (may need to be re-evaluated because yxu got a QM value of 100.8 for RESI 2MSA)"}, {"CG321", "SG311", "CG321", "34.00", "95.00", " ", " ", "PROTNA sahc"}, {"CG321", "SG311", "CG331", "34.00", "95.00", " ", " ", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "SG311", "HGP3", "38.80", "95.00", " ", " ", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG331", "SG311", "HGP3", "43.00", "95.00", " ", " ", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG2R61", "SG3O1", "OG2P1", "85.0", "98.0", " ", " ", "benzene sulfonic acid anion, og"}, {"CG321", "SG3O1", "OG2P1", "80.00", "99.00", " ", " ", "ESNA, ethyl sulfonate, xhe"}, {"CG331", "SG3O1", "OG2P1", "85.00", "100.00", " ", " ", "MSNA, methyl sulfonate, xhe"}, {"NG2S3", "SG3O1", "OG2P1", "33.20", "94.20", " ", " ", "NMSM, N-methyl-sulfamate, my"}, {"OG2P1", "SG3O1", "OG2P1", "130.00", "109.47", "35.0", "2.45", "LIPID methylsulfate"}, {"OG2P1", "SG3O1", "OG303", "85.00", "98.00", " ", " ", "LIPID methylsulfate"}, {"CG2R61", "SG3O2", "NG311", "70.00", "97.00", " ", " ", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "SG3O2", "NG321", "60.00", "98.00", " ", " ", "BSAM, benzenesulfonamide, xxwy"}, {"CG2R61", "SG3O2", "OG2P1", "60.00", "101.00", " ", " ", "BSAM, benzenesulfonamide, xxwy"}, {"CG321", "SG3O2", "CG331", "80.00", "102.00", " ", " ", "MESN, methyl ethyl sulfone, xhe"}, {"CG321", "SG3O2", "NG311", "62.00", "101.00", " ", " ", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "SG3O2", "OG2P1", "75.00", "107.50", " ", " ", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG331", "SG3O2", "CG331", "80.00", "102.00", " ", " ", "DMSN, dimethyl sulfone, xhe"}, {"CG331", "SG3O2", "NG311", "73.00", "103.00", " ", " ", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"CG331", "SG3O2", "NG321", "83.00", "101.00", " ", " ", "MSAM, methanesulfonamide, xxwy"}, {"CG331", "SG3O2", "OG2P1", "79.00", "108.50", " ", " ", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"CG331", "SG3O2", "OG303", "93.00", "96.00", " ", " ", "MMST, methyl methanesulfonate, xxwy"}, {"NG311", "SG3O2", "NG311", "83.10", "102.30", " ", " ", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"NG311", "SG3O2", "OG2P1", "75.00", "110.50", " ", " ", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"NG321", "SG3O2", "OG2P1", "80.00", "111.00", " ", " ", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"NG321", "SG3O2", "OG303", "100.00", "102.00", " ", " ", "MSMT, methyl sulfamate, and PSMT, xxwy"}, {"OG2P1", "SG3O2", "OG2P1", "85.00", "121.00", " ", " ", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"OG2P1", "SG3O2", "OG303", "90.00", "109.00", " ", " ", "MMST, methyl methanesulfonate, xxwy"}, {"CG321", "SG3O3", "CG331", "85.00", "95.00", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CG321", "SG3O3", "OG2P1", "65.00", "106.50", " ", " ", "MESO, methylethylsulfoxide, mnoon"}, {"CG331", "SG3O3", "CG331", "34.00", "95.00", " ", " ", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"CG331", "SG3O3", "OG2P1", "79.00", "106.75", " ", " ", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"FGP1", "ALG1", "FGP1", "23.00", "109.47", "15.0", "2.81855", "aluminum tetrafluoride, ALF4, tetrahedral"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_cgenff info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_cgenff_dihedrals[3937][8]= {{"CG2R53", "CG251O", "CG25C1", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "CG25C1", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG251O", "CG25C1", "CG2R53", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"NG2R53", "CG251O", "CG25C1", "CG2RC0", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"SG311", "CG251O", "CG25C1", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"SG311", "CG251O", "CG25C1", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "CG2DC3", "HGA5", "3.9000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG251O", "CG2DC3", "HGA5", "4.6000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG251O", "CG2DC3", "HGA5", "5.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "CG2R53", "NG2R53", "5.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG251O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG251O", "CG2R53", "OG2D1", "4.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG251O", "CG2R53", "NG2R53", "1.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG251O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C1", "CG251O", "NG2R53", "CG2R53", "4.0000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C1", "CG251O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG2DC3", "CG251O", "NG2R53", "CG2R53", "1.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG251O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG251O", "NG2R53", "CG2R53", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG251O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG25C1", "CG251O", "SG311", "CG2R53", "4.0000", "3", "0.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG251O", "SG311", "CG2R53", "0.2000", "3", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG251O", "SG311", "CG2R53", "1.2000", "3", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "CG25C2", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "CG25C2", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG252O", "CG25C2", "CG2R53", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"NG2R53", "CG252O", "CG25C2", "CG2RC0", "3.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"SG311", "CG252O", "CG25C2", "CG2R53", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"SG311", "CG252O", "CG25C2", "CG2RC0", "6.4000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "CG2DC3", "HGA5", "3.9000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG252O", "CG2DC3", "HGA5", "4.6000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG252O", "CG2DC3", "HGA5", "5.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "CG2R53", "NG2R53", "5.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG252O", "CG2R53", "NG2R53", "0.2000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG252O", "CG2R53", "OG2D1", "4.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"SG311", "CG252O", "CG2R53", "NG2R53", "1.2000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG252O", "CG2R53", "OG2D1", "0.8000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG25C2", "CG252O", "NG2R53", "CG2R53", "4.0000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG25C2", "CG252O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "OIHY, 5-(oxindol-3-ylidene)hydantoin, complete ring system, xxwy"}, {"CG2DC3", "CG252O", "NG2R53", "CG2R53", "1.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2DC3", "CG252O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG252O", "NG2R53", "CG2R53", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG2R53", "CG252O", "NG2R53", "HGP1", "0.4000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"CG25C2", "CG252O", "SG311", "CG2R53", "4.0000", "3", "0.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG252O", "SG311", "CG2R53", "0.2000", "3", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG252O", "SG311", "CG2R53", "1.2000", "3", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C1", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2R53", "NG2R51", "3.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2R53", "NG2R51", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2R53", "OG2D1", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C1", "CG2R53", "NG2R51", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C1", "CG2R53", "OG2D1", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2RC0", "CG2R61", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG25C1", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2RC0", "CG2R61", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C1", "CG2RC0", "CG2RC0", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C1", "CG2RC0", "CG2RC0", "3.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C2", "CG2DC3", "HGA5", "4.4000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2R53", "NG2R51", "3.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2R53", "OG2D1", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2R53", "NG2R51", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2R53", "OG2D1", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C2", "CG2R53", "NG2R51", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2RC0", "CG25C2", "CG2R53", "OG2D1", "1.2000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2RC0", "CG2R61", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG25C2", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "OIRD, oxindol-3-ylidene rhodanine, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2RC0", "CG2R61", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2DC3", "CG25C2", "CG2RC0", "CG2RC0", "0.1000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R53", "CG25C2", "CG2RC0", "CG2RC0", "3.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG301", "CG2D1", "CG2D1", "CG321", "0.4500", "1", "180.00", "CHL1, cholesterol"}, {"CG301", "CG2D1", "CG2D1", "CG321", "8.5000", "2", "180.00", "CHL1, cholesterol"}, {"CG301", "CG2D1", "CG2D1", "CG331", "10.0000", "2", "180.00", "RETINOL TMCH"}, {"CG301", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"CG321", "CG2D1", "CG2D1", "CG321", "0.4500", "1", "180.00", "LIPID 2-butene, adm jr., 4/04"}, {"CG321", "CG2D1", "CG2D1", "CG321", "8.5000", "2", "180.00", "LIPID"}, {"CG321", "CG2D1", "CG2D1", "CG331", "0.4500", "1", "180.00", "LIPID 2-butene, adm jr., 4/04"}, {"CG321", "CG2D1", "CG2D1", "CG331", "8.5000", "2", "180.00", "LIPID"}, {"CG321", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"CG331", "CG2D1", "CG2D1", "CG331", "0.4500", "1", "180.00", "LIPID 2-butene, adm jr., 4/04"}, {"CG331", "CG2D1", "CG2D1", "CG331", "8.5000", "2", "180.00", "LIPID"}, {"CG331", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"HGA4", "CG2D1", "CG2D1", "HGA4", "1.0000", "2", "180.00", "LIPID 2-butene, adm jr., 8/98 update"}, {"CG321", "CG2D1", "CG2D1O", "NG301", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D1O", "NG311", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D1O", "OG3R60", "3.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG321", "CG2D1", "CG2D1O", "HGA4", "6.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D1O", "NG301", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D1O", "NG311", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D1O", "OG3R60", "8.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D1O", "HGA4", "1.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG321", "CG2D1", "CG2D2", "HGA5", "5.2000", "2", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"CG331", "CG2D1", "CG2D2", "HGA5", "5.2000", "2", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"HGA4", "CG2D1", "CG2D2", "HGA5", "5.2000", "2", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"CG321", "CG2D1", "CG2D2O", "NG301", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D2O", "NG311", "3.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG321", "CG2D1", "CG2D2O", "OG3R60", "3.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG321", "CG2D1", "CG2D2O", "HGA4", "6.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D2O", "NG301", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D2O", "NG311", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG2D2O", "OG3R60", "8.0000", "2", "180.00", "PY01, 4h-pyran"}, {"HGA4", "CG2D1", "CG2D2O", "HGA4", "1.0000", "2", "180.00", "PY01, 4h-pyran"}, {"CG2D1", "CG2D1", "CG301", "CG311", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG311", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG321", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG321", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG331", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG301", "CG331", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG321", "CG2D1", "CG301", "CG311", "0.0000", "3", "180.00", "CHOLEST cholesterol"}, {"CG321", "CG2D1", "CG301", "CG321", "0.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG321", "CG2D1", "CG301", "CG331", "0.0000", "3", "180.00", "CHOLEST cholesterol"}, {"CG331", "CG2D1", "CG301", "CG321", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2D1", "CG301", "CG331", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "1.0000", "1", "180.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "0.1000", "2", "0.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "0.3000", "3", "180.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG2D1", "0.2000", "4", "0.00", "LIPID 2,5-diheptane"}, {"CG2D1", "CG2D1", "CG321", "CG311", "0.5000", "1", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG321", "CG311", "1.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG2D1", "CG2D1", "CG321", "CG321", "0.6000", "1", "180.00", "LIPID alkenes"}, {"CG2D1", "CG2D1", "CG321", "CG331", "0.9000", "1", "180.00", "LIPID alkenes"}, {"CG2D1", "CG2D1", "CG321", "CG331", "0.2000", "2", "180.00", "LIPID alkenes"}, {"CG2D1", "CG2D1", "CG321", "HGA2", "0.3000", "3", "180.00", "LIPID alkenes"}, {"CG2D1O", "CG2D1", "CG321", "CG2D1", "0.5000", "2", "0.00", "PY01, 4h-pyran"}, {"CG2D1O", "CG2D1", "CG321", "CG2D1", "0.4500", "4", "0.00", "PY01, 4h-pyran"}, {"CG2D1O", "CG2D1", "CG321", "CG2DC1", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D1O", "CG2D1", "CG321", "HGA2", "0.1000", "3", "0.00", "PY01, 4h-pyran"}, {"CG2D2", "CG2D1", "CG321", "CG2D1", "1.2000", "1", "180.00", "LIPID 1,4-dipentene"}, {"CG2D2", "CG2D1", "CG321", "CG2D1", "0.4000", "2", "180.00", "LIPID 1,4-dipentene"}, {"CG2D2", "CG2D1", "CG321", "CG2D1", "1.3000", "3", "180.00", "LIPID 1,4-dipentene"}, {"CG2D2", "CG2D1", "CG321", "CG331", "0.5000", "1", "180.00", "LIPID 1-butene, adm jr., 2/00 update"}, {"CG2D2", "CG2D1", "CG321", "CG331", "1.3000", "3", "180.00", "LIPID 1-butene, adm jr., 2/00 update"}, {"CG2D2", "CG2D1", "CG321", "OG311", "1.9000", "1", "180.00", "RETINOL PROL"}, {"CG2D2", "CG2D1", "CG321", "OG311", "0.4000", "2", "180.00", "RETINOL PROL"}, {"CG2D2", "CG2D1", "CG321", "OG311", "0.6000", "3", "180.00", "RETINOL PROL"}, {"CG2D2", "CG2D1", "CG321", "HGA2", "0.1200", "3", "0.00", "LIPID 1-butene, yin,adm jr., 12/95"}, {"CG2D2O", "CG2D1", "CG321", "CG2D1", "0.5000", "2", "0.00", "PY01, 4h-pyran"}, {"CG2D2O", "CG2D1", "CG321", "CG2D1", "0.4500", "4", "0.00", "PY01, 4h-pyran"}, {"CG2D2O", "CG2D1", "CG321", "CG2DC2", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D2O", "CG2D1", "CG321", "HGA2", "0.1000", "3", "0.00", "PY01, 4h-pyran"}, {"CG301", "CG2D1", "CG321", "CG311", "0.3000", "3", "180.00", "CHOLEST cholesterol"}, {"CG301", "CG2D1", "CG321", "HGA2", "0.0300", "3", "0.00", "CHOLEST cholesterol"}, {"CG331", "CG2D1", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2D1", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"HGA4", "CG2D1", "CG321", "CG2D1", "0.0000", "3", "0.00", "LIPID 1,4-dipentene"}, {"HGA4", "CG2D1", "CG321", "CG2DC1", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG321", "CG2DC2", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1", "CG321", "CG311", "0.0000", "3", "0.00", "CHOLEST cholesterol"}, {"HGA4", "CG2D1", "CG321", "CG321", "0.1200", "3", "0.00", "LIPID butene, yin,adm jr., 12/95"}, {"HGA4", "CG2D1", "CG321", "CG331", "0.1200", "3", "0.00", "LIPID butene, yin,adm jr., 12/95"}, {"HGA4", "CG2D1", "CG321", "OG311", "0.2000", "3", "0.00", "RETINOL PROL"}, {"HGA4", "CG2D1", "CG321", "HGA2", "0.0000", "3", "0.00", "LIPID butene, adm jr., 2/00 update"}, {"CG2D1", "CG2D1", "CG331", "HGA3", "0.3000", "3", "180.00", "LIPID alkenes"}, {"CG2D2", "CG2D1", "CG331", "HGA3", "0.0500", "3", "180.00", "LIPID propene, yin,adm jr., 12/95"}, {"CG301", "CG2D1", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG321", "CG2D1", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"NG2D1", "CG2D1", "CG331", "HGA3", "0.1000", "3", "180.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"NG2P1", "CG2D1", "CG331", "HGA3", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA4", "CG2D1", "CG331", "HGA3", "0.0000", "3", "0.00", "LIPID butene, adm jr., 2/00 update"}, {"HGR52", "CG2D1", "CG331", "HGA3", "0.1500", "3", "0.00", "RETINOL SCH2, Schiff's base, protonated"}, {"CG331", "CG2D1", "NG2D1", "CG321", "12.0000", "2", "180.00", "EEPI, from CG331 CG2D1 NG2D1 CG331, fylin"}, {"CG331", "CG2D1", "NG2D1", "CG331", "12.0000", "2", "180.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"CG331", "CG2D1", "NG2D1", "NG2S1", "12.0000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"HGA4", "CG2D1", "NG2D1", "CG321", "8.5000", "2", "180.00", "EEPI, from HGA4 CG2D1 NG2D1 CG331, fylin"}, {"HGA4", "CG2D1", "NG2D1", "CG331", "8.5000", "2", "180.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"HGA4", "CG2D1", "NG2D1", "NG2S1", "4.0000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG331", "CG2D1", "NG2P1", "CG334", "7.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"CG331", "CG2D1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2D1", "NG2P1", "CG334", "8.5000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2D1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"NG321", "CG2D1O", "CG2D2", "HGA5", "2.0000", "2", "180.00", "AMET, ethenamine, 1.0->2.0 to improve molvib; pram"}, {"OG301", "CG2D1O", "CG2D2", "HGA5", "9.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA4", "CG2D1O", "CG2D2", "HGA5", "2.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"NG301", "CG2D1O", "CG2DC1", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG301", "CG2D1O", "CG2DC1", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"NG311", "CG2D1O", "CG2DC1", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D1O", "CG2DC1", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"OG301", "CG2D1O", "CG2DC1", "CG2DC2", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D1O", "CG2DC1", "CG2DC2", "15.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D1O", "CG2DC1", "HGA4", "3.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG3R60", "CG2D1O", "CG2DC1", "CG2DC2", "2.0000", "2", "180.00", "PY02, 2h-pyran"}, {"OG3R60", "CG2D1O", "CG2DC1", "HGA4", "7.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D1O", "CG2DC1", "CG2DC2", "6.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D1O", "CG2DC1", "CG2O1", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1O", "CG2DC1", "CG321", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D1O", "CG2DC1", "HGA4", "2.5000", "2", "180.00", "PY02, 2h-pyran"}, {"CG2D1", "CG2D1O", "NG301", "CG2D1O", "0.1000", "2", "180.00", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "NG301", "CG2D1O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC1", "CG2D1O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG301", "CG2D1O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG311", "CG2D1O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D1O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC1", "CG2D1O", "NG311", "CG2D1O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC1", "CG2D1O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG311", "CG2D1O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D1O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "1.7000", "1", "0.00", "1.66 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "3.0600", "2", "180.00", "3.02 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "0.2300", "3", "180.00", "0.24 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D1O", "NG321", "HGPAM2", "0.1200", "4", "0.00", "needed for OOP but poorly transferable; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"HGA4", "CG2D1O", "NG321", "HGPAM2", "0.1600", "3", "0.00", "AMET, ethenamine; from MAM1, methylamine; kevo"}, {"CG2D2", "CG2D1O", "OG301", "CG331", "0.9000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D1O", "OG301", "CG331", "3.1000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D1O", "OG301", "CG331", "1.2000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "OG301", "CG331", "0.8000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "OG301", "CG331", "3.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC1", "CG2D1O", "OG301", "CG331", "1.1000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA4", "CG2D1O", "OG301", "CG331", "0.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D1", "CG2D1O", "OG3R60", "CG2D1O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2D1", "CG2D1O", "OG3R60", "CG2D2O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2DC1", "CG2D1O", "OG3R60", "CG321", "2.0000", "2", "0.00", "PY02, 2h-pyran seems reasonable - kevo"}, {"HGA4", "CG2D1O", "OG3R60", "CG2D1O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D1O", "OG3R60", "CG2D2O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D1O", "OG3R60", "CG321", "0.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA5", "CG2D2", "CG2D2", "HGA5", "4.9000", "2", "180.00", "LIPID ethene, yin,adm jr., 12/95"}, {"HGA5", "CG2D2", "CG2D2O", "NG321", "2.0000", "2", "180.00", "AMET, ethenamine, 1.0->2.0 to improve molvib; pram"}, {"HGA5", "CG2D2", "CG2D2O", "OG301", "9.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA5", "CG2D2", "CG2D2O", "HGA4", "2.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"NG301", "CG2D2O", "CG2DC2", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG301", "CG2D2O", "CG2DC2", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"NG311", "CG2D2O", "CG2DC2", "CG2O1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"NG311", "CG2D2O", "CG2DC2", "CG321", "2.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"OG301", "CG2D2O", "CG2DC2", "CG2DC1", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D2O", "CG2DC2", "CG2DC1", "15.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG301", "CG2D2O", "CG2DC2", "HGA4", "3.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"OG3R60", "CG2D2O", "CG2DC2", "CG2DC1", "2.0000", "2", "180.00", "PY02, 2h-pyran"}, {"OG3R60", "CG2D2O", "CG2DC2", "HGA4", "7.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D2O", "CG2DC2", "CG2DC1", "6.0000", "2", "180.00", "PY02, 2h-pyran"}, {"HGA4", "CG2D2O", "CG2DC2", "CG2O1", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D2O", "CG2DC2", "CG321", "1.0000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"HGA4", "CG2D2O", "CG2DC2", "HGA4", "2.5000", "2", "180.00", "PY02, 2h-pyran"}, {"CG2D1", "CG2D2O", "NG301", "CG2D2O", "0.1000", "2", "180.00", "NADH, NDPH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "NG301", "CG2D2O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC2", "CG2D2O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG301", "CG2D2O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG301", "CG3C51", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG311", "CG2D2O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D1", "CG2D2O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2D2O", "NG311", "CG2D2O", "0.5000", "2", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 0.1 but that's unlikely ==> re-optimize"}, {"CG2DC2", "CG2D2O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG311", "CG2D2O", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"HGA4", "CG2D2O", "NG311", "HGPAM1", "0.1000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "1.7000", "1", "0.00", "1.66 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "3.0600", "2", "180.00", "3.02 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "0.2300", "3", "180.00", "0.24 w/o 4-fold; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"CG2D2", "CG2D2O", "NG321", "HGPAM2", "0.1200", "4", "0.00", "needed for OOP but poorly transferable; AMET, ethenamine, lsfitdih run 9 w 113, kevo"}, {"HGA4", "CG2D2O", "NG321", "HGPAM2", "0.1600", "3", "0.00", "AMET, ethenamine; from MAM1, methylamine; kevo"}, {"CG2D2", "CG2D2O", "OG301", "CG331", "0.9000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2O", "OG301", "CG331", "3.1000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2", "CG2D2O", "OG301", "CG331", "1.2000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "OG301", "CG331", "0.8000", "1", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "OG301", "CG331", "3.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2DC2", "CG2D2O", "OG301", "CG331", "1.1000", "3", "180.00", "MOET, Methoxyethene, xxwy"}, {"HGA4", "CG2D2O", "OG301", "CG331", "0.0000", "2", "180.00", "MOET, Methoxyethene, xxwy"}, {"CG2D1", "CG2D2O", "OG3R60", "CG2D1O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2D1", "CG2D2O", "OG3R60", "CG2D2O", "3.0000", "2", "180.00", "PY01, 4h-pyran seems reasonable - kevo"}, {"CG2DC2", "CG2D2O", "OG3R60", "CG321", "2.0000", "2", "0.00", "PY02, 2h-pyran seems reasonable - kevo"}, {"HGA4", "CG2D2O", "OG3R60", "CG2D1O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D2O", "OG3R60", "CG2D2O", "0.0000", "2", "180.00", "PY01, 4h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"HGA4", "CG2D2O", "OG3R60", "CG321", "0.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOET, Methoxyethene; kevo"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2DC2", "0.5600", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2DC2", "7.0000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O1", "0.5600", "1", "180.00", "RETINOL FRET"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O1", "7.0000", "2", "180.00", "RETINOL FRET"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O3", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O3", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O4", "0.5600", "1", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG2O4", "7.0000", "2", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG321", "0.5600", "1", "180.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG321", "7.0000", "2", "180.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC2", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL CROT"}, {"CG2O1", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL CROT"}, {"CG2O3", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2O3", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC1", "CG2DC1", "CG331", "0.5600", "1", "180.00", "RETINOL RTAL"}, {"CG2O4", "CG2DC1", "CG2DC1", "CG331", "7.0000", "2", "180.00", "RETINOL RTAL Kenno: 0.5 -> 7.0 for the sake of transferability"}, {"CG301", "CG2DC1", "CG2DC1", "CG321", "10.0000", "2", "180.00", "RETINOL TMCH"}, {"CG301", "CG2DC1", "CG2DC1", "CG331", "10.0000", "2", "180.00", "RETINOL MECH"}, {"CG321", "CG2DC1", "CG2DC1", "CG331", "10.0000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG321", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "PY02, 2h-pyran; re-initialized from BTE2, 2-butene; kevo"}, {"CG331", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"HGA4", "CG2DC1", "CG2DC1", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC2", "1.5000", "1", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC2", "1.5000", "3", "0.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC3", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "CG2DC3", "1.5000", "3", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D1O", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "1", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2D2O", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "3", "0.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC2", "0.5000", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC2", "2.0000", "2", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "3", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC3", "0.5000", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC3", "2.0000", "2", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "3", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG301", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG331", "1.1000", "1", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "CG331", "0.7000", "2", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG2DC1", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "1", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2D2O", "1.0000", "2", "180.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2D2O", "1.5000", "3", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC2", "0.5000", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC2", "2.0000", "2", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "3", "0.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC3", "0.4000", "1", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC3", "0.4000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG2DC3", "1.3000", "3", "0.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG301", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG331", "1.1000", "1", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "CG331", "0.7000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "0.5000", "1", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "2.2000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "1.1000", "3", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "NG2P1", "0.6000", "4", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC3", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2DC3", "CG2DC1", "CG2DC2", "HGR52", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC2", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.9000", "1", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "2.1000", "2", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.2200", "3", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.2500", "5", "180.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "CG2DC3", "0.1000", "6", "0.00", "RETINOL MECH"}, {"CG301", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL MECH"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC2", "1.1000", "1", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC2", "0.7000", "2", "180.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC3", "1.1000", "1", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG331", "CG2DC1", "CG2DC2", "CG2DC3", "0.7000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG331", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "0.5000", "1", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "2.2000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "1.1000", "3", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "CG2DC3", "0.6000", "4", "0.00", "RETINOL SCH3, Schiff's base, protonated"}, {"NG2P1", "CG2DC1", "CG2DC2", "HGA4", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGA4", "CG2DC1", "CG2DC2", "CG2D2O", "1.0000", "2", "180.00", "PY02, 2h-pyran; re-initialized from MOBU, 1-Methoxy-1,3-butadiene; xxwy"}, {"HGA4", "CG2DC1", "CG2DC2", "CG2DC2", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "CG301", "1.0000", "2", "180.00", "RETINOL MECH"}, {"HGA4", "CG2DC1", "CG2DC2", "CG331", "1.0000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "NG2P1", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGA4", "CG2DC1", "CG2DC2", "HGA4", "0.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"HGA4", "CG2DC1", "CG2DC2", "HGR52", "0.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "CG2DC2", "CG2DC3", "1.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "CG2DC2", "HGA4", "0.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC1", "CG2DC3", "HGA5", "5.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O3", "CG2DC1", "CG2DC3", "HGA5", "4.2000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC1", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2O5", "CG2DC1", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "BEON, butenone; from PRAL, acrolein; mcs"}, {"CG2R61", "CG2DC1", "CG2DC3", "HGA5", "3.5000", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG331", "CG2DC1", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"HGA4", "CG2DC1", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2D1O", "CG2DC1", "CG2O1", "NG2S2", "1.1000", "1", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D1O", "CG2DC1", "CG2O1", "NG2S2", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D1O", "CG2DC1", "CG2O1", "OG2D1", "0.3000", "1", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D1O", "CG2DC1", "CG2O1", "OG2D1", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "0.7000", "1", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "0.1000", "3", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "NG2S1", "0.1500", "4", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "0.7000", "1", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "0.1000", "3", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O1", "OG2D1", "0.2000", "4", "0.00", "RETINOL CROT"}, {"CG321", "CG2DC1", "CG2O1", "NG2S2", "0.5000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "NG2S2", "0.3500", "3", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "NG2S2", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "OG2D1", "1.0000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "OG2D1", "1.0000", "3", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC1", "CG2O1", "OG2D1", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"HGA4", "CG2DC1", "CG2O1", "NG2S1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"HGA4", "CG2DC1", "CG2O1", "OG2D1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2DC1", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC3", "CG2DC1", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"HGA4", "CG2DC1", "CG2O3", "OG2D2", "0.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC1", "CG2DC1", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC1", "CG2DC1", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC1", "CG2O4", "OG2D1", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC1", "CG2O4", "HGR52", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC1", "CG2O5", "CG331", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC1", "CG2O5", "OG2D3", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"HGA4", "CG2DC1", "CG2O5", "CG331", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"HGA4", "CG2DC1", "CG2O5", "OG2D3", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"CG2DC3", "CG2DC1", "CG2R61", "CG2R61", "0.7500", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC1", "CG2R61", "CG2R61", "0.1900", "4", "0.00", "STYR, styrene, xxwy and oashi"}, {"NG2D1", "CG2DC1", "CG2R61", "CG2R61", "1.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"HGA4", "CG2DC1", "CG2R61", "CG2R61", "0.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2DC1", "CG2DC1", "CG301", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG301", "CG331", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG301", "CG331", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC1", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC1", "CG301", "CG331", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2D1O", "CG2DC1", "CG321", "CG2D1", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D1O", "CG2DC1", "CG321", "HGA2", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2DC1", "CG2DC1", "CG321", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG321", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG2DC1", "CG321", "OG311", "1.9000", "1", "180.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG321", "OG311", "0.4000", "2", "180.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG321", "OG311", "0.6000", "3", "180.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG321", "OG3R60", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2DC1", "CG2DC1", "CG321", "HGA2", "0.0300", "3", "0.00", "RETINOL PROL"}, {"CG2O1", "CG2DC1", "CG321", "CG2D1", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC1", "CG321", "HGA2", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG331", "CG2DC1", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2DC1", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"HGA4", "CG2DC1", "CG321", "OG311", "0.2000", "3", "0.00", "RETINOL PROL"}, {"HGA4", "CG2DC1", "CG321", "OG3R60", "0.2000", "3", "0.00", "PY02, 2h-pyran; re-initialized from PROL, 3-propenol; kevo"}, {"HGA4", "CG2DC1", "CG321", "HGA2", "0.2000", "3", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0 --> 180 to fix minimum @@@@@"}, {"CG2DC2", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC3", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG321", "CG2DC1", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL MECH"}, {"CG331", "CG2DC1", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"HGA4", "CG2DC1", "CG331", "HGA3", "0.0000", "3", "0.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0.3 --> 0.0 to fix planarity around CG2DCx @@@@@"}, {"CG2R61", "CG2DC1", "NG2D1", "NG2S1", "12.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"HGA4", "CG2DC1", "NG2D1", "NG2S1", "4.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "CG2DC1", "NG2P1", "CG334", "7.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC2", "CG2DC1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "NG2P1", "CG334", "8.5000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2DC1", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2DC1", "0.5600", "1", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2DC1", "7.0000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O1", "0.5600", "1", "180.00", "RETINOL FRET"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O1", "7.0000", "2", "180.00", "RETINOL FRET"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O3", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O3", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O4", "0.5600", "1", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG2O4", "7.0000", "2", "180.00", "RETINOL RTAL unmodified"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG321", "0.5600", "1", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG321", "7.0000", "2", "180.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL 13DP, 1,3-Pentadiene"}, {"CG2DC1", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O1", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL CROT"}, {"CG2O1", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL CROT"}, {"CG2O3", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL PRAC"}, {"CG2O3", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC2", "CG2DC2", "CG331", "0.5600", "1", "180.00", "RETINOL RTAL"}, {"CG2O4", "CG2DC2", "CG2DC2", "CG331", "7.0000", "2", "180.00", "RETINOL RTAL Kenno: 0.5 -> 7.0 for the sake of transferability"}, {"CG301", "CG2DC2", "CG2DC2", "CG321", "10.0000", "2", "180.00", "RETINOL TMCH"}, {"CG301", "CG2DC2", "CG2DC2", "CG331", "10.0000", "2", "180.00", "RETINOL MECH"}, {"CG321", "CG2DC2", "CG2DC2", "CG331", "10.0000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG321", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "PY02, 2h-pyran; re-initialized from BTE2, 2-butene; kevo"}, {"CG331", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"HGA4", "CG2DC2", "CG2DC2", "HGA4", "5.2000", "2", "180.00", "RETINOL BTE2, 2-butene"}, {"CG2DC1", "CG2DC2", "CG2DC3", "HGA5", "5.0000", "2", "180.00", "RETINOL 13DB, 1,3-Butadiene"}, {"CG2O3", "CG2DC2", "CG2DC3", "HGA5", "4.2000", "2", "180.00", "RETINOL PRAC"}, {"CG2O4", "CG2DC2", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2O5", "CG2DC2", "CG2DC3", "HGA5", "3.2000", "2", "180.00", "BEON, butenone; from PRAL, acrolein; mcs"}, {"CG2R61", "CG2DC2", "CG2DC3", "HGA5", "3.5000", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG331", "CG2DC2", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"HGA4", "CG2DC2", "CG2DC3", "HGA5", "5.2000", "2", "180.00", "RETINOL HEP3, 1,3,5-heptatriene"}, {"CG2D2O", "CG2DC2", "CG2O1", "NG2S2", "1.1000", "1", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D2O", "CG2DC2", "CG2O1", "NG2S2", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D2O", "CG2DC2", "CG2O1", "OG2D1", "0.3000", "1", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2D2O", "CG2DC2", "CG2O1", "OG2D1", "1.9500", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "0.7000", "1", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "0.1000", "3", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "NG2S1", "0.1500", "4", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "0.7000", "1", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "1.2000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "0.1000", "3", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O1", "OG2D1", "0.2000", "4", "0.00", "RETINOL CROT"}, {"CG321", "CG2DC2", "CG2O1", "NG2S2", "0.5000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "NG2S2", "0.3500", "3", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "NG2S2", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "OG2D1", "1.0000", "2", "180.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "OG2D1", "1.0000", "3", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"CG321", "CG2DC2", "CG2O1", "OG2D1", "0.4000", "6", "0.00", "NICH; Kenno: reverted to nadh, jjp1,adm jr. 4/95"}, {"HGA4", "CG2DC2", "CG2O1", "NG2S1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"HGA4", "CG2DC2", "CG2O1", "OG2D1", "0.3000", "3", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2DC2", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC3", "CG2DC2", "CG2O3", "OG2D2", "1.3000", "2", "180.00", "RETINOL PRAC"}, {"HGA4", "CG2DC2", "CG2O3", "OG2D2", "0.0000", "2", "180.00", "RETINOL PRAC"}, {"CG2DC2", "CG2DC2", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC2", "CG2DC2", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O4", "OG2D1", "1.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O4", "HGR52", "3.2000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC2", "CG2O4", "OG2D1", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"HGA4", "CG2DC2", "CG2O4", "HGR52", "0.0000", "2", "180.00", "RETINOL PRAL unmodified"}, {"CG2DC3", "CG2DC2", "CG2O5", "CG331", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"CG2DC3", "CG2DC2", "CG2O5", "OG2D3", "1.4000", "2", "180.00", "BEON, butenone, kevo"}, {"HGA4", "CG2DC2", "CG2O5", "CG331", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"HGA4", "CG2DC2", "CG2O5", "OG2D3", "0.0000", "2", "180.00", "BEON, butenone, from PRAL, acrolein; mcs"}, {"CG2DC3", "CG2DC2", "CG2R61", "CG2R61", "0.7500", "2", "180.00", "STYR, styrene, xxwy and oashi"}, {"CG2DC3", "CG2DC2", "CG2R61", "CG2R61", "0.1900", "4", "0.00", "STYR, styrene, xxwy and oashi"}, {"NG2D1", "CG2DC2", "CG2R61", "CG2R61", "1.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"HGA4", "CG2DC2", "CG2R61", "CG2R61", "0.6000", "2", "180.00", "HDZ1b, hydrazone model cmpd 1b, kevo"}, {"CG2DC1", "CG2DC2", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2DC1", "CG2DC2", "CG301", "CG331", "0.3000", "3", "0.00", "RETINOL MECH"}, {"CG2DC2", "CG2DC2", "CG301", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG301", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG301", "CG331", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG301", "CG331", "0.4000", "3", "0.00", "RETINOL TMCH"}, {"CG2D2O", "CG2DC2", "CG321", "CG2D1", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2D2O", "CG2DC2", "CG321", "HGA2", "0.0000", "3", "180.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2DC2", "CG2DC2", "CG321", "CG321", "0.5000", "2", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG321", "CG321", "0.3000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG2DC2", "CG321", "OG311", "1.9000", "1", "180.00", "RETINOL PROL"}, {"CG2DC2", "CG2DC2", "CG321", "OG311", "0.4000", "2", "180.00", "RETINOL PROL"}, {"CG2DC2", "CG2DC2", "CG321", "OG311", "0.6000", "3", "180.00", "RETINOL PROL"}, {"CG2DC2", "CG2DC2", "CG321", "OG3R60", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2DC2", "CG2DC2", "CG321", "HGA2", "0.0300", "3", "0.00", "RETINOL PROL"}, {"CG2O1", "CG2DC2", "CG321", "CG2D1", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG2O1", "CG2DC2", "CG321", "HGA2", "0.0000", "3", "0.00", "NICH; Kenno: nad/ppi, jjp1/adm jr. 7/95 says 1.0 3 180 but that's unlikely ==> re-optimize"}, {"CG331", "CG2DC2", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG2DC2", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"HGA4", "CG2DC2", "CG321", "OG311", "0.2000", "3", "0.00", "RETINOL PROL"}, {"HGA4", "CG2DC2", "CG321", "OG3R60", "0.2000", "3", "0.00", "PY02, 2h-pyran; re-initialized from PROL, 3-propenol; kevo"}, {"HGA4", "CG2DC2", "CG321", "HGA2", "0.2000", "3", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL DMB1, 2-methyl-1,3-butadiene"}, {"CG2DC2", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "180.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0 --> 180 to fix minimum @@@@@"}, {"CG2DC3", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP2, 2-methyl-1,3-pentadiene"}, {"CG321", "CG2DC2", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL MECH"}, {"CG331", "CG2DC2", "CG331", "HGA3", "0.3000", "3", "0.00", "RETINOL DMP1, 4-methyl-1,3-pentadiene"}, {"HGA4", "CG2DC2", "CG331", "HGA3", "0.0000", "3", "0.00", "RETINOL BTE2, 2-butene @@@@@ Kenno: 0.3 --> 0.0 to fix planarity around CG2DCx @@@@@"}, {"CG2R61", "CG2DC2", "NG2D1", "NG2S1", "12.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"HGA4", "CG2DC2", "NG2D1", "NG2S1", "4.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "CG2DC2", "NG2P1", "CG334", "7.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"CG2DC1", "CG2DC2", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH3, Schiff's base, protonated"}, {"HGR52", "CG2DC2", "NG2P1", "CG334", "8.5000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGR52", "CG2DC2", "NG2P1", "HGP2", "5.0000", "2", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"NG311", "CG2N1", "NG2D1", "HGP1", "5.2000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG321", "CG2N1", "NG2D1", "CG331", "6.5000", "2", "180.00", "MGU1, methylguanidine"}, {"NG321", "CG2N1", "NG2D1", "HGP1", "5.2000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG2P1", "CG2N1", "NG2P1", "CG324", "2.2500", "2", "180.00", "PROT 9.0->2.25 GUANIDINIUM (KK)"}, {"NG2P1", "CG2N1", "NG2P1", "CG334", "2.2500", "2", "180.00", "PROT 9.0->2.25 GUANIDINIUM (KK)"}, {"NG2P1", "CG2N1", "NG2P1", "HGP2", "2.2500", "2", "180.00", "PROT 9.0->2.25 GUANIDINIUM (KK)"}, {"NG2D1", "CG2N1", "NG311", "CG331", "0.5000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG2D1", "CG2N1", "NG311", "HGPAM1", "2.8000", "2", "180.00", "MGU2, methylguanidine2 kevo: 3 --> 2 (counteracting forces). May benefit optimization."}, {"NG321", "CG2N1", "NG311", "CG331", "0.5000", "2", "180.00", "MGU2, methylguanidine2"}, {"NG321", "CG2N1", "NG311", "HGPAM1", "2.8000", "2", "180.00", "MGU2, methylguanidine2 kevo: 3 --> 2 (counteracting forces). May benefit optimization."}, {"NG2D1", "CG2N1", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MGU1, methylguanidine; MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG2D1", "CG2N1", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MGU1, methylguanidine; MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG311", "CG2N1", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG311", "CG2N1", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MGU2, methylguanidine2 kevo: new. Needs to be further optimized."}, {"NG321", "CG2N1", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MGU1, methylguanidine kevo: new. Needs to be further optimized."}, {"NG321", "CG2N1", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MGU1, methylguanidine kevo: new. Needs to be further optimized."}, {"NG2P1", "CG2N2", "CG2R61", "CG2R61", "0.8200", "2", "180.00", "BAMI, benzamidinium, sz (verified by pram)"}, {"NG2P1", "CG2N2", "CG2R61", "CG2R61", "0.2900", "4", "0.00", "BAMI, benzamidinium, sz (verified by pram)"}, {"NG2P1", "CG2N2", "CG2R61", "CG2R61", "0.0900", "6", "0.00", "BAMI, benzamidinium, sz (verified by pram)"}, {"NG2P1", "CG2N2", "CG331", "HGA3", "0.2500", "3", "0.00", "AMDN, amidinium amidinium, mp2 scan, pram"}, {"NG321", "CG2N2", "NG2D1", "CG321", "6.5000", "2", "180.00", "MT2A , from NG321 CG2N1 NG2D1 CG331, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "2.3600", "1", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "2.0800", "2", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "0.0600", "3", "0.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "1.0700", "4", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG2D1", "CG321", "0.2800", "6", "0.00", "MT2A, fylin"}, {"CG2R61", "CG2N2", "NG2P1", "HGP2", "2.0000", "2", "180.00", "BAMI, benzamidinium, mp2 scan, pram"}, {"CG331", "CG2N2", "NG2P1", "HGP2", "3.5000", "2", "180.00", "AMDN, amidinium, mp2 scan, pram"}, {"NG2P1", "CG2N2", "NG2P1", "HGP2", "3.5000", "2", "180.00", "AMDN, amidinium, mp2 scan, pram"}, {"NG2D1", "CG2N2", "NG321", "HGPAM2", "0.2000", "2", "180.00", "MT2A , from NG2D1 CG2N1 NG321 HGPAM2, fylin"}, {"NG2D1", "CG2N2", "NG321", "HGPAM2", "0.1500", "6", "0.00", "MT2A , from NG2D1 CG2N1 NG321 HGPAM2, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.0200", "1", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "2.8700", "2", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.1200", "3", "0.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.2000", "4", "180.00", "MT2A, fylin"}, {"SG311", "CG2N2", "NG321", "HGPAM2", "0.2000", "6", "180.00", "MT2A, fylin"}, {"NG2D1", "CG2N2", "SG311", "CG321", "1.1200", "2", "180.00", "DH3T, fylin"}, {"NG2D1", "CG2N2", "SG311", "CG331", "1.1200", "2", "180.00", "MT2A, fylin"}, {"NG321", "CG2N2", "SG311", "CG321", "0.6400", "1", "180.00", "DH3T, fylin"}, {"NG321", "CG2N2", "SG311", "CG321", "1.1200", "2", "180.00", "DH3T, fylin"}, {"NG321", "CG2N2", "SG311", "CG321", "0.3300", "4", "0.00", "DH3T, fylin"}, {"NG321", "CG2N2", "SG311", "CG331", "0.6400", "1", "180.00", "MT2A, fylin"}, {"NG321", "CG2N2", "SG311", "CG331", "1.1200", "2", "180.00", "MT2A, fylin"}, {"NG321", "CG2N2", "SG311", "CG331", "0.3300", "4", "0.00", "MT2A, fylin"}, {"NG2S1", "CG2O1", "CG2R61", "CG2R61", "1.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"NG2S1", "CG2O1", "CG2R61", "CG2RC0", "1.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"NG2S2", "CG2O1", "CG2R61", "CG2R61", "1.0000", "2", "180.00", "3NAP, nicotinamide (PYRIDINE pyr-CONH2), yin"}, {"OG2D1", "CG2O1", "CG2R61", "CG2R61", "1.0000", "2", "180.00", "3NAP, nicotinamide (PYRIDINE pyr-CONH2), yin"}, {"OG2D1", "CG2O1", "CG2R61", "CG2RC0", "1.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"NG2S2", "CG2O1", "CG2R62", "CG2R62", "0.3500", "1", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2S2", "CG2O1", "CG2R62", "CG2R62", "0.6200", "2", "0.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"OG2D1", "CG2O1", "CG2R62", "CG2R62", "2.3800", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2S0", "CG2O1", "CG311", "CG311", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "CG321", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "CG323", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "CG331", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "NG2S1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG311", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "CG323", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG311", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S1", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG323", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG311", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S2", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG311", "CG311", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "CG321", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "CG323", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "CG331", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG311", "NG2S1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S0", "CG2O1", "CG314", "CG311", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "CG321", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "CG323", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "CG331", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "NG3P3", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG314", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "CG323", "0.0000", "1", "0.00", "NOT OPTIMIZED! PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S1", "CG2O1", "CG314", "NG3P3", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S1", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG311", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG321", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG323", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "CG331", "0.0000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, 4/10/93 (LK)"}, {"NG2S2", "CG2O1", "CG314", "NG3P3", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S2", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG314", "CG311", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "CG321", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "CG323", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "CG331", "1.4000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"OG2D1", "CG2O1", "CG314", "NG3P3", "0.0000", "1", "0.00", "PROT Backbone parameter set made complete RLD 8/8/90"}, {"OG2D1", "CG2O1", "CG314", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S0", "CG2O1", "CG321", "CG331", "1.5000", "1", "0.00", "DMPR, dimethylpropanamide, mnoon"}, {"NG2S0", "CG2O1", "CG321", "NG2S1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG321", "HGA2", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG321", "CG321", "0.0000", "1", "0.00", "PROT from NG2S1 CG2O1 CG311 CT2, for lactams, adm jr."}, {"NG2S1", "CG2O1", "CG321", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S1", "CG2O1", "CG321", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"NG2S1", "CG2O1", "CG321", "HGA2", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"NG2S2", "CG2O1", "CG321", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "CG314", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"NG2S2", "CG2O1", "CG321", "NG2S1", "0.6000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93"}, {"NG2S2", "CG2O1", "CG321", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"OG2D1", "CG2O1", "CG321", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "CG314", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D1", "CG2O1", "CG321", "NG2S1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O1", "CG321", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"NG2S0", "CG2O1", "CG324", "NG3P3", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG324", "HGA2", "0.0000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG324", "NG3P3", "0.4000", "1", "0.00", "PROT adm jr. 3/24/92, for PRES GLYP"}, {"NG2S1", "CG2O1", "CG324", "HGA2", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"NG2S2", "CG2O1", "CG324", "NG3P3", "0.4000", "1", "0.00", "PROT adm jr. 3/24/92, for PRES GLYP"}, {"NG2S2", "CG2O1", "CG324", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"OG2D1", "CG2O1", "CG324", "NG3P3", "0.0000", "1", "0.00", "PROT Backbone parameter set made complete RLD 8/8/90"}, {"OG2D1", "CG2O1", "CG324", "HGA2", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"NG2S0", "CG2O1", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"NG2S2", "CG2O1", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"OG2D1", "CG2O1", "CG331", "HGA3", "0.0000", "3", "180.00", "PROT adm jr., 8/13/90 geometry and vibrations"}, {"NG2S0", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "NG2S0", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "NG2S0", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "NG2S0", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "CG3C52", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "NG2S0", "-0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "HGA1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C51", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "NG3P2", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "NG3P2", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S1", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "NG3P2", "0.3000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S2", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "CG3C52", "0.4000", "1", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "CG3C52", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "HGA1", "0.4000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "CG3C53", "HGA1", "0.6000", "2", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG314", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMPR, dimethylpropanamide; from DMF, Dimethylformamide; kevo"}, {"CG321", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG321", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG324", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMF, Dimethylformamide, xxwy"}, {"CG331", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG331", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMF, Dimethylformamide, xxwy"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C51", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C51", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C52", "2.7500", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S0", "CG3C52", "0.3000", "4", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGR52", "CG2O1", "NG2S0", "CG331", "2.6000", "2", "180.00", "DMF, Dimethylformamide, xxwy"}, {"CG2DC1", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "RETINOL FRET"}, {"CG2DC1", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL FRET"}, {"CG2DC1", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "RETINOL CROT"}, {"CG2DC1", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2DC1", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "RETINOL FRET"}, {"CG2DC2", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL FRET"}, {"CG2DC2", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2DC2", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "RETINOL CROT"}, {"CG2R61", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "3CPD, Gamma-3-Amide Pyridine Lysine CDCA Amide; from HDZ2, hydrazone model cmpd 2; cacha"}, {"CG2R61", "CG2O1", "NG2S1", "CG321", "4.0000", "2", "180.00", "3CPD, Gamma-3-Amide Pyridine Lysine CDCA Amide; from HDZ2, hydrazone model cmpd 2; cacha"}, {"CG2R61", "CG2O1", "NG2S1", "NG2D1", "1.6000", "1", "0.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2O1", "NG2S1", "NG2D1", "4.0000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG311", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG311", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG311", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG314", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "3APP, Alpha-Benzyl Gamma-3-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "3APP, Alpha-Benzyl Gamma-3-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG2R64", "1.6000", "1", "0.00", "2APP, Alpha-Benzyl Gamma-2-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG2R64", "2.5000", "2", "180.00", "2APP, Alpha-Benzyl Gamma-2-Amino Pyridine GA CDCA Amide, cacha"}, {"CG321", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG321", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG321", "CG2O1", "NG2S1", "NG2D1", "0.9000", "1", "0.00", "PMHA, hydrazone-containing model compound:, sz"}, {"CG321", "CG2O1", "NG2S1", "NG2D1", "3.5000", "2", "180.00", "PMHA, hydrazone-containing model compound: HDZ1, hydrazone model cmpd, sz"}, {"CG321", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG324", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG324", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT from CG321 CG2O1 NG2S1 CT2, adm jr. 10/21/96"}, {"CG324", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG2R61", "1.6000", "1", "0.00", "RETINOL PACP 1-fold added by kevo"}, {"CG331", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL PACP"}, {"CG331", "CG2O1", "NG2S1", "CG2R64", "1.6000", "1", "0.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG331", "CG2O1", "NG2S1", "CG2R64", "2.5000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"CG331", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT for acetylated GLY N-terminus, adm jr."}, {"CG331", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT for acetylated GLY N-terminus, adm jr."}, {"CG331", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT NMA cis/trans energy difference. (LK)"}, {"CG331", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG331", "CG2O1", "NG2S1", "NG2D1", "0.9000", "1", "0.00", "HDZ1, hydrazone model cmpd"}, {"CG331", "CG2O1", "NG2S1", "NG2D1", "3.5000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG331", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG3C51", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG311", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG321", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG331", "1.6000", "1", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S1", "CG2R61", "2.5000", "2", "180.00", "RETINOL PACP"}, {"OG2D1", "CG2O1", "NG2S1", "CG2R64", "2.5000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"OG2D1", "CG2O1", "NG2S1", "CG311", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"OG2D1", "CG2O1", "NG2S1", "CG321", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"OG2D1", "CG2O1", "NG2S1", "CG331", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"OG2D1", "CG2O1", "NG2S1", "NG2D1", "2.5000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"OG2D1", "CG2O1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG2DC1", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2DC2", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "NICH; Kenno: reverted to nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2O1", "NG2S2", "HGP1", "1.0000", "2", "180.00", "3NAP, nicotamide (PYRIDINE pyr-CONH2), yin"}, {"CG2R62", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG311", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG314", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT Gives appropriate NMA cis/trans barrier. (LK)"}, {"CG321", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"CG324", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"CG331", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"CG3C51", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG2O1", "NG2S2", "HGP1", "2.5000", "2", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update"}, {"HGR52", "CG2O1", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT, formamide"}, {"OG2D1", "CG2O2", "CG2R61", "CG2R61", "1.0250", "2", "180.00", "ZOIC, benzoic acid, MBOA, methylbenzoate, jal"}, {"OG302", "CG2O2", "CG2R61", "CG2R61", "0.8500", "2", "180.00", "MBOA, methylbenzoate, jal"}, {"OG311", "CG2O2", "CG2R61", "CG2R61", "1.0250", "2", "180.00", "ZOIC, benzoic acid, jal"}, {"OG2D1", "CG2O2", "CG311", "CG321", "0.0500", "6", "180.00", "AMGA, Alpha Methyl Tert Butyl Glu Acid, cacha, 05/06 ! corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "CG311", "NG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"OG2D1", "CG2O2", "CG311", "NG2S1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"OG2D1", "CG2O2", "CG311", "HGA1", "0.0000", "3", "0.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha, 03/06"}, {"OG302", "CG2O2", "CG311", "CG321", "0.0500", "6", "180.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"OG302", "CG2O2", "CG311", "NG2R53", "0.0000", "1", "0.00", "B5HE, B5H6 ethyl ester, xxwy"}, {"OG302", "CG2O2", "CG311", "NG2S1", "0.0000", "1", "0.00", "AMGA, Alpha Methyl Glut Acid CDCA Amide, cacha, 05/06"}, {"OG302", "CG2O2", "CG311", "HGA1", "0.0000", "1", "0.00", "AMGA, Alpha Methyl Glut Acid CDCA Amide, cacha, 05/06"}, {"OG311", "CG2O2", "CG311", "CG321", "0.0500", "6", "180.00", "drug design project, xxwy"}, {"OG311", "CG2O2", "CG311", "NG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"OG311", "CG2O2", "CG311", "HGA1", "0.0500", "6", "180.00", "drug design project, xxwy"}, {"OG2D1", "CG2O2", "CG321", "CG311", "0.0000", "6", "180.00", "576P, standard param [0.05 also acceptable]"}, {"OG2D1", "CG2O2", "CG321", "CG321", "0.0500", "6", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "CG321", "CG331", "0.0500", "6", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "CG321", "NG321", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"OG2D1", "CG2O2", "CG321", "HGA2", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate; LIPID acetic Acid"}, {"OG302", "CG2O2", "CG321", "CG321", "0.5300", "2", "180.00", "LIPID methyl propionate, 12/92"}, {"OG302", "CG2O2", "CG321", "CG331", "-0.1500", "1", "180.00", "LIPID methyl propionate, 12/92"}, {"OG302", "CG2O2", "CG321", "HGA2", "0.0000", "3", "0.00", "LIPID acetic Acid"}, {"OG311", "CG2O2", "CG321", "CG311", "0.0000", "6", "180.00", "576P, standard param [0.05 also acceptable]"}, {"OG311", "CG2O2", "CG321", "NG321", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"OG311", "CG2O2", "CG321", "HGA2", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"OG2D1", "CG2O2", "CG331", "HGA3", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate; LIPID acetic Acid"}, {"OG302", "CG2O2", "CG331", "HGA3", "0.0000", "3", "0.00", "LIPID acetic Acid"}, {"OG311", "CG2O2", "CG331", "HGA3", "0.0000", "6", "180.00", "PROT adm jr. 3/19/92, from lipid methyl acetate"}, {"CG2R61", "CG2O2", "OG302", "CG331", "1.2500", "1", "180.00", "MBOA, methylbenzoate, jal"}, {"CG2R61", "CG2O2", "OG302", "CG331", "1.5000", "2", "180.00", "MBOA, methylbenzoate, jal"}, {"CG2R61", "CG2O2", "OG302", "CG331", "0.0500", "6", "180.00", "MBOA, methylbenzoate, jal"}, {"CG311", "CG2O2", "OG302", "CG301", "2.0500", "2", "180.00", "ATGM, GAMMA METHYL ALPHA TERT BUTYL GLU ACID CDCA AMIDE, cacha"}, {"CG311", "CG2O2", "OG302", "CG321", "2.0500", "2", "180.00", "ABGA, ALPHA BENZYL GLU ACID CDCA AMIDE, cacha"}, {"CG311", "CG2O2", "OG302", "CG331", "2.0500", "2", "180.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"CG321", "CG2O2", "OG302", "CG301", "2.0500", "2", "180.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG321", "CG2O2", "OG302", "CG311", "2.0500", "2", "180.00", "LIPID methyl acetate"}, {"CG321", "CG2O2", "OG302", "CG321", "2.0500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"CG321", "CG2O2", "OG302", "CG331", "2.0500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"CG331", "CG2O2", "OG302", "CG311", "2.0500", "2", "180.00", "LIPID methyl acetate"}, {"CG331", "CG2O2", "OG302", "CG321", "2.0500", "2", "180.00", "LIPID methyl acetate"}, {"CG331", "CG2O2", "OG302", "CG331", "2.0500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "OG302", "CG301", "0.9650", "1", "180.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide !cacha,corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "OG302", "CG301", "3.8500", "2", "180.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide !cacha,corrected kevo, 01/08"}, {"OG2D1", "CG2O2", "OG302", "CG311", "0.9650", "1", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG311", "3.8500", "2", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG321", "0.9650", "1", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG321", "3.8500", "2", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG331", "0.9650", "1", "180.00", "LIPID methyl acetate"}, {"OG2D1", "CG2O2", "OG302", "CG331", "3.8500", "2", "180.00", "LIPID methyl acetate ! corrected kevo, 01/08"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "0.9750", "1", "180.00", "ZOIC, benzoic acid, jal"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "2.7000", "2", "180.00", "ZOIC, benzoic acid, jal"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "0.0500", "3", "180.00", "ZOIC, benzoic acid, jal"}, {"CG2R61", "CG2O2", "OG311", "HGP1", "0.2500", "6", "180.00", "ZOIC, benzoic acid, jal"}, {"CG311", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "drug design project, xxwy"}, {"CG321", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "PROT adm jr, 10/17/90, acetic Acid C-Oh rotation barrier"}, {"CG331", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "PROT adm jr, 10/17/90, acetic Acid C-Oh rotation barrier"}, {"OG2D1", "CG2O2", "OG311", "HGP1", "2.0500", "2", "180.00", "PROT adm jr, 10/17/90, acetic Acid C-Oh rotation barrier"}, {"HGR52", "CG2O2", "OG311", "HGP1", "3.4500", "2", "180.00", "FORH, formic acid, xxwy"}, {"OG2D2", "CG2O3", "CG2O5", "CG2R61", "0.3000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"OG2D2", "CG2O3", "CG2O5", "OG2D3", "0.3000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"OG2D2", "CG2O3", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"OG2D2", "CG2O3", "CG301", "CG331", "0.0500", "6", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG2D2", "CG2O3", "CG301", "OG301", "0.5500", "2", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG2D2", "CG2O3", "CG301", "OG311", "1.1100", "2", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG2D2", "CG2O3", "CG311", "CG2R61", "0.0000", "1", "0.00", "FBIF, Fatty acid Binding protein Inhibitor F, cacha. Was 3.1 2 180 ==> reset by kevo. re-optimize!!!"}, {"OG2D2", "CG2O3", "CG311", "CG311", "0.0500", "6", "180.00", "PROT C-terminal AA - standard parameter"}, {"OG2D2", "CG2O3", "CG311", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG311", "CG331", "0.0500", "6", "180.00", "deleteme DELETEME (we want to use wildcarting)"}, {"OG2D2", "CG2O3", "CG311", "NG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"OG2D2", "CG2O3", "CG311", "NG2S1", "0.0000", "6", "180.00", "GA, Glut Acid CDCA Amide, cacha"}, {"OG2D2", "CG2O3", "CG311", "OG301", "0.5500", "2", "180.00", "og amop mp2/ccpvtz"}, {"OG2D2", "CG2O3", "CG311", "HGA1", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG314", "NG3P3", "3.2000", "2", "180.00", "PROT adm jr. 4/17/94, zwitterionic glycine"}, {"OG2D2", "CG2O3", "CG314", "HGA1", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG311", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG314", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG321", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "CG331", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG321", "NG2S1", "0.0500", "6", "180.00", "GCA, Glycocholic Acid, cacha, 03/06"}, {"OG2D2", "CG2O3", "CG321", "HGA2", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG324", "NG3P3", "3.2000", "2", "180.00", "PROT adm jr. 4/17/94, zwitterionic glycine"}, {"OG2D2", "CG2O3", "CG324", "HGA2", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG331", "HGA3", "0.0500", "6", "180.00", "PROT For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"OG2D2", "CG2O3", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C51", "NG2S0", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C51", "HGA1", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C53", "CG3C52", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C53", "NG3P2", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D2", "CG2O3", "CG3C53", "HGA1", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"OG2D1", "CG2O4", "CG2R61", "CG2R61", "1.0800", "2", "180.00", "ALDEHYDE benzaldehyde unmodified"}, {"HGR52", "CG2O4", "CG2R61", "CG2R61", "1.0800", "2", "180.00", "ALDEHYDE benzaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "1.0500", "1", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "0.4000", "2", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "0.6000", "3", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CG331", "0.1000", "4", "180.00", "ALDEHYDE propionaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CLGA1", "0.1000", "1", "0.00", "ALDEHYDE chloracetaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CLGA1", "1.0000", "2", "180.00", "ALDEHYDE chloracetaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "CLGA1", "0.5500", "3", "180.00", "ALDEHYDE chloracetaldehyde unmodified"}, {"OG2D1", "CG2O4", "CG321", "HGA2", "0.0000", "3", "180.00", "PALD, Propionaldehyde, PROT adm jr. 3/19/92, from lipid methyl acetate (unmodified because this may not be analogous to AALD)"}, {"HGR52", "CG2O4", "CG321", "CG331", "0.0000", "3", "180.00", "PALD, Propionaldehyde, PROT adm jr. 3/19/92, from lipid methyl acetate unmodified"}, {"HGR52", "CG2O4", "CG321", "CLGA1", "0.0000", "3", "180.00", "CALD, Chloroacetaldehyde, PROT adm jr. 3/19/92, from lipid methyl acetate unmodified"}, {"HGR52", "CG2O4", "CG321", "HGA2", "0.0000", "3", "180.00", "acetaldehyde, adm 11/08"}, {"OG2D1", "CG2O4", "CG331", "HGA3", "0.2000", "3", "180.00", "AALD, acetaldehyde, adm 11/08"}, {"HGR52", "CG2O4", "CG331", "HGA3", "0.0000", "3", "180.00", "acetaldehyde, adm 11/08"}, {"CG2O3", "CG2O5", "CG2R61", "CG2R61", "1.5850", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml; verified by mcs"}, {"CG311", "CG2O5", "CG2R61", "CG2R61", "1.5850", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG321", "CG2O5", "CG2R61", "CG2R61", "0.2700", "2", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG331", "CG2O5", "CG2R61", "CG2R61", "0.2500", "2", "180.00", "PHMK, phenyl methyl ketone, mcs"}, {"OG2D3", "CG2O5", "CG2R61", "CG2R61", "1.5850", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml; verified by mcs"}, {"CG2R61", "CG2O5", "CG311", "OG311", "0.0000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2R61", "CG2O5", "CG311", "OG312", "0.0000", "2", "0.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2R61", "CG2O5", "CG311", "HGA1", "0.0000", "1", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"OG2D3", "CG2O5", "CG311", "OG311", "0.0000", "2", "0.00", "reverted to BIPHENYL ANALOGS unmodified, peml"}, {"OG2D3", "CG2O5", "CG311", "OG312", "0.0000", "2", "180.00", "reverted to BIPHENYL ANALOGS unmodified, peml"}, {"OG2D3", "CG2O5", "CG311", "HGA1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK) unmodified"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.4000", "1", "0.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.1700", "2", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.1300", "3", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "CG331", "0.1000", "6", "180.00", "PHEK, phenyl ethyl ketone, mcs"}, {"CG2R61", "CG2O5", "CG321", "HGA2", "0.1000", "3", "0.00", "PHEK, phenyl ethyl ketone; from 3ACP, 3-acetylpyridine; mcs"}, {"CG321", "CG2O5", "CG321", "CG321", "0.7500", "1", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "CG321", "0.1800", "2", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "CG321", "0.0650", "3", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "CG321", "0.0300", "6", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"CG321", "CG2O5", "CG321", "HGA2", "0.1000", "3", "0.00", "CHON, cyclohexanone; from ACO, acetone; yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.7500", "1", "0.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.1800", "2", "180.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.0650", "3", "0.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "CG331", "0.0300", "6", "0.00", "BTON, butanone, yapol"}, {"CG331", "CG2O5", "CG321", "HGA2", "0.1000", "3", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.7500", "1", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.1800", "2", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.0650", "3", "180.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG321", "0.0300", "6", "0.00", "CHON, cyclohexanone; from BTON, butanone; yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.7500", "1", "180.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.1800", "2", "180.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.0650", "3", "180.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "CG331", "0.0300", "6", "0.00", "BTON, butanone, yapol"}, {"OG2D3", "CG2O5", "CG321", "HGA2", "0.0000", "3", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2DC1", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "BEON, butenone; from ACO, acetone; mcs"}, {"CG2DC2", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "BEON, butenone; from ACO, acetone; mcs"}, {"CG2R61", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "3ACP, 3-acetylpyridine; reset by kevo to ketone, RIMP2/cc-pVTZ//MP2/6-31G(d), adm 11/08"}, {"CG321", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"CG331", "CG2O5", "CG331", "HGA3", "0.1000", "3", "0.00", "ketone, RIMP2/cc-pVTZ//MP2/6-31G(d), adm 11/08"}, {"OG2D3", "CG2O5", "CG331", "HGA3", "0.0000", "3", "0.00", "3ACP, ACO; ketone, RIMP2/cc-pVTZ//MP2/6-31G(d), adm 11/08"}, {"NG2S1", "CG2O6", "NG2S1", "CG331", "1.6000", "1", "0.00", "S132R, from NMTU, pram"}, {"NG2S1", "CG2O6", "NG2S1", "CG331", "2.5000", "2", "180.00", "S132R, from NMTU, pram"}, {"OG2D1", "CG2O6", "NG2S1", "CG321", "4.0000", "2", "180.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "CG321", "0.9500", "4", "0.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "CG331", "4.0000", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "CG331", "0.9500", "4", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "NG2S1", "HGP1", "0.0000", "2", "180.00", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"OG302", "CG2O6", "NG2S1", "CG321", "4.0000", "2", "180.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "CG321", "0.9500", "4", "0.00", "DECB, diethyl carbamate, from DMCB, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "CG331", "4.0000", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "CG331", "0.9500", "4", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG302", "CG2O6", "NG2S1", "HGP1", "0.0000", "2", "180.00", "DMCB and DECB, dimethyl and diehtyl carbamate, cacha and kevo"}, {"NG2S2", "CG2O6", "NG2S2", "HGP1", "1.5000", "2", "180.00", "UREA, Urea"}, {"OG2D1", "CG2O6", "NG2S2", "HGP1", "1.4000", "2", "180.00", "PROT adm jr. 4/10/91, acetamide update NOW UREA ==> re-optimize???"}, {"NG2S1", "CG2O6", "OG302", "CG321", "0.1500", "1", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG321", "2.2000", "2", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG321", "0.1000", "3", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG331", "0.2500", "1", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG331", "1.8500", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"NG2S1", "CG2O6", "OG302", "CG331", "0.1200", "3", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG321", "0.1500", "1", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG321", "2.2000", "2", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG321", "0.1000", "3", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG331", "0.2500", "1", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG331", "1.8500", "2", "180.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG2D1", "CG2O6", "OG302", "CG331", "0.1200", "3", "0.00", "DMCB, dimethyl carbamate, cacha and xxwy"}, {"OG302", "CG2O6", "OG302", "CG321", "0.1000", "1", "180.00", "DECA, diethyl carbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "CG321", "3.1000", "2", "180.00", "DECA, diethyl carbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "CG331", "0.5500", "1", "180.00", "DMCA, dimethyl carbonate, xxwy"}, {"OG302", "CG2O6", "OG302", "CG331", "2.9500", "2", "180.00", "DMCA, dimethyl carbonate, xxwy"}, {"OG2D2", "CG2O6", "OG311", "HGP1", "2.0000", "2", "180.00", "CO31, bicarbonate, MP2/6-31G* dihedral scan, xxwy"}, {"SG2D1", "CG2O6", "SG311", "CG331", "0.1000", "1", "180.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG2D1", "CG2O6", "SG311", "CG331", "2.1300", "2", "180.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG311", "CG2O6", "SG311", "CG331", "0.1000", "1", "0.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"SG311", "CG2O6", "SG311", "CG331", "2.1300", "2", "180.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"OG2D5", "CG2O7", "NG2D1", "CG331", "0.4000", "2", "180.00", "MICY, methyl isocyanate, xxwy"}, {"CG2R51", "CG2R51", "CG2R51", "CG2R51", "15.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R51", "CG2RC0", "2.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "CG2RC7", "9.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "CG3C52", "4.0000", "2", "180.00", "CPDE, cyclopentadiene, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "NG2R51", "4.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R51", "NG2R57", "4.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 NG2R51; lf"}, {"CG2R51", "CG2R51", "CG2R51", "NG2RC0", "16.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "CG2R51", "OG2R50", "8.5000", "2", "180.00", "FURA, furan"}, {"CG2R51", "CG2R51", "CG2R51", "SG2R50", "8.5000", "2", "180.00", "THIP, thiophene"}, {"CG2R51", "CG2R51", "CG2R51", "HGR51", "1.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "CG2R51", "HGR52", "1.5000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R52", "CG2R51", "CG2R51", "CG3C52", "6.6000", "2", "180.00", "2HPR, 2H-pyrrole !1,(1a), kevo"}, {"CG2R52", "CG2R51", "CG2R51", "CG3C54", "7.5000", "2", "180.00", "2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R52", "CG2R51", "CG2R51", "NG2R51", "12.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R52", "CG2R51", "CG2R51", "OG2R50", "9.5000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R52", "CG2R51", "CG2R51", "SG2R50", "8.5000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R52", "CG2R51", "CG2R51", "HGR51", "2.6000", "2", "180.00", "2HPR, 2H-pyrrole; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R52", "CG2R51", "CG2R51", "HGR52", "1.5000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R53", "CG2R51", "CG2R51", "CG3C52", "6.6000", "2", "180.00", "B2FO, from CG2R52 CG2R51 CG2R51 CG3C52, ctsai"}, {"CG2R53", "CG2R51", "CG2R51", "HGR51", "2.6000", "2", "180.00", "B2FO, from CG2R52 CG2R51 CG2R51 HGR51, ctsai"}, {"CG2R57", "CG2R51", "CG2R51", "NG2R51", "4.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 NG2R51; lf"}, {"CG2R57", "CG2R51", "CG2R51", "HGR52", "1.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 HGR52; lf"}, {"CG2RC0", "CG2R51", "CG2R51", "CG3C52", "6.9000", "2", "180.00", "INDE, indene, kevo"}, {"CG2RC0", "CG2R51", "CG2R51", "NG2R51", "4.0000", "2", "180.00", "PROT JWK 05/14/91 fit to indole"}, {"CG2RC0", "CG2R51", "CG2R51", "OG2R50", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "CG2R51", "CG2R51", "SG2R50", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2RC0", "CG2R51", "CG2R51", "HGR51", "2.8000", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG2R51", "HGR52", "2.8000", "2", "180.00", "INDO/TRP"}, {"CG2RC7", "CG2R51", "CG2R51", "HGR51", "2.7000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG321", "CG2R51", "CG2R51", "NG2R50", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG321", "CG2R51", "CG2R51", "NG2R51", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG321", "CG2R51", "CG2R51", "NG2R52", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG321", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG331", "CG2R51", "CG2R51", "NG2R50", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG331", "CG2R51", "CG2R51", "NG2R51", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89"}, {"CG331", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG3C52", "CG2R51", "CG2R51", "CG3C52", "12.0000", "2", "180.00", "3PRL, 3-pyrroline, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "NG2R50", "7.5000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "NG3C51", "11.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "NG3P2", "10.5000", "2", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "OG3C51", "8.8900", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "HGR51", "2.9000", "2", "180.00", "2HPR, 2H-pyrrole, kevo"}, {"CG3C52", "CG2R51", "CG2R51", "HGR52", "5.8000", "2", "180.00", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG3C54", "CG2R51", "CG2R51", "CG3C54", "11.5000", "2", "180.00", "3PRP, 3-pyrroline.H+, kevo"}, {"CG3C54", "CG2R51", "CG2R51", "HGR51", "4.2500", "2", "180.00", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG2R50", "CG2R51", "CG2R51", "NG2R51", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R50", "CG2R51", "CG2R51", "OG2R50", "14.0000", "2", "180.00", "OXAZ, oxazole"}, {"NG2R50", "CG2R51", "CG2R51", "SG2R50", "7.0000", "2", "180.00", "THAZ, thiazole"}, {"NG2R50", "CG2R51", "CG2R51", "HGR51", "2.7000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"NG2R50", "CG2R51", "CG2R51", "HGR52", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"NG2R51", "CG2R51", "CG2R51", "HGR51", "3.5000", "2", "180.00", "INDO/TRP"}, {"NG2R51", "CG2R51", "CG2R51", "HGR52", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"NG2R52", "CG2R51", "CG2R51", "NG2R52", "12.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"NG2R52", "CG2R51", "CG2R51", "HGR52", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"NG2R57", "CG2R51", "CG2R51", "HGR51", "3.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR51; lf"}, {"NG2RC0", "CG2R51", "CG2R51", "HGR51", "3.7000", "2", "180.00", "INDZ, indolizine, kevo"}, {"NG3C51", "CG2R51", "CG2R51", "HGR51", "3.5000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"NG3P2", "CG2R51", "CG2R51", "HGR51", "7.0000", "2", "180.00", "7.0 2PRP, 2-pyrroline.H+, kevo"}, {"OG2R50", "CG2R51", "CG2R51", "HGR51", "4.5000", "2", "180.00", "FURA, furan"}, {"OG2R50", "CG2R51", "CG2R51", "HGR52", "3.0000", "2", "180.00", "OXAZ, oxazole"}, {"OG3C51", "CG2R51", "CG2R51", "HGR51", "3.7000", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"SG2R50", "CG2R51", "CG2R51", "HGR51", "4.0000", "2", "180.00", "THIP, thiophene"}, {"SG2R50", "CG2R51", "CG2R51", "HGR52", "5.5000", "2", "180.00", "THAZ, thiazole"}, {"HGR51", "CG2R51", "CG2R51", "HGR51", "1.0000", "2", "180.00", "INDO/TRP"}, {"HGR51", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PYRL, pyrrole"}, {"HGR52", "CG2R51", "CG2R51", "HGR52", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90, his"}, {"CG2R51", "CG2R51", "CG2R52", "NG2R50", "8.5000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R51", "CG2R51", "CG2R52", "NG2R52", "4.1500", "2", "180.00", "4.1 2HPP, 2H-pyrrole.H+ 1, kevo"}, {"CG2R51", "CG2R51", "CG2R52", "HGR52", "3.8000", "2", "180.00", "PYRZ, pyrazole"}, {"HGR51", "CG2R51", "CG2R52", "NG2R50", "4.5000", "2", "180.00", "4.25 2HPR, 2H-pyrrole !wC4H !coupled with pyrz, pyrazole, kevo"}, {"HGR51", "CG2R51", "CG2R52", "NG2R52", "4.5000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGR51", "CG2R51", "CG2R52", "HGR52", "0.1000", "2", "180.00", "2HPR, 2H-pyrrole; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "CG2R51", "CG2R53", "OG2D1", "1.2000", "2", "180.00", "B2FO, from CG2RC0 CG25C1 CG2R53 OG2D1, ctsai"}, {"CG2R51", "CG2R51", "CG2R53", "OG3C51", "0.4100", "1", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"HGR51", "CG2R51", "CG2R53", "OG2D1", "4.5000", "2", "180.00", "B2FO, from OG2R50 CG2R51 CG2R51 HGR51, ctsai"}, {"HGR51", "CG2R51", "CG2R53", "OG3C51", "3.7000", "2", "180.00", "B2FO, from OG3C51 CG2R51 CG2R51 HGR51, ctsai"}, {"CG2R51", "CG2R51", "CG2R57", "CG2R51", "15.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 CG2R51; lf"}, {"CG2R51", "CG2R51", "CG2R57", "CG2R57", "2.1000", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R51", "CG2R57", "NG2R57", "1.9000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"NG2R51", "CG2R51", "CG2R57", "CG2R51", "4.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 NG2R51; lf"}, {"NG2R51", "CG2R51", "CG2R57", "CG2R57", "2.1000", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"NG2R51", "CG2R51", "CG2R57", "NG2R57", "1.9000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"HGR51", "CG2R51", "CG2R57", "CG2R51", "1.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 HGR51; lf"}, {"HGR51", "CG2R51", "CG2R57", "CG2R57", "3.5000", "2", "180.00", "33BPO, 3,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR51; lf"}, {"HGR51", "CG2R51", "CG2R57", "NG2R57", "3.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR51; lf"}, {"HGR52", "CG2R51", "CG2R57", "CG2R51", "1.5000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 CG2R51 HGR52; lf"}, {"HGR52", "CG2R51", "CG2R57", "CG2R57", "3.0000", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"HGR52", "CG2R51", "CG2R57", "NG2R57", "3.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from NG2R51 CG2R51 CG2R51 HGR52; lf"}, {"CG2R51", "CG2R51", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "PROT JWK 09/05/89"}, {"CG2R51", "CG2R51", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "PROT JWK 05/14/91 fit to indole"}, {"CG2R51", "CG2R51", "CG2RC0", "NG2RC0", "12.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG321", "CG2R51", "CG2RC0", "CG2R61", "2.5000", "2", "180.00", "INDO/TRP"}, {"CG321", "CG2R51", "CG2RC0", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG331", "CG2R51", "CG2RC0", "CG2R61", "2.5000", "2", "180.00", "INDO/TRP"}, {"CG331", "CG2R51", "CG2RC0", "CG2RC0", "2.5000", "2", "180.00", "INDO/TRP"}, {"NG2R51", "CG2R51", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "ISOI, isoindole, kevo"}, {"NG2R51", "CG2R51", "CG2RC0", "CG2RC0", "9.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"HGR51", "CG2R51", "CG2RC0", "CG2R61", "2.8000", "2", "180.00", "INDO/TRP"}, {"HGR51", "CG2R51", "CG2RC0", "CG2RC0", "2.6000", "2", "180.00", "INDO/TRP"}, {"HGR51", "CG2R51", "CG2RC0", "NG2RC0", "0.8000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR52", "CG2R51", "CG2RC0", "CG2R61", "0.2500", "2", "180.00", "ISOI, isoindole, kevo"}, {"HGR52", "CG2R51", "CG2RC0", "CG2RC0", "0.2500", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG2R51", "CG2R51", "CG2RC7", "CG2R71", "2.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG2RC7", "CG2RC7", "4.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR51", "CG2R51", "CG2RC7", "CG2R71", "2.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR51", "CG2R51", "CG2RC7", "CG2RC7", "2.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2R51", "CG321", "CG311", "0.2000", "1", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG311", "0.2700", "2", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG311", "0.0000", "3", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG314", "0.2000", "1", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG314", "0.2700", "2", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG314", "0.0000", "3", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG331", "0.2000", "1", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG331", "0.2700", "2", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "CG331", "0.0000", "3", "0.00", "PROT 4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CG2R51", "CG2R51", "CG321", "HGA2", "0.0000", "3", "0.00", "PROT 4-methylimidazole 4-21G//rot bar. adm jr., 9/4/89"}, {"CG2RC0", "CG2R51", "CG321", "CG311", "0.0900", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG311", "0.5700", "3", "0.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG314", "0.0900", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG314", "0.5700", "3", "0.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "CG331", "0.2500", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R51", "CG321", "HGA2", "0.2000", "3", "0.00", "INDO/TRP"}, {"NG2R50", "CG2R51", "CG321", "CG311", "0.1900", "3", "0.00", "PROT HIS CB-CG TORSION,"}, {"NG2R50", "CG2R51", "CG321", "CG314", "0.1900", "3", "0.00", "PROT HIS CB-CG TORSION,"}, {"NG2R50", "CG2R51", "CG321", "HGA2", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "CG311", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "CG314", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "CG331", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R51", "CG2R51", "CG321", "HGA2", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "CG311", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "CG314", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "CG331", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"NG2R52", "CG2R51", "CG321", "HGA2", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"CG2R51", "CG2R51", "CG331", "HGA3", "0.0000", "3", "0.00", "PROT 4-methylimidazole 4-21G//rot bar. adm jr., 9/4/89"}, {"CG2RC0", "CG2R51", "CG331", "HGA3", "0.2000", "3", "0.00", "INDO/TRP"}, {"NG2R51", "CG2R51", "CG331", "HGA3", "0.1900", "3", "0.00", "PROT 4-METHYLIMIDAZOLE 4-21G//ROT BAR. ADM JR., 9/4/89"}, {"CG2R51", "CG2R51", "CG3C52", "CG2R51", "2.0500", "3", "180.00", "CPDE, cyclopentadiene, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG2R52", "3.5000", "3", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG2R53", "3.5000", "3", "180.00", "A2FO, from CG2R51 CG2R51 CG3C52 CG2R52, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "CG2RC0", "1.5000", "3", "180.00", "INDE, indene, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG3C52", "0.0500", "3", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "CG3C54", "0.5000", "3", "180.00", "0.05 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "NG2R50", "3.6000", "2", "180.00", "2HPR, 2H-pyrrole !1a, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "NG3C51", "0.7000", "3", "180.00", "0.70 0.50 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C52", "OG3C51", "0.2800", "1", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "OG3C51", "0.9800", "2", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "OG3C51", "1.7500", "3", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG2R51", "2.0500", "3", "0.00", "CPDE, cyclopentadiene, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG2R52", "1.5000", "3", "0.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG2R53", "1.5000", "3", "0.00", "A2FO, from HGR51 CG2R51 CG3C52 CG2R52, ctsai"}, {"HGR51", "CG2R51", "CG3C52", "CG2RC0", "1.9000", "3", "0.00", "INDE, indene, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG3C52", "2.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "CG3C54", "1.5000", "2", "180.00", "2.00 2PRL, 2-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "NG2R50", "4.3000", "2", "180.00", "2.6 2HPR, 2H-pyrrole !wC3H, kevo"}, {"HGR51", "CG2R51", "CG3C52", "NG3C51", "3.1000", "2", "180.00", "3PRL, 3-pyrroline, kevo"}, {"HGR51", "CG2R51", "CG3C52", "OG3C51", "3.1000", "2", "180.00", "B2FO, from HGR51 CG2R51 CG3C52 NG3C51, ctsai"}, {"HGR51", "CG2R51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRP, 2-pyrroline.H+; 2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "NG2R52", "2.8000", "2", "180.00", "2.7 2.4 2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "NG3P2", "0.9000", "3", "180.00", "0.9 3PRP, 3-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "CG3C54", "HGA2", "0.0000", "3", "0.00", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"HGR51", "CG2R51", "CG3C54", "NG2R52", "5.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGR51", "CG2R51", "CG3C54", "NG3P2", "1.7000", "2", "180.00", "3PRP, 3-pyrroline.H+, kevo"}, {"HGR51", "CG2R51", "CG3C54", "HGA2", "0.0000", "3", "0.00", "3PRP, 3-pyrroline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"CG2R51", "CG2R51", "NG2R50", "CG2R52", "5.4000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG2R51", "CG2R51", "NG2R50", "CG2R53", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R50", "NG2R50", "8.5000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG321", "CG2R51", "NG2R50", "CG2R53", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89, FROM HGR52 CG2R51 NG2R50CPH2"}, {"HGR52", "CG2R51", "NG2R50", "CG2R52", "2.0000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR52", "CG2R51", "NG2R50", "CG2R53", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"HGR52", "CG2R51", "NG2R50", "NG2R50", "5.5000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG2R51", "CG2R51", "NG2R51", "CG2R51", "10.0000", "2", "180.00", "PYRL, pyrrole"}, {"CG2R51", "CG2R51", "NG2R51", "CG2R53", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R51", "CG2RC0", "5.0000", "2", "180.00", "PROT JWK 05/14/91 fit to indole"}, {"CG2R51", "CG2R51", "NG2R51", "CG321", "0.0000", "1", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from CG2R51 CG2R51 NG2R51 CG3C51, kevo"}, {"CG2R51", "CG2R51", "NG2R51", "CG3C51", "0.0000", "1", "0.00", "NA, glycosyl linkage"}, {"CG2R51", "CG2R51", "NG2R51", "NG2R50", "10.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R51", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 7/20/89"}, {"CG2R57", "CG2R51", "NG2R51", "CG2R51", "10.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51 CG2R51; lf"}, {"CG2R57", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51 HGP1; lf"}, {"CG2RC0", "CG2R51", "NG2R51", "CG2R51", "6.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG2RC0", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG321", "CG2R51", "NG2R51", "CG2R53", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89, FROM HGR52 CG2R51 NG2R51CPH2"}, {"CG321", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 7/22/89, FROM HGR52 CG2R51 NG2R51H"}, {"CG331", "CG2R51", "NG2R51", "CG2R53", "3.0000", "2", "180.00", "PROT his, ADM JR., 7/22/89, FROM HGR52 CG2R51 NG2R51CPH2"}, {"CG331", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 7/22/89, FROM HGR52 CG2R51 NG2R51H"}, {"HGR52", "CG2R51", "NG2R51", "CG2R51", "2.6000", "2", "180.00", "PYRL, pyrrole"}, {"HGR52", "CG2R51", "NG2R51", "CG2R53", "3.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"HGR52", "CG2R51", "NG2R51", "CG2RC0", "2.6000", "2", "180.00", "INDO/TRP"}, {"HGR52", "CG2R51", "NG2R51", "CG321", "0.0000", "2", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from HGR52 CG2R53 NG2R51 CG331, kevo"}, {"HGR52", "CG2R51", "NG2R51", "CG3C51", "0.0000", "2", "180.00", "NA, glycosyl linkage"}, {"HGR52", "CG2R51", "NG2R51", "NG2R50", "3.0000", "2", "180.00", "PYRZ, pyrazole"}, {"HGR52", "CG2R51", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT adm jr., 3/24/92"}, {"CG2R51", "CG2R51", "NG2R52", "CG2R53", "12.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"CG2R51", "CG2R51", "NG2R52", "HGP2", "1.4000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG321", "CG2R51", "NG2R52", "CG2R53", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG321", "CG2R51", "NG2R52", "HGP2", "3.0000", "2", "180.00", "PROT his, adm jr., 7/22/89, FROM HC NG2R52CPH1 HA"}, {"HGR52", "CG2R51", "NG2R52", "CG2R53", "2.5000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR52", "CG2R51", "NG2R52", "HGP2", "3.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"CG2R51", "CG2R51", "NG2R57", "CG2R51", "10.0000", "2", "180.00", "13BPO, 1,3-bipyrrole; from CG2R51 CG2R51 NG2R51 CG2R51; lf"}, {"CG2R51", "CG2R51", "NG2R57", "CG2R57", "0.2000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "CG2R51", "NG2R57", "NG2R57", "0.2000", "2", "180.00", "11BPO, 1,1-bipyrrole, lf"}, {"HGR52", "CG2R51", "NG2R57", "CG2R51", "2.6000", "2", "180.00", "13BPO, 1,3-bipyrrole; from HGR52 CG2R51 NG2R51 CG2R51; lf"}, {"HGR52", "CG2R51", "NG2R57", "CG2R57", "1.5000", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"HGR52", "CG2R51", "NG2R57", "NG2R57", "1.1000", "2", "180.00", "11BPO, 1,1-bipyrrole, lf"}, {"CG2R51", "CG2R51", "NG2RC0", "CG2R61", "3.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "NG2RC0", "CG2RC0", "9.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR52", "CG2R51", "NG2RC0", "CG2R61", "1.4000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR52", "CG2R51", "NG2RC0", "CG2RC0", "1.4000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2R51", "NG3C51", "CG3C52", "8.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"HGR52", "CG2R51", "NG3C51", "CG3C52", "3.0000", "2", "180.00", "2PRL, 2-pyrroline, kevo"}, {"HGR52", "CG2R51", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG2R51", "NG3P2", "CG3C54", "0.3000", "3", "0.00", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "NG3P2", "HGP2", "0.3000", "3", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"HGR52", "CG2R51", "NG3P2", "CG3C54", "0.0000", "3", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"HGR52", "CG2R51", "NG3P2", "HGP2", "0.0000", "3", "180.00", "2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG2R51", "OG2R50", "CG2R51", "7.5000", "2", "180.00", "FURA, furan @@@@@ Kenno: 8.5 --> 7.5 @@@@@"}, {"CG2R51", "CG2R51", "OG2R50", "CG2R53", "8.5000", "2", "180.00", "OXAZ, oxazole"}, {"CG2R51", "CG2R51", "OG2R50", "CG2RC0", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R51", "CG2R51", "OG2R50", "NG2R50", "8.5000", "2", "180.00", "ISOX, isoxazole"}, {"HGR52", "CG2R51", "OG2R50", "CG2R51", "3.8000", "2", "180.00", "FURA, furan"}, {"HGR52", "CG2R51", "OG2R50", "CG2R53", "3.8000", "2", "180.00", "OXAZ, oxazole"}, {"HGR52", "CG2R51", "OG2R50", "CG2RC0", "3.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"HGR52", "CG2R51", "OG2R50", "NG2R50", "5.5000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R51", "CG2R51", "OG3C51", "CG2R53", "1.2310", "2", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "OG3C51", "CG2R53", "2.2940", "3", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG2R51", "CG2R51", "OG3C51", "CG3C52", "4.3400", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"HGR52", "CG2R51", "OG3C51", "CG2R53", "2.1000", "2", "180.00", "A2FO, from HGR52 CG2R51 OG3C51 CG3C52, ctsai"}, {"HGR52", "CG2R51", "OG3C51", "CG3C52", "2.1000", "2", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "CG2R51", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "THIP, thiophene"}, {"CG2R51", "CG2R51", "SG2R50", "CG2R53", "8.5000", "2", "180.00", "THAZ, thiazole @@@@@ Kenno: 8.0 --> 8.5 @@@@@"}, {"CG2R51", "CG2R51", "SG2R50", "CG2RC0", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R51", "CG2R51", "SG2R50", "NG2R50", "9.0000", "2", "180.00", "ISOT, isothiazole"}, {"HGR52", "CG2R51", "SG2R50", "CG2R51", "4.0000", "2", "180.00", "THIP, thiophene"}, {"HGR52", "CG2R51", "SG2R50", "CG2R53", "5.5000", "2", "180.00", "THAZ, thiazole"}, {"HGR52", "CG2R51", "SG2R50", "CG2RC0", "3.9000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"HGR52", "CG2R51", "SG2R50", "NG2R50", "4.5000", "2", "180.00", "ISOT, isothiazole"}, {"NG2R50", "CG2R52", "CG2R52", "NG2R50", "9.5000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"NG2R50", "CG2R52", "CG2R52", "HGR52", "3.9000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"HGR52", "CG2R52", "CG2R52", "HGR52", "0.1700", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"NG2R50", "CG2R52", "CG2RC0", "CG2R61", "2.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"NG2R50", "CG2R52", "CG2RC0", "CG2RC0", "8.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"HGR52", "CG2R52", "CG2RC0", "CG2R61", "2.4000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"HGR52", "CG2R52", "CG2RC0", "CG2RC0", "2.4000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "CG2R51", "3.5000", "3", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "CG2RC0", "3.5000", "3", "180.00", "3HIN, 3H-indole, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "CG3C52", "2.8000", "3", "180.00", "2.85 2PRZ, 2-pyrazoline, kevo"}, {"NG2R50", "CG2R52", "CG3C52", "HGA2", "1.4000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "CG3C52", "CG2R51", "1.3000", "3", "0.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR52", "CG2R52", "CG3C52", "CG2RC0", "2.0000", "3", "0.00", "3HIN, 3H-indole, kevo"}, {"HGR52", "CG2R52", "CG3C52", "CG3C52", "4.0000", "2", "180.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"CG2R51", "CG2R52", "NG2R50", "CG3C52", "5.5000", "2", "180.00", "2HPR, 2H-pyrrole !1,1a, kevo"}, {"CG2R51", "CG2R52", "NG2R50", "NG2R51", "12.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R51", "CG2R52", "NG2R50", "OG2R50", "12.0000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R51", "CG2R52", "NG2R50", "SG2R50", "8.5000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R52", "CG2R52", "NG2R50", "NG2R51", "12.0000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2RC0", "CG2R52", "NG2R50", "NG2R51", "13.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "CG2R51", "6.5000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "CG2RC0", "13.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG3C52", "CG2R52", "NG2R50", "NG3C51", "17.0000", "2", "180.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "NG2R50", "CG2R51", "5.0000", "2", "180.00", "3HPR, 3H-pyrrole, kevo"}, {"HGR52", "CG2R52", "NG2R50", "CG2RC0", "4.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"HGR52", "CG2R52", "NG2R50", "CG3C52", "7.6000", "2", "180.00", "7.1 2HPR, 2H-pyrrole !wC5H, kevo"}, {"HGR52", "CG2R52", "NG2R50", "NG2R51", "3.8000", "2", "180.00", "PYRZ, pyrazole"}, {"HGR52", "CG2R52", "NG2R50", "NG3C51", "5.0000", "2", "180.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGR52", "CG2R52", "NG2R50", "OG2R50", "5.5000", "2", "180.00", "ISOX, isoxazole"}, {"HGR52", "CG2R52", "NG2R50", "SG2R50", "4.5000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R51", "CG2R52", "NG2R52", "CG3C54", "6.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R51", "CG2R52", "NG2R52", "HGP2", "2.7000", "2", "180.00", "2.5 2HPP, 2H-pyrrole.H+, kevo"}, {"HGR52", "CG2R52", "NG2R52", "CG3C54", "9.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGR52", "CG2R52", "NG2R52", "HGP2", "0.0000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"NG2R43", "CG2R53", "CG3C41", "CG3C41", "3.0000", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"NG2R43", "CG2R53", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"OG2D1", "CG2R53", "CG3C41", "CG3C41", "0.5700", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"OG2D1", "CG2R53", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"NG2R53", "CG2R53", "CG3C52", "CG3C52", "1.0500", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2R53", "CG2R53", "CG3C52", "HGA2", "0.0000", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG2D1", "CG2R53", "CG3C52", "CG2R51", "0.0800", "3", "0.00", "A2FO, from OG2D1 CG2R53 CG3C52 CG3C52, ctsai"}, {"OG2D1", "CG2R53", "CG3C52", "CG3C52", "0.0800", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG2D1", "CG2R53", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG3C51", "CG2R53", "CG3C52", "CG2R51", "0.2190", "3", "0.00", "A2FO, 3H-furan-2-one, ctsai"}, {"OG3C51", "CG2R53", "CG3C52", "CG2R51", "0.2890", "4", "0.00", "A2FO, 3H-furan-2-one, ctsai"}, {"OG3C51", "CG2R53", "CG3C52", "CG3C52", "2.3700", "2", "0.00", "GBL, Gamma-batyrolactone, ctsai"}, {"OG3C51", "CG2R53", "CG3C52", "HGA2", "0.0000", "3", "180.00", "GBL, from NG2R53 CG2R53 CG3C52 HGA2, ctsai"}, {"CG3C41", "CG2R53", "NG2R43", "CG3C41", "1.5000", "2", "180.00", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "CG2R53", "NG2R43", "HGP1", "0.0000", "1", "0.00", "AZDO, 2-azetidinone, kevo"}, {"OG2D1", "CG2R53", "NG2R43", "CG3C41", "2.5000", "2", "180.00", "AZDO, 2-azetidinone, kevo"}, {"OG2D1", "CG2R53", "NG2R43", "HGP1", "2.5000", "2", "180.00", "AZDO, 2-azetidinone, kevo"}, {"NG2R50", "CG2R53", "NG2R50", "CG2R53", "10.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R50", "NG2R51", "12.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R50", "OG2R50", "12.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"NG2R51", "CG2R53", "NG2R50", "CG2R51", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R51", "CG2R53", "NG2R50", "CG2R53", "12.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R51", "CG2R53", "NG2R50", "CG2RC0", "14.0000", "2", "180.00", "NA A"}, {"NG3C51", "CG2R53", "NG2R50", "CG3C52", "18.0000", "2", "180.00", "14 ! 13 2IMI, 2-imidazoline 1, kevo"}, {"OG2R50", "CG2R53", "NG2R50", "CG2R51", "14.0000", "2", "180.00", "OXAZ, oxazole"}, {"OG2R50", "CG2R53", "NG2R50", "CG2R53", "12.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"SG2R50", "CG2R53", "NG2R50", "CG2R51", "6.0000", "2", "180.00", "THAZ, thiazole @@@@@ Kenno: 7.0 --> 6.0 @@@@@"}, {"SG2R50", "CG2R53", "NG2R50", "CG2RC0", "12.5000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"HGR52", "CG2R53", "NG2R50", "CG2R51", "2.0000", "2", "180.00", "NA bases"}, {"HGR52", "CG2R53", "NG2R50", "CG2R53", "5.5000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"HGR52", "CG2R53", "NG2R50", "CG2RC0", "5.2000", "2", "180.00", "NA A"}, {"HGR52", "CG2R53", "NG2R50", "CG3C52", "11.4000", "2", "180.00", "2IMI, 2-imidazoline, kevo"}, {"HGR52", "CG2R53", "NG2R50", "NG2R51", "3.3000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"HGR52", "CG2R53", "NG2R50", "OG2R50", "3.8000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"CG25C1", "CG2R53", "NG2R51", "CG2RC0", "2.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2R53", "NG2R51", "HGP1", "0.3000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "NG2R51", "CG2RC0", "2.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2R53", "NG2R51", "HGP1", "0.3000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"NG2R50", "CG2R53", "NG2R51", "CG2R51", "14.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R50", "CG2R53", "NG2R51", "CG2RC0", "6.0000", "2", "180.00", "NA A"}, {"NG2R50", "CG2R53", "NG2R51", "CG331", "11.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"NG2R50", "CG2R53", "NG2R51", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R50", "CG2R53", "NG2R51", "CG3RC1", "1.5000", "2", "180.00", "NA bases"}, {"NG2R50", "CG2R53", "NG2R51", "NG2R50", "10.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "CG2R53", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"OG2D1", "CG2R53", "NG2R51", "CG2RC0", "2.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"OG2D1", "CG2R53", "NG2R51", "HGP1", "0.8600", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"HGR52", "CG2R53", "NG2R51", "CG2R51", "3.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR52", "CG2R53", "NG2R51", "CG2RC0", "5.6000", "2", "180.00", "NA G"}, {"HGR52", "CG2R53", "NG2R51", "CG331", "0.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"HGR52", "CG2R53", "NG2R51", "CG3C51", "0.0000", "2", "180.00", "NA, glycosyl linkage"}, {"HGR52", "CG2R53", "NG2R51", "CG3RC1", "1.5000", "2", "180.00", "NA bases"}, {"HGR52", "CG2R53", "NG2R51", "NG2R50", "1.7000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"HGR52", "CG2R53", "NG2R51", "HGP1", "1.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"NG2R52", "CG2R53", "NG2R52", "CG2R51", "12.0000", "2", "180.00", "PROT his, ADM JR., 7/20/89"}, {"NG2R52", "CG2R53", "NG2R52", "CG3C54", "7.7000", "2", "180.00", "7.7 2IMP, 2-imidazoline.H+, kevo"}, {"NG2R52", "CG2R53", "NG2R52", "HGP2", "1.4000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR53", "CG2R53", "NG2R52", "CG2R51", "3.0000", "2", "180.00", "PROT his, adm jr., 6/27/90"}, {"HGR53", "CG2R53", "NG2R52", "CG3C54", "6.3000", "2", "180.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGR53", "CG2R53", "NG2R52", "HGP2", "0.0000", "2", "180.00", "PROT his, adm jr., 6/27/90, YES, 0.0"}, {"CG251O", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG251O", "CG2R53", "NG2R53", "CG311", "1.6000", "1", "0.00", "drug design project, xxwy"}, {"CG251O", "CG2R53", "NG2R53", "CG311", "2.5000", "2", "180.00", "drug design project, xxwy"}, {"CG251O", "CG2R53", "NG2R53", "HGP1", "1.7000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG252O", "CG2R53", "NG2R53", "CG311", "1.6000", "1", "0.00", "drug design project, xxwy"}, {"CG252O", "CG2R53", "NG2R53", "CG311", "2.5000", "2", "180.00", "drug design project, xxwy"}, {"CG252O", "CG2R53", "NG2R53", "HGP1", "1.7000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG3C52", "CG2R53", "NG2R53", "CG3C52", "0.4000", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG2R53", "NG2R53", "HGP1", "1.2700", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2R53", "CG2R53", "NG2R53", "CG251O", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG252O", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG2R53", "0.5000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG311", "0.5000", "2", "180.00", "drug design project, xxwy"}, {"NG2R53", "CG2R53", "NG2R53", "CG3RC1", "0.5000", "2", "180.00", "CBHH, glycoluril, (NG2R53 CG2R53 NG2R53 CG311), jing"}, {"NG2R53", "CG2R53", "NG2R53", "HGP1", "0.8000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG251O", "6.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG252O", "6.0000", "2", "180.00", "MHYO, 5-methylenehydantoin, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG2R53", "1.1000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG311", "2.5000", "2", "180.00", "drug design project, xxwy"}, {"OG2D1", "CG2R53", "NG2R53", "CG3C52", "2.5900", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"OG2D1", "CG2R53", "NG2R53", "CG3RC1", "2.5900", "2", "180.00", "CBHH, glycoluril, (OG2D1 CG2R53 NG2R53 CG3C52), jing"}, {"OG2D1", "CG2R53", "NG2R53", "HGP1", "0.8600", "2", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"SG2D1", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "NG2R53", "CG311", "1.5000", "2", "180.00", "drug design project, xxwy"}, {"SG2D1", "CG2R53", "NG2R53", "HGP1", "1.0000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG2R53", "NG2R53", "CG2R53", "1.5000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG311", "CG2R53", "NG2R53", "CG311", "1.5000", "2", "180.00", "drug design project, xxwy"}, {"SG311", "CG2R53", "NG2R53", "HGP1", "1.7000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R50", "CG2R53", "NG3C51", "CG3C52", "4.0000", "2", "180.00", "4 2IMI, 2-imidazoline x, kevo"}, {"NG2R50", "CG2R53", "NG3C51", "HGP1", "1.2000", "3", "0.00", ".85 ! 0 ! 0.6 3 0 2IMI, 2-imidazoline -wN1H, kevo"}, {"HGR52", "CG2R53", "NG3C51", "CG3C52", "0.0000", "2", "180.00", "4.6 2IMI, 2-imidazoline, kevo"}, {"HGR52", "CG2R53", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"NG2R50", "CG2R53", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "OXAZ, oxazole"}, {"NG2R50", "CG2R53", "OG2R50", "NG2R50", "9.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"HGR52", "CG2R53", "OG2R50", "CG2R51", "3.8000", "2", "180.00", "OXAZ, oxazole"}, {"HGR52", "CG2R53", "OG2R50", "NG2R50", "4.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"CG2R51", "CG2R53", "OG3C51", "CG3C52", "1.2400", "2", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG2R53", "OG3C51", "CG3C52", "2.2700", "3", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG3C52", "CG2R53", "OG3C51", "CG2R51", "0.2960", "2", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG3C52", "CG2R53", "OG3C51", "CG2R51", "0.5120", "3", "180.00", "A2FO, 3H-furan-2-one, ctsai"}, {"CG3C52", "CG2R53", "OG3C51", "CG3C52", "3.8000", "2", "180.00", "GBL, Gamma-butyrolactone, ctsai"}, {"OG2D1", "CG2R53", "OG3C51", "CG2R51", "4.3400", "2", "180.00", "A2FO, from CG2R51 CG2R51 OG3C51 CG3C52, ctsai"}, {"OG2D1", "CG2R53", "OG3C51", "CG3C52", "4.3400", "2", "180.00", "GBL, from CG2R51 CG2R51 OG3C51 CG3C52, ctsai"}, {"NG2R50", "CG2R53", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "THAZ, thiazole @@@@@ Kenno: 8.0 --> 8.5 @@@@@"}, {"NG2R50", "CG2R53", "SG2R50", "CG2RC0", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"HGR52", "CG2R53", "SG2R50", "CG2R51", "5.5000", "2", "180.00", "THAZ, thiazole"}, {"HGR52", "CG2R53", "SG2R50", "CG2RC0", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"NG2R53", "CG2R53", "SG311", "CG251O", "0.2500", "1", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "CG251O", "1.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "CG252O", "0.2500", "1", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"NG2R53", "CG2R53", "SG311", "CG252O", "1.3000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"OG2D1", "CG2R53", "SG311", "CG251O", "0.2500", "1", "0.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2D1", "CG2R53", "SG311", "CG251O", "1.3000", "2", "180.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2D1", "CG2R53", "SG311", "CG252O", "0.2500", "1", "0.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"OG2D1", "CG2R53", "SG311", "CG252O", "1.3000", "2", "180.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy and oashi"}, {"SG2D1", "CG2R53", "SG311", "CG251O", "0.2500", "1", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "SG311", "CG251O", "0.6000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "SG311", "CG252O", "0.2500", "1", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"SG2D1", "CG2R53", "SG311", "CG252O", "0.6000", "2", "180.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R51", "CG2R57", "CG2R57", "CG2R51", "0.4500", "2", "180.00", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "CG2R57", "CG2R51", "0.0800", "4", "0.00", "33BPO, 3,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "CG2R51", "0.3200", "2", "180.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "CG2R51", "0.1200", "4", "0.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG2R51", "CG2R57", "NG2R57", "CG2R51", "0.0150", "6", "0.00", "13BPO, 1,3-bipyrrole, lf"}, {"CG1N1", "CG2R61", "CG2R61", "CG2R61", "2.0000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN), yin"}, {"CG1N1", "CG2R61", "CG2R61", "CG2RC0", "1.3000", "2", "180.00", "CYIN, 5-cyanoindole; from 3CYP, 3-Cyanopyridine; alr"}, {"CG1N1", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN), yin"}, {"CG1N1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) Kenno: was 5.0 1 0.0 (sic!) ==> reset to default."}, {"CG1N1", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3CYP, 3-Cyanopyridine (PYRIDINE pyr-CN) Kenno: was 5.0 1 0.0 (sic!) ==> reset to default."}, {"CG2DC1", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "HDZ2, hydrazone model cmpd 2 Kenno: 4.2 -> 2.4"}, {"CG2DC2", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "HDZ2, hydrazone model cmpd 2 Kenno: 4.2 -> 2.4"}, {"CG2N2", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BAMI, benzamidinium; default parameter; sz"}, {"CG2N2", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BAMI, benzamidinium; default parameter; sz"}, {"CG2O1", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "3NAP, nicotinamide Kenno: 1.0 -> 3.1"}, {"CG2O1", "CG2R61", "CG2R61", "NG2R60", "5.0000", "2", "180.00", "3NAP, nicotinamide"}, {"CG2O1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3NAP, nicotinamide Kenno: 4.2 -> 2.4"}, {"CG2O1", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3NAP, nicotinamide Kenno: 4.2 -> 2.4"}, {"CG2O2", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "ZOIC, benzoic acid, MBOA, methylbenzoate; default parameter; kevo and jal"}, {"CG2O2", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "ZOIC, benzoic acid, MBOA, methylbenzoate; default parameter; kevo and jal"}, {"CG2O3", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2O3", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"CG2O3", "CG2R61", "CG2R61", "NG2S1", "2.4000", "2", "180.00", "2XBD, Gamma 2-carboxy phenyl GA CDCA amide, corrected by kevo"}, {"CG2O3", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"CG2O3", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"CG2O4", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) unmodified, yin"}, {"CG2O4", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) unmodified, yin"}, {"CG2O4", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) Kenno: 4.2 -> 2.4 unmodified"}, {"CG2O4", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-aldehyde) Kenno: 4.2 -> 2.4 unmodified"}, {"CG2O5", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS unmodified, peml"}, {"CG2O5", "CG2R61", "CG2R61", "NG2R60", "5.0000", "2", "180.00", "3ACP, 3-acetylpyridine unmodified"}, {"CG2O5", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "3ACP, 3-acetylpyridine reset to default by kevo; verified by mcs"}, {"CG2O5", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3ACP, 3-acetylpyridine reset to default by kevo; verified by mcs"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R61", "3.1000", "2", "180.00", "PROT JES 8/25/89"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R62", "0.5000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R63", "3.2000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R64", "3.1000", "2", "180.00", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R66", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R61", "CG2R67", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R61", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2R61", "CG311", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R61", "CG312", "3.1000", "2", "180.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG2R61", "CG2R61", "CG321", "3.1000", "2", "180.00", "PROT JES 8/25/89 toluene and ethylbenzene"}, {"CG2R61", "CG2R61", "CG2R61", "CG324", "3.1000", "2", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG2R61", "CG2R61", "CG331", "3.1000", "2", "180.00", "PROT toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "NG2O1", "2.0000", "2", "180.00", "NITB, nitrobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "NG2R60", "1.2000", "2", "180.00", "PYR1, pyridine, yin"}, {"CG2R61", "CG2R61", "CG2R61", "NG2R61", "3.7000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R61", "NG2R62", "1.2000", "2", "180.00", "PYRD, pyridazine (also applies to PYRM, pyrimidine); from PYR1, pyridine, yin; adm"}, {"CG2R61", "CG2R61", "CG2R61", "NG2RC0", "1.5000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "CG2R61", "NG2S1", "3.1000", "2", "180.00", "RETINOL PACP"}, {"CG2R61", "CG2R61", "CG2R61", "NG2S3", "5.0000", "2", "180.00", "PYRIDINE aminopyridine, yin"}, {"CG2R61", "CG2R61", "CG2R61", "NG301", "1.4000", "2", "180.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "CG2R61", "NG311", "3.1000", "2", "180.00", "FEOZ, phenoxazine, erh based on PROT toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "NG3N1", "3.1000", "2", "180.00", "PHHZ, phenylhydrazine, ed; reset to default param by kevo"}, {"CG2R61", "CG2R61", "CG2R61", "OG301", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R61", "OG303", "3.1000", "2", "180.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "CG2R61", "CG2R61", "OG311", "3.1000", "2", "180.00", "PYRIDINE phenol, yin"}, {"CG2R61", "CG2R61", "CG2R61", "OG312", "3.1000", "2", "180.00", "PROT adm jr. 8/27/91, phenoxide"}, {"CG2R61", "CG2R61", "CG2R61", "OG3R60", "3.1000", "2", "180.00", "FEOZ, phenoxazine, erh based on PROT toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "SG311", "4.5000", "2", "180.00", "FETZ, phenothiazine, erh based on toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "SG3O1", "3.1000", "2", "180.00", "based on toluene, adm jr., 3/7/92"}, {"CG2R61", "CG2R61", "CG2R61", "SG3O2", "3.0000", "2", "180.00", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CG2R61", "CG2R61", "CG2R61", "CLGR1", "3.0000", "2", "180.00", "CHLB, chlorobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "BRGR1", "3.0000", "2", "180.00", "BROB, bromobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "IGR1", "2.1000", "2", "180.00", "IODB, iodobenzene"}, {"CG2R61", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "PROT JES 8/25/89 benzene"}, {"CG2R61", "CG2R61", "CG2R61", "HGR62", "4.2000", "2", "180.00", "BROB, bromobenzene"}, {"CG2R62", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R63", "CG2R61", "CG2R61", "NG2R61", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "CG2R61", "CG2R61", "NG2R62", "1.2000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from CG2R64 CG2R61 CG2R61 NG2R62; isg"}, {"CG2R63", "CG2R61", "CG2R61", "HGR61", "1.0000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "CG2R61", "CG2R61", "HGR62", "0.5000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from CG2R64 CG2R61 CG2R61 HGR62; isg"}, {"CG2R64", "CG2R61", "CG2R61", "CG331", "3.1000", "2", "180.00", "2A46PD, 2-Amino-4,6-dimethyl-pyridine CDCA conjugate, cacha"}, {"CG2R64", "CG2R61", "CG2R61", "NG2R62", "1.2000", "2", "180.00", "PTID, pteridine, erh"}, {"CG2R64", "CG2R61", "CG2R61", "HGR61", "1.0000", "2", "180.00", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R64", "CG2R61", "CG2R61", "HGR62", "0.5000", "2", "180.00", "PTID, pteridine, erh"}, {"CG2R66", "CG2R61", "CG2R61", "NG2S1", "3.1000", "2", "180.00", "3FBD, 3-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R67", "CG2R61", "CG2R61", "HGR61", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2RC0", "CG2R61", "CG2R61", "BRGR1", "3.1000", "2", "180.00", "drug design project, xxwy"}, {"CG2RC0", "CG2R61", "CG2R61", "HGR61", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2RC0", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "drug design project, xxwy"}, {"CG311", "CG2R61", "CG2R61", "OG311", "2.4000", "2", "180.00", "FBIB, Fatty Binding Inhibitior B, cacha Kenno: 4.2 -> 2.4"}, {"CG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "NAMODEL difluorotoluene Kenno: 4.2 -> 2.4"}, {"CG312", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BDFP, BDFD, Difuorobenzylphosphonate Kenno: 4.2 -> 2.4"}, {"CG321", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "PYRIDINE 3-ethylpyridine, yin"}, {"CG321", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT JES 8/25/89 toluene and ethylbenzene Kenno: 4.2 -> 2.4"}, {"CG321", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PROT JES 8/25/89 toluene and ethylbenzene Kenno: 4.2 -> 2.4"}, {"CG324", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BPIP, N-Benzyl PIP, cacha Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "CG331", "2.4000", "2", "180.00", "OXYL, o-xylene, kevo for gsk/ibm"}, {"CG331", "CG2R61", "CG2R61", "NG2R60", "1.0000", "2", "180.00", "PYRIDINE 3-methylpyridine, yin"}, {"CG331", "CG2R61", "CG2R61", "NG2S1", "2.4000", "2", "180.00", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, corrected by kevo"}, {"CG331", "CG2R61", "CG2R61", "OG301", "2.4000", "2", "180.00", "FBID, Fatty acid Binding protein Inhibitor D, cacha Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "OG311", "2.4000", "2", "180.00", "FBIA, Fatty Binding Inhibitior B, cacha Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"CG331", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PROT toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"NG2O1", "CG2R61", "CG2R61", "HGR61", "1.0000", "2", "180.00", "NITB, nitrobenzene"}, {"NG2R60", "CG2R61", "CG2R61", "NG2R60", "0.9000", "2", "180.00", "PYZN, pyrazine"}, {"NG2R60", "CG2R61", "CG2R61", "NG2R62", "3.0000", "2", "180.00", "PTID, pteridine, erh"}, {"NG2R60", "CG2R61", "CG2R61", "NG2S1", "5.0000", "2", "180.00", "3AMP, 3-Amino pyridine, cacha"}, {"NG2R60", "CG2R61", "CG2R61", "NG2S3", "5.0000", "2", "180.00", "PYRIDINE aminopyridine, yin"}, {"NG2R60", "CG2R61", "CG2R61", "OG311", "1.0000", "2", "180.00", "PYRIDINE 3-hydroxypyridine Kenno: 0.0 (unlikely) -> 1.0 from 3-methylpyridine, yin"}, {"NG2R60", "CG2R61", "CG2R61", "BRGR1", "3.0000", "2", "180.00", "3A5BPD, Gamma-3-Amino-5-bromo Pyridine GA CDCA Amide, cacha"}, {"NG2R60", "CG2R61", "CG2R61", "HGR61", "2.8000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"NG2R60", "CG2R61", "CG2R61", "HGR62", "6.0000", "2", "180.00", "PYZN, pyrazine"}, {"NG2R61", "CG2R61", "CG2R61", "HGR61", "0.8000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg (may need to be re-evaluated; ideally re-check INDZ with molvib_energy script and also look at URA2S molvib)"}, {"NG2R61", "CG2R61", "CG2R61", "HGR62", "0.8000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from NG2RC0 CG2R61 CG2R61 HGR61; isg (may need to be re-evaluated; ideally re-check INDZ with molvib_energy script and also look at URA2S molvib)"}, {"NG2R62", "CG2R61", "CG2R61", "NG2R62", "0.5000", "2", "180.00", "TRIB, triazine124"}, {"NG2R62", "CG2R61", "CG2R61", "HGR61", "2.8000", "2", "180.00", "PYRD, pyridazine"}, {"NG2R62", "CG2R61", "CG2R61", "HGR62", "6.0000", "2", "180.00", "TRIB, triazine124"}, {"NG2RC0", "CG2R61", "CG2R61", "HGR61", "0.8000", "2", "180.00", "INDZ, indolizine, kevo"}, {"NG2S1", "CG2R61", "CG2R61", "OG301", "2.4000", "2", "180.00", "2AMFD, Gamma 2-amino phenyl methyl ether, corrected by kevo"}, {"NG2S1", "CG2R61", "CG2R61", "OG311", "2.4000", "2", "180.00", "2AMF, 2-acetamide phenol, cacha Kenno: 4.2 -> 2.4"}, {"NG2S1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "RETINOL PACP Kenno: 4.2 -> 2.4"}, {"NG2S1", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "3AMP, 3-Amino pyridine, cacha Kenno: 4.2 -> 2.4"}, {"NG2S3", "CG2R61", "CG2R61", "NG2S3", "3.1000", "2", "180.00", "PYRIDINE diaminopyridine. Kenno: Change to 2.4 ???"}, {"NG2S3", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"NG2S3", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PYRIDINE aminopyridine Kenno: 4.2 -> 2.4"}, {"NG301", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "DMAN, N,N-dimethylaniline; from NG311 CG2R61 CG2R61 HGR61; sc"}, {"NG311", "CG2R61", "CG2R61", "OG3R60", "2.5800", "2", "180.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"NG311", "CG2R61", "CG2R61", "SG311", "3.5700", "2", "180.00", "FETZ, phenothiazine fit_dihedral, erh"}, {"NG311", "CG2R61", "CG2R61", "SG3O2", "2.4000", "2", "180.00", "OBTZ, sulfonamide heterocycle in drug HCTZ, xxwy"}, {"NG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "FEOZ, phenoxazine, erh"}, {"NG3N1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PHHZ, phenylhydrazine, ed; reset to default param by kevo"}, {"OG301", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "BIPHENYL ANALOGS, peml. Kenno: 4.2 -> 2.4"}, {"OG303", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROTNA phenol phosphate, 6/94, adm jr. Kenno: 4.2 -> 2.4"}, {"OG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT JES 8/25/89 phenol Kenno: 4.2 -> 2.4"}, {"OG311", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "PROT JES 8/25/89 phenol Kenno: 4.2 -> 2.4"}, {"OG312", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT adm jr. 8/27/91, phenoxide Kenno: 4.2 -> 2.4"}, {"OG3R60", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "FEOZ, phenoxazine, erh"}, {"SG311", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "FETZ, phenothiazine, erh based on toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"SG3O1", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "based on toluene, adm jr., 3/7/92 Kenno: 4.2 -> 2.4"}, {"SG3O2", "CG2R61", "CG2R61", "HGR61", "2.1000", "2", "180.00", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CLGR1", "CG2R61", "CG2R61", "CLGR1", "2.4000", "2", "180.00", "12DCB, 1,2,dichlorobenzene, (CG331 CG2R61 CG2R61 CG311), isg/fylin"}, {"CLGR1", "CG2R61", "CG2R61", "HGR62", "3.0000", "2", "180.00", "CHLB, chlorobenzene"}, {"BRGR1", "CG2R61", "CG2R61", "BRGR1", "2.4000", "2", "180.00", "12DBB, 1,2,dibromobenzene, (CG331 CG2R61 CG2R61 CG311), isg/fylin"}, {"BRGR1", "CG2R61", "CG2R61", "HGR62", "3.0000", "2", "180.00", "BROB, bromobenzene"}, {"IGR1", "CG2R61", "CG2R61", "IGR1", "2.4000", "2", "180.00", "12DIB, 1,2,diiodobenzene, (CG331 CG2R61 CG2R61 CG311), isg/fylin"}, {"IGR1", "CG2R61", "CG2R61", "HGR62", "3.0000", "2", "180.00", "IODB, iodobenzene"}, {"HGR61", "CG2R61", "CG2R61", "HGR61", "2.4000", "2", "180.00", "PROT JES 8/25/89 benzene"}, {"HGR61", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "BROB, bromobenzene"}, {"HGR62", "CG2R61", "CG2R61", "HGR62", "2.4000", "2", "180.00", "TRIB, triazine124"}, {"CG2R61", "CG2R61", "CG2R62", "CG2R62", "0.5000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R61", "CG2R62", "CG2R63", "3.1000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R61", "CG2R62", "NG2R61", "7.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R61", "CG2R62", "NG2R62", "1.2000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R61", "CG2R62", "OG3R60", "3.1000", "2", "180.00", "RIN, coumarin, isg"}, {"HGR61", "CG2R61", "CG2R62", "CG2R62", "3.1000", "2", "180.00", "RIN, coumarin, isg"}, {"HGR61", "CG2R61", "CG2R62", "CG2R63", "1.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"HGR61", "CG2R61", "CG2R62", "NG2R61", "0.4000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"HGR61", "CG2R61", "CG2R62", "NG2R62", "2.8000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"HGR61", "CG2R61", "CG2R62", "OG3R60", "2.4000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R61", "CG2R63", "NG2R61", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "CG2R63", "NG2R67", "0.5000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R61 CG2R61 CG2R63 NG2R61, YTS2; isg"}, {"CG2R61", "CG2R61", "CG2R63", "SG2D1", "4.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"HGR62", "CG2R61", "CG2R63", "NG2R61", "1.0000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from HGR62 CG2R62 CG2R63 NG2R61; isg"}, {"HGR62", "CG2R61", "CG2R63", "NG2R67", "1.0000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from HGR62 CG2R62 CG2R63 NG2R61, NA; isg"}, {"HGR62", "CG2R61", "CG2R63", "SG2D1", "2.4000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from SG311 CG2R61 CG2R61 HGR61; isg"}, {"CG2R61", "CG2R61", "CG2R64", "NG2R60", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "CG2R61", "CG2R64", "NG2R62", "1.2000", "2", "180.00", "18NFD, 1,8-naphthyridine, from PYR1, pyridine, erh"}, {"CG2R61", "CG2R61", "CG2R64", "NG2S1", "3.1000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, p-acetamide-phenol, pyridine, kevo"}, {"NG2R60", "CG2R61", "CG2R64", "NG2R62", "1.5000", "2", "0.00", "PTID, pteridine, erh"}, {"OG311", "CG2R61", "CG2R64", "NG2R60", "3.1000", "2", "180.00", "2A3HPD, cacha"}, {"OG311", "CG2R61", "CG2R64", "NG2S1", "2.4000", "2", "180.00", "2A3HPD, cacha"}, {"HGR61", "CG2R61", "CG2R64", "NG2R60", "2.8000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"HGR61", "CG2R61", "CG2R64", "NG2S1", "2.4000", "2", "180.00", "2AMP, 2-amino pyridine, default parameter by analogy to PACP, kevo"}, {"CG2R61", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R66", "CG2R67", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R66 CG2R61, penalty= 0.5"}, {"CG2R61", "CG2R61", "CG2R66", "FGR1", "4.5000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R66", "CG2R61", "CG2R66", "FGR1", "4.5000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG331", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG331", "CG2R61", "CG2R66", "FGR1", "4.5000", "2", "180.00", "NAMODEL difluorotoluene"}, {"NG2R60", "CG2R61", "CG2R66", "CG2R61", "1.2000", "2", "180.00", "3FLP, 3-fluoropyridine. Kenno: copied from pyridine while retrofitting CG2R66 ==> re-optimize"}, {"NG2R60", "CG2R61", "CG2R66", "FGR1", "3.1000", "2", "180.00", "PYRIDINE fluoropyridine, yin"}, {"NG2S1", "CG2R61", "CG2R66", "CG2R61", "3.1000", "2", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"NG2S1", "CG2R61", "CG2R66", "FGR1", "2.4000", "2", "180.00", "2FBD, Gamma 2-Fluoro amino benzene glutamic acid CDCA amide, cacha Kenno: 3.1 -> 2.4"}, {"HGR62", "CG2R61", "CG2R66", "CG2R61", "4.2000", "2", "180.00", "NAMODEL difluorotoluene"}, {"HGR62", "CG2R61", "CG2R66", "CG2R67", "4.2000", "2", "180.00", "PYO2F , from HGR62 CG2R61 CG2R66 CG2R61, penalty= 0.5"}, {"HGR62", "CG2R61", "CG2R66", "FGR1", "2.4000", "2", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG2R67", "CG2R61", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R67", "CG2R66", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 1.5"}, {"CG2R61", "CG2R61", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "CG2R67", "CG2RC0", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R61", "CG2R67", "NG2R60", "1.2000", "2", "180.00", "22BPY, 2,2'-bipyridine, from CG2R61 CG2R61 CG2R61 NG2R60, kevo"}, {"CG2R61", "CG2R61", "CG2R67", "NG2R67", "3.1000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R61 CG2R61 CG2R61 CG2R61; isg"}, {"NG2R60", "CG2R61", "CG2R67", "CG2R61", "1.2000", "2", "180.00", "3PHP, 3-phenyl-pyridine; Kenno: 3.1 -> 1.2 from PYRIDINE pyridine, yin"}, {"NG2R60", "CG2R61", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "3PHP, 3-phenyl-pyridine, Kenno: 3.1 -> 1.0 from 3-methylpyridine, yin"}, {"HGR61", "CG2R61", "CG2R67", "CG2R61", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"HGR61", "CG2R61", "CG2R67", "CG2R66", "4.2000", "2", "180.00", "PYO2F , from HGR61 CG2R61 CG2R67 CG2R61, penalty= 1.5"}, {"HGR61", "CG2R61", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"HGR61", "CG2R61", "CG2R67", "CG2RC0", "3.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"HGR61", "CG2R61", "CG2R67", "NG2R60", "2.8000", "2", "180.00", "22BPY, 2,2'-bipyridine, from NG2R60 CG2R61 CG2R61 HGR61, kevo"}, {"HGR61", "CG2R61", "CG2R67", "NG2R67", "2.8000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R60 CG2R61 CG2R61 HGR61; isg"}, {"HGR62", "CG2R61", "CG2R67", "CG2R61", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"HGR62", "CG2R61", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2O1", "CG2R61", "CG2RC0", "CG2RC0", "3.1000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2O1", "CG2R61", "CG2RC0", "NG2R51", "2.8000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R61", "CG2R61", "CG2RC0", "CG25C1", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R61", "CG2R61", "CG2RC0", "CG25C2", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2R51", "4.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2R52", "1.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2R67", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R61", "CG2RC0", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2RC0", "CG3C52", "0.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "NG2R50", "1.5000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "NG2R51", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2R61", "CG2RC0", "NG2RC0", "3.5000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "NG3C51", "6.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "OG2R50", "0.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2R61", "CG2RC0", "OG3C51", "2.0000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2R61", "CG2R61", "CG2RC0", "SG2R50", "0.0000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"NG2R62", "CG2R61", "CG2RC0", "CG2RC0", "2.2000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"NG2R62", "CG2R61", "CG2RC0", "NG2R50", "0.0000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"NG2R62", "CG2R61", "CG2RC0", "NG2R51", "0.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"HGR61", "CG2R61", "CG2RC0", "CG25C1", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"HGR61", "CG2R61", "CG2RC0", "CG25C2", "3.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"HGR61", "CG2R61", "CG2RC0", "CG2R51", "4.0000", "2", "180.00", "INDO/TRP"}, {"HGR61", "CG2R61", "CG2RC0", "CG2R52", "0.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "CG2R67", "3.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"HGR61", "CG2R61", "CG2RC0", "CG2RC0", "3.0000", "2", "180.00", "INDO/TRP"}, {"HGR61", "CG2R61", "CG2RC0", "CG3C52", "0.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "NG2R50", "0.8000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "NG2R51", "3.0000", "2", "180.00", "INDO/TRP"}, {"HGR61", "CG2R61", "CG2RC0", "NG2RC0", "0.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "NG3C51", "0.0000", "2", "180.00", "INDI, indoline, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "OG2R50", "0.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"HGR61", "CG2R61", "CG2RC0", "OG3C51", "2.4000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"HGR61", "CG2R61", "CG2RC0", "SG2R50", "0.0000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"HGR62", "CG2R61", "CG2RC0", "CG25C1", "2.4000", "2", "180.00", "drug design project, xxwy"}, {"HGR62", "CG2R61", "CG2RC0", "CG25C2", "2.4000", "2", "180.00", "drug design project, xxwy"}, {"HGR62", "CG2R61", "CG2RC0", "CG2RC0", "4.2000", "2", "180.00", "PUR7, purine(N7H); PUR9, purine(N9H), kevo"}, {"HGR62", "CG2R61", "CG2RC0", "NG2R50", "1.0000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"HGR62", "CG2R61", "CG2RC0", "NG2R51", "0.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"CG2R61", "CG2R61", "CG311", "CG2O3", "0.2300", "2", "180.00", "FBIF, Fatty acid Binding protein Inhibitor F, cacha"}, {"CG2R61", "CG2R61", "CG311", "CG321", "0.2300", "2", "180.00", "Slack parameter from difluorotoluene picked up by FBIC ==> RE-OPTIMIZE !!!"}, {"CG2R61", "CG2R61", "CG311", "CG331", "0.2300", "2", "180.00", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG2R61", "CG2R61", "CG311", "HGA1", "0.1000", "6", "180.00", "NAMODEL difluorotoluene"}, {"CG2R61", "CG2R61", "CG312", "PG1", "0.1500", "2", "180.00", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG2R61", "CG2R61", "CG312", "PG2", "0.1500", "2", "180.00", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG2R61", "CG2R61", "CG312", "FGA2", "0.3000", "2", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG2R61", "CG321", "CG2R61", "0.2300", "2", "180.00", "PYRIDINE pyr-CH2C6H5, yin"}, {"CG2R61", "CG2R61", "CG321", "CG311", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "CG314", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "CG321", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "CG331", "0.2300", "2", "180.00", "PROT ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CG2R61", "CG2R61", "CG321", "NG2S1", "0.1190", "2", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG2R61", "CG321", "NG2S1", "0.1320", "4", "180.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG2R61", "CG321", "NG2S1", "0.0130", "6", "180.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG2R61", "CG321", "OG302", "0.0000", "2", "0.00", "ABGA, ALPHA BENZYL GLU ACID CDCA AMIDE, cacha"}, {"CG2R61", "CG2R61", "CG321", "OG311", "0.0000", "2", "0.00", "3CAP, carbinol-pyridine (PYRIDINE pyr-CH2OH), yin"}, {"CG2R61", "CG2R61", "CG321", "PG1", "0.2000", "2", "180.00", "BDFP, Benzylphosphonate re-optimize?"}, {"CG2R61", "CG2R61", "CG321", "PG2", "0.2000", "2", "180.00", "BDFD, Benzylphosphonate / re-optimize?"}, {"CG2R61", "CG2R61", "CG321", "HGA2", "0.0020", "6", "0.00", "PROT toluene, adm jr., 3/7/92"}, {"NG2R60", "CG2R61", "CG321", "CG321", "0.2300", "2", "180.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, corrected by kevo"}, {"NG2R60", "CG2R61", "CG321", "HGA2", "0.0020", "6", "0.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, corrected by kevo"}, {"CG2R61", "CG2R61", "CG324", "NG3P1", "0.1500", "2", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG2R61", "CG324", "NG3P3", "0.3300", "2", "0.00", "4FBA, optimized using CCCN mp2 scan, pram"}, {"CG2R61", "CG2R61", "CG324", "HGA2", "0.0000", "2", "0.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG2R61", "CG331", "HGA3", "0.0020", "6", "0.00", "PYRIDINE toluene Kenno: 180 -> 0"}, {"CG2R66", "CG2R61", "CG331", "HGA3", "0.0020", "6", "0.00", "PYRIDINE toluene Kenno: 180 -> 0"}, {"NG2R60", "CG2R61", "CG331", "HGA3", "0.0030", "6", "180.00", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, cacha"}, {"CG2R61", "CG2R61", "NG2O1", "OG2N1", "0.9000", "2", "180.00", "NITB, nitrobenzene"}, {"CG2R61", "CG2R61", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"CG2R61", "CG2R61", "NG2R60", "CG2R64", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"CG2R61", "CG2R61", "NG2R60", "CG2R67", "1.2000", "2", "180.00", "22BPY, 2,2'-bipyridine, from CG2R61 CG2R61 NG2R60 CG2R61, kevo"}, {"CG2R64", "CG2R61", "NG2R60", "CG2R61", "2.2000", "2", "180.00", "PTID, pteridine, erh"}, {"CG2R66", "CG2R61", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "3FLP, 3-fluoropyridine. Kenno: copied from pyridine while retrofitting CG2R66 ==> re-optimize"}, {"CG2R67", "CG2R61", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "3PHP, 3-phenyl-pyridine, yin"}, {"CG321", "CG2R61", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, cacha"}, {"CG331", "CG2R61", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "3A2MPD, 3-amino-2-methyl-pyridine CDCA conjugate, cacha"}, {"CG331", "CG2R61", "NG2R60", "CG2R64", "3.1000", "2", "180.00", "2A46PD, 2-Amino-4,6-dimethyl-pyridine CDCA conjugate, cacha"}, {"BRGR1", "CG2R61", "NG2R60", "CG2R61", "3.0000", "2", "180.00", "3A6BPD, Gamma-3-Amino-6-bromo Pyridine GA CDCA Amide, cacha"}, {"HGR62", "CG2R61", "NG2R60", "CG2R61", "5.8000", "2", "180.00", "PYR1 pyridine, yin ! got overwritten with slack parameter during big renaming operation (par_cgenff_1e_unsorted). Restored to original from toppar_all22_prot_pyridines."}, {"HGR62", "CG2R61", "NG2R60", "CG2R64", "5.8000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"HGR62", "CG2R61", "NG2R60", "CG2R67", "5.2500", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R61", "NG2R61", "CG2R63", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R61", "NG2R61", "HGP1", "1.0000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"HGR62", "CG2R61", "NG2R61", "CG2R63", "4.6000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from HGR62 CG2R62 NG2R61 CG2R63; isg"}, {"HGR62", "CG2R61", "NG2R61", "HGP1", "1.2000", "2", "180.00", "URA24S, 2,4(1H,3H)-pyrimidinedithione; from HGR62 CG2R62 NG2R61 HGP1; isg"}, {"CG2R61", "CG2R61", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "PYRM, pyrimidine"}, {"CG2R61", "CG2R61", "NG2R62", "NG2R62", "0.8000", "2", "180.00", "PYRD, pyridazine"}, {"CG2RC0", "CG2R61", "NG2R62", "CG2R64", "2.2000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"HGR62", "CG2R61", "NG2R62", "CG2R64", "7.3000", "2", "180.00", "PYRM, pyrimidine"}, {"HGR62", "CG2R61", "NG2R62", "NG2R62", "2.8000", "2", "180.00", "PYRD, pyridazine"}, {"CG2R61", "CG2R61", "NG2RC0", "CG2R51", "0.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "NG2RC0", "CG2RC0", "0.5000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR62", "CG2R61", "NG2RC0", "CG2R51", "0.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"HGR62", "CG2R61", "NG2RC0", "CG2RC0", "1.9000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2R61", "NG2S1", "CG2O1", "1.2000", "2", "180.00", "RETINOL PACP"}, {"CG2R61", "CG2R61", "NG2S1", "HGP1", "0.5000", "2", "180.00", "RETINOL PACP"}, {"CG2R66", "CG2R61", "NG2S1", "CG2O1", "1.2000", "2", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "NG2S1", "CG2O1", "1.0000", "3", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R66", "CG2R61", "NG2S1", "HGP1", "0.5000", "2", "180.00", "2FBD, 2-fluoroanilide patch. Kenno: copied from RETINOL PACP while retrofitting CG2R66 ==> re-optimize"}, {"CG2R61", "CG2R61", "NG2S3", "HGP4", "1.3500", "2", "180.00", "PYRIDINE aminopyridine. kevo: 1.80 --> 1.35"}, {"CG2R61", "CG2R61", "NG301", "CG331", "0.9600", "2", "180.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG301", "CG331", "0.1050", "4", "0.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG301", "CG331", "0.0350", "6", "180.00", "DMAN, N,N-dimethylaniline, kevo"}, {"CG2R61", "CG2R61", "NG311", "CG2R61", "0.4400", "2", "0.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "NG311", "CG321", "1.2000", "2", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG2R61", "CG2R61", "NG311", "CG321", "0.3000", "4", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG2R61", "CG2R61", "NG311", "SG3O2", "0.2000", "2", "180.00", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "NG311", "HGP1", "0.5000", "2", "180.00", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "NG311", "HGPAM1", "0.3200", "2", "180.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "NG3N1", "NG3N1", "2.3700", "2", "180.00", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "CG2R61", "NG3N1", "HGP1", "0.0000", "2", "0.00", "PHHZ, phenylhydrazine, ed"}, {"CG2R61", "CG2R61", "OG301", "CG2R61", "1.2000", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R61", "OG301", "CG321", "1.6200", "2", "180.00", "ETOB, Ethoxybenzene, cacha"}, {"CG2R61", "CG2R61", "OG301", "CG321", "0.1900", "4", "180.00", "ETOB, Ethoxybenzene, cacha"}, {"CG2R61", "CG2R61", "OG301", "CG331", "1.5800", "2", "180.00", "MEOB, Methoxybenzene update, yxu"}, {"CG2R61", "CG2R61", "OG301", "CG331", "0.2000", "4", "180.00", "MEOB, Methoxybenzene update, yxu"}, {"CG2R61", "CG2R61", "OG303", "PG1", "1.4000", "2", "180.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "CG2R61", "OG303", "SG3O2", "0.5100", "2", "180.00", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "CG2R61", "OG303", "SG3O2", "0.1500", "4", "0.00", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "CG2R61", "OG311", "HGP1", "0.9900", "2", "180.00", "PROT phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"CG2R64", "CG2R61", "OG311", "HGP1", "0.9900", "2", "180.00", "2A3HPD, from PROT phenol, cacha"}, {"CG2R61", "CG2R61", "OG3R60", "CG2R61", "0.7600", "2", "0.00", "FEOZ, phenoxazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "SG311", "CG2R61", "1.7500", "2", "0.00", "FETZ, phenothiazine fit_dihedral, erh"}, {"CG2R61", "CG2R61", "SG3O1", "OG2P1", "0.0040", "6", "0.00", "benzene sulfonic acid anion, og"}, {"CG2R61", "CG2R61", "SG3O2", "NG311", "0.2200", "2", "0.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG2R61", "CG2R61", "SG3O2", "NG321", "0.3500", "2", "0.00", "BSAM, benzenesulfonamide, xxwy"}, {"CG2R61", "CG2R61", "SG3O2", "OG2P1", "0.0000", "6", "0.00", "BSAM, benzenesulfonamide and other sulfonamides, xxwy"}, {"CG2O1", "CG2R62", "CG2R62", "CG2R62", "3.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2O1", "CG2R62", "CG2R62", "NG2R61", "2.5000", "2", "180.00", "NA ppi, jjp1/adm jr. 7/95"}, {"CG2O1", "CG2R62", "CG2R62", "HGR63", "1.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "CG2R62", "CG2R61", "2.5000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R62", "CG2R62", "2.0000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R62", "CG2R63", "3.7000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R62", "NG2R61", "3.5000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R62", "NG2R62", "3.1000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R62", "CG2R62", "OG3R60", "3.9000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R61", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R62", "CG2R62", "6.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "CG2R62", "CG2R63", "3.0000", "2", "180.00", "2PYO, 2-Pyridone, xxwy"}, {"CG2R62", "CG2R62", "CG2R62", "NG2R61", "7.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "CG2R62", "NG2R62", "1.2000", "2", "180.00", "5FOP, PYRH; from CG2R61 CG2R61 CG2R61 NG2R62, PYRD, PYRM and CG2R61 CG2R61 CG2R61 NG2R60, PYR1; yxu"}, {"CG2R62", "CG2R62", "CG2R62", "NG2R67", "3.5000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R61 CG2R62 CG2R62 NG2R61, YTHY; isg"}, {"CG2R62", "CG2R62", "CG2R62", "OG3R60", "0.4000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "2PYO, 2-Pyridone, xxwy"}, {"CG2R62", "CG2R62", "CG2R62", "HGR63", "1.0000", "2", "180.00", "NA bases"}, {"CG2R63", "CG2R62", "CG2R62", "CG2R67", "3.7000", "2", "180.00", "pyo3b , from CG2R61 CG2R62 CG2R62 CG2R63, penalty= 0.5"}, {"CG2R63", "CG2R62", "CG2R62", "NG2R61", "3.0000", "2", "180.00", "NA T"}, {"CG2R63", "CG2R62", "CG2R62", "NG2R62", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R63", "CG2R62", "CG2R62", "NG2R67", "3.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R63 CG2R62 CG2R62 NG2R61; isg"}, {"CG2R63", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "NA bases"}, {"CG2R64", "CG2R62", "CG2R62", "NG2R61", "6.0000", "2", "180.00", "NA C"}, {"CG2R64", "CG2R62", "CG2R62", "HGR62", "4.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"CG2R67", "CG2R62", "CG2R62", "NG2R61", "3.5000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R62 NG2R61, penalty= 0.5"}, {"CG2R67", "CG2R62", "CG2R62", "HGR62", "1.0000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R62 HGR62, penalty= 0.5"}, {"CG2R67", "CG2R62", "CG2R62", "HGR63", "1.0000", "2", "180.00", "PIUB , from CG2R61 CG2R62 CG2R62 HGR62, penalty= 1.5"}, {"CG331", "CG2R62", "CG2R62", "NG2R61", "4.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"CG331", "CG2R62", "CG2R62", "HGR62", "4.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"NG2R61", "CG2R62", "CG2R62", "HGR62", "3.4000", "2", "180.00", "NA C"}, {"NG2R61", "CG2R62", "CG2R62", "HGR63", "7.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"NG2R62", "CG2R62", "CG2R62", "HGR62", "6.0000", "2", "180.00", "43HPY, 4(3H)-pyrimidinone; from NG2R62 CG2R61 CG2R61 HGR62; isg"}, {"NG2R62", "CG2R62", "CG2R62", "HGR63", "1.1000", "2", "180.00", "PYRH ,6.0000 2 180.00 ! from NG2R62 CG2R62 CG2R62 HGR62, penalty= 1"}, {"NG2R67", "CG2R62", "CG2R62", "HGR62", "3.4000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R61 CG2R62 CG2R62 HGR62; isg"}, {"HGR62", "CG2R62", "CG2R62", "HGR62", "3.0000", "2", "180.00", "NA U"}, {"HGR63", "CG2R62", "CG2R62", "HGR63", "2.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "CG2R63", "NG2R61", "1.8000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "CG2R63", "SG2D1", "4.5000", "2", "180.00", "YT2S, 3,4-dihydro-4-thioxo-2(1H)-quinazolinone; from CG2R61 CG2R61 CG2R61 SG311, FETZ; isg"}, {"CG2R62", "CG2R62", "CG2R63", "CG2R62", "1.6000", "2", "180.00", "4PYO, 4(1H)-pyridinone, isg"}, {"CG2R62", "CG2R62", "CG2R63", "NG2R61", "1.8000", "2", "180.00", "NA T"}, {"CG2R62", "CG2R62", "CG2R63", "NG2R67", "1.8000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R61 CG2R62 CG2R63 NG2R61, YTHY; isg"}, {"CG2R62", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "NA bases"}, {"CG2R62", "CG2R62", "CG2R63", "OG3R60", "0.4000", "2", "180.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "CG2R63", "SG2D1", "4.5000", "2", "180.00", "YT2S, 3,4-dihydro-4-thioxo-2(1H)-quinazolinone; from CG2R61 CG2R61 CG2R61 SG311, FETZ; isg"}, {"CG2R67", "CG2R62", "CG2R63", "NG2R61", "1.8000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R63 NG2R61, penalty= 0.5"}, {"CG2R67", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "pyo2b , from CG2R61 CG2R62 CG2R63 OG2D4, penalty= 0.5"}, {"CG331", "CG2R62", "CG2R63", "NG2R61", "5.6000", "2", "180.00", "NA T"}, {"CG331", "CG2R62", "CG2R63", "OG2D4", "1.0000", "2", "180.00", "NA bases"}, {"HGR62", "CG2R62", "CG2R63", "CG2R62", "0.5000", "2", "180.00", "4PYO, 4(1H)-pyridinone, isg"}, {"HGR62", "CG2R62", "CG2R63", "NG2R61", "1.0000", "2", "180.00", "NA bases"}, {"HGR62", "CG2R62", "CG2R63", "NG2R67", "0.8000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from NG2R61 CG2R61 CG2R61 HGR61 , YTS2; isg"}, {"HGR62", "CG2R62", "CG2R63", "OG2D4", "6.0000", "2", "180.00", "NA U"}, {"HGR62", "CG2R62", "CG2R63", "OG3R60", "2.4000", "2", "180.00", "RIN, coumarin, isg"}, {"HGR62", "CG2R62", "CG2R63", "SG2D1", "2.4000", "2", "180.00", "URA4S, 3,4-dihydro-4-thioxo-2(1H)-pyrimidinone; from SG311 CG2R61 CG2R61 HGR61; isg"}, {"CG2R62", "CG2R62", "CG2R64", "NG2R62", "0.6000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R62", "CG2R64", "NG2S3", "2.0000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R62", "CG2R64", "NG301", "3.1000", "2", "180.00", "TMC, from 4MC, yxu"}, {"HGR62", "CG2R62", "CG2R64", "NG2R62", "3.4000", "2", "180.00", "NA C"}, {"HGR62", "CG2R62", "CG2R64", "NG2S3", "2.0000", "2", "180.00", "NA C"}, {"HGR62", "CG2R62", "CG2R64", "NG301", "0.0000", "2", "180.00", "TMC, from 4MC, yxu"}, {"CG2R62", "CG2R62", "CG2R67", "CG2R62", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 6"}, {"CG2R62", "CG2R62", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R67, penalty= 5.5"}, {"CG2R63", "CG2R62", "CG2R67", "CG2R62", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 8.5"}, {"CG2R63", "CG2R62", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "pyo2b , from CG2R61 CG2R61 CG2R67 CG2R67, penalty= 8"}, {"NG2R61", "CG2R62", "CG2R67", "CG2R62", "1.2000", "2", "180.00", "pyo3b , from NG2R60 CG2R61 CG2R67 CG2R61, penalty= 27.5"}, {"NG2R61", "CG2R62", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "pyo3b , from NG2R60 CG2R61 CG2R67 CG2R67, penalty= 27"}, {"NG2R62", "CG2R62", "CG2R67", "CG2R62", "1.2000", "2", "180.00", "PYRF , from NG2R60 CG2R61 CG2R67 CG2R61, penalty= 6.5"}, {"NG2R62", "CG2R62", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "PYRF , from NG2R60 CG2R61 CG2R67 CG2R67, penalty= 6"}, {"HGR62", "CG2R62", "CG2R67", "CG2R62", "4.2000", "2", "180.00", "pyo2b , from HGR62 CG2R61 CG2R67 CG2R61, penalty= 5.5"}, {"HGR62", "CG2R62", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "pyo2b , from HGR62 CG2R61 CG2R67 CG2R67, penalty= 5"}, {"HGR63", "CG2R62", "CG2R67", "CG2R62", "4.2000", "2", "180.00", "PIUB , from HGR62 CG2R61 CG2R67 CG2R61, penalty= 6.5"}, {"HGR63", "CG2R62", "CG2R67", "CG2R67", "4.2000", "2", "180.00", "PIUB , from HGR62 CG2R61 CG2R67 CG2R67, penalty= 6"}, {"CG2R62", "CG2R62", "CG331", "HGA3", "0.4600", "3", "0.00", "NA T"}, {"CG2R63", "CG2R62", "CG331", "HGA3", "0.4600", "3", "0.00", "NA T"}, {"CG2R61", "CG2R62", "NG2R61", "CG2R63", "0.6000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R61", "CG2R62", "NG2R61", "HGP1", "1.0000", "2", "180.00", "YTHY, 2,4(1H,3H)-quinazolinedione, isg"}, {"CG2R62", "CG2R62", "NG2R61", "CG2R62", "4.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R62", "CG2R62", "NG2R61", "CG2R63", "0.6000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R62", "NG2R61", "CG331", "11.0000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"CG2R62", "CG2R62", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"CG2R62", "CG2R62", "NG2R61", "CG3C53", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"CG2R62", "CG2R62", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA bases"}, {"CG2R62", "CG2R62", "NG2R61", "HGP1", "1.0000", "2", "180.00", "NA base"}, {"CG2R62", "CG2R62", "NG2R61", "HGP2", "1.0000", "2", "180.00", "NA base"}, {"CG2R67", "CG2R62", "NG2R61", "CG2R62", "4.0000", "2", "180.00", "PYRF , from CG2R62 CG2R62 NG2R61 CG2R62, penalty= 1.5"}, {"CG2R67", "CG2R62", "NG2R61", "CG2R63", "0.6000", "2", "180.00", "pyo3b , from CG2R61 CG2R62 NG2R61 CG2R63, penalty= 0.5"}, {"CG2R67", "CG2R62", "NG2R61", "HGP1", "1.0000", "2", "180.00", "pyo3b , from CG2R61 CG2R62 NG2R61 HGP1, penalty= 0.5"}, {"CG2R67", "CG2R62", "NG2R61", "HGP2", "1.0000", "2", "180.00", "PYRF , from CG2R62 CG2R62 NG2R61 HGP2, penalty= 1.5"}, {"NG2R62", "CG2R62", "NG2R61", "CG2R62", "0.1500", "2", "180.00", "PYRH ,0.2000 2 180.00 ! from NG2R62 CG2R64 NG2R61 CG2R63, penalty= 17"}, {"NG2R62", "CG2R62", "NG2R61", "HGP2", "3.2000", "2", "180.00", "PYRH ,3.6000 2 180.00 ! from NG2R62 CG2R64 NG2R61 HGP1, penalty= 18"}, {"HGR62", "CG2R62", "NG2R61", "CG2R62", "5.6000", "2", "180.00", "4PYO, 4(1H)-pyridinone, isg"}, {"HGR62", "CG2R62", "NG2R61", "CG2R63", "4.6000", "2", "180.00", "NA C"}, {"HGR62", "CG2R62", "NG2R61", "CG331", "0.3000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"HGR62", "CG2R62", "NG2R61", "CG3C51", "0.3000", "2", "180.00", "NA, glycosyl linkage"}, {"HGR62", "CG2R62", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA bases"}, {"HGR62", "CG2R62", "NG2R61", "HGP1", "1.2000", "2", "180.00", "adjusted for 2PYO,URAC,4PYO, kevo,isg,xxwy 8/13"}, {"HGR63", "CG2R62", "NG2R61", "CG2R62", "7.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"HGR63", "CG2R62", "NG2R61", "CG3C53", "1.0000", "2", "180.00", "NA base"}, {"HGR63", "CG2R62", "NG2R61", "HGP2", "3.0000", "2", "180.00", "NA nad/ppi, jjp1/adm jr. 7/95"}, {"CG2R61", "CG2R62", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R62", "CG2R62", "NG2R62", "CG2R62", "2.7000", "2", "180.00", "PYRH ,0.5000 2 180.00 ! from CG2R62 CG2R62 NG2R62 CG2R64, penalty= 2.5"}, {"CG2R62", "CG2R62", "NG2R62", "CG2R64", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R67", "CG2R62", "NG2R62", "CG2R62", "2.0000", "2", "180.00", "PYRF , from CG2R61 CG2R62 NG2R62 CG2R64, penalty= 3"}, {"NG2R61", "CG2R62", "NG2R62", "CG2R62", "3.0000", "2", "180.00", "PYRH ,4.0000 2 180.00 ! from NG2R61 CG2R64 NG2R62 CG2R62, penalty= 15"}, {"HGR62", "CG2R62", "NG2R62", "CG2R64", "7.3000", "2", "180.00", "43HPY, 4(3H)-pyrimidinone; from HGR62 CG2R61 NG2R62 CG2R64; isg"}, {"HGR63", "CG2R62", "NG2R62", "CG2R62", "7.4000", "2", "180.00", "PYRH ,7.3000 2 180.00 ! from HGR62 CG2R62 NG2R62 CG2R64, penalty= 3.5"}, {"CG2R62", "CG2R62", "NG2R67", "CG2R62", "4.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 NG2R61 CG2R62; isg"}, {"CG2R62", "CG2R62", "NG2R67", "CG2R63", "0.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R62 NG2R61 CG2R63, NA; isg"}, {"CG2R62", "CG2R62", "NG2R67", "CG2R67", "4.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 NG2R61 CG2R62; isg"}, {"HGR62", "CG2R62", "NG2R67", "CG2R62", "2.8000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from NG2R60 CG2R61 CG2R61 HGR61; isg"}, {"HGR62", "CG2R62", "NG2R67", "CG2R63", "4.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from HGR62 CG2R62 NG2R61 CG2R63, NA; isg"}, {"HGR62", "CG2R62", "NG2R67", "CG2R67", "1.0000", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone; from CG2R62 CG2R62 CG2R62 HGR62; isg"}, {"CG2R61", "CG2R62", "OG3R60", "CG2R63", "0.7600", "2", "0.00", "RIN, coumarin, isg"}, {"CG2R62", "CG2R62", "OG3R60", "CG2R63", "0.9400", "2", "0.00", "RIN, coumarin, isg"}, {"NG2R61", "CG2R63", "CG2RC0", "CG2RC0", "0.2000", "2", "180.00", "NA G"}, {"NG2R61", "CG2R63", "CG2RC0", "NG2R50", "2.0000", "2", "180.00", "NA G"}, {"OG2D4", "CG2R63", "CG2RC0", "CG2RC0", "14.0000", "2", "180.00", "NA G"}, {"OG2D4", "CG2R63", "CG2RC0", "NG2R50", "0.0000", "2", "180.00", "NA G"}, {"CG2R61", "CG2R63", "NG2R61", "CG2R63", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R61", "CG2R63", "NG2R61", "CG2R64", "1.5000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from CG2R62 CG2R63 NG2R61 CG2R63; isg"}, {"CG2R61", "CG2R63", "NG2R61", "HGP1", "4.8000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R62", "CG2R63", "NG2R61", "CG2R62", "1.5000", "2", "180.00", "2PYO, 2-Pyridone, xxwy"}, {"CG2R62", "CG2R63", "NG2R61", "CG2R63", "1.5000", "2", "180.00", "NA U"}, {"CG2R62", "CG2R63", "NG2R61", "CG2R64", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R62", "CG2R63", "NG2R61", "HGP1", "4.8000", "2", "180.00", "NA T"}, {"CG2RC0", "CG2R63", "NG2R61", "CG2R64", "0.2000", "2", "180.00", "NA G"}, {"CG2RC0", "CG2R63", "NG2R61", "HGP1", "3.6000", "2", "180.00", "NA G"}, {"NG2R61", "CG2R63", "NG2R61", "CG2R61", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"NG2R61", "CG2R63", "NG2R61", "CG2R62", "1.5000", "2", "180.00", "NA U"}, {"NG2R61", "CG2R63", "NG2R61", "CG2R63", "3.0000", "2", "180.00", "NA T"}, {"NG2R61", "CG2R63", "NG2R61", "CG331", "11.0000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"NG2R61", "CG2R63", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R61", "CG2R63", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA base"}, {"NG2R61", "CG2R63", "NG2R61", "HGP1", "3.3000", "2", "180.00", "NAMODEL cytosine tautomer"}, {"NG2R62", "CG2R63", "NG2R61", "CG2R62", "0.6000", "2", "180.00", "NA C"}, {"NG2R62", "CG2R63", "NG2R61", "CG331", "11.0000", "2", "180.00", "CYT, BTMC,...; not optimized; yxu"}, {"NG2R62", "CG2R63", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R62", "CG2R63", "NG2R61", "CG3RC1", "0.9000", "2", "180.00", "NA bases"}, {"NG2R67", "CG2R63", "NG2R61", "CG2R61", "1.5000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from NG2R61 CG2R63 NG2R61 CG2R62, NA; isg"}, {"NG2R67", "CG2R63", "NG2R61", "CG2R62", "1.5000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 CG2R62, NA; isg"}, {"NG2R67", "CG2R63", "NG2R61", "HGP1", "3.3000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 HGP1, NA; isg"}, {"OG2D4", "CG2R63", "NG2R61", "CG2R62", "1.6000", "2", "180.00", "NA C"}, {"OG2D4", "CG2R63", "NG2R61", "CG2R63", "0.9000", "2", "180.00", "NA bases"}, {"OG2D4", "CG2R63", "NG2R61", "CG2R64", "14.0000", "2", "180.00", "NA G"}, {"OG2D4", "CG2R63", "NG2R61", "CG331", "11.0000", "2", "180.00", "1MTH, 1-Methyl-Thymine, kevo for gsk/ibm"}, {"OG2D4", "CG2R63", "NG2R61", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"OG2D4", "CG2R63", "NG2R61", "CG3RC1", "1.0000", "2", "180.00", "NA base"}, {"OG2D4", "CG2R63", "NG2R61", "HGP1", "0.0000", "2", "180.00", "NA G"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R61", "1.6000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R62", "1.6000", "2", "180.00", "YT4S, 2,3-dihydro-2-thioxo-4(1H)-quinazolinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R63", "0.9000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"SG2D1", "CG2R63", "NG2R61", "CG2R64", "14.0000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from OG2D4 CG2R63 NG2R61 CG2R64; isg"}, {"SG2D1", "CG2R63", "NG2R61", "HGP1", "0.5000", "2", "180.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"NG2R61", "CG2R63", "NG2R62", "CG2R64", "0.6000", "2", "180.00", "NA C"}, {"OG2D4", "CG2R63", "NG2R62", "CG2R64", "1.6000", "2", "180.00", "NA C"}, {"CG2R61", "CG2R63", "NG2R67", "CG2R63", "1.5000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from CG2R62 CG2R63 NG2R61 CG2R63, NA; isg"}, {"CG2R61", "CG2R63", "NG2R67", "CG2R64", "1.5000", "2", "180.00", "43HSPP, 3-phenyl-4(3H)-pyrimidinethione; from 43HSPY; isg"}, {"CG2R61", "CG2R63", "NG2R67", "CG2R67", "1.5000", "2", "180.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from CG2R62 CG2R63 NG2R67 CG2R67; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R62", "1.5000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R63 NG2R61 CG2R62, 2PYO; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R63", "1.5000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from CG2R62 CG2R63 NG2R61 CG2R63, NA; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R64", "0.5000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from CG2R62 CG2R63 NG2R61 CG2R64, TC243C; isg"}, {"CG2R62", "CG2R63", "NG2R67", "CG2R67", "1.5000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R62 CG2R63 NG2R61 CG2R62, 2PYO; isg"}, {"NG2R61", "CG2R63", "NG2R67", "CG2R63", "3.0000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 CG2R63, NA; isg"}, {"NG2R61", "CG2R63", "NG2R67", "CG2R67", "11.0000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from NG2R61 CG2R63 NG2R61 CG3C51, NA; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R62", "1.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R63", "0.9000", "2", "180.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from OG2D4 CG2R63 NG2R61 CG2R63, NA; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R64", "14.0000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from OG2D4 CG2R63 NG2R61 CG2R64, TC243C; isg"}, {"OG2D4", "CG2R63", "NG2R67", "CG2R67", "1.6000", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"SG2D1", "CG2R63", "NG2R67", "CG2R63", "0.9000", "2", "180.00", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from CG2R63 NG2R61 CG2R63 SG2D1, YTS2; isg"}, {"SG2D1", "CG2R63", "NG2R67", "CG2R64", "0.9000", "2", "180.00", "43HSPP, 3-phenyl-4(3H)-pyrimidinethione; from SG2D1 CG2R63 NG2R61 CG2R63, YTS2; isg"}, {"SG2D1", "CG2R63", "NG2R67", "CG2R67", "1.6000", "2", "180.00", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from OG2D4 CG2R63 NG2R61 CG2R62, NA; isg"}, {"CG2R62", "CG2R63", "OG3R60", "CG2R62", "0.6000", "2", "0.00", "RIN, coumarin, isg"}, {"OG2D4", "CG2R63", "OG3R60", "CG2R62", "0.7600", "2", "0.00", "RIN, coumarin, isg"}, {"NG2R62", "CG2R64", "CG2RC0", "CG2RC0", "1.8000", "2", "180.00", "NA A"}, {"NG2R62", "CG2R64", "CG2RC0", "NG2R50", "2.0000", "2", "180.00", "NA A"}, {"NG2S3", "CG2R64", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "NA A"}, {"NG2S3", "CG2R64", "CG2RC0", "NG2R50", "0.0000", "2", "180.00", "NA A"}, {"NG301", "CG2R64", "CG2RC0", "CG2RC0", "4.0000", "2", "180.00", "M6A, yxu"}, {"NG301", "CG2R64", "CG2RC0", "NG2R50", "4.7000", "2", "180.00", "M6A, yxu"}, {"CG2R61", "CG2R64", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PYR1, pyridine, kevo"}, {"NG2S1", "CG2R64", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "2AMP, 2-Amino pyridine, cacha (verified by kevo)"}, {"NG2R62", "CG2R64", "NG2R61", "CG2R63", "0.2000", "2", "180.00", "NA G"}, {"NG2R62", "CG2R64", "NG2R61", "HGP1", "3.6000", "2", "180.00", "NA G"}, {"NG2S3", "CG2R64", "NG2R61", "CG2R63", "4.0000", "2", "180.00", "NA G"}, {"NG2S3", "CG2R64", "NG2R61", "HGP1", "0.0000", "2", "180.00", "NA G"}, {"SG311", "CG2R64", "NG2R61", "CG2R63", "4.0000", "2", "180.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from NG2S3 CG2R64 NG2R61 CG2R63; isg"}, {"SG311", "CG2R64", "NG2R61", "HGP1", "0.0000", "2", "180.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from NG2S3 CG2R64 NG2R61 HGP1; isg"}, {"HGR62", "CG2R64", "NG2R61", "CG2R63", "5.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"HGR62", "CG2R64", "NG2R61", "HGP1", "0.5000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"CG2R61", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "18NFD, 1,8-naphthyridine, erh"}, {"CG2R61", "CG2R64", "NG2R62", "CG2R64", "2.0000", "2", "0.00", "PTID, pteridine, erh"}, {"CG2R62", "CG2R64", "NG2R62", "CG2R63", "6.0000", "2", "180.00", "NA C"}, {"CG2RC0", "CG2R64", "NG2R62", "CG2R64", "1.8000", "2", "180.00", "NA A"}, {"NG2R61", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "43HSPY, 4(3H)-pyrimidinethione; from NG2R61 CG2R64 NG2R62 CG2RC0; isg"}, {"NG2R61", "CG2R64", "NG2R62", "CG2R62", "4.0000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"NG2R61", "CG2R64", "NG2R62", "CG2RC0", "2.0000", "2", "180.00", "NA G"}, {"NG2R62", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "PYRM, pyrimidine"}, {"NG2R62", "CG2R64", "NG2R62", "CG2R64", "1.8000", "2", "180.00", "NA A"}, {"NG2R62", "CG2R64", "NG2R62", "CG2RC0", "2.0000", "2", "180.00", "NAMODEL guanine tautomer"}, {"NG2R62", "CG2R64", "NG2R62", "NG2R62", "0.5000", "2", "180.00", "TRIB, triazine124"}, {"NG2R67", "CG2R64", "NG2R62", "CG2R61", "2.0000", "2", "180.00", "43HSPP, 3-phenyl-4(3H)-pyrimidinethione; from NG2R62 CG2R64 NG2R62 CG2R61, PYRM; isg"}, {"NG2R67", "CG2R64", "NG2R62", "CG2R62", "4.0000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R61 CG2R64 NG2R62 CG2R62, TC243C; isg"}, {"NG2S3", "CG2R64", "NG2R62", "CG2R63", "2.0000", "2", "180.00", "NA C"}, {"NG2S3", "CG2R64", "NG2R62", "CG2R64", "1.8000", "2", "180.00", "NA A"}, {"NG2S3", "CG2R64", "NG2R62", "CG2RC0", "4.0000", "2", "180.00", "NA G"}, {"NG301", "CG2R64", "NG2R62", "CG2R63", "3.1000", "2", "180.00", "TMC, from 4MC, yxu"}, {"NG301", "CG2R64", "NG2R62", "CG2R64", "3.8000", "2", "180.00", "M6A, yxu"}, {"SG311", "CG2R64", "NG2R62", "CG2R61", "10.2000", "2", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine; from NG2S1 CG2R64 NG2R60 CG2R61; isg"}, {"SG311", "CG2R64", "NG2R62", "CG2R62", "2.0000", "2", "180.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone; from NG2S3 CG2R64 NG2R62 CG2R63; isg"}, {"HGR62", "CG2R64", "NG2R62", "CG2R61", "7.3000", "2", "180.00", "PYRM, pyrimidine"}, {"HGR62", "CG2R64", "NG2R62", "CG2R62", "7.3000", "2", "180.00", "TC243C, 4(3H)-quinazolinone, isg"}, {"HGR62", "CG2R64", "NG2R62", "CG2R64", "8.5000", "2", "180.00", "NA A"}, {"HGR62", "CG2R64", "NG2R62", "CG2RC0", "8.5000", "2", "180.00", "NA A"}, {"HGR62", "CG2R64", "NG2R62", "NG2R62", "6.0000", "2", "180.00", "TRIB, triazine124"}, {"NG2R62", "CG2R64", "NG2R67", "CG2R63", "0.2000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R62 CG2R64 NG2R61 CG2R63, TC243C; isg"}, {"NG2R62", "CG2R64", "NG2R67", "CG2R67", "0.2000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from NG2R62 CG2R64 NG2R61 CG2R63, TC243C; isg"}, {"HGR62", "CG2R64", "NG2R67", "CG2R63", "5.5000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from HGR62 CG2R64 NG2R61 CG2R63, TC243C; isg"}, {"HGR62", "CG2R64", "NG2R67", "CG2R67", "1.0000", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone; from HGR62 CG2R62 NG2R67 CG2R67, TC243C; isg"}, {"CG2R61", "CG2R64", "NG2S1", "CG2O1", "1.2000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, cacha ! not fitted because cacha's original atom typing didn't allow it ==> re-optimize"}, {"CG2R61", "CG2R64", "NG2S1", "HGP1", "0.5000", "2", "180.00", "2AMP, 2-amino pyridine, from PACP, cacha ! this one does not require re-optimization"}, {"NG2R60", "CG2R64", "NG2S1", "CG2O1", "1.5000", "1", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"NG2R60", "CG2R64", "NG2S1", "CG2O1", "2.6000", "2", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"NG2R60", "CG2R64", "NG2S1", "CG2O1", "0.1800", "3", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"NG2R60", "CG2R64", "NG2S1", "HGP1", "0.5000", "2", "180.00", "2AMP, 2-Amino pyridine, dihedral fit by cacha"}, {"CG2R62", "CG2R64", "NG2S3", "HGP4", "2.0000", "2", "180.00", "NA 5mc, adm jr. 9/9/93"}, {"CG2RC0", "CG2R64", "NG2S3", "HGP4", "0.5000", "2", "180.00", "NA A"}, {"NG2R61", "CG2R64", "NG2S3", "HGP4", "1.2000", "2", "180.00", "NA G"}, {"NG2R62", "CG2R64", "NG2S3", "HGP4", "1.0000", "2", "180.00", "NA C"}, {"CG2R62", "CG2R64", "NG301", "CG331", "1.9800", "2", "180.00", "TMC, yxu, pyramid can be increased by adding term of 4-fold and 0.0-phase"}, {"CG2RC0", "CG2R64", "NG301", "CG331", "2.8500", "2", "180.00", "M6A, yxu"}, {"CG2RC0", "CG2R64", "NG301", "CG331", "0.9000", "4", "0.00", "M6A, yxu, pyramid can be increased by increasing this term"}, {"NG2R62", "CG2R64", "NG301", "CG331", "1.9800", "2", "180.00", "TMC, yxu"}, {"NG2R61", "CG2R64", "SG311", "CG331", "1.4500", "1", "0.00", "4O2SM, 2-(methylthio)-4(3H)-pyrimidinone, isg"}, {"NG2R62", "CG2R64", "SG311", "CG331", "2.1200", "2", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine, isg"}, {"NG2R62", "CG2R64", "SG311", "CG331", "0.1900", "4", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine, isg"}, {"CG2R61", "CG2R66", "CG2R67", "CG2R61", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R67 CG2R61, penalty= 5"}, {"CG2R61", "CG2R66", "CG2R67", "CG2R67", "3.1000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R67 CG2R67, penalty= 5"}, {"FGR1", "CG2R66", "CG2R67", "CG2R61", "4.5000", "2", "180.00", "PYO2F , from CG2R61 CG2R61 CG2R66 FGR1, penalty= 30"}, {"FGR1", "CG2R66", "CG2R67", "CG2R67", "1.0000", "2", "180.00", "PYO2F , from NG2R60 CG2R61 CG2R67 CG2R67, penalty= 89"}, {"CG2R61", "CG2R67", "CG2R67", "CG2R61", "0.8900", "2", "180.00", "BIPHENYL ANALOGS, peml"}, {"CG2R61", "CG2R67", "CG2R67", "CG2R62", "0.4600", "2", "180.00", "pyo2b ,tune the middle 180 from CG2R61 CG2R67 CG2R67 CG2R61, penalty= 0.5"}, {"CG2R61", "CG2R67", "CG2R67", "CG2R62", "0.2300", "4", "0.00", "low will down the two peaks;phs 4, 0 pyo2b , from CG2R61 CG2R67 CG2R67 CG2R61, penalty= 0.5"}, {"CG2R61", "CG2R67", "CG2R67", "CG2RC0", "2.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.3750", "1", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.9400", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.1900", "3", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2R67", "NG2R60", "0.1600", "4", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R62", "CG2R67", "CG2R67", "CG2R66", "0.4300", "2", "180.00", "compromise between pyo2f, pyo3f, piuf using weight on maxmin"}, {"CG2R62", "CG2R67", "CG2R67", "CG2R66", "0.1200", "4", "0.00", "compromise between pyo2f, pyo3f, piuf using weight on maxmin"}, {"CG2R62", "CG2R67", "CG2R67", "CG2R66", "0.0200", "6", "180.00", "compromise between pyo2f, pyo3f, piuf using weight on maxmin"}, {"CG2RC0", "CG2R67", "CG2R67", "CG2RC0", "1.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.3750", "1", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.9400", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.1900", "3", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"NG2R60", "CG2R67", "CG2R67", "NG2R60", "0.1600", "4", "0.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "CG2RC0", "CG2R61", "0.0500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "CG2RC0", "CG3C52", "6.7500", "2", "180.00", "FLRN, Fluorene, erh"}, {"CG2R61", "CG2R67", "CG2RC0", "NG2R51", "3.0000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2R67", "CG2RC0", "CG2R61", "3.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2R67", "CG2RC0", "CG3C52", "5.0000", "3", "180.00", "FLRN, Fluorene, erh"}, {"CG2R67", "CG2R67", "CG2RC0", "NG2R51", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2R67", "NG2R60", "CG2R61", "1.2000", "2", "180.00", "22BPY, 2,2'-bipyridine, from CG2R61 CG2R61 NG2R60 CG2R61, kevo"}, {"CG2R67", "CG2R67", "NG2R60", "CG2R61", "3.1000", "2", "180.00", "22BPY, 2,2'-bipyridine, kevo"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R62", "0.3700", "2", "180.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R62", "0.2700", "4", "0.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R62", "0.0200", "6", "0.00", "1PH4PO, 1-phenyl-4(1H)-pyridinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R63", "1.4500", "2", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from 1PH4PO; isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R63", "0.1400", "4", "180.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from 1PH4PO; isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R64", "0.3700", "2", "180.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone, isg"}, {"CG2R61", "CG2R67", "NG2R67", "CG2R64", "0.2600", "4", "0.00", "43PPY, 3-phenyl-4(3H)-pyrimidinone, isg"}, {"CG2R71", "CG2R71", "CG2R71", "CG2R71", "1.6000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2R71", "CG2RC7", "1.6000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2R71", "HGR71", "3.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2RC7", "CG2R71", "CG2R71", "HGR71", "4.2000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR71", "CG2R71", "CG2R71", "HGR71", "2.4000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2RC7", "CG2R51", "3.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2R71", "CG2RC7", "CG2RC7", "3.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR71", "CG2R71", "CG2RC7", "CG2R51", "3.1000", "2", "180.00", "AZUL, Azulene, kevo"}, {"HGR71", "CG2R71", "CG2RC7", "CG2RC7", "3.1000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG25C1", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C1", "CG2RC0", "CG2RC0", "NG2R51", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG25C2", "CG2RC0", "CG2RC0", "NG2R51", "1.0000", "2", "180.00", "MEOI, methyleneoxindole, kevo and xxwy"}, {"CG2R51", "CG2RC0", "CG2RC0", "CG2R51", "0.0000", "2", "180.00", "ISOI, isoindole, kevo"}, {"CG2R51", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "INDO/TRP (Kenno: 4.0 --> 1.5)"}, {"CG2R51", "CG2RC0", "CG2RC0", "CG3C52", "5.0000", "2", "180.00", "INDE, indene, kevo"}, {"CG2R51", "CG2RC0", "CG2RC0", "NG2R51", "6.5000", "2", "180.00", "INDO/TRP"}, {"CG2R51", "CG2RC0", "CG2RC0", "OG2R50", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R51", "CG2RC0", "CG2RC0", "SG2R50", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R52", "CG2RC0", "CG2RC0", "CG2R61", "1.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R52", "CG2RC0", "CG2RC0", "NG2R51", "12.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "CG2R61", "3.0000", "2", "180.00", "INDO/TRP"}, {"CG2R61", "CG2RC0", "CG2RC0", "CG3C52", "6.5000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG2R50", "1.5000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG2R51", "1.5000", "2", "180.00", "INDO/TRP (Kenno: 4.0 --> 1.5)"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG2R62", "0.0000", "2", "180.00", "PUR9, purine(N9H), kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "NG3C51", "6.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "OG2R50", "0.0000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2RC0", "CG2RC0", "OG3C51", "4.0000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2R61", "CG2RC0", "CG2RC0", "SG2R50", "0.0000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R63", "CG2RC0", "CG2RC0", "NG2R51", "10.0000", "2", "180.00", "NA G"}, {"CG2R63", "CG2RC0", "CG2RC0", "NG2R62", "2.0000", "2", "180.00", "NA G"}, {"CG2R64", "CG2RC0", "CG2RC0", "NG2R51", "7.0000", "2", "180.00", "NA A"}, {"CG2R64", "CG2RC0", "CG2RC0", "NG2R62", "2.0000", "2", "180.00", "NA A"}, {"CG3C52", "CG2RC0", "CG2RC0", "NG2R50", "6.5000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG3C52", "CG2RC0", "CG2RC0", "NG3C51", "6.0000", "2", "180.00", "INDI, indoline, kevo"}, {"NG2R50", "CG2RC0", "CG2RC0", "NG2R51", "10.0000", "2", "180.00", "NA G"}, {"NG2R50", "CG2RC0", "CG2RC0", "NG2R62", "7.0000", "2", "180.00", "NA A"}, {"NG2R50", "CG2RC0", "CG2RC0", "SG2R50", "4.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"NG2R51", "CG2RC0", "CG2RC0", "NG2R62", "8.5000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"OG3C51", "CG2RC0", "CG2RC0", "OG3C51", "7.7000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2R61", "CG2RC0", "CG3C52", "CG2R51", "0.9000", "3", "0.00", "INDE, indene, kevo"}, {"CG2R61", "CG2RC0", "CG3C52", "CG2R52", "3.5000", "3", "0.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "CG3C52", "CG2RC0", "0.9000", "3", "0.00", "FLRN, Fluorene, erh"}, {"CG2R61", "CG2RC0", "CG3C52", "CG3C52", "3.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "CG3C52", "HGA2", "0.5000", "3", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R67", "CG2RC0", "CG3C52", "CG2RC0", "0.7500", "3", "180.00", "FLRN, Fluorene, erh"}, {"CG2R67", "CG2RC0", "CG3C52", "HGA2", "0.5000", "3", "0.00", "FLRN, Fluorene, erh"}, {"CG2RC0", "CG2RC0", "CG3C52", "CG2R51", "1.0000", "3", "180.00", "INDE, indene, kevo"}, {"CG2RC0", "CG2RC0", "CG3C52", "CG2R52", "2.0000", "3", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "CG2RC0", "CG3C52", "CG3C52", "1.0300", "3", "180.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "CG3C52", "HGA2", "0.5000", "3", "0.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "NG2R50", "CG2R52", "4.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2R61", "CG2RC0", "NG2R50", "CG2R53", "15.0000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R63", "CG2RC0", "NG2R50", "CG2R53", "2.0000", "2", "180.00", "NA G"}, {"CG2R64", "CG2RC0", "NG2R50", "CG2R53", "2.0000", "2", "180.00", "NA A"}, {"CG2RC0", "CG2RC0", "NG2R50", "CG2R52", "4.0000", "2", "180.00", "3HIN, 3H-indole, kevo"}, {"CG2RC0", "CG2RC0", "NG2R50", "CG2R53", "6.0000", "2", "180.00", "NA G"}, {"NG2R62", "CG2RC0", "NG2R50", "CG2R53", "2.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "CG2R51", "1.5000", "2", "180.00", "NA bases"}, {"CG2R61", "CG2RC0", "NG2R51", "CG2R53", "19.0000", "2", "180.00", "ZIMI, benzimidazole, kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "CG2RC0", "0.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R61", "CG2RC0", "NG2R51", "NG2R50", "3.0000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R61", "CG2RC0", "NG2R51", "HGP1", "0.2000", "2", "180.00", "INDO/TRP"}, {"CG2R67", "CG2RC0", "NG2R51", "CG2RC0", "0.5000", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2R67", "CG2RC0", "NG2R51", "HGP1", "0.2500", "2", "180.00", "CRBZ, carbazole, erh"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG2R51", "1.5000", "2", "180.00", "NA bases"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG2R53", "6.0000", "2", "180.00", "NA G"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG331", "11.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"CG2RC0", "CG2RC0", "NG2R51", "CG3RC1", "1.2000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"CG2RC0", "CG2RC0", "NG2R51", "NG2R50", "6.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2RC0", "CG2RC0", "NG2R51", "HGP1", "0.8500", "2", "180.00", "INDO/TRP"}, {"NG2R62", "CG2RC0", "NG2R51", "CG2R53", "2.0000", "2", "180.00", "NA G"}, {"NG2R62", "CG2RC0", "NG2R51", "CG331", "11.0000", "2", "180.00", "9MAD, 9-Methyl-Adenine, kevo for gsk/ibm"}, {"NG2R62", "CG2RC0", "NG2R51", "CG3C51", "11.0000", "2", "180.00", "NA, glycosyl linkage"}, {"NG2R62", "CG2RC0", "NG2R51", "CG3RC1", "1.2000", "2", "180.00", "PYRIDINE pyridine, yin"}, {"NG2R62", "CG2RC0", "NG2R51", "HGP1", "1.2000", "2", "180.00", "NA G"}, {"CG2RC0", "CG2RC0", "NG2R62", "CG2R64", "0.2000", "2", "180.00", "NA G"}, {"NG2R50", "CG2RC0", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "PUR7, purine(N7H), kevo"}, {"NG2R51", "CG2RC0", "NG2R62", "CG2R64", "2.0000", "2", "180.00", "NA G"}, {"CG2R51", "CG2RC0", "NG2RC0", "CG2R51", "8.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R51", "CG2RC0", "NG2RC0", "CG2R61", "1.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG2RC0", "CG2R51", "1.0000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG2RC0", "CG2R61", "0.8000", "2", "180.00", "INDZ, indolizine, kevo"}, {"CG2R61", "CG2RC0", "NG3C51", "CG3C52", "4.0000", "2", "180.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "NG3C51", "HGP1", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "NG3C51", "CG3C52", "1.9600", "3", "0.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG2RC0", "NG3C51", "HGP1", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"CG2R61", "CG2RC0", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2RC0", "CG2RC0", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "ZFUR, benzofuran, kevo"}, {"CG2R61", "CG2RC0", "OG3C51", "CG3C52", "0.3000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi"}, {"CG2RC0", "CG2RC0", "OG3C51", "CG3C52", "0.3000", "2", "180.00", "ZDOL, 1,3-benzodioxole, pram and oashi and kevo"}, {"CG2R61", "CG2RC0", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2R61", "CG2RC0", "SG2R50", "CG2R53", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"CG2RC0", "CG2RC0", "SG2R50", "CG2R51", "8.5000", "2", "180.00", "ZTHP, benzothiophene, kevo"}, {"CG2RC0", "CG2RC0", "SG2R50", "CG2R53", "3.0000", "2", "180.00", "ZTHZ, benzothiazole, kevo"}, {"CG2R51", "CG2RC7", "CG2RC7", "CG2R51", "3.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R51", "CG2RC7", "CG2RC7", "CG2R71", "0.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2R71", "CG2RC7", "CG2RC7", "CG2R71", "0.0000", "2", "180.00", "AZUL, Azulene, kevo"}, {"CG2D1", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CHL1, Cholesterol from X CTL1 CTL1 X; also consistent with RETINOL TMCH"}, {"CG2D1", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2D1", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG311", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG331", "CG301", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG331", "CG301", "CG311", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG331", "CG301", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG2D1", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "CHL1, Cholesterol from X CTL1 CTL2 X; also consistent with RETINOL TMCH"}, {"CG2D1", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG2DC1", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG301", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG301", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG311", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG311", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "CHOLEST cholesterol reset to default by kevo"}, {"CG331", "CG301", "CG321", "CG321", "0.2000", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG301", "CG321", "CG331", "0.4400", "1", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG321", "CG331", "0.0200", "2", "180.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG321", "CG331", "0.7300", "3", "180.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "CG321", "HGA2", "0.1950", "3", "0.00", "RETINOL TMCH kevo: reset to default"}, {"OG301", "CG301", "CG321", "CG331", "0.8000", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"OG301", "CG301", "CG321", "HGA2", "0.1600", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG2D1", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "CHL1, Cholesterol from RETINOL TMCH (X CTL1 CTL3 X seems woefully inaccurate)"}, {"CG2DC1", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG2O3", "CG301", "CG331", "HGA3", "0.2000", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG311", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG321", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"CG331", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "RETINOL TMCH"}, {"OG301", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG302", "CG301", "CG331", "HGA3", "0.1600", "3", "0.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha reset to default by kevo"}, {"OG311", "CG301", "CG331", "HGA3", "0.1400", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CLGA3", "CG301", "CG331", "HGA3", "0.2700", "3", "0.00", "TCLE"}, {"BRGA3", "CG301", "CG331", "HGA3", "0.2600", "3", "0.00", "TBRE"}, {"CG2O3", "CG301", "OG301", "CG331", "0.2000", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG321", "CG301", "OG301", "CG331", "1.1500", "1", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG321", "CG301", "OG301", "CG331", "0.2300", "2", "180.00", "DMBU, dimethoxybutane, sna"}, {"CG321", "CG301", "OG301", "CG331", "0.4900", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG331", "CG301", "OG301", "CG331", "0.4000", "1", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG301", "CG331", "0.4900", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG301", "CG331", "0.5100", "1", "0.00", "DMOP, dimethoxypropane, sna"}, {"OG301", "CG301", "OG301", "CG331", "0.6700", "2", "0.00", "DMOP, dimethoxypropane, sna"}, {"OG301", "CG301", "OG301", "CG331", "0.2600", "3", "0.00", "DMOP, dimethoxypropane, sna"}, {"OG311", "CG301", "OG301", "CG331", "0.4100", "1", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG311", "CG301", "OG301", "CG331", "0.8900", "2", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG311", "CG301", "OG301", "CG331", "0.0500", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG302", "CG2O2", "0.0000", "3", "0.00", "AMGT, Alpha Methyl Gamma Tert Butyl Glu Acid CDCA Amide, cacha"}, {"CG2O3", "CG301", "OG311", "HGP1", "0.8200", "3", "180.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG311", "HGP1", "1.1300", "1", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG311", "HGP1", "0.1400", "2", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"CG331", "CG301", "OG311", "HGP1", "0.2400", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG311", "HGP1", "1.5500", "1", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG311", "HGP1", "1.1700", "2", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"OG301", "CG301", "OG311", "HGP1", "1.0700", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"FGA3", "CG302", "CG321", "OG311", "0.2500", "3", "0.00", "TFE, Trifluoroethanol"}, {"FGA3", "CG302", "CG321", "HGA2", "0.1580", "3", "0.00", "TFE, Trifluoroethanol"}, {"FGA3", "CG302", "CG331", "HGA3", "0.1580", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"CG2O1", "CG311", "CG311", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG311", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG311", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG311", "HGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG311", "CG311", "CG321", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG311", "CG331", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG311", "OG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG311", "HGA1", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG301", "CG311", "CG311", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG311", "CG321", "0.2000", "3", "0.00", "DCA, Deoxycholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG311", "CG3RC1", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG301", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG311", "CG311", "CG321", "0.5000", "4", "180.00", "NA bkb"}, {"CG311", "CG311", "CG311", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG311", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG311", "CG321", "0.5000", "4", "180.00", "NA, sugar"}, {"CG321", "CG311", "CG311", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG311", "NG2S1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG331", "CG311", "CG311", "NG2S1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG3RC1", "CG311", "CG311", "OG311", "0.6000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG311", "OG311", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG311", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugar"}, {"NG2S1", "CG311", "CG311", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG311", "HGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG311", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG314", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG314", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG314", "NG3P3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG314", "HGA1", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"CG331", "CG311", "CG314", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG314", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG314", "NG3P3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG314", "HGA1", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG311", "CG314", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG314", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG314", "NG3P3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG314", "HGA1", "0.1950", "3", "0.00", "NPROT N-terminal AA - standard parameter collided with A, sugar"}, {"CG2O1", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O1", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "SG301", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "SG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O2", "CG311", "CG321", "CG2O2", "0.2000", "3", "0.00", "576P, standard param"}, {"CG2O2", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"CG2O2", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "AMGA, Alpha Methyl Glu Acid CDCA Amide, cacha"}, {"CG2O3", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"CG2O3", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O3", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "SG301", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "SG311", "0.2000", "3", "0.00", "PROT C-terminal AA - standard parameter"}, {"CG2O3", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2R61", "CG311", "CG321", "CG2O3", "0.0400", "3", "0.00", "FBIC(R/S), Fatty Binding Inhibitior C, cacha"}, {"CG2R61", "CG311", "CG321", "HGA2", "0.0000", "3", "0.00", "Slack parameter from difluorotoluene picked up by FBIC ==> RE-OPTIMIZE !!!"}, {"CG301", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "DCA, Deoxycholic Acid, cacha, 03/06"}, {"CG301", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 03/06 reset to default by kevo"}, {"CG311", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "CHL1, Cholesterol"}, {"CG311", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, reset to default by kevo"}, {"CG311", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "CHL1, Cholesterol reset to default by kevo"}, {"CG311", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG314", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"CG321", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG321", "CG324", "0.2000", "3", "0.00", "G4MP, Gamma-4-Methyl piperidine Glu Acid CDCA Amide, cacha reset to default by kevo"}, {"CG321", "CG311", "CG321", "NG2S1", "0.2000", "3", "0.00", "G4MP, Gamma-4-Methyl piperidine Glu Acid CDCA Amide, cacha"}, {"CG321", "CG311", "CG321", "OG302", "0.2000", "3", "180.00", "NA, sugar"}, {"CG321", "CG311", "CG321", "OG303", "0.2000", "3", "180.00", "NA, sugar"}, {"CG321", "CG311", "CG321", "OG311", "0.2000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG321", "HGA2", "0.1950", "1", "0.00", "NA, sugar"}, {"CG324", "CG311", "CG321", "CG321", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG324", "CG311", "CG321", "NG2S1", "0.2000", "3", "0.00", "3MSB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG324", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG331", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "FBIC(R/S), Fatty Binding Inhibitior C"}, {"CG331", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "FBIF, Fatty acid Binding protein Inhibitor F, cacha"}, {"CG331", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "CG314", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG321", "OG302", "0.2000", "3", "0.00", "LIPID methyl acetate"}, {"CG331", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 02/08 reset to default by kevo"}, {"CG3C51", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3RC1", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "CHL1, Cholesterol"}, {"CG3RC1", "CG311", "CG321", "CG311", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG321", "CG321", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "CG321", "HGA2", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG311", "CG321", "CG2O2", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"NG2R53", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"NG2R53", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "drug design project, xxwy"}, {"NG2S1", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG2R61", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "CG324", "0.2000", "3", "0.00", "G4P, 01OH02"}, {"NG2S1", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "SG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG2S1", "CG311", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG302", "CG311", "CG321", "OG302", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG302", "CG311", "CG321", "OG303", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG302", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG321", "CG311", "2.0000", "3", "180.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG311", "0.4000", "5", "0.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG311", "0.8000", "6", "0.00", "NA, sugar"}, {"OG311", "CG311", "CG321", "CG321", "0.5000", "1", "180.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG311", "CG321", "CG321", "0.7000", "2", "0.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG311", "CG321", "CG321", "0.4000", "3", "0.00", "NA abasic nucleoside"}, {"OG311", "CG311", "CG321", "CG321", "0.4000", "5", "0.00", "NA abasic nucleoside"}, {"OG311", "CG311", "CG321", "CG331", "0.1400", "3", "0.00", "2BOH, 2-butanol, kevo for gsk/ibm"}, {"OG311", "CG311", "CG321", "OG303", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG311", "CG321", "HGA2", "0.1950", "3", "180.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "CG2D1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2O2", "0.2000", "3", "0.00", "576P, standard param"}, {"HGA1", "CG311", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HGA1", "CG311", "CG321", "CG311", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "CG314", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG311", "CG321", "CG321", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"HGA1", "CG311", "CG321", "CG324", "0.1950", "3", "0.00", "G4MP, 01OH03, cacha"}, {"HGA1", "CG311", "CG321", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG311", "CG321", "NG2S1", "0.2000", "3", "0.00", "G4MP, 01OH03, cacha"}, {"HGA1", "CG311", "CG321", "OG302", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "OG303", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "OG311", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG311", "CG321", "SG311", "0.1950", "3", "0.00", "PROTNA sahc"}, {"HGA1", "CG311", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG311", "CG324", "NG3P2", "0.1950", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"CG321", "CG311", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"NG2S1", "CG311", "CG324", "NG3P2", "0.1950", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"NG2S1", "CG311", "CG324", "HGA2", "0.2000", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"OG311", "CG311", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"OG311", "CG311", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA1", "CG311", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA1", "CG311", "CG324", "NG3P2", "0.1950", "3", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"HGA1", "CG311", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG2O1", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG311", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2R61", "CG311", "CG331", "HGA3", "0.0400", "3", "0.00", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG311", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG311", "CG331", "HGA3", "0.1950", "3", "0.00", "PROTNA alkanes phospho-ser/thr"}, {"CG3C51", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"NG2S1", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG301", "CG311", "CG331", "HGA3", "0.1600", "3", "0.00", "all34_ethers_1a"}, {"OG302", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "LIPID methyl acetate"}, {"OG303", "CG311", "CG331", "HGA3", "0.1950", "3", "0.00", "PROTNA phospho-ser/thr phospho-ser/thr"}, {"OG311", "CG311", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CLGA1", "CG311", "CG331", "HGA3", "0.2500", "3", "0.00", "DCLE"}, {"BRGA2", "CG311", "CG331", "HGA3", "0.2600", "3", "0.00", "DBRE"}, {"HGA1", "CG311", "CG331", "HGA3", "0.1950", "3", "0.00", "NA, sugar"}, {"CG321", "CG311", "CG3C51", "CG3C52", "0.5000", "4", "180.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3C51", "HGA1", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3C52", "0.2500", "1", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3C52", "0.2500", "2", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3C52", "0.4500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "CG3RC1", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG311", "CG3C51", "HGA1", "0.1950", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA1", "CG311", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA1", "CG311", "CG3C51", "CG3RC1", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA1", "CG311", "CG3C51", "HGA1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CG311", "CG311", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG311", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG311", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG3RC1", "CG331", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "CG3C51", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "CG3C52", "0.5000", "4", "180.00", "DCA, Deoxycholic Acid, cacha, 02/08"}, {"CG321", "CG311", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG311", "CG3RC1", "CG331", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"OG311", "CG311", "CG3RC1", "CG3C51", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"OG311", "CG311", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG311", "CG3RC1", "CG331", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG311", "CG3RC1", "CG3C51", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG311", "CG3RC1", "CG3C52", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG311", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG311", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG2O2", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "180.00", "drug design project, xxwy"}, {"CG2O3", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "180.00", "drug design project, xxwy"}, {"CG321", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"HGA1", "CG311", "NG2R53", "CG2R53", "0.0000", "1", "0.00", "drug design project, xxwy"}, {"CG2O1", "CG311", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O1", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O2", "CG311", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O2", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT adm jr. 5/02/91, acetic Acid pure solvent"}, {"CG2O3", "CG311", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O3", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CG311", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG311", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG321", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG321", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG324", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"CG324", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "G3P(R/S), Gamma-3-piperidine Glu Acid CDCA Amide, cacha"}, {"CG331", "CG311", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG331", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG311", "NG2S1", "CG2O1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG311", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O3", "CG311", "OG301", "CG331", "0.2000", "3", "0.00", "og/sng thp CG321C CG321C OG3C6M CG321C"}, {"CG331", "CG311", "OG301", "CG331", "0.4000", "1", "0.00", "all34_ethers_1a og/gk (not affected by mistake)"}, {"CG331", "CG311", "OG301", "CG331", "0.4900", "3", "0.00", "CC33A CC32A OC30A CC33A og/gk (not affected by mistake)"}, {"HGA1", "CG311", "OG301", "CG331", "0.2840", "3", "0.00", "all34_ethers_1a og/gk (not affected by mistake)"}, {"CG321", "CG311", "OG302", "CG2O2", "0.7000", "1", "180.00", "LIPID ethyl acetate, 12/92"}, {"CG331", "CG311", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID methyl acetate"}, {"HGA1", "CG311", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG331", "CG311", "OG303", "PG2", "0.4000", "1", "180.00", "IP_2 phospho-ser/thr"}, {"CG331", "CG311", "OG303", "PG2", "0.3000", "2", "0.00", "IP_2 phospho-ser/thr"}, {"CG331", "CG311", "OG303", "PG2", "0.1000", "3", "0.00", "IP_2 phospho-ser/thr"}, {"HGA1", "CG311", "OG303", "PG2", "0.0000", "3", "0.00", "IP_2 phospho-ser/thr"}, {"CG2O5", "CG311", "OG311", "HGP1", "0.3500", "1", "0.00", "BIPHENYL re-initialized from CC2O3 CC312 OC311 HCP1 ! erh ketone, n=6 polyol"}, {"CG2O5", "CG311", "OG311", "HGP1", "0.3700", "2", "0.00", "BIPHENYL re-initialized from CC2O3 CC312 OC311 HCP1 ! erh ketone, n=6 polyol"}, {"CG2O5", "CG311", "OG311", "HGP1", "0.0100", "3", "180.00", "BIPHENYL re-initialized from CC2O3 CC312 OC311 HCP1 ! erh ketone, n=6 polyol with compensation for HCA1 CC311 OC311M HCP1 0.18 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-evaluate?"}, {"CG311", "CG311", "OG311", "HGP1", "1.3300", "1", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG311", "CG311", "OG311", "HGP1", "0.1800", "2", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG311", "CG311", "OG311", "HGP1", "0.4600", "3", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93 ! compensated for X CG311 OG311 X 0.14 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-optimize?"}, {"CG321", "CG311", "OG311", "HGP1", "0.3000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG311", "OG311", "HGP1", "0.3000", "3", "0.00", "CHOLEST cholesterol"}, {"CG324", "CG311", "OG311", "HGP1", "0.5000", "1", "0.00", "FLAVOP PIP3"}, {"CG324", "CG311", "OG311", "HGP1", "0.7000", "2", "0.00", "FLAVOP PIP3"}, {"CG331", "CG311", "OG311", "HGP1", "1.3300", "1", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG331", "CG311", "OG311", "HGP1", "0.1800", "2", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93"}, {"CG331", "CG311", "OG311", "HGP1", "0.4600", "3", "0.00", "PROT PRO2, 2-propanol OH hf/torsional surface, adm jr., 3/2/93 ! compensated for X CG311 OG311 X 0.14 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-optimize?"}, {"CG3RC1", "CG311", "OG311", "HGP1", "1.5000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "OG311", "HGP1", "0.3000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG311", "OG311", "HGP1", "0.5000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG312", "CG311", "OG311", "HGP1", "0.2800", "3", "0.00", "PROT EMB 11/21/89 methanol vib fit ! compensated for X CG311 OG311 X 0.14 --> HGA1 CG311 OG311 HGP1 0.00 kevo ==> re-optimize?"}, {"HGA1", "CG311", "OG311", "HGP1", "0.0000", "3", "0.00", "NA backbone. PRO2 not properly optimized in new carbohydrate FF ==> unmodified."}, {"FGA2", "CG312", "CG331", "HGA3", "0.1780", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA7", "CG312", "CG331", "HGA3", "0.1780", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"CG2R61", "CG312", "PG1", "OG2P1", "0.0000", "3", "0.00", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"CG2R61", "CG312", "PG1", "OG311", "0.1000", "2", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG312", "PG1", "OG311", "0.4000", "3", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"FGA2", "CG312", "PG1", "OG2P1", "0.0000", "3", "0.00", "BDFP, Difuorobenzylphosphonate re-optimize?"}, {"FGA2", "CG312", "PG1", "OG311", "0.1000", "3", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"CG2R61", "CG312", "PG2", "OG2P1", "0.0000", "3", "0.00", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"FGA2", "CG312", "PG2", "OG2P1", "0.0000", "3", "0.00", "BDFD, Difuorobenzylphosphonate / re-optimize?"}, {"CG2O1", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O1", "CG314", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG314", "CG321", "SG301", "0.2000", "3", "0.00", "deleteme DELETEME (we want to use wildcarting)"}, {"CG2O1", "CG314", "CG321", "SG311", "0.2000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O1", "CG314", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG2O3", "CG314", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "SG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "3MRB,Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG314", "CG321", "NG2S1", "0.2000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG314", "CG321", "HGA2", "0.1950", "3", "0.00", "3MRB,Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha reset to default by kevo"}, {"NG3P2", "CG314", "CG321", "CG321", "0.1950", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"NG3P2", "CG314", "CG321", "NG2S1", "0.1950", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"NG3P2", "CG314", "CG321", "HGA2", "0.1950", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"NG3P3", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG2R61", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "OG311", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"NG3P3", "CG314", "CG321", "SG311", "0.2000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"NG3P3", "CG314", "CG321", "HGA2", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2O1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2R51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA1", "CG314", "CG321", "CG2R61", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HGA1", "CG314", "CG321", "CG311", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG314", "CG321", "CG321", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"HGA1", "CG314", "CG321", "NG2S1", "0.2000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"HGA1", "CG314", "CG321", "OG311", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with NA, sugar"}, {"HGA1", "CG314", "CG321", "SG311", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with PROTNA sahc"}, {"HGA1", "CG314", "CG321", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"CG2O1", "CG314", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG314", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"NG3P3", "CG314", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"HGA1", "CG314", "CG331", "HGA3", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG321", "CG314", "NG3P2", "CG324", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG314", "NG3P2", "HGP2", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"HGA1", "CG314", "NG3P2", "CG324", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"HGA1", "CG314", "NG3P2", "HGP2", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG2O1", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O3", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG311", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG321", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG331", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"HGA1", "CG314", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG2D1", "CG321", "CG321", "CG2O3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2D1", "CG321", "CG321", "CG321", "0.1400", "1", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG321", "0.1700", "2", "0.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG321", "0.0500", "3", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG331", "0.1400", "1", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG331", "0.1700", "2", "0.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "CG331", "0.0500", "3", "180.0", "2-hexene, adm jr., 11/09"}, {"CG2D1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2DC1", "CG321", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC1", "CG321", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG321", "CG321", "CG321", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2DC2", "CG321", "CG321", "HGA2", "0.1900", "3", "0.00", "RETINOL TMCH"}, {"CG2O1", "CG321", "CG321", "CG2O1", "0.2000", "3", "0.00", "PMHA, hydrazone-containing model compound: PROT alkane update, adm jr., 3/2/92, sz"}, {"CG2O1", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O1", "CG321", "CG321", "CG314", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O2", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "GMGA, cacha"}, {"CG2O2", "CG321", "CG321", "CG321", "0.2100", "1", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.3900", "2", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.3500", "3", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.1100", "4", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG321", "0.0900", "6", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.2100", "1", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.3900", "2", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.3500", "3", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.1100", "4", "0.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "CG331", "0.0900", "6", "180.00", "LIPID methylbutyrate"}, {"CG2O2", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "deleteme DELETEME (we want to use wildcarting)"}, {"CG2O3", "CG321", "CG321", "CG2R61", "0.0400", "3", "0.00", "FBIB, Fatty Binding Inhibitior B, cacha"}, {"CG2O3", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O3", "CG321", "CG321", "CG314", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter"}, {"CG2O3", "CG321", "CG321", "CG321", "0.06450", "2", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "CG321", "0.14975", "3", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "CG321", "0.09458", "4", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "CG321", "0.11251", "5", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG2O3", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2O5", "CG321", "CG321", "CG321", "0.2100", "1", "180.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.3900", "2", "0.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.3500", "3", "180.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.1100", "4", "0.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "CG321", "0.0900", "6", "180.00", "CHON, cyclohexanone; from LIPID methylbutyrate; yapol"}, {"CG2O5", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "CHON, cyclohexanone; from CG2O2 CG321 CG321 HGA2; yapol"}, {"CG2R61", "CG321", "CG321", "CG321", "0.0400", "3", "0.00", "PROT ethylbenzene"}, {"CG2R61", "CG321", "CG321", "NG2S1", "0.1900", "3", "0.00", "2AEPD, 2-ethylamino-pyridine CDCA conjugate, corrected by kevo"}, {"CG2R61", "CG321", "CG321", "HGA2", "0.0400", "3", "0.00", "PROT ethylbenzene"}, {"CG301", "CG321", "CG321", "CG311", "0.2000", "3", "0.00", "CA, Cholic Acid, cacha, 03/06"}, {"CG301", "CG321", "CG321", "CG321", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG301", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "CG321", "CG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "CG321", "CG321", "0.5000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG321", "CG321", "CG321", "0.5000", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG321", "CG321", "CG324", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG311", "CG321", "CG321", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG311", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"CG314", "CG321", "CG321", "CG321", "0.5000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG314", "CG321", "CG321", "CG321", "0.5000", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG314", "CG321", "CG321", "CG324", "0.1950", "3", "0.00", "PROT N-terminal AA - standard parameter collided with FLAVOP PIP1,2,3"}, {"CG314", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG314", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "NA abasic nucleoside"}, {"CG321", "CG321", "CG321", "CG321", "0.06450", "2", "0.00", "LIPID alkane, 4/04, jbk (Jeff Klauda)"}, {"CG321", "CG321", "CG321", "CG321", "0.14975", "3", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG321", "0.09458", "4", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG321", "0.11251", "5", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG324", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG321", "CG321", "CG331", "0.15051", "2", "0.00", "LIPID alkane, 4/04, jbk (Jeff Klauda)"}, {"CG321", "CG321", "CG321", "CG331", "0.08133", "3", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG331", "0.10824", "4", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG331", "0.20391", "5", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG321", "CG321", "CG321", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "CG321", "NG2D1", "0.7900", "1", "180.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.2000", "2", "0.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.1200", "3", "0.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.1500", "4", "0.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2D1", "0.0500", "6", "180.00", "from EEPI's CG331 CG321 CG321 NG2D1, fylin"}, {"CG321", "CG321", "CG321", "NG2S1", "0.2000", "3", "0.00", "ALBE, Alpha Lysine Benzyl Ester CDCA Amide, cacha"}, {"CG321", "CG321", "CG321", "OG301", "0.1600", "1", "180.00", "methylpropylether, 2/12/05, ATM"}, {"CG321", "CG321", "CG321", "OG301", "0.3900", "2", "0.00", "methylpropylether"}, {"CG321", "CG321", "CG321", "OG302", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG321", "OG303", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG321", "OG311", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG321", "OG3C61", "0.1900", "1", "180.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "OG3C61", "1.0000", "2", "180.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "OG3C61", "0.6000", "3", "0.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "OG3C61", "0.0800", "4", "180.00", "THP, tetrahydropyran"}, {"CG321", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "THPS, thiopyran"}, {"CG321", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "LIPID alkanes"}, {"CG324", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG331", "CG321", "CG321", "CG331", "0.03819", "2", "0.00", "LIPID alkane, 4/04, jbk"}, {"CG331", "CG321", "CG321", "CG331", "0.03178", "6", "180.00", "LIPID alkane, 4/04, jbk"}, {"CG331", "CG321", "CG321", "NG2D1", "0.7900", "1", "180.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.2000", "2", "0.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.1200", "3", "0.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.1500", "4", "0.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "NG2D1", "0.0500", "6", "180.00", "EEPI, fylin"}, {"CG331", "CG321", "CG321", "OG301", "0.1600", "1", "180.00", "methylpropylether, 2/12/05, ATM"}, {"CG331", "CG321", "CG321", "OG301", "0.3900", "2", "0.00", "methylpropylether"}, {"CG331", "CG321", "CG321", "OG311", "0.1950", "3", "0.00", "PROH, n-propanol, kevo for gsk/ibm"}, {"CG331", "CG321", "CG321", "SG311", "0.1950", "3", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG331", "CG321", "CG321", "SG3O1", "0.9400", "1", "180.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "CG321", "SG3O1", "0.3800", "2", "0.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "CG321", "SG3O1", "0.1100", "3", "0.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "CG321", "HGA2", "0.1800", "3", "0.00", "LIPID alkane"}, {"CG3RC1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "LIPID alkanes"}, {"NG2D1", "CG321", "CG321", "HGA2", "0.2000", "3", "0.00", "EEPI, from NG2S1 CG321 CG321 HGA2, fylin"}, {"NG2S1", "CG321", "CG321", "SG3O1", "0.9500", "1", "180.00", "NACT, N-acetyltaurine, compromise between 6-31G* and 6-31+G*, xxwy and kevo"}, {"NG2S1", "CG321", "CG321", "SG3O1", "1.3300", "2", "0.00", "NACT, N-acetyltaurine, compromise between 6-31G* and 6-31+G*, xxwy and kevo"}, {"NG2S1", "CG321", "CG321", "SG3O1", "0.0800", "3", "180.00", "NACT, N-acetyltaurine, compromise between 6-31G* and 6-31+G*, xxwy and kevo"}, {"NG2S1", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "TCA, Taurocholic Acid, cacha, 03/06 OK"}, {"NG311", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "K2Cn, cgenff_compromise, kevo"}, {"OG301", "CG321", "CG321", "OG301", "0.2500", "1", "180.00", "1,2 dimethoxyethane, 2/12/05, ATM"}, {"OG301", "CG321", "CG321", "OG301", "1.2400", "2", "0.00", "1,2 dimethoxyethane"}, {"OG301", "CG321", "CG321", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"OG302", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG321", "OG303", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG3C61", "CG321", "CG321", "OG3C61", "0.1950", "3", "0.00", "DIOX, dioxane"}, {"OG3C61", "CG321", "CG321", "HGA2", "0.1950", "3", "0.00", "DIOX, dioxane"}, {"SG311", "CG321", "CG321", "SG311", "0.1000", "3", "0.00", "DITH, dithiane"}, {"SG311", "CG321", "CG321", "HGA2", "0.0100", "3", "0.00", "PROT DTN 8/24/90"}, {"SG3O1", "CG321", "CG321", "HGA2", "0.0100", "1", "0.00", "PSNA, propyl sulfonate, xhe"}, {"HGA2", "CG321", "CG321", "HGA2", "0.2200", "3", "0.00", "LIPID alkanes"}, {"CG311", "CG321", "CG324", "NG3P1", "1.0000", "3", "0.00", "BPAB, Gamma N-benzyl piperidine alpha benzyl CDCA amide, cacha ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG311", "CG321", "CG324", "NG3P2", "1.0000", "3", "0.00", "G4MP, Gamma-4-Methyl Piperidine Glu Acid CDCA Amide, cacha ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG311", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG321", "CG324", "NG2P1", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG324", "NG3P1", "1.0000", "3", "0.00", "FLAVOP PIP1,2,3 ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG321", "CG321", "CG324", "NG3P2", "1.0000", "3", "0.00", "PIP, piperidine ! @@@ Kenno: 0.1950 -> 1.0000"}, {"CG321", "CG321", "CG324", "NG3P3", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG321", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG331", "CG321", "CG324", "NG2O1", "0.8773", "1", "180.00", "NIPR, nitropropane, abar"}, {"CG331", "CG321", "CG324", "NG2O1", "0.2382", "2", "0.00", "NIPR, nitropropane, abar"}, {"CG331", "CG321", "CG324", "NG2O1", "0.1465", "3", "180.00", "NIPR, nitropropane, abar"}, {"CG331", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "NIPR, nitropropane; from CG321 CG321 CG324 HGA2; abar"}, {"OG302", "CG321", "CG324", "NG3P0", "3.3000", "1", "180.00", "LIPID choline, 12/92"}, {"OG302", "CG321", "CG324", "NG3P0", "-0.4000", "3", "180.00", "LIPID choline, 12/92"}, {"OG302", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG324", "NG3P0", "3.3000", "1", "180.00", "LIPID choline, 12/92"}, {"OG303", "CG321", "CG324", "NG3P0", "-0.4000", "3", "180.00", "LIPID choline, 12/92"}, {"OG303", "CG321", "CG324", "NG3P3", "0.7000", "1", "180.00", "LIPID ethanolamine"}, {"OG303", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG321", "CG324", "NG3P0", "4.3000", "1", "180.00", "LIPID choline, 12/92"}, {"OG311", "CG321", "CG324", "NG3P0", "-0.4000", "3", "180.00", "LIPID choline, 12/92"}, {"OG311", "CG321", "CG324", "NG3P3", "0.7000", "1", "180.00", "LIPID ethanolamine"}, {"OG311", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG311", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG3C61", "CG321", "CG324", "NG3P2", "0.8000", "3", "0.00", "MORP, morpholine"}, {"OG3C61", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "MORP, morpholine"}, {"SG311", "CG321", "CG324", "NG3P2", "0.8000", "3", "0.00", "TMOR, thiomorpholine"}, {"SG311", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "TMOR, thiomorpholine"}, {"HGA2", "CG321", "CG324", "NG2O1", "0.1950", "3", "0.00", "NIPR, nitropropane; from NG2S1 CG321 CG321 HGA2; abar"}, {"HGA2", "CG321", "CG324", "NG2P1", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG321", "CG324", "NG3P0", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG321", "CG324", "NG3P1", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA2", "CG321", "CG324", "NG3P2", "0.1950", "3", "0.00", "PIP, piperidine"}, {"HGA2", "CG321", "CG324", "NG3P3", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG321", "CG324", "HGA2", "0.1950", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA2", "CG321", "CG324", "HGP5", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG2D1", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O1", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O2", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O3", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2O4", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PALD, propionaldehyde from PROT rotation barrier in Ethane (SF) unmodified"}, {"CG2O5", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "Methyl group torsion, kevo"}, {"CG2R51", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG2R61", "CG321", "CG331", "HGA3", "0.0400", "3", "0.00", "PROT 2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CG301", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "DMBU, dimethoxybutane, sna"}, {"CG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG321", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG324", "CG321", "CG331", "HGA3", "0.2000", "3", "0.00", "NIPR, nitropropane; from CG314 CG311 CG331 HGA3; abar"}, {"CG331", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG3C31", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "1BOX, 1-butene oxide; default from CG321 CG321 CG331 HGA3; sc"}, {"NG2D1", "CG321", "CG331", "HGA3", "0.1500", "3", "0.00", "EICY, ethyl isocyanate, xxwy"}, {"NG2R51", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from NG2S1 CG321 CG331 HGA3, kevo"}, {"NG2S1", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "DECB, diethyl carbamate, cacha"}, {"NG2S3", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "NESM, N-ethyl-sulfamate; from NG2S1 CG321 CG331 HGA3; my"}, {"NG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PEI polymers, default parameter, kevo"}, {"OG301", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"OG302", "CG321", "CG331", "HGA3", "0.1950", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"OG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"OG312", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"SG301", "CG321", "CG331", "HGA3", "0.0100", "3", "0.00", "PROT DTN 8/24/90"}, {"SG311", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"SG3O1", "CG321", "CG331", "HGA3", "0.1100", "3", "0.00", "ESNA, ethyl sulfonate, xhe"}, {"SG3O2", "CG321", "CG331", "HGA3", "0.0770", "3", "0.00", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"SG3O3", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "MESO, methylethylsulfoxide; default parameter; kevo"}, {"CLGA1", "CG321", "CG331", "HGA3", "0.3000", "3", "0.00", "CLET"}, {"BRGA1", "CG321", "CG331", "HGA3", "0.3000", "3", "0.00", "BRET"}, {"HGA2", "CG321", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"CG331", "CG321", "CG3C31", "CG3C31", "0.0000", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "OG3C31", "0.4700", "1", "180.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "OG3C31", "0.1300", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "HGA1", "0.1800", "1", "0.00", "1BOX, 1-butene oxide, kevo"}, {"CG331", "CG321", "CG3C31", "HGA1", "1.0700", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "CG3C31", "0.0100", "1", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "CG3C31", "0.0200", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "OG3C31", "0.5000", "1", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "OG3C31", "0.2700", "3", "0.00", "1BOX, 1-butene oxide, kevo"}, {"HGA2", "CG321", "CG3C31", "HGA1", "0.0000", "3", "0.00", "1BOX, 1-butene oxide; kept at 0; sc"}, {"OG301", "CG321", "CG3C51", "CG3C52", "0.2000", "3", "180.00", "3POMP, 3-phenoxymethylpyrrolidine; from NA, sugar; kevo"}, {"OG301", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from NA, sugar; kevo"}, {"OG303", "CG321", "CG3C51", "CG3C51", "2.5000", "1", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C51", "0.4000", "2", "0.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C51", "0.8000", "3", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C51", "0.2000", "4", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3C52", "0.2000", "3", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3C51", "OG3C51", "3.4000", "1", "180.00", "NA, sugar"}, {"OG303", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "2.5000", "1", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "0.4000", "2", "0.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "0.8000", "3", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C51", "0.2000", "4", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "CG3C52", "0.2000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG321", "CG3C51", "OG3C51", "3.4000", "1", "180.00", "NA, sugar"}, {"OG311", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"SG311", "CG321", "CG3C51", "CG3C51", "2.5000", "1", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "CG3C51", "0.4000", "2", "0.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "CG3C51", "0.8000", "3", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "CG3C51", "0.2000", "4", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "OG3C51", "3.4000", "1", "180.00", "PROTNA sahc"}, {"SG311", "CG321", "CG3C51", "HGA1", "0.1950", "3", "0.00", "PROTNA sahc"}, {"HGA2", "CG321", "CG3C51", "CG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA2", "CG321", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA2", "CG321", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3C51", "OG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA2", "CG321", "CG3C51", "HGA1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"CG321", "CG321", "CG3RC1", "CG331", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG321", "CG3RC1", "CG3C51", "0.1580", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG321", "CG3RC1", "CG3C52", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG321", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3C31", "0.1500", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3C51", "0.5000", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3RC1", "0.6000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG321", "CG3RC1", "CG3RC1", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "CG331", "0.1900", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA2", "CG321", "CG3RC1", "CG3C31", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "CG3C51", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "CG3C52", "0.1950", "1", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA2", "CG321", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG321", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.6100", "1", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.6200", "2", "180.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.2500", "3", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.6000", "4", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2D1", "0.2500", "6", "0.00", "EEPI, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.1900", "1", "180.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.3400", "2", "180.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.5600", "3", "180.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.1200", "4", "0.00", "DH3T, fylin"}, {"CG321", "CG321", "NG2D1", "CG2N2", "0.1200", "6", "180.00", "DH3T, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.1900", "1", "0.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.3400", "2", "180.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.5600", "3", "180.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.1200", "4", "0.00", "MT2A, fylin"}, {"CG331", "CG321", "NG2D1", "CG2N2", "0.1200", "6", "180.00", "MT2A, fylin"}, {"HGA2", "CG321", "NG2D1", "CG2D1", "0.1000", "3", "0.00", "EEPI, from HGA3 CG331 NG2D1 CG2D1, fylin"}, {"HGA2", "CG321", "NG2D1", "CG2N2", "0.1100", "3", "180.00", "MT2A, from HGA3 CG331 NG2D1 CG2N1, fylin"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.3850", "1", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.4200", "2", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.0800", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "CG2R51", "0.0550", "4", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.3850", "1", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.4200", "2", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.0800", "3", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"CG331", "CG321", "NG2R51", "NG2R50", "0.0550", "4", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, kevo"}, {"HGA2", "CG321", "NG2R51", "CG2R51", "0.0000", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from HGA3 CG331 NG2R51 CG2R53, kevo"}, {"HGA2", "CG321", "NG2R51", "NG2R50", "0.0000", "3", "0.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from HGA3 CG331 NG2R51 CG2R53, kevo"}, {"CG2O1", "CG321", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT ala dipeptide, new C VDW Rmin, adm jr., 3/3/93c"}, {"CG2O1", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"CG2O2", "CG321", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT Alanine dipeptide; NMA; acetate; etc. backbon adm jr., 3/3/93c"}, {"CG2O2", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT adm jr. 5/02/91, acetic Acid pure solvent"}, {"CG2O3", "CG321", "NG2S1", "CG2O1", "0.2000", "1", "180.00", "PROT Alanine dipeptide; NMA; acetate; etc. adm jr., 3/3/93c"}, {"CG2O3", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.0150", "1", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.2980", "2", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.0760", "3", "180.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.6190", "4", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "CG2O1", "0.1480", "6", "0.00", "NZAD, N-benzylacetamide, isg"}, {"CG2R61", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "NZAD, N-benzylacetamide; from CG2O2 CG321 NG2S1 HGP1; isg"}, {"CG311", "CG321", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "G4MP, Gamma-4-Methyl Piperidine Glu Acid CDCA Amide, cacha"}, {"CG311", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "G4MP, Gamma-4-Methyl Piperidine Glu Acid CDCA Amide, cacha"}, {"CG314", "CG321", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG314", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha"}, {"CG321", "CG321", "NG2S1", "CG2O1", "1.8000", "1", "0.00", "slack parameter picked up by 3CPD ==> re-optimize?"}, {"CG321", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT from HGP1 NG2S1 CG321 CT3, for lactams, adm jr."}, {"CG331", "CG321", "NG2S1", "CG2O6", "0.3500", "1", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "NG2S1", "CG2O6", "0.7500", "2", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "NG2S1", "CG2O6", "0.1500", "4", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG321", "NG2S1", "CG2O1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA1", "CG321", "NG2S1", "HGP1", "0.0000", "1", "0.00", "PROT Alanine Dipeptide ab initio calc's (LK)"}, {"HGA2", "CG321", "NG2S1", "CG2O1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"HGA2", "CG321", "NG2S1", "CG2O6", "0.0000", "3", "0.00", "DECB, diethyl carbamate, from DMCB, kevo"}, {"HGA2", "CG321", "NG2S1", "HGP1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.7550", "1", "180.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.8660", "2", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.6280", "3", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.1510", "4", "180.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "SG3O1", "0.1130", "6", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "HGP1", "0.7410", "1", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "HGP1", "0.3210", "2", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "CG321", "NG2S3", "HGP1", "0.2350", "3", "180.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"HGA2", "CG321", "NG2S3", "SG3O1", "0.1500", "3", "0.00", "NESM, N-ethyl-sulfamate; from HGA3 CG331 NG2S3 PG1; my"}, {"HGA2", "CG321", "NG2S3", "HGP1", "0.0100", "3", "0.00", "NESM, N-ethyl-sulfamate; from HGA3 CG331 NG2S3 HGP1; my"}, {"CG321", "CG321", "NG311", "HGPAM1", "0.3000", "3", "0.00", "K2Cn, cgenff_compromise, kevo"}, {"CG331", "CG321", "NG311", "SG3O2", "0.1000", "1", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "NG311", "SG3O2", "0.7000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "NG311", "SG3O2", "0.1000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "NG311", "HGP1", "0.1000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"NG311", "CG321", "NG311", "CG2R61", "2.5000", "1", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "CG2R61", "1.5000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "CG2R61", "0.5000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "SG3O2", "1.4000", "1", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "SG3O2", "0.5000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "SG3O2", "0.1000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "HGP1", "0.1000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "HGPAM1", "1.7000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"NG311", "CG321", "NG311", "HGPAM1", "0.3000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"HGA2", "CG321", "NG311", "CG2R61", "0.0000", "3", "180.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"HGA2", "CG321", "NG311", "CG321", "0.0000", "3", "0.00", "5UHG, cgenff_compromise, kevo"}, {"HGA2", "CG321", "NG311", "SG3O2", "0.1000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGA2", "CG321", "NG311", "HGP1", "0.0500", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGA2", "CG321", "NG311", "HGPAM1", "0.0500", "3", "0.00", "PEI0, OBTZ, AOBT, kevo and xxwy"}, {"CG2O2", "CG321", "NG321", "HGPAM2", "0.1600", "3", "0.00", "GLYN, Glycine neutral from AMINE aliphatic amines"}, {"HGA2", "CG321", "NG321", "HGPAM2", "0.0100", "3", "0.00", "amines"}, {"CG321", "CG321", "OG301", "CG2R61", "0.2400", "1", "0.00", "PNTM, pentamidine; from ETOB, Ethoxybenzene; kevo"}, {"CG321", "CG321", "OG301", "CG2R61", "0.2900", "2", "0.00", "PNTM, pentamidine; from ETOB, Ethoxybenzene; kevo"}, {"CG321", "CG321", "OG301", "CG2R61", "0.0200", "3", "0.00", "PNTM, pentamidine; from ETOB, Ethoxybenzene; kevo"}, {"CG321", "CG321", "OG301", "CG321", "0.5700", "1", "0.00", "1,2 dimethoxyethane, 2/12/05, ATM"}, {"CG321", "CG321", "OG301", "CG321", "0.2900", "2", "0.00", "1,2 dimethoxyethane"}, {"CG321", "CG321", "OG301", "CG321", "0.4300", "3", "0.00", "1,2 dimethoxyethane"}, {"CG321", "CG321", "OG301", "CG331", "0.5700", "1", "0.00", "1,2 dimethoxyethane (DME), 2/12/05, ATM"}, {"CG321", "CG321", "OG301", "CG331", "0.2900", "2", "0.00", "1,2 dimethoxyethane (DME)"}, {"CG321", "CG321", "OG301", "CG331", "0.4300", "3", "0.00", "1,2 dimethoxyethane (DME)"}, {"CG331", "CG321", "OG301", "CG2R61", "0.2400", "1", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"CG331", "CG321", "OG301", "CG2R61", "0.2900", "2", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"CG331", "CG321", "OG301", "CG2R61", "0.0200", "3", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"CG331", "CG321", "OG301", "CG321", "0.4000", "1", "0.00", "diethylether, 2/12/05, ATM"}, {"CG331", "CG321", "OG301", "CG321", "0.4900", "3", "0.00", "diethylether"}, {"CG331", "CG321", "OG301", "CG331", "0.4000", "1", "0.00", "diethylether, 2/12/05, ATM!from CCT3-CCT2-OCE-CG321 MEE viv"}, {"CG331", "CG321", "OG301", "CG331", "0.4900", "3", "0.00", "diethylether !from CCT3-CCT2-OCE-CG321 MEE viv"}, {"CG3C51", "CG321", "OG301", "CG2R61", "0.2000", "1", "180.00", "3POMP, 3-phenoxymethylpyrrolidine, kevo"}, {"CG3C51", "CG321", "OG301", "CG2R61", "0.1000", "2", "0.00", "3POMP, 3-phenoxymethylpyrrolidine, kevo"}, {"CG3C51", "CG321", "OG301", "CG2R61", "0.1000", "3", "180.00", "3POMP, 3-phenoxymethylpyrrolidine, kevo"}, {"HGA2", "CG321", "OG301", "CG2R61", "0.0950", "3", "0.00", "ETOB, Ethoxybenzene, cacha"}, {"HGA2", "CG321", "OG301", "CG321", "0.2840", "3", "0.00", "diethylether, alex"}, {"HGA2", "CG321", "OG301", "CG331", "0.2840", "3", "0.00", "diethylether, alex"}, {"CG2R61", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "ABGA, ALPHA BENZYL GLU ACID CDCA AMIDE"}, {"CG311", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG321", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG324", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG331", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG331", "CG321", "OG302", "CG2O6", "0.1000", "1", "180.00", "DECB and DECA, diethyl carbamate and carbonate, cacha and xxwy"}, {"CG331", "CG321", "OG302", "CG2O6", "0.6000", "2", "0.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"CG331", "CG321", "OG302", "CG2O6", "0.1000", "3", "180.00", "DECB, diethyl carbamate, cacha and xxwy"}, {"HGA2", "CG321", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"HGA2", "CG321", "OG302", "CG2O6", "0.0000", "3", "0.00", "DECB, diethyl carbamate, from DMCB, kevo"}, {"CG311", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr !Reorganization: GPC and others"}, {"CG311", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr !Reorganization: GPC and others"}, {"CG311", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr !Reorganization: GPC and others"}, {"CG321", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr !Reorganization: BPET and others"}, {"CG321", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr !Reorganization: BPET and others"}, {"CG321", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr !Reorganization: BPET and others"}, {"CG321", "CG321", "OG303", "SG3O1", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG324", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr !Reorganization: PC and others"}, {"CG324", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr !Reorganization: PC and others"}, {"CG324", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr !Reorganization: PC and others"}, {"CG331", "CG321", "OG303", "PG2", "0.6000", "1", "180.00", "EP_2 phospho-ser/thr"}, {"CG331", "CG321", "OG303", "PG2", "0.6500", "2", "0.00", "EP_2 phospho-ser/thr"}, {"CG331", "CG321", "OG303", "PG2", "0.0500", "3", "0.00", "EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "B5SP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "B5SP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "B5SP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG2", "0.6000", "1", "180.00", "TH5P carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG2", "0.6500", "2", "0.00", "TH5P carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3C51", "CG321", "OG303", "PG2", "0.0500", "3", "0.00", "TH5P carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3RC1", "CG321", "OG303", "PG1", "0.6000", "1", "180.00", "B5NP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3RC1", "CG321", "OG303", "PG1", "0.6500", "2", "0.00", "B5NP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"CG3RC1", "CG321", "OG303", "PG1", "0.0500", "3", "0.00", "B5NP carbocyclic sugars reset to EP_2 phospho-ser/thr"}, {"HGA2", "CG321", "OG303", "PG1", "0.0000", "3", "0.00", "NA dmp !Reorganization: PC and others"}, {"HGA2", "CG321", "OG303", "PG2", "0.0000", "3", "0.00", "NA dmp !Reorganization: TH5P and others"}, {"HGA2", "CG321", "OG303", "SG3O1", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"CG2D1", "CG321", "OG311", "HGP1", "1.3000", "1", "0.00", "RETINOL PROL"}, {"CG2D1", "CG321", "OG311", "HGP1", "0.7000", "2", "0.00", "RETINOL PROL"}, {"CG2D1", "CG321", "OG311", "HGP1", "0.1400", "3", "0.00", "RETINOL PROL; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG2DC1", "CG321", "OG311", "HGP1", "1.3000", "1", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG321", "OG311", "HGP1", "0.7000", "2", "0.00", "RETINOL PROL"}, {"CG2DC1", "CG321", "OG311", "HGP1", "0.1400", "3", "0.00", "RETINOL PROL; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG2DC2", "CG321", "OG311", "HGP1", "1.3000", "1", "0.00", "RETINOL PROL"}, {"CG2DC2", "CG321", "OG311", "HGP1", "0.7000", "2", "0.00", "RETINOL PROL"}, {"CG2DC2", "CG321", "OG311", "HGP1", "0.1400", "3", "0.00", "RETINOL PROL; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG2R61", "CG321", "OG311", "HGP1", "2.1000", "1", "0.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-CH2OH), yin"}, {"CG2R61", "CG321", "OG311", "HGP1", "1.4000", "2", "0.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-CH2OH), yin"}, {"CG2R61", "CG321", "OG311", "HGP1", "0.7400", "3", "0.00", "3ALP, nicotinaldehyde (PYRIDINE pyr-CH2OH), yin; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG302", "CG321", "OG311", "HGP1", "0.4000", "1", "0.00", "TFE, Trifluoroethanol"}, {"CG302", "CG321", "OG311", "HGP1", "0.9000", "2", "0.00", "TFE, Trifluoroethanol"}, {"CG302", "CG321", "OG311", "HGP1", "0.3400", "3", "0.00", "TFE, Trifluoroethanol; Kenno: empirically corrected for HGA2 CG321 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"CG302", "CG321", "OG311", "HGP1", "0.1200", "4", "0.00", "TFE, Trifluoroethanol"}, {"CG311", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG311", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG311", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG314", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG314", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG314", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG321", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG321", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG321", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG324", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "ETAM, ethanolamine (transferred from og ethanol)"}, {"CG324", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "ETAM, ethanolamine (transferred from og ethanol)"}, {"CG324", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "ETAM, ethanolamine (transferred from og ethanol)"}, {"CG331", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG331", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG331", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"CG3C51", "CG321", "OG311", "HGP1", "1.1300", "1", "0.00", "og ethanol"}, {"CG3C51", "CG321", "OG311", "HGP1", "0.1400", "2", "0.00", "og ethanol"}, {"CG3C51", "CG321", "OG311", "HGP1", "0.2400", "3", "0.00", "og ethanol"}, {"HGA2", "CG321", "OG311", "HGP1", "0.1800", "3", "0.00", "og methanol"}, {"CG321", "CG321", "OG3C61", "CG321", "0.5300", "1", "180.00", "DIOX, dioxane"}, {"CG321", "CG321", "OG3C61", "CG321", "0.6800", "2", "0.00", "DIOX, dioxane"}, {"CG321", "CG321", "OG3C61", "CG321", "0.2100", "3", "180.00", "DIOX, dioxane"}, {"CG321", "CG321", "OG3C61", "CG321", "0.1500", "4", "0.00", "DIOX, dioxane"}, {"CG324", "CG321", "OG3C61", "CG321", "0.5000", "3", "0.00", "MORP, morpholine"}, {"OG3C61", "CG321", "OG3C61", "CG321", "1.0000", "3", "0.00", "DIXB, 13dioxane"}, {"HGA2", "CG321", "OG3C61", "CG321", "0.1950", "3", "0.00", "DIOX, dioxane"}, {"CG2DC1", "CG321", "OG3R60", "CG2D2O", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2DC2", "CG321", "OG3R60", "CG2D1O", "0.7000", "3", "0.00", "PY02, 2h-pyran"}, {"HGA2", "CG321", "OG3R60", "CG2D1O", "0.9000", "3", "0.00", "PY02, 2h-pyran"}, {"HGA2", "CG321", "OG3R60", "CG2D2O", "0.9000", "3", "0.00", "PY02, 2h-pyran"}, {"CG2R61", "CG321", "PG1", "OG2P1", "0.0500", "3", "0.00", "BDFP, Benzylphosphonate re-optimize?"}, {"CG2R61", "CG321", "PG1", "OG311", "1.6500", "1", "180.00", "BDFP, BDFD, Benzylphosphonate"}, {"CG2R61", "CG321", "PG1", "OG311", "0.5000", "2", "0.00", "BDFP, BDFD, Benzylphosphonate"}, {"HGA2", "CG321", "PG1", "OG2P1", "0.1000", "3", "0.00", "BDFP, Benzylphosphonate re-optimize?"}, {"HGA2", "CG321", "PG1", "OG311", "0.1000", "3", "0.00", "BDFP, BDFD, Benzylphosphonate"}, {"CG2R61", "CG321", "PG2", "OG2P1", "0.0500", "3", "0.00", "BDFD, Benzylphosphonate / re-optimize?"}, {"HGA2", "CG321", "PG2", "OG2P1", "0.1000", "3", "0.00", "BDFD, Benzylphosphonate / re-optimize?"}, {"CG331", "CG321", "SG301", "SG301", "0.3100", "3", "0.00", "PROT S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"HGA2", "CG321", "SG301", "SG301", "0.1580", "3", "0.00", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"CG311", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG311", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG311", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG314", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG314", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG314", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG321", "CG321", "SG311", "CG2N2", "0.2400", "1", "180.00", "DH3T , from CG321 CG321 SG311 CG321, penalty= 69 no opt."}, {"CG321", "CG321", "SG311", "CG2N2", "0.3700", "3", "0.00", "DH3T , from CG321 CG321 SG311 CG321, penalty= 69 no opt."}, {"CG321", "CG321", "SG311", "CG321", "0.2400", "1", "180.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "CG321", "0.3700", "3", "0.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "CG331", "0.2400", "1", "180.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "CG331", "0.3700", "3", "0.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG321", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG321", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG321", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PRSH, n-thiopropanol, kevo for gsk/ibm"}, {"CG324", "CG321", "SG311", "CG321", "0.1950", "3", "0.00", "TMOR, thiomorpholine"}, {"CG331", "CG321", "SG311", "CG331", "0.2400", "1", "180.00", "PROT expt. MeEtS, 3/26/92 (FL)"}, {"CG331", "CG321", "SG311", "CG331", "0.3700", "3", "0.00", "PROT DTN 8/24/90"}, {"CG331", "CG321", "SG311", "HGP3", "0.2400", "1", "0.00", "PROT ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"CG331", "CG321", "SG311", "HGP3", "0.1500", "2", "0.00", "PROT ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"CG331", "CG321", "SG311", "HGP3", "0.2700", "3", "0.00", "PROT ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"CG3C51", "CG321", "SG311", "CG321", "0.2400", "1", "180.00", "PROT MeEtS reset by kevo"}, {"CG3C51", "CG321", "SG311", "CG321", "0.3700", "3", "0.00", "PROT MeEtS reset by kevo"}, {"SG311", "CG321", "SG311", "CG321", "1.3000", "3", "0.00", "TRIT, trithiane"}, {"HGA2", "CG321", "SG311", "CG2N2", "0.3600", "3", "0.00", "DH3T , from HGA3 CG331 SG311 CG2O6, penalty= 19.5 no opt."}, {"HGA2", "CG321", "SG311", "CG321", "0.2800", "3", "0.00", "PROT DTN 8/24/90"}, {"HGA2", "CG321", "SG311", "CG331", "0.2800", "3", "0.00", "PROT DTN 8/24/90"}, {"HGA2", "CG321", "SG311", "HGP3", "0.2000", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"CG321", "CG321", "SG3O1", "OG2P1", "0.2300", "3", "0.00", "PSNA, propyl sulfonate, xhe"}, {"CG331", "CG321", "SG3O1", "OG2P1", "0.2600", "3", "0.00", "ESNA, ethyl sulfonate, xhe"}, {"HGA2", "CG321", "SG3O1", "OG2P1", "0.1900", "3", "0.00", "ESNA, ethyl sulfonate, xhe"}, {"CG331", "CG321", "SG3O2", "CG331", "0.9000", "1", "0.00", "MESN, methyl ethyl sulfone, xhe and kevo"}, {"CG331", "CG321", "SG3O2", "CG331", "0.3500", "2", "0.00", "MESN, methyl ethyl sulfone, xhe and kevo"}, {"CG331", "CG321", "SG3O2", "CG331", "0.1250", "3", "0.00", "MESN, methyl ethyl sulfone, xhe and kevo"}, {"CG331", "CG321", "SG3O2", "NG311", "0.1000", "1", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "SG3O2", "NG311", "0.4000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "SG3O2", "NG311", "0.3600", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "CG321", "SG3O2", "OG2P1", "0.1800", "3", "0.00", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"HGA2", "CG321", "SG3O2", "CG331", "0.1250", "3", "0.00", "MESN, methyl ethyl sulfone, xhe"}, {"HGA2", "CG321", "SG3O2", "NG311", "0.1600", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGA2", "CG321", "SG3O2", "OG2P1", "0.1600", "3", "0.00", "EESM, N-ethylethanesulfonamide; MESN, methyl ethyl sulfone; xxwy and xhe"}, {"CG331", "CG321", "SG3O3", "CG331", "0.1800", "1", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "CG331", "0.5700", "3", "0.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "OG2P1", "1.6000", "1", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "OG2P1", "0.2400", "2", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"CG331", "CG321", "SG3O3", "OG2P1", "0.0300", "3", "180.0", "MESO, methylethylsulfoxide, kevo"}, {"HGA2", "CG321", "SG3O3", "CG331", "0.2000", "3", "0.00", "MESO, methylethylsulfoxide; from DMSO, dimethylsulfoxide; mnoon"}, {"HGA2", "CG321", "SG3O3", "OG2P1", "0.2000", "3", "0.00", "MESO, methylethylsulfoxide; from DMSO, dimethylsulfoxide; mnoon"}, {"FGA1", "CG322", "CG331", "HGA3", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA6", "CG322", "CG331", "HGA3", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"SG302", "CG323", "CG331", "HGA3", "0.1500", "3", "0.00", "PROT ethylthiolate, adm jr., 6/1/92"}, {"HGA2", "CG323", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT ethylthiolate, adm jr., 6/1/92"}, {"NG3P0", "CG324", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"NG3P3", "CG324", "CG331", "HGA3", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA2", "CG324", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"HGP5", "CG324", "CG331", "HGA3", "0.1600", "3", "0.00", "PROT rotation barrier in Ethane (SF)"}, {"NG3P3", "CG324", "CG3C31", "CG3C31", "0.1950", "3", "0.00", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs"}, {"NG3P3", "CG324", "CG3C31", "HGA1", "0.2000", "3", "0.00", "AMCP, aminomethyl cyclopropane; from PROT alkane update, adm jr., 3/2/92; jhs"}, {"HGA2", "CG324", "CG3C31", "CG3C31", "0.1950", "3", "0.00", "AMCP, aminomethyl cyclopropane; from FLAVOP PIP1,2,3; jhs"}, {"HGA2", "CG324", "CG3C31", "HGA1", "0.1950", "3", "0.00", "AMCP, aminomethyl cyclopropane; from FLAVOP PIP1,2,3; jhs"}, {"CG321", "CG324", "NG2O1", "OG2N1", "0.0840", "2", "180.00", "NIPR, nitropropane, kevo and abar"}, {"CG321", "CG324", "NG2O1", "OG2N1", "0.0330", "4", "0.00", "NIPR, nitropropane, kevo and abar"}, {"CG321", "CG324", "NG2O1", "OG2N1", "0.0242", "6", "0.00", "NIPR, nitropropane, kevo and abar ! we'll tolerate the slight dihedral strain for the sake of transferability - Kenno"}, {"HGA2", "CG324", "NG2O1", "OG2N1", "0.0150", "6", "180.00", "NIPR, nitropropane, abar"}, {"CG321", "CG324", "NG2P1", "CG2N1", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"CG321", "CG324", "NG2P1", "HGP2", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGA2", "CG324", "NG2P1", "CG2N1", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGA2", "CG324", "NG2P1", "HGP2", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"CG321", "CG324", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"CG331", "CG324", "NG3P0", "CG324", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"CG331", "CG324", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG324", "NG3P0", "CG324", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG324", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"CG2R61", "CG324", "NG3P1", "CG324", "1.7000", "1", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "NG3P1", "CG324", "0.8000", "2", "180.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "NG3P1", "CG324", "0.5800", "3", "0.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG2R61", "CG324", "NG3P1", "HGP2", "0.0400", "3", "0.00", "BPIP, N-Benzyl PIP, cacha"}, {"CG311", "CG324", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG311", "CG324", "NG3P1", "CG334", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG311", "CG324", "NG3P1", "HGP2", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG321", "CG324", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG321", "CG324", "NG3P1", "CG334", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"CG321", "CG324", "NG3P1", "HGP2", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA2", "CG324", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P1", "CG334", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P1", "HGP2", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"CG311", "CG324", "NG3P2", "CG324", "0.4000", "1", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG311", "CG324", "NG3P2", "CG324", "0.2500", "2", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG311", "CG324", "NG3P2", "CG324", "0.6000", "3", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG311", "CG324", "NG3P2", "HGP2", "0.1000", "3", "0.00", "G3P(R/S), Gamma-3-Piperidine Glu Acid CDCA Amide, cacha"}, {"CG321", "CG324", "NG3P2", "CG314", "0.4000", "1", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG314", "0.2500", "2", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG314", "0.6000", "3", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG324", "0.4000", "1", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG324", "0.2500", "2", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "CG324", "0.6000", "3", "0.00", "*** Developmental params for PEI polymers and PIP. Will be tweaked, then applied to existing PIP derivatives *** kevo"}, {"CG321", "CG324", "NG3P2", "HGP2", "0.1000", "3", "0.00", "PIP, piperidine"}, {"HGA2", "CG324", "NG3P2", "CG314", "0.1000", "3", "0.00", "3MRB, Gamma-3 methyl piperidine, alpha-benzyl GA CDCA amide, cacha; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P2", "CG324", "0.1000", "3", "0.00", "PIP, piperidine; PEI polymers, kevo"}, {"HGA2", "CG324", "NG3P2", "HGP2", "0.1000", "3", "0.00", "PIP, piperidine"}, {"CG2O1", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG2O3", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG321", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG331", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"CG3C31", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "AMCP, aminomethyl cyclopropane; from PROT 0.715->0.10 METHYLAMMONIUM (KK); jhs"}, {"HGA2", "CG324", "NG3P3", "HGP2", "0.1000", "3", "0.00", "PROT 0.715->0.10 METHYLAMMONIUM (KK)"}, {"HGA3", "CG331", "CG331", "HGA3", "0.1550", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"HGA3", "CG331", "CG3C51", "CG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "CG3C52", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "CG3RC1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "OG3C51", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3C51", "HGA1", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell, tf2m viv"}, {"HGA3", "CG331", "CG3RC1", "CG311", "0.1500", "3", "180.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA3", "CG331", "CG3RC1", "CG321", "0.1600", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA3", "CG331", "CG3RC1", "CG3C51", "0.1500", "3", "180.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA3", "CG331", "CG3RC1", "CG3RC1", "0.1500", "3", "180.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA3", "CG331", "NG2D1", "CG2D1", "0.1000", "3", "0.00", "RETINOL SCH1, Schiff's base, deprotonated"}, {"HGA3", "CG331", "NG2D1", "CG2N1", "0.1100", "3", "180.00", "MGU1, methylguanidine"}, {"HGA3", "CG331", "NG2D1", "CG2O7", "0.0300", "3", "0.00", "MICY, methyl isocyanate, xxwy"}, {"HGA3", "CG331", "NG2R51", "CG2R53", "0.0000", "3", "0.00", "NA 9-M-A"}, {"HGA3", "CG331", "NG2R51", "CG2RC0", "0.1900", "3", "0.00", "NA 9-M-G"}, {"HGA3", "CG331", "NG2R61", "CG2R62", "0.0000", "3", "0.00", "NA 1-M-C"}, {"HGA3", "CG331", "NG2R61", "CG2R63", "0.1900", "3", "0.00", "NA 1-M-C"}, {"HGA3", "CG331", "NG2S0", "CG2O1", "0.0000", "3", "0.00", "DMA, dimethylacetamide; from PROT, sp2-methyl, no torsion potential; xxwy and jhs"}, {"HGA3", "CG331", "NG2S0", "CG331", "0.4200", "3", "0.00", "DMF, Dimethylformamide, xxwy"}, {"HGA3", "CG331", "NG2S1", "CG2O1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"HGA3", "CG331", "NG2S1", "CG2O6", "0.0000", "3", "0.00", "DMCB, diethyl carbamate, kevo"}, {"HGA3", "CG331", "NG2S1", "HGP1", "0.0000", "3", "0.00", "PROT, sp2-methyl, no torsion potential"}, {"HGA3", "CG331", "NG2S3", "PG1", "0.1500", "3", "0.00", "NABAKB phosphoramidates"}, {"HGA3", "CG331", "NG2S3", "SG3O1", "0.1500", "3", "0.00", "NMSM, N-methyl-sulfamate; from HGA3 CG331 NG2S3 PG1; my"}, {"HGA3", "CG331", "NG2S3", "HGP1", "0.0100", "3", "0.00", "NABAKB phosphoramidates"}, {"HGA3", "CG331", "NG301", "CG2R61", "0.4300", "3", "0.00", "DMAN, N,N-dimethylaniline, kevo"}, {"HGA3", "CG331", "NG301", "CG2R64", "0.0000", "3", "180.00", "TMC, from HGA3 CG331 NG311 CG2N1, yxu"}, {"HGA3", "CG331", "NG301", "CG331", "0.0000", "3", "180.00", "TMC, from HGA3 CG331 NG311 CG2N1, yxu"}, {"HGA3", "CG331", "NG311", "CG2N1", "0.0000", "3", "180.00", "MGU2, methylguanidine2 Taken together, these two params don't make much sense"}, {"HGA3", "CG331", "NG311", "SG3O2", "0.1000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"HGA3", "CG331", "NG311", "HGP1", "0.0500", "3", "0.00", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"HGA3", "CG331", "NG311", "HGPAM1", "0.4200", "3", "0.00", "MGU2, methylguanidine2 / Taken together, these two params don't make much sense"}, {"HGA3", "CG331", "OG301", "CG2D1O", "0.0650", "3", "0.00", "MOET, Methoxyethene, xxwy"}, {"HGA3", "CG331", "OG301", "CG2D2O", "0.0650", "3", "0.00", "MOET, Methoxyethene, xxwy"}, {"HGA3", "CG331", "OG301", "CG2R61", "0.0850", "3", "0.00", "MEOB, Methoxybenzene, cacha"}, {"HGA3", "CG331", "OG301", "CG301", "0.2840", "3", "0.00", "AMOL, alpha-methoxy-lactic acid, og"}, {"HGA3", "CG331", "OG301", "CG311", "0.2840", "3", "0.00", "all34_ethers_1a og/gk (not affected by mistake)"}, {"HGA3", "CG331", "OG301", "CG321", "0.2840", "3", "0.00", "diethylether, alex"}, {"HGA3", "CG331", "OG301", "CG331", "0.2840", "3", "0.00", "diethylether, alex !from HCT2-CCT2-OCE-CG321 DME, viv"}, {"HGA3", "CG331", "OG301", "CG3C51", "0.2000", "1", "180.00", "THF2, THF-2'OMe C2'-OM-CM-H, from Nucl. Acids, ed"}, {"HGA3", "CG331", "OG301", "CG3C51", "1.2000", "2", "180.00", "THF2, THF-2'OMe C2'-OM-CM-H, from Nucl. Acids, ed"}, {"HGA3", "CG331", "OG302", "CG2O2", "0.0000", "3", "0.00", "LIPID phosphate, new NA, 4/98, adm jr."}, {"HGA3", "CG331", "OG302", "CG2O6", "0.0000", "3", "0.00", "DMCB and DMCA, dimethyl carbamate and carbonate, kevo"}, {"HGA3", "CG331", "OG303", "PG0", "0.0000", "3", "0.00", "NA dmp !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGA3", "CG331", "OG303", "PG1", "0.0000", "3", "0.00", "NA dmp !Reorganization:MP_1"}, {"HGA3", "CG331", "OG303", "PG2", "0.0000", "3", "0.00", "NA dmp !Reorganization:MP_2"}, {"HGA3", "CG331", "OG303", "SG3O1", "0.0000", "3", "0.00", "LIPID methylsulfate"}, {"HGA3", "CG331", "OG303", "SG3O2", "0.0000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"HGA3", "CG331", "OG311", "HGP1", "0.1800", "3", "0.00", "og methanol"}, {"HGA3", "CG331", "SG301", "SG301", "0.1580", "3", "0.00", "PROT expt. dimethyldisulfide, 3/26/92 (FL)"}, {"HGA3", "CG331", "SG311", "CG2N2", "0.3600", "3", "0.00", "MT2A , from HGA3 CG331 SG311 CG2O6"}, {"HGA3", "CG331", "SG311", "CG2O6", "0.3600", "3", "0.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"HGA3", "CG331", "SG311", "CG2R64", "0.1500", "3", "180.00", "2SMPYR, 2-(methylthio)-pyrimidine; from HGA3 CG331 SG311 CG2O6; isg"}, {"HGA3", "CG331", "SG311", "CG321", "0.2800", "3", "0.00", "PROT DTN 8/24/90"}, {"HGA3", "CG331", "SG311", "HGP3", "0.2000", "3", "0.00", "PROT methanethiol pure solvent, adm jr., 6/22/92"}, {"HGA3", "CG331", "SG3O1", "OG2P1", "0.2300", "3", "0.00", "MSNA, methyl sulfonate, xhe"}, {"HGA3", "CG331", "SG3O2", "CG321", "0.0850", "3", "0.00", "MESN, methyl ethyl sulfone, xhe"}, {"HGA3", "CG331", "SG3O2", "CG331", "0.1150", "3", "0.00", "DMSN, dimethyl sulfone, xhe"}, {"HGA3", "CG331", "SG3O2", "NG311", "0.1000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGA3", "CG331", "SG3O2", "NG321", "0.1900", "3", "0.00", "MSAM, methanesulfonamide, xxwy"}, {"HGA3", "CG331", "SG3O2", "OG2P1", "0.1800", "3", "0.00", "DMSN, dimethyl sulfone; MSAM, methanesulfonamide and other sulfonamides; xxwy and xhe"}, {"HGA3", "CG331", "SG3O2", "OG303", "0.0000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"HGA3", "CG331", "SG3O3", "CG321", "0.2000", "3", "0.00", "MESO, methylethylsulfoxide; from DMSO, dimethylsulfoxide; mnoon"}, {"HGA3", "CG331", "SG3O3", "CG331", "0.2000", "3", "0.00", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"HGA3", "CG331", "SG3O3", "OG2P1", "0.2000", "3", "0.00", "DMSO, dimethylsulfoxide (ML Strader, et al.JPC2002_A106_1074), sz"}, {"HGA3", "CG334", "NG2O1", "OG2N1", "0.0010", "6", "0.00", "NIME, nitromethane, abar"}, {"HGA3", "CG334", "NG2P1", "CG2D1", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA3", "CG334", "NG2P1", "CG2DC1", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA3", "CG334", "NG2P1", "CG2DC2", "0.1500", "3", "180.00", "RETINOL SCH2, Schiff's base, protonated"}, {"HGA3", "CG334", "NG2P1", "CG2N1", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGA3", "CG334", "NG2P1", "HGP2", "0.0000", "6", "180.00", "PROT methylguanidinium, adm jr., 3/26/92"}, {"HGP5", "CG334", "NG3P0", "CG324", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG334", "NG3P0", "CG334", "0.2600", "3", "0.00", "LIPID tetramethylammonium"}, {"HGP5", "CG334", "NG3P0", "OG311", "0.1000", "3", "0.00", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"HGP5", "CG334", "NG3P0", "OG312", "0.3500", "3", "0.00", "TMAO, xxwy and ejd"}, {"HGA3", "CG334", "NG3P1", "CG324", "0.1000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA3", "CG334", "NG3P1", "HGP2", "0.9000", "3", "0.00", "FLAVOP PIP1,2,3"}, {"HGA3", "CG334", "NG3P3", "HGP2", "0.0900", "3", "0.00", "PROT fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"HGAAM0", "CG3AM0", "NG301", "CG3AM0", "0.3150", "3", "0.00", "AMINE aliphatic amines"}, {"HGAAM1", "CG3AM1", "NG311", "CG3AM1", "0.0800", "3", "0.00", "AMINE aliphatic amines"}, {"HGAAM1", "CG3AM1", "NG311", "HGPAM1", "0.4200", "3", "0.00", "AMINE aliphatic amines"}, {"HGAAM2", "CG3AM2", "NG321", "HGPAM2", "0.1600", "3", "0.00", "AMINE aliphatic amines"}, {"CG321", "CG3C31", "CG3C31", "OG3C31", "0.1100", "6", "180.00", "1BOX, 1-butene oxide; from OG3C31 CG3C31 CG3C31 HGA2 from 1EOX, 1-ethylene oxide; kevo"}, {"CG321", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "1BOX, 1-butene oxide; from CG324 CG3C31 CG3C31 HGA2 from PROTMOD hf/cyclopropane; sc"}, {"CG324", "CG3C31", "CG3C31", "CG3C31", "0.1000", "6", "0.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"CG324", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"CG3C31", "CG3C31", "CG3C31", "HGA1", "0.1000", "6", "0.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"CG3C31", "CG3C31", "CG3C31", "HGA2", "0.1000", "6", "0.00", "PROTMOD hf/cyclopropane"}, {"OG3C31", "CG3C31", "CG3C31", "HGA1", "0.1100", "6", "180.00", "1BOX, 1-butene oxide; from OG3C31 CG3C31 CG3C31 HGA2 from 1EOX, 1-ethylene oxide; kevo"}, {"OG3C31", "CG3C31", "CG3C31", "HGA2", "0.1100", "6", "180.00", "1EOX, 1-ethylene oxide, kevo"}, {"HGA1", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "AMCP, aminomethyl cyclopropane; from PROTMOD hf/cyclopropane; jhs"}, {"HGA2", "CG3C31", "CG3C31", "HGA2", "0.2000", "5", "180.00", "PROTMOD hf/cyclopropane"}, {"CG3RC1", "CG3C31", "CG3RC1", "CG321", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "CG3C51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "NG2R61", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C31", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG321", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG3C51", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG3C52", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C31", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C31", "OG3C31", "CG3C31", "0.6400", "5", "0.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"CG321", "CG3C31", "OG3C31", "CG3C31", "0.8100", "6", "180.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"HGA1", "CG3C31", "OG3C31", "CG3C31", "0.6400", "5", "0.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"HGA1", "CG3C31", "OG3C31", "CG3C31", "0.8100", "6", "180.00", "1BOX, 1-butene oxide; from HGA2 CG3C31 OG3C31 CG3C31 from 1EOX, 1-ethylene oxide; kevo"}, {"HGA2", "CG3C31", "OG3C31", "CG3C31", "0.6400", "5", "0.00", "1EOX, 1-ethylene oxide, kevo"}, {"HGA2", "CG3C31", "OG3C31", "CG3C31", "0.8100", "6", "180.00", "1EOX, 1-ethylene oxide, kevo"}, {"CG2R53", "CG3C41", "CG3C41", "NG2R43", "3.0000", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "CG3C41", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"CG3C41", "CG3C41", "CG3C41", "CG3C41", "1.4300", "3", "0.00", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"CG3C41", "CG3C41", "CG3C41", "OG3C51", "0.0000", "3", "0.00", "OXTN, oxetane, gmu"}, {"CG3C41", "CG3C41", "CG3C41", "HGA2", "0.5700", "3", "0.00", "CBU, cyclobutane; QM by Nikolay Simakov; lsk"}, {"NG2R43", "CG3C41", "CG3C41", "HGA2", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"OG3C51", "CG3C41", "CG3C41", "HGA2", "0.1900", "3", "0.00", "OXTN, oxetane, gmu"}, {"HGA2", "CG3C41", "CG3C41", "HGA2", "0.0000", "3", "0.00", "CBU, cyclobutane, kevo"}, {"CG3C41", "CG3C41", "NG2R43", "CG2R53", "3.0000", "3", "0.00", "AZDO, 2-azetidinone, kevo"}, {"CG3C41", "CG3C41", "NG2R43", "HGP1", "0.2000", "3", "180.00", "AZDO, 2-azetidinone, kevo"}, {"HGA2", "CG3C41", "NG2R43", "CG2R53", "0.5700", "3", "0.00", "AZDO, 2-azetidinone; lsk and kevo"}, {"HGA2", "CG3C41", "NG2R43", "HGP1", "0.0000", "3", "0.00", "AZDO, 2-azetidinone, lsk and kevo"}, {"CG3C41", "CG3C41", "OG3C51", "CG3C41", "0.5000", "3", "0.00", "OXTN, oxetane, gmu (CG3C52 CG3C52 OG3C51 CG3C52)"}, {"HGA2", "CG3C41", "OG3C51", "CG3C41", "0.3000", "3", "0.00", "OXTN, oxetane, gmu"}, {"CG321", "CG3C51", "CG3C51", "CG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C51", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C51", "NG2S3", "0.5000", "2", "180.00", "NABAKB phosphoramidates"}, {"CG321", "CG3C51", "CG3C51", "NG321", "0.3000", "3", "180.00", "amines"}, {"CG321", "CG3C51", "CG3C51", "OG303", "0.8000", "3", "180.00", "NA, sugar"}, {"CG321", "CG3C51", "CG3C51", "OG303", "0.2000", "4", "0.00", "NA, sugar"}, {"CG321", "CG3C51", "CG3C51", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG321", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C51", "CG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C51", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C51", "OG303", "0.8000", "3", "180.00", "NA, sugar"}, {"CG331", "CG3C51", "CG3C51", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG331", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C51", "CG3C51", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C51", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C51", "CG3C53", "0.4000", "6", "0.00", "NA bkb"}, {"CG3C51", "CG3C51", "CG3C51", "NG2R51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "CG3C51", "NG2R61", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "CG3C51", "NG301", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"CG3C51", "CG3C51", "CG3C51", "OG303", "2.0000", "3", "180.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C51", "OG303", "0.4000", "5", "0.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C51", "OG303", "0.8000", "6", "0.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C51", "OG311", "0.2000", "3", "0.00", "par22, X CT1 CT2 X; erh 3/08"}, {"CG3C51", "CG3C51", "CG3C51", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C51", "FGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C51", "HGA6", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C51", "CG3C51", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C52", "CG3C51", "CG3C51", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3C51", "NG2R51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "CG3C51", "OG303", "0.8000", "3", "180.00", "NA, sugar"}, {"CG3C52", "CG3C51", "CG3C51", "OG303", "0.2000", "4", "0.00", "NA, sugar"}, {"CG3C52", "CG3C51", "CG3C51", "OG311", "0.2000", "3", "0.00", "par22, X CT1 CT2 X; erh 3/08"}, {"CG3C52", "CG3C51", "CG3C51", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C51", "CG3C51", "FGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C52", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C51", "CG3C51", "HGA6", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C53", "CG3C51", "CG3C51", "OG311", "0.1400", "3", "0.00", "PROT, hydroxyl wild card"}, {"CG3C53", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG3RC1", "CG3C51", "CG3C51", "OG311", "0.6000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "CG3C51", "OG311", "0.7000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "CG3C51", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugar"}, {"NG2R51", "CG3C51", "CG3C51", "OG303", "0.0000", "3", "0.00", "NA nadp/nadph"}, {"NG2R51", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA Guanine and uracil"}, {"NG2R51", "CG3C51", "CG3C51", "HGA1", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA Adenine and cytosine"}, {"NG2R61", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA nadp/nadph"}, {"NG2S3", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG301", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to Adenine and cytosine from par_all27_na.prm"}, {"NG301", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"NG321", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG321", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"OG303", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.6000", "4", "180.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.3000", "5", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "OG3C51", "0.5000", "6", "0.00", "NA bkb"}, {"OG303", "CG3C51", "CG3C51", "FGA1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"OG303", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C51", "HGA6", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG311", "0.0000", "3", "0.00", "NA bkb"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C51", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG3C51", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"FGA1", "CG3C51", "CG3C51", "HGA1", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA1", "CG3C51", "CG3C51", "HGA1", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA1", "CG3C51", "CG3C51", "HGA6", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG2O1", "CG3C51", "CG3C52", "CG3C52", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "CG3C52", "CG3C52", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG311", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG321", "CG3C51", "CG3C52", "NG3C51", "0.0000", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG321", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG331", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C52", "CG3C51", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C51", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C51", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C52", "CG3C51", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3C52", "NG3C51", "0.6900", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C52", "CG3C51", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3RC1", "CG3C51", "CG3C52", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3RC1", "CG3C51", "CG3C52", "HGA2", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3C52", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R51", "CG3C51", "CG3C52", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R51", "CG3C51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C52", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C52", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "CG3C52", "HGA2", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2S0", "CG3C51", "CG3C52", "CG3C52", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S0", "CG3C51", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C51", "1.3500", "1", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C51", "1.0000", "2", "0.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C51", "0.2000", "3", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C52", "1.3500", "1", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C52", "1.0000", "2", "0.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "CG3C52", "0.2000", "3", "180.00", "NABAKB phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG2S3", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "0.00", "NABAKB tphc phosphoramidates"}, {"NG321", "CG3C51", "CG3C52", "CG3C51", "0.3000", "3", "180.00", "amines"}, {"NG321", "CG3C51", "CG3C52", "HGA2", "0.1500", "3", "180.00", "amines"}, {"OG301", "CG3C51", "CG3C52", "CG3C52", "2.0000", "3", "180.00", "THF2, THF-2'OMe from NA, sugar, ed Kenno: was 1.0 - reset to 2.0"}, {"OG301", "CG3C51", "CG3C52", "CG3C52", "0.4000", "5", "0.00", "THF2, THF-2'OMe from NA, sugar, ed"}, {"OG301", "CG3C51", "CG3C52", "CG3C52", "0.8000", "6", "0.00", "THF2, THF-2'OMe from NA, sugar, ed"}, {"OG301", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "THF2, THF-2'OMe, standard parameter, ed"}, {"OG301", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "180.00", "THF2, THF-2'OMe from NA, sugar, ed. Kenno: was 1.395 - problematic when substituting away hydrogens."}, {"OG303", "CG3C51", "CG3C52", "CG3C51", "2.0000", "3", "180.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "CG3C51", "0.4000", "5", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "CG3C51", "0.8000", "6", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.5000", "1", "180.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.7000", "2", "0.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.4000", "3", "0.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3C52", "0.4000", "5", "0.00", "NA"}, {"OG303", "CG3C51", "CG3C52", "CG3RC1", "1.9000", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG303", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C51", "2.0000", "3", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C51", "0.4000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C51", "0.8000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.5000", "1", "180.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.7000", "2", "0.00", "NA elevates energy at 0 (c3'endo), adm"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.4000", "3", "0.00", "NA abasic nucleoside"}, {"OG311", "CG3C51", "CG3C52", "CG3C52", "0.4000", "5", "0.00", "NA abasic nucleoside"}, {"OG311", "CG3C51", "CG3C52", "CG3RC1", "1.9000", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C52", "HGA2", "0.1950", "3", "180.00", "NA, sugar"}, {"OG3C51", "CG3C51", "CG3C52", "CG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"OG3C51", "CG3C51", "CG3C52", "CG3C52", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"OG3C51", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"FGA1", "CG3C51", "CG3C52", "OG3C51", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"FGA1", "CG3C51", "CG3C52", "HGA2", "0.1850", "3", "0.00", "FLUROALK fluoro_alkanes"}, {"HGA1", "CG3C51", "CG3C52", "CG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA1", "CG3C51", "CG3C52", "CG3C52", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA1", "CG3C51", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3C52", "NG3C51", "0.0000", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"HGA1", "CG3C51", "CG3C52", "OG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"HGA1", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"HGA6", "CG3C51", "CG3C52", "OG3C51", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"HGA6", "CG3C51", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C51", "CG3C51", "CG3C53", "NG2R61", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "CG3C53", "OG3C51", "0.6000", "6", "0.00", "NA, sugar"}, {"CG3C51", "CG3C51", "CG3C53", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "NG2R61", "0.0000", "3", "0.00", "NA Adenine and cytosine"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.2000", "3", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.6000", "4", "180.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.3000", "5", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "OG3C51", "0.5000", "6", "0.00", "NA, sugar"}, {"OG311", "CG3C51", "CG3C53", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG3C51", "CG3C53", "NG2R61", "0.1950", "3", "0.00", "NA nadp/nadph"}, {"HGA1", "CG3C51", "CG3C53", "OG3C51", "0.1950", "3", "0.00", "NA, sugar"}, {"HGA1", "CG3C51", "CG3C53", "HGA1", "0.1950", "3", "0.00", "NA, sugar"}, {"CG311", "CG3C51", "CG3RC1", "CG311", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG3C51", "CG3RC1", "CG321", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG311", "CG3C51", "CG3RC1", "CG331", "0.1580", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG311", "CG3C51", "CG3RC1", "CG3RC1", "0.1580", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3C51", "CG3RC1", "CG3C31", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "CG3C31", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG331", "CG3C51", "CG3RC1", "CG321", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "CG3RC1", "CG331", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG331", "CG3C51", "CG3RC1", "CG3RC1", "0.2000", "3", "0.00", "PROT alkane update, adm jr., 3/2/92"}, {"CG3C51", "CG3C51", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG311", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3C52", "CG3C51", "CG3RC1", "CG321", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG321", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG321", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG331", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C31", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C31", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"CG3C52", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R61", "CG3C51", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R61", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R61", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3C31", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3C31", "0.8000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3C31", "0.2000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "CG3RC1", "0.9000", "6", "0.00", "CARBOCY carbocyclic sugars"}, {"OG303", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG321", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG321", "0.8000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG321", "0.2000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C31", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C31", "0.8000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C31", "0.2000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "CG3C52", "0.4500", "2", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"OG311", "CG3C51", "CG3RC1", "CG3RC1", "0.4500", "2", "0.00", "CARBOCY carbocyclic sugars"}, {"OG311", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"HGA1", "CG3C51", "CG3RC1", "CG311", "0.0500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA1", "CG3C51", "CG3RC1", "CG321", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3RC1", "CG331", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA1", "CG3C51", "CG3RC1", "CG3C31", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"HGA1", "CG3C51", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA1", "CG3C51", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C51", "NG2R51", "CG2R51", "0.2000", "4", "0.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "NG2R51", "CG2R53", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "NG2R51", "CG2RC0", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R51", "CG2R51", "0.2000", "4", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R51", "CG2R53", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R51", "CG2RC0", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3RC1", "CG3C51", "NG2R51", "CG2R53", "0.5000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "NG2R51", "CG2RC0", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"OG3C51", "CG3C51", "NG2R51", "CG2R51", "0.6000", "1", "180.00", "NA, glycosyl linkage 0.5 2 -70 removed by kevo"}, {"OG3C51", "CG3C51", "NG2R51", "CG2R51", "0.2000", "3", "0.00", "NA, glycosyl linkage 0.5 2 -70 removed by kevo"}, {"OG3C51", "CG3C51", "NG2R51", "CG2R53", "1.1000", "1", "0.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C51", "NG2R51", "CG2RC0", "1.1000", "1", "180.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C51", "NG2R51", "CG2RC0", "0.2000", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R51", "CG2R51", "0.2500", "2", "180.00", "NA, glycosyl linkage 0.25 2 180 to compensate for removal of OG3C51 CG3C51 NG2R51 CG2R51 0.5 2 -70"}, {"HGA1", "CG3C51", "NG2R51", "CG2R53", "0.2500", "2", "180.00", "NA, glycosyl linkage 0.25 2 180 to compensate for removal of OG3C51 CG3C51 NG2R51 CG2R51 0.5 2 -70"}, {"HGA1", "CG3C51", "NG2R51", "CG2R53", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R51", "CG2RC0", "0.2500", "2", "180.00", "NA, glycosyl linkage 0.25 2 180 to compensate for removal of OG3C51 CG3C51 NG2R51 CG2R51 0.5 2 -70"}, {"CG3C51", "CG3C51", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C51", "CG3C51", "NG2R61", "CG2R63", "1.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"CG3C52", "CG3C51", "NG2R61", "CG2R63", "1.0000", "3", "0.00", "NA, glycosyl linkage"}, {"CG3RC1", "CG3C51", "NG2R61", "CG2R62", "0.4000", "4", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "NG2R61", "CG2R63", "1.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG3C51", "CG3C51", "NG2R61", "CG2R62", "1.0000", "1", "0.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C51", "NG2R61", "CG2R63", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R61", "CG2R62", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C51", "NG2R61", "CG2R63", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"CG2O1", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C51", "NG2S0", "CG2O1", "0.8000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C51", "NG2S0", "CG3C52", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C51", "NG2S3", "PG1", "1.5000", "1", "180.00", "Questionable THNP parameters ignored"}, {"CG3C51", "CG3C51", "NG2S3", "PG1", "0.6500", "2", "180.00", "Questionable THNP parameters ignored"}, {"CG3C51", "CG3C51", "NG2S3", "PG1", "1.0000", "3", "0.00", "Questionable THNP parameters ignored"}, {"CG3C51", "CG3C51", "NG2S3", "HGP1", "0.3000", "1", "0.00", "NABAKB TPHC phosphoramidates"}, {"CG3C52", "CG3C51", "NG2S3", "PG1", "1.5000", "1", "180.00", "Questionable TPHC parameters ignored"}, {"CG3C52", "CG3C51", "NG2S3", "PG1", "0.6500", "2", "180.00", "Questionable TPHC parameters ignored"}, {"CG3C52", "CG3C51", "NG2S3", "PG1", "1.0000", "3", "0.00", "Questionable TPHC parameters ignored"}, {"CG3C52", "CG3C51", "NG2S3", "HGP1", "0.3000", "1", "0.00", "NABAKB TPHC phosphoramidates"}, {"HGA1", "CG3C51", "NG2S3", "PG1", "0.1500", "3", "0.00", "NABAKB TPHC phosphoramidates"}, {"HGA1", "CG3C51", "NG2S3", "HGP1", "0.0100", "3", "0.00", "NABAKB TPHC phosphoramidates"}, {"CG3C51", "CG3C51", "NG301", "CG2D1O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"CG3C51", "CG3C51", "NG301", "CG2D2O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"OG3C51", "CG3C51", "NG301", "CG2D1O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to for NADPH from par_all27_na.prm"}, {"OG3C51", "CG3C51", "NG301", "CG2D2O", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to for NADPH from par_all27_na.prm"}, {"HGA1", "CG3C51", "NG301", "CG2D1O", "0.1950", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"HGA1", "CG3C51", "NG301", "CG2D2O", "0.1950", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"CG3C51", "CG3C51", "NG321", "HGPAM2", "0.3000", "3", "180.00", "amines"}, {"CG3C52", "CG3C51", "NG321", "HGPAM2", "0.3000", "3", "180.00", "amines"}, {"HGA1", "CG3C51", "NG321", "HGPAM2", "0.0100", "3", "0.00", "amines"}, {"CG3C52", "CG3C51", "OG301", "CG331", "0.1000", "1", "180.00", "THF2, THF-2'OMe c-C2'-OM-cm, from Nucl. Acids, ed"}, {"CG3C52", "CG3C51", "OG301", "CG331", "1.6500", "2", "180.00", "THF2, THF-2'OMe c-C2'-OM-cm, from Nucl. Acids, ed"}, {"CG3C52", "CG3C51", "OG301", "CG331", "0.4500", "3", "0.00", "THF2, THF-2'OMe c-C2'-OM-cm, from Nucl. Acids, ed"}, {"HGA1", "CG3C51", "OG301", "CG331", "0.6000", "1", "0.00", "THF2, THF-2'OMe h-C2'-OM-cm, from Nucl. Acids, ed"}, {"HGA1", "CG3C51", "OG301", "CG331", "1.8000", "2", "180.00", "THF2, THF-2'OMe h-C2'-OM-cm, from Nucl. Acids, ed"}, {"HGA1", "CG3C51", "OG301", "CG331", "0.4800", "3", "0.00", "THF2, THF-2'OMe h-C2'-OM-cm, from Nucl. Acids, ed"}, {"CG3C51", "CG3C51", "OG303", "PG1", "2.5000", "1", "180.00", "reverted to NA, sugar by kevo"}, {"CG3C51", "CG3C51", "OG303", "PG2", "2.5000", "1", "180.00", "reverted to NA, sugar by kevo"}, {"CG3C52", "CG3C51", "OG303", "PG1", "2.5000", "1", "180.00", "NA, sugar ! verified by kevo"}, {"CG3C52", "CG3C51", "OG303", "PG2", "2.5000", "1", "180.00", "NA, sugar ! verified by kevo"}, {"CG3RC1", "CG3C51", "OG303", "PG1", "2.4000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG303", "PG1", "0.4000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG303", "PG1", "1.5000", "3", "180.00", "CARBOCY carbocyclic sugars ! phase adjusted for CGenFF by kevo"}, {"HGA1", "CG3C51", "OG303", "PG1", "0.0000", "3", "0.00", "NA, sugar ! verified by kevo"}, {"HGA1", "CG3C51", "OG303", "PG2", "0.0000", "3", "0.00", "NA, sugar ! verified by kevo"}, {"CG3C51", "CG3C51", "OG311", "HGP1", "0.2900", "1", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C51", "CG3C51", "OG311", "HGP1", "0.6200", "2", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C51", "CG3C51", "OG311", "HGP1", "0.0500", "3", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C52", "CG3C51", "OG311", "HGP1", "0.2900", "1", "0.00", "Team sugar, CC3251 CC3152 OC311 HCP1"}, {"CG3C52", "CG3C51", "OG311", "HGP1", "0.6200", "2", "0.00", "Team sugar, CC3251 CC3152 OC311 HCP1"}, {"CG3C52", "CG3C51", "OG311", "HGP1", "0.0500", "3", "0.00", "Team sugar, CC3251 CC3152 OC311 HCP1"}, {"CG3C53", "CG3C51", "OG311", "HGP1", "0.2900", "1", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C53", "CG3C51", "OG311", "HGP1", "0.6200", "2", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3C53", "CG3C51", "OG311", "HGP1", "0.0500", "3", "0.00", "Team sugar, CC3151 CC3152 OC311 HCP1"}, {"CG3RC1", "CG3C51", "OG311", "HGP1", "1.5000", "1", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG311", "HGP1", "0.3000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C51", "OG311", "HGP1", "0.3200", "3", "0.00", "CARBOCY carbocyclic sugars; Kenno: empirically corrected for HGA1 CG3C51 OG311 HGP1 from Team sugar ==> re-evaluate."}, {"HGA1", "CG3C51", "OG311", "HGP1", "0.1800", "3", "0.00", "Team sugar, HCP1 OC311 CC3151 HCA1"}, {"CG321", "CG3C51", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG321", "CG3C51", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG321", "CG3C51", "OG3C51", "CG3C53", "0.8000", "3", "0.00", "NA, sugar"}, {"CG331", "CG3C51", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG331", "CG3C51", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C51", "OG3C51", "CG3C53", "0.0000", "6", "0.00", "NA, sugar"}, {"CG3C52", "CG3C51", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C51", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"NG2R51", "CG3C51", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NA, sugar"}, {"NG2R51", "CG3C51", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG2R61", "CG3C51", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"NG301", "CG3C51", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NADH, NDPH; Kenno: reverted to uncommented parameter from par_all27_na.prm"}, {"HGA1", "CG3C51", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA1", "CG3C51", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA1", "CG3C51", "OG3C51", "CG3C53", "0.1950", "3", "0.00", "NA, sugar"}, {"CG2R51", "CG3C52", "CG3C52", "CG3C52", "3.7000", "3", "180.00", "CYPE, cyclopentene, abar and rima"}, {"CG2R51", "CG3C52", "CG3C52", "CG3C52", "2.2500", "4", "0.00", "CYPE, cyclopentene, abar and rima"}, {"CG2R51", "CG3C52", "CG3C52", "CG3C52", "0.2300", "6", "180.00", "CYPE, cyclopentene, abar and rima"}, {"CG2R51", "CG3C52", "CG3C52", "NG3C51", "1.7000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG3C52", "CG3C52", "OG3C51", "0.2500", "3", "180.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG2R51", "CG3C52", "CG3C52", "HGA2", "0.1400", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R52", "CG3C52", "CG3C52", "NG3C51", "0.0000", "3", "0.00", "0 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "CG3C52", "CG3C52", "HGA2", "1.0000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"CG2R53", "CG3C52", "CG3C52", "CG3C52", "0.3400", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG2RC0", "CG3C52", "CG3C52", "NG3C51", "2.4800", "3", "0.00", "INDI, indoline, kevo"}, {"CG2RC0", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"CG3C51", "CG3C52", "CG3C52", "CG3C51", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C52", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C51", "CG3C52", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "CG3C52", "NG3C51", "0.6900", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C52", "CG3C52", "CG3C52", "0.4100", "3", "180.00", "cpen, cyclopentane, viv 10/4/05"}, {"CG3C52", "CG3C52", "CG3C52", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3C52", "NG2R53", "2.1300", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG3C52", "CG3C52", "NG2S0", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C52", "NG3C51", "0.6900", "3", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C52", "CG3C52", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C53", "CG3C52", "CG3C52", "CG3C54", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C53", "CG3C52", "CG3C52", "HGA2", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C54", "CG3C52", "CG3C52", "CG3C54", "0.3700", "3", "180.00", "0.8 3 180 ! 0.15 3 0 PRLP, pyrrolidine.H+, kevo"}, {"CG3C54", "CG3C52", "CG3C52", "CG3C54", "0.0300", "6", "180.00", "0.31 6 0 ! 0.10 6 0 PRLP, pyrrolidine.H+, kevo"}, {"CG3C54", "CG3C52", "CG3C52", "NG3C51", "0.0400", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C54", "CG3C52", "CG3C52", "HGA2", "0.1600", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3RC1", "CG3C52", "CG3C52", "CG3RC1", "0.2100", "3", "180.00", "NORB, Norbornane, kevo"}, {"CG3RC1", "CG3C52", "CG3C52", "OG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3RC1", "CG3C52", "CG3C52", "HGA2", "0.1950", "3", "0.00", "LIPID alkanes"}, {"NG2R50", "CG3C52", "CG3C52", "NG3C51", "1.0000", "3", "0.00", "0 2IMI, 2-imidazoline ! 1a,1,NCCN+, kevo"}, {"NG2R50", "CG3C52", "CG3C52", "HGA2", "0.3000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"NG2R53", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"NG2S0", "CG3C52", "CG3C52", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C52", "CG3C52", "HGA2", "0.0000", "3", "0.00", "2PRL, 2-pyrroline; 2IMI, 2-imidazoline, kevo"}, {"OG3C51", "CG3C52", "CG3C52", "OG3C51", "0.2600", "3", "0.0", "DIOL, 1,3-Dioxolane fit_dihedral, erh"}, {"OG3C51", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf viv"}, {"HGA2", "CG3C52", "CG3C52", "HGA2", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell, thf, viv"}, {"CG3C52", "CG3C52", "CG3C53", "CG2O1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C53", "CG2O3", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C53", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C53", "HGA1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "CG2O1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "CG2O3", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C53", "HGA1", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2R51", "CG3C52", "CG3C54", "NG3P2", "0.6000", "3", "180.00", "0.5 0.4 2PRP, 2-pyrroline.H+, kevo"}, {"CG2R51", "CG3C52", "CG3C54", "HGA2", "0.1400", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG3C52", "CG3C52", "CG3C54", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "CG3C54", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C52", "CG3C54", "NG3P2", "0.4900", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3C51", "CG3C52", "CG3C54", "HGA2", "0.3700", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C52", "CG3C54", "NG3P2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "CG3C54", "HGA2", "0.1400", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C52", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "CG3RC1", "CG3RC1", "1.7500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3C52", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG311", "0.1000", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3C52", "CG3C52", "CG3RC1", "CG311", "0.5000", "4", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG3C52", "CG3C52", "CG3RC1", "CG321", "0.2000", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C31", "2.2000", "2", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C31", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C31", "0.5500", "6", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from NORB; xxwy"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"CG3C52", "CG3C52", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3C52", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3C52", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"CG3RC1", "CG3C52", "CG3RC1", "HGA1", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"HGA2", "CG3C52", "CG3RC1", "CG311", "0.1950", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"HGA2", "CG3C52", "CG3RC1", "CG321", "0.1950", "1", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"HGA2", "CG3C52", "CG3RC1", "CG3C31", "0.1950", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "CG3C51", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from NORB; xxwy"}, {"HGA2", "CG3C52", "CG3RC1", "CG3C52", "0.0000", "3", "0.00", "NORB, Norbornane, kevo"}, {"HGA2", "CG3C52", "CG3RC1", "CG3RC1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"HGA2", "CG3C52", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG2R51", "CG3C52", "NG2R50", "CG2R52", "2.0000", "2", "180.00", "2HPR, 2H-pyrrole !???, kevo"}, {"CG3C52", "CG3C52", "NG2R50", "CG2R53", "1.9000", "3", "180.00", "2.0 2IMI, 2-imidazoline -1a, kevo"}, {"HGA2", "CG3C52", "NG2R50", "CG2R52", "0.0000", "3", "0.00", "2HPR, 2H-pyrrole !x, kevo"}, {"HGA2", "CG3C52", "NG2R50", "CG2R53", "0.6000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"CG3C52", "CG3C52", "NG2R53", "CG2R53", "2.3100", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG3C52", "NG2R53", "HGP1", "0.7600", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"HGA2", "CG3C52", "NG2R53", "CG2R53", "0.0000", "3", "0.00", "2PDO, 2-pyrrolidinone, kevo"}, {"HGA2", "CG3C52", "NG2R53", "HGP1", "0.0000", "3", "180.00", "2PDO, 2-pyrrolidinone, kevo"}, {"CG3C52", "CG3C52", "NG2S0", "CG2O1", "0.0000", "3", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C52", "NG2S0", "CG3C51", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "NG2S0", "CG2O1", "0.0000", "3", "180.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C52", "NG2S0", "CG3C51", "0.1000", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2R51", "CG3C52", "NG3C51", "CG3C52", "2.0500", "3", "180.00", "2.05 2.02 2.05 1.4 1.38 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C52", "NG3C51", "HGP1", "1.7700", "1", "180.00", "1.77 1.60 1.0 *new* 3PRL, 3-pyrroline, kevo"}, {"CG2R51", "CG3C52", "NG3C51", "HGP1", "0.7000", "3", "0.00", "0.70 0.75 0.5 1.10 3PRL, 3-pyrroline, kevo"}, {"CG3C51", "CG3C52", "NG3C51", "CG3C52", "0.1800", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "NG3C51", "HGP1", "0.5500", "1", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C51", "CG3C52", "NG3C51", "HGP1", "0.8500", "3", "0.00", "3POMP, 3-phenoxymethylpyrrolidine; from PRLD etc; kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG2R51", "0.0500", "3", "180.00", "2PRL, 2-pyrroline, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG2R53", "1.9000", "3", "180.00", "1.6 ! 2.5 1.5 2IMI, 2-imidazoline -1a, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG2RC0", "1.4500", "3", "180.00", "INDI, indoline, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "CG3C52", "0.1800", "3", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "NG2R50", "2.8000", "3", "180.00", "2.9 2PRZ, 2-pyrazoline, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "NG3P2", "0.9000", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "HGP1", "0.5500", "1", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C52", "CG3C52", "NG3C51", "HGP1", "0.8500", "3", "0.00", "PRLD, pyrrolidine fit_dihedral run 31, kevo"}, {"CG3C54", "CG3C52", "NG3C51", "CG3C54", "1.5800", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"CG3C54", "CG3C52", "NG3C51", "HGP1", "1.6500", "1", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"CG3C54", "CG3C52", "NG3C51", "HGP1", "0.7400", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C52", "NG3C51", "CG2R51", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG2R53", "0.1000", "3", "0.00", "2IMI, 2-imidazoline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG2RC0", "0.0000", "3", "0.00", "INDI, indoline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG3C52", "0.0000", "3", "0.00", "3PRL, 3-pyrroline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "CG3C54", "0.4800", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C52", "NG3C51", "NG2R50", "0.3000", "3", "0.00", "2PRZ, 2-pyrazoline, kevo"}, {"HGA2", "CG3C52", "NG3C51", "NG3P2", "0.0000", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"HGA2", "CG3C52", "NG3C51", "HGP1", "0.0000", "3", "0.00", "2PRL, 2-pyrroline, kevo"}, {"CG2R51", "CG3C52", "OG3C51", "CG2R53", "0.3100", "1", "180.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R51", "CG3C52", "OG3C51", "CG2R53", "0.2800", "6", "0.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG3C51", "CG3C52", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C52", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C51", "CG3C52", "OG3C51", "CG3RC1", "0.5000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3C52", "CG3C52", "OG3C51", "CG2R51", "0.7300", "3", "0.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"CG3C52", "CG3C52", "OG3C51", "CG2R53", "2.2200", "2", "0.00", "GBL, Gamma-butyrolactone, ctsai"}, {"CG3C52", "CG3C52", "OG3C51", "CG3C51", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C52", "OG3C51", "CG3C52", "0.5000", "3", "0.00", "THF, 05/30/06, viv"}, {"CG3C52", "CG3C52", "OG3C51", "CG3RC1", "0.5000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"OG3C51", "CG3C52", "OG3C51", "CG2RC0", "0.5000", "3", "0.00", "ZDOL, 1,3-benzodioxole; from THF, tetrahydofuran; kevo"}, {"OG3C51", "CG3C52", "OG3C51", "CG3C52", "1.6500", "3", "180.00", "DIOL, 1,3-Dioxolane fit_dihedral, erh"}, {"HGA2", "CG3C52", "OG3C51", "CG2R51", "0.0000", "3", "0.00", "2DHF, 2,3-dihydrofuran, kevo"}, {"HGA2", "CG3C52", "OG3C51", "CG2R53", "0.0000", "3", "0.00", "GBL, from HGA2 CG3C52 OG3C51 CG2R51, ctsai"}, {"HGA2", "CG3C52", "OG3C51", "CG2RC0", "0.3000", "3", "0.00", "ZDOL, 1,3-benzodioxole; from THF, tetrahydofuran; kevo"}, {"HGA2", "CG3C52", "OG3C51", "CG3C51", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA2", "CG3C52", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "THF, 05/30/06, viv"}, {"HGA2", "CG3C52", "OG3C51", "CG3RC1", "0.3000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG3C51", "CG3C53", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "NA, glycosyl linkage"}, {"OG3C51", "CG3C53", "NG2R61", "CG2R62", "1.0000", "1", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C53", "NG2R61", "CG2R62", "0.1950", "3", "0.00", "NA, glycosyl linkage"}, {"CG2O1", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O1", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG2O3", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C53", "NG3P2", "CG3C54", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA1", "CG3C53", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C51", "CG3C53", "OG3C51", "CG3C51", "0.0000", "6", "0.00", "NA, sugar"}, {"NG2R61", "CG3C53", "OG3C51", "CG3C51", "0.0000", "3", "0.00", "NA, glycosyl linkage"}, {"HGA1", "CG3C53", "OG3C51", "CG3C51", "0.1950", "3", "0.00", "NA, sugar"}, {"NG2R52", "CG3C54", "CG3C54", "NG2R52", "0.0700", "3", "0.00", "0 2IMP, 2-imidazoline.H+, kevo"}, {"NG2R52", "CG3C54", "CG3C54", "HGA2", "0.3000", "3", "0.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGA2", "CG3C54", "CG3C54", "HGA2", "0.1400", "3", "0.00", "2IMP, 2-imidazoline.H+ ! RE-OPTIMIZE !!!, kevo"}, {"CG2R51", "CG3C54", "NG2R52", "CG2R52", "2.8000", "2", "180.00", "2.7 2.3 2HPP, 2H-pyrrole.H+ 1a, kevo"}, {"CG2R51", "CG3C54", "NG2R52", "HGP2", "2.7000", "2", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"CG3C54", "CG3C54", "NG2R52", "CG2R53", "0.2500", "3", "180.00", "0.21 2IMP, 2-imidazoline.H+, kevo"}, {"CG3C54", "CG3C54", "NG2R52", "HGP2", "0.6000", "3", "0.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGA2", "CG3C54", "NG2R52", "CG2R52", "0.0000", "3", "180.00", "2HPP, 2H-pyrrole.H+, kevo"}, {"HGA2", "CG3C54", "NG2R52", "CG2R53", "0.0000", "3", "180.00", "2IMP, 2-imidazoline.H+, kevo"}, {"HGA2", "CG3C54", "NG2R52", "HGP2", "0.0000", "3", "0.00", "2IMP, 2-imidazoline.H+; 2HPP, 2H-pyrrole.H+, kevo"}, {"NG3P2", "CG3C54", "NG3C51", "CG3C52", "1.7700", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3P2", "CG3C54", "NG3C51", "HGP1", "1.8400", "1", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3P2", "CG3C54", "NG3C51", "HGP1", "0.9600", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C54", "NG3C51", "CG3C52", "0.4800", "3", "0.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C54", "NG3C51", "HGP1", "0.0000", "3", "0.00", "IMDP, imidazolidine, erh and kevo"}, {"CG2R51", "CG3C54", "NG3P2", "CG3C54", "1.8800", "3", "180.00", "1.9 1.5 3PRP, 3-pyrroline.H+, kevo"}, {"CG2R51", "CG3C54", "NG3P2", "HGP2", "0.3000", "3", "0.00", "3PRP, 3-pyrroline.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "CG2R51", "0.7000", "3", "180.00", "0.7 2PRP, 2-pyrroline.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "CG3C53", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG3C52", "CG3C54", "NG3P2", "CG3C54", "0.1000", "3", "0.00", "PRLP, pyrrolidine.H+, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "NG3C51", "0.0400", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C52", "CG3C54", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"NG3C51", "CG3C54", "NG3P2", "CG3C54", "2.7400", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"NG3C51", "CG3C54", "NG3P2", "HGP2", "0.1600", "3", "180.00", "IMDP, imidazolidine fit_dihedral, erh"}, {"HGA2", "CG3C54", "NG3P2", "CG2R51", "0.2000", "3", "0.00", "2PRP, 2-pyrroline.H+, kevo"}, {"HGA2", "CG3C54", "NG3P2", "CG3C53", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"HGA2", "CG3C54", "NG3P2", "CG3C54", "0.1000", "3", "0.00", "PRLP, pyrrolidine.H+, kevo"}, {"HGA2", "CG3C54", "NG3P2", "NG3C51", "0.1000", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"HGA2", "CG3C54", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD 4/23/93"}, {"CG311", "CG3RC1", "CG3RC1", "CG311", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG3RC1", "CG3RC1", "CG321", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG311", "CG3RC1", "CG3RC1", "CG331", "0.1580", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3RC1", "CG3C51", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08"}, {"CG311", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CA, Cholic Acid, cacha, 02/08 corrected by kevo"}, {"CG311", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "CG321", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "CG331", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3RC1", "CG3C31", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "CG3C51", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG321", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG321", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG331", "CG3RC1", "CG3RC1", "CG3C52", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG331", "CG3RC1", "CG3RC1", "HGA1", "0.0500", "3", "0.00", "BAM1, bile acid steroidal C-D ring, cacha, 02/08"}, {"CG3C31", "CG3RC1", "CG3RC1", "CG3C51", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "CG3RC1", "CG3C52", "4.0000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C51", "CG3RC1", "CG3RC1", "OG3C51", "1.2000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"CG3C51", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "CG3C52", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "NG2R51", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "NG2R61", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "CG3RC1", "OG3C51", "1.2000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"CG3C52", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R51", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"NG2R53", "CG3RC1", "CG3RC1", "NG2R53", "0.1500", "3", "0.00", "CBHH, glycoluril, (CG3C52 CG3RC1 CG3RC1 NG2R51), jing"}, {"NG2R53", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CBHH, glycoluril, (NG2R51 CG3RC1 CG3RC1 HGA1), jing"}, {"NG2R61", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"OG3C51", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from CARBOCY; xxwy"}, {"HGA1", "CG3RC1", "CG3RC1", "HGA1", "0.1500", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R51", "CG2R53", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R51", "CG2RC0", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R51", "CG2R53", "0.1000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R51", "CG2RC0", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R51", "CG2R53", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R51", "CG2RC0", "1.1000", "1", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R53", "CG2R53", "1.1000", "1", "180.00", "CBHH, glycoluril, (CG3RC1 CG3RC1 NG2R51 CG2R53), jing"}, {"CG3RC1", "CG3RC1", "NG2R53", "HGP1", "0.7600", "3", "0.00", "CBHH, glycoluril, (CG3C52 CG3C52 NG2R53 HGP1), jing"}, {"NG2R53", "CG3RC1", "NG2R53", "CG2R53", "2.3100", "3", "180.00", "CBHH, glycoluril, (CG3C52 CG3C52 NG2R53 CG2R53), jing"}, {"NG2R53", "CG3RC1", "NG2R53", "HGP1", "0.7600", "3", "0.00", "CBHH, glycoluril, (CG3C52 CG3C52 NG2R53 HGP1), jing"}, {"HGA1", "CG3RC1", "NG2R53", "CG2R53", "0.0000", "3", "0.00", "CBHH, glycoluril, (HGA2 CG3C52 NG2R53 CG2R53), jing"}, {"HGA1", "CG3RC1", "NG2R53", "HGP1", "0.0000", "3", "180.00", "CBHH, glycoluril, (HGA2 CG3C52 NG2R53 HGP1), jing"}, {"CG3C31", "CG3RC1", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C31", "CG3RC1", "NG2R61", "CG2R63", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3C52", "CG3RC1", "NG2R61", "CG2R63", "0.3000", "3", "0.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R61", "CG2R62", "0.0000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "NG2R61", "CG2R63", "0.2000", "3", "180.00", "CARBOCY carbocyclic sugars"}, {"CG3RC1", "CG3RC1", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"OG3C51", "CG3RC1", "OG3C51", "CG3C52", "0.0000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; xxwy"}, {"HGA1", "CG3RC1", "OG3C51", "CG3C52", "0.3000", "3", "0.00", "RSRF, 4,6-dioxabicyclo[3.3.0]octan-8-ol; from THF; xxwy"}, {"CG2D1", "NG2D1", "NG2S1", "CG2O1", "3.4000", "1", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG2D1", "NG2D1", "NG2S1", "CG2O1", "1.3000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG2D1", "NG2D1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ1, hydrazone model cmpd"}, {"CG2DC1", "NG2D1", "NG2S1", "CG2O1", "3.4000", "1", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "NG2D1", "NG2S1", "CG2O1", "1.3000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC1", "NG2D1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "NG2D1", "NG2S1", "CG2O1", "3.4000", "1", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "NG2D1", "NG2S1", "CG2O1", "1.3000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2DC2", "NG2D1", "NG2S1", "HGP1", "2.5000", "2", "180.00", "HDZ2, hydrazone model cmpd 2"}, {"CG2R51", "NG2R50", "NG2R50", "NG2R51", "14.0000", "2", "180.00", "TRZ3, triazole123"}, {"CG2R51", "NG2R50", "NG2R50", "OG2R50", "14.0000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG2R52", "NG2R50", "NG2R51", "CG2R51", "12.0000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R52", "NG2R50", "NG2R51", "CG2RC0", "8.5000", "2", "180.00", "INDA, 1H-indazole, kevo"}, {"CG2R52", "NG2R50", "NG2R51", "NG2R50", "9.5000", "2", "180.00", "TRZ2, 2H-1,2,3-triazole, lf"}, {"CG2R52", "NG2R50", "NG2R51", "HGP1", "1.4000", "2", "180.00", "PYRZ, pyrazole"}, {"CG2R53", "NG2R50", "NG2R51", "CG2R53", "10.0000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"CG2R53", "NG2R50", "NG2R51", "HGP1", "2.3000", "2", "180.00", "TRZ4, triazole124, xxwy"}, {"NG2R50", "NG2R50", "NG2R51", "CG2R51", "8.5000", "2", "180.00", "TRZ3, triazole123"}, {"NG2R50", "NG2R50", "NG2R51", "CG321", "2.5000", "2", "180.00", "ETRZ, 1-Ethyl-1,2,3-triazole, from NG2R50 NG2R50 NG2R51 HGP1, kevo"}, {"NG2R50", "NG2R50", "NG2R51", "HGP1", "2.5000", "2", "180.00", "TRZ3, triazole123"}, {"CG2R52", "NG2R50", "NG3C51", "CG3C52", "0.5000", "2", "180.00", "9 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R50", "NG3C51", "HGP1", "0.2500", "3", "0.00", "0.7 1.3 2PRZ, 2-pyrazoline, kevo"}, {"CG2R52", "NG2R50", "OG2R50", "CG2R51", "12.0000", "2", "180.00", "ISOX, isoxazole"}, {"CG2R53", "NG2R50", "OG2R50", "CG2R53", "9.0000", "2", "180.00", "OXD4, oxadiazole124, xxwy"}, {"NG2R50", "NG2R50", "OG2R50", "CG2R51", "8.5000", "2", "180.00", "OXAD, oxadiazole123"}, {"CG2R52", "NG2R50", "SG2R50", "CG2R51", "9.0000", "2", "180.00", "ISOT, isothiazole"}, {"CG2R51", "NG2R57", "NG2R57", "CG2R51", "0.3000", "2", "000.00", "11BPO, 1,1-bipyrrole, lf"}, {"CG2R61", "NG2R62", "NG2R62", "CG2R61", "1.2000", "2", "180.00", "PYRD, pyridazine"}, {"CG2R61", "NG2R62", "NG2R62", "CG2R64", "0.5000", "2", "180.00", "TRIB, triazine124"}, {"CG331", "NG2S3", "PG1", "OG2P1", "0.4000", "3", "0.00", "NABAKB phosphoramidates"}, {"CG331", "NG2S3", "PG1", "OG2P1", "0.5000", "4", "0.00", "NABAKB phosphoramidates"}, {"CG331", "NG2S3", "PG1", "OG303", "1.9000", "2", "0.00", "NABAKB phosphoramidates ! eliminated 0.8 2 120 for OG2P1 and compensated 1.5 -> 1.9 here"}, {"CG3C51", "NG2S3", "PG1", "OG2P1", "0.4000", "3", "0.00", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "PG1", "OG2P1", "0.5000", "4", "0.00", "NABAKB phosphoramidates"}, {"CG3C51", "NG2S3", "PG1", "OG303", "1.9000", "2", "0.00", "NABAKB phosphoramidates ! eliminated 0.8 2 120 for OG2P1 and compensated 1.5 -> 1.9 here"}, {"HGP1", "NG2S3", "PG1", "OG2P1", "0.0500", "3", "0.00", "NABAKB phosphoramidates"}, {"HGP1", "NG2S3", "PG1", "OG303", "0.0500", "3", "0.00", "NABAKB phosphoramidates"}, {"CG321", "NG2S3", "SG3O1", "OG2P1", "0.5520", "3", "0.00", "NESM, N-ethyl-sulfamate, my and kevo"}, {"CG331", "NG2S3", "SG3O1", "OG2P1", "0.5370", "3", "0.00", "NMSM, N-methyl-sulfamate, my"}, {"HGP1", "NG2S3", "SG3O1", "OG2P1", "0.0500", "3", "0.00", "NMSM, N-methyl-sulfamate; from HGP1 NG2S3 PG1 OG2P1; my"}, {"CG2R61", "NG311", "SG3O2", "CG2R61", "1.2000", "1", "180.00", "PBSM, N-phenylbenzenesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "CG2R61", "1.4000", "2", "0.00", "PBSM, N-phenylbenzenesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "CG331", "2.2000", "2", "0.00", "PMSM, N-phenylmethanesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "CG331", "0.2000", "3", "0.00", "PMSM, N-phenylmethanesulfonamide, xxwy"}, {"CG2R61", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "PMSM, N-phenylmethanesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"CG321", "NG311", "SG3O2", "CG2R61", "1.5000", "2", "0.00", "OBTZ, sulfonamide heterocycle in drug HCTZ, xxwy"}, {"CG321", "NG311", "SG3O2", "CG2R61", "0.5000", "3", "0.00", "OBTZ, sulfonamide heterocycle in drug HCTZ, xxwy"}, {"CG321", "NG311", "SG3O2", "CG321", "2.0000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "SG3O2", "CG321", "0.3000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG321", "NG311", "SG3O2", "CG331", "2.0000", "2", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG321", "NG311", "SG3O2", "CG331", "0.3000", "3", "0.00", "AOBT, acyclic model introduced for OBTZ to optimize related dihedrals, xxwy"}, {"CG321", "NG311", "SG3O2", "NG311", "0.9020", "1", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "NG311", "0.6350", "2", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "NG311", "1.4440", "3", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "NG311", "0.3320", "4", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG321", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG2R61", "1.5000", "2", "0.00", "MBSM, N-methylbenzenesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG2R61", "0.5000", "3", "0.00", "MBSM, N-methylbenzenesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG331", "2.0000", "2", "0.00", "MMSM, N-methylmethanesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "CG331", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide, xxwy"}, {"CG331", "NG311", "SG3O2", "NG311", "1.2560", "1", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "0.6240", "2", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "1.8260", "3", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "0.2140", "4", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "NG311", "0.2630", "6", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"CG331", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; MBSM, N-methylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG2R61", "1.2000", "1", "180.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG2R61", "1.1000", "2", "0.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG2R61", "0.5000", "3", "0.00", "MBSM, N-methylbenzenesulfonamide; PBSM, N-phenylbenzenesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG321", "1.3000", "1", "180.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGP1", "NG311", "SG3O2", "CG321", "1.2000", "2", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGP1", "NG311", "SG3O2", "CG321", "0.2000", "3", "0.00", "EESM, N-ethylethanesulfonamide, xxwy"}, {"HGP1", "NG311", "SG3O2", "CG331", "1.0000", "1", "180.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG331", "1.1000", "2", "0.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "CG331", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide; PMSM, N-phenylmethanesulfonamide; xxwy"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.5750", "1", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "1.0830", "2", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.9590", "3", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.1990", "4", "180.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "NG311", "0.2380", "6", "0.00", "MESI, N-methyl,N'-ethylsulfamide, rting"}, {"HGP1", "NG311", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "MMSM, N-methylmethanesulfonamide and other sulfonamides, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG2R61", "1.5000", "1", "180.00", "BSAM, benzenesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG2R61", "1.2000", "2", "0.00", "BSAM, benzenesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG2R61", "0.1000", "3", "0.00", "BSAM, benzenesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG331", "0.9000", "1", "180.00", "MSAM, methanesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG331", "1.6000", "2", "0.00", "MSAM, methanesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "CG331", "0.1000", "3", "0.00", "MSAM, methanesulfonamide, xxwy"}, {"HGP1", "NG321", "SG3O2", "OG2P1", "0.2000", "3", "0.00", "MSAM, methanesulfonamide; BSAM, benzenesulfonamide; xxwy"}, {"HGP1", "NG321", "SG3O2", "OG303", "0.4000", "3", "0.00", "MSMT, methyl sulfamate, PSMT, phenyl sulfamate, xxwy"}, {"CG3C52", "NG3C51", "NG3P2", "CG3C54", "1.0200", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"CG3C52", "NG3C51", "NG3P2", "HGP2", "0.0800", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"HGP1", "NG3C51", "NG3P2", "CG3C54", "2.4500", "1", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"HGP1", "NG3C51", "NG3P2", "CG3C54", "0.0200", "3", "0.00", "PRZP, Pyrazolidine.H+, fit_dihedral run 14, kevo"}, {"HGP1", "NG3C51", "NG3P2", "HGP2", "0.0000", "3", "0.00", "PRZP, Pyrazolidine.H+, kevo"}, {"CG2R61", "NG3N1", "NG3N1", "HGP1", "1.6000", "2", "180.00", "PHHZ, phenylhydrazine, ed"}, {"HGP1", "NG3N1", "NG3N1", "HGP1", "1.1000", "1", "180.00", "HDZN, hydrazine, ed"}, {"HGP1", "NG3N1", "NG3N1", "HGP1", "4.5000", "2", "0.00", "HDZN, hydrazine, ed"}, {"HGP1", "NG3N1", "NG3N1", "HGP1", "0.0500", "3", "0.00", "HDZN, hydrazine, ed"}, {"CG334", "NG3P0", "OG311", "HGP1", "0.2770", "3", "0.00", "TMAOP, Hydroxy(trimethyl)Ammonium, xxwy"}, {"CG331", "OG303", "PG0", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization:MP_0 RE-OPTIMIZE!"}, {"CG331", "OG303", "PG0", "OG311", "0.9500", "2", "0.00", "NA MP_1, adm jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"CG331", "OG303", "PG0", "OG311", "0.5000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"CG2R61", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG2R61", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "PROTNA phenol phosphate, 6/94, adm jr."}, {"CG321", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG303", "1.2000", "1", "180.00", "NA 10/97, DMP, adm jr. !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG303", "0.1000", "2", "180.00", "NA 10/97, DMP, adm jr. !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG303", "0.1000", "3", "180.00", "NA 10/97, DMP, adm jr. !Reorganization: PC and others"}, {"CG321", "OG303", "PG1", "OG304", "1.2000", "1", "180.00", "NA dmp !Reorganization:ADP"}, {"CG321", "OG303", "PG1", "OG304", "0.1000", "2", "180.00", "NA dmp !Reorganization:ADP"}, {"CG321", "OG303", "PG1", "OG304", "0.1000", "3", "180.00", "NA dmp !Reorganization:ADP"}, {"CG321", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "NA MP_1, adm jr."}, {"CG321", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "NA MP_1, adm jr."}, {"CG331", "OG303", "PG1", "NG2S3", "0.4000", "1", "0.00", "NABAKB phosphoramidates"}, {"CG331", "OG303", "PG1", "NG2S3", "0.2600", "2", "0.00", "NABAKB phosphoramidates ! changed 0.4 2 50 into 0.4cos(50)=0.26 2 0"}, {"CG331", "OG303", "PG1", "NG2S3", "0.3500", "3", "0.00", "NABAKB phosphoramidates"}, {"CG331", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization:MP_1"}, {"CG331", "OG303", "PG1", "OG303", "1.2000", "1", "180.00", "NA dmp !Reorganization: PC and others"}, {"CG331", "OG303", "PG1", "OG303", "0.1000", "2", "180.00", "NA dmp !Reorganization: PC and others"}, {"CG331", "OG303", "PG1", "OG303", "0.1000", "3", "180.00", "NA dmp !Reorganization: PC and others"}, {"CG331", "OG303", "PG1", "OG304", "1.2000", "1", "180.00", "NA dmp !Reorganization:PPI1"}, {"CG331", "OG303", "PG1", "OG304", "0.1000", "2", "180.00", "NA dmp !Reorganization:PPI1"}, {"CG331", "OG303", "PG1", "OG304", "0.1000", "3", "180.00", "NA dmp !Reorganization:PPI1"}, {"CG331", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "NA MP_1, adm jr. !Reorganization:MP_1"}, {"CG331", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_1"}, {"CG3C51", "OG303", "PG1", "OG2P1", "0.1000", "3", "0.00", "BPNP and others dmp,eps, O1P-P-O3'-C3'"}, {"CG3C51", "OG303", "PG1", "OG303", "1.2000", "1", "180.00", "BPNP and others 10/97, DMP, adm jr."}, {"CG3C51", "OG303", "PG1", "OG303", "0.1000", "2", "180.00", "BPNP and others 10/97, DMP, adm jr."}, {"CG3C51", "OG303", "PG1", "OG303", "0.1000", "3", "180.00", "BPNP and others 10/97, DMP, adm jr."}, {"CG3C51", "OG303", "PG1", "OG311", "0.9500", "2", "0.00", "NA T3PH, adm jr."}, {"CG3C51", "OG303", "PG1", "OG311", "0.5000", "3", "0.00", "NA T3PH, adm jr."}, {"CG311", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "IP_2 NA dmp,eps, O1P-P-O3'-C3'"}, {"CG321", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization: TH5P and others"}, {"CG331", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "NA dmp !Reorganization:MP_2"}, {"CG3C51", "OG303", "PG2", "OG2P1", "0.1000", "3", "0.00", "TH3P and others dmp,eps, O1P-P-O3'-C3'"}, {"CG321", "OG303", "SG3O1", "OG2P1", "0.0000", "3", "0.00", "LIPID methylsulfate"}, {"CG331", "OG303", "SG3O1", "OG2P1", "0.0000", "3", "0.00", "LIPID methylsulfate"}, {"CG2R61", "OG303", "SG3O2", "CG331", "1.6000", "1", "180.00", "PMST, phenyl methanesulfonate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "CG331", "0.8000", "2", "0.00", "PMST, phenyl methanesulfonate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "CG331", "0.1000", "3", "0.00", "PMST, phenyl methanesulfonate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "NG321", "3.2000", "1", "180.00", "PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "NG321", "0.2000", "2", "0.00", "PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "NG321", "0.2000", "3", "0.00", "PSMT, phenyl sulfamate, xxwy"}, {"CG2R61", "OG303", "SG3O2", "OG2P1", "0.3000", "3", "0.00", "PMST, phenyl methanesulfonate, PSMT, phenyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "CG331", "1.1000", "1", "180.00", "MMST, methyl methanesulfonate, xxwy"}, {"CG331", "OG303", "SG3O2", "CG331", "0.7000", "2", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"CG331", "OG303", "SG3O2", "CG331", "0.3000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"CG331", "OG303", "SG3O2", "NG321", "1.8000", "1", "180.00", "MSMT, methyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "NG321", "0.5000", "2", "0.00", "MSMT, methyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "NG321", "0.4000", "3", "0.00", "MSMT, methyl sulfamate, xxwy"}, {"CG331", "OG303", "SG3O2", "OG2P1", "0.3000", "3", "0.00", "MMST, methyl methanesulfonate, xxwy"}, {"PG1", "OG304", "PG1", "OG2P1", "0.1000", "2", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG2P1", "0.0300", "3", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG303", "0.0300", "2", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG303", "0.0300", "3", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG304", "0.0300", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG1", "OG304", "PG1", "OG304", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG1", "OG304", "PG1", "OG311", "0.1000", "2", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG1", "OG304", "PG1", "OG311", "0.0300", "3", "0.00", "NA ppi2 !Reorganization:PPI2"}, {"PG2", "OG304", "PG1", "OG2P1", "0.1000", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG2P1", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG303", "0.0300", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG303", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"PG2", "OG304", "PG1", "OG304", "0.0300", "2", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG2", "OG304", "PG1", "OG304", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:METP re-optimize?"}, {"PG1", "OG304", "PG2", "OG2P1", "0.0300", "3", "0.00", "NA ppi, jjp1/adm jr. 7/95 !Reorganization:PPI1"}, {"HGP1", "OG311", "PG0", "OG2P1", "0.3000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGP1", "OG311", "PG0", "OG303", "1.6000", "1", "180.00", "PROTNA phenol phosphate !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGP1", "OG311", "PG0", "OG303", "0.9000", "2", "0.00", "PROTNA phenol phosphate !Reorganization:MP_0 RE-OPTIMIZE!"}, {"HGP1", "OG311", "PG0", "OG311", "0.3000", "3", "0.00", "NA MP_0, adm jr."}, {"HGP1", "OG311", "PG1", "CG312", "0.2000", "1", "180.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"HGP1", "OG311", "PG1", "CG312", "1.6000", "2", "0.00", "BDFP, BDFD, Difuorobenzylphosphonate"}, {"HGP1", "OG311", "PG1", "CG321", "0.6000", "1", "180.00", "BDFP, BDFD, Benzylphosphonate"}, {"HGP1", "OG311", "PG1", "CG321", "1.1000", "2", "0.00", "BDFP, BDFD, Benzylphosphonate"}, {"HGP1", "OG311", "PG1", "OG2P1", "0.3000", "3", "0.00", "NA MP_1, adm jr. !Reorganization:MP_1"}, {"HGP1", "OG311", "PG1", "OG303", "1.6000", "1", "180.00", "PROTNA phenol phosphate !Reorganization:MP_1"}, {"HGP1", "OG311", "PG1", "OG303", "0.9000", "2", "0.00", "PROTNA phenol phosphate !Reorganization:MP_1"}, {"HGP1", "OG311", "PG1", "OG304", "1.6000", "1", "180.00", "PROTNA phenol phosphate !Reorganization:PPI2"}, {"HGP1", "OG311", "PG1", "OG304", "0.9000", "2", "0.00", "PROTNA phenol phosphate !Reorganization:PPI2"}, {"CG321", "SG301", "SG301", "CG321", "1.0000", "1", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG321", "SG301", "SG301", "CG321", "4.1000", "2", "0.00", "PROT mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CG321", "SG301", "SG301", "CG321", "0.9000", "3", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG321", "SG301", "SG301", "CG331", "1.0000", "1", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG321", "SG301", "SG301", "CG331", "4.1000", "2", "0.00", "PROT mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CG321", "SG301", "SG301", "CG331", "0.9000", "3", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG331", "SG301", "SG301", "CG331", "1.0000", "1", "0.00", "PROT DMDS 5/15/92 (FL)"}, {"CG331", "SG301", "SG301", "CG331", "4.1000", "2", "0.00", "PROT mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CG331", "SG301", "SG301", "CG331", "0.9000", "3", "0.00", "PROT DMDS 5/15/92 (FL)"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_cgenff info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_cgenff_impropers[125][8]= {{"CG2D1", "CG331", "NG2D1", "HGA4", "25.0000", "0", "0.00", "SCH1, xxwy"}, {"CG2D1", "CG331", "NG2P1", "HGR52", "18.0000", "0", "0.00", "SCH2, xxwy"}, {"CG2D1O", "CG2D1", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2D1", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2D2", "NG321", "HGA4", "53.0000", "0", "0.00", "AMET, ethenamine, from NA NICH WILDCARD; pram"}, {"CG2D1O", "CG2D2", "OG301", "HGA4", "23.0000", "0", "0.00", "MOET, Methoxyethene, xxwy"}, {"CG2D1O", "CG2DC1", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2DC1", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D1O", "CG2DC1", "OG301", "HGA4", "10.0000", "0", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2D2O", "CG2D1", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2D1", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2D2", "NG321", "HGA4", "53.0000", "0", "0.00", "AMET, ethenamine, from NA NICH WILDCARD; pram"}, {"CG2D2O", "CG2D2", "OG301", "HGA4", "23.0000", "0", "0.00", "MOET, Methoxyethene, xxwy"}, {"CG2D2O", "CG2DC2", "NG301", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2DC2", "NG311", "HGA4", "53.0000", "0", "0.00", "NA NICH, adm jr. WILDCARD"}, {"CG2D2O", "CG2DC2", "OG301", "HGA4", "10.0000", "0", "0.00", "MOBU, 1-Methoxy-1,3-butadiene, xxwy"}, {"CG2DC1", "CG2R61", "NG2D1", "HGA4", "30.0000", "0", "0.00", "HDZ1B, xxwy"}, {"CG2DC1", "CG2DC2", "NG2P1", "HGR52", "13.0000", "0", "0.00", "SCH3, xxwy"}, {"CG2DC2", "CG2R61", "NG2D1", "HGA4", "30.0000", "0", "0.00", "HDZ1B, xxwy"}, {"CG2DC2", "CG2DC1", "NG2P1", "HGR52", "13.0000", "0", "0.00", "SCH3, xxwy"}, {"CG2N1", "NG321", "NG321", "NG2D1", "85.0000", "0", "0.00", "MGU1, methylguanidine"}, {"CG2N1", "NG2P1", "NG2P1", "NG2P1", "40.0000", "0", "0.00", "PROT 5.75->40.0 GUANIDINIUM (KK)"}, {"CG2N1", "NG2D1", "NG311", "NG321", "85.0000", "0", "0.00", "MGU2, methylguanidine2"}, {"CG2N2", "NG2P1", "NG2P1", "CG2R61", "30.0000", "0", "0.00", "BAMI, benzamidinium; from AMDN, amidinium; pram"}, {"CG2N2", "NG2P1", "NG2P1", "CG331", "30.0000", "0", "0.00", "AMDN, amidinium, sz (verified by pram)"}, {"CG2N2", "NG2D1", "NG321", "SG311", "32.0000", "0", "0.00", "MT2A, fylin"}, {"CG2O1", "CG2DC1", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2DC1", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2DC2", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2DC2", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2R61", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2R61", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG2R62", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG311", "NG311", "OG2D1", "120.0000", "0", "0.00", "AMS1, xxwy, from PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG321", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG321", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG321", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG331", "NG2S0", "OG2D1", "71.0000", "0", "0.00", "DMA, Dimethylacetamide, xxwy"}, {"CG2O1", "CG331", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG331", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C51", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C51", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C51", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C53", "NG2S0", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C53", "NG2S1", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "CG3C53", "NG2S2", "OG2D1", "120.0000", "0", "0.00", "PROT NMA Vibrational Modes (LK) WILDCARD"}, {"CG2O1", "NG2S0", "OG2D1", "HGR52", "50.0000", "0", "0.00", "DMF, Dimethylformamide, xxwy"}, {"CG2O1", "NG2S2", "OG2D1", "HGR52", "66.0000", "0", "0.00", "FORM, formamide, xxwy"}, {"CG2O2", "CG2R61", "OG2D1", "OG302", "72.0000", "0", "0.00", "MBOA, methyl benzoate; MOLVIB looks good; jal"}, {"CG2O2", "CG311", "OG2D1", "OG302", "62.0000", "0", "0.00", "PROT and LIPID WILDCARD; from MAS, methyl acetate; xxwy"}, {"CG2O2", "CG321", "OG2D1", "OG302", "62.0000", "0", "0.00", "PROT and LIPID WILDCARD; from MAS, methyl acetate; xxwy"}, {"CG2O2", "CG331", "OG2D1", "OG302", "62.0000", "0", "0.00", "MAS, methyl acetate, xxwy"}, {"CG2O2", "CG2R61", "OG2D1", "OG311", "53.0000", "0", "0.00", "ZOIC, benzoic acid; MOLVIB 1% low (55 would be spot on); jal"}, {"CG2O2", "CG311", "OG2D1", "OG311", "65.0000", "0", "0.00", "PROT and LIPID WILDCARD; ACEH, acetic acid; xxwy"}, {"CG2O2", "CG321", "OG2D1", "OG311", "65.0000", "0", "0.00", "PROT and LIPID WILDCARD; ACEH, acetic acid; xxwy"}, {"CG2O2", "CG331", "OG2D1", "OG311", "65.0000", "0", "0.00", "ACEH, acetic acid, xxwy"}, {"CG2O2", "OG2D1", "OG311", "HGR52", "75.0000", "0", "0.00", "FORH, formic acid, xxwy"}, {"CG2O3", "OG2D2", "OG2D2", "CG2DC1", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG2DC2", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG2O5", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG2R61", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG301", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG311", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) correct conversion from wildcard CC X X CT1 which itself may or may not be correct"}, {"CG2O3", "OG2D2", "OG2D2", "CG314", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) WILDCARD"}, {"CG2O3", "OG2D2", "OG2D2", "CG321", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) correct conversion from wildcard CC X X CT2 which itself may or may not be correct"}, {"CG2O3", "OG2D2", "OG2D2", "CG331", "96.0000", "0", "0.00", "PROT 90.0->96.0 acetate, single impr (KK) correct conversion from wildcard CC X X CT3 which itself may or may not be correct"}, {"CG2O3", "OG2D2", "OG2D2", "HGR52", "67.0000", "0", "0.00", "FORA, formate, sz"}, {"CG2O4", "CG2DC1", "OG2D1", "HGR52", "14.0000", "0", "0.00", "RETINOL RTAL unmodified"}, {"CG2O4", "CG2DC2", "OG2D1", "HGR52", "14.0000", "0", "0.00", "RETINOL RTAL unmodified"}, {"CG2O4", "CG2R61", "OG2D1", "HGR52", "53.0000", "0", "0.00", "ALDEHYDE benzaldehyde unmodified"}, {"CG2O4", "CG321", "OG2D1", "HGR52", "50.0000", "0", "0.00", "PALD from acetaldehyde adm 11/08"}, {"CG2O4", "CG331", "OG2D1", "HGR52", "50.0000", "0", "0.00", "AALD acetaldehyde adm 11/08"}, {"CG2O5", "CG2DC1", "CG331", "OG2D3", "88.0000", "0", "0.00", "BEON, butenone, kevo"}, {"CG2O5", "CG2DC2", "CG331", "OG2D3", "88.0000", "0", "0.00", "BEON, butenone, kevo"}, {"CG2O5", "CG2O3", "CG2R61", "OG2D3", "72.0000", "0", "0.00", "BIPHENYL re-initialized by kevo from PHEK, phenyl ethyl ketone, mcs"}, {"CG2O5", "CG2R61", "CG311", "OG2D3", "72.0000", "0", "0.00", "BIPHENYL re-initialized by kevo from PHEK, phenyl ethyl ketone; mcs"}, {"CG2O5", "CG2R61", "CG321", "OG2D3", "72.0000", "0", "0.00", "PHEK, phenyl ethyl ketone; mcs"}, {"CG2O5", "CG2R61", "CG331", "OG2D3", "60.0000", "0", "0.00", "3ACP, 3-acetylpyridine; PHMK, phenyl methyl ketone; mcs"}, {"CG2O5", "CG321", "CG321", "OG2D3", "70.0000", "0", "0.00", "CHON, cyclohexanone; from ACO, acetone; yapol"}, {"CG2O5", "CG321", "CG331", "OG2D3", "70.0000", "0", "0.00", "BTON, butanone; from ACO, acetone; yapol"}, {"CG2O5", "CG331", "CG331", "OG2D3", "70.0000", "0", "0.00", "ketone, acetone adm 11/08"}, {"CG2O6", "NG2S2", "NG2S2", "OG2D1", "80.0000", "0", "0.00", "UREA, Urea"}, {"CG2O6", "OG302", "OG302", "OG2D1", "145.0000", "0", "0.00", "DMCA, dimethyl carbonate, xxwy"}, {"CG2O6", "OG2D2", "OG2D2", "OG2D2", "107.0000", "0", "0.00", "PROTMOD carbonate"}, {"CG2O6", "NG2S1", "OG2D1", "OG302", "62.0000", "0", "0.00", "DMCB, dimehtyl carbamate, xxwy"}, {"CG2O6", "OG2D2", "OG2D2", "OG311", "85.0000", "0", "0.00", "CO31, bicarbonate, xxwy"}, {"CG2O6", "SG311", "SG311", "SG2D1", "80.0000", "0", "0.00", "DMTT, dimethyl trithiocarbonate, kevo"}, {"CG2R53", "CG251O", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG252O", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG25C1", "NG2R51", "OG2D1", "90.0000", "0", "0.00", "MEOI, methyleneoxindole, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG25C2", "NG2R51", "OG2D1", "90.0000", "0", "0.00", "MEOI, methyleneoxindole, kevo and xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG3C41", "NG2R43", "OG2D1", "120.0000", "0", "0.00", "AZDO, 2-azetidinone, kevo"}, {"CG2R53", "CG3C52", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "120 2PDO, 2-pyrrolidinone, kevo"}, {"CG2R53", "NG2R53", "NG2R53", "OG2D1", "90.0000", "0", "0.00", "MHYO, 5-methylenehydantoin, xxwy from 2PDO WILDCARD"}, {"CG2R53", "CG2R51", "OG2D1", "OG3C51", "28.6000", "0", "0.00", "B2FO, 5H-furan-2-one, ctsai"}, {"CG2R53", "CG3C52", "OG2D1", "OG3C51", "45.0000", "0", "0.00", "GBL, Gamma-butyrolactone, ctsai"}, {"CG2R53", "NG2R53", "OG2D1", "SG311", "43.0000", "0", "0.00", "MTDO, 5-methylene-2,4-thiazolidinedione, xxwy"}, {"CG2R53", "NG2R53", "SG2D1", "SG311", "43.0000", "0", "0.00", "MRDN, methylidene rhodanine, kevo and xxwy"}, {"CG2R63", "CG2R62", "CG2R62", "OG2D4", "15.0000", "0", "0.00", "4PYO, 4(1H)-pyridinone, isg"}, {"CG2R63", "CG2R62", "NG2R61", "OG2D4", "90.0000", "0", "0.00", "NA T/O4, adm jr. 11/97 correct conversion"}, {"CG2R63", "CG2R62", "NG2R67", "OG2D4", "90.0000", "0", "0.00", "1PH2PO, 1-phenyl-2(1H)-pyridinone; from CG2R63 CG2R62 NG2R61 OG2D4, NA; isg"}, {"CG2R63", "CG2RC0", "NG2R61", "OG2D4", "90.0000", "0", "0.00", "NA G correct conversion"}, {"CG2R63", "NG2R61", "NG2R61", "OG2D4", "90.0000", "0", "0.00", "RESI URAC, uracil, xxwy, from NA U WILDCARD"}, {"CG2R63", "NG2R61", "NG2R62", "OG2D4", "90.0000", "0", "0.00", "RESI CYT, cytosine, NA U WILDCARD"}, {"CG2R63", "NG2R61", "NG2R67", "OG2D4", "90.0000", "0", "0.00", "3PHURA, 3-phenyl-2,4(1H,3H)-pyrimidinedione; from CG2R63 NG2R61 NG2R61 OG2D4, URAC from NA; isg"}, {"CG2R63", "CG2R62", "OG2D4", "OG3R60", "51.0000", "0", "0.00", "RIN, coumarin, isg"}, {"CG2R63", "CG2R61", "NG2R61", "SG2D1", "31.0000", "0", "0.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "CG2R61", "NG2R67", "SG2D1", "39.0000", "0", "0.00", "3PH24S, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinethione; from CG2R63 CG2R62 NG2R61 SG2D1, YTS2; isg"}, {"CG2R63", "CG2R62", "NG2R61", "SG2D1", "39.0000", "0", "0.00", "YT2S, 3,4-dihydro-4-thioxo-2(1H)-quinazolinone, isg"}, {"CG2R63", "CG2R62", "NG2R67", "SG2D1", "39.0000", "0", "0.00", "3PH4SR, 2,3-dihydro-3-phenyl-2-oxo-4(1H)pyrimidinethione; from CG2R63 CG2R62 NG2R61 SG2D1, YTS2; isg"}, {"CG2R63", "NG2R61", "NG2R61", "SG2D1", "84.0000", "0", "0.00", "YTS2, 2,4(1H,3H)-quinazolinedithione, isg"}, {"CG2R63", "NG2R61", "NG2R67", "SG2D1", "84.0000", "0", "0.00", "3PH2SR, 2,3-dihydro-3-phenyl-2-thioxo-4(1H)pyrimidinone; from CG2R63 NG2R61 NG2R61 SG2D1, YTS2; isg"}, {"CG2R64", "CG2R61", "NG2R60", "NG2S1", "19.0000", "0", "0.00", "2AMP, 2-acetamide pyridine,xxwy"}, {"CG2R64", "CG2R62", "NG2R62", "NG2S3", "60.0000", "0", "0.00", "NA C"}, {"CG2R64", "CG2RC0", "NG2R62", "NG2S3", "40.0000", "0", "0.00", "NA A"}, {"CG2R64", "NG2R61", "NG2R62", "NG2S3", "40.0000", "0", "0.00", "NA G"}, {"CG2R64", "CG2R62", "NG2R62", "NG301", "40.0000", "0", "0.00", "TMC, yxu"}, {"CG2R64", "CG2RC0", "NG2R62", "NG301", "40.0000", "0", "0.00", "M6A, yxu"}, {"NG2O1", "OG2N1", "OG2N1", "CG324", "53.6000", "0", "0.00", "NIPR, nitropropane, abar"}, {"NG2O1", "OG2N1", "OG2N1", "CG334", "50.8000", "0", "0.00", "NIME, nitromethane, abar"}, {"NG2S3", "HGP4", "HGP4", "CG2R61", "-2.5000", "0", "0.00", "-2.0 PYRIDINE aminopyridine 11/10 kevo: sic! Compensates for in-plane force from CG2R61 CG2R61 NG2S3 HGP4"}, {"NG2S3", "HGP4", "HGP4", "CG2R64", "9.0000", "0", "0.00", "NA GUA ADE CYT; from artificially planar 2APY, 2-aminopyridine parameter set (12/2010); xxwy and kevo"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_cgenff info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_cgenff_vdw[156][6]= {{"HGA1", "-0.0450", "1.3400", " ", " ", "igor, 6/05"}, {"HGA2", "-0.0350", "1.3400", " ", " ", "igor, 6/05"}, {"HGA3", "-0.0240", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"HGA4", "-0.0310", "1.2500", " ", " ", "yin,adm jr., 12/95"}, {"HGA5", "-0.0260", "1.2600", " ", " ", "yin,adm jr., 12/95"}, {"HGA6", "-0.0280", "1.3200", " ", " ", " "}, {"HGA7", "-0.0300", "1.3000", " ", " ", " "}, {"HGAAM0", "-0.0280", "1.2800", " ", " ", "amines"}, {"HGAAM1", "-0.0280", "1.2800", " ", " ", "amines"}, {"HGAAM2", "-0.0400", "1.2600", " ", " ", "amines"}, {"HGP1", "-0.0460", "0.2245", " ", " ", "H"}, {"HGP2", "-0.0460", "0.2245", " ", " ", "polar Hydrogen, charged systems"}, {"HGP3", "-0.1000", "0.4500", " ", " ", "pure solvent, adm jr., 6/22/92"}, {"HGP4", "-0.0460", "0.2245", " ", " ", "H, conjugated amines (NA bases)"}, {"HGP5", "-0.0460", "0.7000", " ", " ", "H on quarternary amine (choline)"}, {"HGPAM1", "-0.0090", "0.8750", " ", " ", "amines"}, {"HGPAM2", "-0.0100", "0.8750", " ", " ", "amines"}, {"HGPAM3", "-0.0120", "0.8700", " ", " ", "amines"}, {"HGR51", "-0.0300", "1.3582", " ", " ", " "}, {"HGR52", "-0.0460", "0.9000", " ", " ", "jr., 6/27/90, his"}, {"HGR53", "-0.0460", "0.7000", " ", " ", "jr., 6/27/90, his"}, {"HGR61", "-0.0300", "1.3582", " ", " ", " "}, {"HGR62", "-0.0460", "1.1000", " ", " ", "aromatic Hvdw"}, {"HGR63", "-0.0460", "0.9000", " ", " ", "jjp1/adm jr."}, {"HGR71", "-0.0300", "1.3582", " ", " ", " "}, {"CG1T1", "-0.1670", "1.8400", " ", " ", "2-butyne, kevo and rima"}, {"CG1T2", "-0.1032", "1.9925", " ", " ", "propyne, rima and kevo"}, {"CG1N1", "-0.1800", "1.8700", " ", " ", "acetonitrile; 3CYP, 3-cyanopyridine, kevo"}, {"CG2D1", "-0.0680", "2.0900", " ", " ", "yin,adm jr., 12/95"}, {"CG2D2", "-0.0640", "2.0800", " ", " ", "yin,adm jr., 12/95"}, {"CG2D1O", "-0.0680", "2.0900", " ", " ", "bond carbon adjacent to O (pyran)"}, {"CG2D2O", "-0.0680", "2.0900", " ", " ", "bond carbon adjacent to O (pyran)"}, {"CG2DC1", "-0.0680", "2.0900", " ", " ", " "}, {"CG2DC2", "-0.0680", "2.0900", " ", " ", " "}, {"CG2DC3", "-0.0640", "2.0800", " ", " ", " "}, {"CG2N1", "-0.1100", "2.0000", " ", " ", "pure solvent, adm jr., 3/3/93"}, {"CG2N2", "-0.1100", "2.0000", " ", " ", "as CG2N1 of NMA pure solvent, adm jr., 3/3/93"}, {"CG2O1", "-0.1100", "2.0000", " ", " ", "pure solvent, adm jr., 3/3/93"}, {"CG2O2", "-0.0980", "1.7000", " ", " ", "acetate update viv 12/29/06"}, {"CG2O3", "-0.0700", "2.0000", " ", " ", "heat of solvation"}, {"CG2O4", "-0.0600", "1.8000", " ", " ", "acetaldehyde, 11/08"}, {"CG2O5", "-0.0900", "2.0000", " ", " ", "acetone, 11/08"}, {"CG2O6", "-0.0700", "2.0000", " ", " ", "CO3 (carbonate) from acetate heat of solvation"}, {"CG2O7", "-0.0580", "1.5630", " ", " ", "dioxide, JES"}, {"CG2R51", "-0.0500", "2.1000", " ", " ", "bulk solvent of 10 maybridge cmpds (kevo)"}, {"CG2R52", "-0.0200", "2.2000", " ", " ", "pyrazole; bulk solvent of 3 maybridge cmpds (kevo); consistent with CG2R64"}, {"CG2R53", "-0.0200", "2.2000", " ", " ", "imidazole; bulk solvent of 5 maybridge cmpds (kevo); consistent with CG2R64"}, {"CG2R57", "-0.0500", "2.1000", " ", " ", "from CG2R51; lf"}, {"CG25C1", "-0.0680", "2.0900", " ", " ", "as CG2DC1 but in 5-membered ring with exocyclic double bond"}, {"CG25C2", "-0.0680", "2.0900", " ", " ", "as CG2DC2 but in 5-membered ring with exocyclic double bond"}, {"CG251O", "-0.0680", "2.0900", " ", " ", "as CG2D1O but in 5-membered ring with exocyclic double bond"}, {"CG252O", "-0.0680", "2.0900", " ", " ", "as CG2D2O but in 5-membered ring with exocyclic double bond"}, {"CG2R61", "-0.0700", "1.9924", " ", " ", " "}, {"CG2R62", "-0.0900", "1.9000", " ", " ", " "}, {"CG2R63", "-0.1000", "1.9000", " ", " ", " "}, {"CG2R64", "-0.0400", "2.1000", " ", " ", "pyrimidine"}, {"CG2R66", "-0.0700", "1.9000", " ", " ", "dft"}, {"CG2R67", "-0.0700", "1.9924", " ", " ", " "}, {"CG2RC0", "-0.0990", "1.8600", " ", " ", " "}, {"CG2R71", "-0.0670", "1.9948", " ", " ", "extrapolation. TO BE REFINED!"}, {"CG2RC7", "-0.0990", "1.8600", " ", " ", "from INDO/TRP, ignoring single bond character ==> TO BE REFINED!"}, {"CG301", "-0.0320", "2.0000", "-0.01", "1.9", "alkane (CT0), neopentane, from CT1, viv"}, {"CG302", "-0.0200", "2.3000", " ", " ", " "}, {"CG311", "-0.0320", "2.0000", "-0.01", "1.9", "alkane (CT1), isobutane, 6/05 viv"}, {"CG312", "-0.0420", "2.0500", " ", " ", " "}, {"CG314", "-0.0310", "2.1650", "-0.01", "1.9", "extrapolation based on CG311, CG321 and CG324, kevo"}, {"CG321", "-0.0560", "2.0100", "-0.01", "1.9", "alkane (CT2), 4/98, yin, adm jr, also used by viv"}, {"CG322", "-0.0600", "1.9000", " ", " ", " "}, {"CG323", "-0.1100", "2.2000", " ", " ", "to water and F.E. of solvation, adm jr. 6/1/92"}, {"CG324", "-0.0550", "2.1750", "-0.01", "1.9", "PIP1,2,3"}, {"CG331", "-0.0780", "2.0500", "-0.01", "1.9", "alkane (CT3), 4/98, yin, adm jr; Rmin/2 modified from 2.04 to 2.05"}, {"CG334", "-0.0770", "2.2150", "-0.01", "1.9", "extrapolation based on CG331, CG321 and CG324, kevo"}, {"CG3C50", "-0.0360", "2.0100", "-0.01", "1.9", "extrapolation based on CG301, CG321 and CG3C52, kevo"}, {"CG3C51", "-0.0360", "2.0100", "-0.01", "1.9", "extrapolation based on CG311, CG321 and CG3C52, kevo"}, {"CG3C52", "-0.0600", "2.0200", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv"}, {"CG3C53", "-0.0350", "2.1750", "-0.01", "1.9", "extrapolation based on (CG324, CG321 and CG3C51(ex)) or (CG311, CG321 and CG3C54(ex)), kevo"}, {"CG3C54", "-0.0590", "2.1850", "-0.01", "1.9", "extrapolation based on CG324, CG321 and CG3C52, kevo"}, {"CG3C31", "-0.0560", "2.0100", "-0.01", "1.9", "cyclopropane JMW (CT2), viv"}, {"CG3C41", "-0.0650", "2.0200", "-0.01", "1.9", "CBU, cyclobutane, lsk"}, {"CG3RC1", "-0.0320", "2.0000", "-0.01", "1.9", "alkane (CT1), viv"}, {"CG3AM0", "-0.0700", "1.9700", " ", " ", "amines"}, {"CG3AM1", "-0.0780", "1.9800", " ", " ", "amines"}, {"CG3AM2", "-0.0800", "1.9900", " ", " ", "amines"}, {"NG1T1", "-0.1800", "1.7900", " ", " ", "acetonitrile; 3CYP, 3-cyanopyridine, kevo"}, {"NG2D1", "-0.2000", "1.8500", " ", " ", "Schiff's base"}, {"NG2S0", "-0.2000", "1.8500", "-0.0001", "1.85", "PROT AcProNH2, ProNH2, AcProNHCH3 RLD"}, {"NG2S1", "-0.2000", "1.8500", "-0.20", "1.55", "1,4 vdW allows the C5 dipeptide minimum to exist"}, {"NG2S2", "-0.2000", "1.8500", " ", " ", " "}, {"NG2S3", "-0.2000", "1.8500", " ", " ", " "}, {"NG2O1", "-0.2000", "1.8500", " ", " ", "nitrobenzene"}, {"NG2P1", "-0.2000", "1.8500", " ", " ", "Schiff's base"}, {"NG2R43", "-0.2000", "1.8500", " ", " ", "2-azetidinone; from 2PDO; lsk"}, {"NG2R50", "-0.2000", "1.8500", " ", " ", "Imidazole from IMIA/HS[DE]; originally from prot backbone - probably not ideal"}, {"NG2R51", "-0.2000", "1.8500", " ", " ", "Pyrrole; IMIA, Imidazole from IMIA/HS[DE] and INDO/TRP; originally from prot backbone - probably not ideal"}, {"NG2R52", "-0.2000", "1.8500", " ", " ", "imidazolium from IMIM/HSP; originally from prot backbone - probably not ideal"}, {"NG2R53", "-0.2000", "1.8500", " ", " ", "in 5-memebered ring (slightly pyramidized), 2PDO, kevo"}, {"NG2R57", "-0.2000", "1.8500", " ", " ", "from NG2R51; lf"}, {"NG2R60", "-0.0600", "1.8900", " ", " ", "pyridine"}, {"NG2R61", "-0.2000", "1.8500", " ", " ", " "}, {"NG2R62", "-0.0500", "2.0600", " ", " ", "pyrimidine"}, {"NG2R67", "-0.2000", "1.8500", " ", " ", "pyridinones etc.; from NG2R61; isg"}, {"NG2RC0", "-0.2000", "1.8500", " ", " ", "ring bridging N, indolizine, INDZ, kevo"}, {"NG301", "-0.0350", "2.0000", " ", " ", "amines"}, {"NG311", "-0.0450", "2.0000", " ", " ", "amines"}, {"NG321", "-0.0600", "1.9900", " ", " ", "amines"}, {"NG331", "-0.0700", "1.9800", " ", " ", "amines"}, {"NG3C51", "-0.2000", "1.8500", " ", " ", "2-pyrroline, kevo"}, {"NG3N1", "-0.0600", "2.0500", " ", " ", "hydrazine, ed"}, {"NG3P0", "-0.2000", "1.8500", " ", " ", "quarternary amine"}, {"NG3P1", "-0.2000", "1.8500", " ", " ", "tertiary amine"}, {"NG3P2", "-0.2000", "1.8500", " ", " ", "proline; from +ProNH2 RLD 9/28/90"}, {"NG3P3", "-0.2000", "1.8500", " ", " ", " "}, {"OG2D1", "-0.1200", "1.7000", "-0.12", "1.40", "carbonyl. Also consistent with adm, acetaldehyde, 11/08"}, {"OG2D2", "-0.1200", "1.7000", " ", " ", " "}, {"OG2D3", "-0.0500", "1.7000", "-0.12", "1.40", "adm, acetone, 11/08"}, {"OG2D4", "-0.1200", "1.7000", " ", " ", " "}, {"OG2D5", "-0.1650", "1.6920", " ", " ", "dioxide, JES"}, {"OG2N1", "-0.1200", "1.7000", " ", " ", "nitrobenzene"}, {"OG2P1", "-0.1200", "1.7000", " ", " ", " "}, {"OG2R50", "-0.1200", "1.7000", " ", " ", "furan"}, {"OG3R60", "-0.1000", "1.6500", " ", " ", "PY02, pyran; LJ from THP, sng 1/06"}, {"OG301", "-0.1000", "1.6500", " ", " ", "LJ from THP, sng 1/06 !SHOULD WE HAVE A SEPARATE ENOL ETHER??? IF YES, SHOULD WE MERGE IT WITH OG3R60???"}, {"OG302", "-0.1000", "1.6500", " ", " ", "LJ from THP, sng 1/06"}, {"OG303", "-0.1000", "1.6500", " ", " ", "ester; LJ from THP, sng 1/06"}, {"OG304", "-0.1000", "1.6500", " ", " ", "oxygen in pyrophosphate/pyrosulphate"}, {"OG311", "-0.1921", "1.7650", " ", " ", "MeOH and EtOH 1/06 (was -0.1521 1.7682)"}, {"OG312", "-0.1200", "1.7500", " ", " ", "anionic alcohol oxygen"}, {"OG3C31", "-0.1000", "1.6500", " ", " ", "from ethers; sc"}, {"OG3C51", "-0.1000", "1.6500", " ", " ", "LJ from THP, tetrahydropyran sng 1/06"}, {"OG3C61", "-0.1000", "1.6500", " ", " ", "dioxane; THP, tetrahydropyran sng 1/06 !SHOULD WE MERGE THIS WITH OG3R60???"}, {"SG2D1", "-0.5650", "2.0500", " ", " ", "dimethyl trithiocarbonate, kevo"}, {"SG2R50", "-0.4500", "2.0000", " ", " ", "thiophene"}, {"SG311", "-0.4500", "2.0000", " ", " ", "pure solvent"}, {"SG301", "-0.3800", "1.9750", " ", " ", "pure solvent"}, {"SG302", "-0.4700", "2.2000", " ", " ", "to water and F.E. of solvation, adm jr. 6/1/92"}, {"SG3O1", "-0.4700", "2.1000", " ", " ", " "}, {"SG3O2", "-0.3500", "2.0000", " ", " ", "SG3O3 (ML Strader, SE Feller, JPC-A106(6),1074(2002)), xxwy"}, {"SG3O3", "-0.3500", "2.0000", " ", " ", "Strader, SE Feller, JPC-A106(6),1074(2002), sz"}, {"FGA1", "-0.1350", "1.6300", " ", " ", " "}, {"FGA2", "-0.1050", "1.6300", " ", " ", " "}, {"FGA3", "-0.0970", "1.6000", " ", " ", " "}, {"FGP1", "-0.0970", "1.6000", " ", " ", "tetraflouride, ALF4"}, {"FGR1", "-0.1200", "1.7000", " ", " ", "F, 1,3-difluorobenzene pure solvent"}, {"CLGA1", "-0.3430", "1.9100", " ", " ", "DCLE, chloroethane, 1,1-dichloroethane"}, {"CLGA3", "-0.3100", "1.9100", " ", " ", " "}, {"BRGA1", "-0.4800", "1.9700", " ", " ", " "}, {"BRGA2", "-0.5300", "2.0500", " ", " ", " "}, {"BRGA3", "-0.5400", "2.0000", " ", " ", " "}, {"PG0", "-0.5850", "2.1500", " ", " ", "phosphate"}, {"PG1", "-0.5850", "2.1500", " ", " ", "-1"}, {"PG2", "-0.5850", "2.1500", " ", " ", "-2"}, {"ALG1", "-0.6500", "2.0000", " ", " ", "tetraflouride, ALF4"}, {"LPH", "0.0000", "0.0000", " ", " ", "on halogens attached to an aromatic group"}, {"CLGR1", "-0.2300", "1.8600", " ", " ", "chlorobenzene, adjusted for lone-pair, fylin"}, {"BRGR1", "-0.3200", "1.9800", " ", " ", "bromobenzene, adjusted for lone-pair, fylin"}, {"IGR1", "-0.5200", "2.2400", " ", " ", "iodobenzene, adjusted for lone-pair, fylin"}}; Atomes-GNU-1.1.14/src/calc/force_fields/charmm36_lipid.c000066400000000000000000001350631457665371200225670ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file charmm36_lipid.c * @short CHARMM-charmm36_lipid force field, from 'charmm36_lipid' * @author Sébastien Le Roux */ /* * This file: 'charmm36_lipid.c' * * Contains: * CHARMM-charmm36_lipid force field, data from taken from: - the file: 'charmm36_lipid' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_lipid_atoms[29][5] Bonds : charmm36_lipid_bonds[50][5] Angles : charmm36_lipid_angles[131][8] Dihedrals : charmm36_lipid_dihedrals[180][8] Impropers : charmm36_lipid_impropers[4][8] Non bonded : charmm36_lipid_vdw[29][6] */ #include "global.h" int charmm36_lipid_objects[14] = {29, 0, 0, 50, 0, 0, 131, 0, 180, 0 , 0, 4, 29, 0}; int charmm36_lipid_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_lipid info */ char * charmm36_lipid_atoms[29][5]= {{"H", "1.008000", "HL", "polar H (equivalent to protein H)", "136"}, {"H", "1.008000", "HCL", "charged H for PE (equivalent to protein HC)", "137"}, {"H", "1.008000", "HOL", "Nucleic acid phosphate hydroxyl proton", "138"}, {"H", "1.008000", "HAL1", "alphatic proton", "139"}, {"H", "1.008000", "HAL2", "alphatic proton", "140"}, {"H", "1.008000", "HAL3", "alphatic proton", "141"}, {"H", "1.008000", "HEL1", "for alkene; RHC=CR", "142"}, {"H", "1.008000", "HEL2", "for alkene; H2C=CR", "143"}, {"H", "1.008000", "HBL", "POPS SER backbone H", "144"}, {"C", "12.011000", "CL", "carbonyl C (acetic acid/methyl acetate)", "145"}, {"C", "12.011000", "CTL1", "sp3 carbon with 1 H (-CH1-)", "146"}, {"C", "12.011000", "CTL2", "carbon of methylene group (-CH2-)", "147"}, {"C", "12.011000", "CTL3", "carbon of methyl group (-CH3)", "148"}, {"C", "12.011000", "CTL5", "carbon of methyl group (-CH3) for tetramethylammonium", "149"}, {"C", "12.011000", "CEL1", "for alkene; RHC=CR", "150"}, {"C", "12.011000", "CEL2", "for alkene; H2C=CR", "151"}, {"C", "12.011000", "CCL", "for POPS", "152"}, {"N", "14.007000", "NTL", "ammonium nitrogen", "153"}, {"N", "14.007000", "NH3L", "nitrogen phosphatidylethanolamine", "154"}, {"O", "15.999400", "OBL", "acetic acid carboxyl oxygen (e. to protein OB)", "155"}, {"O", "15.999400", "OCL", "acetate oxygen", "156"}, {"O", "15.999400", "OSL", "ester oxygen", "157"}, {"O", "15.999400", "O2L", "Nucleic acid =O in phosphate or sulfate", "158"}, {"O", "15.999400", "OHL", "Nucleic acid phosphate hydroxyl oxygen", "159"}, {"O", "15.999400", "OSLP", "Phosphate oxygen, to avoid conflict with methylacetate type O", "160"}, {"P", "30.974000", "PL", "phosphorus", "161"}, {"S", "32.060000", "SL", "Sulfate sulfur", "162"}, {"C", "12.011000", "CRL1", "sp3 carbon with 1 H on a ring (-CH1-) for sterols", "163"}, {"C", "12.011000", "CRL2", "carbon of methylene group on a ring (-CH2-) for sterols", "164"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_lipid info V(R) = Kb x (R - R0)^2 */ char * charmm36_lipid_bonds[50][5]= {{"CTL3", "CL", "200.0", "1.522", "methyl acetate"}, {"CTL2", "CL", "200.0", "1.522", "methyl acetate"}, {"CTL1", "CL", "200.0", "1.522", "methyl acetate"}, {"CTL1", "CCL", "200.0", "1.522", "for POPS"}, {"OBL", "CL", "750.0", "1.220", "methyl acetate"}, {"OCL", "CL", "525.0", "1.260", "acetate, protein"}, {"OCL", "CCL", "525.0", "1.260", "for POPS"}, {"OSL", "CL", "150.0", "1.334", "methyl acetate"}, {"OSLP", "CL", "150.0", "1.334", "methyl acetate"}, {"OHL", "CL", "230.0", "1.40", "methyl acetate"}, {"HOL", "OHL", "545.0", "0.960", "acetic acid"}, {"CTL1", "HAL1", "309.00", "1.111", "alkanes, 3/92"}, {"CTL1", "HBL", "330.00", "1.080", "for POPS"}, {"CTL2", "HAL2", "309.00", "1.111", "alkanes, 4/98"}, {"CTL3", "HAL3", "322.00", "1.111", "alkanes, 4/98"}, {"CTL3", "OSL", "340.0", "1.43", "phosphate"}, {"CTL2", "OSL", "340.0", "1.43", "phosphate"}, {"CTL1", "OSL", "340.0", "1.43", "phosphate"}, {"CTL3", "OSLP", "340.0", "1.43", " "}, {"CTL2", "OSLP", "340.0", "1.43", " "}, {"CTL1", "OSLP", "340.0", "1.43", " "}, {"OSL", "PL", "270.0", "1.60", "phosphate"}, {"OSLP", "PL", "270.0", "1.60", " "}, {"O2L", "PL", "580.0", "1.48", "phosphate"}, {"OHL", "PL", "237.0", "1.59", "phosphate"}, {"NH3L", "HCL", "410.0", "1.04", "ethanolamine"}, {"NH3L", "CTL1", "200.0", "1.48", "for POPS"}, {"NH3L", "CTL2", "261.0", "1.51", "ethanolamine"}, {"NTL", "CTL2", "215.00", "1.51", "tetramethylammonium"}, {"NTL", "CTL5", "215.00", "1.51", "tetramethylammonium"}, {"CTL5", "HL", "300.00", "1.08", "tetramethylammonium"}, {"CTL2", "HL", "300.00", "1.08", "tetramethylammonium"}, {"CTL1", "CTL1", "222.500", "1.500", "alkanes, 3/92"}, {"CTL1", "CTL2", "222.500", "1.538", "alkanes, 3/92"}, {"CTL1", "CTL3", "222.500", "1.538", "alkanes, 3/92"}, {"CTL2", "CTL2", "222.500", "1.530", "alkanes, 3/92"}, {"CTL2", "CTL3", "222.500", "1.528", "alkanes, 3/92"}, {"CTL3", "CTL3", "222.500", "1.530", "alkanes, 3/92"}, {"OHL", "CTL1", "428.0", "1.420", "glycerol"}, {"OHL", "CTL2", "428.0", "1.420", "glycerol"}, {"OHL", "CTL3", "428.0", "1.420", "glycerol"}, {"SL", "O2L", "540.0", "1.448", "methylsulfate"}, {"SL", "OSL", "250.0", "1.575", "methylsulfate"}, {"CEL2", "CEL2", "510.000", "1.330", "ethene yin,adm jr., 12/95"}, {"HEL2", "CEL2", "365.000", "1.100", "propene; from ethene, yin,adm jr., 12/95"}, {"CEL1", "CTL3", "383.000", "1.504", "butene, yin,adm jr., 12/95"}, {"CEL1", "CEL2", "500.000", "1.342", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "360.500", "1.100", "propene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "365.000", "1.502", "butene; from propene, yin,adm jr., 12/95"}, {"CEL1", "CEL1", "440.000", "1.340", "butene, yin,adm jr., 12/95"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_lipid info V(S) = Kub x (S - S0)^2 */ char * charmm36_lipid_angles[131][8]= {{"OBL", "CL", "CTL3", "70.0", "125.0", "20.0", "2.442", "methyl acetate"}, {"OBL", "CL", "CTL2", "70.0", "125.0", "20.0", "2.442", "methyl acetate"}, {"OBL", "CL", "CTL1", "70.0", "125.0", "20.0", "2.442", "methyl acetate"}, {"OSL", "CL", "OBL", "90.0", "125.9", "160.0", "2.2576", "acetic acid"}, {"CL", "OSL", "CTL1", "40.0", "109.6", "30.0", "2.2651", "methyl acetate"}, {"CL", "OSL", "CTL2", "40.0", "109.6", "30.0", "2.2651", "methyl acetate"}, {"CL", "OSL", "CTL3", "40.0", "109.6", "30.0", "2.2651", "methyl acetate"}, {"HAL2", "CTL2", "CL", "33.00", "109.50", "30.00", "2.163", "methyl acetate"}, {"HAL3", "CTL3", "CL", "33.00", "109.50", "30.00", "2.163", "methyl acetate"}, {"CTL2", "CTL2", "CL", "52.0", "108.00", " ", " ", "alkane"}, {"CTL2", "CTL1", "CCL", "52.0", "108.00", " ", " ", "for POPS"}, {"CTL3", "CTL2", "CL", "52.0", "108.00", " ", " ", "alkane"}, {"OSL", "CL", "CTL3", "55.0", "109.0", "20.00", "2.3260", "methyl acetate"}, {"OSL", "CL", "CTL2", "55.0", "109.0", "20.00", "2.3260", "methyl acetate"}, {"OSL", "CL", "CTL1", "55.0", "109.0", "20.00", "2.3260", "methyl acetate"}, {"OHL", "CL", "OBL", "50.0", "123.0", "210.0", "2.2620", "acetic acid"}, {"OCL", "CL", "CTL2", "40.0", "118.0", "50.0", "2.3880", "acetate"}, {"OCL", "CL", "CTL3", "40.0", "118.0", "50.0", "2.3880", "acetate"}, {"OCL", "CL", "OCL", "100.0", "124.0", "70.0", "2.2250", "acetate"}, {"OCL", "CCL", "OCL", "100.0", "124.0", "70.0", "2.2250", "for POPS"}, {"OCL", "CCL", "CTL1", "40.0", "118.0", "50.0", "2.3880", "for POPS"}, {"OHL", "CL", "CTL3", "55.0", "110.50", " ", " ", "acetic acid"}, {"OHL", "CL", "CTL2", "55.0", "110.50", " ", " ", "acetic acid"}, {"HOL", "OHL", "CL", "55.0", "115.0", " ", " ", "acetic acid"}, {"OSL", "CTL1", "CTL1", "75.700", "110.10", " ", " ", "acetic acid, PIP"}, {"OSL", "CTL1", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL1", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL2", "CTL1", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL2", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSL", "CTL2", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL1", "CTL1", "75.700", "110.10", " ", " ", "acetic acid, PIP"}, {"OSLP", "CTL1", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL1", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL2", "CTL1", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL2", "CTL2", "75.700", "110.10", " ", " ", "acetic acid"}, {"OSLP", "CTL2", "CTL3", "75.700", "110.10", " ", " ", "acetic acid"}, {"HAL2", "CTL2", "HAL2", "35.500", "109.00", "5.40", "1.80200", "alkane, 3/92"}, {"HAL3", "CTL3", "HAL3", "35.500", "108.40", "5.40", "1.80200", "alkane, 3/92"}, {"HAL1", "CTL1", "OSL", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL2", "CTL2", "OSL", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL3", "CTL3", "OSL", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL1", "CTL1", "OSLP", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL2", "CTL2", "OSLP", "60.0", "109.5", " ", " ", "phosphate"}, {"HAL3", "CTL3", "OSLP", "60.0", "109.5", " ", " ", "phosphate"}, {"CTL1", "OSL", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate, PIP"}, {"CTL2", "OSL", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"CTL3", "OSL", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"CTL1", "OSLP", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate, PIP"}, {"CTL2", "OSLP", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"CTL3", "OSLP", "PL", "20.0", "120.0", "35.0", "2.33", "phosphate"}, {"HOL", "OHL", "PL", "30.0", "115.0", "40.0", "2.30", "phosphate"}, {"OSL", "PL", "OSL", "80.0", "104.3", " ", " ", "phosphate"}, {"OSL", "PL", "O2L", "98.9", "111.6", " ", " ", "phosphate"}, {"OSL", "PL", "OHL", "48.1", "108.0", " ", " ", "phosphate"}, {"OSLP", "PL", "OSLP", "80.0", "104.3", " ", " ", "phosphate"}, {"OSLP", "PL", "O2L", "98.9", "111.6", " ", " ", "phosphate"}, {"OSLP", "PL", "OHL", "48.1", "108.0", " ", " ", "phosphate"}, {"O2L", "PL", "O2L", "120.0", "120.0", " ", " ", "phosphate"}, {"O2L", "PL", "OHL", "98.9", "108.23", " ", " ", "phosphate"}, {"NTL", "CTL2", "HL", "40.0", "109.5", "27.", "2.13", "tetramethylammonium"}, {"NTL", "CTL5", "HL", "40.0", "109.5", "27.", "2.13", "tetramethylammonium"}, {"HL", "CTL2", "HL", "24.0", "109.50", "28.", "1.767", "tetramethylammonium"}, {"HL", "CTL5", "HL", "24.0", "109.50", "28.", "1.767", "tetramethylammonium"}, {"CTL2", "NTL", "CTL2", "60.0", "109.5", "26.", "2.466", "tetraethylammonium, from CTL5 NTL CTL2"}, {"CTL5", "NTL", "CTL2", "60.0", "109.5", "26.", "2.466", "tetramethylammonium"}, {"CTL5", "NTL", "CTL5", "60.0", "109.5", "26.", "2.466", "tetramethylammonium"}, {"HL", "CTL2", "CTL2", "33.430", "110.10", "22.53", "2.179", "alkane"}, {"HL", "CTL2", "CTL3", "33.430", "110.10", "22.53", "2.179", "alkane"}, {"HAL1", "CTL1", "CTL1", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HAL1", "CTL1", "CTL2", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HAL1", "CTL1", "CTL3", "34.500", "110.10", "22.53", "2.179", "alkane, 3/92"}, {"HAL2", "CTL2", "CTL1", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL2", "CTL2", "CTL2", "26.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL2", "CTL2", "CTL3", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL3", "CTL3", "CTL1", "33.430", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL3", "CTL3", "CTL2", "34.600", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HAL3", "CTL3", "CTL3", "37.500", "110.10", "22.53", "2.179", "alkane, 4/98"}, {"HBL", "CTL1", "CCL", "50.000", "109.50", " ", " ", "for POPS"}, {"HBL", "CTL1", "CTL2", "35.000", "111.00", " ", " ", "for POPS"}, {"NTL", "CTL2", "CTL2", "67.7", "115.00", " ", " ", "tetramethylammonium"}, {"NTL", "CTL2", "CTL3", "67.7", "115.00", " ", " ", "tetramethylammonium"}, {"HCL", "NH3L", "CTL2", "33.0", "109.50", "4.00", "2.056", "ethanolamine"}, {"HCL", "NH3L", "CTL1", "30.0", "109.50", "20.00", "2.074", "for POPS"}, {"HCL", "NH3L", "HCL", "41.0", "109.50", " ", " ", "ethanolamine"}, {"NH3L", "CTL2", "CTL2", "67.7", "110.00", " ", " ", "ethanolamine"}, {"NH3L", "CTL2", "HAL2", "45.0", "107.50", "35.00", "2.0836", "ethanolamine"}, {"CTL1", "CTL1", "CTL1", "53.350", "111.00", "8.00", "2.561", "alkane, 3/92"}, {"NH3L", "CTL1", "CCL", "43.7", "110.00", " ", " ", "for POPS"}, {"NH3L", "CTL1", "CTL2", "67.7", "110.00", " ", " ", "for POPS"}, {"NH3L", "CTL1", "HBL", "51.5", "107.50", " ", " ", "for POPS"}, {"CTL1", "CTL1", "CTL2", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL1", "CTL1", "CTL3", "53.350", "108.50", "8.00", "2.561", "alkane, 3/92"}, {"CTL1", "CTL2", "CTL1", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL1", "CTL2", "CTL2", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL1", "CTL2", "CTL3", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL2", "CTL1", "CTL2", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL2", "CTL1", "CTL3", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"CTL2", "CTL2", "CTL2", "58.350", "113.60", "11.16", "2.561", "alkane, 3/92"}, {"CTL2", "CTL2", "CTL3", "58.000", "115.00", "8.00", "2.561", "alkane, 3/92"}, {"CTL3", "CTL1", "CTL3", "58.350", "113.50", "11.16", "2.561", "glycerol"}, {"HOL", "OHL", "CTL1", "57.500", "106.00", " ", " ", "glycerol"}, {"HOL", "OHL", "CTL2", "57.500", "106.00", " ", " ", "glycerol"}, {"HOL", "OHL", "CTL3", "57.500", "106.00", " ", " ", "glycerol"}, {"OHL", "CTL1", "CTL1", "75.700", "110.10", " ", " ", "glycerol, PIP"}, {"OHL", "CTL1", "CTL2", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL2", "CTL1", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL2", "CTL2", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL2", "CTL3", "75.700", "110.10", " ", " ", "glycerol"}, {"OHL", "CTL1", "HAL1", "45.900", "108.89", " ", " ", "glycerol"}, {"OHL", "CTL2", "HAL2", "45.900", "108.89", " ", " ", "glycerol"}, {"OHL", "CTL3", "HAL3", "45.900", "108.89", " ", " ", "glycerol"}, {"O2L", "SL", "O2L", "130.0", "109.47", "35.0", "2.45", "methylsulfate"}, {"O2L", "SL", "OSL", "85.0", "98.0", " ", " ", "methylsulfate"}, {"CTL2", "OSL", "SL", "15.0", "109.0", "27.00", "1.90", "methylsulfate"}, {"CTL3", "OSL", "SL", "15.0", "109.0", "27.00", "1.90", "methylsulfate"}, {"CEL1", "CEL1", "CTL2", "48.00", "123.50", " ", " ", "from 2-butene, yin,adm jr., 12/95"}, {"CEL1", "CEL1", "CTL3", "48.00", "123.50", " ", " ", "2-butene, yin,adm jr., 12/95"}, {"CEL2", "CEL1", "CTL2", "48.00", "126.00", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"CEL2", "CEL1", "CTL3", "47.00", "125.20", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CEL1", "52.00", "119.50", " ", " ", "2-butene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CEL2", "42.00", "118.00", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "40.00", "116.00", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL3", "22.00", "117.00", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL2", "CEL2", "CEL1", "45.00", "120.50", " ", " ", "propene, yin,adm jr., 12/95"}, {"HEL2", "CEL2", "CEL2", "55.50", "120.50", " ", " ", "ethene, yin,adm jr., 12/95"}, {"HEL2", "CEL2", "HEL2", "19.00", "119.00", " ", " ", "propene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "CTL2", "32.00", "112.20", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "CTL3", "32.00", "112.20", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"HAL2", "CTL2", "CEL1", "45.00", "111.50", " ", " ", "1-butene; from propene, yin,adm jr., 12/95"}, {"HAL3", "CTL3", "CEL1", "42.00", "111.50", " ", " ", "2-butene, yin,adm jr., 12/95"}, {"CEL1", "CTL2", "CEL1", "30.0", "114.0", " ", " ", "1,4-dipentene, adm jr., 2/00"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_lipid info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_lipid_dihedrals[180][8]= {{"X", "CTL1", "OHL", "X", "0.14", "3", "0.00", "glycerol"}, {"X", "CTL2", "OHL", "X", "0.14", "3", "0.00", "glycerol"}, {"X", "CTL3", "OHL", "X", "0.14", "3", "0.00", "glycerol"}, {"OCL", "CCL", "CTL1", "NH3L", "3.20", "2", "180.00", "for POPS"}, {"OBL", "CL", "CTL2", "HAL2", "0.00", "6", "180.00", "acetic acid"}, {"OBL", "CL", "CTL3", "HAL3", "0.00", "6", "180.00", "acetic acid"}, {"OSL", "CL", "CTL2", "HAL2", "0.00", "6", "180.00", "acetic acid"}, {"OSL", "CL", "CTL3", "HAL3", "0.00", "6", "180.00", "acetic acid"}, {"OSLP", "CL", "CTL2", "HAL2", "0.00", "6", "180.00", "acetic acid"}, {"OSLP", "CL", "CTL3", "HAL3", "0.00", "6", "180.00", "acetic acid"}, {"OBL", "CL", "OSL", "CTL1", "0.965", "1", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL1", "3.85", "2", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL2", "0.965", "1", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL2", "3.85", "2", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL3", "0.965", "1", "180.00", "methyl acetate"}, {"OBL", "CL", "OSL", "CTL3", "3.85", "2", "180.00", "methyl acetate"}, {"X", "CL", "OSL", "X", "2.05", "2", "180.00", "methyl acetate"}, {"X", "CTL2", "CL", "X", "0.05", "6", "180.00", "methyl acetate"}, {"X", "CTL3", "CL", "X", "0.05", "6", "180.00", "methyl acetate"}, {"X", "CL", "OHL", "X", "2.05", "2", "180.00", "acetic acid"}, {"X", "CTL1", "CCL", "X", "0.05", "6", "180.00", "for POPS"}, {"HAL2", "CTL2", "CL", "OHL", "0.00", "6", "180.00", " "}, {"HAL3", "CTL3", "CL", "OHL", "0.00", "6", "180.00", " "}, {"PL", "OSLP", "CTL2", "CTL1", "0.407", "2", "0.00", "Phos-gly, 8/05"}, {"PL", "OSLP", "CTL2", "CTL1", "0.241", "1", "180.00", "Phos-gly, 8/05"}, {"PL", "OSLP", "CTL2", "CTL2", "0.407", "2", "0.00", "Phos-gly, 8/05"}, {"PL", "OSLP", "CTL2", "CTL2", "0.241", "1", "180.00", "Phos-gly, 8/05"}, {"OSL", "PL", "OSL", "CTL1", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSL", "PL", "OSL", "CTL1", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSL", "PL", "OSL", "CTL1", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL1", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL1", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL1", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"OSLP", "PL", "OSLP", "CTL2", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL2", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL2", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSLP", "CTL2", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSL", "CTL2", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL3", "1.20", "1", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL3", "0.10", "2", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"OSLP", "PL", "OSLP", "CTL3", "0.10", "3", "180.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSLP", "CTL1", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"O2L", "PL", "OSL", "CTL1", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr., PIP"}, {"O2L", "PL", "OSLP", "CTL3", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"O2L", "PL", "OSL", "CTL3", "0.10", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"OHL", "PL", "OSL", "CTL1", "0.95", "2", "0.00", "terminal phosphate, PIP"}, {"OHL", "PL", "OSL", "CTL1", "0.50", "3", "0.00", "terminal phosphate, PIP"}, {"OHL", "PL", "OSL", "CTL2", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSL", "CTL2", "0.50", "3", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSL", "CTL3", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSL", "CTL3", "0.50", "3", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL2", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL2", "0.50", "3", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL3", "0.95", "2", "0.00", "terminal phosphate"}, {"OHL", "PL", "OSLP", "CTL3", "0.50", "3", "0.00", "terminal phosphate"}, {"X", "OHL", "PL", "X", "0.30", "3", "0.00", "terminal phosphate"}, {"X", "CTL1", "OSL", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL2", "OSL", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL3", "OSL", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL1", "OSLP", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL2", "OSLP", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"X", "CTL3", "OSLP", "X", "0.00", "3", "0.00", "phosphate, new NA, 4/98, adm jr."}, {"CTL1", "CTL2", "CL", "OSL", "-0.15", "1", "180.00", "methyl propionate, 12/92"}, {"CTL1", "CTL2", "CL", "OSL", "0.53", "2", "180.00", "methyl propionate, 12/92"}, {"CTL2", "CTL2", "CL", "OSL", "0.000", "6", "0.00", "glycerol and propl ester, 6/07"}, {"CTL2", "CTL2", "CL", "OSL", "0.030", "3", "180.00", "glycerol and propl ester, 6/07"}, {"CTL2", "CTL2", "CL", "OSL", "0.432", "2", "180.00", "glycerol and propl ester, 6/07"}, {"CTL2", "CTL2", "CL", "OSL", "0.332", "1", "0.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.000", "6", "0.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.030", "3", "180.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.432", "2", "180.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CL", "OSL", "0.332", "1", "0.00", "glycerol and propl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.000", "5", "180.00", "propyl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.317", "3", "180.00", "propyl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.557", "2", "0.00", "propyl ester, 6/07"}, {"CTL3", "CTL2", "CTL2", "CL", "0.753", "1", "0.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.000", "5", "180.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.317", "3", "180.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.557", "2", "0.00", "propyl ester, 6/07"}, {"CTL2", "CTL2", "CTL2", "CL", "0.753", "1", "0.00", "propyl ester, 6/07"}, {"OSL", "CTL2", "CTL1", "OSL", "-0.429", "4", "60.00", "glycerol, 8/08"}, {"OSL", "CTL2", "CTL1", "OSL", "0.614", "3", "0.00", "glycerol, 8/08"}, {"OSL", "CTL2", "CTL1", "OSL", "-0.115", "2", "60.00", "glycerol, 8/08"}, {"OSL", "CTL2", "CTL1", "OSL", "0.703", "1", "180.00", "glycerol, 8/08"}, {"OSLP", "CTL2", "CTL1", "OSL", "0.000", "4", "0.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL1", "OSL", "0.607", "3", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL1", "OSL", "0.254", "2", "60.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL1", "OSL", "2.016", "1", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "0.000", "4", "0.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "0.607", "3", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "0.254", "2", "60.00", "Fit to QM, theta2, 07/08 jbk"}, {"OSLP", "CTL2", "CTL2", "OSL", "2.016", "1", "180.00", "Fit to QM, theta2, 07/08 jbk"}, {"CTL3", "CTL1", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CTL2", "CTL1", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CTL3", "CTL2", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CTL2", "CTL2", "CTL2", "OSL", "0.000", "3", "0.00", "glycerol, theta3"}, {"CL", "OSL", "CTL1", "CTL2", "0.000", "4", "0.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL2", "0.150", "3", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL2", "1.453", "2", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL2", "0.837", "1", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "0.000", "4", "0.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "0.150", "3", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "1.453", "2", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL1", "CTL3", "0.837", "1", "180.00", "glycerol, beta1 6/07"}, {"CL", "OSL", "CTL2", "CTL1", "0.267", "3", "180.00", "glycerol, gamma1 6/07"}, {"CL", "OSL", "CTL2", "CTL1", "0.173", "2", "0.00", "glycerol, gamma1 6/07"}, {"CL", "OSL", "CTL2", "CTL1", "0.781", "1", "180.00", "glycerol, gamma1 6/07"}, {"X", "CTL2", "NTL", "X", "0.26", "3", "0.00", "tetramethylammonium"}, {"X", "CTL5", "NTL", "X", "0.23", "3", "0.00", "tetramethylammonium"}, {"X", "CTL1", "NH3L", "X", "0.10", "3", "0.00", "for POPS"}, {"X", "CTL2", "NH3L", "X", "0.10", "3", "0.00", "ethanolamine"}, {"NH3L", "CTL2", "CTL2", "OHL", "0.7", "1", "180.00", "ethanolamine"}, {"NH3L", "CTL2", "CTL2", "OSLP", "0.7", "1", "180.00", "ethanolamine"}, {"NTL", "CTL2", "CTL2", "OHL", "4.3", "1", "180.00", "choline, 12/92"}, {"NTL", "CTL2", "CTL2", "OHL", "-0.4", "3", "180.00", "choline, 12/92"}, {"NTL", "CTL2", "CTL2", "OSLP", "3.3", "1", "180.00", "choline, 12/92"}, {"NTL", "CTL2", "CTL2", "OSLP", "-0.4", "3", "180.00", "choline, 12/92"}, {"X", "CTL1", "CTL1", "X", "0.200", "3", "0.00", "alkane, 3/92"}, {"X", "CTL1", "CTL2", "X", "0.200", "3", "0.00", "alkane, 3/92"}, {"X", "CTL1", "CTL3", "X", "0.200", "3", "0.00", "alkane, 3/92"}, {"X", "CTL2", "CTL2", "X", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CTL2", "CTL3", "X", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CTL3", "CTL3", "X", "0.1525", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"CTL3", "CTL2", "CTL2", "CTL3", "0.060", "2", "0.00", "alkane, 7/08, jbk"}, {"CTL3", "CTL2", "CTL2", "CTL3", "0.035", "5", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.162", "2", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.047", "3", "180.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.105", "4", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL3", "0.177", "5", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.101", "2", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.142", "3", "180.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.074", "4", "0.00", "alkane, 7/08, jbk"}, {"CTL2", "CTL2", "CTL2", "CTL2", "0.097", "5", "0.00", "alkane, 7/08, jbk"}, {"HAL3", "CTL3", "OSL", "SL", "0.00", "3", "0.00", "methylsulfate"}, {"CTL2", "OSL", "SL", "O2L", "0.00", "3", "0.00", "methylsulfate"}, {"CTL3", "OSL", "SL", "O2L", "0.00", "3", "0.00", "methylsulfate"}, {"HEL1", "CEL1", "CEL1", "HEL1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CTL3", "CEL1", "CEL1", "HEL1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"X", "CEL1", "CEL1", "X", "0.4500", "1", "180.00", "2-butene, adm jr., 4/04"}, {"X", "CEL1", "CEL1", "X", "8.5000", "2", "180.00", " "}, {"X", "CEL2", "CEL2", "X", "4.9000", "2", "180.00", "ethene, yin,adm jr., 12/95"}, {"CTL2", "CEL1", "CEL2", "HEL2", "5.2000", "2", "180.00", "propene, yin,adm jr., 12/95"}, {"CTL3", "CEL1", "CEL2", "HEL2", "5.2000", "2", "180.00", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CEL2", "HEL2", "5.2000", "2", "180.00", "propene, yin,adm jr., 12/95"}, {"CEL1", "CEL1", "CTL2", "HAL2", "0.3000", "3", "180.00", "adm jr., 4/04"}, {"CEL1", "CEL1", "CTL3", "HAL3", "0.3000", "3", "180.00", "adm jr., 4/04"}, {"CEL1", "CEL1", "CTL2", "CTL3", "0.9100", "1", "180.0", "adm jr., 11/09, end fix jbk"}, {"CEL1", "CEL1", "CTL2", "CTL3", "0.1800", "2", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL3", "0.1700", "3", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL2", "0.9100", "1", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL2", "0.1800", "2", "180.0", "adm jr., 11/09"}, {"CEL1", "CEL1", "CTL2", "CTL2", "0.1700", "3", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CL", "0.1400", "1", "180.0", "adm jr., 11/09, add jbk for DHA"}, {"CEL1", "CTL2", "CTL2", "CL", "0.1700", "2", "0.0", "adm jr., 11/09, add jbk for DHA"}, {"CEL1", "CTL2", "CTL2", "CL", "0.0500", "3", "180.0", "adm jr., 11/09, add jbk for DHA"}, {"CEL1", "CTL2", "CTL2", "CTL2", "0.1400", "1", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL2", "0.1700", "2", "0.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL2", "0.0500", "3", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL3", "0.1400", "1", "180.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL3", "0.1700", "2", "0.0", "adm jr., 11/09"}, {"CEL1", "CTL2", "CTL2", "CTL3", "0.0500", "3", "180.0", "adm jr., 11/09"}, {"CEL2", "CEL1", "CTL2", "CTL2", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CTL2", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CTL3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CTL3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "HAL2", "0.1200", "3", "0.00", "1-butene, yin,adm jr., 12/95"}, {"CEL2", "CEL1", "CTL3", "HAL3", "0.0500", "3", "180.00", "propene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "CTL2", "0.1200", "3", "0.00", "butene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "CTL3", "0.1200", "3", "0.00", "butene, yin,adm jr., 12/95"}, {"HEL1", "CEL1", "CTL2", "HAL2", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HEL1", "CEL1", "CTL3", "HAL3", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"CEL2", "CEL1", "CTL2", "CEL1", "1.200", "1", "180.00", " "}, {"CEL2", "CEL1", "CTL2", "CEL1", "0.400", "2", "180.00", " "}, {"CEL2", "CEL1", "CTL2", "CEL1", "1.300", "3", "180.00", " "}, {"CEL1", "CTL2", "CEL1", "HEL1", "0.000", "2", "0.00", " "}, {"CEL1", "CTL2", "CEL1", "HEL1", "0.000", "3", "0.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.850", "1", "180.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.300", "2", "180.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.260", "3", "0.00", " "}, {"CEL1", "CEL1", "CTL2", "CEL1", "0.096", "4", "0.00", " "}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_lipid info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_lipid_impropers[4][8]= {{"OBL", "X", "X", "CL", "100.00", "0", "0.00", "acetic acid"}, {"HEL2", "HEL2", "CEL2", "CEL2", "3.00", "0", "0.00", "ethene, yin,adm jr., 12/95"}, {"OCL", "X", "X", "CL", "96.00", "0", "0.00", "acetate"}, {"OCL", "X", "X", "CCL", "96.00", "0", "0.00", "for POPS"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_lipid info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_lipid_vdw[29][6]= {{"HOL", "-0.046", "0.2245", " ", " ", " "}, {"HAL1", "-0.022", "1.3200", " ", " ", "3/92"}, {"HAL2", "-0.028", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"HAL3", "-0.024", "1.3400", " ", " ", "yin and mackerell, 4/98"}, {"HBL", "-0.022", "1.3200", " ", " ", "POPS"}, {"HCL", "-0.046", "0.2245", " ", " ", " "}, {"HL", "-0.046", "0.7", " ", " ", "H on NC4+"}, {"HEL1", "-0.031", "1.25", " ", " ", "yin,adm jr., 12/95"}, {"HEL2", "-0.026", "1.26", " ", " ", "yin,adm jr., 12/95"}, {"CL", "-0.0700", "2.00", " ", " ", "acetate update"}, {"CCL", "-0.0700", "2.00", " ", " ", "POPS"}, {"CTL1", "-0.0200", "2.275", "-0.01", "1.9", "alkane, 3/92"}, {"CTL2", "-0.0560", "2.010", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CTL3", "-0.0780", "2.040", "-0.01", "1.9", "alkane, 4/98, yin, adm jr."}, {"CTL5", "-0.0800", "2.06", "-0.01", "1.9", "old CTL3"}, {"CEL1", "-0.068", "2.09", " ", " ", "yin,adm jr., 12/95"}, {"CEL2", "-0.064", "2.08", " ", " ", "yin,adm jr., 12/95"}, {"CRL1", "-0.0360", "2.010", "-0.01", "1.9", "CGAFF, jbk add for cholesterol"}, {"CRL2", "-0.0600", "2.020", "-0.01", "1.9", "CPEN, cyclopentane, 8/06 viv (jbk add)"}, {"OBL", "-0.12", "1.70", "-0.12", "1.4", " "}, {"OCL", "-0.12", "1.70", " ", " ", " "}, {"O2L", "-0.12", "1.70", " ", " ", " "}, {"OHL", "-0.1521", "1.77", " ", " ", " "}, {"OSL", "-0.1000", "1.6500", " ", " ", "ether parameter"}, {"OSLP", "-0.1000", "1.6500", " ", " ", "ether parameter"}, {"NH3L", "-0.20", "1.85", " ", " ", " "}, {"NTL", "-0.20", "1.85", " ", " ", "all other nitogens"}, {"SL", "-0.47", "2.1", " ", " ", " "}, {"PL", "-0.585", "2.15", " ", " ", "Jr."}}; Atomes-GNU-1.1.14/src/calc/force_fields/charmm36_na.c000066400000000000000000002555431457665371200220720ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file charmm36_na.c * @short CHARMM-charmm36_na force field, from 'charmm36_na' * @author Sébastien Le Roux */ /* * This file: 'charmm36_na.c' * * Contains: * CHARMM-charmm36_na force field, data from taken from: - the file: 'charmm36_na' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_na_atoms[42][5] Bonds : charmm36_na_bonds[89][5] Angles : charmm36_na_angles[226][8] Dihedrals : charmm36_na_dihedrals[502][8] Impropers : charmm36_na_impropers[15][8] Non bonded : charmm36_na_vdw[42][6] */ #include "global.h" int charmm36_na_objects[14] = {42, 0, 0, 89, 0, 0, 226, 0, 502, 0 , 0, 15, 42, 0}; int charmm36_na_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_na info */ char * charmm36_na_atoms[42][5]= {{"H", "1.008000", "HN1", "Nucleic acid amine proton", "91"}, {"H", "1.008000", "HN2", "Nucleic acid ring nitrogen proton", "92"}, {"H", "1.008000", "HN3", "Nucleic acid aromatic carbon proton", "93"}, {"H", "1.008000", "HN4", "Nucleic acid phosphate hydroxyl proton", "94"}, {"H", "1.008000", "HN5", "Nucleic acid ribose hydroxyl proton", "95"}, {"H", "1.008000", "HN6", "Nucleic acid ribose aliphatic proton", "96"}, {"H", "1.008000", "HN7", "Nucleic acid proton (equivalent to protein HA)", "97"}, {"H", "1.008000", "HN8", "Bound to CN8 in nucleic acids/model compounds", "98"}, {"H", "1.008000", "HN9", "Bound to CN9 in nucleic acids/model compounds", "99"}, {"C", "12.011000", "CN1", "Nucleic acid carbonyl carbon", "100"}, {"C", "12.011000", "CN1T", "Nucleic acid carbonyl carbon (T/U C2)", "101"}, {"C", "12.011000", "CN2", "Nucleic acid aromatic carbon to amide", "102"}, {"C", "12.011000", "CN3", "Nucleic acid aromatic carbon", "103"}, {"C", "12.011000", "CN3T", "Nucleic acid aromatic carbon, Thy C5", "104"}, {"C", "12.011000", "CN4", "Nucleic acid purine C8 and ADE C2", "105"}, {"C", "12.011000", "CN5", "Nucleic acid purine C4 and C5", "106"}, {"C", "12.011000", "CN5G", "Nucleic acid guanine C5", "107"}, {"C", "12.011000", "CN7", "Nucleic acid carbon (equivalent to protein CT1)", "108"}, {"C", "12.011000", "CN7B", "Nucleic acid aliphatic carbon for C1'", "109"}, {"C", "12.011000", "CN8", "Nucleic acid carbon (equivalent to protein CT2)", "110"}, {"C", "12.011000", "CN8B", "Nucleic acid carbon (equivalent to protein CT2)", "111"}, {"C", "12.011000", "CN9", "Nucleic acid carbon (equivalent to protein CT3)", "112"}, {"N", "14.007000", "NN1", "Nucleic acid amide nitrogen", "113"}, {"N", "14.007000", "NN2", "Nucleic acid protonated ring nitrogen", "114"}, {"N", "14.007000", "NN2B", "From NN2, for N9 in GUA different from ADE", "115"}, {"N", "14.007000", "NN2U", "Nucleic acid protonated ring nitrogen, ura N3", "116"}, {"N", "14.007000", "NN2G", "Nucleic acid protonated ring nitrogen, gua N1", "117"}, {"N", "14.007000", "NN3", "Nucleic acid unprotonated ring nitrogen", "118"}, {"N", "14.007000", "NN3A", "Nucleic acid unprotonated ring nitrogen, ade N1 and N3", "119"}, {"N", "14.007000", "NN3G", "Nucleic acid unprotonated ring nitrogen, gua N3", "120"}, {"N", "14.007000", "NN4", "Nucleic acid purine N7", "121"}, {"N", "14.007000", "NN6", "Nucleic acid sp3 amine nitrogen (equiv to protein nh3)", "122"}, {"O", "15.999400", "ON1", "Nucleic acid carbonyl oxygen", "123"}, {"O", "15.999400", "ON1C", "Nucleic acid carbonyl oxygen, cyt O2", "124"}, {"O", "15.999400", "ON2", "Nucleic acid phosphate ester oxygen", "125"}, {"O", "15.999400", "ON3", "Nucleic acid =O in phosphate", "126"}, {"O", "15.999400", "ON4", "Nucleic acid phosphate hydroxyl oxygen", "127"}, {"O", "15.999400", "ON5", "Nucleic acid ribose hydroxyl oxygen", "128"}, {"O", "15.999400", "ON6", "Nucleic acid deoxyribose ring oxygen", "129"}, {"O", "15.999400", "ON6B", "Nucleic acid ribose ring oxygen", "130"}, {"P", "30.974000", "P", "phosphorus", "131"}, {"P", "30.974000", "P2", "phosphorus, adm, 2011 DNA update", "132"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_na info V(R) = Kb x (R - R0)^2 */ char * charmm36_na_bonds[89][5]= {{"CN8", "NN6", "200.000", "1.480", "methylammonium"}, {"NN6", "HN1", "403.000", "1.040", "methylammonium"}, {"ON6", "CN8B", "260.0", "1.420", "susil"}, {"CN8", "CN8B", "222.50", "1.528", "Alkanes, sacred"}, {"CN1", "CN3", "302.0", "1.409", "adm jr. 11/97"}, {"CN1", "CN3T", "302.0", "1.403", "adm jr. 11/97"}, {"CN1", "CN5G", "302.0", "1.360", "adm jr. 11/97"}, {"CN1", "NN2", "380.0", "1.367", "adm jr. 11/97"}, {"CN1T", "NN2B", "302.0", "1.348", "adm jr. 11/97"}, {"CN1", "NN2G", "340.0", "1.396", "adm jr. 11/97"}, {"CN1", "NN2U", "340.0", "1.389", "adm jr. 11/97"}, {"CN1T", "NN2U", "340.0", "1.383", "adm jr. 11/97"}, {"CN1", "NN3", "350.0", "1.335", "adm jr. 11/97"}, {"CN1T", "ON1", "860.0", "1.230", "jjp1/adm jr. 7/95"}, {"CN1", "ON1", "660.0", "1.234", "par_a4 adm jr. 10/2/91"}, {"CN1", "ON1C", "620.0", "1.245", "adm jr. 10/2/91"}, {"CN2", "CN3", "320.0", "1.406", "adm jr. 11/97"}, {"CN2", "CN5", "360.0", "1.358", "adm jr. 11/97"}, {"CN2", "NN1", "360.0", "1.366", "JWK, adm jr. 10/2/91"}, {"CN2", "NN2G", "400.0", "1.392", " "}, {"CN2", "NN3", "450.0", "1.343", " "}, {"CN2", "NN3A", "400.0", "1.342", "adm jr. 11/97"}, {"CN2", "NN3G", "320.0", "1.326", "adm jr. 11/97"}, {"CN3", "CN3", "500.0", "1.326", "adm jr. 11/97"}, {"CN3", "CN3T", "560.0", "1.320", "adm jr. 11/97"}, {"CN3T", "CN9", "230.0", "1.478", "adm jr. 11/97"}, {"CN3", "HN3", "350.0", "1.09", "JWK"}, {"CN3T", "HN3", "350.0", "1.09", "JWK"}, {"CN3", "NN2", "302.0", "1.343", "adm jr. 11/97"}, {"CN3", "NN2B", "320.0", "1.343", "adm jr. 11/97"}, {"CN4", "HN3", "380.0", "1.09", "JWK par_a7 9/30/91"}, {"CN4", "NN2", "320.0", "1.374", "adm jr. 11/97"}, {"CN4", "NN2B", "300.0", "1.378", "adm jr. 11/97"}, {"CN4", "NN3A", "420.0", "1.322", "adm jr. 11/97"}, {"CN4", "NN4", "400.0", "1.305", "adm jr. 11/97"}, {"CN5", "CN5", "310.0", "1.361", "adm jr. 11/97"}, {"CN5", "CN5G", "320.0", "1.350", "adm jr. 11/97"}, {"CN5", "NN2", "300.0", "1.375", "adm jr. 11/97"}, {"CN5", "NN2B", "302.0", "1.375", "adm jr. 11/97"}, {"CN5", "NN3A", "350.0", "1.312", "JWK par_a8 9/30/91"}, {"CN5", "NN3G", "350.0", "1.315", "adm jr. 11/97"}, {"CN5", "NN4", "310.0", "1.355", "adm jr. 11/97"}, {"CN5G", "NN4", "310.0", "1.365", "adm jr. 11/97"}, {"CN8", "CN8", "222.50", "1.528", "sacred"}, {"CN8", "CN9", "222.50", "1.528", "sacred"}, {"CN8", "NN2", "400.0", "1.460", "ADM JR."}, {"CN8", "ON5", "428.0", "1.42", "MeOH"}, {"CN9", "HN9", "322.0", "1.111", " "}, {"CN9", "ON2", "340.0", "1.43", "ADM Jr."}, {"HN1", "NN1", "488.0", "1.00", "JWK, adm jr. 7/24/91"}, {"HN2", "NN2", "474.0", "1.01", "JWK"}, {"HN2", "NN2B", "474.0", "1.01", "adm jr. 11/97"}, {"HN2", "NN2G", "471.0", "1.01", "JWK, par_a12 9/30/91"}, {"HN2", "NN2U", "474.0", "1.01", "JWK, adm jr. 7/24/91"}, {"HN4", "ON4", "545.0", "0.960", "ADM Jr."}, {"ON2", "P", "270.0", "1.60", "ADM Jr."}, {"ON2", "P2", "270.0", "1.60", "ADM Jr., adm, 2011 DNA update"}, {"ON3", "P", "580.0", "1.48", "ADM Jr."}, {"ON3", "P2", "580.0", "1.48", "ADM Jr., adm, 2011 DNA update"}, {"ON4", "P", "237.0", "1.58", "ADM Jr."}, {"ON4", "P2", "237.0", "1.58", "ADM Jr., adm, 2011 DNA update"}, {"CN7B", "ON6", "260.0", "1.420", "From exp"}, {"CN7B", "CN8", "200.0", "1.518", "From exp"}, {"CN7", "ON6", "240.0", "1.446", "Fom exp."}, {"CN7", "CN7", "222.5", "1.529", "From exp"}, {"CN7", "CN8", "222.5", "1.516", "From exp."}, {"CN7", "CN9", "222.5", "1.516", "for 5MET, From alkanes"}, {"CN7", "HN7", "309.0", "1.111", "sacred"}, {"CN8", "HN8", "309.0", "1.111", "sacred"}, {"CN7B", "HN7", "309.0", "1.111", "From CN8 HN7 (NF)"}, {"CN7B", "ON6B", "260.0", "1.420", "From CN7B ON6"}, {"CN7", "ON6B", "240.0", "1.480", "From CN7 ON6"}, {"CN7B", "CN7B", "200.0", "1.450", " "}, {"CN7", "CN7B", "222.5", "1.460", "Specific to RNA"}, {"CN7", "CN8B", "222.5", "1.512", "From exp."}, {"CN8B", "ON2", "320.0", "1.44", "From exp"}, {"CN8B", "ON5", "428.0", "1.42", "CN8 ON2, adm jr., 8/30/98"}, {"CN7", "ON2", "310.0", "1.433", "From exp"}, {"CN7B", "ON2", "310.0", "1.433", "From exp, for NADPH and bkbmod"}, {"CN7", "ON5", "428.0", "1.42", "CN8 ON2, adm jr., 8/30/98"}, {"CN9", "NN2", "400.0", "1.456", "adm jr."}, {"CN8", "NN2B", "400.0", "1.458", "adm jr."}, {"CN9", "NN2B", "400.0", "1.458", "adm jr."}, {"CN7B", "NN2", "220.0", "1.456", " "}, {"CN7B", "NN2B", "220.0", "1.458", " "}, {"CN8B", "HN8", "309.0", "1.111", "sacred"}, {"ON5", "HN5", "545.0", "0.960", "MeOH"}, {"CN7B", "ON5", "428.0", "1.400", "check adm jr.,"}, {"CN8", "ON2", "340.0", "1.44", " "}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_na info V(S) = Kub x (S - S0)^2 */ char * charmm36_na_angles[226][8]= {{"CN7", "CN8", "CN8", "58.35", "113.60", "11.16", "2.561", " "}, {"CN8", "CN7", "CN8", "58.35", "113.60", "11.16", "2.561", " "}, {"CN8", "CN8", "CN8", "58.35", "113.60", "11.16", "2.561", " "}, {"HN1", "NN6", "CN8", "30.00", "109.50", "20.00", "2.074", " "}, {"NN6", "CN8", "HN8", "45.00", "107.50", "35.00", "2.101", " "}, {"CN7", "CN8", "ON2", "115.00", "109.70", " ", " ", "exocyclic angles"}, {"NN6", "CN8", "CN8", "67.70", "110.00", " ", " ", " "}, {"HN1", "NN6", "HN1", "44.00", "109.50", " ", " ", " "}, {"ON2", "CN8", "CN8", "115.0", "109.7", " ", " ", "exocyclic angles"}, {"CN7", "ON6", "CN8B", "110.0", "109.0", " ", " ", " "}, {"ON6", "CN8B", "CN8", "90.0", "106.0", " ", " ", " "}, {"CN8B", "CN8", "CN7", "80.0", "106.0", " ", " ", " "}, {"ON6", "CN8B", "HN8", "45.2", "107.24", " ", " ", " "}, {"HN8", "CN8B", "CN8", "34.53", "110.10", "22.53", "2.179", "alkane"}, {"HN8", "CN8", "CN8B", "34.53", "110.10", "22.53", "2.179", "alkane"}, {"CN2", "NN3A", "CN4", "90.0", "117.8", " ", " ", "adm jr. 11/97"}, {"NN3A", "CN4", "NN3A", "60.0", "133.0", " ", " ", " "}, {"CN4", "NN3A", "CN5", "90.0", "110.1", " ", " ", " "}, {"CN5", "CN5", "NN3A", "60.0", "127.4", " ", " ", "bridgeC4"}, {"CN2", "CN5", "CN5", "60.0", "121.0", " ", " ", "bridgeC5"}, {"CN5", "CN2", "NN3A", "60.0", "110.7", " ", " ", " "}, {"CN5", "CN5", "NN2", "100.0", "105.7", " ", " ", "bridgeC4"}, {"CN5", "CN5", "NN4", "100.0", "110.0", " ", " ", "bridgeC5"}, {"CN4", "NN4", "CN5", "120.0", "104.6", " ", " ", " "}, {"NN2", "CN4", "NN4", "100.0", "113.4", " ", " ", " "}, {"CN4", "NN2", "CN5", "100.0", "106.3", " ", " ", " "}, {"NN2", "CN5", "NN3A", "100.0", "126.9", " ", " ", " "}, {"CN2", "CN5", "NN4", "100.0", "129.0", " ", " ", " "}, {"HN3", "CN4", "NN3A", "38.0", "113.5", " ", " ", " "}, {"NN3A", "CN2", "NN1", "50.0", "130.7", " ", " ", " "}, {"CN5", "CN2", "NN1", "50.0", "118.6", " ", " ", " "}, {"CN2", "NN1", "HN1", "40.0", "121.5", " ", " ", "C,A,G"}, {"HN1", "NN1", "HN1", "31.0", "117.0", " ", " ", " "}, {"NN4", "CN4", "HN3", "39.0", "124.8", " ", " ", "G,A"}, {"NN2", "CN4", "HN3", "39.0", "121.8", " ", " ", " "}, {"CN5", "NN2", "HN2", "30.0", "129.4", " ", " ", " "}, {"CN4", "NN2", "HN2", "30.0", "125.0", " ", " ", " "}, {"CN1", "NN2G", "CN2", "70.0", "131.1", " ", " ", "adm jr. 11/97"}, {"NN2G", "CN2", "NN3G", "70.0", "122.2", " ", " ", " "}, {"CN2", "NN3G", "CN5", "90.0", "109.4", " ", " ", " "}, {"CN5G", "CN5", "NN3G", "70.0", "129.9", " ", " ", "bridgeC4"}, {"CN1", "CN5G", "CN5", "70.0", "119.6", " ", " ", "bridgeC5"}, {"CN5G", "CN1", "NN2G", "70.0", "107.8", " ", " ", " "}, {"CN5G", "CN5", "NN2B", "100.0", "104.6", " ", " ", "bridgeC4"}, {"CN5", "CN5G", "NN4", "100.0", "111.4", " ", " ", "bridgeC5"}, {"CN4", "NN4", "CN5G", "120.0", "103.8", " ", " ", " "}, {"NN2B", "CN4", "NN4", "100.0", "113.0", " ", " ", " "}, {"CN4", "NN2B", "CN5", "100.0", "107.2", " ", " ", " "}, {"NN2B", "CN5", "NN3G", "140.0", "125.5", " ", " ", "bridgeC4"}, {"CN1", "CN5G", "NN4", "125.0", "129.0", " ", " ", "bridgeC5"}, {"CN1", "NN2G", "HN2", "45.0", "113.3", " ", " ", "h1"}, {"CN2", "NN2G", "HN2", "45.0", "115.6", " ", " ", " "}, {"NN1", "CN2", "NN2G", "95.0", "115.4", " ", " ", "n2"}, {"NN1", "CN2", "NN3G", "95.0", "122.4", " ", " ", " "}, {"NN2G", "CN1", "ON1", "50.0", "127.5", " ", " ", "o6"}, {"CN5G", "CN1", "ON1", "50.0", "124.7", " ", " ", " "}, {"HN3", "CN4", "NN2B", "40.0", "122.2", " ", " ", "h8 (NN4 CN4 HN3 124.8)"}, {"CN4", "NN2B", "HN2", "30.0", "124.6", " ", " ", "h9"}, {"CN5", "NN2B", "HN2", "30.0", "129.3", " ", " ", " "}, {"CN1", "NN2", "CN3", "50.0", "124.1", " ", " ", "adm jr. 11/97"}, {"NN2", "CN1", "NN3", "50.0", "116.8", " ", " ", " "}, {"CN1", "NN3", "CN2", "85.0", "119.1", " ", " ", " "}, {"CN3", "CN2", "NN3", "85.0", "119.3", " ", " ", " "}, {"CN2", "CN3", "CN3", "85.0", "117.8", " ", " ", " "}, {"CN3", "CN3", "NN2", "85.0", "122.9", " ", " ", " "}, {"CN1", "NN2", "HN2", "37.0", "121.2", " ", " ", "h1"}, {"CN3", "NN2", "HN2", "37.0", "114.7", " ", " ", " "}, {"NN2", "CN1", "ON1C", "130.0", "119.4", " ", " ", "o2"}, {"NN3", "CN1", "ON1C", "130.0", "123.8", " ", " ", " "}, {"NN3", "CN2", "NN1", "81.0", "122.3", " ", " ", "n4"}, {"CN3", "CN2", "NN1", "81.0", "118.4", " ", " ", " "}, {"CN2", "CN3", "HN3", "38.0", "120.1", " ", " ", "h5"}, {"CN3", "CN3", "HN3", "38.0", "122.1", " ", " ", " "}, {"HN3", "CN3", "NN2", "44.0", "115.0", " ", " ", "h6"}, {"CN1T", "NN2B", "CN3", "70.0", "122.0", " ", " ", "adm jr. 11/97"}, {"NN2B", "CN1T", "NN2U", "50.0", "114.0", " ", " ", " "}, {"CN1T", "NN2U", "CN1", "50.0", "130.2", " ", " ", " "}, {"NN2U", "CN1", "CN3", "70.0", "112.6", " ", " ", " "}, {"CN1", "CN3", "CN3", "100.0", "117.6", " ", " ", " "}, {"CN3", "CN3", "NN2B", "100.0", "123.6", " ", " ", " "}, {"CN1T", "NN2B", "HN2", "40.5", "122.0", " ", " ", "h1"}, {"CN3", "NN2B", "HN2", "32.0", "116.0", " ", " ", " "}, {"NN2B", "CN1T", "ON1", "100.0", "121.6", " ", " ", "o2"}, {"NN2U", "CN1T", "ON1", "100.0", "124.4", " ", " ", " "}, {"CN1T", "NN2U", "HN2", "40.5", "114.4", " ", " ", "h3"}, {"CN1", "NN2U", "HN2", "40.5", "115.4", " ", " ", " "}, {"NN2U", "CN1", "ON1", "100.0", "121.9", " ", " ", "o4"}, {"CN3", "CN1", "ON1", "100.0", "125.5", " ", " ", " "}, {"CN1", "CN3", "HN3", "30.0", "120.3", " ", " ", "h5"}, {"HN3", "CN3", "NN2B", "30.0", "114.3", " ", " ", "h6"}, {"CN3T", "CN1", "NN2U", "70.0", "113.5", " ", " ", "adm jr. 11/97"}, {"CN1", "CN3T", "CN3", "120.0", "116.7", " ", " ", " "}, {"CN3T", "CN3", "NN2B", "120.0", "123.6", " ", " ", "!T"}, {"CN3T", "CN1", "ON1", "100.0", "124.6", " ", " ", "o4"}, {"CN1", "CN3T", "CN9", "38.0", "118.7", " ", " ", "c5 methyl"}, {"CN3", "CN3T", "CN9", "38.0", "124.6", " ", " ", " "}, {"CN3T", "CN3", "HN3", "30.0", "122.1", " ", " ", "h6"}, {"CN1T", "NN2B", "CN9", "70.0", "116.0", " ", " ", "adm jr."}, {"CN3", "NN2B", "CN9", "70.0", "122.0", " ", " ", "adm jr. 7/24/91"}, {"CN1", "NN2", "CN9", "70.0", "115.4", " ", " ", "adm jr."}, {"CN3", "NN2", "CN9", "70.0", "120.5", " ", " ", "adm jr. 7/24/91"}, {"CN5", "NN2", "CN9", "70.0", "125.9", " ", " ", "adm jr."}, {"CN4", "NN2", "CN9", "70.0", "127.8", " ", " ", "adm jr."}, {"CN5", "NN2B", "CN9", "70.0", "125.9", " ", " ", "adm jr."}, {"CN4", "NN2B", "CN9", "70.0", "126.9", " ", " ", "adm jr."}, {"CN5", "NN2B", "CN8", "70.0", "125.9", " ", " ", "adm jr."}, {"CN4", "NN2B", "CN8", "70.0", "126.9", " ", " ", "adm jr."}, {"NN2B", "CN8", "CN9", "70.0", "113.7", " ", " ", "adm jr."}, {"CN1T", "NN2B", "CN7B", "45.0", "118.4", " ", " ", "FC from A"}, {"CN3", "NN2B", "CN7B", "45.0", "119.6", " ", " ", " "}, {"CN1", "NN2", "CN7B", "45.0", "120.0", " ", " ", "FC from A"}, {"CN3", "NN2", "CN7B", "45.0", "115.9", " ", " ", " "}, {"CN5", "NN2", "CN7B", "45.0", "126.1", " ", " ", " "}, {"CN4", "NN2", "CN7B", "45.0", "127.6", " ", " ", " "}, {"CN5", "NN2B", "CN7B", "45.0", "126.5", " ", " ", " "}, {"CN4", "NN2B", "CN7B", "45.0", "126.3", " ", " ", " "}, {"ON6", "CN7B", "NN2", "110.0", "108.0", " ", " ", "DNA"}, {"ON6B", "CN7B", "NN2", "110.0", "112.0", " ", " ", "RNA"}, {"CN8", "CN7B", "NN2", "110.0", "113.7", " ", " ", " "}, {"CN7B", "CN7B", "NN2", "110.0", "111.0", " ", " ", "RNA"}, {"ON6", "CN7B", "NN2B", "110.0", "108.0", " ", " ", "(DNA) FC from A"}, {"ON6B", "CN7B", "NN2B", "110.0", "112.0", " ", " ", "(RNA) FC from A"}, {"CN8", "CN7B", "NN2B", "110.0", "113.7", " ", " ", " "}, {"CN7B", "CN7B", "NN2B", "110.0", "111.0", " ", " ", "RNA"}, {"HN7", "CN7B", "NN2", "43.0", "111.0", " ", " ", " "}, {"HN7", "CN7B", "NN2B", "43.0", "111.0", " ", " ", "HN7 CN7B NN2"}, {"CN9", "CN8", "HN8", "34.6", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"CN9", "CN7", "HN7", "34.6", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"HN8", "CN8", "NN2", "33.43", "110.1", " ", " ", "9-M-ADE(THY), ADM"}, {"HN8", "CN8", "ON5", "45.9", "108.89", " ", " ", "Adm Jr. MeOH"}, {"CN3", "CN9", "HN9", "33.43", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"CN3T", "CN9", "HN9", "33.43", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"CN8", "CN9", "HN9", "34.60", "110.10", "22.53", "2.179", "Alkanes, sacred"}, {"HN9", "CN9", "CN7", "33.43", "110.1", "22.53", "2.179", "Alkanes, sacred"}, {"HN9", "CN9", "NN2", "33.43", "110.1", " ", " ", "9-M-A(T), adm jr."}, {"HN9", "CN9", "NN2B", "33.43", "110.1", " ", " ", "9-M-G(C), adm jr."}, {"HN8", "CN8", "NN2B", "33.43", "110.1", " ", " ", "9-E-G, adm jr."}, {"HN9", "CN9", "ON2", "60.0", "109.5", " ", " ", "ADM Jr."}, {"CN9", "ON2", "P", "20.0", "120.0", "35.", "2.33", "ADM Jr."}, {"HN4", "ON4", "P", "30.0", "115.0", "40.0", "2.35", "ADM Jr."}, {"HN4", "ON4", "P2", "30.0", "115.0", "40.0", "2.35", "ADM Jr. , adm, 2011 DNA update"}, {"HN5", "ON5", "CN8", "57.5", "106.0", " ", " ", "Adm Jr. MeOH"}, {"HN5", "ON5", "CN9", "57.5", "106.0", " ", " ", "Adm Jr. MeOH"}, {"ON2", "P", "ON2", "80.0", "104.3", " ", " ", "ADM Jr."}, {"ON2", "P2", "ON2", "80.0", "104.3", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"ON2", "P", "ON4", "48.1", "108.0", " ", " ", "ADM Jr."}, {"ON2", "P2", "ON4", "48.1", "108.0", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"ON3", "P", "ON4", "98.9", "108.23", " ", " ", "ADM Jr."}, {"ON3", "P2", "ON4", "98.9", "108.23", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"ON4", "P", "ON4", "98.9", "104.0", " ", " ", "ADM Jr."}, {"ON4", "P2", "ON4", "98.9", "104.0", " ", " ", "ADM Jr., adm, 2011 DNA update"}, {"CN7", "CN8", "ON5", "75.7", "110.10", " ", " ", "adm jr. MeOH"}, {"HN9", "CN9", "HN9", "35.500", "108.40", "5.40", "1.802", "update, adm jr. 3/2/92"}, {"CN7", "ON6", "CN7B", "110.0", "108.0", " ", " ", "NF, 11/97, C4'O4'C1'"}, {"ON6", "CN7B", "CN8", "90.0", "102.0", " ", " ", "NF, 11/97, C4'O4'C1'"}, {"CN7B", "CN8", "CN7", "80.00", "100.0", " ", " ", "NF, 11/97, C1'C2'C3'"}, {"CN8", "CN7", "CN7", "60.00", "102.0", "8.0", "2.561", "11/97, C2'C3'C4'"}, {"CN9", "CN7", "CN7", "60.00", "102.0", "8.0", "2.561", "5MET, adm jr."}, {"CN7", "CN7", "ON6", "100.0", "104.0", " ", " ", "NF, 11/97, C3'C4'O4'"}, {"HN7", "CN7", "ON6", "45.2", "107.24", " ", " ", " "}, {"HN7", "CN7B", "ON6", "45.2", "107.24", " ", " ", " "}, {"HN7", "CN7", "CN7", "40.0", "108.00", " ", " ", " "}, {"CN7B", "CN8", "HN8", "33.4", "110.10", "22.53", "2.179", "following terms directly"}, {"CN8", "CN7B", "HN7", "33.4", "110.10", "22.53", "2.179", "from alkanes"}, {"HN7", "CN7", "CN8", "34.5", "110.1", "22.53", "2.179", " "}, {"HN8", "CN8", "CN7", "34.53", "110.10", "22.53", "2.179", " "}, {"HN8", "CN8", "CN8", "34.53", "110.10", "22.53", "2.179", " "}, {"HN8", "CN8", "HN8", "35.5", "109.00", "5.40", "1.802", " "}, {"HN7", "CN7", "HN7", "35.5", "109.00", "5.40", "1.802", " "}, {"CN7", "ON6B", "CN7B", "110.0", "115.0", " ", " ", "From CN7 ON6 CN7B"}, {"CN7", "CN7", "ON6B", "100.0", "110.0", " ", " ", "From CN7 CN7 ON6"}, {"ON6B", "CN7B", "CN7B", "90.0", "106.0", " ", " ", "030998"}, {"CN7B", "CN7B", "CN7", "110.0", "96.0", " ", " ", " "}, {"CN7B", "CN7", "CN7", "60.0", "100.0", "8.00", "2.561", "11/97, C2'C3'C4'"}, {"HN7", "CN7", "ON6B", "45.2", "107.24", " ", " ", " "}, {"HN7", "CN7B", "ON6B", "45.2", "107.24", " ", " ", " "}, {"CN7B", "CN7B", "HN7", "33.4", "110.10", "22.53", "2.179", "following terms directly"}, {"HN7", "CN7B", "HN7", "35.5", "109.00", "5.40", "1.802", " "}, {"ON6", "CN7", "CN8B", "90.0", "108.2", " ", " ", "11/97, O4'C4'C5'"}, {"ON6", "CN7", "CN9", "90.0", "108.2", " ", " ", "5MET, adm jr."}, {"CN7", "CN7", "CN8B", "45.0", "110.0", " ", " ", "11/97, C3'C4'C5'"}, {"CN8", "CN7", "CN8B", "58.35", "113.60", "11.16", "2.561", "from alkane, 25P1"}, {"CN7", "CN8B", "ON2", "70.0", "108.4", " ", " ", "11/97, C4'C5'O5'"}, {"CN7", "CN7", "ON2", "115.0", "109.7", " ", " ", "11/97, C4'C3'O3'"}, {"CN7B", "CN7B", "ON2", "115.0", "109.7", " ", " ", "11/97, C4'C3'O3' for NADPH and bkbmod"}, {"CN8", "CN7", "ON2", "115.0", "109.7", " ", " ", "11/97, C2'C3'O3'"}, {"CN8B", "ON2", "P", "20.0", "120.0", "35.00", "2.33", "11/97, C5'O5'P"}, {"CN8B", "ON2", "P2", "20.0", "120.0", "35.00", "2.33", "11/97, C5'O5'P, adm, 2011 DNA update"}, {"CN7", "ON2", "P", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P"}, {"CN7", "ON2", "P2", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P, adm, 2011 DNA update"}, {"CN7B", "ON2", "P", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P, for NADPH and bkbmod"}, {"CN7B", "ON2", "P2", "20.0", "120.0", "35.00", "2.33", "11/97, C3'O3'P, for NADPH and bkbmod, adm, 2011 DNA update"}, {"HN7", "CN7", "CN8B", "34.5", "110.1", "22.53", "2.179", "From HN7 CN7 CN8"}, {"HN8", "CN8B", "ON2", "60.0", "109.5", " ", " ", "From HN7 CN8 ON2"}, {"HN5", "ON5", "CN8B", "57.5", "106.0", " ", " ", "From HN5 ON5 CN8"}, {"HN8", "CN8B", "HN8", "35.5", "109.0", "5.40", "1.802", "Alkanes, sacred"}, {"HN8", "CN8B", "CN7", "34.53", "110.1", "22.53", "2.179", "Alkanes, sacred"}, {"HN7", "CN7", "ON2", "60.0", "109.5", " ", " ", "adm jr. from HN7 CN8 ON2"}, {"HN7", "CN7B", "ON2", "60.0", "109.5", " ", " ", "adm jr. from HN7 CN8 ON2, for NADPH and bkbmod"}, {"CN7", "CN8B", "ON5", "75.7", "110.10", " ", " ", "From CN7 CN8B ON5"}, {"CN8B", "CN7", "ON5", "90.0", "108.2", " ", " ", "phosphoramidate, carbocyclic"}, {"HN8", "CN8B", "ON5", "45.9", "108.89", " ", " ", "From HN7 CN8 ON5"}, {"ON5", "CN7", "CN8", "75.7", "110.0", " ", " ", "from CHARMM22"}, {"ON5", "CN7", "CN7", "75.7", "110.1", " ", " ", " "}, {"HN7", "CN7", "ON5", "60.0", "109.5", " ", " ", " "}, {"HN5", "ON5", "CN7", "57.5", "109.0", " ", " ", " "}, {"ON6B", "CN7", "CN8B", "90.0", "108.2", " ", " ", " "}, {"ON6B", "CN7", "CN9", "90.0", "108.2", " ", " ", "for 5MET patch, adm jr."}, {"ON2", "CN7", "CN7B", "90.0", "110.0", " ", " ", " "}, {"ON5", "CN7", "CN7B", "90.0", "110.0", " ", " ", "From ON5 CN7 CN8"}, {"ON5", "CN7B", "CN7B", "80.0", "108.4", " ", " ", " "}, {"ON5", "CN7B", "CN7", "90.0", "108.0", " ", " ", " "}, {"HN7", "CN7B", "ON5", "60.0", "109.5", " ", " ", " "}, {"HN5", "ON5", "CN7B", "57.5", "109.0", " ", " ", " "}, {"HN7", "CN7B", "CN7", "34.53", "110.10", "22.53", "2.179", " "}, {"HN7", "CN7", "CN7B", "34.53", "110.10", "22.53", "2.179", " "}, {"CN8", "ON2", "P", "20.0", "120.0", "35.", "2.33", "adm jr."}, {"CN8", "ON2", "P2", "20.0", "120.0", "35.", "2.33", "adm jr., adm 2011 DNA update"}, {"ON2", "P", "ON3", "98.9", "111.6", " ", " ", "adm jr."}, {"ON2", "P2", "ON3", "98.9", "111.6", " ", " ", "adm jr., adm, 2011 DNA update"}, {"ON3", "P", "ON3", "120.0", "120.0", " ", " ", "adm jr."}, {"ON3", "P2", "ON3", "120.0", "120.0", " ", " ", "adm jr., adm, 2011 DNA update"}, {"HN8", "CN8", "ON2", "60.0", "109.5", " ", " ", "adm jr."}, {"ON5", "P", "ON3", "98.9", "111.6", " ", " ", "From ON2 P ON3"}, {"ON6", "CN7B", "CN7", "120.0", "106.25", " ", " ", " "}, {"CN7B", "CN7", "CN8", "58.35", "113.6", "11.16", "2.561", " "}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_na info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_na_dihedrals[502][8]= {{"X", "CN8", "ON2", "X", "-0.10", "3", "0.0", "phosphate ester"}, {"X", "CN7", "CN8", "X", "0.20", "3", "0.0", "alkane"}, {"X", "CN8", "NN6", "X", "0.10", "3", "0.0", "methylammonium"}, {"CN7", "ON6", "CN8B", "HN8", "0.195", "1", "0.0", " "}, {"ON6", "CN8B", "CN8", "HN8", "0.195", "1", "0.0", " "}, {"HN7", "CN7", "ON6", "CN8B", "0.195", "3", "0.0", " "}, {"CN8B", "CN8", "CN7", "HN7", "0.195", "3", "0.0", " "}, {"HN8", "CN8B", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"HN8", "CN8B", "CN8", "CN7", "0.195", "3", "0.0", " "}, {"CN8B", "CN7", "ON6", "CN8B", "0.5", "5", "0.0", "min at 150 310 max at 25 200"}, {"CN8B", "CN7", "ON6", "CN8B", "0.1", "3", "180.0", " "}, {"CN8B", "CN7", "ON6", "CN8B", "0.5", "1", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON5", "0.4", "5", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON5", "0.4", "3", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON5", "0.7", "2", "0.0", "energy at 0 (c3'endo), adm"}, {"CN8B", "CN8", "CN7", "ON5", "0.5", "1", "180.0", "energy at 0 (c3'endo), adm"}, {"CN8B", "CN8", "CN7", "ON2", "0.4", "5", "0.0", "for oligonuclotide"}, {"CN8B", "CN8", "CN7", "ON2", "0.4", "3", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON2", "0.7", "2", "0.0", " "}, {"CN8B", "CN8", "CN7", "ON2", "0.5", "1", "180.0", " "}, {"CN7", "ON6", "CN8B", "CN8", "0.6", "6", "180.0", " "}, {"CN7", "ON6", "CN8B", "CN8", "0.6", "3", "0.0", " "}, {"ON6", "CN8B", "CN8", "CN7", "0.7", "5", "180.0", "90, shifts c2endo minimum towards 200"}, {"ON6", "CN8B", "CN8", "CN7", "0.4", "4", "0.0", "90, shifts c2endo minimum towards 200"}, {"ON6", "CN8B", "CN8", "CN7", "0.4", "3", "180.0", "90, shifts c2endo minimum towards 200"}, {"CN7", "CN7", "CN8", "CN8B", "0.5", "4", "0.0", " "}, {"CN7", "CN7", "CN8", "CN8B", "0.1", "3", "0.0", "energy in 150 to 250 range"}, {"CN8B", "ON6", "CN7", "CN7", "0.5", "3", "0.0", "surface in 200-360 region"}, {"ON2", "P2", "ON2", "CN7", "0.90", "1", "180.0", "adm, 2011 DNA update new param, zeta, kat2 set"}, {"ON2", "P2", "ON2", "CN7", "0.40", "2", "180.0", "adm, 2011 DNA update new param, zeta, kat2 set"}, {"ON2", "P2", "ON2", "CN7", "0.20", "3", "180.0", "adm, 2011 DNA update new param, zeta, kat2 set"}, {"ON2", "P", "ON2", "CN7", "1.20", "1", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN7", "0.10", "2", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN7", "0.10", "3", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN7", "0.00", "6", "0.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8", "1.20", "1", "180.0", "DMP, adm jr."}, {"ON2", "P", "ON2", "CN8", "0.10", "2", "180.0", "DMP, adm jr."}, {"ON2", "P", "ON2", "CN8", "0.10", "3", "180.0", "DMP, adm jr."}, {"ON2", "P", "ON2", "CN8", "0.00", "6", "0.0", "DMP, adm jr."}, {"ON2", "P2", "ON2", "CN8", "1.20", "1", "180.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8", "0.10", "2", "180.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8", "0.10", "3", "180.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8", "0.00", "6", "0.0", "DMP, adm jr., adm 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "1.20", "1", "180.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "0.10", "2", "180.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "0.10", "3", "180.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN8B", "0.00", "6", "0.0", "DMP, adm jr., adm, 2011 DNA update"}, {"ON2", "P", "ON2", "CN8B", "1.20", "1", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8B", "0.10", "2", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8B", "0.10", "3", "180.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN8B", "0.00", "6", "0.0", "DMP, adm jr., RNA"}, {"ON2", "P", "ON2", "CN9", "1.20", "1", "180.0", " "}, {"ON2", "P", "ON2", "CN9", "0.10", "2", "180.0", " "}, {"ON2", "P", "ON2", "CN9", "0.10", "3", "180.0", " "}, {"ON2", "P", "ON2", "CN9", "0.00", "6", "0.0", " "}, {"ON2", "P2", "ON2", "CN9", "1.20", "1", "180.0", "adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN9", "0.10", "2", "180.0", "adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN9", "0.10", "3", "180.0", "adm, 2011 DNA update"}, {"ON2", "P2", "ON2", "CN9", "0.00", "6", "0.0", "adm, 2011 DNA update"}, {"ON3", "P", "ON2", "CN7", "0.10", "3", "0.0", "O1P-P-O3'-C3'"}, {"ON3", "P2", "ON2", "CN7", "0.10", "3", "0.0", "O1P-P-O3'-C3', adm, 2011 DNA update"}, {"ON3", "P", "ON2", "CN7B", "0.10", "3", "0.0", "NADPH and bkbmod"}, {"ON3", "P", "ON2", "CN8", "0.10", "3", "0.0", " "}, {"ON3", "P2", "ON2", "CN8", "0.10", "3", "0.0", "adm 2011 DNA update"}, {"ON3", "P", "ON2", "CN8B", "0.10", "3", "0.0", "O1P-P-O5'-C5'"}, {"ON3", "P2", "ON2", "CN8B", "0.10", "3", "0.0", "O1P-P-O5'-C5', adm, 2011 DNA update"}, {"ON3", "P", "ON2", "CN9", "0.10", "3", "0.0", " "}, {"ON3", "P2", "ON2", "CN9", "0.10", "3", "0.0", "adm, 2011 DNA update"}, {"ON4", "P", "ON2", "CN7", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN7", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P2", "ON2", "CN7", "0.95", "2", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P2", "ON2", "CN7", "0.50", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P", "ON2", "CN8", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN8", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN8B", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN8B", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P2", "ON2", "CN8B", "0.95", "2", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P2", "ON2", "CN8B", "0.50", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P", "ON2", "CN9", "0.95", "2", "0.0", "adm jr."}, {"ON4", "P", "ON2", "CN9", "0.50", "3", "0.0", "adm jr."}, {"ON4", "P2", "ON2", "CN9", "0.95", "2", "0.0", "adm jr., adm, 2011 DNA update"}, {"ON4", "P2", "ON2", "CN9", "0.50", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"X", "ON4", "P", "X", "0.30", "3", "0.0", "adm jr."}, {"X", "ON4", "P2", "X", "0.30", "3", "0.0", "adm jr., adm, 2011 DNA update"}, {"P", "ON2", "CN7", "HN7", "0.000", "3", "0.0", "H-C3'-O3'-P"}, {"P2", "ON2", "CN7", "HN7", "0.000", "3", "0.0", "H-C3'-O3'-P, adm, 2011 DNA update"}, {"P", "ON2", "CN7B", "HN7", "0.000", "3", "0.0", "NADPH and bkbmod"}, {"P", "ON2", "CN8B", "HN8", "0.000", "3", "0.0", "H-C5'-O5'-P"}, {"P2", "ON2", "CN8B", "HN8", "0.000", "3", "0.0", "H-C5'-O5'-P, adm, 2011 DNA update"}, {"P", "ON2", "CN8", "HN8", "0.000", "3", "0.0", " "}, {"P", "ON2", "CN9", "HN9", "0.000", "3", "0.0", " "}, {"P2", "ON2", "CN9", "HN9", "0.000", "3", "0.0", "adm, 2011 DNA update"}, {"CN9", "CN8", "CN8", "CN9", "0.15", "1", "0.0", " "}, {"CN9", "CN8", "CN8", "CN8", "0.15", "1", "0.0", " "}, {"NN2B", "CN1T", "NN2U", "CN1", "1.5", "2", "180.0", "adm jr. 11/97"}, {"CN1T", "NN2U", "CN1", "CN3", "1.5", "2", "180.0", "adm jr. 11/97"}, {"NN2U", "CN1", "CN3", "CN3", "1.5", "2", "180.0", "adm jr. 11/97"}, {"CN1", "CN3", "CN3", "NN2B", "6.0", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN3", "NN2B", "CN1T", "1.5", "2", "180.0", "adm jr. 11/97"}, {"CN3", "NN2B", "CN1T", "NN2U", "1.5", "2", "180.0", "adm jr. 11/97"}, {"HN3", "CN3", "CN3", "HN3", "3.0", "2", "180.0", "adm jr. 11/97"}, {"HN3", "CN3", "CN1", "ON1", "6.0", "2", "180.0", "adm jr. 11/97"}, {"ON1", "CN1T", "NN2B", "HN2", "0.0", "2", "180.0", "adm jr. 11/97"}, {"ON1", "CN1", "NN2U", "HN2", "0.0", "2", "180.0", "adm jr. 11/97"}, {"ON1", "CN1T", "NN2U", "HN2", "0.0", "2", "180.0", "adm jr. 11/97"}, {"HN2", "NN2B", "CN3", "HN3", "1.5", "2", "180.0", "adm jr. 11/97"}, {"NN2B", "CN1T", "NN2U", "HN2", "3.8", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN1", "NN2U", "HN2", "3.8", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN3", "NN2B", "HN2", "1.6", "2", "180.0", "adm jr. 11/97"}, {"NN2U", "CN1T", "NN2B", "HN2", "1.6", "2", "180.0", "adm jr. 11/97"}, {"CN1T", "NN2B", "CN3", "CN3T", "1.8", "2", "180.0", "adm jr. 11/97"}, {"NN2U", "CN1", "CN3T", "CN3", "1.8", "2", "180.0", "adm jr. 11/97"}, {"CN1", "CN3T", "CN3", "NN2B", "3.0", "2", "180.0", "adm jr. 11/97"}, {"NN2B", "CN1", "CN3T", "CN9", "5.6", "2", "180.0", "adm jr. 11/97"}, {"NN2B", "CN3", "CN3T", "CN9", "5.6", "2", "180.0", "adm jr. 11/97"}, {"CN1", "CN3T", "CN9", "HN9", "0.46", "3", "0.0", "adm jr. 11/97"}, {"CN3", "CN3T", "CN9", "HN9", "0.46", "3", "0.0", "adm jr. 11/97"}, {"CN3T", "CN1", "NN2U", "HN2", "4.8", "2", "180.0", "adm jr. 11/97"}, {"CN3", "NN2", "CN1", "NN3", "0.6", "2", "180.0", "adm jr. 11/97"}, {"NN2", "CN1", "NN3", "CN2", "0.6", "2", "180.0", "adm jr. 11/97"}, {"CN1", "NN3", "CN2", "CN3", "6.0", "2", "180.0", "adm jr. 11/97"}, {"NN3", "CN2", "CN3", "CN3", "0.6", "2", "180.0", "adm jr. 11/97"}, {"CN2", "CN3", "CN3", "NN2", "6.0", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN3", "NN2", "CN1", "0.6", "2", "180.0", "adm jr. 11/97"}, {"NN3", "CN2", "NN1", "HN1", "1.0", "2", "180.0", "adm jr. 11/97"}, {"CN3", "CN2", "NN1", "HN1", "1.0", "2", "180.0", "adm jr. 11/97"}, {"NN1", "CN2", "NN3", "CN1", "2.0", "2", "180.0", "adm jr. 11/97"}, {"NN1", "CN2", "CN3", "CN3", "2.0", "2", "180.0", "adm jr. 11/97"}, {"NN1", "CN2", "CN3", "HN3", "2.0", "2", "180.0", "adm jr. 11/97"}, {"ON1C", "CN1", "NN2", "HN2", "3.0", "2", "180.0", "adm jr. 11/97"}, {"ON1C", "CN1", "NN3", "CN2", "1.6", "2", "180.0", "adm jr. 11/97"}, {"ON1C", "CN1", "NN2", "CN3", "1.6", "2", "180.0", "adm jr. 11/97"}, {"NN3", "CN2", "CN3", "HN3", "3.4", "2", "180.0", "adm jr. 11/97"}, {"NN2", "CN3", "CN3", "HN3", "3.4", "2", "180.0", "adm jr. 11/97"}, {"CN2", "CN3", "CN3", "HN3", "4.6", "2", "180.0", "adm jr. 11/97"}, {"CN1", "NN2", "CN3", "HN3", "4.6", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "NN3", "X", "2.0", "2", "180.0", "adm jr. 11/97"}, {"CN2", "NN3A", "CN4", "NN3A", "1.8", "2", "180.0", "adm jr. 11/97, 6-mem"}, {"NN3A", "CN4", "NN3A", "CN5", "2.0", "2", "180.0", " "}, {"CN4", "NN3A", "CN5", "CN5", "1.8", "2", "180.0", " "}, {"NN3A", "CN5", "CN5", "CN2", "2.0", "2", "180.0", "treated 2x"}, {"CN5", "CN5", "CN2", "NN3A", "1.8", "2", "180.0", " "}, {"CN5", "CN2", "NN3A", "CN4", "10.0", "2", "180.0", " "}, {"CN5", "CN5", "NN4", "CN4", "6.0", "2", "180.0", "5-mem"}, {"CN5", "NN4", "CN4", "NN2", "14.0", "2", "180.0", " "}, {"NN4", "CN4", "NN2", "CN5", "6.0", "2", "180.0", " "}, {"CN4", "NN2", "CN5", "CN5", "6.0", "2", "180.0", " "}, {"NN2", "CN5", "CN5", "NN4", "14.0", "2", "180.0", "treated 2x"}, {"CN2", "NN3A", "CN4", "HN3", "8.5", "2", "180.0", "H2"}, {"CN5", "NN3A", "CN4", "HN3", "8.5", "2", "180.0", "H2"}, {"CN5", "NN4", "CN4", "HN3", "5.2", "2", "180.0", "H8"}, {"CN5", "NN2", "CN4", "HN3", "5.2", "2", "180.0", "H8"}, {"CN5", "CN5", "NN2", "HN2", "1.2", "2", "180.0", "H9"}, {"NN4", "CN4", "NN2", "HN2", "1.2", "2", "180.0", "H9"}, {"HN2", "NN2", "CN4", "HN3", "0.0", "2", "180.0", "H8-C-N-H9"}, {"CN4", "NN3A", "CN2", "NN1", "4.0", "2", "180.0", "N6"}, {"CN5", "CN5", "CN2", "NN1", "4.0", "2", "180.0", "N6"}, {"NN4", "CN5", "CN2", "NN1", "0.0", "2", "180.0", "N6"}, {"CN5", "CN2", "NN1", "HN1", "0.5", "2", "180.0", "6-NH2"}, {"NN3A", "CN2", "NN1", "HN1", "0.5", "2", "180.0", " "}, {"NN3A", "CN5", "CN5", "NN4", "7.0", "2", "180.0", "adm jr. 11/97"}, {"CN2", "CN5", "CN5", "NN2", "7.0", "2", "180.0", " "}, {"NN3A", "CN2", "CN5", "NN4", "2.0", "2", "180.0", " "}, {"CN2", "CN5", "NN4", "CN4", "2.0", "2", "180.0", " "}, {"CN4", "NN3A", "CN5", "NN2", "2.0", "2", "180.0", " "}, {"NN3A", "CN5", "NN2", "CN4", "2.0", "2", "180.0", " "}, {"CN1", "NN2G", "CN2", "NN3G", "0.2", "2", "180.0", "jr. 11/97, 6-mem"}, {"NN2G", "CN2", "NN3G", "CN5", "2.0", "2", "180.0", " "}, {"CN2", "NN3G", "CN5", "CN5G", "0.2", "2", "180.0", " "}, {"NN3G", "CN5", "CN5G", "CN1", "2.0", "2", "180.0", " "}, {"CN5", "CN5G", "CN1", "NN2G", "0.2", "2", "180.0", " "}, {"CN5G", "CN1", "NN2G", "CN2", "0.2", "2", "180.0", " "}, {"CN5", "CN5G", "NN4", "CN4", "6.0", "2", "180.0", " "}, {"CN5G", "NN4", "CN4", "NN2B", "16.0", "2", "180.0", " "}, {"NN4", "CN4", "NN2B", "CN5", "6.0", "2", "180.0", " "}, {"CN4", "NN2B", "CN5", "CN5G", "6.0", "2", "180.0", " "}, {"NN2B", "CN5", "CN5G", "NN4", "10.0", "2", "180.0", " "}, {"ON1", "CN1", "CN5G", "CN5", "14.0", "2", "180.0", "O6"}, {"ON1", "CN1", "CN5G", "NN4", "0.0", "2", "180.0", " "}, {"ON1", "CN1", "NN2G", "CN2", "14.0", "2", "180.0", " "}, {"ON1", "CN1", "NN2G", "HN2", "0.0", "2", "180.0", " "}, {"NN1", "CN2", "NN2G", "CN1", "4.0", "2", "180.0", "N2"}, {"NN1", "CN2", "NN3G", "CN5", "4.0", "2", "180.0", " "}, {"NN1", "CN2", "NN2G", "HN2", "0.0", "2", "180.0", " "}, {"NN2G", "CN2", "NN1", "HN1", "1.2", "2", "180.0", " "}, {"NN3G", "CN2", "NN1", "HN1", "1.2", "2", "180.0", " "}, {"HN2", "NN2G", "CN1", "CN5G", "3.6", "2", "180.0", "H1"}, {"HN2", "NN2G", "CN2", "NN3G", "3.6", "2", "180.0", " "}, {"HN3", "CN4", "NN4", "CN5G", "5.6", "2", "180.0", "H8"}, {"HN3", "CN4", "NN2B", "CN5", "5.6", "2", "180.0", " "}, {"HN3", "CN4", "NN2B", "HN2", "0.0", "2", "180.0", " "}, {"HN2", "NN2B", "CN5", "CN5G", "1.2", "2", "180.0", "H9"}, {"HN2", "NN2B", "CN5", "NN3G", "1.2", "2", "180.0", " "}, {"HN2", "NN2B", "CN4", "NN4", "1.2", "2", "180.0", " "}, {"NN3G", "CN5", "CN5G", "NN4", "10.0", "2", "180.0", "jr. 11/97"}, {"CN1", "CN5G", "CN5", "NN2", "10.0", "2", "180.0", " "}, {"NN2G", "CN1", "CN5G", "NN4", "2.0", "2", "180.0", " "}, {"CN1", "CN5G", "NN4", "CN4", "2.0", "2", "180.0", " "}, {"CN2", "NN3G", "CN5", "NN2B", "2.0", "2", "180.0", " "}, {"NN3G", "CN5", "NN2B", "CN4", "2.0", "2", "180.0", " "}, {"X", "CN1", "NN3", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN1", "NN2", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN1T", "NN2B", "X", "0.9", "2", "180.0", "From X CN1 NN2 X, for thymines"}, {"X", "CN1", "NN2G", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN1", "NN2U", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN1T", "NN2U", "X", "0.9", "2", "180.0", "c22"}, {"X", "CN3", "NN2", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN3", "NN2B", "X", "1.0", "2", "180.0", "From X CN3 NN2 X, for thymines"}, {"X", "CN3", "CN3", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN3", "CN3T", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN1", "CN3", "X", "1.0", "2", "180.0", "c22"}, {"X", "CN1", "CN3T", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "CN3", "X", "0.8", "2", "180.0", "c22"}, {"X", "CN1", "CN5G", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "NN2G", "X", "1.0", "2", "180.0", " "}, {"X", "CN2", "CN5", "X", "1.0", "2", "180.0", " "}, {"X", "CN4", "NN2", "X", "1.5", "2", "180.0", " "}, {"X", "CN4", "NN2B", "X", "1.5", "2", "180.0", "From X CN4 NN2 X"}, {"X", "CN4", "NN3A", "X", "3.5", "2", "180.0", " "}, {"X", "CN4", "NN4", "X", "2.0", "2", "180.0", "A,G"}, {"X", "CN5", "CN5", "X", "0.0", "2", "180.0", " "}, {"X", "CN5G", "CN5", "X", "0.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN5", "NN2", "X", "1.5", "2", "180.0", " "}, {"X", "CN5", "NN2B", "X", "1.5", "2", "180.0", "From X CN5 NN2 X"}, {"X", "CN5", "NN3A", "X", "1.0", "2", "180.0", " "}, {"X", "CN5", "NN3G", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN5", "NN4", "X", "1.0", "2", "180.0", " "}, {"X", "CN5G", "NN4", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"X", "CN2", "NN3A", "X", "1.0", "2", "180.0", " "}, {"X", "CN2", "NN3G", "X", "1.0", "2", "180.0", "adm jr. 11/97"}, {"CN1", "NN2", "CN9", "HN9", "0.19", "3", "0.0", "1-M-C"}, {"CN3", "NN2", "CN9", "HN9", "0.00", "3", "0.0", "1-M-C"}, {"CN4", "NN2", "CN9", "HN9", "0.00", "3", "0.0", "9-M-A"}, {"CN5", "NN2", "CN9", "HN9", "0.19", "3", "0.0", "9-M-A"}, {"CN1", "NN2B", "CN9", "HN9", "0.19", "3", "0.0", "1-M-U"}, {"CN1T", "NN2B", "CN9", "HN9", "0.19", "3", "0.0", "1-M-T"}, {"CN3", "NN2B", "CN9", "HN9", "0.00", "3", "0.0", "1-M-T/U"}, {"CN4", "NN2B", "CN9", "HN9", "0.00", "3", "0.0", "9-M-G"}, {"CN5", "NN2B", "CN9", "HN9", "0.19", "3", "0.0", "9-M-G"}, {"CN4", "NN2B", "CN8", "HN8", "0.00", "3", "0.0", "9-E-G"}, {"CN5", "NN2B", "CN8", "HN8", "0.19", "3", "0.0", "9-E-G"}, {"CN4", "NN2B", "CN8", "CN9", "0.00", "3", "0.0", "9-E-G"}, {"CN5", "NN2B", "CN8", "CN9", "0.19", "3", "0.0", "9-E-G"}, {"X", "CN8", "CN8", "X", "0.15", "3", "0.0", "Alkanes (0.2 to 0.15)"}, {"X", "CN8", "CN9", "X", "0.15", "3", "0.0", "Alkanes (0.2 to 0.15)"}, {"HN7", "CN7B", "CN7B", "ON2", "0.195", "3", "0.0", "NADPH and bkbmod"}, {"ON2", "CN7B", "CN7B", "NN2", "0.0", "3", "0.0", "NADPH and bkbmod"}, {"CN7", "CN7B", "ON6", "CN7", "0.6", "6", "180.0", " "}, {"CN7B", "CN7", "CN7", "CN7", "0.4", "6", "0.0", "good for amplitudes"}, {"CN7B", "CN7", "CN7", "CN9", "0.4", "6", "0.0", "good for amplitudes, 5MET"}, {"CN7", "CN7", "CN7", "ON6", "0.6", "6", "0.0", " "}, {"CN7", "CN7", "CN7B", "ON6", "0.6", "6", "0.0", " "}, {"ON2", "CN7", "CN7", "CN7", "0.8", "6", "0.0", " "}, {"ON2", "CN7", "CN7", "CN7", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON2", "CN7", "CN7", "CN7", "2.0", "3", "180.0", " "}, {"ON2", "CN7B", "CN7", "CN7", "0.8", "6", "0.0", " "}, {"ON2", "CN7B", "CN7", "CN7", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON2", "CN7B", "CN7", "CN7", "2.0", "3", "180.0", " "}, {"ON5", "CN7", "CN7", "CN7", "0.8", "6", "0.0", " "}, {"ON5", "CN7", "CN7", "CN7", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON5", "CN7", "CN7", "CN7", "2.0", "3", "180.0", " "}, {"ON5", "CN7", "CN7", "ON5", "0.0", "3", "0.0", " "}, {"ON5", "CN7", "CN7", "ON2", "0.0", "3", "0.0", " "}, {"ON2", "CN7", "CN7B", "ON6", "0.5", "6", "0.0", "for amplitudes"}, {"ON2", "CN7", "CN7B", "ON6", "0.3", "5", "0.0", "on amplitudes"}, {"ON2", "CN7", "CN7B", "ON6", "0.6", "4", "180.0", "c2'endo"}, {"ON2", "CN7", "CN7B", "ON6", "0.2", "3", "0.0", " "}, {"CN7", "CN7", "CN7", "CN8B", "0.5", "4", "180.0", "lowers 180 deg."}, {"CN7B", "NN2", "CN4", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2", "CN5", "CN5", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2", "CN4", "NN4", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2", "CN4", "NN3A", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2", "CN5", "1.1", "1", "180.0", " "}, {"ON6", "CN7B", "NN2", "CN4", "1.1", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2", "CN5", "1.1", "1", "180.0", " "}, {"ON6B", "CN7B", "NN2", "CN4", "1.1", "1", "0.0", " "}, {"CN8", "CN7B", "NN2", "CN5", "0.3", "3", "0.0", "NF"}, {"CN8", "CN7B", "NN2", "CN4", "0.0", "3", "180.0", "NF"}, {"CN7B", "CN7B", "NN2", "CN5", "0.3", "3", "0.0", "NF"}, {"CN7B", "CN7B", "NN2", "CN4", "0.0", "3", "180.0", "NF"}, {"HN7", "CN7B", "NN2", "CN5", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2", "CN4", "0.195", "3", "0.0", "NF"}, {"CN7B", "NN2", "CN3", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2", "CN1", "ON1C", "11.0", "2", "180.0", "adm jr. from A"}, {"CN7B", "NN2", "CN1", "NN3", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2", "CN3", "CN3", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2", "CN1", "0.0", "3", "0.0", " "}, {"ON6", "CN7B", "NN2", "CN3", "1.0", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2", "CN1", "0.0", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2", "CN3", "1.0", "1", "0.0", " "}, {"CN8", "CN7B", "NN2", "CN1", "1.0", "3", "0.0", " "}, {"CN8", "CN7B", "NN2", "CN3", "0.0", "3", "180.0", "NF 030697"}, {"CN7B", "CN7B", "NN2", "CN1", "1.0", "3", "0.0", " "}, {"CN7B", "CN7B", "NN2", "CN3", "0.0", "3", "180.0", " "}, {"HN7", "CN7B", "NN2", "CN1", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2", "CN3", "0.195", "3", "0.0", "NF"}, {"CN7B", "NN2B", "CN3", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2B", "CN1T", "ON1", "11.0", "2", "180.0", "adm jr. from A"}, {"CN7B", "NN2B", "CN1T", "NN2U", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2B", "CN3", "CN3T", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2B", "CN1", "0.0", "3", "0.0", " "}, {"ON6", "CN7B", "NN2B", "CN1T", "0.7", "3", "0.0", " "}, {"ON6", "CN7B", "NN2B", "CN1T", "0.8", "1", "180.0", " "}, {"ON6", "CN7B", "NN2B", "CN3", "0.9", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2B", "CN1", "0.0", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2B", "CN1T", "0.7", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2B", "CN1T", "0.8", "1", "180.0", " "}, {"ON6B", "CN7B", "NN2B", "CN3", "0.9", "1", "0.0", " "}, {"CN8", "CN7B", "NN2B", "CN1T", "0.2", "3", "180.0", " "}, {"CN8", "CN7B", "NN2B", "CN3", "0.0", "3", "180.0", "NF"}, {"CN7B", "CN7B", "NN2B", "CN1T", "0.2", "3", "180.0", " "}, {"CN7B", "CN7B", "NN2B", "CN3", "0.0", "3", "180.0", " "}, {"HN7", "CN7B", "NN2B", "CN1T", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2B", "CN3", "0.195", "3", "0.0", "NF"}, {"CN7B", "NN2B", "CN4", "HN3", "0.3", "2", "180.0", "NF"}, {"CN7B", "NN2B", "CN4", "NN4", "11.0", "2", "180.0", "adm jr."}, {"CN7B", "NN2B", "CN5", "CN5G", "11.0", "2", "180.0", "adm jr. from U"}, {"CN7B", "NN2B", "CN5", "NN3G", "11.0", "2", "180.0", "adm jr."}, {"ON6", "CN7B", "NN2B", "CN5", "0.2", "3", "0.0", " "}, {"ON6", "CN7B", "NN2B", "CN5", "1.1", "1", "180.0", " "}, {"ON6", "CN7B", "NN2B", "CN4", "1.4", "1", "0.0", "NF"}, {"ON6B", "CN7B", "NN2B", "CN5", "0.2", "3", "0.0", " "}, {"ON6B", "CN7B", "NN2B", "CN5", "1.1", "1", "180.0", " "}, {"ON6B", "CN7B", "NN2B", "CN4", "1.4", "1", "0.0", " "}, {"CN8", "CN7B", "NN2B", "CN5", "0.0", "3", "0.0", "NF"}, {"CN8", "CN7B", "NN2B", "CN4", "0.0", "3", "180.0", "NF 030697"}, {"CN7B", "CN7B", "NN2B", "CN5", "0.0", "3", "0.0", "NF"}, {"CN7B", "CN7B", "NN2B", "CN4", "0.0", "3", "180.0", " "}, {"HN7", "CN7B", "NN2B", "CN5", "0.0", "3", "0.0", "NF"}, {"HN7", "CN7B", "NN2B", "CN4", "0.195", "3", "0.0", "NF"}, {"CN7", "ON6", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "ON6", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "ON6B", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "ON6B", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "CN8", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "CN8", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"HN8", "CN8", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"HN8", "CN8", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "CN7B", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"CN7", "CN7B", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"HN7", "CN7B", "CN7B", "NN2", "0.0", "3", "0.0", " "}, {"HN7", "CN7B", "CN7B", "NN2B", "0.0", "3", "0.0", " "}, {"CN7", "CN8B", "ON2", "P", "0.2", "1", "120.0", "C4'-C5'-O5'-P, adm jr."}, {"CN7", "CN8B", "ON2", "P2", "0.2", "1", "120.0", "C4'-C5'-O5'-P, adm jr., adm, 2011 DNA update"}, {"CN7", "CN8B", "ON5", "HN5", "1.3300", "1", "0.00", " "}, {"CN7", "CN8B", "ON5", "HN5", "0.1800", "2", "0.00", " "}, {"CN7", "CN8B", "ON5", "HN5", "0.3200", "3", "0.00", " "}, {"HN8", "CN8B", "ON5", "HN5", "0.0", "3", "0.0", " "}, {"CN7", "CN7", "CN8B", "ON2", "0.20", "4", "180.0", "adm jr."}, {"CN7", "CN7", "CN8B", "ON2", "0.80", "3", "180.0", "C3'-C4'-C5'-O5'"}, {"CN7", "CN7", "CN8B", "ON2", "0.40", "2", "0.0", " "}, {"CN7", "CN7", "CN8B", "ON2", "2.50", "1", "180.0", " "}, {"CN8", "CN7", "CN8B", "ON2", "0.2", "3", "180.0", "from gam, carbocyclic and 25P1"}, {"CN7", "CN7", "CN8B", "ON5", "0.20", "4", "180.0", "adm jr."}, {"CN7", "CN7", "CN8B", "ON5", "0.80", "3", "180.0", "C3'-C4'-C5'-O5'"}, {"CN7", "CN7", "CN8B", "ON5", "0.40", "2", "0.0", " "}, {"CN7", "CN7", "CN8B", "ON5", "2.50", "1", "180.0", " "}, {"ON6", "CN7", "CN8B", "ON2", "3.4", "1", "180.0", "O4'-C4'-C5'-O5',influences +60"}, {"ON6B", "CN7", "CN8B", "ON2", "3.4", "1", "180.0", "RNA"}, {"ON6", "CN7", "CN8B", "ON5", "3.4", "1", "180.0", " "}, {"ON6B", "CN7", "CN8B", "ON5", "3.4", "1", "180.0", "RNA"}, {"HN8", "CN8B", "CN7", "CN7", "0.195", "3", "0.0", " "}, {"HN8", "CN8B", "CN7", "CN8", "0.195", "1", "0.0", "carbocylic, 25P1"}, {"HN8", "CN8B", "CN7", "ON6", "0.195", "1", "0.0", " "}, {"HN8", "CN8B", "CN7", "ON6B", "0.195", "1", "0.0", "RNA"}, {"HN7", "CN7", "CN8B", "ON2", "0.195", "3", "0.0", "H-C4'-C5'-O5'"}, {"HN7", "CN7", "CN8B", "ON5", "0.195", "3", "0.0", " "}, {"HN8", "CN8", "CN8", "ON6", "0.195", "1", "0.0", " "}, {"CN9", "CN7", "CN7", "CN8B", "0.5", "4", "180.0", "-> CN9"}, {"HN7", "CN7", "CN9", "HN9", "0.195", "3", "0.0", "-> CN9"}, {"CN7", "CN7", "CN9", "HN9", "0.195", "3", "0.0", "-> CN9"}, {"ON6", "CN7", "CN9", "HN9", "0.195", "3", "0.0", "-> CN9"}, {"HN7", "CN7", "CN7", "CN9", "0.195", "3", "0.0", "-> CN9"}, {"ON2", "CN7", "CN7", "CN9", "0.2", "4", "0.0", "-> CN9"}, {"ON2", "CN7", "CN7", "CN9", "0.8", "3", "180.0", "-> CN9"}, {"CN8", "CN7", "CN7", "CN9", "0.5", "4", "180.0", "-> CN9"}, {"CN8", "CN7", "CN7", "CN8B", "0.5", "4", "180.0", "lowers 180 deg."}, {"CN7B", "CN7", "CN7", "CN8B", "0.2", "4", "180.0", "RNA"}, {"ON2", "CN7", "CN7", "CN8B", "0.2", "4", "0.0", " "}, {"ON2", "CN7", "CN7", "CN8B", "0.8", "3", "180.0", "P [100,250]"}, {"ON5", "CN7", "CN7", "CN8B", "0.2", "4", "0.0", " "}, {"ON5", "CN7", "CN7", "CN8B", "0.8", "3", "180.0", " "}, {"ON2", "CN7", "CN7", "ON6", "0.5", "6", "0.0", "good for amplitudes"}, {"ON2", "CN7", "CN7", "ON6", "0.3", "5", "0.0", "impact on amplitudes"}, {"ON2", "CN7", "CN7", "ON6", "0.6", "4", "180.0", "increases c2'endo"}, {"ON2", "CN7", "CN7", "ON6", "0.2", "3", "0.0", " "}, {"ON2", "CN7", "CN7", "ON6B", "0.4", "6", "0.0", "RNA, good for amplitudes"}, {"ON2", "CN7", "CN7", "ON6B", "0.0", "5", "0.0", "RNA, impact on amplitudes"}, {"ON2", "CN7", "CN7", "ON6B", "0.0", "4", "180.0", "RNA, increases c2'endo"}, {"ON2", "CN7", "CN7", "ON6B", "1.6", "3", "0.0", "RNA, increases C2'endo"}, {"ON2", "CN7B", "CN7B", "ON6B", "0.4", "6", "0.0", "RNA, good for amplitudes"}, {"ON2", "CN7B", "CN7B", "ON6B", "0.0", "5", "0.0", "RNA, impact on amplitudes"}, {"ON2", "CN7B", "CN7B", "ON6B", "0.0", "4", "180.0", "RNA, increases c2'endo"}, {"ON2", "CN7B", "CN7B", "ON6B", "1.6", "3", "0.0", "RNA, increases C2'endo"}, {"ON5", "CN7", "CN7", "ON6", "0.5", "6", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6", "0.3", "5", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6", "0.6", "4", "180.0", " "}, {"ON5", "CN7", "CN7", "ON6", "0.2", "3", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "0.4", "6", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "0.0", "5", "0.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "0.0", "4", "180.0", " "}, {"ON5", "CN7", "CN7", "ON6B", "1.6", "3", "0.0", "increases c2'endo"}, {"CN7B", "ON6", "CN7", "CN8B", "0.8", "3", "0.0", "P [30,80]"}, {"CN7B", "ON6B", "CN7", "CN8B", "2.0", "3", "0.0", "To lower barrier in RNA"}, {"CN7B", "ON6B", "CN7", "CN9", "2.0", "3", "0.0", "To lower barrier in RNA, 5MET"}, {"ON2", "CN7", "CN8", "CN7B", "0.8", "6", "0.0", " "}, {"ON2", "CN7", "CN8", "CN7B", "0.4", "5", "0.0", "Moves the barrier right"}, {"ON2", "CN7", "CN8", "CN7B", "2.0", "3", "180.0", " "}, {"ON2", "CN7", "CN7B", "CN7B", "0.6", "6", "0.0", "RNA"}, {"ON2", "CN7", "CN7B", "CN7B", "0.0", "5", "0.0", "RNA c2/c3 endo in RNA"}, {"ON2", "CN7", "CN7B", "CN7B", "1.6", "3", "180.0", " "}, {"ON5", "CN7", "CN8", "CN7B", "0.8", "6", "0.0", " "}, {"ON5", "CN7", "CN8", "CN7B", "0.4", "5", "0.0", " "}, {"ON5", "CN7", "CN8", "CN7B", "2.0", "3", "180.0", " "}, {"ON5", "CN7", "CN7B", "CN7B", "0.6", "6", "0.0", "RNA, c2/c3 endo"}, {"ON5", "CN7", "CN7B", "CN7B", "0.0", "5", "0.0", "RNA"}, {"ON5", "CN7", "CN7B", "CN7B", "1.6", "3", "180.0", "RNA"}, {"ON2", "CN7", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"ON5", "CN7", "CN8", "HN8", "0.195", "3", "180.0", " "}, {"ON2", "CN7", "CN7B", "HN7", "0.195", "3", "0.0", "RNA"}, {"ON5", "CN7", "CN7B", "HN7", "0.195", "3", "180.0", "RNA"}, {"HN7", "CN7", "CN7", "ON2", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "ON5", "0.195", "3", "0.0", " "}, {"CN7", "CN7", "ON2", "P2", "0.6", "5", "0.0", "adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "0.2", "4", "0.0", "locat of 200 mimima, adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "0.0", "3", "180.0", "barE beteen minima, adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "0.4", "2", "0.0", "relE of 200 vs 275 min, adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P2", "1.9", "1", "180.0", "adm, 2011 DNA update"}, {"CN7", "CN7", "ON2", "P", "0.6", "5", "0.0", "RNA"}, {"CN7", "CN7", "ON2", "P", "0.2", "4", "0.0", "locat of 200 mimima, RNA"}, {"CN7", "CN7", "ON2", "P", "0.0", "3", "180.0", "barE beteen minima, RNA"}, {"CN7", "CN7", "ON2", "P", "0.4", "2", "0.0", "relE of 200 vs 275 min, RNA"}, {"CN7", "CN7", "ON2", "P", "1.9", "1", "180.0", "RNA"}, {"CN8", "CN7", "ON2", "P", "2.5", "1", "180.0", "3-terminal phosphate"}, {"CN8", "CN7", "ON2", "P2", "1.9", "1", "180.0", "adm, 2011 DNA update new param, eps"}, {"CN7B", "CN7", "ON2", "P", "2.5", "1", "180.0", "RNA"}, {"CN7B", "CN7B", "ON2", "P", "2.5", "1", "180.0", "NADPH and bkbmod"}, {"CN7", "CN7B", "ON2", "P", "2.5", "1", "180.0", "NADPH and bkbmod"}, {"CN7", "CN7", "ON5", "HN5", "0.5", "3", "0.0", " "}, {"CN7", "CN7", "ON5", "HN5", "0.3", "2", "180.0", " "}, {"CN7", "CN7", "ON5", "HN5", "1.5", "1", "0.0", " "}, {"CN8", "CN7", "ON5", "HN5", "0.5", "3", "0.0", " "}, {"CN8", "CN7", "ON5", "HN5", "1.0", "2", "180.0", " "}, {"CN8", "CN7", "ON5", "HN5", "0.3", "1", "0.0", " "}, {"CN7B", "CN7", "ON5", "HN5", "0.8", "3", "0.0", "RNA"}, {"CN7B", "CN7", "ON5", "HN5", "0.5", "1", "0.0", "RNA"}, {"HN7", "CN7", "ON5", "HN5", "0.0", "3", "0.0", " "}, {"HN7", "CN7", "CN8B", "HN8", "0.195", "3", "0.0", "H-C4'-C5'-H"}, {"HN7", "CN7", "CN7", "CN8B", "0.195", "3", "0.0", "H-C3'-C4'-C5'"}, {"CN8", "CN7B", "ON6", "CN7", "0.6", "6", "180.0", " "}, {"CN8", "CN7", "CN7", "ON6", "1.0", "4", "0.0", "adm, 2011 DNA update new param, C2'-C3'-C4'-O4'; lowers c3'endo"}, {"CN8", "CN7", "CN7", "ON6", "0.3", "5", "180.0", "adm, 2011 DNA update new param, C2'-C3'-C4'-O4'; position of minima"}, {"CN8", "CN7", "CN7", "ON6", "0.3", "6", "180.0", "adm, 2011 DNA update new param, C2'-C3'-C4'-O4'; position of minima"}, {"CN7B", "CN7B", "ON6B", "CN7", "0.0", "6", "0.0", "RNA, Lowers barrier"}, {"CN7B", "CN7", "CN7", "ON6B", "0.0", "3", "0.0", "RNA"}, {"CN7", "CN8", "CN7B", "ON6", "0.6", "6", "0.0", "C3'-C2'-C1'-O4', adjust barrier"}, {"CN7", "CN7B", "CN7B", "ON6B", "0.4", "6", "0.0", "RNA"}, {"CN7B", "CN8", "CN7", "CN7", "0.4", "6", "0.0", "good for amplitudes"}, {"CN7B", "CN7B", "CN7", "CN7", "0.0", "6", "0.0", "RNA"}, {"CN7", "CN7", "ON6", "CN7B", "0.6", "6", "180.0", "C3'-C4'-O4'-C1'"}, {"CN7", "CN7", "ON6B", "CN7B", "0.0", "6", "180.0", "RNA"}, {"HN7", "CN7", "CN7", "CN8", "0.0", "3", "0.0", " "}, {"HN7", "CN7", "CN8", "CN7B", "0.195", "3", "0.0", " "}, {"HN7", "CN7B", "CN8", "CN7", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "ON6", "0.195", "3", "180.0", "useful"}, {"HN8", "CN8", "CN7B", "ON6", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "HN7", "0.195", "3", "0.0", " "}, {"HN7", "CN7B", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"HN7", "CN7", "CN8", "HN8", "0.195", "3", "0.0", " "}, {"HN8", "CN8", "CN7", "CN7", "0.195", "3", "0.0", "useful *cccc*"}, {"HN7", "CN7", "ON6", "CN7B", "0.195", "3", "0.0", " "}, {"HN7", "CN7B", "ON6", "CN7", "0.000", "3", "0.0", " "}, {"HN7", "CN7", "CN7", "ON6B", "0.195", "3", "180.0", "RNA"}, {"HN9", "CN9", "CN7", "ON6B", "0.195", "3", "180.0", "RNA, 5MET"}, {"HN8", "CN8", "CN7B", "ON6B", "0.195", "3", "0.0", "RNA"}, {"HN7", "CN7B", "ON6B", "CN7", "0.000", "3", "0.0", "RNA"}, {"HN7", "CN7", "ON6B", "CN7B", "0.195", "3", "0.0", "RNA"}, {"HN7", "CN7", "CN7B", "CN7B", "0.195", "3", "0.0", "RNA, H-C3'-C2'-C1'"}, {"HN7", "CN7B", "CN7B", "CN7", "0.195", "3", "0.0", "RNA, H-C1'-C2'-C3'"}, {"HN7", "CN7B", "CN7B", "ON6B", "0.195", "3", "0.0", "RNA, H-C2'-C1'-O4'"}, {"NN2", "CN7B", "CN7B", "ON5", "0.000", "3", "0.0", "Adenine and cytosine"}, {"NN2B", "CN7B", "CN7B", "ON5", "0.000", "3", "0.0", "Guanine and uracil"}, {"ON5", "CN7B", "CN7B", "HN7", "0.000", "3", "0.0", " "}, {"HN7", "CN7B", "CN7B", "HN7", "0.000", "3", "0.0", " "}, {"CN7", "CN7", "CN7B", "ON5", "0.000", "3", "0.0", " "}, {"ON6B", "CN7B", "CN7B", "ON5", "0.000", "3", "0.0", " "}, {"ON5", "CN7B", "CN7", "ON2", "0.000", "3", "0.0", " "}, {"ON5", "CN7", "CN7B", "ON2", "0.000", "3", "0.0", " "}, {"ON5", "CN7B", "CN7", "ON5", "0.000", "3", "0.0", " "}, {"HN7", "CN7B", "ON5", "HN5", "0.000", "3", "0.0", " "}, {"HN5", "ON5", "CN7B", "CN7B", "0.000", "6", "180.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7B", "0.400", "3", "0.0", "shifts min, ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7B", "0.400", "2", "0.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7B", "0.800", "1", "0.0", "height of right barrier and can shift min, ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7", "0.200", "3", "0.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7", "0.000", "2", "180.0", "ejd, 2010 RNA update"}, {"HN5", "ON5", "CN7B", "CN7", "2.000", "1", "0.0", "height of left side barrier, ejd, 2010 RNA update"}, {"CN7B", "ON6", "CN7", "CN9", "0.0", "3", "0.0", "added for sugar model compounds"}, {"HN7", "CN7", "CN7B", "ON5", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}, {"HN7", "CN7B", "CN7", "CN7", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}, {"HN7", "CN7", "CN7", "CN7B", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}, {"HN7", "CN7", "CN7B", "HN7", "0.195", "3", "0.0", "for nadp/nadph (NOT!), adm jr."}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_na info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_na_impropers[15][8]= {{"HN2", "X", "X", "NN2", "1.0", "0", "0.0", "adm jr. 11/97"}, {"NN2B", "CN4", "CN5", "HN2", "7.0", "0", "0.0", "adm jr. 11/97"}, {"HN1", "X", "X", "NN1", "4.0", "0", "0.0", "adm jr. 11/97"}, {"NN1", "CN2", "HN1", "HN1", "6.0", "0", "0.0", "adm jr. 11/97"}, {"CN1", "X", "X", "ON1", "90.0", "0", "0.0", " "}, {"CN1T", "X", "X", "ON1", "90.0", "0", "0.0", " "}, {"CN1", "NN2G", "CN5G", "ON1", "90.0", "0", "0.0", " "}, {"CN1T", "NN2B", "NN2U", "ON1", "110.0", "0", "0.0", "adm jr. 11/97"}, {"CN1", "NN2U", "CN3T", "ON1", "90.0", "0", "0.0", "adm jr. 11/97"}, {"CN1", "X", "X", "ON1C", "80.0", "0", "0.0", "par_32, adm jr. 10/2/91"}, {"CN2", "X", "X", "NN1", "90.0", "0", "0.0", " "}, {"CN2", "NN3G", "NN2G", "NN1", "40.0", "0", "0.0", " "}, {"CN2", "NN3A", "CN5", "NN1", "40.0", "0", "0.0", " "}, {"CN2", "NN3", "CN3", "NN1", "60.0", "0", "0.0", " "}, {"CN9", "X", "X", "CN3T", "14.0", "0", "0.0", "adm jr. 11/97"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_na info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_na_vdw[42][6]= {{"HN1", "-0.0460", "0.2245", " ", " ", " "}, {"HN2", "-0.0460", "0.2245", " ", " ", " "}, {"HN3", "-0.046", "1.1000", " ", " ", "aromatic Hvdw"}, {"HN4", "-0.0460", "0.2245", " ", " ", " "}, {"HN5", "-0.0460", "0.2245", " ", " ", " "}, {"HN6", "-0.0220", "1.3200", " ", " ", " "}, {"HN7", "-0.0220", "1.3200", " ", " ", " "}, {"HN8", "-0.0280", "1.3400", " ", " ", "bound to CN8"}, {"HN9", "-0.0240", "1.3400", " ", " ", "bound to CN9"}, {"NN1", "-0.20", "1.85", " ", " ", " "}, {"NN2", "-0.20", "1.85", " ", " ", " "}, {"NN2B", "-0.20", "1.85", " ", " ", "NN2, for N9 in guanines"}, {"NN2G", "-0.20", "1.85", " ", " ", " "}, {"NN2U", "-0.20", "1.85", " ", " ", " "}, {"NN3", "-0.20", "1.85", " ", " ", " "}, {"NN3A", "-0.20", "1.85", " ", " ", " "}, {"NN3G", "-0.20", "1.85", " ", " ", " "}, {"NN4", "-0.20", "1.85", " ", " ", " "}, {"NN6", "-0.20", "1.85", " ", " ", " "}, {"ON1", "-0.1200", "1.70", " ", " ", " "}, {"ON1C", "-0.1200", "1.70", " ", " ", " "}, {"ON2", "-0.1521", "1.77", " ", " ", " "}, {"ON3", "-0.1200", "1.70", " ", " ", " "}, {"ON4", "-0.1521", "1.77", " ", " ", " "}, {"ON5", "-0.1521", "1.77", " ", " ", " "}, {"ON6", "-0.1521", "1.77", " ", " ", " "}, {"ON6B", "-0.1521", "1.77", " ", " ", " "}, {"CN1", "-0.10", "1.9000", " ", " ", " "}, {"CN1T", "-0.10", "1.9000", " ", " ", " "}, {"CN2", "-0.10", "1.9000", " ", " ", " "}, {"CN3", "-0.09", "1.9000", " ", " ", " "}, {"CN3T", "-0.09", "1.9000", " ", " ", "adm jr."}, {"CN4", "-0.075", "1.9000", " ", " ", " "}, {"CN5", "-0.075", "1.9000", " ", " ", " "}, {"CN5G", "-0.075", "1.9000", " ", " ", " "}, {"CN7", "-0.02", "2.275", "-0.01", "1.90", "to protein CT1"}, {"CN7B", "-0.02", "2.275", "-0.01", "1.90", "to protein CT1"}, {"CN8", "-0.0560", "2.010", "-0.01", "1.90", " "}, {"CN8B", "-0.0560", "2.010", "-0.01", "1.90", " "}, {"CN9", "-0.0780", "2.040", "-0.01", "1.90", " "}, {"P", "-0.585", "2.15", " ", " ", " "}, {"P2", "-0.585", "2.15", " ", " ", " "}}; Atomes-GNU-1.1.14/src/calc/force_fields/charmm36_prot.c000066400000000000000000004741571457665371200224640ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file charmm36_prot.c * @short CHARMM-charmm36_prot force field, from 'charmm36_prot' * @author Sébastien Le Roux */ /* * This file: 'charmm36_prot.c' * * Contains: * CHARMM-charmm36_prot force field, data from taken from: - the file: 'charmm36_prot' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36_prot_atoms[53][5] Bonds : charmm36_prot_bonds[132][5] Angles : charmm36_prot_angles[364][8] Dihedrals : charmm36_prot_dihedrals[705][8] Impropers : charmm36_prot_impropers[35][8] Non bonded : charmm36_prot_vdw[53][6] */ #include "global.h" int charmm36_prot_objects[14] = {53, 0, 0, 132, 0, 0, 364, 0, 705, 0 , 0, 35, 53, 0}; int charmm36_prot_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36_prot info */ char * charmm36_prot_atoms[53][5]= {{"H", "1.00800", "H", "polar H", "31"}, {"H", "1.00800", "HC", "N-ter H", "32"}, {"H", "1.00800", "HA", "nonpolar H", "33"}, {"H", "1.00800", "HP", "aromatic H", "34"}, {"H", "1.00800", "HB1", "backbone H", "35"}, {"H", "1.00800", "HB2", "aliphatic backbone H, to CT2", "36"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "37"}, {"H", "1.00800", "HR2", "(+) his HE1", "38"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "39"}, {"H", "1.00800", "HS", "thiol hydrogen", "40"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "41"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "42"}, {"H", "1.00800", "HA1", "alkane, CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "43"}, {"H", "1.00800", "HA2", "alkane, CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "44"}, {"H", "1.00800", "HA3", "alkane, CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "45"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "46"}, {"C", "12.01100", "CA", "aromatic C", "47"}, {"C", "12.01100", "CT", "aliphatic sp3 C, new LJ params, no hydrogens, see retinol stream file for parameters", "48"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "49"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "50"}, {"C", "12.01100", "CT2A", "from CT2 (GLU, HSP chi1/chi2 fitting) 05282010, zhu", "51"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "52"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "53"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "54"}, {"C", "12.01100", "CPT", "trp C between rings", "55"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "56"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "57"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "58"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "59"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "60"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "61"}, {"C", "12.01100", "CS", "thiolate carbon", "62"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "63"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "64"}, {"C", "12.01100", "CAI", "aromatic C next to CPT in trp", "65"}, {"N", "14.00700", "N", "proline N", "66"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "67"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "68"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "69"}, {"N", "14.00700", "NH1", "peptide nitrogen", "70"}, {"N", "14.00700", "NH2", "amide nitrogen", "71"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "72"}, {"N", "14.00700", "NC2", "guanidinium nitrogen", "73"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "74"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "75"}, {"O", "15.99900", "O", "carbonyl oxygen", "76"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "77"}, {"O", "15.99900", "OC", "carboxylate oxygen", "78"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "79"}, {"O", "15.99940", "OS", "ester oxygen", "80"}, {"S", "32.06000", "S", "sulphur", "81"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "82"}, {"S", "32.06000", "SS", "thiolate sulfur", "83"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36_prot info V(R) = Kb x (R - R0)^2 */ char * charmm36_prot_bonds[132][5]= {{"NH2", "CT1", "240.000", "1.4550", " "}, {"CA", "CAI", "305.000", "1.3750", "from CA CA"}, {"CAI", "CAI", "305.000", "1.3750", "atm, methylindole, fit CCDSS"}, {"CPT", "CA", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CAI", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CPT", "360.000", "1.3850", "atm, methylindole, fit CCDSS"}, {"CY", "CA", "350.000", "1.3650", "trj, adm jr., 5/08/91, indole CCDB structure search"}, {"CY", "CAI", "350.000", "1.3650", "from CY CA"}, {"CY", "CPT", "350.000", "1.4300", "atm, methylindole, fit CDS data"}, {"CY", "CT3", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"CY", "CT2", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"HP", "CAI", "340.000", "1.0800", "from HP CA"}, {"HP", "CY", "350.000", "1.0800", "trp, adm jr., 12/30/91"}, {"NY", "CA", "270.000", "1.3700", "trp, adm jr., 12/30/91"}, {"NY", "CPT", "270.000", "1.3700", "atm, methylindole, from CCDS 1/17/04"}, {"NY", "H", "537.500", "0.9760", "atm, methylindole, 1/17/04"}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA2", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB1", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "450.000", "1.3650", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT2", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT3", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HR1", "CD", "330.000", "1.1100", "acetaldehyde, benzaldehyde, 3ALP"}, {"O", "CD", "720.000", "1.2050", "acetaldehyde, benzaldehyde, 3ALP. from stream/toppar_all27_na_bkb_modifications.str"}, {"CT2A", "CT1", "222.500", "1.5380", "from CT2 CT1, Zhu"}, {"CT2", "CT2A", "222.500", "1.5300", "from CT2 CT2, Zhu"}, {"CT2A", "HA2", "309.000", "1.1110", "from HA2 CT2, Zhu"}, {"CT2A", "CPH1", "229.630", "1.5000", "from CT2 CPH1, Zhu"}, {"CT2A", "CC", "200.000", "1.5220", "RESI CYSM and PRES CYSD"}, {"CT1", "CS", "190.000", "1.5380", " "}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36_prot info V(S) = Kub x (S - S0)^2 */ char * charmm36_prot_angles[364][8]= {{"H", "NH2", "CT1", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2"}, {"H", "NH2", "CT2", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2, Neutral Gly Nterminus"}, {"NH2", "CT1", "CT1", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT2", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT3", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"CT1", "CD", "OH1", "55.000", "110.50", " ", " ", "From ASPP CT2-CD-OH1"}, {"CT3", "CT1", "CD", "52.000", "108.00", " ", " ", "Ala cter"}, {"NH2", "CT1", "HB1", "38.000", "109.50", "50.00", "2.1400", "From LSN NH2-CT2-HA"}, {"NH2", "CT1", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C"}, {"NH2", "CT2", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C, Neutral Gly Nterminus"}, {"CAI", "CAI", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CAI", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CPT", "CA", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CA", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CAI", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CY", "CA", "85.000", "106.40", "25.00", "2.26100", "atm, methylindole, 1/17/04"}, {"CPT", "NY", "CA", "85.000", "112.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CT2", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT2", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT3", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "85.000", "108.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CT2", "CT1", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"H", "NY", "CA", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CAI", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CPT", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"HA2", "CT2", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CAI", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CAI", "CA", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "trp, adm jr., 12/30/91"}, {"HP", "CAI", "CPT", "30.000", "122.00", "22.00", "2.14600", "from HP CA CPT"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "trp, adm jr., 12/30/91"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "CY", "85.000", "110.50", "25.00", "2.24000", "trp, adm jr., 12/30/91"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CPT", "95.000", "107.40", " ", " ", "atm, methylindole, 1/17/04"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 6/27/2012, for Thr with CT1 patch"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2A", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2A", "CT2", "CD", "52.000", "108.0000", " ", " ", "for GLUP, ZHU"}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA2", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA2", "CS", "HA2", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "HA3", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA1", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "HA1", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA2", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA2", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA2", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA2", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA2", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA2", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA2", "CT2", "CT1", "26.500", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA2", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "HA2", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA3", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA3", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA3", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA3", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA3", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA3", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA3", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "HA3", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB1", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB1", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB1", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB2", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB2", "CT2", "HB2", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB1", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA2", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "40.000", "120.00", "70.00", "2.31", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA2", "56.500", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT3", "HA3", "56.5000", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB1", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA2", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB2", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA3", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA1", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HB2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT2", "HA2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT3", "HA3", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB1", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "methylammonium"}, {"NH3", "CT2", "CT3", "67.700", "110.0000", " ", " ", "ethylammonium"}, {"NH3", "CT2", "HA2", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB2", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA3", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB1", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA2", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA1", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA2", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA3", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA1", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA2", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA3", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA2", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA3", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA2", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA3", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT3", "58.000", "112.5000", " ", " ", "diethyldisulfide, as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA2", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA3", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA2", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA3", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"O", "CD", "HR1", "75.000", "121.0000", " ", " ", "acetaldehyde, benzaldehyde, 3ALP, retinal"}, {"NH1", "CT1", "CT2A", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2"}, {"HB1", "CT1", "CT2A", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2"}, {"CT2A", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C"}, {"CT1", "CT2A", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT1"}, {"CT1", "CT2A", "CT2", "58.350", "113.5000", "11.16", "2.56100", "from CT2 CT2 CT1"}, {"HA2", "CT2A", "HA2", "35.500", "109.0000", "5.40", "1.80200", "from HA2 CT2 HA2"}, {"HA2", "CT2A", "CT2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT2 CC"}, {"CT1", "CT2A", "CPH1", "58.350", "113.0000", " ", " ", "from CT1 CT2 CPH1"}, {"HA2", "CT2A", "CPH1", "33.430", "109.5000", " ", " ", "from HA2 CT2 CPH1"}, {"CT2A", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "from CT2 CPH1 CPH1"}, {"CT2A", "CPH1", "NR3", "45.800", "122.0000", " ", " ", "from NR3 CPH1 CT2"}, {"CT1", "CT2A", "CC", "52.000", "108.0000", " ", " ", "from CT1 CT2 CC"}, {"HA2", "CT2A", "CC", "33.000", "109.5000", "30.00", "2.16300", "from HA2 CT2 CC"}, {"OC", "CC", "CT2A", "40.000", "118.0000", "50.00", "2.38800", "from OC CC CT2"}, {"NH3", "CT1", "CT2A", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2"}, {"CT2A", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD"}, {"NH2", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C , kevo"}, {"CS", "CT1", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT1 CC , kevo"}, {"CS", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD , kevo"}, {"HB1", "CT1", "CS", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2 , kevo"}, {"NH1", "CT1", "CS", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2 , kevo"}, {"NH3", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2 , kevo"}, {"SS", "CS", "CT1", "55.000", "118.0000", " ", " ", "from SS CS CT3 , kevo"}, {"HA2", "CS", "CT1", "34.600", "110.10", "22.53", "2.17900", "from HA2 CS CT3 to be consistent with SS CS CT1, kevo"}, {"OC", "CT2", "CT1", "65.000", "122.0000", " ", " ", " "}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36_prot info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36_prot_dihedrals[705][8]= {{"NH2", "CT1", "C", "O", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "O", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"NH2", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "NH1", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "C", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT2", "C", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "HB1", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA"}, {"H", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA, Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"H", "NH2", "CT1", "CT3", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"CAI", "CA", "CA", "CAI", "3.1000", "2", "180.00", "from CA CA CA CA"}, {"CA", "CPT", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CAI", "CPT", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CA", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "NY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "NY", "CA", "6.5000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CT2", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CY", "CA", "NY", "CPT", "6.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CA", "CY", "0.0500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CA", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CAI", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CPT", "0.8500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CAI", "CA", "CA", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CA", "CAI", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CAI", "CPT", "3.0000", "2", "180.00", "from HP CA CA CPT"}, {"HP", "CAI", "CA", "HP", "2.4000", "2", "180.00", "from HP CA CA HP"}, {"HP", "CAI", "CPT", "CPT", "3.0000", "2", "180.00", "from HP CA CPT CPT"}, {"HP", "CAI", "CPT", "CY", "4.0000", "2", "180.00", "from HP CA CPT CY, r6r5"}, {"HP", "CA", "CY", "CPT", "2.8000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "NY", "CPT", "2.6000", "2", "180.00", "adm jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CAI", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.6000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CPT", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CA", "CY", "CT3", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "CT2", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04, r6r5"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CPT", "CY", "6.5000", "2", "180.00", "JWK 05/14/91 fit to indole, r5 t1"}, {"CT3", "CT2", "CY", "CA", "0.3800", "2", "0.00", "trp, from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "atm 1/14/04 3-ethylindole"}, {"CT3", "CT2", "CY", "CPT", "0.3000", "3", "0.00", "atm 1/14/04 3-ethylindole"}, {"HA3", "CT3", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"X", "CS", "SS", "X", "0.0000", "3", "0.20", "methanethiol, HS S CT3 HA"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CE1", "CE1", "CT3", "HA3", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA2", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA3", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA1", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA1", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA2", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA2", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA3", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA3", "CT3", "CS", "HA2", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CS", "HA3", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA3", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA2", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA3", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HB1", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA2", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA3", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA2", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA3", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "1.0000", "1", "0.00", "RB 1/07/11, based on graf et al Gly 3 N-ter J-couplings for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA3", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB1", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT3", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA2", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA3", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA3", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1525", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"NH1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "CT3", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HA1", "CT1", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"NH1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "OH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "OH1", "H", "0.1400", "3", "0.00", "From X CT2 OH1 X"}, {"CT1", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "CC", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2", "S", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"CT2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "NC2", "C", "NC2", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HA2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"NC2", "C", "NC2", "HC", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HB1", "CT1", "CT2", "CC", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT2", "CY", "0.2000", "3", "0.00", " "}, {"HA2", "CT2", "CC", "OC", "0.0500", "6", "180.00", " "}, {"HB1", "CT1", "CT2", "CPH1", "0.2000", "3", "0.00", " "}, {"CT1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"CT1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT1", "CT2", "0.2000", "3", "0.00", " "}, {"CT1", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", " "}, {"HA1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"HA1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", " "}, {"HA1", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", " "}, {"CT3", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", " "}, {"CT3", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", " "}, {"HA3", "CT3", "CT1", "CT2", "0.2000", "3", "0.00", " "}, {"HA2", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", " "}, {"CT1", "CT2", "CT1", "HA1", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT2", "CT1", "0.2000", "3", "0.00", " "}, {"CT3", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"CT2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", " "}, {"CT2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", " "}, {"HA2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", " "}, {"HA2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", " "}, {"HB1", "CT1", "CT2", "CA", "0.2000", "3", "0.00", " "}, {"HA2", "CT2", "CA", "CA", "0.0000", "6", "0.00", " "}, {"HB1", "CT1", "CT1", "OH1", "0.2000", "3", "0.00", " "}, {"HA1", "CT1", "OH1", "H", "0.1400", "3", "0.00", " "}, {"OH1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", " "}, {"CT2", "CT2", "CC", "O", "0.0500", "6", "180.00", " "}, {"CT2", "CT2", "CC", "NH2", "0.0500", "6", "180.00", " "}, {"CT2", "CT2", "CC", "OC", "0.0500", "6", "180.00", " "}, {"NH1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"NH3", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", " "}, {"CT1", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", " "}, {"HB1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"HB1", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "C", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", " "}, {"HA2", "CT2A", "CT2", "CC", "0.1900", "3", "0.00", " "}, {"HB1", "CT1", "CT2A", "CPH1", "0.2000", "3", "0.00", " "}, {"C", "NH1", "CT1", "CT2A", "1.8000", "1", "0.00", " "}, {"H", "NH1", "CT1", "CT2A", "0.0000", "1", "0.00", " "}, {"CT2A", "CT1", "C", "O", "1.4000", "1", "0.00", " "}, {"CT2A", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"CT2A", "CT1", "C", "N", "0.0000", "1", "0.00", "Glup"}, {"CT1", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", " "}, {"HA2", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", " "}, {"CT2A", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", " "}, {"CT2A", "CPH1", "CPH1", "NR3", "2.5000", "2", "180.00", " "}, {"CT2A", "CPH1", "NR3", "H", "3.0000", "2", "180.00", " "}, {"CT2A", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", " "}, {"HA2", "CT2A", "CPH1", "CPH1", "0.0000", "3", "0.00", " "}, {"HA2", "CT2A", "CPH1", "NR3", "0.1900", "3", "0.00", "Fit dihedrals"}, {"C", "CT1", "CT2", "CT2", "0.3500", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "0.4200", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "1.9100", "3", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.8800", "1", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "1.9000", "3", "0.00", " "}, {"CC", "CT2", "CT2", "CT1", "1.8400", "1", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.8400", "2", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.6300", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.0100", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.1500", "3", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.1400", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "S", "0.5400", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.6900", "3", "0.00", "Fitted Asn"}, {"C", "CT1", "CT2", "CC", "1.4100", "1", "180.00", " "}, {"C", "CT1", "CT2", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.2800", "1", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.5000", "2", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6600", "2", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.4200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.1500", "2", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.9500", "3", "180.00", "Fitted Asp"}, {"C", "CT1", "CT2A", "CC", "1.6100", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.6800", "1", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.1000", "2", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.8400", "1", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.9800", "2", "180.00", " "}, {"CT1", "CT2A", "CC", "OC", "1.4600", "3", "0.00", "Fitted Cys"}, {"CT1", "CT2", "S", "HS", "0.2000", "1", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.6500", "2", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.2200", "3", "0.00", " "}, {"C", "CT1", "CT2", "S", "0.2400", "1", "180.00", " "}, {"C", "CT1", "CT2", "S", "0.7500", "2", "180.00", " "}, {"C", "CT1", "CT2", "S", "1.3500", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "0.3400", "1", "0.00", " "}, {"NH1", "CT1", "CT2", "S", "0.5000", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "1.4300", "3", "0.00", "Fitted Glu"}, {"CC", "CT2", "CT2A", "CT1", "0.0000", "1", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.3800", "2", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.5900", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.1100", "1", "0.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.9800", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CC", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3000", "1", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3500", "2", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "1.7600", "3", "0.00", "Group-fitted for Hsd/Hse"}, {"CPH1", "CPH1", "CT2", "CT1", "1.7400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.1500", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.7700", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "1.4900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.0900", "2", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.7900", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "1.0900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.0900", "2", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.6700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.1800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.6400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.8700", "3", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "1", "0.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.9000", "3", "0.00", "Fitted Hsp"}, {"CPH1", "CPH1", "CT2A", "CT1", "2.0400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.4400", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.1300", "3", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.5300", "1", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.4200", "2", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.3000", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.7500", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "0.1300", "2", "0.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.8600", "3", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "1.0900", "1", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "0.2200", "2", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "2.3200", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "CT2", "CT3", "0.3800", "1", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.1300", "2", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.2900", "3", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.1000", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.5200", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.2900", "3", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.1200", "1", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.3600", "2", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.4100", "3", "0.00", "Fitted Leu"}, {"CT1", "CT2", "CT1", "CT3", "0.0500", "1", "0.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.1000", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.0100", "3", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.3200", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.6100", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4800", "1", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4200", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.6500", "3", "0.00", "Group-fitted for Phe/Tyr"}, {"CA", "CA", "CT2", "CT1", "1.0700", "1", "0.00", " "}, {"CA", "CA", "CT2", "CT1", "0.2400", "2", "180.00", " "}, {"CA", "CA", "CT2", "CT1", "0.1700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.2800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CA", "0.9400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.5700", "3", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.5200", "1", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.6200", "2", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "1.5800", "3", "0.00", "Fitted Ser"}, {"CT1", "CT2", "OH1", "H", "0.0200", "1", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.5600", "2", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.4900", "3", "0.00", " "}, {"C", "CT1", "CT2", "OH1", "0.6500", "1", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "0.2500", "2", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "1.1700", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1800", "1", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "1.4600", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "OH1", "H", "0.1800", "1", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.0600", "2", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.2500", "3", "0.00", " "}, {"C", "CT1", "CT1", "OH1", "0.7900", "1", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.3900", "2", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.9900", "3", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.0900", "1", "0.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1700", "3", "0.00", "Fitted Trp"}, {"CA", "CY", "CT2", "CT1", "0.0300", "1", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.5500", "2", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.3600", "1", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.0500", "2", "0.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.1900", "3", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.0900", "1", "180.00", " "}, {"C", "CT1", "CT2", "CY", "0.5000", "2", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.1700", "3", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.2900", "1", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.6600", "2", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "1.1700", "3", "0.00", "Fitted Val"}, {"C", "CT1", "CT1", "CT3", "0.1400", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.2600", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.3300", "3", "180.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.1800", "1", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.0600", "2", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.5900", "3", "0.00", "CT2->CT2A, jshim"}, {"H", "NH1", "CT2A", "CC", "0.0000", "1", "0.00", " "}, {"X", "CT2A", "CC", "X", "0.0500", "6", "180.00", " "}, {"HB1", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CC", "OC", "0.0500", "6", "180.00", " "}, {"NH3", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"NH3", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"CC", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", "specific terms"}, {"CPH1", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "NH3", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"CT2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", "RESI CYSM and PRES CYSD"}, {"H", "NH2", "CT1", "CS", "0.1100", "3", "0.00", "from H NH2 CT1 CT2 or H NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C or CT2A CT1 NH1 C , kevo"}, {"H", "NH1", "CT1", "CS", "0.0000", "1", "0.00", "from H NH1 CT1 CT2 or H NH1 CT1 CT2 , kevo"}, {"N", "C", "CT1", "CS", "0.0000", "1", "0.00", "from N C CT1 CT2 or N C CT1 CT2 , kevo"}, {"NH1", "C", "CT1", "CS", "0.0000", "1", "0.00", "from NH1 C CT1 CT2 or NH1 C CT1 CT2 , kevo"}, {"O", "C", "CT1", "CS", "1.4000", "1", "0.00", "from O C CT1 CT2 or O C CT1 CT2 , kevo"}, {"HA2", "CS", "CT1", "C", "0.2000", "3", "0.00", "from HA2 CT2 CT1 C or HA2 CT2A CT1 C , kevo"}, {"NH1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from NH1 CT1 CT2 HA2 or NH1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from HB1 CT1 CT2 HA2 or HB1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from HB1 CT1 CT2 S or HB1 CT1 CT2A S , kevo"}, {"C", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"C", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"HB1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36_prot info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36_prot_impropers[35][8]= {{"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "45.0000", "0", "0.0000", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"C", "HC", "HC", "NC2", "0.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NC2", "X", "X", "HC", "-2.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA1", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36_prot info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36_prot_vdw[53][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CPT", "-0.099000", "1.860000", " ", " ", " "}, {"CY", "-0.073000", "1.990000", " ", " ", " "}, {"CAI", "-0.073000", "1.990000", " ", " ", " "}, {"CT", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT1", "-0.0320", "2.000", "-0.01", "1.9", " "}, {"CT2", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT2A", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT3", "-0.0780", "2.040", "-0.01", "1.9", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HB1", "-0.022000", "1.320000", " ", " ", " "}, {"HB2", "-0.028000", "1.340000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"HA1", "-0.045", "1.3400", " ", " ", " "}, {"HA2", "-0.034", "1.3400", " ", " ", " "}, {"HA3", "-0.024", "1.3400", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}}; Atomes-GNU-1.1.14/src/calc/force_fields/charmm36_prot_metals.c000066400000000000000000004761511457665371200240250ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file charmm36_prot_metals.c * @short CHARMM-charmm36m_prot force field, from 'charmm36m_prot' * @author Sébastien Le Roux */ /* * This file: 'charmm36_prot_metals.c' * * Contains: * CHARMM-charmm36m_prot force field, data from taken from: - the file: 'charmm36m_prot' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm36m_prot_atoms[53][5] Bonds : charmm36m_prot_bonds[132][5] Angles : charmm36m_prot_angles[364][8] Dihedrals : charmm36m_prot_dihedrals[706][8] Impropers : charmm36m_prot_impropers[35][8] Non bonded : charmm36m_prot_vdw[53][6] */ #include "global.h" int charmm36m_prot_objects[14] = {53, 0, 0, 132, 0, 0, 364, 0, 706, 0 , 0, 35, 53, 0}; int charmm36m_prot_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 8, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm36m_prot info */ char * charmm36m_prot_atoms[53][5]= {{"H", "1.00800", "H", "polar H", "31"}, {"H", "1.00800", "HC", "N-ter H", "32"}, {"H", "1.00800", "HA", "nonpolar H", "33"}, {"H", "1.00800", "HP", "aromatic H", "34"}, {"H", "1.00800", "HB1", "backbone H", "35"}, {"H", "1.00800", "HB2", "aliphatic backbone H, to CT2", "36"}, {"H", "1.00800", "HR1", "his he1, (+) his HG,HD2", "37"}, {"H", "1.00800", "HR2", "(+) his HE1", "38"}, {"H", "1.00800", "HR3", "neutral his HG, HD2", "39"}, {"H", "1.00800", "HS", "thiol hydrogen", "40"}, {"H", "1.00800", "HE1", "for alkene; RHC=CR", "41"}, {"H", "1.00800", "HE2", "for alkene; H2C=CR", "42"}, {"H", "1.00800", "HA1", "alkane, CH, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "43"}, {"H", "1.00800", "HA2", "alkane, CH2, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "44"}, {"H", "1.00800", "HA3", "alkane, CH3, new LJ params (see toppar_all22_prot_aliphatic_c27.str)", "45"}, {"C", "12.01100", "C", "carbonyl C, peptide backbone", "46"}, {"C", "12.01100", "CA", "aromatic C", "47"}, {"C", "12.01100", "CT", "aliphatic sp3 C, new LJ params, no hydrogens, see retinol stream file for parameters", "48"}, {"C", "12.01100", "CT1", "aliphatic sp3 C for CH", "49"}, {"C", "12.01100", "CT2", "aliphatic sp3 C for CH2", "50"}, {"C", "12.01100", "CT2A", "from CT2 (GLU, HSP chi1/chi2 fitting) 05282010, zhu", "51"}, {"C", "12.01100", "CT3", "aliphatic sp3 C for CH3", "52"}, {"C", "12.01100", "CPH1", "his CG and CD2 carbons", "53"}, {"C", "12.01100", "CPH2", "his CE1 carbon", "54"}, {"C", "12.01100", "CPT", "trp C between rings", "55"}, {"C", "12.01100", "CY", "TRP C in pyrrole ring", "56"}, {"C", "12.01100", "CP1", "tetrahedral C (proline CA)", "57"}, {"C", "12.01100", "CP2", "tetrahedral C (proline CB/CG)", "58"}, {"C", "12.01100", "CP3", "tetrahedral C (proline CD)", "59"}, {"C", "12.01100", "CC", "carbonyl C, asn,asp,gln,glu,cter,ct2", "60"}, {"C", "12.01100", "CD", "carbonyl C, pres aspp,glup,ct1", "61"}, {"C", "12.01100", "CS", "thiolate carbon", "62"}, {"C", "12.01100", "CE1", "for alkene; RHC=CR", "63"}, {"C", "12.01100", "CE2", "for alkene; H2C=CR", "64"}, {"C", "12.01100", "CAI", "aromatic C next to CPT in trp", "65"}, {"N", "14.00700", "N", "proline N", "66"}, {"N", "14.00700", "NR1", "neutral his protonated ring nitrogen", "67"}, {"N", "14.00700", "NR2", "neutral his unprotonated ring nitrogen", "68"}, {"N", "14.00700", "NR3", "charged his ring nitrogen", "69"}, {"N", "14.00700", "NH1", "peptide nitrogen", "70"}, {"N", "14.00700", "NH2", "amide nitrogen", "71"}, {"N", "14.00700", "NH3", "ammonium nitrogen", "72"}, {"N", "14.00700", "NC2", "guanidinium nitrogen", "73"}, {"N", "14.00700", "NY", "TRP N in pyrrole ring", "74"}, {"N", "14.00700", "NP", "Proline ring NH2+ (N-terminal)", "75"}, {"O", "15.99900", "O", "carbonyl oxygen", "76"}, {"O", "15.99900", "OB", "carbonyl oxygen in acetic acid", "77"}, {"O", "15.99900", "OC", "carboxylate oxygen", "78"}, {"O", "15.99900", "OH1", "hydroxyl oxygen", "79"}, {"O", "15.99940", "OS", "ester oxygen", "80"}, {"S", "32.06000", "S", "sulphur", "81"}, {"S", "32.06000", "SM", "sulfur C-S-S-C type", "82"}, {"S", "32.06000", "SS", "thiolate sulfur", "83"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm36m_prot info V(R) = Kb x (R - R0)^2 */ char * charmm36m_prot_bonds[132][5]= {{"NH2", "CT1", "240.000", "1.4550", " "}, {"CA", "CAI", "305.000", "1.3750", "from CA CA"}, {"CAI", "CAI", "305.000", "1.3750", "atm, methylindole, fit CCDSS"}, {"CPT", "CA", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CAI", "300.000", "1.3600", "atm, methylindole, fit CCDSS"}, {"CPT", "CPT", "360.000", "1.3850", "atm, methylindole, fit CCDSS"}, {"CY", "CA", "350.000", "1.3650", "trj, adm jr., 5/08/91, indole CCDB structure search"}, {"CY", "CAI", "350.000", "1.3650", "from CY CA"}, {"CY", "CPT", "350.000", "1.4300", "atm, methylindole, fit CDS data"}, {"CY", "CT3", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"CY", "CT2", "375.000", "1.4920", "atm, methylindole, fit CDS data"}, {"HP", "CAI", "340.000", "1.0800", "from HP CA"}, {"HP", "CY", "350.000", "1.0800", "trp, adm jr., 12/30/91"}, {"NY", "CA", "270.000", "1.3700", "trp, adm jr., 12/30/91"}, {"NY", "CPT", "270.000", "1.3700", "atm, methylindole, from CCDS 1/17/04"}, {"NY", "H", "537.500", "0.9760", "atm, methylindole, 1/17/04"}, {"CA", "CA", "305.000", "1.3750", "benzene, JES 8/25/89"}, {"CE1", "CE1", "440.000", "1.3400", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CE2", "500.000", "1.3420", "for propene, yin/adm jr., 12/95"}, {"CE1", "CT2", "365.000", "1.5020", "for butene; from propene, yin/adm jr., 12/95"}, {"CE1", "CT3", "383.000", "1.5040", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE2", "510.000", "1.3300", "for ethene, yin/adm jr., 12/95"}, {"CP1", "C", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CC", "250.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "CD", "200.000", "1.4900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "222.500", "1.5270", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "222.500", "1.5370", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH1", "CPH1", "410.000", "1.3600", "histidine, adm jr., 6/27/90"}, {"CT1", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT1", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT1", "222.500", "1.5000", "alkane update, adm jr., 3/2/92"}, {"CT2", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT2", "CA", "230.000", "1.4900", "phe,tyr, JES 8/25/89"}, {"CT2", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT2", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"CT3", "C", "250.000", "1.4900", "Ala Dipeptide ab initio calc's (LK) fixed from 10/90 (5/91)"}, {"CT3", "CA", "230.000", "1.4900", "toluene, adm jr. 3/7/92"}, {"CT3", "CC", "200.000", "1.5220", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CD", "200.000", "1.5220", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CPH1", "229.630", "1.5000", "his, adm jr., 7/22/89, FC from CT2CT, BL from crystals"}, {"CT3", "CS", "190.000", "1.5310", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"CT3", "CT1", "222.500", "1.5380", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "222.500", "1.5280", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT3", "222.500", "1.5300", "alkane update, adm jr., 3/2/92"}, {"H", "CD", "330.000", "1.1100", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CC", "317.130", "1.1000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"HA2", "CP2", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "309.000", "1.1110", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "300.000", "1.1110", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "309.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "322.000", "1.1110", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "360.500", "1.1000", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "365.000", "1.1000", "for ethene, yin/adm jr., 12/95"}, {"HB1", "CP1", "330.000", "1.0800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "330.000", "1.0800", "Alanine Dipeptide ab initio calc's (LK)"}, {"HP", "CA", "340.000", "1.0800", "phe,tyr JES 8/25/89"}, {"HR1", "CPH1", "375.000", "1.0830", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "340.000", "1.0900", "his, adm jr., 6/28/29"}, {"HR2", "CPH2", "333.000", "1.0700", "his, adm jr., 6/27/90"}, {"HR3", "CPH1", "365.000", "1.0830", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "260.000", "1.3000", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "320.000", "1.4340", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "320.000", "1.4550", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "450.000", "1.3650", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT2", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "CT3", "390.000", "1.4900", "mp2/6-311g** mgua vib. data, adm jr., 1/04"}, {"NC2", "HC", "455.000", "1.0000", "405.0->455.0 GUANIDINIUM (KK)"}, {"NH1", "C", "370.000", "1.3450", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT2", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "CT3", "320.000", "1.4300", "NMA Gas and Liquid Phase IR Spectra (LK)"}, {"NH1", "H", "440.000", "0.9970", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "HC", "405.000", "0.9800", "(DS)"}, {"NH2", "CC", "430.000", "1.3600", "adm jr. 4/10/91, acetamide"}, {"NH2", "CT2", "240.000", "1.4550", "from NH2 CT3, neutral glycine, adm jr."}, {"NH2", "CT3", "240.000", "1.4550", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH2", "H", "480.000", "1.0000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "HC", "460.000", "1.0000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT3", "200.000", "1.4800", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "HC", "403.000", "1.0400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "320.000", "1.4850", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "320.000", "1.5020", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "HC", "460.000", "1.0060", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR1", "CPH2", "400.000", "1.3600", "his, ADM JR., 7/20/89"}, {"NR1", "H", "466.000", "1.0000", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "400.000", "1.3800", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "400.000", "1.3200", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "380.000", "1.3700", "his, adm jr., 6/28/90"}, {"NR3", "CPH2", "380.000", "1.3200", "his, adm jr., 6/27/90"}, {"NR3", "H", "453.000", "1.0000", "his, adm jr., 6/27/90"}, {"O", "C", "620.000", "1.2300", "Peptide geometry, condensed phase (LK)"}, {"O", "CC", "650.000", "1.2300", "adm jr. 4/10/91, acetamide"}, {"OB", "CC", "750.000", "1.2200", "adm jr., 10/17/90, acetic acid vibrations and geom."}, {"OB", "CD", "750.000", "1.2200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "525.000", "1.2600", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "525.000", "1.2600", "adm jr. 7/23/91, acetic acid"}, {"OC", "CT2", "450.000", "1.3300", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "450.000", "1.3300", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "334.300", "1.4110", "MeOH, EMB 10/10/89,"}, {"OH1", "CD", "230.000", "1.4000", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OH1", "CT1", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT2", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "CT3", "428.000", "1.4200", "methanol vib fit EMB 11/21/89"}, {"OH1", "H", "545.000", "0.9600", "EMB 11/21/89 methanol vib fit"}, {"OS", "CD", "150.000", "1.3340", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OS", "CT3", "340.000", "1.4300", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"S", "CT2", "198.000", "1.8180", "fitted to C-S s 9/26/92 (FL)"}, {"S", "CT3", "240.000", "1.8160", "fitted to C-S s 9/26/92 (FL)"}, {"S", "HS", "275.000", "1.3250", "methanethiol pure solvent, adm jr., 6/22/92"}, {"SM", "CT2", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "CT3", "214.000", "1.8160", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SM", "SM", "173.000", "2.0290", "improved CSSC surface in DMDS 5/15/92 (FL)"}, {"SS", "CS", "205.000", "1.8360", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HR1", "CD", "330.000", "1.1100", "acetaldehyde, benzaldehyde, 3ALP"}, {"O", "CD", "720.000", "1.2050", "acetaldehyde, benzaldehyde, 3ALP. from stream/toppar_all27_na_bkb_modifications.str"}, {"CT2A", "CT1", "222.500", "1.5380", "from CT2 CT1, Zhu"}, {"CT2", "CT2A", "222.500", "1.5300", "from CT2 CT2, Zhu"}, {"CT2A", "HA2", "309.000", "1.1110", "from HA2 CT2, Zhu"}, {"CT2A", "CPH1", "229.630", "1.5000", "from CT2 CPH1, Zhu"}, {"CT2A", "CC", "200.000", "1.5220", "from CT2 CC, jshim"}, {"CT1", "CS", "190.000", "1.5380", "from CT3 CS but lengthened; compare CT3 CT2 with CT2 CT1; kevo"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm36m_prot info V(S) = Kub x (S - S0)^2 */ char * charmm36m_prot_angles[364][8]= {{"H", "NH2", "CT1", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2"}, {"H", "NH2", "CT2", "50.000", "111.00", " ", " ", "From LSN HC-NH2-CT2, Neutral Gly Nterminus"}, {"NH2", "CT1", "CT1", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT2", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"NH2", "CT1", "CT3", "67.700", "110.00", " ", " ", "From LSN NH2-CT2-CT2"}, {"CT1", "CD", "OH1", "55.000", "110.50", " ", " ", "From ASPP CT2-CD-OH1"}, {"CT3", "CT1", "CD", "52.000", "108.00", " ", " ", "Ala cter"}, {"NH2", "CT1", "HB1", "38.000", "109.50", "50.00", "2.1400", "From LSN NH2-CT2-HA"}, {"NH2", "CT1", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C"}, {"NH2", "CT2", "C", "50.000", "107.00", " ", " ", "From ALA Dipep. NH1-CT2-C, Neutral Gly Nterminus"}, {"CAI", "CAI", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CAI", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "from CA CA CA"}, {"CPT", "CA", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CA", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "50.000", "113.20", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "CAI", "50.000", "110.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CPT", "CY", "CA", "85.000", "106.40", "25.00", "2.26100", "atm, methylindole, 1/17/04"}, {"CPT", "NY", "CA", "85.000", "112.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CT2", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT2", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CA", "30.000", "127.00", " ", " ", "atm, methylindole, CT3 CY CA"}, {"CT3", "CY", "CPT", "30.000", "126.70", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "130.000", "133.50", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "85.000", "108.00", " ", " ", "atm, methylindole, 1/17/04"}, {"CY", "CT2", "CT1", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"CY", "CT2", "CT3", "58.350", "114.00", " ", " ", "from TRP crystal, JWK"}, {"H", "NY", "CA", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CAI", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"H", "NY", "CPT", "28.000", "126.00", " ", " ", "trp, adm jr., 12/30/91"}, {"HA2", "CT2", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "55.000", "109.50", " ", " ", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CAI", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CAI", "CA", "30.000", "120.00", "22.00", "2.15250", "from HP CA CA"}, {"HP", "CA", "CPT", "30.000", "122.00", "22.00", "2.14600", "trp, adm jr., 12/30/91"}, {"HP", "CAI", "CPT", "30.000", "122.00", "22.00", "2.14600", "from HP CA CPT"}, {"HP", "CA", "CY", "32.000", "125.00", "25.00", "2.17300", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"HP", "CY", "CA", "32.000", "126.40", "25.00", "2.18600", "trp, adm jr., 12/30/91"}, {"HP", "CY", "CPT", "32.000", "126.40", "25.00", "2.25500", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CA", "CY", "85.000", "110.50", "25.00", "2.24000", "trp, adm jr., 12/30/91"}, {"NY", "CA", "HP", "32.000", "125.00", "25.00", "2.17700", "JWK 05/14/91 new theta0 and r0UB from indole"}, {"NY", "CPT", "CA", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "130.000", "129.50", " ", " ", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CPT", "95.000", "107.40", " ", " ", "atm, methylindole, 1/17/04"}, {"CA", "CA", "CA", "40.000", "120.00", "35.00", "2.41620", "JES 8/25/89"}, {"CE1", "CE1", "CT2", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CE1", "CT3", "48.00", "123.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"CE1", "CT2", "CT3", "32.00", "112.20", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "48.00", "126.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "47.00", "125.20", " ", " ", "for propene, yin/adm jr., 12/95"}, {"CP1", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "C", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CC", "52.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "CD", "50.000", "112.3000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP2", "CP1", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "CP2", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "60.000", "117.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "100.000", "114.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "100.000", "111.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "130.000", "107.5000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR2", "CPH1", "130.000", "104.0000", " ", " ", "his, adm jr., 6/27/90"}, {"CPH2", "NR3", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"CT1", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT1", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 6/27/2012, for Thr with CT1 patch"}, {"CT1", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT1", "CT2", "CA", "51.800", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"CT1", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT1", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT1", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT1", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT1", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "CA", "CA", "45.800", "122.3000", " ", " ", "PARALLH19 (JES)"}, {"CT2", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT2", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT2", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2A", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT1", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2", "CT1", "CT1", "53.350", "111.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT2", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C, for lactams, adm jr."}, {"CT2", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT3", "CT2", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"CT2", "CT2", "CD", "52.000", "108.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT2A", "CT2", "CD", "52.000", "108.0000", " ", " ", " "}, {"CT2", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "CT2", "CT2", "58.350", "113.60", "11.16", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT2", "CT3", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT2", "NC2", "C", "62.300", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"CT2", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT2", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "CA", "CA", "45.800", "122.3000", " ", " ", "toluene, adm jr., 3/7/92"}, {"CT3", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "his, ADM JR., 7/22/89, FC=>CT2CA CA,BA=> CRYSTALS"}, {"CT3", "CT1", "C", "52.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"CT3", "CT1", "CC", "52.000", "108.0000", " ", " ", "adm jr. 4/09/92, for ALA cter"}, {"CT3", "CT1", "CT1", "53.350", "108.50", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT2", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT1", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CA", "51.800", "107.5000", " ", " ", "ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CPH1", "58.350", "113.0000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2CT, U-B omitted"}, {"CT3", "CT2", "CT1", "58.350", "113.50", "11.16", "2.56100", "alkane frequencies (MJF), alkane geometries (SF)"}, {"CT3", "CT2", "CT2", "58.000", "115.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "CT2", "CT3", "53.350", "114.00", "8.00", "2.56100", "alkane update, adm jr., 3/2/92"}, {"CT3", "NC2", "C", "62.300", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"CT3", "NH1", "C", "50.000", "120.0000", " ", " ", "NMA Vib Modes (LK)"}, {"CT3", "OS", "CD", "40.000", "109.60", "30.00", "2.26510", "adm jr. 5/02/91, acetic acid pure solvent"}, {"CT3", "S", "CT2", "34.000", "95.0000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"H", "NH1", "C", "34.000", "123.0000", " ", " ", "NMA Vib Modes (LK)"}, {"H", "NH1", "CT1", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT2", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH1", "CT3", "35.000", "117.0000", " ", " ", "NMA Vibrational Modes (LK)"}, {"H", "NH2", "CC", "50.000", "120.0000", " ", " ", "his, adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NH2", "H", "23.000", "120.0000", " ", " ", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"H", "NR1", "CPH1", "30.000", "125.50", "20.00", "2.15000", "his, adm jr., 6/27/90"}, {"H", "NR1", "CPH2", "30.000", "127.00", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "25.000", "126.00", "15.00", "2.13000", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH2", "25.000", "126.00", "15.00", "2.09000", "his, adm jr., 6/27/90"}, {"H", "OH1", "CA", "65.000", "108.0000", " ", " ", "JES 8/25/89 phenol"}, {"H", "OH1", "CD", "55.000", "115.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "OH1", "CT1", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT2", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"H", "OH1", "CT3", "57.500", "106.0000", " ", " ", "methanol vib fit EMB 11/21/89"}, {"HA2", "CP2", "CP1", "33.430", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "CP3", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP2", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "CP2", "26.500", "110.10", "22.53", "2.17900", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "HA2", "35.500", "109.00", "5.40", "1.80200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CS", "CT3", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA2", "CS", "HA2", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CS", "HA3", "35.500", "108.40", "14.00", "1.77500", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA1", "CT1", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA1", "CT1", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA1", "CT1", "CT1", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT2", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "CT3", "34.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA1", "CT1", "HA1", "35.500", "109.00", "5.40", "1.80200", "based on HA CT2 HA"}, {"HA2", "CT2", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA2", "CT2", "CA", "49.300", "107.5000", " ", " ", "PARALLH19 (JES)"}, {"HA2", "CT2", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA2", "CT2", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA2", "CT2", "CE1", "45.00", "111.50", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HA2", "CT2", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA2", "CT2", "CT1", "26.500", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA2", "CT2", "CT2", "26.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "CT3", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA2", "CT2", "HA2", "35.500", "109.00", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "C", "33.000", "109.50", "30.00", "2.16300", "alanine dipeptide, LK, replaced, adm jr., 5/09/91"}, {"HA3", "CT3", "CA", "49.300", "107.5000", " ", " ", "toluene, adm jr. 3/7/92"}, {"HA3", "CT3", "CC", "33.000", "109.50", "30.00", "2.16300", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HA3", "CT3", "CD", "33.000", "109.50", "30.00", "2.16300", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HA3", "CT3", "CE1", "42.00", "111.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HA3", "CT3", "CPH1", "33.430", "109.5000", " ", " ", "his, ADM JR., 7/22/89, from CT2CT2HA, U-B OMITTED"}, {"HA3", "CT3", "CS", "34.600", "110.10", "22.53", "2.17900", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT1", "33.430", "110.10", "22.53", "2.17900", "alkane frequencies (MJF), alkane geometries (SF)"}, {"HA3", "CT3", "CT2", "34.600", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "CT3", "37.500", "110.10", "22.53", "2.17900", "alkane update, adm jr., 3/2/92"}, {"HA3", "CT3", "HA3", "35.500", "108.40", "5.40", "1.80200", "alkane update, adm jr., 3/2/92"}, {"HE1", "CE1", "CE1", "52.00", "119.50", " ", " ", "for 2-butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CE2", "42.00", "118.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "40.00", "116.00", " ", " ", "for 1-butene; from propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "22.00", "117.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE1", "45.00", "120.50", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HE2", "CE2", "CE2", "55.50", "120.50", " ", " ", "for ethene, yin/adm jr., 12/95"}, {"HE2", "CE2", "HE2", "19.00", "119.00", " ", " ", "for propene, yin/adm jr., 12/95"}, {"HB1", "CP1", "C", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CC", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CD", "50.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "CP2", "35.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB1", "CT1", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB1", "CT1", "CT1", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT2", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "CT3", "35.000", "111.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "C", "50.000", "109.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "CC", "50.000", "109.5000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"HB2", "CT2", "CD", "50.000", "109.5000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"HB2", "CT2", "HB2", "36.000", "115.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NC2", "C", "49.000", "120.0000", " ", " ", "35.3->49.0 GUANIDINIUM (KK)"}, {"HC", "NC2", "CT2", "40.400", "120.0000", " ", " ", "107.5->120.0 to make planar Arg (KK)"}, {"HC", "NC2", "CT3", "40.400", "120.0000", " ", " ", "methylguanidinium, adm jr., 3/26/92"}, {"HC", "NC2", "HC", "25.000", "120.0000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH2", "CT2", "50.000", "111.0000", " ", " ", "from HC NH2 CT3, neutral glycine, adm jr."}, {"HC", "NH2", "CT3", "50.000", "111.0000", " ", " ", "methylamine geom/freq, adm jr., 6/2/92"}, {"HC", "NH2", "HC", "39.000", "106.5000", " ", " ", "40.0->25.0 GUANIDINIUM (KK)"}, {"HC", "NH3", "CT1", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT2", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "CT3", "30.000", "109.50", "20.00", "2.07400", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NH3", "HC", "44.000", "109.5000", " ", " ", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"HC", "NP", "CP1", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "33.000", "109.50", "4.00", "2.05600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "HC", "51.000", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "30.000", "120.00", "22.00", "2.15250", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "22.000", "130.00", "15.00", "2.21500", "adm jr., 6/27/90, his"}, {"HR3", "CPH1", "CPH1", "25.000", "130.00", "20.00", "2.20000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "38.800", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "43.000", "95.0000", " ", " ", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "20.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "C", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CC", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CD", "50.000", "108.2000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "CP2", "70.000", "110.8000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP1", "HB1", "48.000", "112.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "CP2", "70.000", "110.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CP3", "HA2", "48.000", "108.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NC2", "C", "NC2", "40.000", "120.00", "70.00", "2.31", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT2", "CT2", "67.700", "107.5000", " ", " ", "arg, (DS)"}, {"NC2", "CT2", "HA2", "56.500", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NC2", "CT3", "HA3", "56.5000", "107.5000", " ", " ", "mp2/6-311g** mgua vib data, adm jr., 1/04"}, {"NH1", "C", "CP1", "80.000", "116.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT2", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "C", "CT3", "80.000", "116.5000", " ", " ", "NMA Vib Modes (LK)"}, {"NH1", "CT1", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CC", "50.000", "107.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH1", "CT1", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT1", "CT1", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT2", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "CT3", "70.000", "113.5000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT1", "HB1", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "C", "50.000", "107.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT2", "CC", "50.000", "107.0000", " ", " ", "adm jr. 5/20/92, for asn,asp,gln,glu and cters"}, {"NH1", "CT2", "CD", "50.000", "107.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH1", "CT2", "CT2", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2, for lactams, adm jr."}, {"NH1", "CT2", "HA2", "51.500", "109.5000", " ", " ", "from NH1 CT3 HA, for lactams, adm jr."}, {"NH1", "CT2", "HB2", "48.000", "108.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "CT3", "HA3", "51.500", "109.5000", " ", " ", "NMA crystal (JCS)"}, {"NH2", "CC", "CP1", "80.000", "112.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT1", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT2", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "CT3", "50.000", "116.50", "50.00", "2.45000", "adm jr. 8/13/90 acetamide geometry and vibrations"}, {"NH2", "CC", "HA1", "44.000", "111.00", "50.00", "1.98000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"NH2", "CT2", "HB2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral glycine, adm jr."}, {"NH2", "CT2", "CD", "52.000", "108.0000", " ", " ", "CT2 CT2 CD, neutral glycine, adm jr."}, {"NH2", "CT2", "CT2", "67.700", "110.0000", " ", " ", "NH3 CT2 CT2, neutral lysine"}, {"NH2", "CT2", "HA2", "38.000", "109.50", "50.00", "2.14000", "NH2 CT3 HA, neutral lysine"}, {"NH2", "CT3", "HA3", "38.000", "109.50", "50.00", "2.14000", "methylamine geom/freq, adm jr., 6/2/92"}, {"NH3", "CT1", "C", "43.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT1", "CT1", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT2", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "CT3", "67.700", "110.0000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT1", "HB1", "51.500", "107.5000", " ", " ", "new aliphatics, adm jr., 2/3/92"}, {"NH3", "CT2", "C", "43.700", "110.0000", " ", " ", "alanine (JCS)"}, {"NH3", "CT2", "CC", "43.700", "110.0000", " ", " ", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"NH3", "CT2", "CD", "43.700", "110.0000", " ", " ", "adm jr. 5/02/91, acetic acid pure solvent"}, {"NH3", "CT2", "CT2", "67.700", "110.0000", " ", " ", "methylammonium"}, {"NH3", "CT2", "CT3", "67.700", "110.0000", " ", " ", "ethylammonium"}, {"NH3", "CT2", "HA2", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NH3", "CT2", "HB2", "51.500", "107.5000", " ", " ", "for use on NTER -- from NH3 CT2HA (JCS) -- (LK)"}, {"NH3", "CT3", "HA3", "45.000", "107.50", "35.00", "2.10100", "new stretch and bend; methylammonium (KK 03/10/92)"}, {"NP", "CP1", "C", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CD", "50.000", "106.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "HB1", "51.500", "107.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "CP2", "70.000", "108.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP3", "HA2", "51.500", "109.1500", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "130.000", "106.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR1", "CPH1", "CT2", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "CT3", "45.800", "124.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR1", "CPH1", "HR3", "25.000", "124.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH2", "HR1", "25.000", "122.50", "20.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR2", "CPH1", "CPH1", "130.000", "110.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "45.800", "120.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR2", "CPH1", "HR3", "25.000", "120.00", "20.00", "2.14000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH2", "HR1", "25.000", "125.00", "20.00", "2.12000", "his, adm jr., 6/27/90"}, {"NR2", "CPH2", "NR1", "130.000", "112.5000", " ", " ", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CT2", "45.800", "122.0000", " ", " ", "his, ADM JR., 7/22/89, FC FROM CA CT2CT"}, {"NR3", "CPH1", "HR1", "22.000", "122.00", "15.00", "2.18000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "HR2", "32.000", "126.00", "25.00", "2.14000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "NR3", "145.000", "108.0000", " ", " ", "his, ADM JR., 7/20/89"}, {"O", "C", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT3", "80.000", "121.0000", " ", " ", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "H", "50.000", "121.7000", " ", " ", "acetaldehyde (JCS)"}, {"O", "C", "N", "80.000", "122.5000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "80.000", "122.5000", " ", " ", "NMA Vib Modes (LK)"}, {"O", "CC", "CP1", "80.000", "118.0000", " ", " ", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT1", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT2", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "CT3", "15.000", "121.00", "50.00", "2.44000", "adm jr. 4/10/91, acetamide update"}, {"O", "CC", "HA1", "44.000", "122.0000", " ", " ", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "CC", "NH2", "75.000", "122.50", "50.00", "2.37000", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "CP1", "70.000", "125.00", "20.00", "2.44200", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OB", "CD", "CT1", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT2", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OB", "CD", "CT3", "70.000", "125.00", "20.00", "2.44200", "adm jr. 5/02/91, acetic acid pure solvent"}, {"OC", "CA", "CA", "40.000", "120.0000", " ", " ", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "40.000", "118.00", "50.00", "2.38800", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT2", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "CT3", "40.000", "118.00", "50.00", "2.38800", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CC", "OC", "100.000", "124.00", "70.00", "2.22500", "adm jr. 7/23/91, correction, ACETATE (KK)"}, {"OC", "CT2", "CT3", "65.000", "122.0000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT2", "HA2", "65.000", "118.3000", " ", " ", "ethoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OC", "CT3", "HA3", "65.000", "118.3000", " ", " ", "methoxide 6-31+G* geom/freq, adm jr., 6/1/92"}, {"OH1", "CA", "CA", "45.200", "120.0000", " ", " ", "PARALLH19 WITH [122.3] (JES)"}, {"OH1", "CD", "CT2", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "CT3", "55.000", "110.5000", " ", " ", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CD", "OB", "50.000", "123.00", "210.00", "2.26200", "adm jr, 10/17/90, acetic acid vibrations"}, {"OH1", "CT1", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT1", "HA1", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT1", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT2", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "CT3", "75.700", "110.1000", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT2", "HA2", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OH1", "CT3", "HA3", "45.900", "108.8900", " ", " ", "MeOH, EMB, 10/10/89"}, {"OS", "CD", "CP1", "55.000", "109.00", "20.00", "2.32600", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OS", "CD", "CT1", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT2", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "CT3", "55.000", "109.00", "20.00", "2.32600", "adm jr., 4/05/91, for PRES CT1 from methylacetate"}, {"OS", "CD", "OB", "90.000", "125.90", "160.00", "2.25760", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OS", "CT2", "HA2", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"OS", "CT3", "HA3", "60.000", "109.5000", " ", " ", "adm jr. 4/05/91, for PRES CT1 from methyl acetate"}, {"S", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"S", "CT2", "CT2", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "CT3", "58.000", "114.5000", " ", " ", "expt. MeEtS, 3/26/92 (FL)"}, {"S", "CT2", "HA2", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"S", "CT3", "HA3", "46.100", "111.3000", " ", " ", "vib. freq. and HF/6-31G* geo. (DTN) 8/24/90"}, {"SM", "CT2", "CT1", "58.000", "112.5000", " ", " ", "as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "CT3", "58.000", "112.5000", " ", " ", "diethyldisulfide, as in expt.MeEtS and DALC crystal, 5/15/92"}, {"SM", "CT2", "HA2", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "CT3", "HA3", "38.000", "111.0000", " ", " ", "new S-S atom type 8/24/90"}, {"SM", "SM", "CT2", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "72.500", "103.3000", " ", " ", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "55.000", "118.0000", " ", " ", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA2", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"SS", "CS", "HA3", "40.000", "112.3000", " ", " ", "methylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"O", "CD", "HR1", "75.000", "121.0000", " ", " ", "GLU/HSP, Zhu"}, {"NH1", "CT1", "CT2A", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2"}, {"HB1", "CT1", "CT2A", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2"}, {"CT2A", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C"}, {"CT1", "CT2A", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT1"}, {"CT1", "CT2A", "CT2", "58.350", "113.5000", "11.16", "2.56100", "from CT2 CT2 CT1"}, {"HA2", "CT2A", "HA2", "35.500", "109.0000", "5.40", "1.80200", "from HA2 CT2 HA2"}, {"HA2", "CT2A", "CT2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "HA2", "26.500", "110.1000", "22.53", "2.17900", "from HA2 CT2 CT2"}, {"CT2A", "CT2", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT2 CC"}, {"CT1", "CT2A", "CPH1", "58.350", "113.0000", " ", " ", "from CT1 CT2 CPH1"}, {"HA2", "CT2A", "CPH1", "33.430", "109.5000", " ", " ", "from HA2 CT2 CPH1"}, {"CT2A", "CPH1", "CPH1", "45.800", "130.0000", " ", " ", "from CT2 CPH1 CPH1"}, {"CT2A", "CPH1", "NR3", "45.800", "122.0000", " ", " ", "from NR3 CPH1 CT2"}, {"CT1", "CT2A", "CC", "52.000", "108.0000", " ", " ", "from CT1 CT2 CC"}, {"HA2", "CT2A", "CC", "33.000", "109.5000", "30.00", "2.16300", "from HA2 CT2 CC"}, {"OC", "CC", "CT2A", "40.000", "118.0000", "50.00", "2.38800", "from OC CC CT2"}, {"NH3", "CT1", "CT2A", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2"}, {"CT2A", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD"}, {"NH2", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "C", "52.000", "108.0000", " ", " ", "from CT2 CT1 C , kevo"}, {"CS", "CT1", "CC", "52.000", "108.0000", " ", " ", "from CT2 CT1 CC , kevo"}, {"CS", "CT1", "CD", "52.000", "108.0000", " ", " ", "from CT2 CT1 CD , kevo"}, {"HB1", "CT1", "CS", "35.000", "111.0000", " ", " ", "from HB1 CT1 CT2 , kevo"}, {"NH1", "CT1", "CS", "70.000", "113.5000", " ", " ", "from NH1 CT1 CT2 , kevo"}, {"NH3", "CT1", "CS", "67.700", "110.0000", " ", " ", "from NH3 CT1 CT2 , kevo"}, {"SS", "CS", "CT1", "55.000", "118.0000", " ", " ", "from SS CS CT3 , kevo"}, {"HA2", "CS", "CT1", "34.600", "110.10", "22.53", "2.17900", "from HA2 CS CT3 to be consistent with SS CS CT1, kevo"}, {"OC", "CT2", "CT1", "65.000", "122.0000", " ", " ", "from OC CT2 CT3 , kevo"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm36m_prot info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm36m_prot_dihedrals[706][8]= {{"NH2", "CT1", "C", "O", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "O", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"NH2", "CT1", "C", "NH1", "0.0000", "1", "0.00", " "}, {"NH2", "CT2", "C", "NH1", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT1", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT1", "C", "0.0000", "1", "0.00", " "}, {"H", "NH2", "CT2", "C", "0.0000", "1", "0.00", "Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "HB1", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA"}, {"H", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-HA, Neutral Gly Nterminus"}, {"H", "NH2", "CT1", "CT2", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"H", "NH2", "CT1", "CT3", "0.1100", "3", "0.00", "From LSN HC-NH2-CT2-CT2"}, {"CAI", "CA", "CA", "CAI", "3.1000", "2", "180.00", "from CA CA CA CA"}, {"CA", "CPT", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CAI", "CPT", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "CY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CA", "NY", "CPT", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CA", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CA", "NY", "CPT", "CAI", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CAI", "CA", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"CPT", "CPT", "CY", "CA", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CPT", "CPT", "NY", "CA", "6.5000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CT3", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT3", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CT2", "CY", "CPT", "CA", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CAI", "2.5000", "2", "180.00", "atm, methylindole, r6r5"}, {"CT2", "CY", "CPT", "CPT", "3.0000", "2", "180.00", "atm, methylindole, meth"}, {"CY", "CA", "NY", "CPT", "6.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CA", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CAI", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"CY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CA", "CY", "0.0500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CA", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CAI", "0.2000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"H", "NY", "CPT", "CPT", "0.8500", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CAI", "CA", "CA", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CA", "CPT", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CA", "CPT", "CPT", "3.0000", "2", "180.00", "JWK indole 05/14/91"}, {"HP", "CA", "CPT", "CY", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"HP", "CA", "CA", "CAI", "4.2000", "2", "180.00", "from HP CA CA CA"}, {"HP", "CA", "CAI", "CPT", "3.0000", "2", "180.00", "from HP CA CA CPT"}, {"HP", "CAI", "CA", "HP", "2.4000", "2", "180.00", "from HP CA CA HP"}, {"HP", "CAI", "CPT", "CPT", "3.0000", "2", "180.00", "from HP CA CPT CPT"}, {"HP", "CAI", "CPT", "CY", "4.0000", "2", "180.00", "from HP CA CPT CY, r6r5"}, {"HP", "CA", "CY", "CPT", "2.8000", "2", "180.00", "adm jr., 12/30/91, for jwk"}, {"HP", "CA", "CY", "CT3", "1.2000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "CY", "CT2", "1.2000", "2", "180.00", "atm, methylindole"}, {"HP", "CA", "NY", "CPT", "2.6000", "2", "180.00", "adm jr., 12/30/91, for jwk"}, {"HP", "CA", "NY", "H", "0.4000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CA", "HP", "1.0000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CA", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CAI", "2.8000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"HP", "CY", "CPT", "CPT", "2.6000", "2", "180.00", "JWK 05/14/91 fit to indole"}, {"NY", "CA", "CY", "CPT", "5.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CA", "CY", "CT3", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "CT2", "2.5000", "2", "180.00", "atm, methylindole, from NY CA CY CT3"}, {"NY", "CA", "CY", "HP", "3.5000", "2", "180.00", "JWK indole 05/14/91"}, {"NY", "CPT", "CA", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04, r6r5"}, {"NY", "CPT", "CA", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CA", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CAI", "CA", "3.0000", "2", "180.00", "atm, methylindole, 1/17/04"}, {"NY", "CPT", "CAI", "HP", "3.0000", "2", "180.00", "JWK 05/14/91 fit to indole, r6r5"}, {"NY", "CPT", "CPT", "CAI", "4.0000", "2", "180.00", "atm, methylindole, 1/17/04, bfly"}, {"NY", "CPT", "CPT", "CY", "6.5000", "2", "180.00", "JWK 05/14/91 fit to indole, r5 t1"}, {"CT3", "CT2", "CY", "CA", "0.3800", "2", "0.00", "trp, from ethylbenzene, adm jr., 3/7/92"}, {"CT3", "CT2", "CY", "CPT", "0.2500", "2", "180.00", "atm 1/14/04 3-ethylindole"}, {"CT3", "CT2", "CY", "CPT", "0.3000", "3", "0.00", "atm 1/14/04 3-ethylindole"}, {"HA3", "CT3", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA3", "CT3", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CA", "0.0100", "3", "0.00", "atm, methylindole, 1/17/04"}, {"HA2", "CT2", "CY", "CPT", "0.2000", "3", "0.00", "atm, methylindole, 1/17/04"}, {"X", "CS", "SS", "X", "0.0000", "3", "0.20", "methanethiol, HS S CT3 HA"}, {"C", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "CT2", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"C", "N", "CP1", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CA", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89"}, {"CC", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CC", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"CC", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CC", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CD", "CP1", "N", "C", "0.0000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CD", "CT1", "NH1", "C", "0.2000", "1", "180.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CD", "CT2", "NH1", "C", "2.0000", "1", "180.00", "Based on Gly3 data from graf et al, RB 7/1/11"}, {"CE1", "CE1", "CT3", "HA3", "0.0300", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT2", "CT3", "0.5000", "1", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "CT3", "1.3000", "3", "180.00", "1-butene, adm jr., 2/00 update"}, {"CE2", "CE1", "CT2", "HA2", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"CE2", "CE1", "CT3", "HA3", "0.0500", "3", "180.00", "for propene, yin/adm jr., 12/95"}, {"CP1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "C", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "C", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CC", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "N", "CP1", "CP2", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CP3", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CPH2", "NR1", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR2", "CPH1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CPH2", "NR3", "CPH1", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"CT1", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT1", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT1", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT1", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT1", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT2", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "C", "NH1", "CT3", "1.6000", "1", "0.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "C", "NH1", "CT3", "2.5000", "2", "180.00", "from CT2 C NH1 CT2, adm jr. 10/21/96"}, {"CT2", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"CT2", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT2", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR2 CPH2"}, {"CT2", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"CT2", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT2", "CT2", "CPH1", "CPH1", "0.4000", "1", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. ADM JR., 9/4/89"}, {"CT2", "CT2", "CT2", "CT2", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT2", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "2", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.15", "4", "0.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "CT2", "CT3", "0.10", "6", "180.00", "alkane, 4/98, adm jr."}, {"CT2", "CT2", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C, for lactams, adm jr."}, {"CT2", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT2", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT2", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT2", "SM", "SM", "CT2", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT2", "SM", "SM", "CT2", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "C", "NH1", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "C", "NH1", "CT2", "1.6000", "1", "0.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT2", "2.5000", "2", "180.00", "for acetylated GLY N-terminus, adm jr."}, {"CT3", "C", "NH1", "CT3", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "CA", "CA", "CA", "3.1000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"CT3", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"CT3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM HA CPH1 NR1 CPH2"}, {"CT3", "CT1", "NH1", "C", "1.8000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"CT3", "CT2", "CA", "CA", "0.2300", "2", "180.00", "ethylbenzene ethyl rotation, adm jr. 3/7/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2000", "1", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.2700", "2", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-ethylimidazole 4-21G rot bar, adm jr. 3/4/92"}, {"CT3", "CT2", "S", "CT3", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "CT2", "S", "CT3", "0.3700", "3", "0.00", "DTN 8/24/90"}, {"CT3", "NH1", "C", "CP1", "1.6000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"CT3", "NH1", "C", "CT1", "1.6000", "1", "0.00", "Revised to adjust NMA cis/trans energy difference. (LK)"}, {"CT3", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"CT3", "S", "CT2", "CT2", "0.2400", "1", "180.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "S", "CT2", "CT2", "0.3700", "3", "0.00", "expt. MeEtS, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "1.0000", "1", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "4.1000", "2", "0.00", "mp 6-311G** dimethyldisulfide, 3/26/92 (FL)"}, {"CT3", "SM", "SM", "CT3", "0.9000", "3", "0.00", "improved CSSC dihedral in DMDS 5/15/92 (FL)"}, {"H", "NH1", "C", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NH1", "C", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "C", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"H", "NH1", "CT1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CC", "0.0000", "1", "0.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"H", "NH1", "CT1", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT1", "CT1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT1", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH1", "CT2", "CC", "0.0000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"H", "NH1", "CT2", "CD", "0.0000", "1", "0.00", "adm jr. 5/02/91, acetic acid pure solvent"}, {"H", "NH1", "CT2", "CT2", "0.0000", "1", "0.00", "from H NH1 CT2 CT3, for lactams, adm jr."}, {"H", "NH1", "CT2", "CT3", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"H", "NH2", "CC", "CT1", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT2", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CT3", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"H", "NH2", "CC", "CP1", "2.5000", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"H", "NR1", "CPH1", "CPH1", "1.0000", "2", "180.00", "his, adm jr., 7/20/89"}, {"H", "NR1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HA CPH1 NR1 H"}, {"H", "NR3", "CPH1", "CPH1", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"H", "NR3", "CPH1", "CT2", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "NR3", "CPH1", "CT3", "3.0000", "2", "180.00", "his, adm jr., 7/22/89, FROM HC NR3 CPH1 HA"}, {"H", "OH1", "CA", "CA", "0.9900", "2", "180.00", "phenol OH rot bar, 3.37 kcal/mole, adm jr. 3/7/92"}, {"H", "OH1", "CT1", "CT3", "1.3300", "1", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.1800", "2", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT1", "CT3", "0.3200", "3", "0.00", "2-propanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT2", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "1.3000", "1", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.3000", "2", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"H", "OH1", "CT2", "CT3", "0.4200", "3", "0.00", "ethanol OH hf/6-31g* torsional surface, adm jr., 3/2/93"}, {"HA1", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"HA2", "CP3", "N", "C", "0.0000", "3", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "N", "CP1", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA2", "CP3", "NP", "CP1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HA1", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA2", "CT2", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA2", "CT2", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA2", "CT2", "S", "CT3", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HA3", "CT3", "CPH1", "CPH1", "0.0000", "3", "0.00", "4-methylimidazole 4-21G//6-31G* rot bar. adm jr., 9/4/89"}, {"HA3", "CT3", "CS", "HA2", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CS", "HA3", "0.1600", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"HA3", "CT3", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"HA3", "CT3", "NH1", "C", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "NH1", "H", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"HA3", "CT3", "S", "CT2", "0.2800", "3", "0.00", "DTN 8/24/90"}, {"HE1", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"CT3", "CE1", "CE1", "HE1", "1.0000", "2", "180.00", "2-butene, adm jr., 8/98 update"}, {"HE1", "CE1", "CE2", "HE2", "5.2000", "2", "180.00", "for propene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT2", "HA2", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE1", "CE1", "CT2", "CT3", "0.1200", "3", "0.00", "for butene, yin/adm jr., 12/95"}, {"HE1", "CE1", "CT3", "HA3", "0.0000", "3", "0.00", "butene, adm jr., 2/00 update"}, {"HE2", "CE2", "CE1", "CT2", "5.2000", "2", "180.00", "for butene, yin/adm jr., 12/95"}, {"HB1", "CP1", "N", "C", "0.8000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "N", "CP3", "0.1000", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CP1", "NP", "CP3", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HB1", "CT1", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB1", "CT1", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "C", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HB2", "CT2", "NH1", "H", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"HC", "NH2", "CT2", "HB2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CD", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral glycine, adm jr."}, {"HC", "NH2", "CT2", "CT2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NH2", "CT2", "HA2", "0.1100", "3", "0.00", "X CT3 NH2 X, neutral lysine"}, {"HC", "NP", "CP1", "C", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CC", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CD", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP1", "HB1", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "CP2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HC", "NP", "CP3", "HA2", "0.0800", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"HP", "CA", "CA", "CA", "4.2000", "2", "180.00", "JES 8/25/89 benzene"}, {"HP", "CA", "CA", "CT2", "4.2000", "2", "180.00", "JES 8/25/89 toluene and ethylbenzene"}, {"HP", "CA", "CA", "CT3", "4.2000", "2", "180.00", "toluene, adm jr., 3/7/92"}, {"HP", "CA", "CA", "HP", "2.4000", "2", "180.00", "JES 8/25/89 benzene"}, {"HR1", "CPH1", "CPH1", "CT2", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "CT3", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "his, adm jr., 6/27/90, his"}, {"HR1", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR1", "CPH2", "NR2", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "CPH1", "3.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"HR2", "CPH2", "NR3", "H", "0.0000", "2", "180.00", "his, adm jr., 6/27/90, YES, 0.0"}, {"HR3", "CPH1", "CPH1", "CT2", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "CT3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "CPH1", "HR3", "2.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR1", "H", "1.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH2", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HS", "S", "CT2", "CT3", "0.2400", "1", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.1500", "2", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "CT3", "0.2700", "3", "0.00", "ethanethiol C-C-S-H surface, adm jr., 4/18/93"}, {"HS", "S", "CT2", "HA2", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"HS", "S", "CT3", "HA3", "0.2000", "3", "0.00", "methanethiol pure solvent, adm jr., 6/22/92"}, {"N", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "CT3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT1", "HB1", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT2", "HB2", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "C", "CT3", "HA3", "0.0000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"N", "CT1", "CT2", "CA", "0.0400", "3", "0.00", "2.7 kcal/mole CH3 rot in ethylbenzene, adm jr, 3/7/92"}, {"NH1", "C", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "C", "CT1", "CT1", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT2", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "CT3", "0.0000", "1", "0.00", "ala dipeptide corrxn for new C VDW Rmin, 4/10/93 (LK)"}, {"NH1", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT1", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT2", "CT2", "0.0000", "1", "0.00", "from NH1 C CT1 CT2, for lactams, adm jr."}, {"NH1", "C", "CT2", "HA2", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"NH1", "C", "CT2", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH1", "C", "CT3", "HA3", "0.0000", "3", "0.00", "LK for autogenerate dihe, sp2-methyl, no dihedral potential"}, {"NH1", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH1", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH2", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NH3", "CT1", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT1", "C", "NH1", "0.6000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93"}, {"NH3", "CT1", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NH3", "CT2", "C", "N", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NH3", "CT2", "C", "NH1", "1.0000", "1", "0.00", "RB 1/07/11, based on graf et al Gly 3 N-ter J-couplings for PRES GLYP"}, {"NH3", "CT2", "CC", "NH2", "0.4000", "1", "0.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"NP", "CP1", "C", "N", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "C", "NH1", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NP", "CP1", "CC", "NH2", "0.3000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"NR1", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR1 CPH1 CPH1 HA"}, {"NR1", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR1", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR1", "CPH2", "NR2", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CPH1", "CT2", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "CT3", "3.0000", "2", "180.00", "his, ADM JR., 7/22/89, FROM NR2 CPH1 CPH1 HA"}, {"NR2", "CPH1", "CPH1", "HR3", "3.0000", "2", "180.00", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"NR2", "CPH1", "CPH1", "NR1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "HIS CB-CG TORSION,"}, {"NR2", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR2", "CPH2", "NR1", "CPH1", "14.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR2", "CPH2", "NR1", "H", "1.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH1", "CPH1", "CT2", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "CT3", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "HR1", "2.5000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CPH1", "NR3", "12.0000", "2", "180.00", "his, adm jr., 6/27/90"}, {"NR3", "CPH1", "CT2", "CT2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "CT3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT2", "HA2", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH1", "CT3", "HA3", "0.1900", "3", "0.00", "4-METHYLIMIDAZOLE 4-21G//6-31G* ROT BAR. ADM JR., 9/4/89"}, {"NR3", "CPH2", "NR3", "CPH1", "12.0000", "2", "180.00", "his, ADM JR., 7/20/89"}, {"NR3", "CPH2", "NR3", "H", "1.4000", "2", "180.00", "his, adm jr., 6/27/90"}, {"O", "C", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "CT1", "CT1", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT2", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "CT3", "1.4000", "1", "0.00", "ala dipeptide update for new C VDW Rmin, adm jr., 3/3/93c"}, {"O", "C", "CT1", "HB1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT1", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT2", "CT2", "1.4000", "1", "0.00", "from O C CT1 CT2, for lactams, adm jr."}, {"O", "C", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "CT2", "HB2", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH1", "0.0000", "1", "0.00", "Alanine Dipeptide ab initio calc's (LK)"}, {"O", "C", "CT2", "NH3", "0.0000", "1", "0.00", "Backbone parameter set made complete RLD 8/8/90"}, {"O", "C", "CT3", "HA3", "0.0000", "3", "180.00", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "C", "N", "CP1", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP1", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "2.7500", "2", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "N", "CP3", "0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "C", "NH1", "CT1", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT2", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "CT3", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "C", "NH1", "H", "2.5000", "2", "180.00", "Gives appropriate NMA cis/trans barrier. (LK)"}, {"O", "CC", "CP1", "CP2", "0.4000", "1", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "CP2", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.4000", "1", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "HB1", "0.6000", "2", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CP1", "N", "-0.3000", "4", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"O", "CC", "CT2", "HA2", "0.0000", "3", "180.00", "adm jr. 4/05/91, for asn,asp,gln,glu and cters"}, {"O", "CC", "NH2", "H", "1.4000", "2", "180.00", "adm jr. 4/10/91, acetamide update"}, {"OB", "CD", "OS", "CT2", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT2", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "0.9650", "1", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OB", "CD", "OS", "CT3", "3.8500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"OC", "CA", "CA", "CA", "3.1000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CA", "CA", "HP", "4.2000", "2", "180.00", "adm jr. 8/27/91, phenoxide"}, {"OC", "CC", "CP1", "CP2", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "HB1", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "N", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CP1", "NP", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"OC", "CC", "CT1", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OC", "CC", "CT2", "NH3", "3.2000", "2", "180.00", "adm jr. 4/17/94, zwitterionic glycine"}, {"OH1", "CA", "CA", "CA", "3.1000", "2", "180.00", "JES 8/25/89 phenol"}, {"OH1", "CA", "CA", "HP", "4.2000", "2", "180.00", "JES 8/25/89 phenol"}, {"S", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "CT2", "CT2", "HA2", "0.0100", "3", "0.00", "DTN 8/24/90"}, {"SM", "SM", "CT2", "CT1", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT2", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "CT3", "0.3100", "3", "0.00", "S-S for cys-cys, dummy parameter for now ... DTN 9/04/90"}, {"SM", "SM", "CT2", "HA2", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SM", "SM", "CT3", "HA3", "0.1580", "3", "0.00", "expt. dimethyldisulfide, 3/26/92 (FL)"}, {"SS", "CS", "CT3", "HA3", "0.1500", "3", "0.00", "ethylthiolate 6-31+G* geom/freq, adm jr., 6/1/92"}, {"X", "C", "NC2", "X", "2.2500", "2", "180.00", "9.0->2.25 GUANIDINIUM (KK)"}, {"X", "CD", "OH1", "X", "2.0500", "2", "180.00", "adm jr, 10/17/90, acetic acid C-Oh rotation barrier"}, {"X", "CD", "OS", "X", "2.0500", "2", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CE1", "CE1", "X", "0.1500", "1", "0.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE1", "CE1", "X", "8.5000", "2", "180.00", "2-butene, adm jr., 2/00 update"}, {"X", "CE2", "CE2", "X", "4.9000", "2", "180.00", "for ethene, yin/adm jr., 12/95"}, {"X", "CP1", "C", "X", "0.0000", "6", "180.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP1", "CC", "X", "0.0000", "6", "180.00", "changed to 0.0 RLD 5/19/92"}, {"X", "CP1", "CD", "X", "0.0000", "6", "180.00", "Alanine dipeptide; NMA; acetate; etc. backbone param. RLD 3/22/92"}, {"X", "CP1", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP2", "CP2", "X", "0.1600", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CP3", "CP2", "X", "0.1400", "3", "0.00", "6-31g* AcProNH2, ProNH2, 6-31g*//3-21g AcProNHCH3 RLD 4/23/93"}, {"X", "CT1", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT1", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT1", "CT1", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT2", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "CT3", "X", "0.2000", "3", "0.00", "alkane update, adm jr., 3/2/92"}, {"X", "CT1", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT1", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT1", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT2", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT2", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT2", "CT2", "X", "0.1900", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "CT3", "X", "0.1600", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT2", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT2", "NH3", "X", "0.1000", "3", "0.00", "0.715->0.10 METHYLAMMONIUM (KK)"}, {"X", "CT2", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT2", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CA", "X", "0.0000", "6", "0.00", "toluene, adm jr., 3/7/92"}, {"X", "CT3", "CC", "X", "0.0500", "6", "180.00", "For side chains of asp,asn,glu,gln, (n=6) from KK(LK)"}, {"X", "CT3", "CD", "X", "0.0000", "6", "180.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"X", "CT3", "CT3", "X", "0.1525", "3", "0.00", "alkane, 4/98, yin and mackerell"}, {"X", "CT3", "NC2", "X", "0.0000", "6", "180.00", "methylguanidinium, adm jr., 3/26/92"}, {"X", "CT3", "NH2", "X", "0.1100", "3", "0.00", "methylamine geom/freq, adm jr., 6/2/92"}, {"X", "CT3", "NH3", "X", "0.0900", "3", "0.00", "fine-tuned to ab initio; METHYLAMMONIUM, KK 03/10/92"}, {"X", "CT3", "OH1", "X", "0.1400", "3", "0.00", "EMB 11/21/89 methanol vib fit"}, {"X", "CT3", "OS", "X", "-0.1000", "3", "0.00", "adm jr. 3/19/92, from lipid methyl acetate"}, {"NH1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HB1", "CT1", "CT1", "CT3", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HA1", "CT1", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"NH1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "OH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "OH1", "H", "0.1400", "3", "0.00", "From X CT2 OH1 X"}, {"CT1", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "CT2", "CC", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2", "S", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT2", "CT2", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"CT2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "CT2", "NC2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "NC2", "C", "NC2", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HA2", "CT2", "NC2", "HC", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"HA2", "CT2", "NC2", "C", "0.0000", "6", "180.00", "From X CT2 NC2 X"}, {"NC2", "C", "NC2", "HC", "2.2500", "2", "180.00", "From X C NC2 X"}, {"HB1", "CT1", "CT2", "CC", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CY", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CC", "OC", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"HB1", "CT1", "CT2", "CPH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"CT1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT1", "CT2", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"CT1", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", "From X CT2 CT3 X"}, {"HA1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"HA1", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA1", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT3", "CT1", "CT2", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT3", "CT1", "CT2", "CT3", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA3", "CT3", "CT1", "CT2", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"HA2", "CT2", "CT3", "HA3", "0.1600", "3", "0.00", "From X CT2 CT3 X"}, {"CT1", "CT2", "CT1", "HA1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2", "CT1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT3", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"CT2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", "From X CT2 NH3 X"}, {"HA2", "CT2", "CT2", "NH3", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2", "NH3", "HC", "0.1000", "3", "0.00", "From X CT2 NH3 X"}, {"HB1", "CT1", "CT2", "CA", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2", "CA", "CA", "0.0000", "6", "0.00", "From X CT2 CA X"}, {"HB1", "CT1", "CT1", "OH1", "0.2000", "3", "0.00", "From X CT1 CT1 X"}, {"HA1", "CT1", "OH1", "H", "0.1400", "3", "0.00", "From X CT1 OH1 X"}, {"OH1", "CT1", "CT3", "HA3", "0.2000", "3", "0.00", "From X CT1 CT3 X"}, {"CT2", "CT2", "CC", "O", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"CT2", "CT2", "CC", "NH2", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"CT2", "CT2", "CC", "OC", "0.0500", "6", "180.00", "From X CT2 CC X"}, {"NH1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"NH3", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"CT1", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HB1", "CT1", "CT2A", "CT2", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2A", "CT1", "C", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"HA2", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", "RB: added for C-ter Glu"}, {"HA2", "CT2A", "CT2", "HA2", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2A", "CT2", "CC", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HB1", "CT1", "CT2A", "CPH1", "0.2000", "3", "0.00", "From X CT1 CT2 X"}, {"C", "NH1", "CT1", "CT2A", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C"}, {"H", "NH1", "CT1", "CT2A", "0.0000", "1", "0.00", "from H NH1 CT1 CT2"}, {"CT2A", "CT1", "C", "O", "1.4000", "1", "0.00", "from O C CT1 CT2"}, {"CT2A", "CT1", "C", "NH1", "0.0000", "1", "0.00", "NH1 C CT1 CT2"}, {"CT2A", "CT1", "C", "N", "0.0000", "1", "0.00", "RB: added for GLU-PRO in UBQ"}, {"CT1", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"HA2", "CT2A", "CT2", "CD", "0.1900", "3", "0.00", "From X CT2 CT2 X"}, {"CT2A", "CPH1", "CPH1", "HR1", "1.0000", "2", "180.00", "from HR1 CPH1 CPH1 CT2"}, {"CT2A", "CPH1", "CPH1", "NR3", "2.5000", "2", "180.00", "from NR3 CPH1 CPH1 CT2"}, {"CT2A", "CPH1", "NR3", "H", "3.0000", "2", "180.00", "from H NR3 CPH1 CT2"}, {"CT2A", "CPH1", "NR3", "CPH2", "2.5000", "2", "180.00", "from CT2 CPH1 NR3 CPH2"}, {"HA2", "CT2A", "CPH1", "CPH1", "0.0000", "3", "0.00", "from HA2 CT2 CPH1 CPH1"}, {"HA2", "CT2A", "CPH1", "NR3", "0.1900", "3", "0.00", "from NR3 CPH1 CT2 HA2"}, {"C", "CT1", "CT2", "CT2", "0.3500", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "0.4200", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT2", "1.9100", "3", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.8800", "1", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CT2", "CT2", "CT1", "NH1", "1.9000", "3", "0.00", " "}, {"CC", "CT2", "CT2", "CT1", "1.8400", "1", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.8400", "2", "180.00", " "}, {"CC", "CT2", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.6300", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.0100", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "CT2", "0.1500", "3", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.1400", "1", "180.00", " "}, {"CT1", "CT2", "CT2", "S", "0.5400", "2", "0.00", " "}, {"CT1", "CT2", "CT2", "S", "0.6900", "3", "0.00", "Fitted Asn"}, {"C", "CT1", "CT2", "CC", "1.4100", "1", "180.00", " "}, {"C", "CT1", "CT2", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.2800", "1", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.5000", "2", "180.00", " "}, {"CC", "CT2", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.6600", "2", "180.00", " "}, {"CT1", "CT2", "CC", "NH2", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.4200", "1", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.1500", "2", "180.00", " "}, {"CT1", "CT2", "CC", "O", "0.9500", "3", "180.00", "Fitted Asp"}, {"C", "CT1", "CT2A", "CC", "1.6100", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "1.2900", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CC", "0.5900", "3", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.6800", "1", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.1000", "2", "180.00", " "}, {"CC", "CT2A", "CT1", "NH1", "0.3800", "3", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.8400", "1", "0.00", " "}, {"CT1", "CT2A", "CC", "OC", "0.9800", "2", "180.00", " "}, {"CT1", "CT2A", "CC", "OC", "1.4600", "3", "0.00", "Fitted Cys"}, {"CT1", "CT2", "S", "HS", "0.2000", "1", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.6500", "2", "0.00", " "}, {"CT1", "CT2", "S", "HS", "0.2200", "3", "0.00", " "}, {"C", "CT1", "CT2", "S", "0.2400", "1", "180.00", " "}, {"C", "CT1", "CT2", "S", "0.7500", "2", "180.00", " "}, {"C", "CT1", "CT2", "S", "1.3500", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "0.3400", "1", "0.00", " "}, {"NH1", "CT1", "CT2", "S", "0.5000", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "S", "1.4300", "3", "0.00", "Fitted Glu"}, {"CC", "CT2", "CT2A", "CT1", "0.0000", "1", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.3800", "2", "180.00", " "}, {"CC", "CT2", "CT2A", "CT1", "0.5900", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.1100", "1", "0.00", " "}, {"C", "CT1", "CT2A", "CT2", "0.9800", "2", "180.00", " "}, {"C", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CC", "CT1", "CT2A", "CT2", "1.6000", "3", "180.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3000", "1", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "0.3500", "2", "0.00", " "}, {"CT2", "CT2A", "CT1", "NH1", "1.7600", "3", "0.00", "Group-fitted for Hsd/Hse"}, {"CPH1", "CPH1", "CT2", "CT1", "1.7400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.1500", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2", "CT1", "0.7700", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "1.4900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.0900", "2", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR1", "0.7900", "3", "180.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "1.0900", "1", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.0900", "2", "0.00", " "}, {"CT1", "CT2", "CPH1", "NR2", "0.6700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.1800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.6400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CPH1", "0.8700", "3", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "1", "0.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.0000", "2", "180.00", " "}, {"CPH1", "CT2", "CT1", "NH1", "0.9000", "3", "0.00", "Fitted Hsp"}, {"CPH1", "CPH1", "CT2A", "CT1", "2.0400", "1", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.4400", "2", "0.00", " "}, {"CPH1", "CPH1", "CT2A", "CT1", "0.1300", "3", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.5300", "1", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.4200", "2", "180.00", " "}, {"CT1", "CT2A", "CPH1", "NR3", "0.3000", "3", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.7500", "1", "180.00", " "}, {"C", "CT1", "CT2A", "CPH1", "0.1300", "2", "0.00", " "}, {"C", "CT1", "CT2A", "CPH1", "1.8600", "3", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "1.0900", "1", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "0.2200", "2", "180.00", " "}, {"CPH1", "CT2A", "CT1", "NH1", "2.3200", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "CT2", "CT3", "0.3800", "1", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.1300", "2", "180.00", " "}, {"CT1", "CT1", "CT2", "CT3", "0.2900", "3", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.1000", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.5200", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT2", "0.2900", "3", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.1200", "1", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.3600", "2", "180.00", " "}, {"CT2", "CT1", "CT1", "NH1", "0.4100", "3", "0.00", "Fitted Leu"}, {"CT1", "CT2", "CT1", "CT3", "0.0500", "1", "0.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.1000", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "CT3", "0.0100", "3", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.3200", "1", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.6100", "2", "180.00", " "}, {"C", "CT1", "CT2", "CT1", "0.7200", "3", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4800", "1", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.4200", "2", "180.00", " "}, {"CT1", "CT2", "CT1", "NH1", "0.6500", "3", "0.00", "Group-fitted for Phe/Tyr"}, {"CA", "CA", "CT2", "CT1", "1.0700", "1", "0.00", " "}, {"CA", "CA", "CT2", "CT1", "0.2400", "2", "180.00", " "}, {"CA", "CA", "CT2", "CT1", "0.1700", "3", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.2800", "1", "180.00", " "}, {"C", "CT1", "CT2", "CA", "0.9400", "2", "180.00", " "}, {"C", "CT1", "CT2", "CA", "1.5700", "3", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.5200", "1", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "0.6200", "2", "180.00", " "}, {"CA", "CT2", "CT1", "NH1", "1.5800", "3", "0.00", "Fitted Ser"}, {"CT1", "CT2", "OH1", "H", "0.0200", "1", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.5600", "2", "0.00", " "}, {"CT1", "CT2", "OH1", "H", "0.4900", "3", "0.00", " "}, {"C", "CT1", "CT2", "OH1", "0.6500", "1", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "0.2500", "2", "180.00", " "}, {"C", "CT1", "CT2", "OH1", "1.1700", "3", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1800", "1", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT2", "OH1", "1.4600", "3", "0.00", "Group-fitted for Ile/Thr"}, {"CT1", "CT1", "OH1", "H", "0.1800", "1", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.0600", "2", "0.00", " "}, {"CT1", "CT1", "OH1", "H", "0.2500", "3", "0.00", " "}, {"C", "CT1", "CT1", "OH1", "0.7900", "1", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.3900", "2", "180.00", " "}, {"C", "CT1", "CT1", "OH1", "0.9900", "3", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.0900", "1", "0.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1900", "2", "180.00", " "}, {"NH1", "CT1", "CT1", "OH1", "0.1700", "3", "0.00", "Fitted Trp"}, {"CA", "CY", "CT2", "CT1", "0.0300", "1", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.5500", "2", "0.00", " "}, {"CA", "CY", "CT2", "CT1", "0.3900", "3", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.3600", "1", "180.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.0500", "2", "0.00", " "}, {"CPT", "CY", "CT2", "CT1", "0.1900", "3", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.0900", "1", "180.00", " "}, {"C", "CT1", "CT2", "CY", "0.5000", "2", "180.00", " "}, {"C", "CT1", "CT2", "CY", "1.1700", "3", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.2900", "1", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "0.6600", "2", "180.00", " "}, {"CY", "CT2", "CT1", "NH1", "1.1700", "3", "0.00", "Fitted Val"}, {"C", "CT1", "CT1", "CT3", "0.1400", "1", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.2600", "2", "180.00", " "}, {"C", "CT1", "CT1", "CT3", "0.3300", "3", "180.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.1800", "1", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.0600", "2", "0.00", " "}, {"CT3", "CT1", "CT1", "NH1", "0.5900", "3", "0.00", "CT2->CT2A, jshim"}, {"H", "NH1", "CT2A", "CC", "0.0000", "1", "0.00", " "}, {"X", "CT2A", "CC", "X", "0.0500", "6", "180.00", " "}, {"HB1", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CC", "OC", "0.0500", "6", "180.00", " "}, {"NH3", "CT1", "CT2A", "HA2", "0.2000", "3", "0.00", " "}, {"NH3", "CT1", "CT2A", "CC", "0.2000", "3", "0.00", " "}, {"CC", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", "specific terms"}, {"CPH1", "CT2A", "CT1", "CC", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "NH3", "0.2000", "3", "0.00", " "}, {"CPH1", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"HA2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", " "}, {"CT2", "CT2A", "CT1", "CD", "0.2000", "3", "0.00", "RESI CYSM and PRES CYSD"}, {"H", "NH2", "CT1", "CS", "0.1100", "3", "0.00", "from H NH2 CT1 CT2 or H NH2 CT1 CT2 , kevo"}, {"CS", "CT1", "NH1", "C", "1.8000", "1", "0.00", "from CT2 CT1 NH1 C or CT2A CT1 NH1 C , kevo"}, {"H", "NH1", "CT1", "CS", "0.0000", "1", "0.00", "from H NH1 CT1 CT2 or H NH1 CT1 CT2 , kevo"}, {"N", "C", "CT1", "CS", "0.0000", "1", "0.00", "from N C CT1 CT2 or N C CT1 CT2 , kevo"}, {"NH1", "C", "CT1", "CS", "0.0000", "1", "0.00", "from NH1 C CT1 CT2 or NH1 C CT1 CT2 , kevo"}, {"O", "C", "CT1", "CS", "1.4000", "1", "0.00", "from O C CT1 CT2 or O C CT1 CT2 , kevo"}, {"HA2", "CS", "CT1", "C", "0.2000", "3", "0.00", "from HA2 CT2 CT1 C or HA2 CT2A CT1 C , kevo"}, {"NH1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from NH1 CT1 CT2 HA2 or NH1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from HB1 CT1 CT2 HA2 or HB1 CT1 CT2A HA2 , kevo"}, {"HB1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from HB1 CT1 CT2 S or HB1 CT1 CT2A S , kevo"}, {"C", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "HA2", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CS", "SS", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH2", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"NH3", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"C", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CC", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"CD", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}, {"HB1", "CT1", "CT2", "OC", "0.2000", "3", "0.00", "from X CT1 CT2 X , kevo"}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm36m_prot info V(psi) = Kpsi x (psi - psi0)^2 */ char * charmm36m_prot_impropers[35][8]= {{"HE2", "HE2", "CE2", "CE2", "3.0", "0", "0.00", "for ethene, yin/adm jr., 12/95"}, {"HR1", "NR1", "NR2", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR1", "NR2", "NR1", "CPH2", "0.5000", "0", "0.0000", "his, adm jr., 7/05/90"}, {"HR3", "CPH1", "NR1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR2", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "CPH1", "NR3", "CPH1", "1.0000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR1", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"HR3", "NR2", "CPH1", "CPH1", "0.5000", "0", "0.0000", "adm jr., 3/24/92, maintain old aliphatic H VDW params"}, {"N", "C", "CP1", "CP3", "0.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"NC2", "X", "X", "C", "45.0000", "0", "0.0000", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"C", "HC", "HC", "NC2", "0.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NC2", "X", "X", "HC", "-2.0", "0", "0.0", "mp2/6-311g** guan vibrational data, adm jr., 1/04"}, {"NH1", "X", "X", "H", "20.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"NH2", "X", "X", "H", "4.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"NR1", "CPH1", "CPH2", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR1", "CPH2", "CPH1", "H", "0.4500", "0", "0.0000", "his, adm jr., 7/05/90"}, {"NR3", "CPH1", "CPH2", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"NR3", "CPH2", "CPH1", "H", "1.2000", "0", "0.0000", "his, adm jr., 6/27/90"}, {"O", "CP1", "NH2", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "CT1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT2", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "CT3", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "HA1", "NH2", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "N", "CT2", "CC", "120.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CP1", "CC", "45.0000", "0", "0.0000", "6-31g* AcProNH2 and ProNH2 RLD 5/19/92"}, {"O", "NH2", "CT1", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT2", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "CT3", "CC", "45.0000", "0", "0.0000", "adm jr., 8/13/90 acetamide geometry and vibrations"}, {"O", "NH2", "HA1", "CC", "45.0000", "0", "0.0000", "adm jr., 5/13/91, formamide geometry and vibrations"}, {"O", "X", "X", "C", "120.0000", "0", "0.0000", "NMA Vibrational Modes (LK)"}, {"OB", "X", "X", "CD", "100.0000", "0", "0.0000", "adm jr., 10/17/90, acetic acid vibrations"}, {"OC", "X", "X", "CC", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT1", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT2", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}, {"CC", "X", "X", "CT3", "96.0000", "0", "0.0000", "90.0->96.0 acetate, single impr (KK)"}}; /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm36m_prot info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm36m_prot_vdw[53][6]= {{"C", "-0.110000", "2.000000", " ", " ", " "}, {"CA", "-0.070000", "1.992400", " ", " ", " "}, {"CC", "-0.070000", "2.000000", " ", " ", " "}, {"CD", "-0.070000", "2.000000", " ", " ", " "}, {"CE1", "-0.068000", "2.090000", " ", " ", " "}, {"CE2", "-0.064000", "2.080000", " ", " ", " "}, {"CP1", "-0.020000", "2.275000", "-0.010000", "1.900000", " "}, {"CP2", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CP3", "-0.055000", "2.175000", "-0.010000", "1.900000", " "}, {"CPH1", "-0.050000", "1.800000", " ", " ", " "}, {"CPH2", "-0.050000", "1.800000", " ", " ", " "}, {"CS", "-0.110000", "2.200000", " ", " ", " "}, {"CPT", "-0.099000", "1.860000", " ", " ", " "}, {"CY", "-0.073000", "1.990000", " ", " ", " "}, {"CAI", "-0.073000", "1.990000", " ", " ", " "}, {"CT", "-0.0200", "2.275", "-0.01", "1.9", " "}, {"CT1", "-0.0320", "2.000", "-0.01", "1.9", " "}, {"CT2", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT2A", "-0.0560", "2.010", "-0.01", "1.9", " "}, {"CT3", "-0.0780", "2.040", "-0.01", "1.9", " "}, {"H", "-0.046000", "0.224500", " ", " ", " "}, {"HA", "-0.022000", "1.320000", " ", " ", " "}, {"HB1", "-0.022000", "1.320000", " ", " ", " "}, {"HB2", "-0.028000", "1.340000", " ", " ", " "}, {"HE1", "-0.031000", "1.250000", " ", " ", " "}, {"HE2", "-0.026000", "1.260000", " ", " ", " "}, {"HC", "-0.046000", "0.224500", " ", " ", " "}, {"HP", "-0.030000", "1.358200", "-0.030000", "1.358200", " "}, {"HR1", "-0.046000", "0.900000", " ", " ", " "}, {"HR2", "-0.046000", "0.700000", " ", " ", " "}, {"HR3", "-0.007800", "1.468000", " ", " ", " "}, {"HS", "-0.100000", "0.450000", " ", " ", " "}, {"HA1", "-0.045", "1.3400", " ", " ", " "}, {"HA2", "-0.034", "1.3400", " ", " ", " "}, {"HA3", "-0.024", "1.3400", " ", " ", " "}, {"N", "-0.200000", "1.850000", "-0.000100", "1.850000", " "}, {"NC2", "-0.200000", "1.850000", " ", " ", " "}, {"NH1", "-0.200000", "1.850000", "-0.200000", "1.550000", " "}, {"NH2", "-0.200000", "1.850000", " ", " ", " "}, {"NH3", "-0.200000", "1.850000", " ", " ", " "}, {"NP", "-0.200000", "1.850000", " ", " ", " "}, {"NR1", "-0.200000", "1.850000", " ", " ", " "}, {"NR2", "-0.200000", "1.850000", " ", " ", " "}, {"NR3", "-0.200000", "1.850000", " ", " ", " "}, {"NY", "-0.200000", "1.850000", " ", " ", " "}, {"O", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OB", "-0.120000", "1.700000", "-0.120000", "1.400000", " "}, {"OC", "-0.120000", "1.700000", " ", " ", " "}, {"OH1", "-0.152100", "1.770000", " ", " ", " "}, {"OS", "-0.152100", "1.770000", " ", " ", " "}, {"S", "-0.450000", "2.000000", " ", " ", " "}, {"SM", "-0.380000", "1.975000", " ", " ", " "}, {"SS", "-0.470000", "2.200000", " ", " ", " "}}; Atomes-GNU-1.1.14/src/calc/force_fields/charmm_silicates.c000066400000000000000000000275461457665371200233030ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file charmm_silicates.c * @short CHARMM-charmm_silicates force field, from 'charmm_silicates' * @author Sébastien Le Roux */ /* * This file: 'charmm_silicates.c' * * Contains: * CHARMM-charmm_silicates force field, data from taken from: - the file: 'charmm_silicates' - distributed in: 'toppar_c36_jul16_mass_orig.tgz' This file contains several tables: Atoms : charmm_silicates_atoms[13][5] Bonds : charmm_silicates_bonds[14][5] Angles : charmm_silicates_angles[27][8] Dihedrals : charmm_silicates_dihedrals[34][8] Non bonded : charmm_silicates_vdw[13][6] */ #include "global.h" int charmm_silicates_objects[14] = {13, 0, 0, 14, 0, 0, 27, 0, 34, 0 , 0, 0, 13, 0}; int charmm_silicates_dim[14] = {5, 0, 0, 5, 0, 0, 8, 0, 8, 0, 0, 0, 6, 0}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= charmm_silicates info */ char * charmm_silicates_atoms[13][5]= {{"H", "1.008000", "HT", "TIPS3P WATER HYDROGEN", "1"}, {"O", "15.99940", "OT", "TIPS3P WATER OXYGEN", "2"}, {"D", "1.008000", "DUM", "dummy atom", "3"}, {"H", "1.008000", "HSiO", "Si hydroxyl hydrogen;", "100"}, {"H", "1.008000", "HSiA", "Si aliphatic hydrogen;", "101"}, {"H", "1.008000", "HAl", "Si aliphatic hydrogen;", "102"}, {"O", "15.999000", "OSiH", "Si Hydroxyl Oxygen;", "103"}, {"O", "15.999000", "OSiE", "Si Ester Oxygen;", "104"}, {"O", "15.999000", "OSiA", "Si Ester Oxygen;", "105"}, {"O", "15.999000", "OAl", "Si Hydroxyl Oxygen;", "106"}, {"Si", "28.085500", "Si", "Si Atom;", "107"}, {"Si", "28.085500", "SiH3", "Si Atom;", "108"}, {"Al", "26.981540", "Al", "Aluminum Atom;", "110"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= Kb (kcal mol^-1 A^2), 4= charmm_silicates info V(R) = Kb x (R - R0)^2 */ char * charmm_silicates_bonds[14][5]= {{"Si", "OSiE", "302.000", "1.698", " "}, {"Al", "OSiE", "302.000", "1.698", " "}, {"Si", "OSiA", "302.000", "1.698", " "}, {"Si", "OSiH", "325.000", "1.68", " "}, {"Al", "OAl", "302.000", "2.00", " "}, {"SiH3", "OSiE", "304.000", "1.682", " "}, {"HSiO", "OSiH", "566.000", "0.975", " "}, {"HAl", "OAl", "566.000", "0.9600", " "}, {"Al", "HAl", "450.000", "0.9572", " "}, {"Si", "HSiA", "204.0", "1.489", " "}, {"HSiA", "SiH3", "204.0", "1.489", " "}, {"Si", "OAl", "304.000", "1.682", " "}, {"HT", "HT", "0.0", "1.5139", "from TIPS3P geometry (for SHAKE w/PARAM)"}, {"HT", "OT", "450.0", "0.9572", "from TIPS3P geometry"}}; /* Quadratic angles: 0= Key_a, 1= Key_b, 2= Key_c, 3= Ktheta (kcal mol^-1 rad^2), 4= Theta0 (deg) V(Theta) = Ktheta * (Theta - Theta0)^2 Urey-Bradley angles: 5= Kub (kcal mol^-1 A^2), 6= S0 (A), 7= charmm_silicates info V(S) = Kub x (S - S0)^2 */ char * charmm_silicates_angles[27][8]= {{"OSiE", "Si", "OSiE", "30.000", "117.00", " ", " ", "from sim1"}, {"OSiE", "SiH3", "OSiE", "30.000", "121.50", " ", " ", "from sim1"}, {"Si", "OSiE", "SiH3", "34.000", "150.50", " ", " ", "from sim1"}, {"Si", "OSiE", "Si", "34.000", "150.00", " ", " ", "from sim1"}, {"Si", "OSiA", "Si", "34.000", "150.00", " ", " ", "from sim1"}, {"OSiA", "Si", "OSiH", "32.000", "126.00", " ", " ", "from sim1"}, {"OSiA", "Si", "OSiA", "30.000", "121.50", " ", " ", "from sim1"}, {"OSiA", "Si", "OSiE", "30.000", "121.50", " ", " ", "from sim1"}, {"SiH3", "OSiE", "SiH3", "34.000", "159.00", " ", " ", "from sim1"}, {"HSiA", "SiH3", "HSiA", "30.00", "119.00", " ", " ", "from sim1"}, {"HSiA", "SiH3", "OSiE", "44.000", "118.00", " ", " ", "from sim1"}, {"Si", "OSiH", "HSiO", "34.00", "122.50", " ", " ", "quartz, from sim2"}, {"OSiE", "Si", "OSiH", "32.000", "126.00", " ", " ", "from sim2"}, {"OSiH", "Si", "OSiH", "30.000", "117.00", " ", " ", "from sim2"}, {"Al", "OAl", "Al", "30.000", "98.00", " ", " ", " "}, {"Al", "OAl", "Si", "30.000", "117.00", " ", " ", " "}, {"OAl", "Si", "OSiE", "30.000", "117.00", " ", " ", " "}, {"HAl", "OAl", "Al", "35.000", "93.40", " ", " ", " "}, {"OAl", "Al", "HAl", "35.000", "93.40", " ", " ", " "}, {"OAl", "Al", "OAl", "30.000", "90.00", " ", " ", " "}, {"OSiE", "Al", "OSiE", "30.000", "117.00", " ", " ", " "}, {"OSiE", "Al", "OAl", "30.000", "117.00", " ", " ", " "}, {"OSiE", "Al", "HAl", "30.00", "119.00", " ", " ", " "}, {"Al", "OSiE", "Si", "30.000", "117.00", " ", " ", " "}, {"Al", "OSiE", "Al", "30.000", "117.00", " ", " ", " "}, {"OSiE", "Si", "HSiA", "44.000", "118.00", " ", " ", " "}, {"HT", "OT", "HT", "55.0", "104.52", " ", " ", "FROM TIPS3P GEOMETRY"}}; /* Dihedrals 0-3= Keys, 4= Kchi (kcal mol^-1), 5= n (multi), 6= delta (deg), 7= charmm_silicates info V(chi) = Kchi x (1 + cos (n x (chi) - delta)) */ char * charmm_silicates_dihedrals[34][8]= {{"OSiE", "Si", "OSiE", "SiH3", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiE", "Si", "OSiE", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiA", "Si", "OSiA", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiE", "Si", "OSiA", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiE", "SiH3", "OSiE", "Si", "0.18000", "5", "0.00", "quartz, from sim1"}, {"OSiH", "Si", "OSiE", "SiH3", "0.12000", "5", "0.00", "quartz, from sim1"}, {"Si", "OSiE", "Si", "OSiA", "0.12000", "5", "0.00", "quartz, from sim1"}, {"HSiA", "SiH3", "OSiE", "Si", "0.20000", "3", "0.00", "quartz, from sim1"}, {"HSiA", "SiH3", "OSiE", "SiH3", "0.20000", "3", "0.00", "quartz, from sim1"}, {"OSiE", "Si", "OSiH", "HSiO", "0.30000", "3", "0.00", "quartz, from sim2"}, {"OSiH", "Si", "OSiH", "HSiO", "0.35000", "3", "0.00", "quartz, from sim2"}, {"Si", "OSiA", "Si", "OSiH", "0.12000", "5", "0.00", "quartz, from sim1"}, {"SiH3", "OSiE", "SiH3", "OSiE", "0.18000", "5", "0.00", "quartz, from sim1"}, {"Si", "OSiE", "Si", "HSiA", "0.20000", "3", "0.00", " "}, {"Si", "OSiE", "Si", "OSiH", "0.18000", "5", "0.00", " "}, {"SiH3", "OSiE", "Si", "OSiA", "0.18000", "5", "0.00", " "}, {"OSiA", "Si", "OSiH", "HSiO", "0.35000", "3", "0.00", "quartz, from sim2"}, {"OAl", "Al", "OAl", "HAl", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Si", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Al", "OAl", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"Si", "OAl", "Al", "OAl", "0.10000", "3", "0.00", " "}, {"Si", "OSiE", "Si", "OAl", "0.10000", "3", "0.00", " "}, {"Si", "OAl", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"HAl", "OAl", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"Al", "OSiE", "Si", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OSiE", "Al", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OSiE", "Al", "OAl", "0.10000", "3", "0.00", " "}, {"Al", "OAl", "Al", "OSiE", "0.10000", "3", "0.00", " "}, {"Al", "OSiE", "Al", "HAl", "0.30000", "3", "0.00", " "}, {"Si", "OSiE", "Al", "OSiE", "0.30000", "3", "0.00", " "}, {"Si", "OSiE", "Al", "OAl", "0.30000", "3", "0.00", " "}, {"Si", "OSiE", "Al", "HAl", "0.10000", "3", "0.00", " "}, {"OSiE", "Al", "OAl", "HAl", "0.10000", "3", "0.00", " "}}; /* Impropers 0-3= Keys, 4= Kpsi (kcal mol^-1 rad^-2), 5= psi0 (deg), 6= charmm_silicates info V(psi) = Kpsi x (psi - psi0)^2 */ /* Non-bonded 0= Key, 1= epsilon (kcal mol^-1), 2= Rmin/2 (A), 3= epsilon[1-4], 4= Rmin[1-4]/2, 5= charmm_silicates info V(rij) = Eps(ij) x [(Rmin(ij)/rij)^12 - 2 x (Rmin(ij)/rij)^6] With: Esp(ij) = sqrt(epsilon([i) x epsilon[j]) Rmin(ij)= (Rmin[i] + Rmin[j])/2 */ char * charmm_silicates_vdw[13][6]= {{"HSiO", "-0.0460", "0.2245", " ", " ", "proteins"}, {"HSiA", "-0.022", "1.3200", " ", " ", "alkane"}, {"HAl", "-0.022", "1.3200", " ", " ", "alkane"}, {"Al", "-0.650", "2.2000", " ", " ", "to Phos"}, {"Si", "-0.600", "2.2000", " ", " ", "to Phos"}, {"SiH3", "-0.600", "2.2000", " ", " ", "to Phos"}, {"OSiH", "-0.1521", "1.7700", " ", " ", "proteins"}, {"OSiE", "-0.1521", "1.7700", " ", " ", "nucleic acids"}, {"OSiA", "-0.1521", "1.7700", " ", " ", "nucleic acids"}, {"OAl", "-0.1521", "1.7700", " ", " ", "proteins"}, {"HT", "-0.046", "0.2245", " ", " ", "water"}, {"OT", "-0.1521", "1.7682", " ", " ", "water"}, {"DUM", "-0.0000", "0.0000", " ", " ", "atom"}}; Atomes-GNU-1.1.14/src/calc/force_fields/compass.c000066400000000000000000001447731457665371200214430ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file compass.c * @short Compass force field, from 'Compass.frc' * @author Sébastien Le Roux */ /* * This file: 'compass.c' * * Contains: * Compass force field, data from taken from: - the file: 'Compass.frc' This file contains several tables: Atoms : Compass_atoms[45][5] Equivalence : Compass_equivalence[46][7] Quartic bonds : Compass_bonds[54][7] Quartic angles : Compass_angles[94][8] Torsions : Compass_torsions[95][11] Inversions : Compass_inversions[22][7] Non bonded : Compass_vdw[46][4] Bond increments : Compass_bond_increments[55][5] */ #include "global.h" int Compass_objects[14] = {45, 0, 46, 0, 54, 0, 0, 94, 0, 95, 22, 0, 46, 55}; int Compass_dim[14] = {5, 0, 7, 0, 7, 0, 0, 8, 0, 11, 7, 0, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= Compass info */ char * Compass_atoms[45][5]= {{"Ar", "39.94400", "ar", " ", "Ver. 1.0, Ref. 5"}, {"C", "12.01115", "c3a", "carbon ", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c1o", "in CO", "Ver. 1.0, Ref. 5"}, {"C", "12.01115", "c2=", "in CO2 and CS2", "Ver. 1.0, Ref. 5"}, {"C", "12.01115", "c3'", "carbon [one polar substituent]", "Ver. 1.0, Ref. 7"}, {"C", "12.01115", "c4", "sp3 carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c41o", "sp3, in methanol", "Ver. 1.0, Ref. 8"}, {"C", "12.01115", "c43o", "sp3 in secondary alcohols", "Ver. 1.0, Ref. 8"}, {"C", "12.01115", "c43", "carbon with three heavy atoms attached", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c44", "carbon with four heavy atoms attached", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4o", "carbon ", "Ver. 1.0, Ref. 3"}, {"C", "12.01115", "c4z", "sp3, bonded to -N3", "Ver. 1.0, Ref. 9"}, {"H", "1.00797", "h1", "hydrogen ", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "h1h", "in H2", "Ver. 1.0, Ref. 5"}, {"H", "1.00797", "h1o", "polar hydrogen, bonded to O,F", "Ver. 1.0, Ref. 3"}, {"He", "4.00300", "he", " ", "Ver. 1.0, Ref. 5"}, {"Kr", "83.80000", "kr", " ", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n1n", "in N2", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n1o", "in NO", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n1z", "terminal atom in -N3", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n2=", " ", "Ver. 1.0, Ref. 4"}, {"N", "14.00670", "n2o", "in NO2", "Ver. 1.0, Ref. 5"}, {"N", "14.00670", "n2t", "central atom in -N3", "Ver. 1.0, Ref. 9"}, {"N", "14.00670", "n2z", "first atom in -N3", "Ver. 1.0, Ref. 9"}, {"N", "14.00670", "n3m", "nitrogen in amides without hydrogen", "Ver. 1.0, Ref. 7"}, {"N", "14.00670", "n3o", "in nitro group", "Ver. 1.0, Ref. 6"}, {"Ne", "20.18300", "ne", " ", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1=", "in NO2 and SO2 [and carbonyl]", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1=*", "in CO2", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o12", "in nitro group (-NO2)", "Ver. 1.0, Ref. 6"}, {"O", "15.99940", "o1c", "in CO", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1n", "in NO", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o1o", "in O2", "Ver. 1.0, Ref. 5"}, {"O", "15.99940", "o2", "oxygen with two bonds attached", "Ver. 1.0, Ref. 2"}, {"O", "15.99940", "o2e", "oxygen ", "Ver. 1.0, Ref. 3"}, {"O", "15.99940", "o2h", "oxygen ", "Ver. 1.0, Ref. 3"}, {"O", "15.99940", "o2n", "in nitrates", "Ver. 1.0, Ref. 6"}, {"O", "15.99940", "o2s", "oxygen ", "Ver. 1.0, Ref. 7"}, {"O", "15.99940", "o2z", "in siloxanes and zeolites", "Ver. 1.0, Ref. 2"}, {"P", "30.97380", "p4=", " ", "Ver. 1.0, Ref. 4"}, {"S", "32.06400", "s1=", "in CS2", "Ver. 1.0, Ref. 5"}, {"S", "32.06400", "s2=", "in SO2", "Ver. 1.0, Ref. 5"}, {"Si", "28.08600", "si4", "silicon with four bonds attached", "Ver. 1.0, Ref. 2"}, {"Si", "28.08600", "si4c", "subset of si4, non-hydrogen atom attached [siloxanes]", "Ver. 1.0, Ref. 2"}, {"Xe", "131.30000", "xe", " ", "Ver. 1.0, Ref. 5"}}; /* Equivalence table for key symbols Compass with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = Compass info */ char * Compass_equivalence[46][7]= {{"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.0, Ref. 5"}, {"c1o", "c1o", "c1o", "c1o", "c1o", "c1o", "Ver. 1.0, Ref. 5"}, {"c2=", "c2=", "c2=", "c2=", "c2=", "c2=", "Ver. 1.0, Ref. 5"}, {"c3a", "c3a", "c3a", "c3a", "c3a", "c3a", "Ver. 1.0, Ref. 1"}, {"c3'", "c3'", "c3'", "c3'", "c3'", "c3'", "Ver. 1.0, Ref. 7"}, {"c4", "c4", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 1"}, {"c41o", "c41o", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 8"}, {"c43o", "c43o", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 8"}, {"c43", "c43", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 1"}, {"c44", "c44", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 1"}, {"c4o", "c4o", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 3"}, {"c4z", "c4z", "c4", "c4", "c4", "c4", "Ver. 1.0, Ref. 9"}, {"h1", "h1", "h1", "h1", "h1", "h1", "Ver. 1.0, Ref. 1"}, {"h1h", "h1h", "h1h", "h1", "h1", "h1", "Ver. 1.0, Ref. 5"}, {"h1o", "h1o", "h1", "h1", "h1", "h1", "Ver. 1.0, Ref. 3"}, {"he", "he", "he", "he", "he", "he", "Ver. 1.0, Ref. 5"}, {"kr", "kr", "kr", "kr", "kr", "kr", "Ver. 1.0, Ref. 5"}, {"n1n", "n1n", "n1n", "n1n", "n1n", "n1n", "Ver. 1.0, Ref. 5"}, {"n1o", "n1o", "n1o", "n1o", "n1o", "n1o", "Ver. 1.0, Ref. 5"}, {"n1t", "n1t", "n1t", "n1t", "n1t", "n1t", "Ver. 1.2, Ref. 1"}, {"n1z", "n1z", "n1t", "n1t", "n1t", "n1t", "Ver. 1.0, Ref. 9"}, {"n2=", "n2=", "n2=", "n2=", "n2=", "n2=", "Ver. 1.0, Ref. 4"}, {"n2o", "n2o", "n2o", "n2o", "n2o", "n2o", "Ver. 1.0, Ref. 5"}, {"n2t", "n2t", "n2t", "n2t", "n2t", "n2t", "Ver. 1.0, Ref. 9"}, {"n2z", "n2z", "n2z", "n2z", "n2z", "n2z", "Ver. 1.0, Ref. 9"}, {"n3m", "n3m", "n3m", "n3m", "n3m", "n3m", "Ver. 1.0, Ref. 7"}, {"n3o", "n3o", "n3o", "n3o", "n3o", "n3o", "Ver. 1.0, Ref. 6"}, {"ne", "ne", "ne", "ne", "ne", "ne", "Ver. 1.0, Ref. 5"}, {"o1=", "o1=", "o1=", "o1=", "o1=", "o1=", "Ver. 1.0, Ref. 5"}, {"o1=*", "o1=*", "o1=", "o1=", "o1=", "o1=", "Ver. 1.0, Ref. 5"}, {"o12", "o12", "o1=", "o1=", "o1=", "o1=", "Ver. 1.0, Ref. 6"}, {"o1c", "o1c", "o1c", "o1c", "o1c", "o1c", "Ver. 1.0, Ref. 5"}, {"o1n", "o1n", "o1n", "o1n", "o1n", "o1n", "Ver. 1.0, Ref. 5"}, {"o1o", "o1o", "o1o", "o1o", "o1o", "o1o", "Ver. 1.0, Ref. 5"}, {"o2", "o2", "o2", "o2", "o2", "o2", "Ver. 1.0, Ref. 2"}, {"o2h", "o2h", "o2h", "o2", "o2", "o2", "Ver. 1.0, Ref. 3"}, {"o2e", "o2e", "o2e", "o2", "o2", "o2", "Ver. 1.0, Ref. 3"}, {"o2n", "o2n", "o2n", "o2n", "o2", "o2", "Ver. 1.0, Ref. 6"}, {"o2s", "o2s", "o2e", "o2", "o2", "o2", "Ver. 1.0, Ref. 7"}, {"o2z", "o2z", "o2z", "o2z", "o2z", "o2z", "Ver. 1.0, Ref. 2"}, {"p4=", "p4=", "p4=", "p4=", "p4=", "p4=", "Ver. 1.0, Ref. 4"}, {"s1=", "s1=", "s1=", "s1=", "s1=", "s1=", "Ver. 1.0, Ref. 5"}, {"s2=", "s2=", "s2=", "s2=", "s2=", "s2=", "Ver. 1.0, Ref. 5"}, {"si4", "si4", "si4", "si4", "si4", "si4", "Ver. 1.0, Ref. 2"}, {"si4c", "si4c", "si4", "si4", "si4", "si4", "Ver. 1.0, Ref. 2"}, {"xe", "xe", "xe", "xe", "xe", "xe", "Ver. 1.0, Ref. 5"}}; /* Quartic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= K3 (kcal mol-1), 5= K4 (kcal mol-1), 6= Compass info E = K2 * (R - R0)^2 + K3 * (R - R0)^3 + K4 * (R - R0)^4 */ char * Compass_bonds[54][7]= {{"c3a", "c3a", "1.4170", "470.8361", "-627.6179", "1327.6345", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "1.5010", "321.9021", "-521.8208", "572.1628", "Ver. 1.0, Ref. 1"}, {"c3a", "h1", "1.0982", "372.8251", "-803.4526", "894.3173", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "1.5300", "299.6700", "-501.7700", "679.8100", "Ver. 1.0, Ref. 1"}, {"c4", "h1", "1.1010", "345.0000", "-691.8900", "844.6000", "Ver. 1.0, Ref. 1"}, {"o2z", "si4", "1.6400", "350.1232", "-517.3424", "673.7067", "Ver. 1.0, Ref. 2"}, {"c3a", "o2", "1.3768", "428.8798", "-738.2350", "1114.9655", "Ver. 1.0, Ref. 3"}, {"c3a", "o2e", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 3"}, {"c3a", "o2h", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 3"}, {"c4", "o2e", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 3"}, {"c4", "o2h", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 3"}, {"h1", "o2h", "0.9494", "540.3633", "-1311.8663", "2132.4446", "Ver. 1.0, Ref. 3"}, {"c3a", "n2=", "1.4000", "350.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "1.7890", "197.7020", "-332.2510", "325.7160", "Ver. 1.0, Ref. 4"}, {"c4", "n2=", "1.4740", "337.0600", "-147.3700", "213.6330", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "1.8000", "218.1400", "-329.5110", "290.3490", "Ver. 1.0, Ref. 4"}, {"cl1p", "p4=", "2.0000", "158.7770", "-239.1290", "210.0840", "Ver. 1.0, Ref. 4"}, {"f1p", "p4=", "1.5650", "340.0000", "-882.3840", "1197.9190", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "1.0310", "540.1120", "-1500.2952", "2431.0080", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "1.4300", "285.2040", "-575.6850", "677.8460", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "1.5980", "393.0060", "-751.4050", "767.4310", "Ver. 1.0, Ref. 4"}, {"n3m", "p4=", "1.6780", "329.0000", "-713.7950", "902.9190", "Ver. 1.0, Ref. 4"}, {"o2", "p4=", "1.6000", "333.0980", "-726.6230", "924.6200", "Ver. 1.0, Ref. 4"}, {"h1h", "h1h", "0.7412", "414.2185", "-805.6549", "914.1296", "Ver. 1.0, Ref. 5"}, {"n1n", "n1n", "1.0977", "1651.3730", "-4069.3178", "5984.9629", "Ver. 1.0, Ref. 5"}, {"o1o", "o1o", "1.2074", "846.7150", "-2247.1760", "3478.9900", "Ver. 1.0, Ref. 5"}, {"c1o", "o1c", "1.1283", "1368.7676", "-3157.0007", "4247.5298", "Ver. 1.0, Ref. 5"}, {"n1o", "o1n", "1.1506", "1147.8362", "-3167.7349", "5099.5811", "Ver. 1.0, Ref. 5"}, {"o1=", "s2=", "1.4308", "730.8387", "-1531.7910", "1859.7753", "Ver. 1.0, Ref. 5"}, {"c2=", "o1=", "1.1600", "1161.3421", "-2564.5706", "3932.8735", "Ver. 1.0, Ref. 5"}, {"n2o", "o1=", "1.1930", "620.0000", "-1808.6018", "3077.5918", "Ver. 1.0, Ref. 5"}, {"c2=", "s1=", "1.5540", "559.0065", "-1348.6633", "1248.8604", "Ver. 1.0, Ref. 5"}, {"c3a", "n3o", "1.4300", "313.8329", "-568.6087", "600.9597", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "1.4740", "301.6051", "-535.7028", "555.0420", "Ver. 1.0, Ref. 6"}, {"c4", "o2n", "1.4350", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "1.0400", "439.9346", "-943.7307", "1180.9318", "Ver. 1.0, Ref. 6"}, {"n3o", "o1=", "1.2100", "765.0664", "-2070.2830", "2793.3218", "Ver. 1.0, Ref. 6"}, {"n3o", "o2n", "1.4020", "300.0000", "-1000.0000", "2000.0000", "Ver. 1.0, Ref. 6"}, {"c3'", "o2e", "1.3750", "368.7309", "-832.4784", "1274.0231", "Ver. 1.0, Ref. 7"}, {"c3'", "c4", "1.5140", "312.3719", "-465.8290", "473.8300", "Ver. 1.0, Ref. 7"}, {"c3'", "o1=", "1.2160", "823.7948", "-1878.7939", "2303.5310", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "1.4890", "339.3574", "-655.7236", "670.2362", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "1.3850", "359.1591", "-558.4730", "1146.3810", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "1.3950", "344.0452", "-652.1208", "1022.2242", "Ver. 1.0, Ref. 7"}, {"n1z", "n1z", "1.1354", "1337.7450", "-2675.4900", "3121.4049", "Ver. 1.0, Ref. 9"}, {"n2z", "n2t", "1.2343", "720.3345", "-1542.6689", "1799.7804", "Ver. 1.0, Ref. 9"}, {"n2t", "n1z", "1.1354", "1198.7450", "-2675.4900", "3121.4049", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "1.4814", "324.4578", "-648.9156", "757.0681", "Ver. 1.0, Ref. 9"}, {"n2z", "h1", "1.0221", "440.1623", "-960.3246", "1120.3787", "Ver. 1.0, Ref. 9"}, {"c3a", "si4", "1.8634", "233.2433", "-276.8692", "161.6659", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "1.8995", "189.6536", "-279.4210", "307.5135", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "1.4783", "202.7798", "-305.3603", "280.2685", "Ver. 1.0, Ref. 10"}, {"si4", "si4", "2.3384", "114.2164", "-140.4212", "80.7084", "Ver. 1.0, Ref. 10"}, {"c4", "n3m", "1.4000", "350.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 10"}}; /* Quartic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= K3, 6= K4, 7= Compass info Delta = Theta - Theta0 E = K2 * Delta^2 + K3 * Delta^3 + K4 * Delta^4 With: - Theta = Angle - Theta0 = Equilibrium angle */ char * Compass_angles[94][8]= {{"c3a", "c3a", "c3a", "118.9000", "61.0226", "-34.9931", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "h1", "117.9400", "35.1558", "-12.4682", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "c3a", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "c4", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "h1", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "c4", "112.6700", "39.5160", "-7.4430", "-9.5583", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "h1", "110.7700", "41.4530", "-10.6040", "5.1290", "Ver. 1.0, Ref. 1"}, {"h1", "c4", "h1", "107.6600", "39.6410", "-12.9210", "-2.4318", "Ver. 1.0, Ref. 1"}, {"h1", "o2z", "si4", "122.8000", "23.7764", "-19.8152", "9.6331", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "159.0000", "8.5000", "-13.4188", "-4.1785", "Ver. 1.0, Ref. 2"}, {"c3a", "si4", "o2z", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 2"}, {"c4", "si4", "o2z", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 2"}, {"h1", "si4", "o2z", "107.4000", "57.6643", "-10.6506", "4.6274", "Ver. 1.0, Ref. 2"}, {"o2z", "si4", "o2z", "110.7000", "70.3069", "-6.9375", "0.0000", "Ver. 1.0, Ref. 2"}, {"c3a", "c3a", "o2", "123.4200", "73.6781", "-21.6787", "0.0000", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "o2", "111.2700", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 3"}, {"c3a", "o2", "c4", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 3"}, {"c3a", "o2", "h1", "108.1900", "53.1250", "-8.5016", "0.0000", "Ver. 1.0, Ref. 3"}, {"c4", "o2", "c4", "104.5000", "35.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 3"}, {"c4", "o2", "h1", "105.8000", "52.7061", "-12.1090", "-9.8681", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "n2=", "120.0000", "60.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "p4=", "120.0010", "47.8410", "-15.2290", "-10.9070", "Ver. 1.0, Ref. 4"}, {"c4", "c4", "n2=", "117.3170", "55.2420", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "n2=", "107.4990", "62.7310", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "110.8860", "33.8300", "-7.0430", "-7.2460", "Ver. 1.0, Ref. 4"}, {"c4", "n2=", "h1", "117.2000", "37.2620", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "h1", "110.9100", "31.0910", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "120.0000", "26.0680", "-8.2980", "-5.9430", "Ver. 1.0, Ref. 4"}, {"p4=", "n2=", "p4=", "135.0000", "23.8680", "-8.7360", "0.0000", "Ver. 1.0, Ref. 4"}, {"c4", "n3m", "p4=", "120.0830", "25.0010", "-6.1170", "-5.4570", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "120.0830", "25.0010", "-6.1170", "-5.4570", "Ver. 1.0, Ref. 4"}, {"c4", "o2", "p4=", "118.2830", "35.0010", "-10.3600", "-7.8700", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "117.0000", "26.0310", "-5.8280", "-5.6200", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "c3a", "110.2310", "56.1850", "-17.3160", "-12.7280", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "h1", "108.2310", "36.1850", "-6.4880", "-7.6460", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "n2=", "109.6000", "63.0620", "-19.7400", "-14.3290", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "n3m", "108.1650", "70.9770", "-11.5480", "-15.1090", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "o2", "107.3650", "71.9770", "-10.9430", "-15.2900", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "c4", "102.5000", "48.2320", "-5.7980", "-9.9660", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "h1", "102.9000", "52.0710", "-6.4680", "-10.7730", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "n2=", "119.3000", "47.3660", "-14.6410", "-10.7360", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "h1", "101.4080", "39.6950", "-5.1340", "-8.2270", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "n2=", "110.0330", "45.9780", "-14.0520", "-10.3990", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "n3m", "103.9780", "68.2570", "-9.2210", "-14.1740", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "o2", "103.9780", "73.2570", "-9.8970", "-15.2120", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "n2=", "125.0000", "90.5230", "-20.8010", "-19.6020", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "n3m", "123.2150", "89.9230", "-32.6120", "-21.0960", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "o2", "112.2150", "99.9230", "-32.0930", "-22.8210", "Ver. 1.0, Ref. 4"}, {"n3m", "p4=", "n3m", "107.1000", "85.7690", "-5.7790", "-17.4890", "Ver. 1.0, Ref. 4"}, {"n3m", "p4=", "o2", "108.3000", "86.7690", "-5.1750", "-17.6710", "Ver. 1.0, Ref. 4"}, {"o2", "p4=", "o2", "107.5000", "86.7690", "-4.5700", "-17.8520", "Ver. 1.0, Ref. 4"}, {"o1=", "c2=", "o1=", "180.0000", "57.1000", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"s1=", "c2=", "s1=", "180.0000", "48.0000", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"o1=", "n2o", "o1=", "134.1000", "150.0000", "-82.1013", "-40.0005", "Ver. 1.0, Ref. 5"}, {"o1=", "s2=", "o1=", "119.3000", "115.2627", "-35.6278", "-26.1261", "Ver. 1.0, Ref. 5"}, {"c3a", "c3a", "n3o", "118.8000", "29.2436", "-8.8495", "-6.6020", "Ver. 1.0, Ref. 6"}, {"h1", "c4", "n3o", "107.0000", "54.9318", "-9.1333", "-11.5434", "Ver. 1.0, Ref. 6"}, {"h1", "c4", "o2n", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 6"}, {"c3a", "n3o", "o1=", "117.7000", "63.9404", "-18.4524", "-14.3129", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "o1=", "117.5000", "64.5228", "-18.4582", "-14.4215", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "o1=", "115.7000", "53.8034", "-14.1991", "-11.8708", "Ver. 1.0, Ref. 6"}, {"o1=", "n3o", "o1=", "128.0000", "95.1035", "-47.4240", "-27.9164", "Ver. 1.0, Ref. 6"}, {"c4", "o2n", "n3o", "108.5000", "55.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 6"}, {"c4", "c4", "o2n", "105.0000", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 6"}, {"o2n", "n3o", "o1=", "112.8000", "85.5228", "-18.4582", "-14.4215", "Ver. 1.0, Ref. 6"}, {"c3'", "o2", "c4", "109.0000", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 7"}, {"c3'", "c4", "h1", "107.8594", "38.0833", "-17.5074", "0.0000", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3'", "121.9556", "76.3105", "-26.3166", "-17.6944", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3'", "116.0640", "71.2598", "-15.8273", "2.0506", "Ver. 1.0, Ref. 7"}, {"c3a", "c3'", "n3m", "108.4400", "84.8377", "-19.9640", "2.7405", "Ver. 1.0, Ref. 7"}, {"c3a", "c3'", "o1=", "125.5320", "72.3167", "-16.0650", "2.0818", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "n3m", "120.7640", "73.2738", "-27.4033", "13.3920", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "c3'", "120.0700", "47.1131", "-32.5592", "13.1257", "Ver. 1.0, Ref. 7"}, {"o1=", "c3'", "o2", "118.9855", "98.6813", "-22.2485", "10.3673", "Ver. 1.0, Ref. 7"}, {"o1=", "c3'", "c4", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 7"}, {"o2", "c3'", "c4", "100.3182", "88.8631", "-3.8323", "-7.9802", "Ver. 1.0, Ref. 7"}, {"n3m", "c3'", "o1=", "121.5420", "92.5720", "-34.4800", "-11.1871", "Ver. 1.0, Ref. 7"}, {"n2z", "n2t", "n1z", "171.6211", "47.7899", "0.0000", "0.0000", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "h1", "110.0345", "55.7635", "0.6618", "0.0022", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "c4", "113.5017", "82.6294", "0.9845", "0.0033", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "h1", "107.9744", "52.7803", "0.6615", "0.0023", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "c4", "110.9900", "77.9387", "0.9499", "0.0033", "Ver. 1.0, Ref. 9"}, {"c3a", "c3a", "si4", "120.0000", "30.4689", "-23.5439", "0.0000", "Ver. 1.0, Ref. 10"}, {"c4", "c4", "si4", "112.6700", "39.5160", "-7.4430", "0.0000", "Ver. 1.0, Ref. 10"}, {"h1", "c4", "si4", "112.0355", "28.7721", "-13.9523", "0.0000", "Ver. 1.0, Ref. 10"}, {"c3a", "si4", "h1", "109.5932", "41.9497", "-42.3639", "48.1442", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "c4", "113.1855", "36.2069", "-20.3939", "20.0172", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "h1", "112.0977", "36.4832", "-12.8094", "0.0000", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "h1", "108.6051", "32.5415", "-8.3164", "0.0000", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "si4", "113.0000", "19.4692", "-34.3471", "0.0000", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "si4", "112.0893", "22.5062", "-11.5926", "0.0000", "Ver. 1.0, Ref. 10"}, {"si4", "si4", "si4", "114.2676", "24.9501", "-19.5949", "0.0000", "Ver. 1.0, Ref. 10"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= V1, 5= Phi0, 6= V2, 7= Phi0, 8= V3, 9= Phi0, 10= Compass info E = SUM(n=1,3) { V(n) * [ 1 - cos(n*Phi - Phi0(n)) ] } With: - Phi0 = Equilibrium angle */ char * Compass_torsions[95][11]= {{"c3a", "c3a", "c3a", "c3a", "8.3667", "0.0", "1.2000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "c4", "0.0000", "0.0", "4.4072", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "h1", "0.0000", "0.0", "3.9661", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c4", "c3a", "c3a", "h1", "0.0000", "0.0", "1.5590", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h1", "c3a", "c3a", "h1", "0.0000", "0.0", "2.3500", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "c3a", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "c4", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c4", "h1", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "c4", "h1", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "c4", "c4", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "c4", "h1", "0.0000", "0.0", "0.0316", "0.0", "-0.1681", "0.0", "Ver. 1.0, Ref. 1"}, {"h1", "c4", "c4", "h1", "-0.1432", "0.0", "0.0617", "0.0", "-0.1530", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "c3a", "c3a", "*", "0.0000", "0.0", "4.5000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "c4", "c4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.1530", "0.0", "Ver. 1.0, Ref. 1"}, {"h1", "o2z", "si4", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.0500", "0.0", "Ver. 1.0, Ref. 2"}, {"h1", "o2z", "si4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.0500", "0.0", "Ver. 1.0, Ref. 2"}, {"h1", "o2z", "si4", "o2z", "0.0000", "0.0", "0.0000", "0.0", "-0.0500", "0.0", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"si4", "o2z", "si4", "o2z", "-0.2250", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"*", "o2z", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0100", "0.0", "Ver. 1.0, Ref. 2"}, {"c3a", "c3a", "c3a", "o2", "0.0000", "0.0", "4.8498", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c3a", "c3a", "o2", "0.0000", "0.0", "1.7234", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "o2", "c4", "0.0000", "0.0", "1.5000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "o2", "h1", "-0.6900", "0.0", "0.5097", "0.0", "0.0095", "0.0", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "c4", "o2", "0.7137", "0.0", "0.2660", "0.0", "-0.2545", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "c4", "o2", "-0.1435", "0.0", "0.2530", "0.0", "-0.0905", "0.0", "Ver. 1.0, Ref. 3"}, {"o2", "c4", "c4", "o2", "1.1000", "0.0", "-0.0500", "0.0", "-0.1441", "0.0", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "o2", "c4", "-0.4000", "0.0", "-0.4028", "0.0", "-0.2450", "0.0", "Ver. 1.0, Ref. 3"}, {"c4", "c4", "o2", "h1", "-0.6732", "0.0", "-0.4778", "0.0", "-0.1670", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "c3a", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "c4", "0.5302", "0.0", "0.0000", "0.0", "-0.3966", "0.0", "Ver. 1.0, Ref. 3"}, {"h1", "c4", "o2", "h1", "0.1863", "0.0", "-0.4338", "0.0", "-0.2121", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "c3a", "p4=", "0.0000", "0.0", "5.4770", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c3a", "c3a", "p4=", "0.0000", "0.0", "2.2700", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "p4=", "h1", "-0.2720", "0.0", "1.1900", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "p4=", "n2=", "-0.2720", "0.0", "1.1900", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c4", "c4", "c4", "n2=", "0.0970", "0.0", "0.0720", "0.0", "-0.2580", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "c4", "n2=", "-0.1510", "0.0", "0.0100", "0.0", "-0.1860", "0.0", "Ver. 1.0, Ref. 4"}, {"c4", "c4", "n2=", "h1", "-5.0720", "0.0", "-0.4980", "0.0", "-0.4380", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "n2=", "h1", "1.2660", "0.0", "-0.7740", "0.0", "0.0380", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "c4", "p4=", "n2=", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "c3a", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.3690", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "p4=", "o2", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"p4=", "n2=", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"p4=", "n2=", "p4=", "n2=", "1.8000", "0.0", "0.5000", "0.0", "2.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "n2=", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "n3m", "p4=", "o2", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "h1", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "n2=", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"h1", "o2", "p4=", "o2", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "o2", "p4=", "*", "5.7080", "0.0", "2.1180", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c3a", "n2=", "*", "0.0000", "0.0", "1.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c3a", "p4=", "*", "-0.2720", "0.0", "1.1900", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c4", "n2=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0200", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "c4", "p4=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0680", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "n2=", "p4=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 4"}, {"*", "n3m", "p4=", "*", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "c3a", "n3o", "0.0000", "0.0", "7.2124", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"h1", "c3a", "c3a", "n3o", "0.0000", "0.0", "2.9126", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c3a", "c3a", "n3o", "o1=", "0.0000", "0.0", "1.1600", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c4", "c4", "n3o", "o1=", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 6"}, {"h1", "c4", "n3o", "o1=", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 1.0, Ref. 6"}, {"c4", "c4", "o2", "n3o", "0.0000", "0.0", "-0.4000", "0.0", "-0.2000", "0.0", "Ver. 1.0, Ref. 6"}, {"o1=", "n3o", "o2", "c4", "0.0000", "0.0", "2.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c3'", "c3a", "c3a", "c3a", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "c3a", "h1", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3a", "c3a", "0.0000", "0.0", "0.6500", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3'", "o1c", "-0.4066", "0.0", "1.2513", "0.0", "-0.7507", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "o2", "c4", "c4", "0.1302", "0.0", "-0.3250", "0.0", "0.1134", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "o2", "c4", "h1", "0.9513", "0.0", "0.1155", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3'", "o1=", "0.0000", "0.0", "0.7800", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3a", "n3m", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "c3'", "o1=", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c4", "o2", "c3'", "c4", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 1.0, Ref. 7"}, {"c4", "o2", "c3'", "o1=", "0.8905", "0.0", "3.2644", "0.0", "0.2646", "0.0", "Ver. 1.0, Ref. 7"}, {"o1=", "c3'", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"o2", "c3'", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"n3m", "c3a", "c3a", "h1", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"h1", "n2z", "n2t", "n1z", "0.0000", "0.0", "0.0000", "0.0", "-0.2637", "0.0", "Ver. 1.0, Ref. 9"}, {"c4", "n2z", "n2t", "n1z", "0.0000", "0.0", "0.0000", "0.0", "-0.1823", "0.0", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.2181", "0.0", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "c4", "c4", "0.0000", "0.0", "0.0000", "0.0", "-0.2021", "0.0", "Ver. 1.0, Ref. 9"}, {"n2z", "c4", "c4", "h1", "0.0000", "0.0", "0.0000", "0.0", "-0.2259", "0.0", "Ver. 1.0, Ref. 9"}, {"c3a", "c3a", "c3a", "si4", "0.0000", "0.0", "4.3270", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 10"}, {"h1", "c3a", "c3a", "si4", "0.0000", "0.0", "1.5093", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 10"}, {"c3a", "c3a", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0231", "0.0", "Ver. 1.0, Ref. 10"}, {"c4", "c4", "si4", "si4", "-0.3500", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 1.0, Ref. 10"}, {"*", "c4", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 1.0, Ref. 10"}, {"*", "si4", "si4", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 1.0, Ref. 10"}}; /* Inversions 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= Compass info E = K * (Chi - Chi0)^2 */ char * Compass_inversions[22][7]= {{"c3a", "c3a", "c3a", "c3a", "7.1794", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "c4", "7.8153", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "h1", "4.8912", "0.0", "Ver. 1.0, Ref. 1"}, {"c3a", "c3a", "c3a", "o2", "13.0421", "0.0", "Ver. 1.0, Ref. 3"}, {"c3a", "c3a", "c3a", "n2=", "8.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "c3a", "p4=", "6.7090", "0.0", "Ver. 1.0, Ref. 4"}, {"c3a", "c3a", "c3a", "n3o", "0.9194", "0.0", "Ver. 1.0, Ref. 6"}, {"c3a", "n3o", "o1=", "o1=", "36.2612", "0.0", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "o1=", "o1=", "44.3062", "0.0", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "o1=", "o1=", "38.5581", "0.0", "Ver. 1.0, Ref. 6"}, {"o1=", "n3o", "o1=", "o2", "45.0000", "0.0", "Ver. 1.0, Ref. 6"}, {"c3'", "c3'", "n3m", "c3a", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "c3a", "c3a", "17.0526", "0.0", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "c3'", "c3a", "0.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "n3m", "c3a", "17.0526", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3a", "n3m", "17.0526", "0.0", "Ver. !1.0, Ref. 7"}, {"c3a", "c3'", "n3m", "o1=", "30.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "c3'", "c3a", "17.0526", "0.0", "Ver. !1.0, Ref. 7"}, {"c3a", "c3'", "o1=", "n3m", "30.0000", "0.0", "Ver. !1.0, Ref. 7"}, {"c3a", "o1=", "c3'", "n3m", "30.0000", "0.0", "Ver. 1.0, Ref. 7"}, {"c4", "c3'", "o2", "o1=", "46.9264", "0.0", "Ver. 1.0, Ref. 7"}, {"c3a", "c3a", "si4", "c3a", "5.3654", "0.0", "Ver. 1.0, Ref. 10"}}; /* Non-bonded (9-6) 0= Key, 1= r, 2= eps, 3= Compass info E = eps(ij) [2(R(ij)/r(ij))^9 - 3(R(ij)/r(ij))^6] where R(ij) = [(r(i)^6 + r(j)^6))/2]^(1/6) eps(ij) = 2 sqrt(eps(i) * eps(j)) * r(i)^3 * r(j)^3/[r(i)^6 + r(j)^6] */ char * Compass_vdw[46][4]= {{"c3a", "3.9150", "0.0680", "Ver. 1.0, Ref. 1"}, {"c4", "3.8540", "0.0620", "Ver. 1.0, Ref. 1"}, {"c43", "3.8540", "0.0400", "Ver. 1.0, Ref. 1"}, {"c44", "3.8540", "0.0200", "Ver. 1.0, Ref. 1"}, {"h1", "2.8780", "0.0230", "Ver. 1.0, Ref. 1"}, {"o2z", "3.3000", "0.0800", "Ver. 1.0, Ref. 2"}, {"si4", "4.4050", "0.1980", "Ver. 1.0, Ref. 2"}, {"si4c", "4.2900", "0.1310", "Ver. 1.0, Ref. 2"}, {"c4o", "3.8150", "0.0680", "Ver. 1.0, Ref. 3"}, {"h1o", "1.0870", "0.0080", "Ver. 1.0, Ref. 3"}, {"o2", "3.3000", "0.0800", "Ver. 1.0, Ref. 3"}, {"o2e", "3.3000", "0.1200", "Ver. 1.0, Ref. 3"}, {"o2h", "3.5800", "0.0960", "Ver. 1.0, Ref. 3"}, {"n2=", "3.8300", "0.0960", "Ver. 1.0, Ref. 4"}, {"p4=", "4.2950", "0.0650", "Ver. 1.0, Ref. 4"}, {"he", "2.9000", "0.0050", "Ver. 1.0, Ref. 5"}, {"ne", "3.2000", "0.0550", "Ver. 1.0, Ref. 5"}, {"ar", "3.8800", "0.2000", "Ver. 1.0, Ref. 5"}, {"kr", "4.3000", "0.2800", "Ver. 1.0, Ref. 5"}, {"xe", "4.2600", "0.3900", "Ver. 1.0, Ref. 5"}, {"h1h", "1.4210", "0.0216", "Ver. 1.0, Ref. 5"}, {"n1n", "3.8008", "0.0598", "Ver. 1.0, Ref. 5"}, {"c1o", "4.0120", "0.0530", "Ver. 1.0, Ref. 5"}, {"o1o", "3.4758", "0.0780", "Ver. 1.0, Ref. 5"}, {"o1c", "3.6020", "0.0850", "Ver. 1.0, Ref. 5"}, {"n1o", "3.4600", "0.1280", "Ver. 1.0, Ref. 5"}, {"o1n", "3.3000", "0.1560", "Ver. 1.0, Ref. 5"}, {"c2=", "3.9150", "0.0680", "Ver. 1.0, Ref. 5"}, {"s2=", "4.0470", "0.1250", "Ver. 1.0, Ref. 5"}, {"n2o", "3.5290", "0.3330", "Ver. 1.0, Ref. 5"}, {"o1=", "3.4300", "0.1920", "Ver. 1.0, Ref. 5"}, {"o1=*", "3.3600", "0.0670", "Ver. 1.0, Ref. 5"}, {"s1=", "4.0070", "0.3130", "Ver. 1.0, Ref. 5"}, {"n3o", "3.7600", "0.0480", "Ver. 1.0, Ref. 6"}, {"o12", "3.4000", "0.0480", "Ver. 1.0, Ref. 6"}, {"o2n", "3.6500", "0.2000", "Ver. 1.0, Ref. 6"}, {"c3'", "3.9000", "0.0640", "Ver. 1.0, Ref. 7"}, {"n3m", "3.7200", "0.1500", "Ver. 1.0, Ref. 7"}, {"o2s", "3.3000", "0.0960", "Ver. 1.0, Ref. 7"}, {"c4o", "3.8700", "0.0748", "Ver. 1.1, Ref. 8"}, {"c41o", "3.8700", "0.1080", "Ver. 1.1, Ref. 8"}, {"c43o", "3.8150", "0.0680", "Ver. 1.2, Ref. 10"}, {"c4z", "3.6500", "0.0800", "Ver. 1.0, Ref. 9"}, {"n1z", "3.5200", "0.0850", "Ver. 1.0, Ref. 9"}, {"n2t", "3.3000", "0.0500", "Ver. 1.0, Ref. 9"}, {"n2z", "3.4000", "0.1200", "Ver. 1.0, Ref. 9"}}; /* Bond increments To implement atomic charges */ char * Compass_bond_increments[55][5]= {{"c3a", "c3a", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "c4", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c3a", "h1", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c4", "c4", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c4", "h1", "-0.0530", "0.0530", "Ver. 1.0, Ref. 1"}, {"o2z", "si4", "-0.2225", "0.2225", "Ver. 1.0, Ref. 2"}, {"c3a", "o2e", "0.0420", "-0.0420", "Ver. 1.0, Ref. 3"}, {"c3a", "o2h", "0.0420", "-0.0420", "Ver. 1.0, Ref. 3"}, {"c4", "o2e", "0.1600", "-0.1600", "Ver. 1.0, Ref. 3"}, {"c4", "o2h", "0.1600", "-0.1600", "Ver. 1.0, Ref. 3"}, {"h1", "o2", "0.4200", "-0.4200", "Ver. 1.0, Ref. 3"}, {"h1", "o2h", "0.4200", "-0.4200", "Ver. 1.0, Ref. 3"}, {"c3a", "n2=", "0.1990", "-0.1990", "Ver. 1.0, Ref. 4"}, {"c3a", "p4=", "-0.0600", "0.0600", "Ver. 1.0, Ref. 4"}, {"c4", "n2=", "0.3450", "-0.3450", "Ver. 1.0, Ref. 4"}, {"c4", "p4=", "-0.0500", "0.0500", "Ver. 1.0, Ref. 4"}, {"cl1p", "p4=", "-0.1200", "0.1200", "Ver. 1.0, Ref. 4"}, {"f1p", "p4=", "-0.1800", "0.1800", "Ver. 1.0, Ref. 4"}, {"h1", "n2=", "0.3280", "-0.3280", "Ver. 1.0, Ref. 4"}, {"h1", "p4=", "-0.0500", "0.0500", "Ver. 1.0, Ref. 4"}, {"n2=", "n2=", "0.0000", "0.0000", "Ver. 1.0, Ref. 4"}, {"n2=", "n3", "0.0250", "-0.0250", "Ver. 1.0, Ref. 4"}, {"n2=", "o2", "-0.0430", "0.0430", "Ver. 1.0, Ref. 4"}, {"n2=", "p4=", "-0.3500", "0.3500", "Ver. 1.0, Ref. 4"}, {"n3", "p4=", "-0.1200", "0.1200", "Ver. 1.0, Ref. 4"}, {"o2", "p4=", "-0.1400", "0.1400", "Ver. 1.0, Ref. 4"}, {"c1o", "o1c", "-0.0203", "0.0203", "Ver. 1.0, Ref. 5"}, {"c2=", "o1=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 5"}, {"c2=", "s1=", "0.0258", "-0.0258", "Ver. 1.0, Ref. 5"}, {"n2o", "o1=", "0.0730", "-0.0730", "Ver. 1.0, Ref. 5"}, {"h1h", "h1h", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"n1n", "n1n", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"n1o", "o1n", "0.0288", "-0.0288", "Ver. 1.0, Ref. 5"}, {"o1=", "s2=", "-0.2351", "0.2351", "Ver. 1.0, Ref. 5"}, {"o1o", "o1o", "0.0000", "0.0000", "Ver. 1.0, Ref. 5"}, {"c3a", "n3o", "0.2390", "-0.2390", "Ver. 1.0, Ref. 6"}, {"c4", "n3o", "0.2100", "-0.2100", "Ver. 1.0, Ref. 6"}, {"c4", "o2n", "0.3170", "-0.3170", "Ver. 1.0, Ref. 6"}, {"h1", "n3o", "0.1880", "-0.1880", "Ver. 1.0, Ref. 6"}, {"n3o", "o1=", "0.4280", "-0.4280", "Ver. 1.0, Ref. 6"}, {"n3o", "o2n", "0.0010", "-0.0010", "Ver. 1.0, Ref. 6"}, {"c3'", "o2e", "0.1120", "-0.1120", "Ver. 1.0, Ref. 7"}, {"c3'", "c4", "0.0000", "0.0000", "Ver. 1.0, Ref. 7"}, {"c3'", "o1=", "0.4500", "-0.4500", "Ver. 1.0, Ref. 7"}, {"c3'", "c3a", "0.0350", "-0.0350", "Ver. 1.0, Ref. 7"}, {"c3'", "n3m", "0.0000", "0.0000", "Ver. 1.0, Ref. 7"}, {"c3a", "n3m", "0.0950", "-0.0950", "Ver. 1.0, Ref. 7"}, {"h1", "o2h", "0.4100", "-0.4100", "Ver. 1.1, Ref. 8"}, {"n2z", "c4", "-0.3110", "0.3110", "Ver. 1.0, Ref. 9"}, {"n2z", "h1", "-0.3350", "0.3350", "Ver. 1.0, Ref. 9"}, {"n2t", "n1t", "0.3860", "-0.3860", "Ver. 1.0, Ref. 9"}, {"n2t", "n2z", "0.2470", "-0.2470", "Ver. 1.0, Ref. 9"}, {"c3a", "si4", "-0.1170", "0.1170", "Ver. 1.0, Ref. 10"}, {"c4", "si4", "-0.1350", "0.1350", "Ver. 1.0, Ref. 10"}, {"h1", "si4", "-0.1260", "0.1260", "Ver. 1.0, Ref. 10"}}; Atomes-GNU-1.1.14/src/calc/force_fields/cvff.c000066400000000000000000012611621457665371200207130ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cvff.c * @short CVFF force field, from 'CVFF.frc' * @author Sébastien Le Roux */ /* * This file: 'cvff.c' * * Contains: * CVFF force field, data from taken from: - the 'CVFF.frc' file This file contains several tables: Atoms : CVFF_atoms[133][5] Equivalence : CVFF_equivalence_auto[123][11] Equivalence : CVFF_equivalence[129][7] Quadractic bonds : CVFF_bonds_auto[776][5] Morse bonds : CVFF_morse_bonds[775][6] Quadratic angles : CVFF_angles_auto[563][6] Torsions : CVFF_torsions_auto[295][8] Impropers : CVFF_impropers[41][8] Non bonded : CVFF_vdw[45][4] Bond increments : CVFF_bond_increments[683][5] */ #include "global.h" int CVFF_objects[14] = {133, 123, 129, 776, 0, 775, 563, 0, 295, 0, 0, 41, 45, 683}; int CVFF_dim[14] = {5, 11, 7, 5, 0, 6, 6, 0, 8, 0, 0, 8, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= CVFF info */ char * CVFF_atoms[133][5]= {{"H", "1.007970", "h", "Hydrogen bonded to C. Masses from CRC 1973/74 pages B-250.", "Ver. 1.0, Ref. 1"}, {"D", "2.014000", "d", "General Deuterium Atom", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hn", "Hydrogen bonded to N", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "ho", "Hydrogen bonded to O", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hp", "Hydrogen bonded to P", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hs", "Hydrogen bonded to S", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h*", "Hydrogen in water molecule", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hspc", "Hydrogen in SPC water molecule", "Ver. 2.3, Ref. 25"}, {"H", "1.007970", "htip", "Hydrogen in TIP water molecule", "Ver. 2.3, Ref. 25"}, {"H", "1.007970", "h$", "Hydrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"L", "0.001097", "lp", "Lone Pair (massless)", "Ver. 1.0, Ref. 1"}, {"L", "1.000000", "lp", "Lone Pair", "Ver. 1.1, Ref. 2"}, {"H", "1.007970", "h+", "Charged hydrogen in cations", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hc", "Hydrogen bonded to carbon", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hi", "Hydrogen in charged imidazole ring", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hw", "Hydrogen in water molecule", "Ver. 2.0, Ref. 18"}, {"D", "2.014000", "dw", "Deuterium in heavy water", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c", "Sp3 aliphatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cg", "Sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c'", "Sp2 carbon in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c*", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 21"}, {"C", "12.011150", "c\"", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "cp", "Sp2 aromatic carbon (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cr", "Carbon in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c+", "C in guanidinium group", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c-", "Carbon in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ca", "General amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c3", "Sp3 carbon in methyl (CH3) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cn", "Sp3 Carbon bonded to N", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c2", "Sp3 carbon bonded to 2 H's, 2 heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c1", "Sp3 carbon bonded to 1 H, 3 Heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c5", "Sp2 aromatic carbon in five membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cs", "Sp2 carbon involved in thiophene", "Ver. 1.3, Ref. 6"}, {"C", "12.011150", "c=", "Non-aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c=1", "Non-aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "c=2", "Non-aromatic doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "ct", "Sp carbon involved in triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ci", "Aromatic carbon in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c$", "Carbon atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "co", "Sp3 carbon in acetals", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3m", "Sp3 carbon in 3-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4m", "Sp3 carbon in 4-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "coh", "Sp3 carbon in acetals with hydrogen", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3h", "Sp3 carbon in 3-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4h", "Sp3 carbon in 4-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "ci", "Sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n", "Sp2 nitrogen with 1 H, 2 heavy atoms (amide group)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "no", "Sp2 nitrogen in nitro group", "Ver. 2.3, Ref. 23"}, {"N", "14.006700", "n2", "Sp2 nitrogen (NH2 in the guanidinium group (HN=C(NH2)2))", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "np", "Sp2 aromatic nitrogen (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n3", "Sp3 nitrogen with three substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n4", "Sp3 nitrogen with four substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=", "Non-aromatic end double bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=1", "Non-aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "n=2", "Non-aromatic doubly bonded nitrogen", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "nt", "Sp nitrogen involved in triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "nz", "Sp nitrogen in N2", "Ver. 1.3, Ref. 4"}, {"N", "14.006700", "n1", "Sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "ni", "Sp2 nitrogen in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n$", "Nitrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "na", "Sp3 nitrogen in amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n3m", "Sp3 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n4m", "Sp3 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n3n", "Sp2 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n4n", "Sp2 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nb", "Sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nn", "Sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "npc", "Sp2 nitrogen in 5- or 6- membered ring bonded to a heavy atom", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh", "Sp2 nitrogen in 5-or 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nho", "Sp2 nitrogen in 6- membered ring next to a carbonyl group and with a hydrogen", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh+", "Protonated nitrogen in 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n+", "Sp3 nitrogen in protonated amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nr", "Sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o'", "Oxygen in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o", "Sp3 oxygen in ether or ester groups", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oz", "Oxygen in Zeolite", "Ver. 1.8, Ref. 14"}, {"O", "15.999400", "o-", "Oxygen in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oh", "Oxygen in hydroxyl (OH) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o*", "Oxygen in water molecule", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "ospc", "Oxygen in SPC water molecule", "Ver. 2.3, Ref. 25"}, {"O", "15.999400", "otip", "Oxygen in TIP3P water molecule", "Ver. 2.3, Ref. 25"}, {"O", "15.999400", "op", "Oxygen in aromatic rings. e.g. furan", "Ver. 1.3, Ref. 8"}, {"O", "15.999400", "of", "Oxygen ", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o$", "Oxygen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oc", "Sp3 oxygen in ether or acetals", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "oe", "Sp3 oxygen in ester", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o3e", "Sp3 oxygen in three membered ring", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o4e", "Sp3 oxygen in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s", "Sulfur in methionine (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "s1", "Sulfur involved in S-S disulfide bond", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sh", "Sulfur in sulfhydryl (-SH) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sp", "Sulfur in thiophene", "Ver. 1.3, Ref. 6"}, {"S", "32.064000", "s'", "Sulfur in thioketone (>C=S) group", "Ver. 1.3, Ref. 7"}, {"S", "32.064000", "s$", "Sulfur atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sc", "Sp3 sulfur in methionines (C-S-C) group", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s3e", "Sulfur in three membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s4e", "Sulfur in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s-", "Partial double sulfur bonded to something then bonded to another partial double oxygen or sulfur", "Ver. 2.0, Ref. 18"}, {"P", "30.973800", "p", "General phosphorous atom", "Ver. 1.0, Ref. 1"}, {"P", "30.973800", "pz", "Phosphorous atom in ALPO type structure", "Ver. 1.8, Ref. 14"}, {"P", "30.973800", "p$", "Phosphorous atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"Ca", "40.079800", "ca+", "ion Ca2+, mass = mass of Ca - 2*electron mass.", "Ver. 2.0, Ref. 18"}, {"F", "18.998400", "f", "Fluorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "cl", "Chlorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Br", "79.909000", "br", "Bromine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"I", "126.9045", "i", "Covalently bound Iodine", "Ver. 1.3, Ref. 4"}, {"Si", "28.086000", "si", "Silicon ", "Ver. 1.0, Ref. 1"}, {"Si", "28.086000", "sz", "Silicon atom in a Zeolite or Silicate", "Ver. 1.8, Ref. 14"}, {"D", "12.000000", "nu", "atom for relative free energy", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "Cl", "Chloride ion Cl-", "Ver. 1.0, Ref. 1"}, {"Br", "79.904000", "Br", "Bromide ion Br-", "Ver. 1.0, Ref. 1"}, {"Na", "22.989800", "Na", "Sodium ion", "Ver. 1.0, Ref. 1"}, {"Ar", "39.948", "ar", "Argon atom", "Ver. 1.3, Ref. 9"}, {"He", "4.002600", "he", "Helium atom", "Ver. 2.4, Ref. 30"}, {"Al", "26.982000", "al", "Aluminium in alumino-silicate", "Ver. 2.1, Ref. 26"}, {"Al", "26.982000", "az", "Aluminium in alumino-silicate", "Ver. 2.1, Ref. 26"}, {"Al", "26.982000", "Al", "Aluminium metal", "Ver. 2.1, Ref. 26"}, {"Na", "22.990000", "Na", "Sodium metal", "Ver. 2.1, Ref. 26"}, {"Pt", "195.090000", "Pt", "Platinum metal", "Ver. 2.1, Ref. 26"}, {"Pd", "106.400000", "Pd", "Palladium metal", "Ver. 2.1, Ref. 26"}, {"Au", "196.967000", "Au", "Gold metal", "Ver. 2.1, Ref. 26"}, {"Ag", "107.868000", "Ag", "Silver metal", "Ver. 2.1, Ref. 26"}, {"Sn", "118.690000", "Sn", "Tin metal", "Ver. 2.1, Ref. 26"}, {"K", "39.102000", "K", "Potassium metal", "Ver. 2.1, Ref. 26"}, {"Li", "6.940000", "Li", "Lithium metal", "Ver. 2.1, Ref. 26"}, {"Mo", "95.940000", "Mo", "Molybdenum metal", "Ver. 2.1, Ref. 26"}, {"Fe", "55.847000", "Fe", "Iron metal", "Ver. 2.1, Ref. 26"}, {"W", "183.850000", "W", "Tungsten metal", "Ver. 2.1, Ref. 26"}, {"Ni", "58.710000", "Ni", "Nickel metal", "Ver. 2.1, Ref. 26"}, {"Cr", "51.996000", "Cr", "Chromium metal", "Ver. 2.1, Ref. 26"}, {"Cu", "63.546000", "Cu", "Copper metal", "Ver. 2.1, Ref. 26"}, {"Pb", "207.200000", "Pb", "Lead metal", "Ver. 2.1, Ref. 26"}, {"Mg", "100.000000", "mg", "Magnesium ", "Ver. 2.1, Ref. 27"}}; /* Equivalence table for key symbols CVFF auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = CVFF info */ char * CVFF_equivalence_auto[123][11]= {{"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"d", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hn", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hi", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"ho", "hn", "ho", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hspc", "hspc", "hspc", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.3, Ref. 25"}, {"htip", "htip", "htip", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.3, Ref. 25"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"lp", "h", "lp", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"c", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"co", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"c3m", "cg", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"c4m", "cg", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 24"}, {"coh", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ca", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cn", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c2", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c1", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ci", "c'", "ci", "ci_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 21"}, {"c\"", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c'", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"cp", "c'", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c5", "c'", "c5", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cs", "c'", "cs", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cr", "c'", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c+", "c'", "cr", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c=", "c'", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 18"}, {"c=1", "c'", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 18"}, {"na", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"ni", "n", "ni", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n+", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"no", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.3, Ref. 23"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n1", "n", "n1", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n=", "n", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 18"}, {"n=1", "n", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 18"}, {"nz", "n", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 18"}, {"o", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oz", "oz", "oz", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"otip", "otip", "otip", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.3, Ref. 25"}, {"ospc", "ospc", "ospc", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.3, Ref. 25"}, {"oh", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oc", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"op", "o'", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "o'", "o'_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"of", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o-", "o'", "o-", "o-_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s-", "s'", "s-", "s-_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sh", "s", "sh", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 18"}, {"pz", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 18"}, {"ca+", "ca+", "ca+", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "Ver. 2.0, Ref. 18"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 18"}, {"i", "i", "i", "i_", "f_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "cl", "cl_", "f_", "cl_", "c_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 18"}, {"br", "br", "br", "br_", "f_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 18"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 18"}, {"sz", "sz", "sz", "sz", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 18"}, {"nu", "nu", "nu", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "Ver. 2.0, Ref. 18"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 18"}, {"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 18"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 18"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.0, Ref. 18"}, {"he", "he", "he", "he_", "he_", "he_", "he_", "he_", "he_", "he_", "Ver. 2.4, Ref. 30"}, {"az", "si", "az", "az_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"al", "si", "az", "az_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"mg", "mg", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"Al", "Al", "Al", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pb", "Pb", "Pb", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pt", "Pt", "Pt", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pd", "Pd", "Pd", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Au", "Au", "Au", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ag", "Ag", "Ag", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Sn", "Sn", "Sn", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Li", "Li", "Li", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Mo", "Mo", "Mo", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Fe", "Fe", "Fe", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"W", "W", "W", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ni", "Ni", "Ni", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cr", "Cr", "Cr", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cu", "Cu", "Cu", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}}; /* Equivalence table for key symbols CVFF with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = CVFF info */ char * CVFF_equivalence[129][7]= {{"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"d", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hc", "h", "h", "h", "h", "h", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "hs", "hs", "hs", "Ver. 1.0, Ref. 1"}, {"hn", "hn", "hn", "hn", "hn", "hn", "Ver. 1.0, Ref. 1"}, {"ho", "hn", "ho", "ho", "ho", "ho", "Ver. 1.0, Ref. 1"}, {"hi", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hspc", "hspc", "hspc", "hspc", "hspc", "hspc", "Ver. 2.3, Ref. 25"}, {"htip", "htip", "htip", "htip", "htip", "htip", "Ver. 2.3, Ref. 25"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"h$", "h$", "h$", "h$", "h$", "h$", "Ver. 1.0, Ref. 1"}, {"lp", "h", "lp", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"c", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 24"}, {"co", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 24"}, {"c3m", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 24"}, {"c4m", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 24"}, {"coh", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cn", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c1", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c\"", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 21"}, {"cp", "c'", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c5", "c'", "c5", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cs", "c'", "cs", "cs", "cs", "cs", "Ver. 1.3, Ref. 6"}, {"cr", "c'", "cr", "c'", "cr", "c'", "Ver. 1.0, Ref. 1"}, {"c+", "c'", "cr", "c'", "cr", "c'", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "c=1", "c=", "c=1", "c=", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=2", "c=", "c=2", "c=", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct", "ct", "ct", "Ver. 1.0, Ref. 1"}, {"ci", "c'", "ci", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c$", "c$", "c$", "c$", "c$", "c$", "Ver. 1.0, Ref. 1"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"no", "n", "no", "no", "no", "no", "Ver. 2.3, Ref. 23"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n", "n2", "n2", "Ver. 1.0, Ref. 1"}, {"n3", "n", "n3", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"na", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"n+", "n", "n4", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=", "n", "n=", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=1", "n", "n=1", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=2", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt", "nt", "nt", "Ver. 1.0, Ref. 1"}, {"nz", "n", "nz", "nz", "nz", "nz", "Ver. 1.3, Ref. 4"}, {"n1", "n", "n1", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"ni", "n", "ni", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"nh", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n2", "n2", "n2", "Ver. 2.0, Ref. 18"}, {"n$", "n$", "n$", "n$", "n$", "n$", "Ver. 1.0, Ref. 1"}, {"o'", "o'", "o'", "o'", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"o", "o'", "o", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"oz", "oz", "oz", "oz", "oz", "oz", "Ver. 1.8, Ref. 14"}, {"o-", "o'", "o-", "o-", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"oh", "o'", "oh", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"ospc", "ospc", "ospc", "o*", "o*", "o*", "Ver. 2.3, Ref. 25"}, {"otip", "otip", "otip", "o*", "o*", "o*", "Ver. 2.3, Ref. 25"}, {"op", "o'", "op", "op", "op", "op", "Ver. 1.3, Ref. 8"}, {"of", "o'", "oh", "o", "of", "o'", "Ver. 1.0, Ref. 1"}, {"o$", "o$", "o$", "o$", "o$", "o$", "Ver. 1.0, Ref. 1"}, {"oc", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sh", "s", "sh", "sh", "sh", "sh", "Ver. 1.0, Ref. 1"}, {"s'", "s'", "s'", "s'", "s'", "s'", "Ver. 1.3, Ref. 7"}, {"sp", "s'", "sp", "sp", "sp", "sp", "Ver. 1.3, Ref. 6"}, {"s$", "s$", "s$", "s$", "s$", "s$", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"pz", "p", "p", "p", "p", "p", "Ver. 1.8, Ref. 14"}, {"p$", "p$", "p$", "p$", "p$", "p$", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 1.8, Ref. 14"}, {"nu", "nu", "nu", "nu", "nu", "nu", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.3, Ref. 9"}, {"he", "he", "he", "he", "he", "he", "Ver. 2.4, Ref. 30"}, {"al", "sz", "al", "si", "si", "si", "Ver. 2.1, Ref. 26"}, {"az", "sz", "az", "sz", "sz", "sz", "Ver. 2.1, Ref. 26"}, {"Al", "Al", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pt", "Pt", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pd", "Pd", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Au", "Au", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ag", "Ag", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Sn", "Na", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"K", "K", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Li", "Li", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Mo", "Mo", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Fe", "Fe", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"W", "W", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ni", "Ni", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cr", "Cr", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cu", "Cu", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pb", "Pb", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"mg", "mg", "sz", "sz", "sz", "sz", "Ver. 2.1, Ref. 27"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= CVFF info E = K2 * (R - R0)^2 */ char * CVFF_bonds_auto[776][5]= {{"no", "o-", "1.2178", "560.9942", "Ver. 2.3, Ref. 23"}, {"no", "cp", "1.4720", "351.2527", "Ver. 2.3, Ref. 23"}, {"c'", "cp", "1.4720", "351.2527", "Ver. 2.3, Ref. 23"}, {"c", "o", "1.4250", "273.2000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "322.7158", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "283.0924", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "615.3220", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "384.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "540.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "480.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "384.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "420.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "420.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "228.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "379.0809", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "400.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "320.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "280.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"ospc", "hspc", "1.0000", "540.6336", "Ver. 2.3, Ref. 25"}, {"otip", "htip", "0.9570", "540.6336", "Ver. 2.3, Ref. 25"}, {"o*", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "300.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "560.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "245.2000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "480.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "361.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "238.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "222.4000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "392.8000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "398.7500", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "398.2400", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "259.0700", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "236.5500", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "175.6400", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "123.2100", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "833.7200", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "1632.5100", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "1632.5100", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "510.2775", "Ver. 1.3, Ref. 7"}, {"sz", "c", "1.8090", "238.0000", "Ver. 1.0, Ref. 1"}, {"sz", "o", "1.6150", "392.8000", "Ver. 1.8, Ref. 14"}, {"sz", "oz", "1.6150", "392.8000", "Ver. 1.8, Ref. 14"}, {"sz", "oh", "1.6350", "392.8000", "Ver. 1.8, Ref. 14"}, {"sz", "h", "1.3820", "222.4000", "Ver. 1.8, Ref. 14"}, {"oz", "ho", "0.9600", "540.6336", "Ver. 1.8, Ref. 14"}, {"al", "c", "1.8090", "392.8000", "Ver. 2.1, Ref. 26"}, {"al", "h", "1.3820", "392.8000", "Ver. 2.1, Ref. 26"}, {"al", "o", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"al", "oz", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "c", "1.8090", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "o", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "oz", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "oh", "1.7750", "392.8000", "Ver. 2.1, Ref. 26"}, {"az", "h", "1.3820", "392.8000", "Ver. 2.1, Ref. 26"}, {"sz", "f", "1.6650", "392.8000", "Ver. 2.1, Ref. 28"}, {"sz", "sz", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"sz", "az", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"az", "az", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"sz", "al", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"si", "al", "3.0900", "392.8000", "Ver. 2.1, Ref. 28"}, {"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "228.2808", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 18"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 2.0, Ref. 18"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 2.0, Ref. 18"}, {"ci", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "210.6360", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "189.3856", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "227.5604", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "206.3980", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "186.6972", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"np_", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_1", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_2", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_3", "o-_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "461.1848", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "178.0372", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "217.7248", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "196.5940", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "177.2764", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "323.1720", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "493.8480", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "224.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "307.0632", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "284.7988", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "264.9868", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "458.4610", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "204.0505", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "251.7939", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "233.2954", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "213.2317", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "486.0610", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "231.6505", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "279.3939", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "260.8954", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "240.8317", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "255.2524", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "316.8138", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "195.3021", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "211.1368", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "187.6017", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "167.6272", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "210.9800", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "240.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "175.1796", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "236.5449", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "180.5021", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "196.3368", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "172.8017", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "152.8272", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "167.4260", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "224.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "230.3664", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "208.8228", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "183.1472", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "162.7080", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "520.7304", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "345.9024", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "314.1728", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "207.1180", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "193.5000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "209.1876", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "2.4200", "144.0000", "Ver. 2.0, Ref. 18"}}; /* Morse bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= D, 4= ALPHA, 5= CVFF info E = D * (1 - exp(-ALPHA*(R - R0)))^2 */ char * CVFF_morse_bonds[775][6]= {{"c3m_", "c3m_", "1.5100", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "68.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "83.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "66.6000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "71.0829", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "77.7873", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "100.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "145.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "135.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "73.5252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "169.3000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "93.0000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "53.8383", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "60.3455", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "54.4273", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "62.4647", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "57.0702", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "59.8388", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "52.1506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "80.4179", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "64.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "110.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "62.8336", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "96.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "74.3713", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "105.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "59.9506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "58.7607", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "54.3628", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "56.2919", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ci_", "1.3900", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ni", "1.3800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "123.3817", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "200.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "220.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "72.3612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "69.5942", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "91.9541", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "86.6170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "79.7170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "64.0086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "67.7086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "68.3667", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "101.1528", "1.7700", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "69.5983", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "73.0488", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "67.2132", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "62.2317", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "66.8241", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "55.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "52.6590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "75.3158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "66.7770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "59.8770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "48.3711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "52.0711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "54.9881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "47.3464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "56.8901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "51.5995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "46.6743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "54.2016", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "102.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "122.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "93.7906", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "48.3901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "72.7505", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "50.0292", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "65.4265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "58.5265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "45.8238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "49.5238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "52.2884", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "88.7167", "2.2800", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "44.5093", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "54.4312", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "49.1485", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "44.3191", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "51.7353", "2.0000", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.09758", "226.8", "2.6829", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.09758", "226.8000", "2.6829", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.20800", "118.86", "2.6484", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "87.6930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "80.7930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "67.9896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "71.6896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "61.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "98.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "95.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "76.7658", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "71.1997", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "66.2467", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "121.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "68.1000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "90.1047", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "85.3184", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "105.3797", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "131.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "114.6152", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "51.0126", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "62.9485", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "58.3239", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "53.3079", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "113.6866", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "75.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "61.9610", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "65.7436", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "71.5226", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "121.5152", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "57.9126", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "69.8485", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "65.2239", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "60.2079", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "73.0600", "2.0000", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "107.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "63.8131", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "79.2035", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "48.8255", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "52.7842", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "46.9004", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "41.9068", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "61.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "52.7450", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "60.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "43.7949", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "75.5035", "1.7700", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "45.1255", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "49.0842", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "43.2004", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "38.2068", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "41.8565", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "44.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "57.5916", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "52.2057", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "45.7868", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "40.6770", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "42.0518", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.74611", "104.207", "1.9561", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "130.1826", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "86.4756", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "78.5432", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "73.0108", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "72.0792", "2.0000", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.74164", "106.010", "1.9382", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "37.5", "2.6284", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "51.7795", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "48.3750", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "43.5416", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "74.3350", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.988", "58.066", "2.0183", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "52.2969", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "47.3349", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "51.9937", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.290", "46.336", "1.9469", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "41.4039", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "45.0580", "2.0000", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.662", "36.46", "1.8383", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "39.7416", "2.0000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "3.0900", "36.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"no", "o-", "1.2178", "140.2486", "2.0000", "Ver. 2.3, Ref. 23"}, {"no", "cp", "1.4720", "87.8132", "2.0000", "Ver. 2.3, Ref. 23"}, {"c'", "cp", "1.4720", "87.8132", "2.0000", "Ver. 2.3, Ref. 23"}, {"c", "o", "1.4250", "68.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "88.0000", "1.9150", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "145.0000", "2.0600", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "135.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "105.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "105.0000", "2.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "57.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "121.0000", "1.7700", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "100.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "80.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"ospc", "hspc", "1.0000", "104.0000", "2.2800", "Ver. 2.3, Ref. 25"}, {"otip", "htip", "0.9570", "104.0000", "2.2800", "Ver. 2.3, Ref. 25"}, {"o*", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "75.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "61.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "90.4000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "59.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "55.6000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "98.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "104.207", "1.9561", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "106.010", "1.9382", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "37.5", "2.6284", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "58.066", "2.0183", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "46.336", "1.9469", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "36.46", "1.8383", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "118.86", "2.6484", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "169.3000", "1.7361", "Ver. 1.3, Ref. 7"}, {"oz", "ho", "0.9600", "104.0000", "2.2800", "Ver. 1.8, Ref. 14"}, {"sz", "o", "1.6150", "98.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"sz", "oz", "1.6150", "98.2000", "2.0000", "Ver. 1.8, Ref. 14"}, {"sz", "oh", "1.6350", "98.2000", "2.0000", "Ver. 1.8, Ref. 14"}, {"sz", "h", "1.3820", "55.6000", "2.0000", "Ver. 1.8, Ref. 14"}, {"sz", "c", "1.8090", "59.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"al", "c", "1.8090", "59.5000", "2.0000", "Ver. 2.1, Ref. 26"}, {"al", "h", "1.3820", "55.6000", "2.0000", "Ver. 2.1, Ref. 26"}, {"al", "o", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"al", "oz", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "oz", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "oh", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "h", "1.3820", "55.6000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "c", "1.8090", "59.5000", "2.0000", "Ver. 2.1, Ref. 26"}, {"az", "o", "1.7750", "98.2000", "2.0000", "Ver. 2.1, Ref. 26"}, {"sz", "sz", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}, {"sz", "az", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}, {"si", "al", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}, {"az", "az", "3.0900", "392.8000", "2.0000", "Ver. 2.1, Ref. 28"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= CVFF info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * CVFF_angles_auto[563][6]= {{"cp", "cp", "c'", "120.0000", "34.6799", "Ver. 2.3, Ref. 23"}, {"cp", "c'", "o", "120.0000", "54.4949", "Ver. 2.3, Ref. 23"}, {"cp", "c'", "o'", "120.0000", "54.4949", "Ver. 2.3, Ref. 23"}, {"cp", "cp", "no", "120.0000", "34.6799", "Ver. 2.3, Ref. 23"}, {"cp", "no", "o-", "120.0000", "54.4949", "Ver. 2.3, Ref. 23"}, {"o-", "no", "o-", "120.0000", "113.5731", "Ver. 2.3, Ref. 23"}, {"c", "o", "c'", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "h", "106.4000", "39.5000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "109.5000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "hn", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "118.0000", "111.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "c", "122.0000", "35.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "h", "109.5000", "51.5000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"c", "o", "ho", "106.0000", "58.5000", "Ver. 1.0, Ref. 1"}, {"o", "c", "h", "109.5000", "57.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"o", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "hn", "125.0000", "33.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "o", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o", "110.0000", "122.8000", "Ver. 1.0, Ref. 1"}, {"c'", "o", "ho", "112.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o", "110.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"o-", "c'", "o-", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o-", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o-", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "120.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "ho", "109.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o", "cp", "cp", "120.0000", "60.0000", "Ver. 1.0, Ref. 1"}, {"c", "sh", "hs", "96.0000", "48.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "sh", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "sh", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "c", "99.0000", "58.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "109.5000", "75.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n3", "109.5000", "57.3000", "Ver. 1.0, Ref. 1"}, {"hn", "n3", "hn", "105.5000", "36.0000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "c", "112.0000", "86.3000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "hn", "110.0000", "41.6000", "Ver. 1.0, Ref. 1"}, {"c", "c", "n3", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "c5", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c5", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "c5", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c5", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"np", "c5", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c5", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "cp", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"n3", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "o", "c", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "h*", "104.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"hspc", "ospc", "hspc", "109.4700", "50.0000", "Ver. 2.3, Ref. 25"}, {"htip", "otip", "htip", "104.5200", "50.0000", "Ver. 2.3, Ref. 25"}, {"p", "o", "c", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "p", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o'", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "o-", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c", "128.8000", "70.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "o", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "h", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "c", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "h", "120.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=2", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "h", "121.2000", "33.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "np", "c=", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=1", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c'", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=2", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"cp", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "c", "107.8000", "99.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "h", "107.1000", "62.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "c", "107.8000", "85.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "h", "107.1000", "67.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "c", "107.8000", "96.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "h", "107.1000", "56.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "cp", "120.0000", "99.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "cp", "120.0000", "85.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "cp", "120.0000", "96.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "h", "112.3000", "34.6000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "113.5000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "si", "h", "109.1000", "32.7000", "Ver. 1.0, Ref. 1"}, {"h", "si", "h", "112.0000", "31.8000", "Ver. 1.0, Ref. 1"}, {"si", "c", "si", "122.5000", "42.2000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "117.3000", "44.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "h", "113.4000", "33.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "149.8000", "31.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "113.1000", "42.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "124.1000", "56.4000", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "cp", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"nt", "nt", "c", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"cs", "c5", "c5", "112.7000", "70.0000", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"c5", "cs", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "92.5670", "126.5060", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "c5", "111.0390", "88.7595", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "h", "119.9000", "30.2723", "Ver. 1.3, Ref. 6"}, {"s'", "c'", "h", "121.6300", "40.9360", "Ver. 1.3, Ref. 7"}, {"h", "c'", "h", "117.0200", "26.3900", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"s'", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"c5", "op", "c5", "120.0000", "75.0000", "Ver. 1.3, Ref. 8"}, {"sz", "oz", "sz", "149.8000", "31.1000", "Ver. 1.8, Ref. 14"}, {"oz", "sz", "oz", "109.4700", "100.3000", "Ver. 1.8, Ref. 14"}, {"oz", "sz", "h", "113.4000", "33.3000", "Ver. 1.8, Ref. 14"}, {"sz", "oz", "ho", "113.4000", "33.3000", "Ver. 1.8, Ref. 14"}, {"az", "oz", "ho", "113.4000", "33.3000", "Ver. 1.8, Ref. 14"}, {"h", "sz", "h", "112.0000", "31.8000", "Ver. 1.8, Ref. 14"}, {"al", "oz", "al", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "oz", "109.4700", "100.3000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"h", "al", "h", "112.0000", "31.8000", "Ver. 2.1, Ref. 26"}, {"az", "oz", "az", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"oz", "az", "oz", "109.4700", "100.3000", "Ver. 2.1, Ref. 26"}, {"oz", "az", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"h", "az", "h", "112.0000", "31.8000", "Ver. 2.1, Ref. 26"}, {"o", "al", "o", "113.1000", "42.3000", "Ver. 2.1, Ref. 26"}, {"o", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"al", "oz", "sz", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"o", "az", "o", "109.4700", "42.3000", "Ver. 2.1, Ref. 26"}, {"o", "az", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"f", "sz", "oz", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"sz", "f", "sz", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"f", "sz", "sz", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"f", "sz", "f", "113.1000", "42.3000", "Ver. 2.1, Ref. 28"}, {"sz", "sz", "sz", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"sz", "az", "sz", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"az", "sz", "sz", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"si", "si", "si", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"si", "al", "si", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"al", "si", "si", "109.4700", "5.0000", "Ver. 2.1, Ref. 28"}, {"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "c3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "c3m_", "60.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "c3m_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c3m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c3m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c4m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c4m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n3m_", "125.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n4m_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "c3m_", "113.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "c3m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n3m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "*", "110.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "c4m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n4m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "*", "120.0010", "72.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "op_", "*", "106.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s3e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s3e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s4e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s4e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"o_", "c'_", "*", "110.0000", "122.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c'_", "*", "123.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "*", "110.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "h_", "120.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 18"}, {"f_", "c'_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c'_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "c_", "114.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cp_", "*", "120.0000", "37.0000", "Ver. 2.0, Ref. 18"}, {"f_", "cp_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "cp_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c=_", "*", "120.0000", "37.5000", "Ver. 2.0, Ref. 18"}, {"f_", "c=_", "*", "120.0000", "96.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c=_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"f_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "na_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"si_", "na_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n_", "*", "120.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"f_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n_", "*", "122.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n_", "*", "120.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"f_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"si_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"*", "nt_", "*", "180.0", "50.0", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "o_", "*", "109.0000", "58.5000", "Ver. 2.0, Ref. 18"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"f_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "*", "124.1000", "56.4000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "si", "149.8000", "31.1000", "Ver. 2.0, Ref. 18"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "*", "102.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"h_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"f_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"si_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "*", "120.0000", "110.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "*", "120.0000", "100.0000", "Ver. 2.0, Ref. 18"}, {"h_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"f_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"si_", "p_", "*", "109.5000", "30.0000", "Ver. 2.0, Ref. 18"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "*", "117.3000", "44.1000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "*", "113.4000", "33.3000", "Ver. 2.0, Ref. 18"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= CVFF info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * CVFF_torsions_auto[295][8]= {{"*", "c_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n3n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "n3n_", "*", "0.3000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "n3n_", "*", "0.3000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c_", "*", "0.1580", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c'_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "cp_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_1", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_2", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_3", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "na_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "o_", "*", "0.1300", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "s_", "*", "0.1367", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "p_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "si_", "*", "0.1111", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c'_", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "cp_", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_1", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_2", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_3", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "*", "3.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "h_", "1.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_1", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_2", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_3", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "*", "5.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "o_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "op", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "sp_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "cp_", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_1", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_2", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_3", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "na_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "*", "2.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "h_", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_1", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_2", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_3", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "*", "1.8000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "op", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "p_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_2", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_1", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_2", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c+_", "n_", "*", "3.4000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "o_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "s_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "na_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "o_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "s_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "si_", "*", "0.0667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n_", "*", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "h_", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "np_", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "o_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "op", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "s_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "sp_", "*", "10.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "si_", "*", "0.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "np_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "op", "*", "5.50000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "sp_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "si_", "*", "0.1250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_2", "*", "7.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "o_", "*", "5.0000", "3", "0.", "Ver. 2.0, Ref. 22"}, {"*", "o_", "s_", "*", "5.0000", "3", "0.", "Ver. 2.0, Ref. 22"}, {"*", "o_", "si_", "*", "0.3333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "s_", "*", "5.5000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "si_", "*", "0.2333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "p_", "*", "0.0000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp", "no", "*", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"*", "cp", "c'", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c", "*", "1.4225", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c'", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "n", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "o", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "of", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "n2", "*", "6.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cr", "n2", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "cr", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "o", "*", "4.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "cp", "*", "12.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "c", "*", "0.0000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c", "cp", "0.6750", "4", "0.0000", "Ver. 1.9, Ref. 17"}, {"*", "ct", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "o", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "ct", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "c'", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "o", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "n", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "s", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "o", "*", "1.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "c", "1.8000", "2", "180.0000", "Ver. 1.9, Ref. 16"}, {"*", "cp", "of", "*", "3.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "sh", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "s", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "s", "*", "5.5000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n3", "c", "*", "0.8000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n2", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n2", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "p", "o", "*", "0.7500", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c=", "*", "16.3000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=1", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c", "*", "1.2660", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "np", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=", "*", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=1", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c'", "c=2", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "cs", "cp", "*", "6.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "cp", "12.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "h", "3.9316", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "cp", "6.4517", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "h", "2.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"c", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "hn", "1.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "c", "3.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "hn", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "c", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "h", "0.2800", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "si", "-1.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "c", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "o", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "si", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "o", "0.3000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "c", "0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "c", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "h", "0.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"sz", "oz", "sz", "oz", "0.3000", "3", "0.0000", "Ver. 1.8, Ref. 14"}, {"h", "sz", "oz", "sz", "1.0000", "3", "0.0000", "Ver. 1.8, Ref. 14"}}; /* Out of plane / impropers / improper 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= CVFF info E = K * (Chi - Chi0)^2 */ char * CVFF_impropers[41][8]= {{"c'", "cp", "cp", "cp", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"cp", "c'", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"cp", "no", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"cp", "cp", "cp", "no", "10.0000", "2", "180.0000", "Ver. 2.3, Ref. 23"}, {"c", "c'", "n", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n2", "c'", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "c", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "n", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "c", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o'", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "hn", "hn", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n2", "n2", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c'", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "np", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"sp", "cs", "cp", "h", "2.9998", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cp", "cp", "cs", "h", "0.3700", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"h", "c'", "s'", "h", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "s'", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"*", "c'_", "*", "*", "10.0000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "*", "11.1000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}}; /* Non-bonded (12-6) 0= Key, 1= A, 2= B, 3= CVFF info E = Aij/r^12 - Bij/r^6 where Aij = sqrt( Ai * Aj ) Bij = sqrt( Bi * Bj )0 */ char * CVFF_vdw[45][4]= {{"h", "7108.4660", "32.87076", "Ver. 1.0, Ref. 1"}, {"cg", "1790340.7240", "528.48190", "Ver. 1.0, Ref. 1"}, {"o'", "272894.7846", "498.87880", "Ver. 1.0, Ref. 1"}, {"oz", "272894.7846", "498.87880", "Ver. 1.8, Ref. 14"}, {"n", "2266872.4000", "1230.55700", "Ver. 1.0, Ref. 1"}, {"c'", "2968753.3590", "1325.70810", "Ver. 1.0, Ref. 1"}, {"c", "1981049.2250", "1125.99800", "Ver. 1.0, Ref. 1"}, {"hn", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"s", "365906.4000", "250.80000", "Ver. 1.0, Ref. 1"}, {"s'", "1395550.1000", "956.80800", "Ver. 1.3, Ref. 6"}, {"o*", "629358.0000", "625.50000", "Ver. 1.0, Ref. 1"}, {"ospc", "629358.0000", "625.50000", "Ver. 2.3, Ref. 25"}, {"otip", "582000.0000", "595.00000", "Ver. 2.3, Ref. 25"}, {"h*", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"hspc", "0.00000001", "0.00000", "Ver. 2.3, Ref. 25"}, {"htip", "0.00000001", "0.00000", "Ver. 2.3, Ref. 25"}, {"p", "6025894.0000", "2195.60000", "Ver. 1.0, Ref. 1"}, {"ca+", "119025.0000", "240.25000", "Ver. 2.0, Ref. 20"}, {"si", "3149175.0000", "710.00000", "Ver. 1.0, Ref. 1"}, {"sz", "3149175.0000", "710.00000", "Ver. 1.8, Ref. 14"}, {"f", "201106.0000", "235.20000", "Ver. 1.0, Ref. 1"}, {"cl", "1059166.0000", "541.00000", "Ver. 1.0, Ref. 1"}, {"br", "3572030.0000", "1195.00000", "Ver. 1.0, Ref. 1"}, {"Na", "14000.0000", "300.00000", "Ver. 1.0, Ref. 1"}, {"Cl", "25552052.0000", "3307.00450", "Ver. 1.0, Ref. 1"}, {"Br", "34375640.0000", "3517.84460", "Ver. 1.0, Ref. 1"}, {"ar", "2312930.0000", "1484.09200", "Ver. 1.3, Ref. 9"}, {"he", "6315.5582", "22.64953", "Ver. 2.4, Ref. 30"}, {"nu", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"Al", "3784321.4254", "11699.84934", "Ver. 2.1, Ref. 27"}, {"Au", "4603936.5046", "13692.05223", "Ver. 2.1, Ref. 27"}, {"Pb", "24856948.1942", "23280.48320", "Ver. 2.1, Ref. 27"}, {"Ni", "955901.6916", "6768.92014", "Ver. 2.1, Ref. 27"}, {"Pd", "2581174.9390", "10078.92459", "Ver. 2.1, Ref. 27"}, {"Pt", "4576819.9618", "16963.30818", "Ver. 2.1, Ref. 27"}, {"Ag", "3712095.6064", "10865.51833", "Ver. 2.1, Ref. 27"}, {"Cu", "1007210.0670", "6166.70278", "Ver. 2.1, Ref. 27"}, {"Cr", "1222517.4049", "7523.46700", "Ver. 2.1, Ref. 27"}, {"Fe", "1186612.1982", "7590.28296", "Ver. 2.1, Ref. 27"}, {"Li", "5192358.6600", "9916.81768", "Ver. 2.1, Ref. 27"}, {"Mo", "5869689.0344", "21298.66304", "Ver. 2.1, Ref. 27"}, {"W", "7876811.6340", "27853.23915", "Ver. 2.1, Ref. 27"}, {"al", "11422865.0000", "2282.96606", "Ver. 2.2, Ref. 29"}, {"mg", "3149175.0000", "710.00000", "Ver. 2.1, Ref. 27"}, {"K", "24856948.1942", "23280.48320", "Ver. 2.1, Ref. 27"}}; /* Bond increments To implement atomic charges */ char * CVFF_bond_increments[683][5]= {{"no", "o-", "0.1684", "-0.1684", "Ver. 2.3, Ref. 23"}, {"no", "cp", "-0.1792", "0.1792", "Ver. 2.3, Ref. 23"}, {"c'", "cp", "-0.1792", "0.1792", "Ver. 2.0, Ref. 18"}, {"c", "cr", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "0.0700", "-0.5700", "Ver. 1.0, Ref. 1"}, {"ci", "h", "-0.2300", "0.2300", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "0.3200", "-0.0700", "Ver. 1.0, Ref. 1"}, {"cr", "n", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"cr", "n1", "0.5000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"n", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "0.0000", "0.5000", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "-0.1400", "0.1400", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "-0.1100", "0.3600", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "-0.3600", "0.3600", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "-0.2233", "0.2233", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "-0.4100", "0.4100", "Ver. 1.0, Ref. 1"}, {"ospc", "hspc", "-0.4100", "0.4100", "Ver. 2.3, Ref. 25"}, {"otip", "htip", "-0.4170", "0.4170", "Ver. 2.3, Ref. 25"}, {"o*", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"s-", "p", "-0.6824", "0.1824", "Ver. 2.0, Ref. 18"}, {"oz", "sz", "-0.1500", "0.1500", "Ver. 1.8, Ref. 14"}, {"sh", "hs", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"h", "sz", "0.0200", "-0.0200", "Ver. 1.8, Ref. 14"}, {"d", "d", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"p", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cs", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "0.0865", "-0.0865", "Ver. 2.0, Ref. 18"}, {"c", "ct", "0.0400", "-0.0400", "Ver. 1.2, Ref. 3"}, {"c", "n3", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n=", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=1", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=2", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n4", "0.4200", "-0.1700", "Ver. 1.0, Ref. 1"}, {"c", "nt", "0.1000", "-0.1000", "Ver. 1.3, Ref. 5"}, {"c", "nz", "0.3640", "-0.3640", "Ver. 2.0, Ref. 18"}, {"c", "o", "0.1500", "-0.1500", "Ver. 1.0, Ref. 1"}, {"c", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c", "oz", "0.1742", "-0.1742", "Ver. 2.0, Ref. 18"}, {"c", "op", "0.3957", "-0.3957", "Ver. 2.0, Ref. 18"}, {"c", "s", "-0.0500", "0.0500", "Ver. 1.0, Ref. 1"}, {"c", "sh", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "sp", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "s'", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "p", "-0.0785", "0.0785", "Ver. 2.0, Ref. 18"}, {"c", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "f", "0.2750", "-0.2750", "Ver. 1.0, Ref. 1"}, {"c", "cl", "0.2260", "-0.2260", "Ver. 1.0, Ref. 1"}, {"c", "br", "0.1920", "-0.1920", "Ver. 1.0, Ref. 1"}, {"c", "i", "0.1120", "-0.1120", "Ver. 2.0, Ref. 18"}, {"c", "si", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c'", "c5", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "cs", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c-", "-0.1368", "0.1368", "Ver. 2.0, Ref. 18"}, {"c'", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 18"}, {"c'", "n3", "-0.0442", "0.0442", "Ver. 2.0, Ref. 18"}, {"c'", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n4", "0.1331", "0.1169", "Ver. 2.0, Ref. 18"}, {"c'", "nt", "0.1641", "-0.1641", "Ver. 2.0, Ref. 18"}, {"c'", "o", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oz", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"c'", "op", "0.0300", "-0.0300", "Ver. 1.4, Ref. 10"}, {"c'", "o'", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"c'", "s", "-0.1528", "0.1528", "Ver. 2.0, Ref. 18"}, {"c'", "sh", "-0.2033", "0.2033", "Ver. 2.0, Ref. 18"}, {"c'", "sp", "-0.1079", "0.1079", "Ver. 2.0, Ref. 18"}, {"c'", "s'", "0.0", "0.0", "Ver. 1.3, Ref. 7"}, {"c'", "p", "-0.3283", "0.3283", "Ver. 2.0, Ref. 18"}, {"c'", "h", "-0.2132", "0.2132", "Ver. 1.0, Ref. 1"}, {"c'", "f", "0.1116", "-0.1116", "Ver. 2.0, Ref. 18"}, {"c'", "cl", "-0.0594", "0.0594", "Ver. 2.0, Ref. 18"}, {"c'", "br", "-0.1152", "0.1152", "Ver. 2.0, Ref. 18"}, {"c'", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 18"}, {"c'", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 18"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cp", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cp", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cp", "n", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "0.1050", "-0.1050", "Ver. 1.1, Ref. 2"}, {"cp", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cp", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cp", "o", "0.0282", "-0.0282", "Ver. 1.9, Ref. 16"}, {"cp", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cp", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cp", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cp", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cp", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"cp", "f", "0.1300", "-0.1300", "Ver. 1.0, Ref. 1"}, {"cp", "cl", "0.1020", "-0.1020", "Ver. 1.0, Ref. 1"}, {"cp", "br", "0.0800", "-0.0800", "Ver. 1.0, Ref. 1"}, {"cp", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cp", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c5", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cs", "0.0000", "0.0000", "Ver. 1.3, Ref. 6"}, {"c5", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c5", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c5", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c5", "n", "0.1100", "-0.1100", "Ver. 1.4, Ref. 10"}, {"c5", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "np", "0.1400", "-0.1400", "Ver. 1.0, Ref. 1"}, {"c5", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c5", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c5", "o", "0.1100", "-0.1100", "Ver. 1.2, Ref. 3"}, {"c5", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c5", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c5", "op", "0.1100", "-0.1100", "Ver. 1.3, Ref. 8"}, {"c5", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c5", "s", "-0.1500", "0.1500", "Ver. 1.2, Ref. 3"}, {"c5", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c5", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c5", "h", "-0.1300", "0.1300", "Ver. 1.0, Ref. 1"}, {"c5", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c5", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c5", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c5", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c5", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"cs", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cs", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cs", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cs", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cs", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cs", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"cs", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cs", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cs", "sp", "-0.1500", "0.1500", "Ver. 1.3, Ref. 6"}, {"cs", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cs", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cs", "h", "-0.1300", "0.1300", "Ver. 1.3, Ref. 6"}, {"cs", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"cs", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"cs", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"cs", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cs", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=1", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=1", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=1", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=1", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=1", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=1", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=1", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=1", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=1", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=1", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=1", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=1", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=1", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=2", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=2", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=2", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=2", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=2", "nt", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=2", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=2", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=2", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=2", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=2", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=2", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=2", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=2", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=2", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=2", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c-", "ct", "0.0432", "-0.0432", "Ver. 2.0, Ref. 18"}, {"c-", "n3", "0.0824", "-0.0824", "Ver. 2.0, Ref. 18"}, {"c-", "n", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=1", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "np", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n4", "0.2597", "-0.0097", "Ver. 2.0, Ref. 18"}, {"c-", "nt", "0.2854", "-0.2854", "Ver. 2.0, Ref. 18"}, {"c-", "o", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "oh", "-0.0058", "0.0058", "Ver. 2.0, Ref. 18"}, {"c-", "oz", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "op", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "o'", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "s", "-0.0146", "0.0146", "Ver. 2.0, Ref. 18"}, {"c-", "sh", "-0.0650", "0.0650", "Ver. 2.0, Ref. 18"}, {"c-", "sp", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s'", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s-", "-0.1223", "-0.3777", "Ver. 2.0, Ref. 18"}, {"c-", "p", "-0.1744", "0.1744", "Ver. 2.0, Ref. 18"}, {"c-", "h", "-0.1549", "0.1549", "Ver. 2.0, Ref. 18"}, {"c-", "f", "0.2241", "-0.2241", "Ver. 2.0, Ref. 18"}, {"c-", "cl", "0.0747", "-0.0747", "Ver. 2.0, Ref. 18"}, {"c-", "br", "0.0281", "-0.0281", "Ver. 2.0, Ref. 18"}, {"c-", "i", "0.0185", "-0.0185", "Ver. 2.0, Ref. 18"}, {"c-", "si", "-0.2775", "0.2775", "Ver. 2.0, Ref. 18"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"ct", "n3", "0.0419", "-0.0419", "Ver. 2.0, Ref. 18"}, {"ct", "n", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=1", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "np", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n4", "0.2181", "0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "nt", "0.2454", "-0.2454", "Ver. 2.0, Ref. 18"}, {"ct", "o", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "oh", "-0.0420", "0.0420", "Ver. 2.0, Ref. 18"}, {"ct", "oz", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "op", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "o'", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "s", "-0.0581", "0.0581", "Ver. 2.0, Ref. 18"}, {"ct", "sh", "-0.1082", "0.1082", "Ver. 2.0, Ref. 18"}, {"ct", "sp", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "s'", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "p", "-0.2216", "0.2216", "Ver. 2.0, Ref. 18"}, {"ct", "h", "-0.2000", "0.2000", "Ver. 1.2, Ref. 3"}, {"ct", "f", "0.1873", "-0.1873", "Ver. 2.0, Ref. 18"}, {"ct", "cl", "0.0319", "-0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "br", "-0.0173", "0.0173", "Ver. 2.0, Ref. 18"}, {"ct", "i", "-0.0281", "0.0281", "Ver. 2.0, Ref. 18"}, {"ct", "si", "-0.3266", "0.3266", "Ver. 2.0, Ref. 18"}, {"n3", "n3", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n3", "n", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=1", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "np", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n4", "0.1650", "0.0850", "Ver. 2.0, Ref. 18"}, {"n3", "nt", "0.1927", "-0.1927", "Ver. 2.0, Ref. 18"}, {"n3", "o", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "oh", "-0.0754", "0.0754", "Ver. 2.0, Ref. 18"}, {"n3", "oz", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "op", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "o'", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "s", "-0.0967", "0.0967", "Ver. 2.0, Ref. 18"}, {"n3", "sh", "-0.1434", "0.1434", "Ver. 2.0, Ref. 18"}, {"n3", "sp", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "s'", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "p", "-0.2518", "0.2518", "Ver. 2.0, Ref. 18"}, {"n3", "h", "-0.2386", "0.2386", "Ver. 2.0, Ref. 18"}, {"n3", "f", "0.1415", "-0.1415", "Ver. 2.0, Ref. 18"}, {"n3", "cl", "-0.0117", "0.0117", "Ver. 2.0, Ref. 18"}, {"n3", "br", "-0.0601", "0.0601", "Ver. 2.0, Ref. 18"}, {"n3", "i", "-0.0714", "0.0714", "Ver. 2.0, Ref. 18"}, {"n3", "si", "-0.3501", "0.3501", "Ver. 2.0, Ref. 18"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n2", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n2", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=1", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=1", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=1", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=1", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=1", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=1", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=1", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=1", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=1", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=1", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=1", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=2", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"np", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"np", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"np", "nt", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"np", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"np", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"np", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"np", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"np", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"np", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"np", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"np", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"np", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"np", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n4", "n4", "0.2500", "0.2500", "Ver. 2.0, Ref. 18"}, {"n4", "nt", "0.2842", "-0.0342", "Ver. 2.0, Ref. 18"}, {"n4", "o", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "oh", "0.0242", "0.2258", "Ver. 2.0, Ref. 18"}, {"n4", "oz", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "op", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "o'", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "s", "-0.0257", "0.2757", "Ver. 2.0, Ref. 18"}, {"n4", "sh", "-0.0723", "0.3223", "Ver. 2.0, Ref. 18"}, {"n4", "sp", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "s'", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "p", "-0.1994", "0.4494", "Ver. 2.0, Ref. 18"}, {"n4", "h", "-0.1978", "0.4478", "Ver. 2.0, Ref. 18"}, {"n4", "f", "0.2438", "0.0062", "Ver. 2.0, Ref. 18"}, {"n4", "cl", "0.0642", "0.1858", "Ver. 2.0, Ref. 18"}, {"n4", "br", "0.0048", "0.2452", "Ver. 2.0, Ref. 18"}, {"n4", "i", "-0.0114", "0.2614", "Ver. 2.0, Ref. 18"}, {"n4", "si", "-0.3083", "0.5583", "Ver. 2.0, Ref. 18"}, {"nt", "nt", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"nt", "o", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nt", "oh", "-0.2490", "0.2490", "Ver. 2.0, Ref. 18"}, {"nt", "oz", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nt", "op", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nt", "o'", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nt", "s", "-0.3010", "0.3010", "Ver. 2.0, Ref. 18"}, {"nt", "sh", "-0.3457", "0.3457", "Ver. 2.0, Ref. 18"}, {"nt", "sp", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nt", "s'", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nt", "p", "-0.4691", "0.4691", "Ver. 2.0, Ref. 18"}, {"nt", "h", "-0.4688", "0.4688", "Ver. 2.0, Ref. 18"}, {"nt", "f", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"nt", "cl", "-0.2141", "0.2141", "Ver. 2.0, Ref. 18"}, {"nt", "br", "-0.2727", "0.2727", "Ver. 2.0, Ref. 18"}, {"nt", "i", "-0.2889", "0.2889", "Ver. 2.0, Ref. 18"}, {"nt", "si", "-0.5738", "0.5738", "Ver. 2.0, Ref. 18"}, {"o", "o", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"o", "oh", "-0.0921", "0.0921", "Ver. 2.0, Ref. 18"}, {"o", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"o", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"o", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"o", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "p", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"o", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"o", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"o", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"o", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"o", "si", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "oh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oh", "oz", "0.0921", "-0.0921", "Ver. 2.0, Ref. 18"}, {"oh", "op", "0.2853", "-0.2853", "Ver. 2.0, Ref. 18"}, {"oh", "s", "-0.0063", "0.0063", "Ver. 2.0, Ref. 18"}, {"oh", "sh", "-0.0485", "0.0485", "Ver. 2.0, Ref. 18"}, {"oh", "sp", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "s'", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "p", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "h", "-0.1190", "0.1190", "Ver. 2.0, Ref. 18"}, {"oh", "f", "0.1983", "-0.1983", "Ver. 2.0, Ref. 18"}, {"oh", "cl", "0.0686", "-0.0686", "Ver. 2.0, Ref. 18"}, {"oh", "br", "0.0295", "-0.0295", "Ver. 2.0, Ref. 18"}, {"oh", "i", "0.0216", "-0.0216", "Ver. 2.0, Ref. 18"}, {"oh", "si", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oh", "sz", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oh", "az", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oz", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oz", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"oz", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"oz", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"oz", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "p", "-0.2548", "0.2548", "Ver. 2.0, Ref. 18"}, {"oz", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"oz", "ho", "-0.1", "0.1", "Ver. 2.0, Ref. 18"}, {"oz", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"oz", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"oz", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"oz", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"oz", "si", "-0.1500", "0.1500", "Ver. 2.0, Ref. 18"}, {"oz", "sz", "-0.1500", "0.1500", "Ver. 2.0, Ref. 18"}, {"oz", "az", "-0.0", "0.0", "Ver. 2.0, Ref. 18"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"op", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"op", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"op", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 18"}, {"op", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"op", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"op", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"op", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"op", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"op", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o'", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"o'", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"o'", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o'", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"o'", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"o'", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"o'", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"o'", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"o'", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"s", "s", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s", "sh", "-0.0509", "0.0509", "Ver. 2.0, Ref. 18"}, {"s", "sp", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "s'", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "p", "-0.1600", "0.1600", "Ver. 2.0, Ref. 18"}, {"s", "h", "-0.1392", "0.1392", "Ver. 2.0, Ref. 18"}, {"s", "f", "0.2380", "-0.2380", "Ver. 2.0, Ref. 18"}, {"s", "cl", "0.0898", "-0.0898", "Ver. 2.0, Ref. 18"}, {"s", "br", "0.0437", "-0.0437", "Ver. 2.0, Ref. 18"}, {"s", "i", "0.0345", "-0.0345", "Ver. 2.0, Ref. 18"}, {"s", "si", "-0.2634", "0.2634", "Ver. 2.0, Ref. 18"}, {"sh", "sh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sh", "sp", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "s'", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "p", "-0.1032", "0.1032", "Ver. 2.0, Ref. 18"}, {"sh", "h", "-0.0787", "0.0787", "Ver. 2.0, Ref. 18"}, {"sh", "f", "0.2794", "-0.2794", "Ver. 2.0, Ref. 18"}, {"sh", "cl", "0.1392", "-0.1392", "Ver. 2.0, Ref. 18"}, {"sh", "br", "0.0966", "-0.0966", "Ver. 2.0, Ref. 18"}, {"sh", "i", "0.0889", "-0.0889", "Ver. 2.0, Ref. 18"}, {"sh", "si", "-0.2032", "0.2032", "Ver. 2.0, Ref. 18"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"sp", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"sp", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"sp", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"sp", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"sp", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"sp", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"s'", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"s'", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"s'", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"s'", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"s'", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"s'", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"s'", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"p", "h", "0.0356", "-0.0356", "Ver. 2.0, Ref. 18"}, {"p", "f", "0.3869", "-0.3869", "Ver. 2.0, Ref. 18"}, {"p", "cl", "0.2544", "-0.2544", "Ver. 2.0, Ref. 18"}, {"p", "br", "0.2156", "-0.2156", "Ver. 2.0, Ref. 18"}, {"p", "i", "0.2110", "-0.2110", "Ver. 2.0, Ref. 18"}, {"p", "si", "-0.1069", "0.1069", "Ver. 2.0, Ref. 18"}, {"h", "h", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"h", "f", "0.3823", "-0.3823", "Ver. 2.0, Ref. 18"}, {"h", "cl", "0.2404", "-0.2404", "Ver. 2.0, Ref. 18"}, {"h", "br", "0.1978", "-0.1978", "Ver. 2.0, Ref. 18"}, {"h", "i", "0.1923", "-0.1923", "Ver. 2.0, Ref. 18"}, {"h", "si", "0.0200", "-0.0200", "Ver. 1.0, Ref. 1"}, {"f", "f", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"f", "cl", "-0.1589", "0.1589", "Ver. 2.0, Ref. 18"}, {"f", "br", "-0.2099", "0.2099", "Ver. 2.0, Ref. 18"}, {"f", "i", "-0.2234", "0.2234", "Ver. 2.0, Ref. 18"}, {"f", "si", "-0.4789", "0.4789", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"cl", "br", "-0.0507", "0.0507", "Ver. 2.0, Ref. 18"}, {"cl", "i", "-0.0623", "0.0623", "Ver. 2.0, Ref. 18"}, {"cl", "si", "-0.3598", "0.3598", "Ver. 2.0, Ref. 18"}, {"br", "br", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"br", "i", "-0.0110", "0.0110", "Ver. 2.0, Ref. 18"}, {"br", "si", "-0.3272", "0.3272", "Ver. 2.0, Ref. 18"}, {"i", "i", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"i", "si", "-0.3263", "0.3263", "Ver. 2.0, Ref. 18"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}}; Atomes-GNU-1.1.14/src/calc/force_fields/cvff_aug.c000066400000000000000000014174531457665371200215550ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cvff_aug.c * @short CVFF_aug force field, from 'CVFF_aug.frc' * @author Sébastien Le Roux */ /* * This file: 'cvff_aug.c' * * Contains: * CVFF_aug force field, data from taken from: - the 'CVFF_aug.frc' file This file contains several tables: Atoms : CVFF_aug_atoms[172][5] Equivalence : CVFF_aug_equivalence_auto[162][11] Equivalence : CVFF_aug_equivalence[168][7] Quadractic bonds : CVFF_aug_bonds_auto[798][5] Morse bonds : CVFF_aug_morse_bonds[752][6] Quadratic angles : CVFF_aug_angles_auto[640][6] Torsions : CVFF_aug_torsions_auto[342][8] Impropers : CVFF_aug_impropers[41][8] Non bonded : CVFF_aug_vdw[86][4] Bond increments : CVFF_aug_bond_increments[717][5] */ #include "global.h" int CVFF_aug_objects[14] = {172, 162, 168, 798, 0, 752, 640, 0, 342, 0, 0, 41, 86, 717}; int CVFF_aug_dim[14] = {5, 11, 7, 5, 0, 6, 6, 0, 8, 0, 0, 8, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= CVFF_aug info */ char * CVFF_aug_atoms[172][5]= {{"H", "1.007970", "h", "Hydrogen bonded to C. Masses from CRC 1973/74 pages B-250.", "Ver. 1.0, Ref. 1"}, {"H", "2.014000", "d", "General Deuterium", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hn", "Hydrogen bonded to N", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "ho", "Hydrogen bonded to O", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hp", "Hydrogen bonded to P", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "hs", "Hydrogen bonded to S", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h*", "Hydrogen in water molecule", "Ver. 1.0, Ref. 1"}, {"H", "1.007970", "h$", "Hydrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"L", "0.001097", "lp", "Lone Pair", "Ver. 1.0, Ref. 1"}, {"L", "1.000000", "lp", "Lone Pair", "Ver. 1.1, Ref. 2"}, {"H", "1.007970", "h+", "Charged hydrogen in cations", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hc", "Hydrogen bonded to carbon", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hi", "Hydrogen in charged imidazole ring", "Ver. 2.0, Ref. 18"}, {"H", "1.007970", "hw", "Hydrogen in water", "Ver. 2.0, Ref. 18"}, {"D", "2.014000", "dw", "Deuterium in heivy water", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c", "Sp3 aliphatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cg", "Sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c'", "Sp2 carbon in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c*", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 21"}, {"C", "12.011150", "c\"", "Carbon in carbonyl group, non_amides", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "cp", "Sp2 aromatic carbon (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cr", "Carbon in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c+", "C in guanidinium group", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c-", "Carbon in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ca", "General amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c3", "Sp3 carbon in methyl (CH3) group", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cn", "Sp3 Carbon bonded to N", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c2", "Sp3 carbon bonded to 2 H's, 2 heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c1", "Sp3 carbon bonded to 1 H, 3 Heavy atoms", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c5", "Sp2 aromatic carbon in five membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "cs", "Sp2 carbon involved in thiophene", "Ver. 1.3, Ref. 6"}, {"C", "12.011150", "c=", "Non aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c=1", "Non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "c=2", "Non aromatic doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"C", "12.011150", "ct", "Sp carbon involved in triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "ci", "Aromatic carbon in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "c$", "Carbon atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"C", "12.011150", "co", "Sp3 carbon in acetals", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3m", "Sp3 carbon in 3-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4m", "Sp3 carbon in 4-membered ring", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "coh", "Sp3 carbon in acetals with hydrogen", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c3h", "Sp3 carbon in 3-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "c4h", "Sp3 carbon in 4-membered ring with hydrogens", "Ver. 2.0, Ref. 18"}, {"C", "12.011150", "ci", "Sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n", "Sp2 nitrogen with 1 H, 2 heavy atoms (amide group)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "no", "Sp2 nitrogen in nitro group", "Ver. 3.0, Ref. 22"}, {"N", "14.006700", "n2", "Sp2 nitrogen (NH2 in the guanidinium group (HN=C(NH2)2))", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "np", "Sp2 aromatic nitrogen (partial double bonds)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n3", "Sp3 nitrogen with three substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n4", "Sp3 nitrogen with four substituents", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=", "Non aromatic end double bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n=1", "Non aromatic, next to end doubly bonded carbon", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "n=2", "Non aromatic doubly bonded nitrogen", "Ver. 2.0, Ref. 19"}, {"N", "14.006700", "nt", "Sp nitrogen involved in triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "nz", "Sp nitrogen in N2", "Ver. 1.3, Ref. 4"}, {"N", "14.006700", "n1", "Sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "ni", "Sp2 nitrogen in a charged imidazole ring (HIS+)", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "n$", "Nitrogen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"N", "14.006700", "na", "Sp3 nitrogen in amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n3m", "Sp3 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n4m", "Sp3 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n3n", "Sp2 nitrogen in 3- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.00670", "n4n", "Sp2 nitrogen in 4- membered ring", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nb", "sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nn", "sp2 nitrogen in aromatic amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "npc", "sp2 nitrogen in 5- or 6- membered ring bonded to a heavy atom", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh", "sp2 nitrogen in 5-or 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nho", "sp2 nitrogen in 6- membered ring next to a carbonyl group and with a hydrogen", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nh+", "protonated nitrogen in 6- membered ring with hydrogen attached", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "n+", "sp3 nitrogen in protonated amines", "Ver. 2.0, Ref. 18"}, {"N", "14.006700", "nr", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o'", "Oxygen in carbonyl (C=O) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o", "sp3 oxygen in ether or ester groups", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o-", "Oxygen in charged carboxylate (COO-) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oh", "Oxygen in hydroxyl (OH) group", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o*", "Oxygen in water molecule", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "op", "Oxygen in aromatic rings. e.g. furan", "Ver. 1.3, Ref. 8"}, {"O", "15.999400", "of", "Oxygen in", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "o$", "Oxygen atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"O", "15.999400", "oc", "sp3 oxygen in ether or acetals", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "oe", "sp3 oxygen in ester", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o3e", "sp3 oxygen in three membered ring", "Ver. 2.0, Ref. 18"}, {"O", "15.999400", "o4e", "sp3 oxygen in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s", "Sulfur in methionine (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "s1", "Sulfur involved in S-S disulfide bond", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sh", "Sulfur in sulfhydryl (-SH) group", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sp", "Sulfur in thiophene", "Ver. 1.3, Ref. 6"}, {"S", "32.064000", "s'", "Sulfur in thioketone (>C=S) group", "Ver. 1.3, Ref. 7"}, {"S", "32.064000", "s$", "Sulfur atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"S", "32.064000", "sc", "sp3 sulfur in methionines (C-S-C) group", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s3e", "Sulfur in three membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.06400", "s4e", "Sulfur in four membered ring", "Ver. 2.0, Ref. 18"}, {"S", "32.064000", "s-", "Sulfur bonded to something then bonded to another partial double O or S", "Ver. 2.0, Ref. 18"}, {"P", "30.973800", "p", "General phosphorous atom", "Ver. 1.0, Ref. 1"}, {"P", "30.973800", "p$", "Phosphorous atom for automatic parameter assignment", "Ver. 1.0, Ref. 1"}, {"Ca", "40.079800", "ca+", "Calcium ion - Ca++, mass = mass of Ca - 2*electron mass.", "Ver. 2.0, Ref. 18"}, {"F", "18.998400", "f", "Fluorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "cl", "Chlorine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"Br", "79.909000", "br", "Bromine bonded to a carbon", "Ver. 1.0, Ref. 1"}, {"I", "126.9045", "i", "Covalently bound Iodine", "Ver. 1.3, Ref. 4"}, {"Si", "28.086000", "si", "Silicon atom (General)", "Ver. 1.0, Ref. 1"}, {"H", "12.000000", "nu", "NULL atom for relative free energy", "Ver. 1.0, Ref. 1"}, {"Cl", "35.453000", "Cl", "Chloride ion Cl-", "Ver. 1.0, Ref. 1"}, {"Br", "79.904000", "Br", "Bromide ion Br-", "Ver. 1.0, Ref. 1"}, {"Na", "22.989800", "Na", "Sodium ion", "Ver. 1.0, Ref. 1"}, {"Ar", "39.948", "ar", "Argon ", "Ver. 1.3, Ref. 9"}, {"Si", "28.086000", "sz", "Silicon atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Si", "28.086000", "sy", "Tetrahedral Silicon atom in Clays", "Ver. 3.2, Ref. 24"}, {"O", "15.999400", "oz", "Oxygen atom in zeolites", "Ver. 3.1, Ref. 23"}, {"O", "15.999400", "oy", "Oxygen atom in Clays", "Ver. 3.2, Ref. 24"}, {"Al", "26.981539", "az", "Tetrahedral Aluminum atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Al", "26.981539", "ay", "Octahedral Aluminum atom in Clays", "Ver. 3.2, Ref. 24"}, {"Al", "26.981539", "ayt", "Tetrahedral Aluminum atom to be used with oy", "Ver. 3.2, Ref. 34"}, {"P", "30.973800", "pz", "Phosphorous atom in zeolites", "Ver. 3.1, Ref. 23"}, {"P", "30.973800", "py", "Phosphorous atom to be used with oy", "Ver. 3.1, Ref. 34"}, {"Ga", "69.723000", "ga", "Gallium atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Ge", "72.610000", "ge", "Germanium atom in zeolites", "Ver. 3.1, Ref. 23"}, {"Ti", "47.880000", "tioc", "Titanium (Octahedral) in zeolites", "Ver. 3.1, Ref. 23"}, {"Ti", "47.880000", "ti4c", "Titanium (Octahedral) to be used with oy", "Ver. 3.1, Ref. 35"}, {"Ti", "47.880000", "titd", "Titanium (Tetrahedral) in zeolites", "Ver. 3.1, Ref. 23"}, {"Li", "6.941000", "li+", "Lithium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Li", "6.941000", "lic+", "Lithium ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Li", "6.941000", "lioh", "Lithium ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Na", "22.989800", "na+", "Sodium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Na", "22.989800", "nac+", "Sodium ion in Clays", "Ver. 3.2, Ref. 24"}, {"Na", "22.989800", "naoh", "Sodium ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"K", "39.098300", "k+", "Potassium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"K", "39.098300", "koh", "Potassium ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Rb", "85.467800", "rb+", "Rubidium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Cs", "132.905430", "cs+", "Cesium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"N", "14.006740", "nh4+", "United atom type for ammonium ion to be used with oy", "Ver. 3.1, Ref. 36"}, {"Mg", "24.305000", "mg2+", "Magnesium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Mg", "24.305000", "mg2c", "Octahedral Magnesium ion in Clays", "Ver. 3.2, Ref. 24"}, {"Mn", "54.938050", "mn4c", "Manganese (IV) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Mn", "54.938050", "mn3c", "Manganese (III) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Co", "58.933200", "co2c", "Cobalt (II) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Ni", "58.690000", "ni2c", "Nickel (II) ion to be used with oy in Clays", "Ver. 3.3, Ref. 25"}, {"Ca", "40.078000", "ca2+", "Calcium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Ca", "40.078000", "ca2c", "Calcium ion to be used with oy in Clays", "Ver. 3.1, Ref. 35"}, {"Sr", "87.620000", "sr2c", "Strontium ion to be used with oy in Clays", "Ver. 3.1, Ref. 35"}, {"Ba", "137.327000", "ba2+", "Barium ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Cu", "63.546000", "cu2+", "Copper(II) ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Fe", "55.847000", "fe2c", "Octahedral Fe(II) ion in clays", "Ver. 3.2, Ref. 24"}, {"F", "18.998403", "f-", "Fluoride ion in zeolites", "Ver. 3.1, Ref. 26"}, {"Be", "9.012182", "beoh", "Beryllium (II) in water to be used with o*", "Ver. 3.4, Ref. 33"}, {"F", "18.998400", "foh", "Fluoride ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Cl", "35.452700", "cl-", "Chloride ion in zeolites", "Ver. 3.1, Ref. 23"}, {"Cl", "35.452700", "cloh", "Chloride ion in water to be used with o*", "Ver. 3.4, Ref. 30"}, {"Cl", "35.452700", "cly-", "Chloride ion to be used with oy in Clays", "Ver. 3.4, Ref. 36"}, {"Br", "79.904000", "br-", "Bromide ion in zeolites", "Ver. 3.1, Ref. 23"}, {"I", "126.904470", "i-", "Iodide ion in zeolites", "Ver. 3.1, Ref. 23"}, {"S", "32.066000", "so4", "Sulfur in sulphate ion to be used with oz", "Ver. 3.1, Ref. 23"}, {"S", "32.066000", "so4y", "Sulfur in sulphate ion to be used with oy in Clays", "Ver. 3.1, Ref. 36"}, {"H", "1.008000", "hocl", "Hydrogen in hydroxyl group in Clays", "Ver. 3.2, Ref. 24"}, {"Pd", "106.4200", "pd2+", "Palladium(II) ", "Ver. 3.2, Ref. 27"}, {"V", "50.941500", "vy", "Tetrahedral Vanadium to be used with oy", "Ver. 3.2, Ref. 34"}, {"Al", "26.982000", "al", "Aluminium metal", "Ver. 2.1, Ref. 26"}, {"Na", "22.990000", "Na", "Sodium metal", "Ver. 2.1, Ref. 26"}, {"Pt", "195.090000", "Pt", "Platinum metal", "Ver. 2.1, Ref. 26"}, {"Pd", "106.400000", "Pd", "Palladium metal", "Ver. 2.1, Ref. 26"}, {"Au", "196.967000", "Au", "Gold metal", "Ver. 2.1, Ref. 26"}, {"Ag", "107.868000", "Ag", "Silver metal", "Ver. 2.1, Ref. 26"}, {"Sn", "118.690000", "Sn", "Tin metal", "Ver. 2.1, Ref. 26"}, {"K", "39.102000", "K", "Potassium metal", "Ver. 2.1, Ref. 26"}, {"Li", "6.940000", "Li", "Lithium metal", "Ver. 2.1, Ref. 26"}, {"Mo", "95.940000", "Mo", "Molybdenum metal", "Ver. 2.1, Ref. 26"}, {"Fe", "55.847000", "Fe", "Iron metal", "Ver. 2.1, Ref. 26"}, {"W", "183.850000", "W", "Tungsten metal", "Ver. 2.1, Ref. 26"}, {"Ni", "58.710000", "Ni", "Nickel metal", "Ver. 2.1, Ref. 26"}, {"Cr", "51.996000", "Cr", "Chromium metal", "Ver. 2.1, Ref. 26"}, {"Cu", "63.546000", "Cu", "Copper metal", "Ver. 2.1, Ref. 26"}, {"Pb", "207.200000", "Pb", "Lead metal", "Ver. 2.1, Ref. 26"}}; /* Equivalence table for key symbols CVFF_aug auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = CVFF_aug info */ char * CVFF_aug_equivalence_auto[162][11]= {{"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"d", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hn", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hi", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"ho", "hn", "ho", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"lp", "h", "lp", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 18"}, {"c", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"co", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3m", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c4m", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"coh", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ca", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"cn", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c3", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c2", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"c1", "cg", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 18"}, {"ci", "c'", "ci", "ci_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 21"}, {"c\"", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c'", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"cp", "c'", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"c5", "c'", "c5", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cs", "c'", "cs", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 18"}, {"cr", "c'", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c+", "c'", "cr", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 18"}, {"c=", "c'", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 18"}, {"c=1", "c'", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 18"}, {"na", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3", "n", "n3", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"ni", "n", "ni", "ni_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n+", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 18"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"no", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 3.0, Ref. 22"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n1", "n", "n1", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 18"}, {"n=", "n", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 18"}, {"n=1", "n", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 18"}, {"nz", "n", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 18"}, {"o", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oh", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oc", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"op", "o'", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "o'", "o'_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"of", "o'", "oh", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"o-", "o'", "o-", "o-_", "o'_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s-", "s'", "s-", "s-_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sh", "s", "sh", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 18"}, {"ca+", "ca+", "ca+", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "ca+_", "Ver. 2.0, Ref. 18"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 18"}, {"i", "i", "i", "i_", "f_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "cl", "cl_", "f_", "cl_", "c_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 18"}, {"br", "br", "br", "br_", "f_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 18"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 18"}, {"nu", "nu", "nu", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "nu_", "Ver. 2.0, Ref. 18"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 18"}, {"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 18"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 18"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.0, Ref. 18"}, {"sz", "sz", "sz", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "sz_", "Ver. 3.1, Ref. 23"}, {"sy", "sy", "sy", "sy_", "sy_", "sy_", "sy_", "sy_", "sy_", "sy_", "Ver. 3.2, Ref. 24"}, {"py", "py", "py", "py_", "py_", "py_", "py_", "py_", "py_", "py_", "Ver. 3.2, Ref. 34"}, {"vy", "vy", "vy", "vy_", "vy_", "vy_", "vy_", "vy_", "vy_", "vy_", "Ver. 3.2, Ref. 34"}, {"ti4c", "ti4c", "ti4c", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "ti4c_", "Ver. 3.2, Ref. 35"}, {"ca2c", "ca2c", "ca2c", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "ca2c_", "Ver. 3.2, Ref. 35"}, {"cly-", "cly-", "cly-", "cly-_", "cly-_", "cly-_", "cly-_", "cly-_", "cly-_", "cly-_", "Ver. 3.2, Ref. 36"}, {"so4y", "so4y", "so4y", "so4y_", "so4y_", "so4y_", "so4y_", "so4y_", "so4y_", "so4y_", "Ver. 3.2, Ref. 36"}, {"nh4+", "nh4+", "nh4+", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "nh4+_", "Ver. 3.2, Ref. 36"}, {"sr2c", "sr2c", "sr2c", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "sr2c_", "Ver. 3.2, Ref. 35"}, {"ayt", "ayt", "ayt", "ayt_", "ayt_", "ayt_", "ayt_", "ayt_", "ayt_", "ayt_", "Ver. 3.2, Ref. 34"}, {"oz", "oz", "oz", "oz_", "oz_", "oz_", "oz_", "oz_", "oz_", "oz_", "Ver. 3.1, Ref. 23"}, {"oy", "oy", "oy", "oy_", "oy_", "oy_", "oy_", "oy_", "oy_", "oy_", "Ver. 3.2, Ref. 24"}, {"az", "az", "az", "az_", "az_", "az_", "az_", "az_", "az_", "az_", "Ver. 3.1, Ref. 23"}, {"ay", "ay", "ay", "ay_", "ay_", "ay_", "ay_", "ay_", "ay_", "ay_", "Ver. 3.2, Ref. 24"}, {"pz", "pz", "pz", "pz_", "pz_", "pz_", "pz_", "pz_", "pz_", "pz_", "Ver. 3.1, Ref. 23"}, {"ga", "ga", "ga", "ga_", "ga_", "ga_", "ga_", "ga_", "ga_", "ga_", "Ver. 3.1, Ref. 23"}, {"ge", "ge", "ge", "ge_", "ge_", "ge_", "ge_", "ge_", "ge_", "ge_", "Ver. 3.1, Ref. 23"}, {"tioc", "tioc", "tioc", "tioc_", "tioc_", "tioc_", "tioc_", "tioc_", "tioc_", "tioc_", "Ver. 3.1, Ref. 23"}, {"titd", "titd", "titd", "titd_", "titd_", "titd_", "titd_", "titd_", "titd_", "titd_", "Ver. 3.1, Ref. 23"}, {"li+", "li+", "li+", "li+_", "li+_", "li+_", "li+_", "li+_", "li+_", "li+_", "Ver. 3.1, Ref. 23"}, {"na+", "na+", "na+", "na+_", "na+_", "na+_", "na+_", "na+_", "na+_", "na+_", "Ver. 3.1, Ref. 23"}, {"nac+", "nac+", "nac+", "nac+_", "nac+_", "nac+_", "nac+_", "nac+_", "nac+_", "nac+_", "Ver. 3.2, Ref. 24"}, {"k+", "k+", "k+", "k+_", "k+_", "k+_", "k+_", "k+_", "k+_", "k+_", "Ver. 3.1, Ref. 23"}, {"rb+", "rb+", "rb+", "rb+_", "rb+_", "rb+_", "rb+_", "rb+_", "rb+_", "rb+_", "Ver. 3.1, Ref. 23"}, {"cs+", "cs+", "cs+", "cs+_", "cs+_", "cs+_", "cs+_", "cs+_", "cs+_", "cs+_", "Ver. 3.1, Ref. 23"}, {"mg2+", "mg2+", "mg2+", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "mg2+_", "Ver. 3.1, Ref. 23"}, {"mg2c", "mg2c", "mg2c", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "mg2c_", "Ver. 3.2, Ref. 24"}, {"mn4c", "mn4c", "mn4c", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "mn4c_", "Ver. 3.3, Ref. 25"}, {"mn3c", "mn3c", "mn3c", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "mn3c_", "Ver. 3.3, Ref. 25"}, {"co2c", "co2c", "co2c", "co2c_", "co2c_", "co2c_", "co2c_", "co2c_", "co2c_", "co2c_", "Ver. 3.3, Ref. 25"}, {"ni2c", "ni2c", "ni2c", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "ni2c_", "Ver. 3.3, Ref. 25"}, {"lic+", "lic+", "lic+", "lic+_", "lic+_", "lic+_", "lic+_", "lic+_", "lic+_", "lic+_", "Ver. 3.3, Ref. 25"}, {"ca2+", "ca2+", "ca2+", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "ca2+_", "Ver. 3.1, Ref. 23"}, {"ba2+", "ba2+", "ba2+", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "ba2+_", "Ver. 3.1, Ref. 23"}, {"cu2+", "cu2+", "cu2+", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "cu2+_", "Ver. 3.1, Ref. 23"}, {"fe2c", "fe2c", "fe2c", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "fe2c_", "Ver. 3.2, Ref. 24"}, {"f-", "f-", "f-", "f-_", "f-_", "f-_", "f-_", "f-_", "f-_", "f-_", "Ver. 3.1, Ref. 26"}, {"cl-", "cl-", "cl-", "cl-_", "cl-_", "cl-_", "cl-_", "cl-_", "cl-_", "cl-_", "Ver. 3.1, Ref. 23"}, {"br-", "br-", "br-", "br-_", "br-_", "br-_", "br-_", "br-_", "br-_", "br-_", "Ver. 3.1, Ref. 23"}, {"i-", "i-", "i-", "i-_", "i-_", "i-_", "i-_", "i-_", "i-_", "i-_", "Ver. 3.1, Ref. 23"}, {"so4", "so4", "so4", "so4_", "so4_", "so4_", "so4_", "so4_", "so4_", "so4_", "Ver. 3.1, Ref. 23"}, {"hocl", "hocl", "hocl", "hocl_", "hocl_", "hocl_", "hocl_", "hocl_", "hocl_", "hocl_", "Ver. 3.2, Ref. 24"}, {"pd2+", "pd2+", "pd2+", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "pd2+_", "Ver. 3.2, Ref. 27"}, {"lioh", "lioh", "lioh", "lioh_", "lioh_", "lioh_", "lioh_", "lioh_", "lioh_", "lioh_", "Ver. 3.4, Ref. 30"}, {"naoh", "naoh", "naoh", "naoh_", "naoh_", "naoh_", "naoh_", "naoh_", "naoh_", "naoh_", "Ver. 3.4, Ref. 30"}, {"koh", "koh", "koh", "koh_", "koh_", "koh_", "koh_", "koh_", "koh_", "koh_", "Ver. 3.4, Ref. 30"}, {"foh", "foh", "foh", "foh_", "foh_", "foh_", "foh_", "foh_", "foh_", "foh_", "Ver. 3.4, Ref. 30"}, {"cloh", "cloh", "cloh", "cloh_", "cloh_", "cloh_", "cloh_", "cloh_", "cloh_", "cloh_", "Ver. 3.4, Ref. 30"}, {"beoh", "beoh", "beoh", "beoh_", "beoh_", "beoh_", "beoh_", "beoh_", "beoh_", "beoh_", "Ver. 3.4, Ref. 33"}, {"al", "si", "si", "al_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.1, Ref. 26"}, {"Pb", "Pb", "Pb", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pt", "Pt", "Pt", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Pd", "Pd", "Pd", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Au", "Au", "Au", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ag", "Ag", "Ag", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Sn", "Sn", "Sn", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Li", "Li", "Li", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Mo", "Mo", "Mo", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Fe", "Fe", "Fe", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"W", "W", "W", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Ni", "Ni", "Ni", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cr", "Cr", "Cr", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}, {"Cu", "Cu", "Cu", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.1, Ref. 27"}}; /* Equivalence table for key symbols CVFF_aug with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = CVFF_aug info */ char * CVFF_aug_equivalence[168][7]= {{"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"d", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hc", "h", "h", "h", "h", "h", "Ver. 2.0, Ref. 18"}, {"hs", "h", "hs", "hs", "hs", "hs", "Ver. 1.0, Ref. 1"}, {"hn", "hn", "hn", "hn", "hn", "hn", "Ver. 1.0, Ref. 1"}, {"ho", "hn", "ho", "ho", "ho", "ho", "Ver. 1.0, Ref. 1"}, {"hi", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h+", "hn", "hn", "hn", "hn", "hn", "Ver. 2.0, Ref. 18"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 2.0, Ref. 18"}, {"h$", "h$", "h$", "h$", "h$", "h$", "Ver. 1.0, Ref. 1"}, {"lp", "h", "lp", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"co", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c3m", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c4m", "c", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"coh", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c3h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"c4h", "cg", "c", "c", "c", "c", "Ver. 2.0, Ref. 18"}, {"cg", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cn", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c1", "cg", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c\"", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 18"}, {"c*", "c'", "c'", "c'", "c'", "c'", "Ver. 2.0, Ref. 21"}, {"cp", "c'", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c5", "c'", "c5", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cs", "c'", "cs", "cs", "cs", "cs", "Ver. 1.3, Ref. 6"}, {"cr", "c'", "cr", "c'", "cr", "c'", "Ver. 1.0, Ref. 1"}, {"c+", "c'", "cr", "c'", "cr", "c'", "Ver. 2.0, Ref. 18"}, {"c-", "c'", "c'", "c'", "c'", "c'", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "c=1", "c=", "c=1", "c=", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "c=2", "c=", "c=2", "c=", "Ver. 2.0, Ref. 19"}, {"ct", "c'", "ct", "ct", "ct", "ct", "Ver. 1.0, Ref. 1"}, {"ci", "c'", "ci", "c5", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c$", "c$", "c$", "c$", "c$", "c$", "Ver. 1.0, Ref. 1"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"no", "n", "no", "no", "no", "no", "Ver. 3.0, Ref. 22"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 2.0, Ref. 18"}, {"n2", "n", "n2", "n", "n2", "n2", "Ver. 1.0, Ref. 1"}, {"n3", "n", "n3", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"na", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n3m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4m", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"n4", "n", "n4", "n3", "n3", "n3", "Ver. 1.0, Ref. 1"}, {"n+", "n", "n4", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nn", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"nb", "n", "n3", "n3", "n3", "n3", "Ver. 2.0, Ref. 18"}, {"np", "n", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=", "n", "n=", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"n=1", "n", "n=1", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"n=2", "n", "n=2", "np", "np", "np", "Ver. 2.0, Ref. 19"}, {"nt", "n", "nt", "nt", "nt", "nt", "Ver. 1.0, Ref. 1"}, {"nz", "n", "nz", "nz", "nz", "nz", "Ver. 1.3, Ref. 4"}, {"n1", "n", "n1", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"ni", "n", "ni", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"nh", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"npc", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nho", "n", "np", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nh+", "n", "nh+", "np", "np", "np", "Ver. 2.0, Ref. 18"}, {"nr", "n", "n2", "n2", "n2", "n2", "Ver. 2.0, Ref. 18"}, {"n$", "n$", "n$", "n$", "n$", "n$", "Ver. 1.0, Ref. 1"}, {"o'", "o'", "o'", "o'", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"o", "o'", "o", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"o-", "o'", "o-", "o-", "o'", "o'", "Ver. 1.0, Ref. 1"}, {"oh", "o'", "oh", "o", "o", "o'", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"op", "o'", "op", "op", "op", "op", "Ver. 1.3, Ref. 8"}, {"of", "o'", "oh", "o", "of", "o'", "Ver. 1.0, Ref. 1"}, {"o$", "o$", "o$", "o$", "o$", "o$", "Ver. 1.0, Ref. 1"}, {"oc", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"oe", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o3e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"o4e", "o'", "o", "o", "o", "o'", "Ver. 2.0, Ref. 18"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sh", "s", "sh", "sh", "sh", "sh", "Ver. 1.0, Ref. 1"}, {"s'", "s'", "s'", "s'", "s'", "s'", "Ver. 1.3, Ref. 7"}, {"sp", "s'", "sp", "sp", "sp", "sp", "Ver. 1.3, Ref. 6"}, {"s$", "s$", "s$", "s$", "s$", "s$", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 2.0, Ref. 18"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"p$", "p$", "p$", "p$", "p$", "p$", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"nu", "nu", "nu", "nu", "nu", "nu", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 1.3, Ref. 9"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 3.1, Ref. 23"}, {"sy", "sy", "sy", "sy", "sy", "sy", "Ver. 3.2, Ref. 24"}, {"oz", "oz", "oz", "oz", "oz", "oz", "Ver. 3.1, Ref. 23"}, {"oy", "oy", "oy", "oy", "oy", "oy", "Ver. 3.2, Ref. 24"}, {"az", "az", "az", "az", "az", "az", "Ver. 3.1, Ref. 23"}, {"ay", "ay", "ay", "ay", "ay", "ay", "Ver. 3.2, Ref. 24"}, {"pz", "pz", "pz", "pz", "pz", "pz", "Ver. 3.1, Ref. 23"}, {"ga", "ga", "ga", "ga", "ga", "ga", "Ver. 3.1, Ref. 23"}, {"ge", "ge", "ge", "ge", "ge", "ge", "Ver. 3.1, Ref. 23"}, {"tioc", "tioc", "tioc", "tioc", "tioc", "tioc", "Ver. 3.1, Ref. 23"}, {"titd", "titd", "titd", "titd", "titd", "titd", "Ver. 3.1, Ref. 23"}, {"li+", "li+", "li+", "li+", "li+", "li+", "Ver. 3.1, Ref. 23"}, {"na+", "na+", "na+", "na+", "na+", "na+", "Ver. 3.1, Ref. 23"}, {"nac+", "nac+", "nac+", "nac+", "nac+", "nac+", "Ver. 3.2, Ref. 24"}, {"k+", "k+", "k+", "k+", "k+", "k+", "Ver. 3.1, Ref. 23"}, {"rb+", "rb+", "rb+", "rb+", "rb+", "rb+", "Ver. 3.1, Ref. 23"}, {"cs+", "cs+", "cs+", "cs+", "cs+", "cs+", "Ver. 3.1, Ref. 23"}, {"mg2+", "mg2+", "mg2+", "mg2+", "mg2+", "mg2+", "Ver. 3.1, Ref. 23"}, {"mg2c", "mg2c", "mg2c", "mg2c", "mg2c", "mg2c", "Ver. 3.2, Ref. 24"}, {"mn4c", "mn4c", "mn4c", "mn4c", "mn4c", "mn4c", "Ver. 3.3, Ref. 25"}, {"mn3c", "mn3c", "mn3c", "mn3c", "mn3c", "mn3c", "Ver. 3.3, Ref. 25"}, {"co2c", "co2c", "co2c", "co2c", "co2c", "co2c", "Ver. 3.3, Ref. 25"}, {"ni2c", "ni2c", "ni2c", "ni2c", "ni2c", "ni2c", "Ver. 3.3, Ref. 25"}, {"lic+", "lic+", "lic+", "lic+", "lic+", "lic+", "Ver. 3.3, Ref. 25"}, {"ca2+", "ca2+", "ca2+", "ca2+", "ca2+", "ca2+", "Ver. 3.1, Ref. 23"}, {"ba2+", "ba2+", "ba2+", "ba2+", "ba2+", "ba2+", "Ver. 3.1, Ref. 23"}, {"cu2+", "cu2+", "cu2+", "cu2+", "cu2+", "cu2+", "Ver. 3.1, Ref. 23"}, {"fe2c", "fe2c", "fe2c", "fe2c", "fe2c", "fe2c", "Ver. 3.2, Ref. 24"}, {"f-", "f-", "f-", "f-", "f-", "f-", "Ver. 3.1, Ref. 26"}, {"cl-", "cl-", "cl-", "cl-", "cl-", "cl-", "Ver. 3.1, Ref. 23"}, {"br-", "br-", "br-", "br-", "br-", "br-", "Ver. 3.1, Ref. 23"}, {"i-", "i-", "i-", "i-", "i-", "i-", "Ver. 3.1, Ref. 23"}, {"so4", "so4", "so4", "so4", "so4", "so4", "Ver. 3.1, Ref. 23"}, {"ayt", "ayt", "ayt", "ayt", "ayt", "ayt", "Ver. 3.1, Ref. 34"}, {"py", "py", "py", "py", "py", "py", "Ver. 3.1, Ref. 34"}, {"vy", "vy", "vy", "vy", "vy", "vy", "Ver. 3.1, Ref. 34"}, {"ti4c", "ti4c", "ti4c", "ti4c", "ti4c", "ti4c", "Ver. 3.1, Ref. 35"}, {"ca2c", "ca2c", "ca2c", "ca2c", "ca2c", "ca2c", "Ver. 3.1, Ref. 35"}, {"cly-", "cly-", "cly-", "cly-", "cly-", "cly-", "Ver. 3.1, Ref. 36"}, {"nh4+", "nh4+", "nh4+", "nh4+", "nh4+", "nh4+", "Ver. 3.1, Ref. 36"}, {"so4y", "so4y", "so4y", "so4y", "so4y", "so4y", "Ver. 3.1, Ref. 36"}, {"sr2c", "sr2c", "sr2c", "sr2c", "sr2c", "sr2c", "Ver. 3.1, Ref. 35"}, {"hocl", "hocl", "hocl", "hocl", "hocl", "hocl", "Ver. 3.2, Ref. 24"}, {"pd2+", "pd2+", "pd2+", "pd2+", "pd2+", "pd2+", "Ver. 3.2, Ref. 27"}, {"lioh", "lioh", "lioh", "lioh", "lioh", "lioh", "Ver. 3.4, Ref. 30"}, {"naoh", "naoh", "naoh", "naoh", "naoh", "naoh", "Ver. 3.4, Ref. 30"}, {"koh", "koh", "koh", "koh", "koh", "koh", "Ver. 3.4, Ref. 30"}, {"foh", "foh", "foh", "foh", "foh", "foh", "Ver. 3.4, Ref. 30"}, {"cloh", "cloh", "cloh", "cloh", "cloh", "cloh", "Ver. 3.4, Ref. 30"}, {"beoh", "beoh", "beoh", "beoh", "beoh", "beoh", "Ver. 3.4, Ref. 33"}, {"al", "si", "al", "si", "si", "si", "Ver. 2.1, Ref. 26"}, {"Pt", "Pt", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pd", "Pd", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Au", "Au", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ag", "Ag", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Sn", "Na", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"K", "Pb", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Li", "Li", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Mo", "Mo", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Fe", "Fe", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"W", "W", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Ni", "Ni", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cr", "Cr", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Cu", "Cu", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}, {"Pb", "Pb", "Br", "c", "c", "c", "Ver. 2.1, Ref. 26"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= CVFF_aug info E = K2 * (R - R0)^2 */ char * CVFF_aug_bonds_auto[798][5]= {{"mg2+", "cl-", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"sz", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"sy", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"py", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 34"}, {"vy", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 34"}, {"ti4c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 35"}, {"ca2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 35"}, {"cly-", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 36"}, {"nh4+", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 36"}, {"so4y", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 36"}, {"sr2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 35"}, {"ayt", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 34"}, {"az", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ay", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"pz", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ga", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ge", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"tioc", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"titd", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"li+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"na+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"nac+", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"k+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"rb+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"cs+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"mg2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"mg2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"mn4c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"mn3c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"co2c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"ni2c", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"lic+", "oy", "1.6200", "000.0000", "Ver. 3.3, Ref. 25"}, {"ca2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"ba2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"cu2+", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"fe2c", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"f-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 26"}, {"cl-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"br-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"i-", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"so4", "oz", "1.6200", "000.0000", "Ver. 3.1, Ref. 23"}, {"hocl", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 24"}, {"pd2+", "oy", "1.6200", "000.0000", "Ver. 3.2, Ref. 27"}, {"lioh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"naoh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"koh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"foh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"cloh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 30"}, {"beoh", "o*", "1.6200", "000.0000", "Ver. 3.4, Ref. 33"}, {"no", "o-", "1.2178", "560.9942", "Ver. 3.0, Ref. 22"}, {"no", "cp", "1.4720", "351.2527", "Ver. 3.0, Ref. 22"}, {"c'", "cp", "1.4720", "351.2527", "Ver. 3.0, Ref. 22"}, {"c", "o", "1.4250", "273.2000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "322.7158", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "283.0924", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "615.3220", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "377.5752", "Ver. 1.0, Ref. 1"}, {"oz", "ho", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "384.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "493.8480", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "340.6175", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "400.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "540.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "480.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "384.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "274.1288", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "228.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "388.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "457.4592", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "356.5988", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "420.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "420.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "228.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "379.0809", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "400.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "320.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "363.4164", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "280.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "283.0924", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "320.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "483.4512", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "280.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"o*", "lp", "0.9600", "540.6336", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "300.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "560.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "245.2000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "480.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "224.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "336.8000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "336.8000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "560.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "560.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "322.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "322.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "361.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "361.6000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "496.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "314.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "223.6000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "238.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "222.4000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "392.8000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "398.75", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "398.24", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "259.07", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "236.55", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "175.64", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "123.21", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "833.72", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "1632.51", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "1632.51", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "510.2775", "Ver. 1.3, Ref. 7"}, {"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "228.2808", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "223.6000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 18"}, {"ci_", "ci_", "1.3900", "280.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ni_", "1.3800", "320.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "253.7008", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "292.1952", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "268.8528", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "211.1592", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "457.4592", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "200.9852", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "226.4260", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "203.8340", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "184.0104", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "272.8000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "210.6360", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "189.3856", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "227.5604", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "206.3980", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "186.6972", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "483.4512", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "263.4360", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "551.2061", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "242.1856", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "280.3604", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "259.1980", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "239.4972", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "461.1848", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "178.0372", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "217.7248", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "196.5940", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "177.2764", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "323.1720", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "493.8480", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "224.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "307.0632", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "284.7988", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "264.9868", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "458.4610", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "204.0505", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "251.7939", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "233.2954", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "213.2317", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "486.0610", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "231.6505", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "279.3939", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "260.8954", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "240.8317", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "189.9260", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "186.8792", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "274.1288", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "204.8184", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "212.0812", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "187.8836", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "167.7624", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "255.2524", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "316.8138", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "195.3021", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "211.1368", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "187.6017", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "167.6272", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "210.9800", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "240.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "175.1796", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "236.5449", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "180.5021", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "196.3368", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "172.8017", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "152.8272", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "167.4260", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "224.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "230.3664", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "208.8228", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "183.1472", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "162.7080", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "520.7304", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "345.9024", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "314.1728", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "207.1180", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "193.5000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "209.1876", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "2.1900", "144.0000", "Ver. 2.0, Ref. 18"}}; /* Morse bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= D, 4= ALPHA, 5= CVFF_aug info E = D * (1 - exp(-ALPHA*(R - R0)))^2 */ char * CVFF_aug_morse_bonds[752][6]= {{"no", "o-", "1.2178", "140.2486", "2.0000", "Ver. 3.0, Ref. 22"}, {"no", "cp", "1.4720", "87.8132", "2.0000", "Ver. 3.0, Ref. 22"}, {"c'", "cp", "1.4720", "87.8132", "2.0000", "Ver. 3.0, Ref. 22"}, {"c", "o", "1.4250", "68.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c", "c", "1.5260", "88.0000", "1.9150", "Ver. 1.0, Ref. 1"}, {"c", "c'", "1.5200", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c'", "o'", "1.2300", "145.0000", "2.0600", "Ver. 1.0, Ref. 1"}, {"n", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n1", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n1", "1.4600", "72.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"oh", "c", "1.4200", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.9600", "95.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c'", "h", "1.1050", "108.6000", "1.7710", "Ver. 1.0, Ref. 1"}, {"c'", "o", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "1.3700", "100.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "1.2500", "135.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "1.3400", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"cp", "oh", "1.3700", "96.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"sh", "hs", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "1.3300", "87.5000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c", "sh", "1.8200", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "1.8000", "57.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s", "s", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "2.0000", "45.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n2", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n2", "c'", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cr", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "1.3200", "97.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n3", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "1.0260", "88.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"c", "n4", "1.4700", "68.0000", "2.2900", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "1.3400", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"c5", "np", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c5", "o", "1.3700", "105.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"c5", "op", "1.3700", "105.0000", "2.0000", "Ver. 1.3, Ref. 8"}, {"c5", "s", "1.7300", "57.0000", "2.0000", "Ver. 1.2, Ref. 3"}, {"cs", "h", "1.0800", "121.0000", "1.7700", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "1.3630", "100.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "1.7106", "80.0000", "2.0000", "Ver. 1.3, Ref. 6"}, {"ci", "h", "1.0800", "116.0000", "1.7700", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "1.3900", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ci", "c", "1.5100", "76.0000", "1.9300", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "1.3800", "80.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "1.0260", "93.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"cp", "n", "1.4200", "70.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"o*", "beoh", "1.5000", "5.7319", "1.0000", "Ver. 3.4, Ref. 33"}, {"o*", "lp", "0.9600", "104.0000", "2.2800", "Ver. 1.0, Ref. 1"}, {"p", "oh", "1.5700", "75.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o'", "1.5300", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "1.6100", "61.3000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "o-", "1.5300", "120.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "h", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"p", "lp", "1.5000", "56.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=", "c", "1.4750", "84.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"n=1", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"n=2", "c", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=", "1.2600", "140.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"cr", "n=2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c'", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "1.5000", "80.7000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=", "h", "1.0900", "90.4000", "2.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "h", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 19"}, {"f", "c", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "1.3630", "124.0000", "2.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "1.7610", "78.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "1.9200", "55.9000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "1.8090", "59.5000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "h", "1.3820", "55.6000", "2.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "1.6650", "98.2000", "2.0000", "Ver. 1.0, Ref. 1"}, {"h", "h", "0.74611", "104.207", "1.9561", "Ver. 1.3, Ref. 4"}, {"d", "d", "0.74164", "106.010", "1.9382", "Ver. 1.3, Ref. 4"}, {"f", "f", "1.417", "37.5", "2.6284", "Ver. 1.3, Ref. 4"}, {"cl", "cl", "1.988", "58.066", "2.0183", "Ver. 1.3, Ref. 4"}, {"br", "br", "2.290", "46.336", "1.9469", "Ver. 1.3, Ref. 4"}, {"i", "i", "2.662", "36.46", "1.8383", "Ver. 1.3, Ref. 4"}, {"o", "o", "1.208", "118.86", "2.6484", "Ver. 1.3, Ref. 4"}, {"nz", "nz", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 4"}, {"nt", "nt", "1.09758", "226.8", "2.6829", "Ver. 1.3, Ref. 5"}, {"c'", "s'", "1.6110", "169.3000", "1.7361", "Ver. 1.3, Ref. 7"}, {"c3m_", "c3m_", "1.5100", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "1.4850", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "1.4340", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o4e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "1.5520", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "1.4670", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o3e_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "1.4462", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "1.8470", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c'_", "n3m_", "1.4460", "68.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n4m_", "1.4000", "83.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s3e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s4e_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"cp_", "n3m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n4m_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s3e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s4e", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n3m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n4m_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s3e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s4e_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n3m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n4m_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s3e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s4e_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n3m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n4m_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s3e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s4e_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "beoh_", "1.4000", "5.7634", "1.0000", "Ver. 3.4, Ref. 33"}, {"o_", "s4e_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s3e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s4e_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "1.6500", "59.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "2.1000", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s3e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s4e_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s3e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "2.0000", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s4e_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "1.5260", "88.0000", "1.9150", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "1.5200", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "1.5100", "76.0000", "1.9300", "Ver. 2.0, Ref. 18"}, {"c_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "ct_", "1.4000", "85.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "1.4700", "68.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "1.4600", "72.0000", "2.2900", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_1", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_2", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n=_3", "1.4750", "84.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n+_", "1.4620", "67.7209", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "1.4250", "68.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "op_", "1.3800", "86.6371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "o'_", "1.3800", "79.7371", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "1.8000", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "1.7700", "60.6331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s'_", "1.7700", "64.3331", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "1.7500", "62.2836", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "1.8090", "59.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c_", "i_", "2.1200", "50.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c'_", "1.5000", "66.6000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cp_", "1.5000", "71.0829", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "ct_", "1.4200", "77.7873", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n_", "1.3600", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_1", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_2", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "n=_3", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "np_", "1.4050", "74.0749", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o_", "1.3400", "100.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "o'_", "1.2200", "145.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "o-_", "1.2500", "135.0000", "2.0600", "Ver. 2.0, Ref. 18"}, {"c'_", "op_", "1.3500", "73.5252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "s_", "1.7700", "58.0627", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s'_", "1.6110", "169.3000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "s-_", "1.6800", "93.0000", "1.7361", "Ver. 2.0, Ref. 18"}, {"c'_", "sp_", "1.7400", "53.8383", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "h_", "1.1050", "108.6000", "1.7710", "Ver. 2.0, Ref. 18"}, {"c'_", "p_", "1.7200", "60.3455", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "f_", "1.3900", "54.4273", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "cl_", "1.7270", "62.4647", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "br_", "1.8750", "57.0702", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "si_", "1.8300", "59.8388", "2.0000", "Ver. 2.0, Ref. 18"}, {"c'_", "i_", "2.0610", "52.1506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cp_", "1.3900", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_1", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_2", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "c=_3", "1.5000", "80.7000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "ct_", "1.4000", "80.4179", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "na_", "1.4120", "64.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n_", "1.4200", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_1", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_2", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n=_3", "1.3850", "79.0095", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "np_", "1.3500", "110.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "n+_", "1.4120", "62.8336", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o_", "1.3700", "96.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "o'_", "1.3300", "74.3713", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "op_", "1.3700", "105.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s_", "1.7300", "57.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "s'_", "1.7200", "59.9506", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "sp_", "1.7106", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"cp_", "p_", "1.7000", "58.7607", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "f_", "1.3630", "124.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "cl_", "1.7610", "78.5000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "br_", "1.9200", "55.9000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "i_", "2.0410", "54.3628", "2.0000", "Ver. 2.0, Ref. 18"}, {"cp_", "si_", "1.8100", "56.2919", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ci_", "1.3900", "70.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "ni", "1.3800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ci_", "h_", "1.0800", "116.0000", "1.7700", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_3", "1.3300", "163.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_2", "1.4100", "120.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_2", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "c=_1", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "c=_3", "1.4800", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "ct_", "1.4250", "84.4106", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "na_", "1.4370", "68.4292", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n_", "1.4100", "69.7685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_2", "1.3430", "123.3817", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "n=_1", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "n=_2", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "n=_3", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_1", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_2", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "np_", "1.4100", "82.9685", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o_", "1.3680", "88.7997", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "op_", "1.3550", "85.1279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "o'_", "1.3550", "78.2279", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "h_", "1.0900", "90.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "p_", "1.7250", "62.7497", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s_", "1.7750", "63.7360", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "sp_", "1.7450", "60.2470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "s'_", "1.7450", "63.9470", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "f_", "1.3950", "71.2830", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "cl_", "1.7320", "69.6283", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "br_", "1.8800", "63.4252", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "i_", "2.0660", "58.3608", "2.0000", "Ver. 2.0, Ref. 18"}, {"c=_3", "si_", "1.8350", "60.2606", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_1", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_2", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n=_3", "1.2600", "140.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"cr_", "n_", "1.3200", "97.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "ct_", "1.2040", "200.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "nt_", "1.1580", "220.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "na_", "1.3820", "71.7024", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n_", "1.3550", "72.3612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_1", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_2", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n=_3", "1.3550", "85.5612", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "n+_", "1.3820", "69.5942", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o_", "1.3130", "91.9541", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s_", "1.7200", "67.8582", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "op_", "1.3000", "86.6170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "o'_", "1.3000", "79.7170", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "sp_", "1.6900", "64.0086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "s'_", "1.6900", "67.7086", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "p_", "1.6700", "68.3667", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "h_", "1.0530", "101.1528", "1.7700", "Ver. 2.0, Ref. 18"}, {"ct_", "f_", "1.3400", "69.5983", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "cl_", "1.6770", "73.0488", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "br_", "1.8250", "67.2132", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "i_", "2.0110", "62.2317", "2.0000", "Ver. 2.0, Ref. 18"}, {"ct_", "si_", "1.7800", "66.8241", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "na_", "1.3940", "55.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n_", "1.3670", "55.4242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "np_", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_1", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_2", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n=_3", "1.3670", "68.6242", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "n+_", "1.3940", "52.7898", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o_", "1.3250", "75.3375", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s_", "1.7320", "51.7351", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "op_", "1.3120", "68.5440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "o'_", "1.3120", "61.6440", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "sp_", "1.7020", "47.7438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "s'_", "1.7020", "51.4438", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "p_", "1.6820", "52.6350", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "h_", "1.0260", "88.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"na_", "f_", "1.3520", "50.2463", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "cl_", "1.6890", "56.6065", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "br_", "1.8370", "50.9585", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "i_", "2.0230", "46.0026", "2.0000", "Ver. 2.0, Ref. 18"}, {"na_", "si_", "1.7920", "51.1059", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "1.3400", "55.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_1", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_2", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n=_3", "1.3400", "68.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n+_", "1.3670", "52.6590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "1.2980", "75.3158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "1.7050", "52.6552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "op_", "1.2850", "66.7770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o'_", "1.2850", "59.8770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "1.6750", "48.3711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s'_", "1.6750", "52.0711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "1.6550", "54.9881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"n_", "f_", "1.3250", "47.3464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cl_", "1.6620", "56.8901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "br_", "1.8100", "51.5995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "i_", "1.9960", "46.6743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "1.7650", "54.2016", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "np_", "1.3400", "102.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "o-_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "h_", "1.0260", "93.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"np_", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"np_", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_3", "1.2100", "162.8000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_2", "1.2760", "122.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_2", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n=_1", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n=_3", "1.3400", "81.4000", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "n+_", "1.3670", "65.8590", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o_", "1.2980", "88.5158", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "o'_", "1.2850", "73.0770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "o'_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "o'_", "1.1600", "143.9680", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "o-_", "1.2225", "108.5225", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "op_", "1.2850", "79.9770", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s_", "1.7050", "65.8552", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "sp_", "1.6750", "61.5711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "s'_", "1.6750", "65.2711", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "s'_", "1.6325", "93.7906", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "s'_", "1.5900", "122.3100", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_1", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_1", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_2", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_2", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "p_", "1.6550", "68.1881", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "h_", "1.0380", "106.0338", "2.2800", "Ver. 2.0, Ref. 18"}, {"n=_3", "f_", "1.3250", "60.5464", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "cl_", "1.6620", "70.0901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "br_", "1.8100", "64.7995", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "i_", "1.9960", "59.8743", "2.0000", "Ver. 2.0, Ref. 18"}, {"n=_3", "si_", "1.7650", "67.4016", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "n+_", "1.3940", "48.3901", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o_", "1.3250", "72.7505", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s_", "1.7320", "50.0292", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "op_", "1.3120", "65.4265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "o'_", "1.3120", "58.5265", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "sp_", "1.7020", "45.8238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "s'_", "1.7020", "49.5238", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "p_", "1.6820", "52.2884", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "h_", "1.0650", "88.7167", "2.2800", "Ver. 2.0, Ref. 18"}, {"n+_", "f_", "1.3520", "44.5093", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "cl_", "1.6890", "54.4312", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "br_", "1.8370", "49.1485", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "i_", "2.0230", "44.3191", "2.0000", "Ver. 2.0, Ref. 18"}, {"n+_", "si_", "1.7920", "51.7353", "2.0000", "Ver. 2.0, Ref. 18"}, {"nz_", "nz_", "1.09758", "226.8", "2.6829", "Ver. 2.0, Ref. 18"}, {"nt_", "nt_", "1.09758", "226.8000", "2.6829", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "1.20800", "118.86", "2.6484", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "1.6930", "72.0212", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "op_", "1.2430", "87.6930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o'_", "1.2430", "80.7930", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "1.6330", "67.9896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "s'_", "1.6330", "71.6896", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "1.6100", "61.3000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "1.6650", "98.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "h_", "0.9600", "95.0000", "2.2800", "Ver. 2.0, Ref. 18"}, {"o_", "f_", "1.4180", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cl_", "1.6500", "76.7658", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "br_", "1.7980", "71.1997", "2.0000", "Ver. 2.0, Ref. 18"}, {"o_", "i_", "1.9840", "66.2467", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o'_", "1.1100", "121.2000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "op_", "1.2300", "68.1000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "1.5900", "90.1047", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "1.5600", "85.3184", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "s'_", "1.5400", "105.3797", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "1.4800", "131.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "h_", "0.9830", "114.6152", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "f_", "1.2700", "51.0126", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cl_", "1.6070", "62.9485", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "br_", "1.7550", "58.3239", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "i_", "1.9410", "53.3079", "2.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "si_", "1.6500", "113.6866", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "op_", "1.2300", "75.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s_", "1.6800", "66.6937", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "sp_", "1.6500", "61.9610", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "s'_", "1.6200", "65.7436", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "p_", "1.6300", "71.5226", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "h_", "0.9830", "121.5152", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "f_", "1.2700", "57.9126", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "cl_", "1.6070", "69.8485", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "br_", "1.7550", "65.2239", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "i_", "1.9410", "60.2079", "2.0000", "Ver. 2.0, Ref. 18"}, {"op_", "si", "1.5870", "73.0600", "2.0000", "Ver. 2.0, Ref. 18"}, {"o-_", "p_", "1.4800", "107.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "2.0547", "45.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "2.0400", "43.7815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s'_", "2.0400", "47.4815", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "2.0200", "46.7198", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "h_", "1.3300", "87.5000", "1.7700", "Ver. 2.0, Ref. 18"}, {"s_", "f_", "1.6900", "51.2046", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cl_", "2.0270", "53.0203", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "br_", "2.1750", "46.9709", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "i_", "2.3610", "41.9406", "2.0000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "2.1300", "44.3232", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s'_", "1.9700", "80.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "1.9700", "63.8131", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "h_", "1.3730", "79.2035", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "f_", "1.6600", "48.8255", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cl_", "1.9970", "52.7842", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "br_", "2.1450", "46.9004", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "i_", "2.3310", "41.9068", "2.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "si_", "2.0800", "61.8936", "2.0000", "Ver. 2.0, Ref. 18"}, {"s-_", "p_", "1.9800", "52.7450", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "sp_", "2.0100", "40.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "s'_", "1.9900", "60.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "p_", "1.9900", "43.7949", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "h_", "1.3730", "75.5035", "1.7700", "Ver. 2.0, Ref. 18"}, {"sp_", "f_", "1.6600", "45.1255", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "cl_", "1.9970", "49.0842", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "br_", "2.1450", "43.2004", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "i_", "2.3310", "38.2068", "2.0000", "Ver. 2.0, Ref. 18"}, {"sp_", "si_", "2.1000", "41.8565", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "p_", "1.9700", "44.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "h_", "1.4300", "56.0000", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "f_", "1.5400", "57.5916", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "cl_", "2.0430", "52.2057", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "br_", "2.1800", "45.7868", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "i_", "2.3110", "40.6770", "2.0000", "Ver. 2.0, Ref. 18"}, {"p_", "si_", "1.9170", "42.0518", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "h_", "0.74611", "104.207", "1.9561", "Ver. 2.0, Ref. 18"}, {"h_", "f_", "1.0230", "130.1826", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cl_", "1.3600", "86.4756", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "br_", "1.5080", "78.5432", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "i_", "1.6940", "73.0108", "2.0000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "1.4630", "72.0792", "2.0000", "Ver. 2.0, Ref. 18"}, {"dw", "dw", "0.74164", "106.010", "1.9382", "Ver. 2.0, Ref. 18"}, {"f_", "f_", "1.4170", "37.5", "2.6284", "Ver. 2.0, Ref. 18"}, {"f_", "cl_", "1.6470", "51.7795", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "br_", "1.7950", "48.3750", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "i_", "1.9810", "43.5416", "2.0000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "1.5870", "74.3350", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "cl_", "1.988", "58.066", "2.0183", "Ver. 2.0, Ref. 18"}, {"cl_", "br_", "2.1320", "52.2969", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "i_", "2.3180", "47.3349", "2.0000", "Ver. 2.0, Ref. 18"}, {"cl_", "si_", "2.0870", "51.9937", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "br_", "2.290", "46.336", "1.9469", "Ver. 2.0, Ref. 18"}, {"br_", "i_", "2.4660", "41.4039", "2.0000", "Ver. 2.0, Ref. 18"}, {"br_", "si_", "2.2350", "45.0580", "2.0000", "Ver. 2.0, Ref. 18"}, {"i_", "i_", "2.662", "36.46", "1.8383", "Ver. 2.0, Ref. 18"}, {"i_", "si_", "2.4210", "39.7416", "2.0000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "2.1900", "36.0000", "2.0000", "Ver. 2.0, Ref. 18"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= CVFF_aug info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * CVFF_aug_angles_auto[640][6]= {{"mg2+", "cl-", "mg2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"mg2+", "oz", "sz", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"cl-", "mg2+", "cl-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "mg2+", "cl-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"sy", "oy", "sy", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"py", "oy", "py", "144.0000", "00.0000", "Ver. 3.2, Ref. 34"}, {"vy", "oy", "vy", "144.0000", "00.0000", "Ver. 3.2, Ref. 34"}, {"ti4c", "oy", "ti4c", "144.0000", "00.0000", "Ver. 3.2, Ref. 35"}, {"ca2c", "oy", "ca2c", "144.0000", "00.0000", "Ver. 3.2, Ref. 35"}, {"nh4+", "oy", "nh4+", "144.0000", "00.0000", "Ver. 3.2, Ref. 36"}, {"so4y", "oy", "so4y", "144.0000", "00.0000", "Ver. 3.2, Ref. 36"}, {"cly-", "oy", "cly-", "144.0000", "00.0000", "Ver. 3.2, Ref. 36"}, {"sr2c", "oy", "sr2c", "144.0000", "00.0000", "Ver. 3.2, Ref. 35"}, {"ayt", "oy", "ayt", "144.0000", "00.0000", "Ver. 3.2, Ref. 34"}, {"ay", "oy", "ay", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"sz", "oz", "sz", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"az", "oz", "az", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"pz", "oz", "pz", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"ga", "oz", "ga", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"ge", "oz", "ge", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"tioc", "oz", "tioc", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"titd", "oz", "titd", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"li+", "oz", "li+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"na+", "oz", "na+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"nac+", "oy", "nac+", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"k+", "oz", "k+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"rb+", "oz", "rb+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"cs+", "oz", "cs+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"mg2+", "oz", "mg2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"mg2c", "oy", "mg2c", "144.0000", "00.0000", "Ver. 3.3, Ref. 24"}, {"mn4c", "oy", "mn4c", "144.0000", "00.0000", "Ver. 3.2, Ref. 25"}, {"mn3c", "oy", "mn3c", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"co2c", "oy", "co2c", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"ni2c", "oy", "ni2c", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"lic+", "oy", "lic+", "144.0000", "00.0000", "Ver. 3.3, Ref. 25"}, {"ca2+", "oz", "ca2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"ba2+", "oz", "ba2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"cu2+", "oz", "cu2+", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"fe2c", "oy", "fe2c", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"f-", "oz", "f-", "144.0000", "00.0000", "Ver. 3.1, Ref. 26"}, {"cl-", "oz", "cl-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"br-", "oz", "br-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"i-", "oz", "i-", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"so4", "oz", "so4", "144.0000", "00.0000", "Ver. 3.1, Ref. 23"}, {"hocl", "oy", "hocl", "144.0000", "00.0000", "Ver. 3.2, Ref. 24"}, {"pd2+", "oy", "pd2+", "144.0000", "00.0000", "Ver. 3.2, Ref. 27"}, {"lioh", "o*", "lioh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"naoh", "o*", "naoh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"koh", "o*", "koh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"foh", "o*", "foh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"cloh", "o*", "cloh", "144.0000", "00.0000", "Ver. 3.4, Ref. 30"}, {"beoh", "o*", "beoh", "144.0000", "00.0000", "Ver. 3.4, Ref. 33"}, {"beoh", "o*", "h*", "144.0000", "00.0000", "Ver. 3.4, Ref. 33"}, {"cp", "cp", "c'", "120.0000", "34.6799", "Ver. 3.0, Ref. 22"}, {"cp", "c'", "o", "120.0000", "54.4949", "Ver. 3.0, Ref. 22"}, {"cp", "c'", "o'", "120.0000", "54.4949", "Ver. 3.0, Ref. 22"}, {"cp", "cp", "no", "120.0000", "34.6799", "Ver. 3.0, Ref. 22"}, {"cp", "no", "o-", "120.0000", "54.4949", "Ver. 3.0, Ref. 22"}, {"o-", "no", "o-", "120.0000", "113.5731", "Ver. 3.0, Ref. 22"}, {"c", "o", "c'", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "h", "106.4000", "39.5000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c'", "109.5000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c'", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "hn", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "118.0000", "111.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "c", "122.0000", "35.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c", "h", "109.5000", "51.5000", "Ver. 1.0, Ref. 1"}, {"n", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"c", "o", "ho", "106.0000", "58.5000", "Ver. 1.0, Ref. 1"}, {"o", "c", "h", "109.5000", "57.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"o", "c", "o", "109.5000", "70.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "hn", "125.0000", "33.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "o", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o", "110.0000", "122.8000", "Ver. 1.0, Ref. 1"}, {"c'", "o", "ho", "112.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o", "110.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"o-", "c'", "o-", "123.0000", "145.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o-", "120.0000", "68.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o-", "120.0000", "55.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "120.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "ho", "109.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o", "cp", "cp", "120.0000", "60.0000", "Ver. 1.0, Ref. 1"}, {"c", "sh", "hs", "96.0000", "48.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "sh", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "109.0000", "45.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "sh", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "109.0000", "62.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "c", "99.0000", "58.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "109.5000", "75.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n3", "109.5000", "57.3000", "Ver. 1.0, Ref. 1"}, {"hn", "n3", "hn", "105.5000", "36.0000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "c", "112.0000", "86.3000", "Ver. 1.0, Ref. 1"}, {"c", "n3", "hn", "110.0000", "41.6000", "Ver. 1.0, Ref. 1"}, {"c", "c", "n3", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "c5", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "h", "120.0000", "37.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "c5", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c5", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "c5", "120.0000", "44.2000", "Ver. 1.0, Ref. 1"}, {"c", "c", "c5", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"np", "c5", "np", "134.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"c5", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"h", "c5", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "hn", "120.0000", "27.5000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "np", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "o", "c", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n", "cp", "115.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"n3", "c", "c'", "109.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c", "cp", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c", "o", "c", "109.5000", "60.0000", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "h*", "104.5000", "50.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "c", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"p", "o", "p", "120.0000", "72.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o'", "p", "o'", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"o", "p", "o-", "109.5000", "110.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "o-", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c5", "np", "c", "128.8000", "70.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "o", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "h", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"np", "c", "c", "109.5000", "80.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n", "114.1000", "53.5000", "Ver. 1.0, Ref. 1"}, {"c=1", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c=2", "c'", "n", "114.1000", "53.5000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c'", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=", "122.3000", "36.2000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=1", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=1", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c=2", "122.3000", "36.2000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "h", "120.0000", "37.5000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "h", "120.0000", "37.5000", "Ver. 2.0, Ref. 19"}, {"c=", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=1", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c=2", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=", "110.5000", "46.6000", "Ver. 1.0, Ref. 1"}, {"c'", "c", "c=1", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"c'", "c", "c=2", "110.5000", "46.6000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=", "110.0000", "44.4000", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"h", "c", "c=2", "110.0000", "44.4000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "h", "121.2000", "33.8000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "h", "121.2000", "33.8000", "Ver. 2.0, Ref. 19"}, {"c=", "c=", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=1", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=1", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=2", "c=2", "np", "120.0000", "90.0000", "Ver. 2.0, Ref. 19"}, {"c=", "np", "c=", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=1", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=1", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"c=2", "np", "c=2", "114.0000", "75.1000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"o'", "c'", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=", "c'", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "c=2", "c'", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=", "np", "120.0000", "40.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"h", "c=2", "np", "120.0000", "40.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=", "120.0000", "50.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "c=1", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"c", "np", "c=2", "120.0000", "50.0000", "Ver. 2.0, Ref. 19"}, {"cp", "np", "c5", "114.0000", "75.1000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "np", "120.0000", "90.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "n", "120.0000", "102.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "c", "107.8000", "99.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "h", "107.1000", "62.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "c", "107.8000", "85.0000", "Ver. 1.0, Ref. 1"}, {"cl", "c", "h", "107.1000", "67.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "c", "107.8000", "96.0000", "Ver. 1.0, Ref. 1"}, {"br", "c", "h", "107.1000", "56.0000", "Ver. 1.0, Ref. 1"}, {"f", "cp", "cp", "120.0000", "99.0000", "Ver. 1.0, Ref. 1"}, {"cl", "cp", "cp", "120.0000", "85.0000", "Ver. 1.0, Ref. 1"}, {"br", "cp", "cp", "120.0000", "96.0000", "Ver. 1.0, Ref. 1"}, {"si", "c", "h", "112.3000", "34.6000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "113.5000", "44.4000", "Ver. 1.0, Ref. 1"}, {"c", "si", "h", "109.1000", "32.7000", "Ver. 1.0, Ref. 1"}, {"h", "si", "h", "112.0000", "31.8000", "Ver. 1.0, Ref. 1"}, {"si", "c", "si", "122.5000", "42.2000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "117.3000", "44.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "h", "113.4000", "33.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "149.8000", "31.1000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "113.1000", "42.3000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "124.1000", "56.4000", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "cp", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"nt", "nt", "c", "180.0", "50.0", "Ver. 1.3, Ref. 5"}, {"cs", "c5", "c5", "112.7000", "70.0000", "Ver. 1.3, Ref. 6"}, {"cs", "c5", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"c5", "cs", "h", "124.0000", "30.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "92.5670", "126.5060", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "c5", "111.0390", "88.7595", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "h", "119.9000", "30.2723", "Ver. 1.3, Ref. 6"}, {"s'", "c'", "h", "121.6300", "40.9360", "Ver. 1.3, Ref. 7"}, {"h", "c'", "h", "117.0200", "26.3900", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"s'", "c'", "c", "120.0000", "40.0000", "Ver. 1.3, Ref. 7"}, {"c5", "op", "c5", "120.0000", "75.0000", "Ver. 1.3, Ref. 8"}, {"oy", "sy", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oy", "py", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 34"}, {"oy", "vy", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 34"}, {"oy", "ti4c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ca2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 35"}, {"oy", "nh4+", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 36"}, {"oy", "so4y", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 36"}, {"oy", "cly-", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 36"}, {"oy", "sr2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ayt", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 34"}, {"oy", "ay", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oz", "sz", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "az", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "pz", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ga", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ge", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "tioc", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "titd", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "li+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "nac+", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oz", "na+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "k+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "rb+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "cs+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "mg2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oy", "mn4c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "mn3c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "co2c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "ni2c", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oy", "lic+", "oy", "109.4700", "00.0000", "Ver. 3.3, Ref. 25"}, {"oz", "mg2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ca2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "ba2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "cu2+", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "fe2c", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oz", "f-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 26"}, {"oz", "cl-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "br-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "i-", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oz", "so4", "oz", "109.4700", "00.0000", "Ver. 3.1, Ref. 23"}, {"oy", "hocl", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 24"}, {"oy", "pd2+", "oy", "109.4700", "00.0000", "Ver. 3.2, Ref. 27"}, {"o*", "lioh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "naoh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "koh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "foh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"o*", "beoh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 33"}, {"o*", "cloh", "o*", "109.4700", "00.0000", "Ver. 3.4, Ref. 30"}, {"al", "oz", "al", "149.8000", "31.1000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "oz", "113.1000", "42.3000", "Ver. 2.1, Ref. 26"}, {"oz", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"h", "al", "h", "112.0000", "31.8000", "Ver. 2.1, Ref. 26"}, {"o", "al", "o", "113.1000", "42.3000", "Ver. 2.1, Ref. 26"}, {"o", "al", "h", "113.4000", "33.3000", "Ver. 2.1, Ref. 26"}, {"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c3m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c3m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "c3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c3m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c3m_", "c3m_", "60.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c3m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "c3m_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c3m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c3m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c3m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c4m_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c3m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c4m_", "c4m_", "112.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"beoh_", "o_", "h_", "109.5000", "0.0000", "Ver. 3.3, Ref. 33"}, {"o'_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o3e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c4m_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c4m_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c4m_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n3m_", "125.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n4m_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"c4m_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n3m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n3m_", "c3m_", "113.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n3m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n3m_", "c3m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n3m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n4m_", "*", "110.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n4m_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"h_", "n4m_", "c4m_", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"f_", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n4m_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"n4m_", "o_", "*", "120.0010", "72.0000", "Ver. 2.0, Ref. 18"}, {"s3e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "op_", "*", "106.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s3e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s3e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s3e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s3e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s3e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s4e_", "*", "99.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n3m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"n4m_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s4e_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s3e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s4e_", "s4e_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s4e_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s4e_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c4m_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"c3m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c4m_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c3m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c4m_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "*", "109.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c_", "c_", "114.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c_", "*", "109.5000", "70.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c_", "*", "109.5000", "62.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c_", "*", "109.5000", "44.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "*", "107.8000", "95.0000", "Ver. 2.0, Ref. 18"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c_", "*", "112.3000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "*", "120.0000", "53.5000", "Ver. 2.0, Ref. 18"}, {"o_", "c'_", "*", "110.0000", "122.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c'_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c'_", "*", "123.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "*", "110.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"n_", "c'_", "c_", "114.0000", "82.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "h_", "120.0000", "55.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c'_", "n_", "123.0000", "145.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 18"}, {"f_", "c'_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c'_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "cp_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "cp_", "*", "120.0000", "102.0000", "Ver. 2.0, Ref. 18"}, {"o_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "*", "120.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s_", "cp_", "c_", "114.0000", "89.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "cp_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "cp_", "*", "120.0000", "37.0000", "Ver. 2.0, Ref. 18"}, {"f_", "cp_", "*", "120.0000", "99.0000", "Ver. 2.0, Ref. 18"}, {"si_", "cp_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 18"}, {"c_", "c=_", "*", "120.0000", "36.2000", "Ver. 2.0, Ref. 18"}, {"n_", "c=_", "*", "120.0000", "90.0000", "Ver. 2.0, Ref. 18"}, {"o_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "c=_", "*", "120.0000", "68.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"s_", "c=_", "*", "120.0000", "40.0000", "Ver. 2.0, Ref. 18"}, {"h_", "c=_", "*", "120.0000", "37.5000", "Ver. 2.0, Ref. 18"}, {"f_", "c=_", "*", "120.0000", "96.0000", "Ver. 2.0, Ref. 18"}, {"si_", "c=_", "*", "120.0000", "34.6000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 18"}, {"c_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"n_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "na_", "*", "114.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"f_", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"h_", "na_", "*", "110.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"si_", "na_", "*", "109.0000", "41.6000", "Ver. 2.0, Ref. 18"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"c_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"n_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "n_", "*", "120.0000", "80.0000", "Ver. 2.0, Ref. 18"}, {"s_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "n_", "*", "120.0000", "70.0000", "Ver. 2.0, Ref. 18"}, {"f_", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"h_", "n_", "*", "122.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"si_", "n_", "*", "120.0000", "35.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"n_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"f_", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"si_", "np_", "*", "120.0000", "27.5000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 18"}, {"*", "nt_", "*", "180.0", "50.0", "Ver. 2.0, Ref. 18"}, {"c_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"n_", "o_", "*", "120.0000", "72.0000", "Ver. 2.0, Ref. 18"}, {"o_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"h_", "o_", "*", "109.0000", "58.5000", "Ver. 2.0, Ref. 18"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"f_", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "*", "124.1000", "56.4000", "Ver. 2.0, Ref. 18"}, {"si_", "o_", "si", "149.8000", "31.1000", "Ver. 2.0, Ref. 18"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 18"}, {"c_", "s_", "*", "102.0000", "58.0000", "Ver. 2.0, Ref. 18"}, {"n_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"o'_", "s_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "s_", "*", "103.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"h_", "s_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "s_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 18"}, {"si_", "s_", "*", "109.5000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 18"}, {"c_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"n_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"o'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"s'_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"h_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"f_", "sp_", "*", "92.5670", "126.5060", "Ver. 2.0, Ref. 18"}, {"si_", "sp_", "*", "96.0000", "48.0000", "Ver. 2.0, Ref. 18"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 18"}, {"c_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"n_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"o'_", "p_", "*", "120.0000", "110.0000", "Ver. 2.0, Ref. 18"}, {"s_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"s'_", "p_", "*", "120.0000", "100.0000", "Ver. 2.0, Ref. 18"}, {"h_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"f_", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"si_", "p_", "*", "109.5000", "30.0000", "Ver. 2.0, Ref. 18"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 18"}, {"c_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"n_", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}, {"o_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"s_", "si_", "*", "113.1000", "42.3000", "Ver. 2.0, Ref. 18"}, {"h_", "si_", "*", "112.0000", "31.8000", "Ver. 2.0, Ref. 18"}, {"f_", "si_", "*", "117.3000", "44.1000", "Ver. 2.0, Ref. 18"}, {"si_", "si_", "*", "113.4000", "33.3000", "Ver. 2.0, Ref. 18"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 18"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= CVFF_aug info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * CVFF_aug_torsions_auto[342][8]= {{"*", "cl-", "mg2+", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "sy", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "py", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 34"}, {"*", "vy", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 34"}, {"*", "ti4c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 35"}, {"*", "ca2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 35"}, {"*", "nh4+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 36"}, {"*", "so4y", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 36"}, {"*", "cly-", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 36"}, {"*", "sr2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 35"}, {"*", "ayt", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 34"}, {"*", "ay", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "sz", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "az", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "pz", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ga", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ge", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "tioc", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "titd", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "li+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "nac+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "na+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "k+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "rb+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "cs+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "mg2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "mn4c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "mn3c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "co2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "ni2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "lic+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.3, Ref. 25"}, {"*", "mg2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ca2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "ba2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "cu2+", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "fe2c", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "f-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 26"}, {"*", "cl-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "br-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "i-", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "so4", "oz", "*", "00.0000", "2", "000.0000", "Ver. 3.1, Ref. 23"}, {"*", "hocl", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 24"}, {"*", "pd2+", "oy", "*", "00.0000", "2", "000.0000", "Ver. 3.2, Ref. 27"}, {"*", "lioh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "naoh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "koh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "foh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "cloh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 30"}, {"*", "beoh", "o*", "*", "00.0000", "2", "000.0000", "Ver. 3.4, Ref. 33"}, {"*", "cp", "no", "*", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"*", "cp", "c'", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c", "*", "1.4225", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "c'", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "n", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "o", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "of", "*", "0.3900", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "n2", "*", "6.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cr", "n2", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "cr", "*", "13.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "o", "*", "4.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "cp", "*", "12.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "c", "*", "0.0000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "c", "cp", "0.6750", "4", "0.0000", "Ver. 1.9, Ref. 17"}, {"*", "ct", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "o", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "ct", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "ct", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "c'", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "o", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "n", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "s", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "nt", "*", "0.0000", "0", "0.0000", "Ver. 1.3, Ref. 5"}, {"*", "cp", "o", "*", "1.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "c", "1.8000", "2", "180.0000", "Ver. 1.9, Ref. 16"}, {"*", "cp", "of", "*", "3.5000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "sh", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c", "s", "*", "0.4200", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "s", "s", "*", "5.5000", "2", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n3", "c", "*", "0.8000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "n2", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n2", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "cp", "n", "*", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "p", "o", "*", "0.7500", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=", "np", "*", "4.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "np", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c=", "*", "16.3000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=1", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=1", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c=2", "*", "16.3000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=", "c", "*", "1.2660", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c=1", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "c=2", "c", "*", "1.2660", "3", "0.0000", "Ver. 2.0, Ref. 19"}, {"*", "np", "c", "*", "0.0000", "0", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=", "*", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"*", "c'", "c=1", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "c'", "c=2", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 19"}, {"*", "cs", "cp", "*", "6.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "cp", "12.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cs", "sp", "cs", "h", "3.9316", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "cp", "6.4517", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"sp", "cs", "cp", "h", "2.0000", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"c", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n", "hn", "1.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "c", "3.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"o'", "c'", "n", "hn", "1.8000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n", "c", "3.2000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "c", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "h", "0.2800", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "c", "si", "-1.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "c", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "o", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "si", "o", "si", "0.4000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "si", "1.0000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "si", "o", "0.3000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "si", "o", "c", "0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "si", "o", "c", "-0.1000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"si", "o", "c", "h", "0.7000", "3", "0.0000", "Ver. 1.0, Ref. 1"}, {"*", "c_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n3n_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n3n_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n3n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n3n_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n3n_", "*", "0.0500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "n3n_", "*", "0.3000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "n3n_", "*", "0.3000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "n3n_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c_", "*", "0.1580", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c'_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "cp_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_1", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_2", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "c=_3", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "na_", "*", "0.0500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "o_", "*", "0.1300", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "s_", "*", "0.1367", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "p_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c_", "si_", "*", "0.1111", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c'_", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "cp_", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_1", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_2", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "c=_3", "*", "0.4500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "*", "3.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n_", "h_", "1.2000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_1", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_2", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "n=_3", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "*", "5.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "np_", "h", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "o_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "op", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "sp_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c'_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "cp_", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_1", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_2", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "c=_3", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "na_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n_", "*", "2.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "*", "2.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "np_", "h_", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_1", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_2", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "n=_3", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "*", "1.8000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "o_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "op", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "p_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_3", "*", "4.0750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_2", "*", "3.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "c=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "c=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "np_", "h_", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_3", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_1", "*", "8.1500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_2", "*", "2.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_1", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "n=_3", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "n=_2", "*", "0.6250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_1", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_2", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "o_", "*", "0.9000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "s_", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "sp_", "*", "6.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "si_", "*", "0.2110", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "c=_3", "p_", "*", "1.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "c+_", "n_", "*", "3.4000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "ct_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "na_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "o_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "s_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "ct_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "na_", "*", "0.2500", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "np_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_1", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_2", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "n=_3", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "o_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "s_", "*", "0.0975", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "na_", "si_", "*", "0.0667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n_", "*", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "np_", "h_", "0.3750", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n_", "si_", "*", "0.0000", "0", "0.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "np_", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "o_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "op", "*", "11.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "s_", "*", "1.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "sp_", "*", "10.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "np_", "si_", "*", "0.2500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_1", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_2", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "n=_3", "*", "0.7500", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "np_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "o_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "op", "*", "5.50000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "s_", "*", "0.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "sp_", "*", "5.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"h_", "np_", "si_", "*", "0.1250", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_3", "*", "15.0000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_2", "*", "7.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_1", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "n=_2", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "n=_3", "*", "1.5000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_1", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_2", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "o_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "s_", "*", "0.7000", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "n=_3", "si_", "*", "0.2333", "2", "180.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "o_", "*", "1.0000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "s_", "*", "1.0000", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "si_", "*", "0.3333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "o_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "s_", "*", "5.5000", "2", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "si_", "*", "0.2333", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "s_", "p_", "*", "0.3750", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "si_", "*", "0.1667", "3", "0.", "Ver. 2.0, Ref. 18"}, {"*", "si_", "p_", "*", "0.0000", "3", "0.", "Ver. 2.0, Ref. 18"}}; /* Out of plane / impropers / improper 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= CVFF_aug info E = K * (Chi - Chi0)^2 */ char * CVFF_aug_impropers[41][8]= {{"c'", "cp", "cp", "cp", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"cp", "c'", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"cp", "no", "o'", "o'", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"cp", "cp", "cp", "no", "10.0000", "2", "180.0000", "Ver. 3.0, Ref. 22"}, {"c", "c'", "n", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "n2", "c'", "hn", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "o'", "11.6000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n", "c", "c", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c'", "o'", "n", "0.0500", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "c", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o'", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "hn", "hn", "0.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n", "c'", "n2", "n2", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"hn", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"n2", "cp", "cp", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c'", "n2", "o'", "10.0000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c'", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "np", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c", "c=", "11.1000", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"c", "np", "cp", "cp", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.3700", "2", "180.0000", "Ver. 1.0, Ref. 1"}, {"sp", "cs", "cp", "h", "2.9998", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"cp", "cp", "cs", "h", "0.3700", "2", "180.0000", "Ver. 1.3, Ref. 6"}, {"h", "c'", "s'", "h", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"c", "c'", "c", "s'", "7.5300", "2", "180.0000", "Ver. 1.3, Ref. 7"}, {"*", "c'_", "*", "*", "10.0000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "cp_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "c=_", "*", "*", "11.1000", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "n_", "*", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 18"}, {"*", "np_", "*", "*", "0.3700", "2", "180.0000", "Ver. 2.0, Ref. 18"}}; /* Non-bonded (12-6) 0= Key, 1= A, 2= B, 3= CVFF_aug info E = Aij/r^12 - Bij/r^6 where Aij = sqrt( Ai * Aj ) Bij = sqrt( Bi * Bj )0 */ char * CVFF_aug_vdw[86][4]= {{"h", "7108.4660", "32.87076", "Ver. 1.0, Ref. 1"}, {"cg", "1790340.7240", "528.48190", "Ver. 1.0, Ref. 1"}, {"o'", "272894.7846", "498.87880", "Ver. 1.0, Ref. 1"}, {"n", "2266872.4000", "1230.55700", "Ver. 1.0, Ref. 1"}, {"c'", "2968753.3590", "1325.70810", "Ver. 1.0, Ref. 1"}, {"c", "1981049.2250", "1125.99800", "Ver. 1.0, Ref. 1"}, {"hn", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"s", "365906.4000", "250.80000", "Ver. 1.0, Ref. 1"}, {"s'", "1395550.1000", "956.80800", "Ver. 1.3, Ref. 6"}, {"o*", "629358.0000", "625.50000", "Ver. 1.0, Ref. 1"}, {"h*", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"beoh", "0.00000001", "0.00000", "Ver. 3.4, Ref. 33"}, {"p", "6025894.0000", "2195.60000", "Ver. 1.0, Ref. 1"}, {"ca+", "119025.0000", "240.25000", "Ver. 2.0, Ref. 20"}, {"si", "3149175.0000", "710.00000", "Ver. 1.0, Ref. 1"}, {"f", "201106.0000", "235.20000", "Ver. 1.0, Ref. 1"}, {"cl", "1059166.0000", "541.00000", "Ver. 1.0, Ref. 1"}, {"br", "3572030.0000", "1195.00000", "Ver. 1.0, Ref. 1"}, {"Na", "14000.0000", "300.00000", "Ver. 1.0, Ref. 1"}, {"Cl", "25552052.0000", "3307.00450", "Ver. 1.0, Ref. 1"}, {"Br", "34375640.0000", "3517.84460", "Ver. 1.0, Ref. 1"}, {"ar", "2312930.0", "1484.0920", "Ver. 1.3, Ref. 9"}, {"nu", "0.00000001", "0.00000", "Ver. 1.0, Ref. 1"}, {"py", "305.7467", "0.00111", "Ver. 3.2, Ref. 34"}, {"vy", "5798.1994", "0.00000", "Ver. 3.2, Ref. 34"}, {"ayt", "183.7928", "20.42565", "Ver. 3.2, Ref. 34"}, {"ti4c", "33874.9079", "0.00025", "Ver. 3.2, Ref. 35"}, {"ca2c", "430342.8075", "1535.58846", "Ver. 3.2, Ref. 35"}, {"nh4+", "3832879.5370", "2377.46428", "Ver. 3.2, Ref. 36"}, {"cly-", "5328228.5280", "676.85728", "Ver. 3.2, Ref. 36"}, {"so4y", "0.2431", "44.55457", "Ver. 3.2, Ref. 36"}, {"sr2c", "1097544.2980", "0.00000", "Ver. 3.2, Ref. 35"}, {"sy", "368.5103", "0.00118", "Ver. 3.2, Ref. 24"}, {"sz", "103.8039", "0.00069", "Ver. 3.1, Ref. 23"}, {"oy", "989199.2750", "676.85728", "Ver. 3.2, Ref. 24"}, {"oz", "388611.3727", "0.18928", "Ver. 3.1, Ref. 23"}, {"ay", "2326.0964", "2.04660", "Ver. 3.2, Ref. 24"}, {"az", "278.3910", "1690.14959", "Ver. 3.1, Ref. 23"}, {"pz", "0.1326", "874.40119", "Ver. 3.1, Ref. 23"}, {"ga", "80.9632", "0.00000", "Ver. 3.1, Ref. 23"}, {"ge", "82.8131", "27.40220", "Ver. 3.1, Ref. 23"}, {"tioc", "6915.3989", "3262.49972", "Ver. 3.1, Ref. 23"}, {"titd", "1231.5903", "0.00000", "Ver. 3.1, Ref. 23"}, {"li+", "1252.1495", "0.03437", "Ver. 3.1, Ref. 23"}, {"nac+", "224513.0317", "2377.46428", "Ver. 3.2, Ref. 24"}, {"na+", "67423.6364", "0.00046", "Ver. 3.1, Ref. 23"}, {"k+", "12886.4561", "0.00009", "Ver. 3.1, Ref. 23"}, {"rb+", "4300534.1423", "6957.88573", "Ver. 3.1, Ref. 23"}, {"cs+", "7280468.2656", "1021.07213", "Ver. 3.1, Ref. 23"}, {"fe2c", "56757.5734", "2377.46428", "Ver. 3.2, Ref. 24"}, {"mg2c", "27194.3713", "2377.46428", "Ver. 3.2, Ref. 24"}, {"mn4c", "15940.6170", "6429.8290", "Ver. 3.3, Ref. 25"}, {"co2c", "29906.3803", "1995.4833", "Ver. 3.3, Ref. 25"}, {"mn3c", "2211.2096", "0.0138", "Ver. 3.3, Ref. 25"}, {"lic+", "1154.3029", "0.0000", "Ver. 3.3, Ref. 25"}, {"ni2c", "8579.4845", "0.0000", "Ver. 3.3, Ref. 25"}, {"mg2+", "12275.1109", "1383.78426", "Ver. 3.1, Ref. 23"}, {"ca2+", "300393.7486", "432.82651", "Ver. 3.1, Ref. 23"}, {"ba2+", "2641062.0890", "14.11481", "Ver. 3.1, Ref. 23"}, {"cu2+", "8568.2586", "0.00071", "Ver. 3.1, Ref. 23"}, {"f-", "98927.2590", "0.18928", "Ver. 3.1, Ref. 26"}, {"cl-", "536839.0775", "0.02976", "Ver. 3.1, Ref. 23"}, {"br-", "2.8937", "0.02976", "Ver. 3.1, Ref. 23"}, {"i-", "394.6286", "0.02976", "Ver. 3.1, Ref. 23"}, {"so4", "12.9538", "3277.36445", "Ver. 3.1, Ref. 23"}, {"hocl", "0.0046", "0.00000", "Ver. 3.2, Ref. 24"}, {"pd2+", "7748.8541", "0.00000", "Ver. 3.2, Ref. 27"}, {"lioh", "205.1053", "10.45753", "Ver. 3.4, Ref. 30"}, {"naoh", "12250.6790", "75.16294", "Ver. 3.4, Ref. 30"}, {"koh", "428660.3697", "435.04961", "Ver. 3.4, Ref. 30"}, {"foh", "397492.5026", "920.73615", "Ver. 3.4, Ref. 30"}, {"cloh", "52832487.3113", "13268.78826", "Ver. 3.4, Ref. 30"}, {"al", "3784321.4254", "11699.84934", "Ver. 2.1, Ref. 27"}, {"Au", "4603936.5046", "13692.05223", "Ver. 2.1, Ref. 27"}, {"Pb", "24856948.1942", "23280.48320", "Ver. 2.1, Ref. 27"}, {"Ni", "955901.6916", "6768.92014", "Ver. 2.1, Ref. 27"}, {"Pd", "2581174.9390", "10078.92459", "Ver. 2.1, Ref. 27"}, {"Pt", "4576819.9618", "16963.30818", "Ver. 2.1, Ref. 27"}, {"Ag", "3712095.6064", "10865.51833", "Ver. 2.1, Ref. 27"}, {"Cu", "1007210.0670", "6166.70278", "Ver. 2.1, Ref. 27"}, {"Cr", "1222517.4049", "7523.46700", "Ver. 2.1, Ref. 27"}, {"Fe", "1186612.1982", "7590.28296", "Ver. 2.1, Ref. 27"}, {"Li", "5192358.6600", "9916.81768", "Ver. 2.1, Ref. 27"}, {"Mo", "5869689.0344", "21298.66304", "Ver. 2.1, Ref. 27"}, {"W", "7876811.6340", "27853.23915", "Ver. 2.1, Ref. 27"}, {"al", "11422865.0000", "2282.96606", "Ver. 2.2, Ref. 29"}}; /* Bond increments To implement atomic charges */ char * CVFF_aug_bond_increments[717][5]= {{"no", "o-", "0.1684", "-0.1684", "Ver. 3.0, Ref. 22"}, {"no", "cp", "-0.1792", "0.1792", "Ver. 3.0, Ref. 22"}, {"c'", "cp", "-0.1792", "0.1792", "Ver. 2.0, Ref. 18"}, {"c", "cr", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "s1", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c'", "o-", "0.0700", "-0.5700", "Ver. 1.0, Ref. 1"}, {"ci", "h", "-0.2300", "0.2300", "Ver. 1.0, Ref. 1"}, {"ci", "ci", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ci", "ni", "0.3200", "-0.0700", "Ver. 1.0, Ref. 1"}, {"cr", "n", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"cr", "n1", "0.5000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"n", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n1", "hn", "0.0000", "0.5000", "Ver. 1.0, Ref. 1"}, {"n1", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n2", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"n2", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n3", "hn", "-0.1400", "0.1400", "Ver. 1.0, Ref. 1"}, {"n3", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"n4", "hn", "-0.1100", "0.3600", "Ver. 1.0, Ref. 1"}, {"n4", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "hn", "-0.2800", "0.2800", "Ver. 1.0, Ref. 1"}, {"np", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ni", "hn", "-0.3600", "0.3600", "Ver. 1.0, Ref. 1"}, {"ni", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o", "ho", "-0.2233", "0.2233", "Ver. 1.0, Ref. 1"}, {"o", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"oh", "ho", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"oh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o*", "h*", "-0.4100", "0.4100", "Ver. 1.0, Ref. 1"}, {"o*", "beoh", "0.0000", "0.0000", "Ver. 3.4, Ref. 33"}, {"o*", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o-", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"s-", "p", "-0.6824", "0.1824", "Ver. 2.0, Ref. 18"}, {"sh", "hs", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"sh", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s1", "s1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "p", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"d", "d", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"p", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"f", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cl", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"br", "lp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c'", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cs", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "0.1000", "-0.1000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "0.0865", "-0.0865", "Ver. 2.0, Ref. 18"}, {"c", "ct", "0.0400", "-0.0400", "Ver. 1.2, Ref. 3"}, {"c", "n3", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n", "0.2200", "-0.2200", "Ver. 1.0, Ref. 1"}, {"c", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n=", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=1", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n=2", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"c", "n4", "0.4200", "-0.1700", "Ver. 1.0, Ref. 1"}, {"c", "nt", "0.1000", "-0.1000", "Ver. 1.3, Ref. 5"}, {"c", "nz", "0.3640", "-0.3640", "Ver. 2.0, Ref. 18"}, {"c", "o", "0.1500", "-0.1500", "Ver. 1.0, Ref. 1"}, {"c", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c", "oz", "0.1742", "-0.1742", "Ver. 2.0, Ref. 18"}, {"c", "op", "0.3957", "-0.3957", "Ver. 2.0, Ref. 18"}, {"c", "s", "-0.0500", "0.0500", "Ver. 1.0, Ref. 1"}, {"c", "sh", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "sp", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "s'", "0.1180", "-0.1180", "Ver. 2.0, Ref. 18"}, {"c", "p", "-0.0785", "0.0785", "Ver. 2.0, Ref. 18"}, {"c", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c", "f", "0.2750", "-0.2750", "Ver. 1.0, Ref. 1"}, {"c", "cl", "0.2260", "-0.2260", "Ver. 1.0, Ref. 1"}, {"c", "br", "0.1920", "-0.1920", "Ver. 1.0, Ref. 1"}, {"c", "i", "0.1120", "-0.1120", "Ver. 2.0, Ref. 18"}, {"c", "si", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c'", "c5", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "cs", "0.0", "0.0", "Ver. 1.5, Ref. 11"}, {"c'", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "c-", "-0.1368", "0.1368", "Ver. 2.0, Ref. 18"}, {"c'", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 18"}, {"c'", "n3", "-0.0442", "0.0442", "Ver. 2.0, Ref. 18"}, {"c'", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c'", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 18"}, {"c'", "n4", "0.1331", "0.1169", "Ver. 2.0, Ref. 18"}, {"c'", "nz", "0.1641", "-0.1641", "Ver. 2.0, Ref. 18"}, {"c'", "o", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"c'", "oz", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"c'", "op", "0.0300", "-0.0300", "Ver. 1.4, Ref. 10"}, {"c'", "o'", "0.3800", "-0.3800", "Ver. 1.0, Ref. 1"}, {"c'", "s", "-0.1528", "0.1528", "Ver. 2.0, Ref. 18"}, {"c'", "sh", "-0.2033", "0.2033", "Ver. 2.0, Ref. 18"}, {"c'", "sp", "-0.1079", "0.1079", "Ver. 2.0, Ref. 18"}, {"c'", "s'", "0.0", "0.0", "Ver. 1.3, Ref. 7"}, {"c'", "p", "-0.3283", "0.3283", "Ver. 2.0, Ref. 18"}, {"c'", "h", "-0.2132", "0.2132", "Ver. 1.0, Ref. 1"}, {"c'", "f", "0.1116", "-0.1116", "Ver. 2.0, Ref. 18"}, {"c'", "cl", "-0.0594", "0.0594", "Ver. 2.0, Ref. 18"}, {"c'", "br", "-0.1152", "0.1152", "Ver. 2.0, Ref. 18"}, {"c'", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 18"}, {"c'", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 18"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cp", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cp", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cp", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cp", "n", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n2", "0.1050", "-0.1050", "Ver. 1.1, Ref. 2"}, {"cp", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cp", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 1"}, {"cp", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cp", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cp", "o", "0.0282", "-0.0282", "Ver. 1.9, Ref. 16"}, {"cp", "oh", "0.0300", "-0.0300", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cp", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cp", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cp", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cp", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cp", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cp", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"cp", "f", "0.1300", "-0.1300", "Ver. 1.0, Ref. 1"}, {"cp", "cl", "0.1020", "-0.1020", "Ver. 1.0, Ref. 1"}, {"cp", "br", "0.0800", "-0.0800", "Ver. 1.0, Ref. 1"}, {"cp", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cp", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c5", "c5", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c5", "cs", "0.0000", "0.0000", "Ver. 1.3, Ref. 6"}, {"c5", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c5", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c5", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c5", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c5", "n", "0.1100", "-0.1100", "Ver. 1.4, Ref. 10"}, {"c5", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c5", "np", "0.1400", "-0.1400", "Ver. 1.0, Ref. 1"}, {"c5", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c5", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c5", "o", "0.1100", "-0.1100", "Ver. 1.2, Ref. 3"}, {"c5", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c5", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c5", "op", "0.1100", "-0.1100", "Ver. 1.3, Ref. 8"}, {"c5", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c5", "s", "-0.1500", "0.1500", "Ver. 1.2, Ref. 3"}, {"c5", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c5", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c5", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c5", "h", "-0.1300", "0.1300", "Ver. 1.0, Ref. 1"}, {"c5", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c5", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c5", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c5", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c5", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"cs", "cs", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"cs", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"cs", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"cs", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"cs", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"cs", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"cs", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"cs", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"cs", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"cs", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"cs", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"cs", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"cs", "sp", "-0.1500", "0.1500", "Ver. 1.3, Ref. 6"}, {"cs", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"cs", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"cs", "h", "-0.1300", "0.1300", "Ver. 1.3, Ref. 6"}, {"cs", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"cs", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"cs", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"cs", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"cs", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=1", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=1", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=1", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=1", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=1", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=1", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=1", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=1", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=1", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=1", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=1", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=1", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=1", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=1", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=1", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=1", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=1", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=1", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=1", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=1", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c=2", "c-", "0.0424", "-0.0424", "Ver. 2.0, Ref. 18"}, {"c=2", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 18"}, {"c=2", "n3", "0.1216", "-0.1216", "Ver. 2.0, Ref. 18"}, {"c=2", "n", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c=2", "np", "0.1993", "-0.1993", "Ver. 2.0, Ref. 18"}, {"c=2", "n4", "0.2989", "-0.0489", "Ver. 2.0, Ref. 18"}, {"c=2", "nz", "0.3230", "-0.3230", "Ver. 2.0, Ref. 18"}, {"c=2", "o", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "oh", "0.0297", "-0.0297", "Ver. 2.0, Ref. 18"}, {"c=2", "oz", "0.1367", "-0.1367", "Ver. 2.0, Ref. 18"}, {"c=2", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "o'", "0.3583", "-0.3583", "Ver. 2.0, Ref. 18"}, {"c=2", "s", "0.0282", "-0.0282", "Ver. 2.0, Ref. 18"}, {"c=2", "sh", "-0.0222", "0.0222", "Ver. 2.0, Ref. 18"}, {"c=2", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 18"}, {"c=2", "p", "-0.1267", "0.1267", "Ver. 2.0, Ref. 18"}, {"c=2", "h", "-0.1000", "0.1000", "Ver. 1.0, Ref. 1"}, {"c=2", "f", "0.2589", "-0.2589", "Ver. 2.0, Ref. 18"}, {"c=2", "cl", "0.1163", "-0.1163", "Ver. 2.0, Ref. 18"}, {"c=2", "br", "0.0725", "-0.0725", "Ver. 2.0, Ref. 18"}, {"c=2", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 18"}, {"c=2", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 18"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"c-", "ct", "0.0432", "-0.0432", "Ver. 2.0, Ref. 18"}, {"c-", "n3", "0.0824", "-0.0824", "Ver. 2.0, Ref. 18"}, {"c-", "n", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=1", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n=2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "np", "0.1607", "-0.1607", "Ver. 2.0, Ref. 18"}, {"c-", "n4", "0.2597", "-0.0097", "Ver. 2.0, Ref. 18"}, {"c-", "nz", "0.2854", "-0.2854", "Ver. 2.0, Ref. 18"}, {"c-", "o", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "oh", "-0.0058", "0.0058", "Ver. 2.0, Ref. 18"}, {"c-", "oz", "0.1012", "-0.1012", "Ver. 2.0, Ref. 18"}, {"c-", "op", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "o'", "0.3241", "-0.3241", "Ver. 2.0, Ref. 18"}, {"c-", "s", "-0.0146", "0.0146", "Ver. 2.0, Ref. 18"}, {"c-", "sh", "-0.0650", "0.0650", "Ver. 2.0, Ref. 18"}, {"c-", "sp", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s'", "0.0304", "-0.0304", "Ver. 2.0, Ref. 18"}, {"c-", "s-", "-0.1223", "-0.3777", "Ver. 2.0, Ref. 18"}, {"c-", "p", "-0.1744", "0.1744", "Ver. 2.0, Ref. 18"}, {"c-", "h", "-0.1549", "0.1549", "Ver. 2.0, Ref. 18"}, {"c-", "f", "0.2241", "-0.2241", "Ver. 2.0, Ref. 18"}, {"c-", "cl", "0.0747", "-0.0747", "Ver. 2.0, Ref. 18"}, {"c-", "br", "0.0281", "-0.0281", "Ver. 2.0, Ref. 18"}, {"c-", "i", "0.0185", "-0.0185", "Ver. 2.0, Ref. 18"}, {"c-", "si", "-0.2775", "0.2775", "Ver. 2.0, Ref. 18"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"ct", "n3", "0.0419", "-0.0419", "Ver. 2.0, Ref. 18"}, {"ct", "n", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=1", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n=2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "np", "0.1204", "-0.1204", "Ver. 2.0, Ref. 18"}, {"ct", "n4", "0.2181", "0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "nz", "0.2454", "-0.2454", "Ver. 2.0, Ref. 18"}, {"ct", "o", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "oh", "-0.0420", "0.0420", "Ver. 2.0, Ref. 18"}, {"ct", "oz", "0.0644", "-0.0644", "Ver. 2.0, Ref. 18"}, {"ct", "op", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "o'", "0.2874", "-0.2874", "Ver. 2.0, Ref. 18"}, {"ct", "s", "-0.0581", "0.0581", "Ver. 2.0, Ref. 18"}, {"ct", "sh", "-0.1082", "0.1082", "Ver. 2.0, Ref. 18"}, {"ct", "sp", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "s'", "-0.0135", "0.0135", "Ver. 2.0, Ref. 18"}, {"ct", "p", "-0.2216", "0.2216", "Ver. 2.0, Ref. 18"}, {"ct", "h", "-0.2000", "0.2000", "Ver. 1.2, Ref. 3"}, {"ct", "f", "0.1873", "-0.1873", "Ver. 2.0, Ref. 18"}, {"ct", "cl", "0.0319", "-0.0319", "Ver. 2.0, Ref. 18"}, {"ct", "br", "-0.0173", "0.0173", "Ver. 2.0, Ref. 18"}, {"ct", "i", "-0.0281", "0.0281", "Ver. 2.0, Ref. 18"}, {"ct", "si", "-0.3266", "0.3266", "Ver. 2.0, Ref. 18"}, {"n3", "n3", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n3", "n", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=1", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n=2", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "np", "0.0742", "-0.0742", "Ver. 2.0, Ref. 18"}, {"n3", "n4", "0.1650", "0.0850", "Ver. 2.0, Ref. 18"}, {"n3", "nz", "0.1927", "-0.1927", "Ver. 2.0, Ref. 18"}, {"n3", "o", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "oh", "-0.0754", "0.0754", "Ver. 2.0, Ref. 18"}, {"n3", "oz", "0.0249", "-0.0249", "Ver. 2.0, Ref. 18"}, {"n3", "op", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "o'", "0.2369", "-0.2369", "Ver. 2.0, Ref. 18"}, {"n3", "s", "-0.0967", "0.0967", "Ver. 2.0, Ref. 18"}, {"n3", "sh", "-0.1434", "0.1434", "Ver. 2.0, Ref. 18"}, {"n3", "sp", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "s'", "-0.0551", "0.0551", "Ver. 2.0, Ref. 18"}, {"n3", "p", "-0.2518", "0.2518", "Ver. 2.0, Ref. 18"}, {"n3", "h", "-0.2386", "0.2386", "Ver. 2.0, Ref. 18"}, {"n3", "f", "0.1415", "-0.1415", "Ver. 2.0, Ref. 18"}, {"n3", "cl", "-0.0117", "0.0117", "Ver. 2.0, Ref. 18"}, {"n3", "br", "-0.0601", "0.0601", "Ver. 2.0, Ref. 18"}, {"n3", "i", "-0.0714", "0.0714", "Ver. 2.0, Ref. 18"}, {"n3", "si", "-0.3501", "0.3501", "Ver. 2.0, Ref. 18"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n2", "n2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n2", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=1", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=1", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=1", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=1", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=1", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=1", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=1", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=1", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=1", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=1", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=1", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=1", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=1", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=1", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=1", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"n=2", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"n=2", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"n=2", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"n=2", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"n=2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"n=2", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"n=2", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"n=2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"n=2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"n=2", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"n=2", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"n=2", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"n=2", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"n=2", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"n=2", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"np", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"np", "n4", "0.0883", "0.1617", "Ver. 2.0, Ref. 18"}, {"np", "nz", "0.1186", "-0.1186", "Ver. 2.0, Ref. 18"}, {"np", "o", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "oh", "-0.1421", "0.1421", "Ver. 2.0, Ref. 18"}, {"np", "oz", "-0.0432", "0.0432", "Ver. 2.0, Ref. 18"}, {"np", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o'", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "o-", "0.1684", "-0.1684", "Ver. 2.0, Ref. 18"}, {"np", "s", "-0.1755", "0.1755", "Ver. 2.0, Ref. 18"}, {"np", "sh", "-0.2214", "0.2214", "Ver. 2.0, Ref. 18"}, {"np", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 18"}, {"np", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 18"}, {"np", "h", "-0.3278", "0.3278", "Ver. 2.0, Ref. 18"}, {"np", "f", "0.0731", "-0.0731", "Ver. 2.0, Ref. 18"}, {"np", "cl", "-0.0897", "0.0897", "Ver. 2.0, Ref. 18"}, {"np", "br", "-0.1422", "0.1422", "Ver. 2.0, Ref. 18"}, {"np", "i", "-0.1554", "0.1554", "Ver. 2.0, Ref. 18"}, {"np", "si", "-0.4367", "0.4367", "Ver. 2.0, Ref. 18"}, {"n4", "n4", "0.2500", "0.2500", "Ver. 2.0, Ref. 18"}, {"n4", "nz", "0.2842", "-0.0342", "Ver. 2.0, Ref. 18"}, {"n4", "o", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "oh", "0.0242", "0.2258", "Ver. 2.0, Ref. 18"}, {"n4", "oz", "0.1245", "0.1255", "Ver. 2.0, Ref. 18"}, {"n4", "op", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "o'", "0.3418", "-0.0918", "Ver. 2.0, Ref. 18"}, {"n4", "s", "-0.0257", "0.2757", "Ver. 2.0, Ref. 18"}, {"n4", "sh", "-0.0723", "0.3223", "Ver. 2.0, Ref. 18"}, {"n4", "sp", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "s'", "0.0159", "0.2341", "Ver. 2.0, Ref. 18"}, {"n4", "p", "-0.1994", "0.4494", "Ver. 2.0, Ref. 18"}, {"n4", "h", "-0.1978", "0.4478", "Ver. 2.0, Ref. 18"}, {"n4", "f", "0.2438", "0.0062", "Ver. 2.0, Ref. 18"}, {"n4", "cl", "0.0642", "0.1858", "Ver. 2.0, Ref. 18"}, {"n4", "br", "0.0048", "0.2452", "Ver. 2.0, Ref. 18"}, {"n4", "i", "-0.0114", "0.2614", "Ver. 2.0, Ref. 18"}, {"n4", "si", "-0.3083", "0.5583", "Ver. 2.0, Ref. 18"}, {"nz", "nz", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"nz", "o", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nz", "oh", "-0.2490", "0.2490", "Ver. 2.0, Ref. 18"}, {"nz", "oz", "-0.1523", "0.1523", "Ver. 2.0, Ref. 18"}, {"nz", "op", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nz", "o'", "0.0585", "-0.0585", "Ver. 2.0, Ref. 18"}, {"nz", "s", "-0.3010", "0.3010", "Ver. 2.0, Ref. 18"}, {"nz", "sh", "-0.3457", "0.3457", "Ver. 2.0, Ref. 18"}, {"nz", "sp", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nz", "s'", "-0.2612", "0.2612", "Ver. 2.0, Ref. 18"}, {"nz", "p", "-0.4691", "0.4691", "Ver. 2.0, Ref. 18"}, {"nz", "h", "-0.4688", "0.4688", "Ver. 2.0, Ref. 18"}, {"nz", "f", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"nz", "cl", "-0.2141", "0.2141", "Ver. 2.0, Ref. 18"}, {"nz", "br", "-0.2727", "0.2727", "Ver. 2.0, Ref. 18"}, {"nz", "i", "-0.2889", "0.2889", "Ver. 2.0, Ref. 18"}, {"nz", "si", "-0.5738", "0.5738", "Ver. 2.0, Ref. 18"}, {"o", "o", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"o", "oh", "-0.0921", "0.0921", "Ver. 2.0, Ref. 18"}, {"o", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"o", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"o", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"o", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"o", "p", "-0.3500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"o", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"o", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"o", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"o", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"o", "si", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "oh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oh", "oz", "0.0921", "-0.0921", "Ver. 2.0, Ref. 18"}, {"oh", "op", "0.2853", "-0.2853", "Ver. 2.0, Ref. 18"}, {"oh", "s", "-0.0063", "0.0063", "Ver. 2.0, Ref. 18"}, {"oh", "sh", "-0.0485", "0.0485", "Ver. 2.0, Ref. 18"}, {"oh", "sp", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "s'", "0.0313", "-0.0313", "Ver. 2.0, Ref. 18"}, {"oh", "p", "-0.1500", "0.1500", "Ver. 1.0, Ref. 1"}, {"oh", "h", "-0.1190", "0.1190", "Ver. 2.0, Ref. 18"}, {"oh", "f", "0.1983", "-0.1983", "Ver. 2.0, Ref. 18"}, {"oh", "cl", "0.0686", "-0.0686", "Ver. 2.0, Ref. 18"}, {"oh", "br", "0.0295", "-0.0295", "Ver. 2.0, Ref. 18"}, {"oh", "i", "0.0216", "-0.0216", "Ver. 2.0, Ref. 18"}, {"oh", "si", "-0.2188", "0.2188", "Ver. 2.0, Ref. 18"}, {"oz", "oz", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oz", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 18"}, {"oz", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 18"}, {"oz", "sh", "-0.1565", "0.1565", "Ver. 2.0, Ref. 18"}, {"oz", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 18"}, {"oz", "p", "-0.2548", "0.2548", "Ver. 2.0, Ref. 18"}, {"oz", "h", "-0.2432", "0.2432", "Ver. 2.0, Ref. 18"}, {"oz", "f", "0.1077", "-0.1077", "Ver. 2.0, Ref. 18"}, {"oz", "cl", "-0.0367", "0.0367", "Ver. 2.0, Ref. 18"}, {"oz", "br", "-0.0818", "0.0818", "Ver. 2.0, Ref. 18"}, {"oz", "i", "-0.0924", "0.0924", "Ver. 2.0, Ref. 18"}, {"oz", "si", "-0.3425", "0.3425", "Ver. 2.0, Ref. 18"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"op", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"op", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"op", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"op", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 18"}, {"op", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"op", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"op", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"op", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"op", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"op", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"o'", "o'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"o'", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 18"}, {"o'", "sh", "-0.3791", "0.3791", "Ver. 2.0, Ref. 18"}, {"o'", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 18"}, {"o'", "p", "-0.8500", "0.3500", "Ver. 1.0, Ref. 1"}, {"o'", "h", "-0.4943", "0.4943", "Ver. 2.0, Ref. 18"}, {"o'", "f", "-0.0888", "0.0888", "Ver. 2.0, Ref. 18"}, {"o'", "cl", "-0.2585", "0.2585", "Ver. 2.0, Ref. 18"}, {"o'", "br", "-0.3140", "0.3140", "Ver. 2.0, Ref. 18"}, {"o'", "i", "-0.3297", "0.3297", "Ver. 2.0, Ref. 18"}, {"o'", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 18"}, {"s", "s", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"s", "sh", "-0.0509", "0.0509", "Ver. 2.0, Ref. 18"}, {"s", "sp", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "s'", "0.0455", "-0.0455", "Ver. 2.0, Ref. 18"}, {"s", "p", "-0.1600", "0.1600", "Ver. 2.0, Ref. 18"}, {"s", "h", "-0.1392", "0.1392", "Ver. 2.0, Ref. 18"}, {"s", "f", "0.2380", "-0.2380", "Ver. 2.0, Ref. 18"}, {"s", "cl", "0.0898", "-0.0898", "Ver. 2.0, Ref. 18"}, {"s", "br", "0.0437", "-0.0437", "Ver. 2.0, Ref. 18"}, {"s", "i", "0.0345", "-0.0345", "Ver. 2.0, Ref. 18"}, {"s", "si", "-0.2634", "0.2634", "Ver. 2.0, Ref. 18"}, {"sh", "sh", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sh", "sp", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "s'", "0.0964", "-0.0964", "Ver. 2.0, Ref. 18"}, {"sh", "p", "-0.1032", "0.1032", "Ver. 2.0, Ref. 18"}, {"sh", "h", "-0.0787", "0.0787", "Ver. 2.0, Ref. 18"}, {"sh", "f", "0.2794", "-0.2794", "Ver. 2.0, Ref. 18"}, {"sh", "cl", "0.1392", "-0.1392", "Ver. 2.0, Ref. 18"}, {"sh", "br", "0.0966", "-0.0966", "Ver. 2.0, Ref. 18"}, {"sh", "i", "0.0889", "-0.0889", "Ver. 2.0, Ref. 18"}, {"sh", "si", "-0.2032", "0.2032", "Ver. 2.0, Ref. 18"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"sp", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"sp", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"sp", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"sp", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"sp", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"sp", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"sp", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"s'", "p", "-0.2106", "0.2106", "Ver. 2.0, Ref. 18"}, {"s'", "h", "-0.1932", "0.1932", "Ver. 2.0, Ref. 18"}, {"s'", "f", "0.2011", "-0.2011", "Ver. 2.0, Ref. 18"}, {"s'", "cl", "0.0457", "-0.0457", "Ver. 2.0, Ref. 18"}, {"s'", "br", "-0.0034", "0.0034", "Ver. 2.0, Ref. 18"}, {"s'", "i", "-0.0140", "0.0140", "Ver. 2.0, Ref. 18"}, {"s'", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 18"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"p", "h", "0.0356", "-0.0356", "Ver. 2.0, Ref. 18"}, {"p", "f", "0.3869", "-0.3869", "Ver. 2.0, Ref. 18"}, {"p", "cl", "0.2544", "-0.2544", "Ver. 2.0, Ref. 18"}, {"p", "br", "0.2156", "-0.2156", "Ver. 2.0, Ref. 18"}, {"p", "i", "0.2110", "-0.2110", "Ver. 2.0, Ref. 18"}, {"p", "si", "-0.1069", "0.1069", "Ver. 2.0, Ref. 18"}, {"h", "h", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"h", "f", "0.3823", "-0.3823", "Ver. 2.0, Ref. 18"}, {"h", "cl", "0.2404", "-0.2404", "Ver. 2.0, Ref. 18"}, {"h", "br", "0.1978", "-0.1978", "Ver. 2.0, Ref. 18"}, {"h", "i", "0.1923", "-0.1923", "Ver. 2.0, Ref. 18"}, {"h", "si", "0.0200", "-0.0200", "Ver. 1.0, Ref. 1"}, {"f", "f", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"f", "cl", "-0.1589", "0.1589", "Ver. 2.0, Ref. 18"}, {"f", "br", "-0.2099", "0.2099", "Ver. 2.0, Ref. 18"}, {"f", "i", "-0.2234", "0.2234", "Ver. 2.0, Ref. 18"}, {"f", "si", "-0.4789", "0.4789", "Ver. 2.0, Ref. 18"}, {"cl", "cl", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"cl", "br", "-0.0507", "0.0507", "Ver. 2.0, Ref. 18"}, {"cl", "i", "-0.0623", "0.0623", "Ver. 2.0, Ref. 18"}, {"cl", "si", "-0.3598", "0.3598", "Ver. 2.0, Ref. 18"}, {"br", "br", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"br", "i", "-0.0110", "0.0110", "Ver. 2.0, Ref. 18"}, {"br", "si", "-0.3272", "0.3272", "Ver. 2.0, Ref. 18"}, {"i", "i", "0.0", "0.0", "Ver. 1.3, Ref. 4"}, {"i", "si", "-0.3263", "0.3263", "Ver. 2.0, Ref. 18"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 18"}, {"oy", "py", "-1.0000", "1.0000", "Ver. 3.2, Ref. 34"}, {"oy", "vy", "-1.0000", "1.0000", "Ver. 3.2, Ref. 34"}, {"oy", "ti4c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ca2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 35"}, {"oy", "cly-", "-1.0000", "1.0000", "Ver. 3.2, Ref. 36"}, {"oy", "so4y", "-1.0000", "1.0000", "Ver. 3.2, Ref. 36"}, {"oy", "nh4+", "-1.0000", "1.0000", "Ver. 3.2, Ref. 36"}, {"oy", "sr2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 35"}, {"oy", "ayt", "-1.0000", "1.0000", "Ver. 3.2, Ref. 34"}, {"oy", "sy", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "sz", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "ay", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "az", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "pz", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ga", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ge", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "tioc", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "titd", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "li+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "nac+", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "na+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "k+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "rb+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "cs+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "mg2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oy", "mn4c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "mn3c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "co2c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "ni2c", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oy", "lic+", "-1.0000", "1.0000", "Ver. 3.3, Ref. 25"}, {"oz", "mg2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ca2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "ba2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "cu2+", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "fe2c", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oz", "f-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 26"}, {"oz", "cl-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "br-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "i-", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oz", "so4", "-0.6000", "0.6000", "Ver. 3.1, Ref. 23"}, {"oy", "hocl", "-1.0000", "1.0000", "Ver. 3.2, Ref. 24"}, {"oy", "pd2+", "-1.0000", "1.0000", "Ver. 3.2, Ref. 27"}}; Atomes-GNU-1.1.14/src/calc/force_fields/force_fields.c000066400000000000000000003002001457665371200223750ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file force_fields.c * @short Functions to prepare the force field XML files from the sources in atomes \n Functions to read the force field XML files * @author Sébastien Le Roux */ /* * This file: 'force_fields.c' * * Contains: * - The functions to prepare the force field XML files from the sources in atomes - The functions to read the force field XML files * * List of functions: int get_pdim(int fid, int prop, int col); int get_fkey(int fid, int prop, int col); int find_atom_id (int print, char * keyw); int find_atom_z (char * keyw); int get_z (int faid); int get_atoms (int z); int get_bond (int faid, int bid); int get_angle (int faid, int aid); int get_apex (int faid, int aid); int get_torsion (int faid, int tid, int a, int b); int get_improper (int faid, int a, int b); int get_vdw (int faid); int get_bi (int faid); int field_find_atoms (); float get_force_field_atom_mass (int sp, int num); gboolean not_done (int eid, int a, int b); gboolean not_done_an (int eid, int a, int b, int c); gboolean is_a_match (int * data, int num, int val[4]); gchar * find_atom_key (int fid, int prop, char * keyw); gchar * open_field_file (int field); void associate_pointers_to_field_data (int id); void print_object_dim_and_key_tables (int fid); void set_data (int pid, int obj, int oid, int faid); void field_has_element (int aid); void print_atom_table (int fid); void print_this_bond (int eid, int h, int fid, int inum, char * at_a, char * at_b, char ** the_bond); void print_bond_table (int fid, int inum); void print_this_angle (int eid, int h, int fid, int inum, int ub, char * at_a, char * at_b, char * at_c, char ** the_angle); void print_angle_table (int fid, int inum); void print_dihedral_table (int fid, int inum); void print_improper_table (int fid, int inum); void print_inversion_table (int fid, int inum); void print_vdw_table (int fid, int inum); void find_object_ijkl (int hid, int foid, int oid, int sa, int za, int sb, int zb, int sc, int zc, int sd, int zd); void field_find_bonds (); void field_find_angles (); void field_find_dihedrals (int id); void field_find_vdw (); void print_all (int oid); void clean_this_field_data (xmlDoc * doc, xmlTextReaderPtr reader); G_MODULE_EXPORT void setup_this_force_field (int id); */ #include "global.h" #include "interface.h" #include "dlp_field.h" #include "force_fields.h" #include extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader); #define N_FIELDS 21 #define N_PARAMS #define ALL_PARAMS 9 // Define Fields order and id #define FATS 0 #define FEQI 1 #define FBDS 2 #define FANG 3 #define FDIH 4 #define FIMP 5 #define FINV 6 #define FNBD 7 #define FINC 8 #define USE_ATOMS /* AMBER*: In atoms check label (1 letter only) CHARMM*: In atoms check label (1 letter only) CVFF/CVFF_aug/CFF91/PCFF: - Bonds: 'c=_' in 'c=', 'n=_' in 'n=', 'd_' in 'dw', 'ci_' in 'ci', 'ni_' in 'ni' - Quadratic angles: 's3m_' in 's3e_', 's4m_' in 's4e_', 'o4m_' in 'o4e_', '*?' in '*' CVFF: - Atoms: 'mg' in 'Mg' CVFF_aug: - Non-bonded : 'Al' in 'al' Compass : OPLSAA?: - In atoms : 'NA' to 'Na', 'CLA' to 'Cl', 'MG' to 'Mg' */ char * field_keyw[N_FIELDS] = {"amber94", "amber96", "amber98", "amber99", "prot_22", "prot_metals_22", "ethers_35", "carb_36", "cgenff_36", "lipid_36", "na_36", "prot_36", "prot_metals_36", "silicates", "CVFF", "CVFF_Aug", "CFF91", "PCFF", "Compass", "OPLSAAP", "OPLSAAR"}; char * field_ffl[N_FIELDS] = {"amber94", "amber96", "amber98", "amber99", "charmm-prot_22", "charmm-prot_metals_22", "charmm-ethers_35", "charmm-carb_36", "charmm-cgenff_36", "charmm-lipid_36", "charmm-na_36", "charmm-prot_36", "charmm-prot_metals_36", "charmm-silicates", "cvff", "cvff_aug", "cff91", "pcff", "compass", "oplsaap", "oplsaar"}; char * field_name[N_FIELDS] = {"Assisted Model Building with Energy Refinement 94", "Assisted Model Building with Energy Refinement 96", "Assisted Model Building with Energy Refinement 98", "Assisted Model Building with Energy Refinement 99", "Chemistry at HARvard Macromolecular Mechanics 22 Proteins", "Chemistry at HARvard Macromolecular Mechanics 22 Proteins and metals", "Chemistry at HARvard Macromolecular Mechanics 35 Ethers", "Chemistry at HARvard Macromolecular Mechanics 36 Carbohydrates", "Chemistry at HARvard Macromolecular Mechanics 36 General", "Chemistry at HARvard Macromolecular Mechanics 36 Lipids", "Chemistry at HARvard Macromolecular Mechanics 36 Nucleid acids", "Chemistry at HARvard Macromolecular Mechanics 36 Proteins", "Chemistry at HARvard Macromolecular Mechanics 36 proteins and metals", "Chemistry at HARvard Macromolecular Mechanics Silicates", "Consistent Valence Force Field", "Consistent Valence Force Field Augmented", "Consistent Force Field 91", "Polymer Consistent Force Field", "Condensed-phase Optimized Molecular Potentials for Atomistic Simulation Studies", "Optimized Potentials for Liquid Simulation All-atoms for Proteins", "Optimized Potentials for Liquid Simulation All-atoms for Proteins, Nucleosides, and Nucleotides"}; char * field_acro[N_FIELDS] = {"AMBER 94", "AMBER 96", "AMBER 98", "AMBER 99", "CHARMM 22 Proteins", "CHARMM 22 Proteins and metals", "CHARMM 35 Ethers", "CHARMM 36 Carbohydrates", "CHARMM 36 General", "CHARMM 36 Lipids", "CHARMM 36 Nucleid acids", "CHARMM 36 Proteins", "CHARMM 36 Proteins and metals", "CHARMM Silicates", "CVFF", "CVFF Augmented", "CFF 91", "PCFF", "COMPASS", "OPLS All-atoms for proteins", "OPLS All-atoms for RNA"}; char *** field_atoms; char *** field_equi[2]; // 0 = Quadratic, 1 = Quartic, 2 = Morse char *** field_bonds[3]; // 0 = Quadratic, 1 = Quartic char *** field_angles[2]; char *** field_dihedrals[2]; char *** field_inversions; char *** field_impropers; char *** field_vdw; int * field_objects; int * field_dim; gboolean is_99; int * atoms_id; int ** atoms_id_list; int ** extraz_id; FILE * fp; gchar * ffo_file[21]={"parm94.dat", "parm96.dat", "parm98.dat", "parm99.dat", "par_all22_prot.prm", "par_all22_prot_metals.prm", "par_all35_ethers.prm", "par_all36_carb.prm", "par_all36_cgenff.prm", "par_all36_lipid.prm", "par_all36_na.prm", "par_all36_prot.prm", "par_all36m_prot.prm", "par_all_silicates.prm", "CVFF.frc", "CVFF_aug.frc", "CFF91.frc", "PCFF.frc", "compass.frc", "par_opls_aam.inp", "par_opls_rna.inp"}; gchar * prop_name[11]= {"Quadratic bonds", "Quartic bonds", "Morse bonds", "Quadratic angles", "Quartic angles", "Dihedrals", "Torsions 3", "Inversions", "Impropers", "Non-bonded", "Bond increments"}; gchar * table_name[11]= {"qbonds", "sbonds", "mbonds", "qangles", "sangles", "dih", "tor", "inv", "imp", "vdw", "bdi"}; int ffdim[14][2] = {{1, 0}, {1, 1}, {1, 1}, {2, 2}, {2, 4}, {2, 3}, {3, 2}, {3, 4}, {4, 3}, {4, 4}, {4, 2}, {4, 3}, {1, 2}, {2, 0}}; // Pot +1 ou (-Pot+1) si special int ffpot[N_FIELDS][10]={{1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 0, -1, 0, 1, 0, 2, 0, -1}, {1, 0, 2, 1, 0, 1, -4, 1, 0, 1}, {1, 0, 2, 1, 0, 1, -4, 1, 0, 0}, {1, 6, 0, 0, 2, 1, -4, 0, 2, 0}, {1, 6, 0, 1, 2, 1, -4, 0, 2, 0}, {0, 6, 0, 0, 2, 0, -4, 0, 2, -2}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 1, 0, 1, 0, 1}}; /*! \fn int get_pdim(int fid, int prop, int col) \brief retrieve number of parameters for property in force field database \param fid the force field id \param prop the type of property \param col the column id */ int get_pdim(int fid, int prop, int col) { if (prop == 0) return field_dim[0]; if (field_dim[prop] == 0) return 0; if (prop == 6 && col == 1 && (fid >= CHARMM22P && fid <= CHARMMSI)) return 4; if (prop == 12 && col == 1 && ((fid >= CHARMM22P && fid <= CHARMMSI) || (fid >= OPLSAAP))) return 4; return ffdim[prop][col]; } /*! \fn int get_fkey(int fid, int prop, int col) \brief retrieve key for property in force field database \param fid the force field id \param prop the property id \param col the column id */ int get_fkey(int fid, int prop, int col) { return ffdim[prop][col]; } #ifndef USE_ATOMS void allocate_field_data (int * objects, int * dim, char * atoms[objects[0]][dim[0]], char * equi_a[objects[1]][dim[1]], char * equi_b[objects[2]][dim[2]], char * bonds[objects[3]][dim[3]], char * q_bonds[objects[4]][dim[4]], char * m_bonds[objects[5]][dim[5]], char * angles[objects[6]][dim[6]], char * q_angles[objects[7]][dim[7]], char * dihedrals[objects[8]][dim[8]], char * q_dihedrals[objects[9]][dim[9]], char * inversions[objects[10]][dim[10]], char * impropers[objects[11]][dim[11]], char * vdw[objects[12]][dim[12]], char * bond_inc[objects[13]][dim[13]]) { int h, i; field_objects = objects; field_dim = dim; field_atoms = g_malloc (field_objects[0]*sizeof*field_atoms); for (i=0; i CHARMMSI && fid < OPLSAAP) { if (find_atom_id(0, keyw) == -10) { int i; for (i=0; i 2) { for (i=0; i\n"); int i, j, k, l, n, m; k = -1; for (i=0; i<13; i++) { if (i != 1 && i != 2) { k ++; j = (i == 10) ? 11 : (i == 11) ? 10 : i; if (i == 0) { fprintf (fp, " <%s dim=\"%d\">%d\n", nodes[k], (field_objects[j]) ? get_pdim(fid, j, 1) : 0, field_objects[j], nodes[k]); } else if (i < 12) { fprintf (fp, " <%s dim=\"%d\" pot=\"%d\">%d\n", nodes[k], (field_objects[j]) ? get_pdim(fid, j, 1) : 0, ffpot[fid][k-1], field_objects[j], nodes[k]); } else { l = 0; if (fid <= AMBER99) { for (n=0; n%d\n", nodes[k], (field_objects[j]) ? get_pdim(fid, j, 1) : 0, ffpot[fid][k-1], field_objects[j]+l, nodes[k]); } } } fprintf (fp, " \n"); } field_object_match ** all_data[10]; field_object_match * om_tmp; /*! \fn void set_data (int pid, int obj, int oid, int faid) \brief save retrieved force field data \param pid the type of structural element \param obj the element id \param oid the parameter id the force field database \param faid the field atom id */ void set_data (int pid, int obj, int oid, int faid) { if (all_data[pid][faid] == NULL) { all_data[pid][faid] = g_malloc0 (sizeof*all_data[pid][faid]); om_tmp = all_data[pid][faid]; } else { om_tmp -> next = g_malloc0 (sizeof*om_tmp -> next); om_tmp -> next -> id = om_tmp -> id + 1; om_tmp -> next -> prev = om_tmp; } om_tmp -> obj = obj; om_tmp -> oid = oid; } /*! \fn int get_z (int faid) \brief get field atom Z \param faid the field atom id */ int get_z (int faid) { int i; for (i=0; i<120; i++) { if (g_strcmp0 (periodic_table_info[i].lab, field_atoms[faid][0]) == 0) return periodic_table_info[i].Z; } return -1; } /*! \fn int get_atoms (int z) \brief retrieve all field atom(s) with matching Z \param z the target Z */ int get_atoms (int z) { int i, j; j = 0; for (i=0; i\n"); for (i=0; i\n"); } fprintf (fp, " \n"); } typedef struct f_bond f_bond; struct f_bond { int a; int b; float v[2]; f_bond * next; f_bond * prev; }; f_bond * the_bonds[2]; f_bond * tmpbd; /*! \fn gboolean not_done (int eid, int a, int b) \brief was this case already considered ? \param eid equivalence id (not used for the time being) \param a 1st atom id \param b 2nd atom id */ gboolean not_done (int eid, int a, int b) { tmpbd = the_bonds[eid]; while (tmpbd) { if (tmpbd -> a == a && tmpbd -> b == b) return FALSE; if (tmpbd -> a == b && tmpbd -> b == a) return FALSE; tmpbd = tmpbd -> next; } return TRUE; } /*! \fn void print_this_bond (int eid, int h, int fid, int inum, char * at_a, char * at_b, char ** the_bond) \brief print this bond to file \param eid equivalence id (not used for the time being) \param h the bond type \param fid the force field id \param inum the structural element id \param at_a 1st atom name \param at_b 2nd atom name \param the_bond the force field parameter(s) for this bond */ void print_this_bond (int eid, int h, int fid, int inum, char * at_a, char * at_b, char ** the_bond) { int j; gchar * node[3] = {"bd-h", "bd-q", "bd-m"}; gchar * aaa = g_strdup_printf ("%s", find_atom_key(fid, 2, at_a)); gchar * bbb = g_strdup_printf ("%s", find_atom_key(fid, 2, at_b)); if (eid < 0 || not_done (eid, find_atom_id (1, aaa), find_atom_id (1, bbb))) { if (eid > -1) { if (the_bonds[eid]) { tmpbd = the_bonds[eid]; while (tmpbd -> next) tmpbd = tmpbd -> next; tmpbd -> next = g_malloc0(sizeof*tmpbd -> next); tmpbd -> next -> prev = tmpbd; tmpbd = tmpbd -> next; } else { the_bonds[eid] = g_malloc0(sizeof*the_bonds[eid]); tmpbd = the_bonds[eid]; } tmpbd -> a = find_atom_id (0, aaa); tmpbd -> b = find_atom_id (0, bbb); tmpbd -> v[0] = atof (the_bond[2]); tmpbd -> v[1] = atof (the_bond[3]); } fprintf (fp, " <%s a=\"%d\" b=\"%d\" z_a=\"%d\" z_b=\"%d\"", node[h], find_atom_id (0, aaa), find_atom_id (0, bbb), find_atom_z (aaa), find_atom_z (bbb)); switch (h) { case 0: if (fid == CVFF || fid == CVFF_AUG || fid == CFF91 || fid == PCFF) { fprintf (fp, " K=\"%f\" R_zero=\"%f\"", atof (the_bond[3]), atof (the_bond[2])); } else { fprintf (fp, " K=\"%f\" R_zero=\"%f\"", atof (the_bond[2]), atof (the_bond[3])); } j = 4; break; case 1: fprintf (fp, " K=\"%f\" R_zero=\"%f\" KK=\"%f\" KKK=\"%f\"", atof (the_bond[3]), atof (the_bond[2]), atof (the_bond[4]), atof (the_bond[5])); j = 6; break; case 2: fprintf (fp, " D=\"%f\" R_zero=\"%f\" Alpha=\"%f\"", atof (the_bond[3]), atof (the_bond[2]), atof (the_bond[4])); j = 5; break; } if (field_dim[inum+h] > j) { fprintf (fp, " info=\"%s\"", the_bond[j]); } fprintf (fp, "/>\n"); } else if (eid > -1) { g_debug ("Done:: tmpbd -> a= %d, tmpbd -> b= %d, tmpbd -> v[0]= %f, tmpbd -> v[1]= %f, this.v[0]= %f, this.v[1]=%f", tmpbd -> a, tmpbd -> b, tmpbd -> v[0], tmpbd -> v[1], atof (the_bond[2]), atof (the_bond[3])); } g_free (aaa); g_free (bbb); } /*! \fn void print_bond_table (int fid, int inum) \brief print force field bond table to file \param fid the force field id \param inum the structural element id */ void print_bond_table (int fid, int inum) { int h, i;//, j, k, l, m; gchar * bode[3] = {"bonds-h", "bonds-q", "bonds-m"}; gchar * desc[3] = {"Quadratic bonds:\n\n V(R) = K x (R - R0)^2\n" " With:\n - K = spring constant (kcal mol^-1 A^-2)\n - R = bond distance (A)\n - R0 = equilibrium distance (A)\n", "Quartic bonds:\n\n V(R) = K x (R - R0)^2 + K' x (R - R0)^3 + K'' x (R - R0)^4\n" " With:\n - K, K' and K'' = nth order spring constants (kcal mol^-1 A^-2)\n" " - R = bond distance (A)\n - R0 = equilibrium distance (A)", "Morse bonds:\n\n V(R) = D x (1 - exp(-ALPHA x (R - R0)))^2\n" " With:\n - D = well depth\n - ALPHA = well width\n - R = bond distance\n - R0 = equilibrium distance (A)"}; for (h=0; h<3; h++) { the_bonds[0] = the_bonds[1] = NULL; if (field_objects[inum+h]) { fprintf (fp, " <%s>\n", bode[h]); fprintf (fp, " \n", desc[h]); /*if (fid > CHARMMSI && fid < OPLSAAP) { for (i=0; i next) { tmpbd = tmpbd -> next; g_free (tmpbd -> prev); } g_free (tmpbd); the_bonds[j] = NULL; } } } fprintf (fp, " \n", bode[h]); } else*/ { for (i=0; i\n", bode[h]); } } /*if (the_bonds[0] || the_bonds[1]) { for (i=0; i<2; i++) { if (the_bonds[i]) { tmpbd = the_bonds[i]; while (tmpbd -> next) { tmpbd = tmpbd -> next; g_free (tmpbd -> prev); } g_free (tmpbd); } } }*/ } } typedef struct f_angl f_angl; struct f_angl { int a; int b; int c; float v[2]; f_angl * next; f_angl * prev; }; f_angl * the_angles[2]; f_angl * tmpan; /*! \fn gboolean not_done_an (int eid, int a, int b, int c) \brief was this case already considered ? \param eid equivalence id (not used for the time being) \param a 1st atom id \param b 2nd atom id \param c 3rd atom id */ gboolean not_done_an (int eid, int a, int b, int c) { tmpan = the_angles[eid]; while (tmpan) { if (tmpan -> a == a && tmpan -> b == b && tmpan -> c == c) return FALSE; if (tmpan -> a == c && tmpan -> b == b && tmpan -> c == a) return FALSE; tmpan = tmpan -> next; } return TRUE; } /*! \fn void print_this_angle (int eid, int h, int fid, int inum, int ub, char * at_a, char * at_b, char * at_c, char ** the_angle) \brief print this angle to file \param eid equivalence id (not used for the time being) \param h 0 = angle, 1 = angle restraints \param fid the force field id \param inum the structural element id \param ub Urey-Bradley parameter for the CHARRM FF, 2 for CHARMM FF, 0 otherwise \param at_a 1st atom name \param at_b 2nd atom name \param at_c 3rd atom name \param the_angle the force field parameter(s) for this angle */ void print_this_angle (int eid, int h, int fid, int inum, int ub, char * at_a, char * at_b, char * at_c, char ** the_angle) { int j; gchar * node[2] = {"ang-h", "ang-q"}; gchar * aaa = g_strdup_printf ("%s", find_atom_key(fid, 3, at_a)); gchar * bbb = g_strdup_printf ("%s", find_atom_key(fid, 3, at_b)); gchar * ccc = g_strdup_printf ("%s", find_atom_key(fid, 3, at_c)); if (eid < 0 || not_done_an (eid, find_atom_id (1, aaa), find_atom_id (1, bbb), find_atom_id (1, ccc))) { if (eid > -1) { if (the_angles[eid]) { tmpan = the_angles[eid]; while (tmpan -> next) tmpan = tmpan -> next; tmpan -> next = g_malloc0(sizeof*tmpan -> next); tmpan -> next -> prev = tmpan; tmpan = tmpan -> next; } else { the_angles[eid] = g_malloc0(sizeof*the_angles[eid]); tmpan = the_angles[eid]; } tmpan -> a = find_atom_id (0, aaa); tmpan -> b = find_atom_id (0, bbb); tmpan -> c = find_atom_id (0, ccc); tmpan -> v[0] = atof (the_angle[3]); tmpan -> v[1] = atof (the_angle[4]); } fprintf (fp, " <%s a=\"%d\" b=\"%d\" c=\"%d\" z_a=\"%d\" z_b=\"%d\" z_c=\"%d\"", node[h], find_atom_id (0, aaa), find_atom_id (0, bbb), find_atom_id (0, ccc), find_atom_z (aaa), find_atom_z (bbb), find_atom_z (ccc)); switch (h) { case 0: if (fid >= CVFF && fid < COMPASS) { fprintf (fp, " K=\"%f\" Theta_zero=\"%f\"", atof (the_angle[4]), atof (the_angle[3])); } else { fprintf (fp, " K=\"%f\" Theta_zero=\"%f\"", atof (the_angle[3]), atof (the_angle[4])); } if (ub) { fprintf (fp, " Kub=\"%f\" S_zero=\"%f\"", atof (the_angle[5]), atof (the_angle[6])); } j = (ub) ? 7 : 5; break; case 1: fprintf (fp, " K=\"%f\" Theta_zero=\"%f\" KK=\"%f\" KKK=\"%f\"", atof (the_angle[4]), atof (the_angle[3]), atof (the_angle[5]), atof (the_angle[6])); j = 7; break; } if (field_dim[inum+h] > j) { fprintf (fp, " info=\"%s\"", the_angle[j]); } fprintf (fp, "/>\n"); } else if (eid > -1) { g_debug ("Done:: tmpan -> a= %d, tmpan -> b= %d, tmpan -> c= %d, tmpan -> v[0]= %f, tmpan -> v[1]= %f, this.v[0]= %f, this.v[1]=%f", tmpan -> a, tmpan -> b, tmpan -> c, tmpan -> v[0], tmpan -> v[1], atof (the_angle[3]), atof (the_angle[4])); } g_free (aaa); g_free (bbb); g_free (ccc); } /*! \fn void print_angle_table (int fid, int inum) \brief print angle(s) table to file \param fid the field id \param inum the object id */ void print_angle_table (int fid, int inum) { int h, i;//, j, k, l; int ub = (fid > AMBER99 && fid <= CHARMMSI) ? 2 : 0; // Urey-Bradley parameter for the CHARMM FF gchar * aode[2] = {"angles-h", "angles-q"}; gchar * desc[3] = {"Quadratic angles:\n\n V(Theta) = K x (Theta - Theta0)^2\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Theta = angle (°)\n - Theta0 = equilibrium angle (°)", "Quartic angles:\n\n V(Theta) = K x (Theta - Theta0)^2 + K' x (Theta - Theta0)^3 + K' x (Theta - Theta0)^4\n" " With:\n - K, K' and K'' = nth order spring constant (kcal mol^-1 rad^-nth)\n - Theta = angle (°)\n - Theta0 = equilibrium angle (°)", "Quadratic angles + Urey-Bradley (UB) parameters:\n\n V(Theta) = K x (Theta - Theta0)^2\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Theta = angle (°)\n - Theta0 = equilibrium angle(°)\n" " V(S) = Kub x (R - Rub)^2\n" " With:\n - Kub = spring constant (kcal mol^-1 A^-2)\n - S = distance 1-3 (A)\n - S0 = equilibrium distance 1-3 (A)"}; for (h=0; h<2; h++) { the_angles[0] = the_angles[1] = NULL; if (field_objects[inum+h]) { fprintf (fp, " <%s>\n", aode[h]); fprintf (fp, " \n", desc[h+ub]); /*if (fid > CHARMMSI && fid < OPLSAAP) { for (i=0; i next) { tmpan = tmpan -> next; g_free (tmpan -> prev); } g_free (tmpan); the_angles[j] = NULL; } } } } else*/ { for (i=0; i\n", aode[h]); } } } /*! \fn void print_dihedral_table (int fid, int inum) \brief print dihedral(s) table to file \param fid the force field id \param inum the object id */ void print_dihedral_table (int fid, int inum) { int h, i, j; gchar * dode[2] = {"dihedrals-c", "dihedrals-ccc"}; gchar * node[2] = {"dih-c", "dih-ccc"}; gchar * desc[2] = {"Dihedrals / torsions:\n\n V(Phi) = K x (1 + cos(n x Phi - Phi0))\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = dihedral angle (°)\n - n = multiplicity\n - Phi0 = phase shift angle (°)", "Dihedrals / torsions\n\n V(Phi) = K x (Phi - Phi0)^2 + K' x (Phi - Phi0)^3 + K'' x (Phi - Phi0)^4\n" " With:\n - K, K' and K'' = nth order spring constant (kcal mol^-1 rad^-nth)\n - Phi = dihedral angle (°)\n - Phi0 = phase shift angle (°)"}; for (h=0; h<2; h++) { if (field_objects[inum+h]) { fprintf (fp, " <%s>\n", dode[h]); fprintf (fp, " \n", desc[h]); for (i=0; i j) { fprintf (fp, " info=\"%s\"", field_dihedrals[h][i][j]); } fprintf (fp, "/>\n"); } fprintf (fp, " \n", dode[h]); } } } /*! \fn void print_improper_table (int fid, int inum) \brief print improper(s) table to file \param fid the force field id \param inum the object id */ void print_improper_table (int fid, int inum) { int i, j; gchar * desc[2] = {"Impropers:\n\n V(Phi) = K x (1 + cos(n x Phi - Phi0))\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = angle (°)\n - n = multiplicity\n - Phi0 = equilibrium angle (°)", "Impropers: V(Phi) = K x (Phi - Phi0)^2\n\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = angle (°)\n - Phi0 = equilibrium angle (°)"}; int wid = (fid < 4 || fid == OPLSAAP || fid == OPLSAAR) ? 3 : 2; if (field_objects[inum]) { fprintf (fp, " \n"); fprintf (fp, " \n", desc[wid == 3 ? 0 : 1]); for (i=0; i AMBER99 && fid < CVFF) ? field_impropers[i][0]: field_impropers[i][1])); gchar * bbb = g_strdup_printf ("%s", find_atom_key(fid, 5, (fid > AMBER99 && fid < CVFF) ? field_impropers[i][1]: field_impropers[i][0])); gchar * ccc = g_strdup_printf ("%s", find_atom_key(fid, 5, field_impropers[i][2])); gchar * ddd = g_strdup_printf ("%s", find_atom_key(fid, 5, field_impropers[i][3])); fprintf (fp, " AMBER99 && fid < CVFF) { fprintf (fp, " K=\"%f\" Phi_zero=\"%f\"", atof (field_impropers[i][4]), atof (field_impropers[i][6])); j = 7; } else { fprintf (fp, " K=\"%f\" Phi_zero=\"%f\"", atof (field_impropers[i][4]), atof (field_impropers[i][5])); j = 6; } if (field_dim[inum] > j) { fprintf (fp, " info=\"%s\"", field_impropers[i][j]); } fprintf (fp, "/>\n"); } fprintf (fp, " \n"); } } /*! \fn void print_inversion_table (int fid, int inum) \brief print inversion(s) table to file \param fid the force field id \param inum the object id */ void print_inversion_table (int fid, int inum) { int i; gchar * desc = {"Inversions\n 0= Key_a, 1= Key_b, 2= Key_c, 3= Key_d, 4= K, 5= Phi0, 7= FF info\n\n V(φ) = K x (Phi - Phi0)^2\n" " With:\n - K = spring constant (kcal mol^-1 rad^-2)\n - Phi = angle (°)\n - Phi0 = equilibrium angle (°)"}; if (field_objects[inum]) { fprintf (fp, " \n"); fprintf (fp, " \n", desc); for (i=0; i 6) { fprintf (fp, " info=\"%s\"", field_inversions[i][6]); } fprintf (fp, "/>\n"); } fprintf (fp, " \n"); } } /*! \fn void print_vdw_table (int fid, int inum) \brief print VdW table to file \param fid the force field id \param inum the object id */ void print_vdw_table (int fid, int inum) { int i, j, k, l; gchar * desc[3] = {"Non-bonded 12-6\n 0= Key_a, 1= Epslion, 2= R0 (A), 3= FF info\n\n Non-bonded (12-6): V(rij) = Epslion(ij) x [(R0(ij)/rij)^12 - 2 x (R0(ij)/rij)^6]\n" " With:\n" " Epslion(ij) = sqrt(Epslion(i) x Epslion(j)) and Epslion(i) (kcal mol^-1)\n" " R0(ij)= (R0(i) + R0(j))/2 and R0(i) (A)\n", "Non-bonded 12-6\n 0= Key_a, 1= A, 2= B, 3= FF info\n\n Non-bonded (12-6): V(rij) = A(ij)/rij^12 - B(ij)/rij^6\n" " With:\n" " A(ij) = sqrt(Ai x Aj)\n" " B(ij) = sqrt(Bi x Bj)\n", "Non-bonded 9-6\n 0= Key_a, 1= Epslion, 2= R0 (A), 3= FF info\n\n Non-bonded (9-6): V(rij) = Epslion(ij) x [2 x (R0(ij)/rij)^9 - 3 x (R0(ij)/rij)^6]\n" " With:\n" " Epslion(ij) = 2 x sqrt(Epslion(i) x Epslion(j)) x R0(i)^3 x R0(j)^3 / [ R0(i)^6 + R0(j)^6 ] and Epslion(i) (kcal mol^-1)\n" " R0(ij)= ((R0(i)^6 + R0(j)^6)/2) ^ 1/6 and R0(i) (A)\n"}; int wid = ((fid >= CHARMM22P && fid <= CHARMMSI) || (fid >= OPLSAAP)) ? 1 : 0; int did = (fid <= CHARMMSI || fid >= OPLSAAP) ? 0 : (fid == CVFF || fid == CVFF_AUG) ? 1 : 2; int cid = (fid > COMPASS) ? 1 : 0; int wdi[2] = {2, 4}; if (field_objects[inum]) { fprintf (fp, " \n"); fprintf (fp, " \n", desc[did]); for (i=0; i= CHARMM22P && fid <= CHARMMSI) || fid > COMPASS) { fprintf (fp, " Eii=\"%f\" Rii=\"%f\"", atof (field_vdw[i][3+2*cid]), atof (field_vdw[i][4+2*cid])); } } j = wdi[wid]+1+2*cid; if (field_dim[inum] > j) { fprintf (fp, " info=\"%s\"", field_vdw[i][j]); } fprintf (fp, "/>\n"); if (fid <= AMBER99) { for (k=0; k j) { fprintf (fp, " info=\"Equi. to %s\"", field_vdw[i][0]); } fprintf (fp, "/>\n"); } } } } } } fprintf (fp, " \n"); } } field_object_match * field_objects_id[6] = {NULL, NULL, NULL, NULL, NULL, NULL}; field_object_match * tmp_obj_id; char *** ff_atoms; // 0 = Quadratic, 1 = Quartic, 2 = Morse field_data * ff_bonds[3]; field_data * ff_angles[2]; field_data * ff_dih[2]; field_data * ff_imp; field_data * ff_inv; field_data * ff_vdw; int ff_unit; int * ff_objects; int * ff_dim; int * ff_info; int * ff_key; /*! \fn int field_find_atoms () \brief retrieve matching atom from force field data base */ int field_find_atoms () { int i, j, k, l; atoms_id = allocint (tmp_proj -> nspec); extraz_id = allocdint (5, tmp_proj -> nspec); atoms_id_list = g_malloc (tmp_proj -> nspec*sizeof*atoms_id_list); k = 0; for (i=0; i nspec; i++) { atoms_id[i] = 0; #ifdef DEBUG g_debug ("Searching field atoms for spec: %d, label= %s, z= %d", i, tmp_proj -> chemistry -> label[i], (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]); #endif for (j=0; j chemistry -> label[i]), exact_name(ff_atoms[j][0])) == 0) { atoms_id[i] ++; } } if (atoms_id[i] > 0) k ++; } for (i=0; i nspec; i++) { #ifdef DEBUG g_debug ("For spec: %d, number of match = %d", i, atoms_id[i]); #endif if (atoms_id[i]) { atoms_id_list[i] = g_malloc0 (atoms_id[i]*sizeof*atoms_id_list[i]); l = 0; for (j=0; j chemistry -> label[i]), exact_name(ff_atoms[j][0])) == 0) { atoms_id_list[i][l] = j; l ++; } } } } return k; } int is_extra; /*! \fn gboolean is_a_match (int * data, int num, int val[4]) \brief is this a match ? \param data the set of parameter(s) \param num the number of parameter \param val the target value(s) */ gboolean is_a_match (int * data, int num, int val[4]) { int i; for (i=0; i 0) { for (i=0; i atoms_z[i], 2, val); break; case FANG: do_this_id = is_a_match (ff_angles[h] -> atoms_z[i], 3, val); break; case FDIH: do_this_id = is_a_match (ff_dih[h] -> atoms_z[i], 4, val); break; case FIMP: do_this_id = is_a_match (ff_imp -> atoms_z[i], 4, val); break; case FINV: do_this_id = is_a_match (ff_inv -> atoms_z[i], 4, val); break; case FNBD: do_this_id = is_a_match (ff_vdw -> atoms_z[i], 1, val); break; default: break; } if (do_this_id) { save_this_id = TRUE; if (field_objects_id[oid]) { test_obj_id = field_objects_id[oid]; while (test_obj_id != NULL) { if (test_obj_id -> type == h && test_obj_id -> oid == i) { save_this_id = FALSE; break; } test_obj_id = test_obj_id -> next; } if (save_this_id) { tmp_obj_id -> next = g_malloc0 (sizeof*tmp_obj_id -> next); tmp_obj_id -> next -> id = tmp_obj_id -> id + 1; tmp_obj_id = tmp_obj_id -> next; } } else { field_objects_id[oid] = g_malloc0 (sizeof*field_objects_id[oid]); tmp_obj_id = field_objects_id[oid]; } if (save_this_id) { // if (oid == 3) g_debug ("Saving Impropers, sa= %d, sb= %d, sc= %d, sd= %d", sa, sb, sc, sd); tmp_obj_id -> obj = oid; tmp_obj_id -> type = h; tmp_obj_id -> oid = i; if (oid < 5) { if (sa > -1) extraz_id[oid][sa] += is_extra; if (sb > -1) extraz_id[oid][sb] += is_extra; if (sc > -1) extraz_id[oid][sc] += is_extra; if (sd > -1) extraz_id[oid][sd] += is_extra; } } } } } } } /*! \fn void field_find_bonds () \brief retrieve available bond parameters in force field database */ void field_find_bonds () { int i, j, k, l; for (i=0; i nspec-1; i++) { if (atoms_id[i] > 0) { for (j=i+1; j nspec; j++) { if (atoms_id[j] > 0) { k = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; l = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][j]; find_object_ijkl (1, 1, 0, i, k, j, l, -1, -1, -1, -1); find_object_ijkl (1, 1, 0, j, l, i, k, -1, -1, -1, -1); } } } } for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { k = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; find_object_ijkl (1, 1, 0, i, k, i, k, -1, -1, -1, -1); } } } /*! \fn void field_find_angles () \brief retrieve available angle parameters in force field database */ void field_find_angles () { int i, j, k, l, m, n; for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { l = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; for (j=0; j nspec; j++) { if (atoms_id[j] > 0) { m = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][j]; for (k=0; k nspec; k++) { if (atoms_id[k] > 0) { n = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][k]; find_object_ijkl (0, 4, 1, i, l, j, m, k, n, -1, -1); } } } } } } } /*! \fn void field_find_dihedrals (int id) \brief retrieve available dihedral parameters in force field database \param id 0 = dihedral(s), 1 = improper(s), 2 = inversion(s) */ void field_find_dihedrals (int id) { int i, j, k, l, m, n, o, p, q; for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { m = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; for (j=0; j nspec; j++) { if (atoms_id[j] > 0) { n = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][j]; for (k=0; k nspec; k++) { if (atoms_id[k] > 0) { o = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][k]; for (l=0; l nspec; l++) { if (atoms_id[l] > 0) { p = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][l]; q = (id) ? 1 : 0; find_object_ijkl (-q, 6+q*2+q*(id-1), 2+id, i, m, j, n, k, o, l, p); } } } } } } } } } /*! \fn void field_find_vdw () \brief retrieve available VdW parameters in force field database */ void field_find_vdw () { int i, j; for (i=0; i nspec; i++) { if (atoms_id[i] > 0) { j = (int)tmp_proj -> chemistry -> chem_prop[CHEM_Z][i]; find_object_ijkl (-1, 10, 5, i, j, -1, -1, -1, -1, -1, -1); } } } #ifdef DEBUG /*! \fn void print_all (int oid) \brief print found force field data \param oid the type of structural element */ void print_all (int oid) { gchar * prop[7] = {"atom", "bond", "angle", "dihedral", "improper", "inversion", "vdw"}; g_debug ("Field %s found: %d", prop[oid-1], tmp_obj_id -> id+1); while (tmp_obj_id != NULL) { g_debug (" %s N° %d: h= %d, oid= %d", prop[oid-1], tmp_obj_id -> id+1, tmp_obj_id -> type, tmp_obj_id -> oid); tmp_obj_id = tmp_obj_id -> next; } } #endif /*! \fn float get_force_field_atom_mass (int sp, int num) \brief get force field atomic mass \param sp the target chemical species \param num the atom id */ float get_force_field_atom_mass (int sp, int num) { g_debug ("sp= %d, atoms_id[%d]= %d, num= %d", sp, sp, atoms_id[sp], num); if (atoms_id[sp] > 0 && num >= 0 && num <= atoms_id[sp]) { return atof(ff_atoms[atoms_id_list[sp][num]][1]); } else { return 0.0; } } #ifdef USE_ATOMS gchar * filetoread; /*! \fn void clean_this_field_data (xmlDoc * doc, xmlTextReaderPtr reader) \brief free force field XML file data \param doc the xmlDoc pointer to free \param reader the XML reader to free */ void clean_this_field_data (xmlDoc * doc, xmlTextReaderPtr reader) { clean_xml_data (doc, reader); if (filetoread) g_free (filetoread); filetoread = NULL; if (ff_objects) g_free (ff_objects); ff_objects = NULL; if (ff_dim) g_free (ff_dim); ff_dim = NULL; if (ff_key) g_free (ff_key); ff_key = NULL; if (ff_info) g_free (ff_info); ff_info = NULL; int i; for (i=0; i<3; i++) { if (i < 2) { if (ff_angles[i]) { g_free (ff_angles[i]); ff_angles[i] = NULL; } if (ff_dih[i]) { g_free (ff_dih[i]); ff_dih[i] = NULL; } } if (ff_bonds[i]) { g_free (ff_bonds[i]); ff_bonds[i] = NULL; } } if (ff_imp) { g_free (ff_imp); ff_imp = NULL; } if (ff_inv) { g_free (ff_inv); ff_inv = NULL; } if (ff_vdw) { g_free (ff_vdw); ff_vdw = NULL; } } /*! \fn gchar * open_field_file (int field) \brief open force field XML file \param field the id of the force field to open */ gchar * open_field_file (int field) { int i, j; xmlDoc * doc; xmlTextReaderPtr reader; xmlNodePtr racine, f_node; xmlNodePtr n_node, m_node, o_node; field_data * ff_data; xmlAttrPtr prop; const xmlChar fml[7]="ff-xml"; gchar * data_nodes[11]={"atoms", "bonds-h", "bonds-q", "bonds-m", "angles-h", "angles-q", "dihedrals-c", "dihedrals-ccc", "impropers", "inversions", "non-bonded"}; gchar * data_n[11]={"at", "bd-h", "bd-q", "bd-m", "ang-h", "ang-q", "dih-c", "dih-ccc", "imp", "inv", "non-bd"}; gchar * str; filetoread = NULL; ff_objects = NULL; ff_dim = NULL; ff_key = NULL; ff_info = NULL; ff_unit = -1; gchar * force_field_name; gboolean setinfo; int odim[10] = {2, 2, 2, 3, 3, 4, 4, 4, 4, 1}; /* * build an xmlReader for that file */ #ifdef G_OS_WIN32 filetoread = g_strdup_printf ("%s\\force_fields\\%s.ffl", PACKAGE_LIB_DIR, field_ffl[field]); #else filetoread = g_strdup_printf ("%s/force_fields/%s.ffl", PACKAGE_LIB_DIR, field_ffl[field]); #endif reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { g_warning ("Error reading FF file %s, reader error ?!", filetoread); return NULL; } else { doc = xmlParseFile(filetoread); if (doc == NULL) { g_warning ("Error reading FF file %s, xmlParsing error ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } racine = xmlDocGetRootElement(doc); if (racine == NULL) { g_warning ("Error reading FF file %s, missing XML root node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } if (g_strcmp0 ((char *)(racine -> name), (char *)fml) != 0) { g_warning ("Error reading FF file %s, missing ff-xml node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } // nodes :: field-name, data, atoms, bonds, angles, dihedrals, impropers, inversons, non-bonded, bond-inc ? f_node = findnode (racine -> children, "force-field"); if (f_node == NULL) { g_warning ("Error reading FF file %s, missing force field node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } force_field_name = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(f_node)); f_node = findnode (racine -> children, "units"); if (f_node == NULL) { g_warning ("Error reading FF file %s, missing units node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } str = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(f_node)); for (i=0; i<4;i++) { if (g_strcmp0 (str, fnames[activef][0][i]) == 0) { ff_unit = i; break; } } if (ff_unit < 0) { g_warning ("Error reading FF file %s, units, ff_unit = %d < 0 ?!", filetoread, ff_unit); clean_this_field_data (doc, reader); return NULL; } f_node = findnode (racine -> children, "ff-data"); if (f_node == NULL) { g_warning ("Error reading FF file %s, missing ff-data node ?!", filetoread); clean_this_field_data (doc, reader); return NULL; } ff_objects = g_malloc0 (11*sizeof*ff_objects); ff_dim = g_malloc0 (11*sizeof*ff_dim); //ff_info = g_malloc0 (11*sizeof*ff_key); ff_key = g_malloc0 (10*sizeof*ff_key); for (i=0; i<11; i++) { m_node = findnode (f_node -> children, data_nodes[i]); if (m_node == NULL) { g_warning ("Error reading FF file %s, ff-data, i= %d, missing node ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } ff_objects[i] = (int)atof((char *)xmlNodeGetContent(m_node)); if (ff_objects[i] < 0) { g_warning ("Error reading FF file %s, ff-data, ff_objects[%d] = %d < 0 ?!", filetoread, i, ff_objects[i]); clean_this_field_data (doc, reader); return NULL; } else if (ff_objects[i]) { prop = m_node -> properties; if (prop == NULL) { g_warning ("Error reading FF file %s, ff-data, i= %d, missing node prop ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } while (prop) { o_node = prop -> children; if (o_node == NULL) { g_warning ("Error reading FF file %s, ff-data, i= %d, missing prop data ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } if (g_strcmp0 ("dim",(char *)prop -> name) == 0) { ff_dim[i] = (int) atof((char *)xmlNodeGetContent(o_node)); } /*else if (g_strcmp0 ("info",(char *)prop -> name) == 0) { ff_info[i] = (int)atof((char *)xmlNodeGetContent(o_node)); }*/ else if (g_strcmp0 ("pot",(char *)prop -> name) == 0) { ff_key[i-1] = (int)atof((char *)xmlNodeGetContent(o_node)); } prop = prop -> next; } } } for (i=0; i<11; i++) { if (ff_objects[i]) { f_node = findnode (racine -> children, data_nodes[i]); if (f_node == NULL) { g_warning ("Error reading FF file %s, i= %d, missing node ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } n_node = f_node -> children; if (n_node == NULL) { g_warning ("Error reading FF file %s, i= %d, missing child node ?!", filetoread, i); clean_this_field_data (doc, reader); return NULL; } if (i == 0) { ff_atoms = g_malloc (ff_objects[0]*sizeof*ff_atoms); for (j=0; j 0) { ff_data -> atoms_z = g_malloc0 (ff_objects[i]*sizeof*ff_data -> atoms_z); ff_data -> atoms_id = g_malloc0 (ff_objects[i]*sizeof*ff_data -> atoms_id); ff_data -> npar = ff_dim[i]; ff_data -> key = ff_key[i-1]; ff_data -> param = g_malloc0 (ff_objects[i]*sizeof*ff_data -> param); for (j=0; j atoms_z[j] = g_malloc0 (odim[i-1]*sizeof*ff_data -> atoms_z[j]); ff_data -> atoms_id[j] = g_malloc0 (odim[i-1]*sizeof*ff_data -> atoms_id[j]); ff_data -> param[j] = g_malloc0 (ff_dim[i]*sizeof*ff_data -> param[j]); } ff_data -> info = g_malloc0 (ff_objects[i]*sizeof*ff_data -> info); } setinfo = FALSE; for (j=0; j properties; if (prop == NULL) { g_warning ("Error reading FF file %s, i= %d, j= %d, missing prop ?!", filetoread, i, j); clean_this_field_data (doc, reader); return NULL; } while (prop) { o_node = prop -> children; if (o_node == NULL) { g_warning ("Error reading FF file %s, i= %d, j= %d, missing prop node ?!", filetoread, i, j); clean_this_field_data (doc, reader); return NULL; } switch (i) { case 0: if (g_strcmp0 ("label",(char *)prop -> name) == 0) { ff_atoms[j][0] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("mass",(char *)prop -> name) == 0) { ff_atoms[j][1] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("key",(char *)prop -> name) == 0) { ff_atoms[j][2] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("info",(char *)prop -> name) == 0) { ff_atoms[j][3] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(o_node)); } else { g_warning ("Error reading FF file %s, i= %d, j= %d, unexpected node ?!", filetoread, i, j); clean_this_field_data (doc, reader); return NULL; } break; default: if (g_strcmp0 ("a",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][0] = (int) atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("b",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][1] = (int) atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("c",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][2] = (int) atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("d",(char *)prop -> name) == 0) { ff_data -> atoms_id[j][3] = (int) atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("z_a",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][0] = (int) atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("z_b",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][1] = (int) atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("z_c",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][2] = (int) atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("z_d",(char *)prop -> name) == 0) { ff_data -> atoms_z[j][3] = (int) atof((char *)xmlNodeGetContent(o_node)); } else if (i > 0 && g_strcmp0 ("info",(char *)prop -> name) == 0) { ff_data -> info[j] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(o_node)); setinfo = TRUE; } else { if (i == 10) { // Non-bonded: 12-6: E_i, R_i, E_14, R_14 if (g_strcmp0 ("Ei",(char *)prop -> name) == 0) { ff_data -> param[j][0] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("Ri",(char *)prop -> name) == 0) { ff_data -> param[j][1] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("Eii",(char *)prop -> name) == 0) { ff_data -> param[j][2] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("Rii",(char *)prop -> name) == 0) { ff_data -> param[j][3] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("A",(char *)prop -> name) == 0) { ff_data -> param[j][0] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("B",(char *)prop -> name) == 0) { ff_data -> param[j][1] = atof((char *)xmlNodeGetContent(o_node)); } else { g_warning ("Error reading FF file %s, i= %d, j= %d, unexpected node ?! node name= %s", filetoread, i, j, (char *)prop -> name); clean_this_field_data (doc, reader); return NULL; } } else { // Bonds: Harm: K, R0 // Bonds: Quartic: K, R_0, K', K'' // Bonds: Morse: D, R_0, Alpha // Angle: Quartic: K, Theta_0, K', K'' // Dihedral: Cosine: K, Phi_0, n // Dihedral: Cosine 3: K, Phi_0, K', K'' // Improper: Cosine: K, n, Phi_0 / Harm: K, Phi_0 // Inversion: Harm: K, Phi_0 if (g_strcmp0 ("K",(char *)prop -> name) == 0) { ff_data -> param[j][0] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("R_zero",(char *)prop -> name) == 0) { ff_data -> param[j][1] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("Theta_zero",(char *)prop -> name) == 0) { ff_data -> param[j][1] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("Phi_zero",(char *)prop -> name) == 0) { ff_data -> param[j][1] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("KK",(char *)prop -> name) == 0) { ff_data -> param[j][2] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("KKK",(char *)prop -> name) == 0) { ff_data -> param[j][3] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("Kub",(char *)prop -> name) == 0) { ff_data -> param[j][2] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("S_zero",(char *)prop -> name) == 0) { ff_data -> param[j][3] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("n",(char *)prop -> name) == 0) { ff_data -> param[j][2] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("D",(char *)prop -> name) == 0) { ff_data -> param[j][0] = atof((char *)xmlNodeGetContent(o_node)); } else if (g_strcmp0 ("Alpha",(char *)prop -> name) == 0) { ff_data -> param[j][2] = atof((char *)xmlNodeGetContent(o_node)); } else { g_warning ("Error reading FF file %s, i= %d, j= %d, unexpected node ?! node name= %s", filetoread, i, j, (char *)prop -> name); clean_this_field_data (doc, reader); return NULL; } } } break; } prop = prop -> next; } n_node = n_node -> next; } if (i > 0 && ! setinfo) { g_free (ff_data -> info); ff_data -> info = NULL; } /*if (i==0) { for (j=0; j next) { tmp_obj_id = tmp_obj_id -> next; g_free (tmp_obj_id -> prev); } g_free (tmp_obj_id); field_objects_id[i] = NULL; } } gchar * name = open_field_file (id); if (g_strcmp0 (name, field_acro[id]) != 0) { // Error in xml file ?! tmp_field -> type = -1; } else if (name) { int spf = field_find_atoms (); if (spf < tmp_proj -> nspec) { // Some atomic species are not described in this force field // Take action ? } int i; for (i=0; i<6; i++) { if (field_objects_id[i]) { tmp_obj_id = field_objects_id[i]; while (tmp_obj_id -> next) { tmp_obj_id = tmp_obj_id -> next; g_free (tmp_obj_id -> prev); } g_free (tmp_obj_id); field_objects_id[i] = NULL; } } // Bonds tmp_obj_id = NULL; field_find_bonds (); #ifdef DEBUG if (tmp_obj_id) print_all (FBDS); #endif // Angles tmp_obj_id = NULL; field_find_angles (); #ifdef DEBUG if (tmp_obj_id) print_all (FANG); #endif // Dihedrals tmp_obj_id = NULL; field_find_dihedrals (0); #ifdef DEBUG if (tmp_obj_id) print_all (FDIH); #endif // Impropers tmp_obj_id = NULL; field_find_dihedrals (1); #ifdef DEBUG if (tmp_obj_id) print_all (FIMP); #endif // Inversions tmp_obj_id = NULL; field_find_dihedrals (2); #ifdef DEBUG if (tmp_obj_id) print_all (FINV); #endif // Vdw tmp_obj_id = NULL; field_find_vdw (); #ifdef DEBUG if (tmp_obj_id) print_all (FNBD); #endif } #else int i; gchar * str; //FILE * hp = fopen ("force_fields.h", "w"); for (i=0; i\n"); fprintf (fp, "\n"); fprintf (fp, "\n"); fprintf (fp, " %s\n", field_acro[i]); fprintf (fp, " \n", ffo_file[i]); fprintf (fp, " k-calories per mol\n"); g_free (str); print_object_dim_and_key_tables (i); print_atom_table (i); print_bond_table (i, 3); print_angle_table (i, 6); print_dihedral_table (i, 8); print_improper_table (i, 11); print_inversion_table (i, 10); print_vdw_table (i, 12); //print_increment_table (i, 13) fprintf (fp, "\n"); fclose (fp); } //fclose (hp); #endif } Atomes-GNU-1.1.14/src/calc/force_fields/force_fields.h000066400000000000000000000216051457665371200224130ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file force_fields.h * @short Variable declarations for the creation of the force field database * @author Sébastien Le Roux */ /* * This header file: 'force_fields.h' * * Contains: - Variable declarations for the creation of the force field database */ #ifndef FORCE_FIELDS_H_ #define FORCE_FIELDS_H_ /* Amber force fields */ // amber94 extern int amber94_objects[14]; extern int amber94_dim[14]; extern char * amber94_atoms[2][4]; extern char * amber94_equi[2][15]; extern char * amber94_bonds[83][5]; extern char * amber94_angles[191][6]; extern char * amber94_dihedrals[81][9]; extern char * amber94_impropers[31][8]; extern char * amber94_vdw[34][4]; // amber96 extern int amber96_objects[14]; extern int amber96_dim[14]; extern char * amber96_atoms[2][4]; extern char * amber96_equi[2][15]; extern char * amber96_bonds[83][5]; extern char * amber96_angles[191][6]; extern char * amber96_dihedrals[81][9]; extern char * amber96_impropers[31][8]; extern char * amber96_vdw[35][4]; // amber98 extern int amber98_objects[14]; extern int amber98_dim[14]; extern char * amber98_atoms[2][4]; extern char * amber98_equi[2][15]; extern char * amber98_bonds[83][5]; extern char * amber98_angles[191][6]; extern char * amber98_dihedrals[83][9]; extern char * amber98_impropers[31][8]; extern char * amber98_vdw[35][4]; // amber99 extern int amber99_objects[14]; extern int amber99_dim[14]; extern char * amber99_atoms[2][5]; extern char * amber99_equi[2][15]; extern char * amber99_bonds[116][5]; extern char * amber99_angles[281][6]; extern char * amber99_dihedrals[164][9]; extern char * amber99_impropers[38][8]; extern char * amber99_vdw[42][4]; /* CHARMM force fields */ // CHARMM-charmm22_prot extern int charmm22_prot_objects[14]; extern int charmm22_prot_dim[14]; extern char * charmm22_prot_atoms[47][5]; extern char * charmm22_prot_bonds[122][5]; extern char * charmm22_prot_angles[324][8]; extern char * charmm22_prot_dihedrals[445][8]; extern char * charmm22_prot_impropers[34][8]; extern char * charmm22_prot_vdw[47][6]; // CHARMM-charmm22_prot_metals extern int charmm22_prot_metals_objects[14]; extern int charmm22_prot_metals_dim[14]; extern char * charmm22_prot_metals_atoms[98][5]; extern char * charmm22_prot_metals_bonds[139][5]; extern char * charmm22_prot_metals_angles[345][8]; extern char * charmm22_prot_metals_dihedrals[452][8]; extern char * charmm22_prot_metals_impropers[43][8]; extern char * charmm22_prot_metals_vdw[98][6]; // CHARMM-charmm35_ethers extern int charmm35_ethers_objects[14]; extern int charmm35_ethers_dim[14]; extern char * charmm35_ethers_atoms[13][5]; extern char * charmm35_ethers_bonds[22][5]; extern char * charmm35_ethers_angles[55][8]; extern char * charmm35_ethers_dihedrals[106][8]; extern char * charmm35_ethers_vdw[13][6]; // CHARMM-charmm36_carb extern int charmm36_carb_objects[14]; extern int charmm36_carb_dim[14]; extern char * charmm36_carb_atoms[59][5]; extern char * charmm36_carb_bonds[153][5]; extern char * charmm36_carb_angles[438][8]; extern char * charmm36_carb_dihedrals[1354][8]; extern char * charmm36_carb_impropers[14][8]; extern char * charmm36_carb_vdw[57][6]; // CHARMM-charmm36_cgenff extern int charmm36_cgenff_objects[14]; extern int charmm36_cgenff_dim[14]; extern char * charmm36_cgenff_atoms[163][5]; extern char * charmm36_cgenff_bonds[506][5]; extern char * charmm36_cgenff_angles[1561][8]; extern char * charmm36_cgenff_dihedrals[3937][8]; extern char * charmm36_cgenff_impropers[125][8]; extern char * charmm36_cgenff_vdw[156][6]; // CHARMM-charmm36_lipid extern int charmm36_lipid_objects[14]; extern int charmm36_lipid_dim[14]; extern char * charmm36_lipid_atoms[29][5]; extern char * charmm36_lipid_bonds[50][5]; extern char * charmm36_lipid_angles[131][8]; extern char * charmm36_lipid_dihedrals[180][8]; extern char * charmm36_lipid_impropers[4][8]; extern char * charmm36_lipid_vdw[29][6]; // CHARMM-charmm36m_prot extern int charmm36m_prot_objects[14]; extern int charmm36m_prot_dim[14]; extern char * charmm36m_prot_atoms[53][5]; extern char * charmm36m_prot_bonds[132][5]; extern char * charmm36m_prot_angles[364][8]; extern char * charmm36m_prot_dihedrals[706][8]; extern char * charmm36m_prot_impropers[35][8]; extern char * charmm36m_prot_vdw[53][6]; // CHARMM-charmm36_na extern int charmm36_na_objects[14]; extern int charmm36_na_dim[14]; extern char * charmm36_na_atoms[42][5]; extern char * charmm36_na_bonds[89][5]; extern char * charmm36_na_angles[226][8]; extern char * charmm36_na_dihedrals[502][8]; extern char * charmm36_na_impropers[15][8]; extern char * charmm36_na_vdw[42][6]; // CHARMM-charmm36_prot extern int charmm36_prot_objects[14]; extern int charmm36_prot_dim[14]; extern char * charmm36_prot_atoms[53][5]; extern char * charmm36_prot_bonds[132][5]; extern char * charmm36_prot_angles[364][8]; extern char * charmm36_prot_dihedrals[705][8]; extern char * charmm36_prot_impropers[35][8]; extern char * charmm36_prot_vdw[53][6]; // CHARMM-charmm_silicates extern int charmm_silicates_objects[14]; extern int charmm_silicates_dim[14]; extern char * charmm_silicates_atoms[13][5]; extern char * charmm_silicates_bonds[14][5]; extern char * charmm_silicates_angles[27][8]; extern char * charmm_silicates_dihedrals[34][8]; extern char * charmm_silicates_vdw[13][6]; /* FF force fields */ // Compass extern int Compass_objects[14]; extern int Compass_dim[14]; extern char * Compass_atoms[45][5]; extern char * Compass_equivalence[46][7]; extern char * Compass_bonds[54][7]; extern char * Compass_angles[94][8]; extern char * Compass_torsions[95][11]; extern char * Compass_inversions[22][7]; extern char * Compass_vdw[46][4]; extern char * Compass_bond_increments[55][5]; // PCFF extern int PCFF_objects[14]; extern int PCFF_dim[14]; extern char * PCFF_atoms[133][5]; extern char * PCFF_equivalence_auto[108][11]; extern char * PCFF_equivalence[134][7]; extern char * PCFF_bonds_auto[627][5]; extern char * PCFF_bonds[126][7]; extern char * PCFF_angles_auto[329][6]; extern char * PCFF_angles[302][8]; extern char * PCFF_torsions_auto[216][8]; extern char * PCFF_torsions[492][11]; extern char * PCFF_inversions[83][7]; extern char * PCFF_vdw[94][4]; extern char * PCFF_bond_increments[564][5]; // CFF91 extern int CFF91_objects[14]; extern int CFF91_dim[14]; extern char * CFF91_atoms[93][5]; extern char * CFF91_equivalence_auto[97][11]; extern char * CFF91_equivalence[95][7]; extern char * CFF91_bonds_auto[667][5]; extern char * CFF91_bonds[58][7]; extern char * CFF91_angles_auto[330][6]; extern char * CFF91_angles[155][8]; extern char * CFF91_torsions_auto[216][8]; extern char * CFF91_torsions[294][11]; extern char * CFF91_inversions[70][7]; extern char * CFF91_vdw[40][4]; extern char * CFF91_bond_increments[560][5]; // CVFF extern int CVFF_objects[14]; extern int CVFF_dim[14]; extern char * CVFF_atoms[133][5]; extern char * CVFF_equivalence_auto[123][11]; extern char * CVFF_equivalence[129][7]; extern char * CVFF_bonds_auto[776][5]; extern char * CVFF_morse_bonds[775][6]; extern char * CVFF_angles_auto[563][6]; extern char * CVFF_torsions_auto[295][8]; extern char * CVFF_impropers[41][8]; extern char * CVFF_vdw[45][4]; extern char * CVFF_bond_increments[683][5]; // CVFF_aug extern int CVFF_aug_objects[14]; extern int CVFF_aug_dim[14]; extern char * CVFF_aug_atoms[172][5]; extern char * CVFF_aug_equivalence_auto[162][11]; extern char * CVFF_aug_equivalence[168][7]; extern char * CVFF_aug_bonds_auto[798][5]; extern char * CVFF_aug_morse_bonds[752][6]; extern char * CVFF_aug_angles_auto[640][6]; extern char * CVFF_aug_torsions_auto[342][8]; extern char * CVFF_aug_impropers[41][8]; extern char * CVFF_aug_vdw[86][4]; extern char * CVFF_aug_bond_increments[717][5]; // OPLSAAM extern int OPLSAAM_objects[14]; extern int OPLSAAM_dim[14]; extern char * OPLSAAM_atoms[78][4]; extern char * OPLSAAM_bonds[159][5]; extern char * OPLSAAM_angles[437][5]; extern char * OPLSAAM_dihedrals[1446][7]; extern char * OPLSAAM_impropers[105][7]; extern char * OPLSAAM_vdw[78][7]; // OPLSAAR extern int OPLSAAR_objects[14]; extern int OPLSAAR_dim[14]; extern char * OPLSAAR_atoms[145][4]; extern char * OPLSAAR_bonds[242][5]; extern char * OPLSAAR_angles[593][5]; extern char * OPLSAAR_dihedrals[2482][7]; extern char * OPLSAAR_impropers[131][7]; extern char * OPLSAAR_vdw[145][7]; #endif Atomes-GNU-1.1.14/src/calc/force_fields/oplsaap.c000066400000000000000000006214711457665371200214300ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file oplsaap.c * @short OPLSAAM force field * @author Sébastien Le Roux */ /* * This file: 'oplsaap.c' * * Contains: * OPLSAAM force field This file contains several tables: Atoms : OPLSAAM_atoms[78][4] Bonds : OPLSAAM_bonds[159][4] Angles : OPLSAAM_angles[437][5] Dihedrals : OPLSAAM_dihedrals[1446][7] Impropers : OPLSAAM_impropers[105][[7] Non bonded : OPLSAAM_vdw[78][7] */ #include "global.h" /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= OPLSAAM info */ int OPLSAAM_objects[14] = {78, 0, 0, 159, 0, 0, 437, 0, 1446, 0 , 0, 105, 78, 0}; int OPLSAAM_dim[14] = {4, 0, 0, 4, 0, 0, 5, 0, 7, 0, 0, 7, 7, 0}; /* Atoms */ char * OPLSAAM_atoms[78][4]= {{"C", "12.01100", "C135", "CH3 all-atom C: alkanes ALL-ATOM "}, {"C", "12.01100", "C136", "CH2 all-atom C: alkanes PARAMETERS"}, {"C", "12.01100", "C137", "CH all-atom C: alkanes FROM HERE ON"}, {"C", "12.01100", "C145", "Benzene C - 12 site JACS,112,4768-90"}, {"C", "12.01100", "C149", "all-atom C: CH2, ethyl benzene"}, {"C", "12.01100", "C157", "all-atom C: CH3 and CH2, alcohols"}, {"C", "12.01100", "C158", "all-atom C: CH, alcohols"}, {"C", "12.01100", "C166", "C(OH) phenol Use with all"}, {"C", "12.01100", "C206", "all-atom C: CH2, thiols"}, {"C", "12.01100", "C209", "all-atom C: CH3, sulfides"}, {"C", "12.01100", "C210", "all-atom C: CH2, sulfides"}, {"C", "12.01100", "C214", "all-atom C: CH2, disulfides"}, {"C", "12.01100", "C223", "C in RCH2NH2 and Gly CA (See 900 for amines)"}, {"C", "12.01100", "C224", "C in R2CHNH2 and Ala CA"}, {"C", "12.01100", "C235", "C: C=O in amide. Acyl R in amides"}, {"C", "12.01100", "C242", "C on N: secondary N-Me amide"}, {"C", "12.01100", "C245", "C on N: tertiary N-CH2R amide (Pro Cdelta)"}, {"C", "12.01100", "C246", "C on N: tertiary N-CHR2 amide (Pro Calpha)"}, {"C", "12.01100", "C267", "Co in CCOOH carboxylic acid"}, {"C", "12.01100", "C271", "C in COO- carboxylate"}, {"C", "12.01100", "C274", "C: CH2, carboxylate ion"}, {"C", "12.01100", "C283", "AA C-alpha on C-terminal ALA"}, {"C", "12.01100", "C284", "AA C-alpha on C-terminal GLY"}, {"C", "12.01100", "C285", "AA C-alpha on C-terminal PRO"}, {"C", "12.01100", "C292", "C in RCH2NH3+ and CA in N-term Gly"}, {"C", "12.01100", "C293", "C in R2CHNH3+ and CA in N-term Ala, etc."}, {"C", "12.01100", "C295", "AA:C-alpha in N-term PRO"}, {"C", "12.01100", "C296", "AA:C-delta in N-term PRO"}, {"C", "12.01100", "C302", "C: guanidinium C+"}, {"C", "12.01100", "C307", "C: CH2(D), ARG, ethylguanidinium"}, {"C", "12.01100", "C308", "C: CH2(G), ARG"}, {"C", "12.01100", "C500", "CG in TRP"}, {"C", "12.01100", "C501", "CD C in TRP"}, {"C", "12.01100", "C502", "CE C in TRP"}, {"C", "12.01100", "C505", "CB in HIS"}, {"C", "12.01100", "C506", "CE1 in HID, HIE"}, {"C", "12.01100", "C507", "CD2 in HID, CG in HIE"}, {"C", "12.01100", "C508", "CG in HID, CD2 in HIE"}, {"C", "12.01100", "C509", "CE1 in HIP"}, {"C", "12.01100", "C510", "CG, CD2 in HIP"}, {"C", "12.01100", "C514", "CD1 in TRP"}, {"H", "1.00800", "H140", "H all-atom H: alkanes"}, {"H", "1.00800", "H146", "Benzene H - 12 site"}, {"H", "1.00800", "H155", "all-atom H(O): mono alcohols"}, {"H", "1.00800", "H168", "H phenol 145 and 146"}, {"H", "1.00800", "H204", "all-atom H(S): thiols (mod 11/99)"}, {"H", "1.00800", "H240", "H on N: primary amide"}, {"H", "1.00800", "H241", "H on N: secondary amide"}, {"H", "1.00800", "H270", "H in CCOOH"}, {"H", "1.00800", "H290", "H (RNH3+)"}, {"H", "1.00800", "H301", "H: guanidinium NH2"}, {"H", "1.00800", "H304", "H: guanidinium NHR"}, {"H", "1.00800", "H310", "H (R2NH2+)"}, {"H", "1.00800", "H504", "H on NE in TRP"}, {"H", "1.00800", "H513", "H on N in HIP"}, {"N", "14.00700", "N237", "N: primary amide. alkane parameters."}, {"N", "14.00700", "N238", "N: secondary amide 279 for formyl H."}, {"N", "14.00700", "N239", "N: tertiary amide"}, {"N", "14.00700", "N287", "N (RNH3+)"}, {"N", "14.00700", "N300", "N: guanidinium NH2"}, {"N", "14.00700", "N303", "N: guanidinium NHR"}, {"N", "14.00700", "N309", "N (R2NH2+)"}, {"N", "14.00700", "N503", "NE in TRP"}, {"N", "14.00700", "N511", "NE in HID, ND in HIE"}, {"N", "14.00700", "N512", "N in HIP"}, {"O", "15.99940", "O154", "all-atom O: mono alcohols"}, {"O", "15.99940", "O167", "O phenol atom C, H"}, {"O", "15.99940", "O236", "O: C=O in amide. is neutral - use"}, {"O", "15.99940", "O268", "Oh in CCOOH R in RCOOH is"}, {"O", "15.99940", "O269", "Oc in CCOOH neutral; use 135-140"}, {"O", "15.99940", "O272", "O: O in COO- carboxylate"}, {"S", "32.06000", "S200", "all-atom S: thiols (mod 11/99)"}, {"S", "32.06000", "S202", "all-atom S: sulfides"}, {"S", "32.06000", "S203", "all-atom S: disulfides"}, {"O", "15.99940", "OT", " "}, {"H", "1.00800", "HT", " "}, {"Na", "22.98977", "SOD", "Sodium Ion, adm jr."}, {"Cl", "35.45000", "CLA", "Chloride Ion, adm jr."}}; /* Bonds */ char * OPLSAAM_bonds[159][4]= {{"OT", "HT", "450.0", "0.9572"}, {"HT", "HT", "0.0", "1.5139"}, {"S203", "S203", "166.0", "2.038"}, {"C135", "C136", "268.00", "1.529"}, {"C135", "C137", "268.00", "1.529"}, {"C135", "C158", "268.00", "1.529"}, {"C135", "C224", "268.00", "1.529"}, {"C135", "C235", "317.00", "1.522"}, {"C135", "C283", "268.00", "1.529"}, {"C135", "C293", "268.00", "1.529"}, {"C135", "H140", "340.00", "1.090"}, {"C136", "C136", "268.00", "1.529"}, {"C136", "C137", "268.00", "1.529"}, {"C136", "C210", "268.00", "1.529"}, {"C136", "C224", "268.00", "1.529"}, {"C136", "C235", "317.00", "1.522"}, {"C136", "C245", "268.00", "1.529"}, {"C136", "C246", "268.00", "1.529"}, {"C136", "C267", "317.00", "1.522"}, {"C136", "C274", "268.00", "1.529"}, {"C136", "C283", "268.00", "1.529"}, {"C136", "C285", "268.00", "1.529"}, {"C136", "C292", "268.00", "1.529"}, {"C136", "C293", "268.00", "1.529"}, {"C136", "C295", "268.00", "1.529"}, {"C136", "C296", "268.00", "1.529"}, {"C136", "C308", "268.00", "1.529"}, {"C136", "C500", "317.00", "1.495"}, {"C136", "H140", "340.00", "1.090"}, {"C137", "C224", "268.00", "1.529"}, {"C137", "C283", "268.00", "1.529"}, {"C137", "C293", "268.00", "1.529"}, {"C137", "H140", "340.00", "1.090"}, {"C145", "C145", "469.00", "1.400"}, {"C145", "C149", "317.00", "1.510"}, {"C145", "C166", "469.00", "1.400"}, {"C145", "C501", "469.00", "1.404"}, {"C145", "C502", "469.00", "1.400"}, {"C145", "H146", "367.00", "1.080"}, {"C149", "C224", "268.00", "1.529"}, {"C149", "C283", "268.00", "1.529"}, {"C149", "C293", "268.00", "1.529"}, {"C149", "H140", "340.00", "1.090"}, {"C157", "C224", "268.00", "1.529"}, {"C157", "C283", "268.00", "1.529"}, {"C157", "C293", "268.00", "1.529"}, {"C157", "H140", "340.00", "1.090"}, {"C157", "O154", "320.00", "1.410"}, {"C158", "C224", "268.00", "1.529"}, {"C158", "C283", "268.00", "1.529"}, {"C158", "C293", "268.00", "1.529"}, {"C158", "H140", "340.00", "1.090"}, {"C158", "O154", "320.00", "1.410"}, {"C166", "O167", "450.00", "1.364"}, {"C206", "C224", "268.00", "1.529"}, {"C206", "C283", "268.00", "1.529"}, {"C206", "C293", "268.00", "1.529"}, {"C206", "H140", "340.00", "1.090"}, {"C206", "S200", "222.00", "1.810"}, {"C209", "H140", "340.00", "1.090"}, {"C209", "S202", "222.00", "1.810"}, {"C210", "H140", "340.00", "1.090"}, {"C210", "S202", "222.00", "1.810"}, {"C214", "C224", "268.00", "1.529"}, {"C214", "C283", "268.00", "1.529"}, {"C214", "C293", "268.00", "1.529"}, {"C214", "H140", "340.00", "1.090"}, {"C214", "S203", "222.00", "1.810"}, {"C223", "C235", "317.00", "1.522"}, {"C223", "H140", "340.00", "1.090"}, {"C223", "N238", "337.00", "1.449"}, {"C223", "C267", "317.00", "1.522"}, {"C224", "C235", "317.00", "1.522"}, {"C224", "C267", "317.00", "1.522"}, {"C224", "C274", "268.00", "1.529"}, {"C224", "C505", "268.00", "1.529"}, {"C224", "H140", "340.00", "1.090"}, {"C224", "N238", "337.00", "1.449"}, {"C235", "C246", "317.00", "1.522"}, {"C235", "C292", "317.00", "1.522"}, {"C235", "C293", "317.00", "1.522"}, {"C235", "C295", "317.00", "1.522"}, {"C235", "N237", "490.00", "1.335"}, {"C235", "N238", "490.00", "1.335"}, {"C235", "N239", "490.00", "1.335"}, {"C235", "O236", "570.00", "1.229"}, {"C242", "H140", "340.00", "1.090"}, {"C242", "N238", "337.00", "1.449"}, {"C245", "H140", "340.00", "1.090"}, {"C245", "N239", "337.00", "1.449"}, {"C246", "H140", "340.00", "1.090"}, {"C246", "N239", "337.00", "1.449"}, {"C267", "O268", "450.00", "1.364"}, {"C267", "O269", "570.00", "1.229"}, {"C271", "C274", "317.00", "1.522"}, {"C271", "C283", "317.00", "1.522"}, {"C271", "C284", "317.00", "1.522"}, {"C271", "C285", "317.00", "1.522"}, {"C271", "O272", "656.00", "1.250"}, {"C274", "C283", "268.00", "1.529"}, {"C274", "C293", "268.00", "1.529"}, {"C274", "H140", "340.00", "1.090"}, {"C283", "C505", "268.00", "1.529"}, {"C283", "H140", "340.00", "1.090"}, {"C283", "N238", "337.00", "1.449"}, {"C284", "H140", "340.00", "1.090"}, {"C284", "N238", "337.00", "1.449"}, {"C285", "H140", "340.00", "1.090"}, {"C285", "N239", "337.00", "1.449"}, {"C292", "H140", "340.00", "1.090"}, {"C292", "N287", "367.00", "1.471"}, {"C293", "C505", "268.00", "1.529"}, {"C293", "H140", "340.00", "1.090"}, {"C293", "N287", "367.00", "1.471"}, {"C295", "H140", "340.00", "1.090"}, {"C295", "N309", "367.00", "1.471"}, {"C296", "H140", "340.00", "1.090"}, {"C296", "N309", "367.00", "1.471"}, {"C302", "N300", "481.00", "1.340"}, {"C302", "N303", "481.00", "1.340"}, {"C307", "C308", "268.00", "1.529"}, {"C307", "H140", "340.00", "1.090"}, {"C307", "N303", "337.00", "1.463"}, {"C308", "H140", "340.00", "1.090"}, {"C500", "C501", "388.00", "1.459"}, {"C500", "C514", "546.00", "1.352"}, {"C501", "C502", "447.00", "1.419"}, {"C502", "N503", "428.00", "1.380"}, {"C505", "C507", "317.00", "1.504"}, {"C505", "C508", "317.00", "1.504"}, {"C505", "C510", "317.00", "1.504"}, {"C505", "H140", "340.00", "1.090"}, {"C506", "H146", "367.00", "1.080"}, {"C506", "N503", "477.00", "1.343"}, {"C506", "N511", "488.00", "1.335"}, {"C507", "C508", "520.00", "1.370"}, {"C507", "H146", "367.00", "1.080"}, {"C507", "N511", "410.00", "1.394"}, {"C508", "H146", "367.00", "1.080"}, {"C508", "N503", "427.00", "1.381"}, {"C509", "H146", "367.00", "1.080"}, {"C509", "N512", "477.00", "1.343"}, {"C510", "C510", "520.00", "1.370"}, {"C510", "H146", "367.00", "1.080"}, {"C510", "N512", "427.00", "1.381"}, {"C514", "H146", "367.00", "1.080"}, {"C514", "N503", "427.00", "1.381"}, {"H155", "O154", "553.00", "0.945"}, {"H168", "O167", "553.00", "0.945"}, {"H204", "S200", "274.00", "1.336"}, {"H240", "N237", "434.00", "1.010"}, {"H241", "N238", "434.00", "1.010"}, {"H270", "O268", "553.00", "0.945"}, {"H290", "N287", "434.00", "1.010"}, {"H301", "N300", "434.00", "1.010"}, {"H304", "N303", "434.00", "1.010"}, {"H310", "N309", "434.00", "1.010"}, {"H504", "N503", "434.00", "1.010"}, {"H513", "N512", "434.00", "1.010"}}; /* Angles */ char * OPLSAAM_angles[437][5]= {{"HT", "OT", "HT", "55.0", "104.52"}, {"H140", "C135", "H140", "33.0", "107.8"}, {"H140", "C136", "H140", "33.0", "107.8"}, {"H140", "C149", "H140", "33.0", "107.8"}, {"H140", "C157", "H140", "33.0", "107.8"}, {"H140", "C206", "H140", "33.0", "107.8"}, {"H140", "C209", "H140", "33.0", "107.8"}, {"H140", "C210", "H140", "33.0", "107.8"}, {"H140", "C214", "H140", "33.0", "107.8"}, {"H140", "C223", "H140", "33.0", "107.8"}, {"H140", "C224", "H140", "33.0", "107.8"}, {"H140", "C242", "H140", "33.0", "107.8"}, {"H140", "C245", "H140", "33.0", "107.8"}, {"H140", "C274", "H140", "33.0", "107.8"}, {"H140", "C284", "H140", "33.0", "107.8"}, {"H140", "C292", "H140", "33.0", "107.8"}, {"H140", "C296", "H140", "33.0", "107.8"}, {"H140", "C307", "H140", "33.0", "107.8"}, {"H140", "C308", "H140", "33.0", "107.8"}, {"H140", "C505", "H140", "33.0", "107.8"}, {"H290", "N287", "H290", "35.0", "109.5"}, {"H310", "N309", "H310", "35.0", "109.5"}, {"C135", "C136", "C137", "58.35", "112.70"}, {"C135", "C136", "H140", "37.50", "110.70"}, {"C135", "C137", "C135", "58.35", "112.70"}, {"C135", "C137", "C136", "58.35", "112.70"}, {"C135", "C137", "C224", "58.35", "112.70"}, {"C135", "C137", "C283", "58.35", "112.70"}, {"C135", "C137", "C293", "58.35", "112.70"}, {"C135", "C137", "H140", "37.50", "110.70"}, {"C135", "C158", "C224", "58.35", "112.70"}, {"C135", "C158", "C283", "58.35", "112.70"}, {"C135", "C158", "C293", "58.35", "112.70"}, {"C135", "C158", "H140", "37.50", "110.70"}, {"C135", "C158", "O154", "50.00", "109.50"}, {"C135", "C224", "C235", "63.00", "111.10"}, {"C135", "C224", "C267", "63.00", "111.10"}, {"C135", "C224", "H140", "37.50", "110.70"}, {"C135", "C224", "N238", "80.00", "109.70"}, {"C135", "C235", "N238", "70.00", "116.60"}, {"C135", "C235", "N239", "70.00", "116.60"}, {"C135", "C235", "O236", "80.00", "120.40"}, {"C135", "C283", "C271", "63.00", "111.10"}, {"C135", "C283", "H140", "37.50", "110.70"}, {"C135", "C283", "N238", "80.00", "109.70"}, {"C135", "C293", "C235", "63.00", "111.10"}, {"C135", "C293", "H140", "37.50", "110.70"}, {"C135", "C293", "N287", "80.00", "111.20"}, {"C136", "C135", "H140", "37.50", "110.70"}, {"C136", "C136", "C136", "58.35", "112.70"}, {"C136", "C136", "C224", "58.35", "112.70"}, {"C136", "C136", "C235", "63.00", "111.10"}, {"C136", "C136", "C245", "58.35", "112.70"}, {"C136", "C136", "C246", "58.35", "112.70"}, {"C136", "C136", "C267", "63.00", "111.10"}, {"C136", "C136", "C283", "58.35", "112.70"}, {"C136", "C136", "C285", "58.35", "112.70"}, {"C136", "C136", "C292", "58.35", "112.70"}, {"C136", "C136", "C293", "58.35", "112.70"}, {"C136", "C136", "C295", "58.35", "112.70"}, {"C136", "C136", "C296", "58.35", "112.70"}, {"C136", "C136", "H140", "37.50", "110.70"}, {"C136", "C137", "C224", "58.35", "112.70"}, {"C136", "C137", "C283", "58.35", "112.70"}, {"C136", "C137", "C293", "58.35", "112.70"}, {"C136", "C137", "H140", "37.50", "110.70"}, {"C136", "C210", "H140", "37.50", "110.70"}, {"C136", "C210", "S202", "50.00", "114.70"}, {"C136", "C224", "C235", "63.00", "111.10"}, {"C136", "C224", "H140", "37.50", "110.70"}, {"C136", "C224", "N238", "80.00", "109.70"}, {"C136", "C235", "N237", "70.00", "116.60"}, {"C136", "C235", "O236", "80.00", "120.40"}, {"C136", "C245", "H140", "37.50", "110.70"}, {"C136", "C245", "N239", "80.00", "109.70"}, {"C136", "C246", "C235", "63.00", "111.10"}, {"C136", "C246", "H140", "37.50", "110.70"}, {"C136", "C246", "N239", "80.00", "109.70"}, {"C136", "C267", "O268", "70.00", "108.00"}, {"C136", "C267", "O269", "80.00", "120.40"}, {"C136", "C274", "C271", "63.00", "111.10"}, {"C136", "C274", "H140", "37.50", "110.70"}, {"C136", "C283", "C271", "63.00", "111.10"}, {"C136", "C283", "H140", "37.50", "110.70"}, {"C136", "C283", "N238", "80.00", "109.70"}, {"C136", "C285", "C271", "63.00", "111.10"}, {"C136", "C285", "H140", "37.50", "110.70"}, {"C136", "C285", "N239", "80.00", "109.70"}, {"C136", "C292", "H140", "37.50", "110.70"}, {"C136", "C292", "N287", "80.00", "111.20"}, {"C136", "C293", "C235", "63.00", "111.10"}, {"C136", "C293", "H140", "37.50", "110.70"}, {"C136", "C293", "N287", "80.00", "111.20"}, {"C136", "C295", "C235", "63.00", "111.10"}, {"C136", "C295", "H140", "37.50", "110.70"}, {"C136", "C295", "N309", "80.00", "111.20"}, {"C136", "C296", "H140", "37.50", "110.70"}, {"C136", "C296", "N309", "80.00", "111.20"}, {"C136", "C308", "C307", "58.35", "112.70"}, {"C136", "C308", "H140", "37.50", "110.70"}, {"C136", "C500", "C501", "70.00", "128.60"}, {"C136", "C500", "C514", "70.00", "125.00"}, {"C137", "C135", "H140", "37.50", "110.70"}, {"C137", "C136", "C224", "58.35", "112.70"}, {"C137", "C136", "C283", "58.35", "112.70"}, {"C137", "C136", "C293", "58.35", "112.70"}, {"C137", "C136", "H140", "37.50", "110.70"}, {"C137", "C224", "C235", "63.00", "111.10"}, {"C137", "C224", "H140", "37.50", "110.70"}, {"C137", "C224", "N238", "80.00", "109.70"}, {"C137", "C283", "C271", "63.00", "111.10"}, {"C137", "C283", "H140", "37.50", "110.70"}, {"C137", "C283", "N238", "80.00", "109.70"}, {"C137", "C293", "C235", "63.00", "111.10"}, {"C137", "C293", "H140", "37.50", "110.70"}, {"C137", "C293", "N287", "80.00", "111.20"}, {"C145", "C145", "C145", "63.00", "120.00"}, {"C145", "C145", "C149", "70.00", "120.00"}, {"C145", "C145", "C166", "63.00", "120.00"}, {"C145", "C145", "C501", "63.00", "120.00"}, {"C145", "C145", "C502", "85.00", "120.00"}, {"C145", "C145", "H146", "35.00", "120.00"}, {"C145", "C149", "C224", "63.00", "114.00"}, {"C145", "C149", "C283", "63.00", "114.00"}, {"C145", "C149", "C293", "63.00", "114.00"}, {"C145", "C149", "H140", "35.00", "109.50"}, {"C145", "C166", "C145", "63.00", "120.00"}, {"C145", "C166", "O167", "70.00", "120.00"}, {"C145", "C501", "C500", "85.00", "134.90"}, {"C145", "C501", "C502", "85.00", "116.20"}, {"C145", "C502", "C501", "85.00", "122.70"}, {"C145", "C502", "N503", "70.00", "132.80"}, {"C149", "C224", "C235", "63.00", "111.10"}, {"C149", "C224", "H140", "37.50", "110.70"}, {"C149", "C224", "N238", "80.00", "109.70"}, {"C149", "C283", "C271", "63.00", "111.10"}, {"C149", "C283", "H140", "37.50", "110.70"}, {"C149", "C283", "N238", "80.00", "109.70"}, {"C149", "C293", "C235", "63.00", "111.10"}, {"C149", "C293", "H140", "37.50", "110.70"}, {"C149", "C293", "N287", "80.00", "111.20"}, {"C157", "C224", "C235", "63.00", "111.10"}, {"C157", "C224", "H140", "37.50", "110.70"}, {"C157", "C224", "N238", "80.00", "109.70"}, {"C157", "C283", "C271", "63.00", "111.10"}, {"C157", "C283", "H140", "37.50", "110.70"}, {"C157", "C283", "N238", "80.00", "109.70"}, {"C157", "C293", "C235", "63.00", "111.10"}, {"C157", "C293", "H140", "37.50", "110.70"}, {"C157", "C293", "N287", "80.00", "111.20"}, {"C157", "O154", "H155", "55.00", "108.50"}, {"C158", "C135", "H140", "37.50", "110.70"}, {"C158", "C224", "C235", "63.00", "111.10"}, {"C158", "C224", "H140", "37.50", "110.70"}, {"C158", "C224", "N238", "80.00", "109.70"}, {"C158", "C283", "C271", "63.00", "111.10"}, {"C158", "C283", "H140", "37.50", "110.70"}, {"C158", "C283", "N238", "80.00", "109.70"}, {"C158", "C293", "C235", "63.00", "111.10"}, {"C158", "C293", "H140", "37.50", "110.70"}, {"C158", "C293", "N287", "80.00", "111.20"}, {"C158", "O154", "H155", "55.00", "108.50"}, {"C166", "C145", "H146", "35.00", "120.00"}, {"C166", "O167", "H168", "35.00", "113.00"}, {"C206", "C224", "C235", "63.00", "111.10"}, {"C206", "C224", "H140", "37.50", "110.70"}, {"C206", "C224", "N238", "80.00", "109.70"}, {"C206", "C283", "C271", "63.00", "111.10"}, {"C206", "C283", "H140", "37.50", "110.70"}, {"C206", "C283", "N238", "80.00", "109.70"}, {"C206", "C293", "C235", "63.00", "111.10"}, {"C206", "C293", "H140", "37.50", "110.70"}, {"C206", "C293", "N287", "80.00", "111.20"}, {"C206", "S200", "H204", "44.00", "96.00"}, {"C209", "S202", "C210", "62.00", "98.90"}, {"C210", "C136", "C224", "58.35", "112.70"}, {"C210", "C136", "C283", "58.35", "112.70"}, {"C210", "C136", "C293", "58.35", "112.70"}, {"C210", "C136", "H140", "37.50", "110.70"}, {"C214", "C224", "C235", "63.00", "111.10"}, {"C214", "C224", "H140", "37.50", "110.70"}, {"C214", "C224", "N238", "80.00", "109.70"}, {"C214", "C283", "C271", "63.00", "111.10"}, {"C214", "C283", "H140", "37.50", "110.70"}, {"C214", "C283", "N238", "80.00", "109.70"}, {"C214", "C293", "C235", "63.00", "111.10"}, {"C214", "C293", "H140", "37.50", "110.70"}, {"C214", "C293", "N287", "80.00", "111.20"}, {"C214", "S203", "S203", "68.00", "103.70"}, {"C223", "C235", "N238", "70.00", "116.60"}, {"C223", "C235", "N239", "70.00", "116.60"}, {"C223", "C235", "O236", "80.00", "120.40"}, {"C223", "N238", "C235", "50.00", "121.90"}, {"C223", "N238", "H241", "38.00", "118.40"}, {"C224", "C135", "H140", "37.50", "110.70"}, {"C224", "C136", "C235", "63.00", "111.10"}, {"C224", "C136", "C267", "63.00", "111.10"}, {"C224", "C136", "C274", "58.35", "112.70"}, {"C224", "C136", "C308", "58.35", "112.70"}, {"C224", "C136", "C500", "63.00", "115.60"}, {"C224", "C136", "H140", "37.50", "110.70"}, {"C224", "C137", "H140", "37.50", "110.70"}, {"C224", "C149", "H140", "37.50", "110.70"}, {"C224", "C157", "H140", "37.50", "110.70"}, {"C224", "C157", "O154", "50.00", "109.50"}, {"C224", "C158", "H140", "37.50", "110.70"}, {"C224", "C158", "O154", "50.00", "109.50"}, {"C224", "C206", "H140", "37.50", "110.70"}, {"C224", "C206", "S200", "50.00", "108.60"}, {"C224", "C214", "H140", "37.50", "110.70"}, {"C224", "C214", "S203", "50.00", "114.70"}, {"C224", "C235", "N238", "70.00", "116.60"}, {"C224", "C235", "N239", "70.00", "116.60"}, {"C224", "C235", "O236", "80.00", "120.40"}, {"C223", "C267", "O268", "70.00", "108.00"}, {"C224", "C267", "O268", "70.00", "108.00"}, {"C223", "C267", "O269", "80.00", "120.40"}, {"C224", "C267", "O269", "80.00", "120.40"}, {"C224", "C274", "C271", "63.00", "111.10"}, {"C224", "C274", "H140", "37.50", "110.70"}, {"C224", "C505", "C507", "63.00", "114.00"}, {"C224", "C505", "C508", "63.00", "114.00"}, {"C224", "C505", "C510", "63.00", "114.00"}, {"C224", "C505", "H140", "37.50", "110.70"}, {"C224", "N238", "C235", "50.00", "121.90"}, {"C224", "N238", "H241", "38.00", "118.40"}, {"C235", "C135", "H140", "35.00", "109.50"}, {"C235", "C136", "C283", "63.00", "111.10"}, {"C235", "C136", "C293", "63.00", "111.10"}, {"C235", "C136", "H140", "35.00", "109.50"}, {"C235", "C223", "H140", "35.00", "109.50"}, {"C235", "C223", "N238", "63.00", "110.10"}, {"C235", "C224", "C274", "63.00", "111.10"}, {"C235", "C224", "C505", "63.00", "111.10"}, {"C235", "C224", "H140", "35.00", "109.50"}, {"C235", "C224", "N238", "63.00", "110.10"}, {"C235", "C246", "H140", "35.00", "109.50"}, {"C235", "C246", "N239", "63.00", "110.10"}, {"C235", "C292", "H140", "35.00", "109.50"}, {"C235", "C292", "N287", "80.00", "111.20"}, {"C235", "C293", "C274", "63.00", "111.10"}, {"C235", "C293", "C505", "63.00", "111.10"}, {"C235", "C293", "H140", "35.00", "109.50"}, {"C235", "C293", "N287", "80.00", "111.20"}, {"C235", "C295", "H140", "35.00", "109.50"}, {"C235", "C295", "N309", "80.00", "111.20"}, {"C235", "N237", "H240", "35.00", "119.80"}, {"C235", "N238", "C242", "50.00", "121.90"}, {"C235", "N238", "C283", "50.00", "121.90"}, {"C235", "N238", "C284", "50.00", "121.90"}, {"C235", "N238", "H241", "35.00", "119.80"}, {"C235", "N239", "C245", "50.00", "121.90"}, {"C235", "N239", "C246", "50.00", "121.90"}, {"C235", "N239", "C285", "50.00", "121.90"}, {"C242", "N238", "H241", "38.00", "118.40"}, {"C245", "C136", "H140", "37.50", "110.70"}, {"C245", "N238", "C285", "50.00", "118.00"}, {"C245", "N239", "C246", "50.00", "118.00"}, {"C245", "N239", "C285", "50.00", "118.00"}, {"C246", "C136", "H140", "37.50", "110.70"}, {"C246", "C235", "N238", "70.00", "116.60"}, {"C246", "C235", "N239", "70.00", "116.60"}, {"C246", "C235", "O236", "80.00", "120.40"}, {"C267", "C136", "C283", "63.00", "111.10"}, {"C267", "C136", "C293", "63.00", "111.10"}, {"C267", "C136", "H140", "35.00", "109.50"}, {"C267", "C223", "H140", "35.00", "109.50"}, {"C267", "C224", "H140", "35.00", "109.50"}, {"C267", "C223", "N238", "63.00", "110.10"}, {"C267", "C224", "N238", "63.00", "110.10"}, {"C267", "O268", "H270", "35.00", "113.00"}, {"C271", "C274", "C283", "63.00", "111.10"}, {"C271", "C274", "C293", "63.00", "111.10"}, {"C271", "C274", "H140", "35.00", "109.50"}, {"C271", "C283", "C274", "63.00", "111.10"}, {"C271", "C283", "C505", "63.00", "111.10"}, {"C271", "C283", "H140", "35.00", "109.50"}, {"C271", "C283", "N238", "63.00", "110.10"}, {"C271", "C284", "H140", "35.00", "109.50"}, {"C271", "C284", "N238", "63.00", "110.10"}, {"C271", "C285", "H140", "35.00", "109.50"}, {"C271", "C285", "N239", "63.00", "110.10"}, {"C274", "C136", "C283", "58.35", "112.70"}, {"C274", "C136", "C293", "58.35", "112.70"}, {"C274", "C136", "H140", "37.50", "110.70"}, {"C274", "C224", "H140", "37.50", "110.70"}, {"C274", "C224", "N238", "80.00", "109.70"}, {"C274", "C271", "O272", "70.00", "117.00"}, {"C274", "C283", "H140", "37.50", "110.70"}, {"C274", "C283", "N238", "80.00", "109.70"}, {"C274", "C293", "H140", "37.50", "110.70"}, {"C274", "C293", "N287", "80.00", "111.20"}, {"C283", "C135", "H140", "37.50", "110.70"}, {"C283", "C136", "C308", "58.35", "112.70"}, {"C283", "C136", "C500", "63.00", "115.60"}, {"C283", "C136", "H140", "37.50", "110.70"}, {"C283", "C137", "H140", "37.50", "110.70"}, {"C283", "C149", "H140", "37.50", "110.70"}, {"C283", "C157", "H140", "37.50", "110.70"}, {"C283", "C157", "O154", "50.00", "109.50"}, {"C283", "C158", "H140", "37.50", "110.70"}, {"C283", "C158", "O154", "50.00", "109.50"}, {"C283", "C206", "H140", "37.50", "110.70"}, {"C283", "C206", "S200", "50.00", "108.60"}, {"C283", "C214", "H140", "37.50", "110.70"}, {"C283", "C214", "S203", "50.00", "114.70"}, {"C283", "C271", "O272", "70.00", "117.00"}, {"C283", "C274", "H140", "37.50", "110.70"}, {"C283", "C505", "C507", "63.00", "114.00"}, {"C283", "C505", "C508", "63.00", "114.00"}, {"C283", "C505", "C510", "63.00", "114.00"}, {"C283", "C505", "H140", "37.50", "110.70"}, {"C283", "N238", "H241", "38.00", "118.40"}, {"C284", "C271", "O272", "70.00", "117.00"}, {"C284", "N238", "H241", "38.00", "118.40"}, {"C285", "C136", "H140", "37.50", "110.70"}, {"C285", "C271", "O272", "70.00", "117.00"}, {"C292", "C136", "H140", "37.50", "110.70"}, {"C292", "C235", "N238", "70.00", "116.60"}, {"C292", "C235", "N239", "70.00", "116.60"}, {"C292", "C235", "O236", "80.00", "120.40"}, {"C292", "N287", "H290", "35.00", "109.50"}, {"C293", "C135", "H140", "37.50", "110.70"}, {"C293", "C136", "C308", "58.35", "112.70"}, {"C293", "C136", "C500", "63.00", "115.60"}, {"C293", "C136", "H140", "37.50", "110.70"}, {"C293", "C137", "H140", "37.50", "110.70"}, {"C293", "C149", "H140", "37.50", "110.70"}, {"C293", "C157", "H140", "37.50", "110.70"}, {"C293", "C157", "O154", "50.00", "109.50"}, {"C293", "C158", "H140", "37.50", "110.70"}, {"C293", "C158", "O154", "50.00", "109.50"}, {"C293", "C206", "H140", "37.50", "110.70"}, {"C293", "C206", "S200", "50.00", "108.60"}, {"C293", "C214", "H140", "37.50", "110.70"}, {"C293", "C214", "S203", "50.00", "114.70"}, {"C293", "C235", "N238", "70.00", "116.60"}, {"C293", "C235", "N239", "70.00", "116.60"}, {"C293", "C235", "O236", "80.00", "120.40"}, {"C293", "C274", "H140", "37.50", "110.70"}, {"C293", "C505", "C507", "63.00", "114.00"}, {"C293", "C505", "C508", "63.00", "114.00"}, {"C293", "C505", "C510", "63.00", "114.00"}, {"C293", "C505", "H140", "37.50", "110.70"}, {"C293", "N287", "H290", "35.00", "109.50"}, {"C295", "C136", "H140", "37.50", "110.70"}, {"C295", "C235", "N238", "70.00", "116.60"}, {"C295", "C235", "N239", "70.00", "116.60"}, {"C295", "C235", "O236", "80.00", "120.40"}, {"C295", "N309", "C296", "50.00", "113.00"}, {"C295", "N309", "H310", "35.00", "109.50"}, {"C296", "C136", "H140", "37.50", "110.70"}, {"C296", "N309", "H310", "35.00", "109.50"}, {"C302", "N300", "H301", "35.00", "120.00"}, {"C302", "N303", "C307", "50.00", "123.20"}, {"C302", "N303", "H304", "35.00", "120.00"}, {"C307", "C308", "H140", "37.50", "110.70"}, {"C307", "N303", "H304", "35.00", "118.40"}, {"C308", "C136", "H140", "37.50", "110.70"}, {"C308", "C307", "H140", "37.50", "110.70"}, {"C308", "C307", "N303", "80.00", "111.20"}, {"C500", "C136", "H140", "35.00", "109.50"}, {"C500", "C501", "C502", "85.00", "108.80"}, {"C500", "C514", "H146", "35.00", "120.00"}, {"C500", "C514", "N503", "70.00", "108.70"}, {"C501", "C145", "H146", "35.00", "120.00"}, {"C501", "C500", "C514", "85.00", "106.40"}, {"C501", "C502", "N503", "70.00", "104.40"}, {"C502", "C145", "H146", "35.00", "120.00"}, {"C502", "N503", "C514", "70.00", "111.60"}, {"C502", "N503", "H504", "35.00", "123.10"}, {"C505", "C224", "H140", "37.50", "110.70"}, {"C505", "C224", "N238", "80.00", "109.70"}, {"C505", "C283", "H140", "37.50", "110.70"}, {"C505", "C283", "N238", "80.00", "109.70"}, {"C505", "C293", "H140", "37.50", "110.70"}, {"C505", "C293", "N287", "80.00", "111.20"}, {"C505", "C507", "C508", "70.00", "130.70"}, {"C505", "C507", "N511", "70.00", "124.50"}, {"C505", "C508", "C507", "70.00", "130.70"}, {"C505", "C508", "N503", "70.00", "121.60"}, {"C505", "C510", "C510", "70.00", "130.70"}, {"C505", "C510", "N512", "70.00", "121.60"}, {"C506", "N503", "C508", "70.00", "109.80"}, {"C506", "N503", "H504", "35.00", "124.00"}, {"C506", "N511", "C507", "70.00", "110.00"}, {"C507", "C505", "H140", "35.00", "109.50"}, {"C507", "C508", "H146", "35.00", "130.70"}, {"C507", "C508", "N503", "70.00", "106.30"}, {"C508", "C505", "H140", "35.00", "109.50"}, {"C508", "C507", "H146", "35.00", "128.20"}, {"C508", "C507", "N511", "70.00", "111.00"}, {"C508", "N503", "H504", "35.00", "124.00"}, {"C509", "N512", "C510", "70.00", "109.80"}, {"C509", "N512", "H513", "35.00", "124.00"}, {"C510", "C505", "H140", "35.00", "109.50"}, {"C510", "C510", "H146", "35.00", "130.70"}, {"C510", "C510", "N512", "70.00", "106.30"}, {"C510", "N512", "H513", "35.00", "124.00"}, {"C514", "N503", "H504", "35.00", "124.00"}, {"H140", "C157", "O154", "35.00", "109.50"}, {"H140", "C158", "O154", "35.00", "109.50"}, {"H140", "C206", "S200", "35.00", "109.50"}, {"H140", "C209", "S202", "35.00", "109.50"}, {"H140", "C210", "S202", "35.00", "109.50"}, {"H140", "C214", "S203", "35.00", "109.50"}, {"H140", "C223", "N238", "35.00", "109.50"}, {"H140", "C224", "N238", "35.00", "109.50"}, {"H140", "C242", "N238", "35.00", "109.50"}, {"H140", "C245", "N239", "35.00", "109.50"}, {"H140", "C246", "N239", "35.00", "109.50"}, {"H140", "C283", "N238", "35.00", "109.50"}, {"H140", "C284", "N238", "35.00", "109.50"}, {"H140", "C285", "N239", "35.00", "109.50"}, {"H140", "C292", "N287", "35.00", "109.50"}, {"H140", "C293", "N287", "35.00", "109.50"}, {"H140", "C295", "N309", "35.00", "109.50"}, {"H140", "C296", "N309", "35.00", "109.50"}, {"H140", "C307", "N303", "35.00", "109.50"}, {"H146", "C506", "N503", "35.00", "120.00"}, {"H146", "C506", "N511", "35.00", "120.00"}, {"H146", "C507", "N511", "35.00", "120.00"}, {"H146", "C508", "N503", "35.00", "121.60"}, {"H146", "C509", "N512", "35.00", "120.00"}, {"H146", "C510", "N512", "35.00", "120.00"}, {"H146", "C514", "N503", "35.00", "121.60"}, {"H240", "N237", "H240", "35.00", "120.00"}, {"H301", "N300", "H301", "35.00", "120.00"}, {"N237", "C235", "O236", "80.00", "122.90"}, {"N238", "C235", "O236", "80.00", "122.90"}, {"N239", "C235", "O236", "80.00", "122.90"}, {"N300", "C302", "N300", "70.00", "120.00"}, {"N300", "C302", "N303", "70.00", "120.00"}, {"N503", "C506", "N511", "70.00", "120.00"}, {"N512", "C509", "N512", "70.00", "120.00"}, {"O268", "C267", "O269", "80.00", "121.00"}, {"O272", "C271", "O272", "80.00", "126.00"}}; /* Dihedrals */ char * OPLSAAM_dihedrals[1446][7]= {{"X", "C145", "C145", "X", "3.6250", "2", "180.0"}, {"X", "C145", "C166", "X", "3.6250", "2", "180.0"}, {"X", "C145", "C501", "X", "3.5000", "2", "180.0"}, {"X", "C145", "C502", "X", "3.6250", "2", "180.0"}, {"X", "C302", "N300", "X", "1.9500", "2", "180.0"}, {"X", "C500", "C501", "X", "1.6750", "2", "180.0"}, {"X", "C500", "C514", "X", "6.5250", "2", "180.0"}, {"X", "C501", "C502", "X", "3.0000", "2", "180.0"}, {"X", "C502", "N503", "X", "1.5250", "2", "180.0"}, {"X", "C506", "N503", "X", "2.3250", "2", "180.0"}, {"X", "C506", "N511", "X", "5.0000", "2", "180.0"}, {"X", "C507", "C508", "X", "5.3750", "2", "180.0"}, {"X", "C507", "N511", "X", "2.4000", "2", "180.0"}, {"X", "C509", "N512", "X", "2.3250", "2", "180.0"}, {"X", "C510", "C510", "X", "5.3750", "2", "180.0"}, {"X", "C514", "N503", "X", "1.5000", "2", "180.0"}, {"C135", "C136", "C137", "C135", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C135", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C135", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "C224", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C224", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C224", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "C283", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C283", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C283", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "C293", "0.6500", "1", "0.0"}, {"C135", "C136", "C137", "C293", "-0.1000", "2", "180.0"}, {"C135", "C136", "C137", "C293", "0.1000", "3", "0.0"}, {"C135", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C136", "C224", "0.6500", "1", "0.0"}, {"C135", "C137", "C136", "C224", "-0.1000", "2", "180.0"}, {"C135", "C137", "C136", "C224", "0.1000", "3", "0.0"}, {"C135", "C137", "C136", "C283", "0.6500", "1", "0.0"}, {"C135", "C137", "C136", "C283", "-0.1000", "2", "180.0"}, {"C135", "C137", "C136", "C283", "0.1000", "3", "0.0"}, {"C135", "C137", "C136", "C293", "0.6500", "1", "0.0"}, {"C135", "C137", "C136", "C293", "-0.1000", "2", "180.0"}, {"C135", "C137", "C136", "C293", "0.1000", "3", "0.0"}, {"C135", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C224", "C235", "-0.7110", "1", "0.0"}, {"C135", "C137", "C224", "C235", "0.5340", "2", "180.0"}, {"C135", "C137", "C224", "C235", "0.0000", "3", "0.0"}, {"C135", "C137", "C224", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C224", "N238", "1.4970", "1", "0.0"}, {"C135", "C137", "C224", "N238", "0.1260", "2", "180.0"}, {"C135", "C137", "C224", "N238", "0.1500", "3", "0.0"}, {"C135", "C137", "C283", "C271", "-0.7110", "1", "0.0"}, {"C135", "C137", "C283", "C271", "0.5340", "2", "180.0"}, {"C135", "C137", "C283", "C271", "0.0000", "3", "0.0"}, {"C135", "C137", "C283", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C283", "N238", "1.4970", "1", "0.0"}, {"C135", "C137", "C283", "N238", "0.1260", "2", "180.0"}, {"C135", "C137", "C283", "N238", "0.1500", "3", "0.0"}, {"C135", "C137", "C293", "C235", "-0.7110", "1", "0.0"}, {"C135", "C137", "C293", "C235", "0.5340", "2", "180.0"}, {"C135", "C137", "C293", "C235", "0.0000", "3", "0.0"}, {"C135", "C137", "C293", "H140", "0.1500", "3", "0.0"}, {"C135", "C137", "C293", "N287", "1.4970", "1", "0.0"}, {"C135", "C137", "C293", "N287", "0.1260", "2", "180.0"}, {"C135", "C137", "C293", "N287", "0.1500", "3", "0.0"}, {"C135", "C158", "C224", "C235", "-0.7110", "1", "0.0"}, {"C135", "C158", "C224", "C235", "0.5340", "2", "180.0"}, {"C135", "C158", "C224", "C235", "0.0000", "3", "0.0"}, {"C135", "C158", "C224", "H140", "0.1500", "3", "0.0"}, {"C135", "C158", "C224", "N238", "1.4970", "1", "0.0"}, {"C135", "C158", "C224", "N238", "0.1260", "2", "180.0"}, {"C135", "C158", "C224", "N238", "0.1500", "3", "0.0"}, {"C135", "C158", "C283", "C271", "-0.7110", "1", "0.0"}, {"C135", "C158", "C283", "C271", "0.5340", "2", "180.0"}, {"C135", "C158", "C283", "C271", "0.0000", "3", "0.0"}, {"C135", "C158", "C283", "H140", "0.1500", "3", "0.0"}, {"C135", "C158", "C283", "N238", "1.4970", "1", "0.0"}, {"C135", "C158", "C283", "N238", "0.1260", "2", "180.0"}, {"C135", "C158", "C283", "N238", "0.1500", "3", "0.0"}, {"C135", "C158", "C293", "C235", "-0.7110", "1", "0.0"}, {"C135", "C158", "C293", "C235", "0.5340", "2", "180.0"}, {"C135", "C158", "C293", "C235", "0.0000", "3", "0.0"}, {"C135", "C158", "C293", "H140", "0.1500", "3", "0.0"}, {"C135", "C158", "C293", "N287", "1.4970", "1", "0.0"}, {"C135", "C158", "C293", "N287", "0.1260", "2", "180.0"}, {"C135", "C158", "C293", "N287", "0.1500", "3", "0.0"}, {"C135", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C135", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C135", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C135", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C135", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C135", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C135", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C135", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C135", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C135", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C135", "C224", "C267", "O268", "0.5000", "1", "0.0"}, {"C135", "C224", "C267", "O268", "0.2730", "2", "180.0"}, {"C135", "C224", "C267", "O268", "0.2250", "3", "0.0"}, {"C135", "C224", "C267", "O269", "0.2730", "2", "180.0"}, {"C135", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C135", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C135", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C135", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C135", "C235", "N238", "C223", "1.1500", "1", "0.0"}, {"C135", "C235", "N238", "C223", "3.0445", "2", "180.0"}, {"C135", "C235", "N238", "C224", "1.1500", "1", "0.0"}, {"C135", "C235", "N238", "C224", "3.0445", "2", "180.0"}, {"C135", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C135", "C235", "N239", "C245", "1.1500", "1", "0.0"}, {"C135", "C235", "N239", "C245", "3.0445", "2", "180.0"}, {"C135", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C135", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C135", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C135", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C135", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C135", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C135", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C135", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C135", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C135", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C135", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C135", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C135", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C135", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C135", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C136", "C136", "C136", "C224", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C224", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C224", "0.1000", "3", "0.0"}, {"C267", "C136", "C136", "C224", "0.6500", "1", "0.0"}, {"C267", "C136", "C136", "C224", "-0.1000", "2", "180.0"}, {"C267", "C136", "C136", "C224", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "C283", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C283", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C283", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "C292", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C292", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C292", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "C293", "0.6500", "1", "0.0"}, {"C136", "C136", "C136", "C293", "-0.1000", "2", "180.0"}, {"C136", "C136", "C136", "C293", "0.1000", "3", "0.0"}, {"C136", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C267", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C224", "C235", "-1.1790", "1", "0.0"}, {"C136", "C136", "C224", "C235", "0.4555", "2", "180.0"}, {"C136", "C136", "C224", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C224", "N238", "0.4420", "1", "0.0"}, {"C136", "C136", "C224", "N238", "0.4485", "2", "180.0"}, {"C136", "C136", "C224", "N238", "0.4400", "3", "0.0"}, {"C136", "C136", "C235", "N237", "1.4220", "1", "0.0"}, {"C136", "C136", "C235", "N237", "-0.1805", "2", "180.0"}, {"C136", "C136", "C235", "N237", "-0.1625", "3", "0.0"}, {"C136", "C136", "C235", "O236", "0.2030", "1", "0.0"}, {"C136", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C136", "C136", "C235", "O236", "0.0695", "3", "0.0"}, {"C136", "C136", "C245", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C245", "N239", "0.4225", "1", "0.0"}, {"C136", "C136", "C245", "N239", "-0.4810", "2", "180.0"}, {"C136", "C136", "C245", "N239", "0.3565", "3", "0.0"}, {"C136", "C136", "C246", "C235", "-0.8755", "1", "0.0"}, {"C136", "C136", "C246", "C235", "0.8030", "2", "180.0"}, {"C136", "C136", "C246", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C246", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C246", "N239", "0.7860", "1", "0.0"}, {"C136", "C136", "C246", "N239", "0.0795", "2", "180.0"}, {"C136", "C136", "C246", "N239", "0.1000", "3", "0.0"}, {"C136", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C136", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C136", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C136", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C136", "C136", "C283", "C271", "-1.1790", "1", "0.0"}, {"C136", "C136", "C283", "C271", "0.4555", "2", "180.0"}, {"C136", "C136", "C283", "C271", "0.0000", "3", "0.0"}, {"C136", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C283", "N238", "0.4420", "1", "0.0"}, {"C136", "C136", "C283", "N238", "0.4485", "2", "180.0"}, {"C136", "C136", "C283", "N238", "0.4400", "3", "0.0"}, {"C136", "C136", "C285", "C271", "-0.8755", "1", "0.0"}, {"C136", "C136", "C285", "C271", "0.8030", "2", "180.0"}, {"C136", "C136", "C285", "C271", "0.0000", "3", "0.0"}, {"C136", "C136", "C285", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C285", "N239", "0.7860", "1", "0.0"}, {"C136", "C136", "C285", "N239", "0.0795", "2", "180.0"}, {"C136", "C136", "C285", "N239", "0.1000", "3", "0.0"}, {"C136", "C136", "C292", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C292", "N287", "1.3660", "1", "0.0"}, {"C136", "C136", "C292", "N287", "-0.1145", "2", "180.0"}, {"C136", "C136", "C292", "N287", "0.2425", "3", "0.0"}, {"C136", "C136", "C293", "C235", "-1.1790", "1", "0.0"}, {"C136", "C136", "C293", "C235", "0.4555", "2", "180.0"}, {"C136", "C136", "C293", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C293", "N287", "0.4420", "1", "0.0"}, {"C136", "C136", "C293", "N287", "0.4485", "2", "180.0"}, {"C136", "C136", "C293", "N287", "0.4400", "3", "0.0"}, {"C136", "C136", "C295", "C235", "-0.8755", "1", "0.0"}, {"C136", "C136", "C295", "C235", "0.8030", "2", "180.0"}, {"C136", "C136", "C295", "C235", "0.0000", "3", "0.0"}, {"C136", "C136", "C295", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C295", "N309", "1.3660", "1", "0.0"}, {"C136", "C136", "C295", "N309", "-0.1145", "2", "180.0"}, {"C136", "C136", "C295", "N309", "0.2425", "3", "0.0"}, {"C136", "C136", "C296", "H140", "0.1500", "3", "0.0"}, {"C136", "C136", "C296", "N309", "1.3660", "1", "0.0"}, {"C136", "C136", "C296", "N309", "-0.1145", "2", "180.0"}, {"C136", "C136", "C296", "N309", "0.2425", "3", "0.0"}, {"C136", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C224", "C235", "-0.7110", "1", "0.0"}, {"C136", "C137", "C224", "C235", "0.5340", "2", "180.0"}, {"C136", "C137", "C224", "C235", "0.0000", "3", "0.0"}, {"C136", "C137", "C224", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C224", "N238", "1.4970", "1", "0.0"}, {"C136", "C137", "C224", "N238", "0.1260", "2", "180.0"}, {"C136", "C137", "C224", "N238", "0.1500", "3", "0.0"}, {"C136", "C137", "C283", "C271", "-0.7110", "1", "0.0"}, {"C136", "C137", "C283", "C271", "0.5340", "2", "180.0"}, {"C136", "C137", "C283", "C271", "0.0000", "3", "0.0"}, {"C136", "C137", "C283", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C283", "N238", "1.4970", "1", "0.0"}, {"C136", "C137", "C283", "N238", "0.1260", "2", "180.0"}, {"C136", "C137", "C283", "N238", "0.1500", "3", "0.0"}, {"C136", "C137", "C293", "C235", "-0.7110", "1", "0.0"}, {"C136", "C137", "C293", "C235", "0.5340", "2", "180.0"}, {"C136", "C137", "C293", "C235", "0.0000", "3", "0.0"}, {"C136", "C137", "C293", "H140", "0.1500", "3", "0.0"}, {"C136", "C137", "C293", "N287", "1.4970", "1", "0.0"}, {"C136", "C137", "C293", "N287", "0.1260", "2", "180.0"}, {"C136", "C137", "C293", "N287", "0.1500", "3", "0.0"}, {"C136", "C210", "S202", "C209", "0.4625", "1", "0.0"}, {"C136", "C210", "S202", "C209", "-0.2880", "2", "180.0"}, {"C136", "C210", "S202", "C209", "0.3385", "3", "0.0"}, {"C136", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C136", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C136", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C136", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C136", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C136", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C136", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C136", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C136", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C136", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C136", "C235", "N237", "H240", "2.4500", "2", "180.0"}, {"C136", "C245", "N239", "C235", "-0.3410", "1", "0.0"}, {"C136", "C245", "N239", "C235", "0.0650", "2", "180.0"}, {"C136", "C245", "N239", "C235", "0.1690", "3", "0.0"}, {"C136", "C245", "N239", "C246", "1.4295", "1", "0.0"}, {"C136", "C245", "N239", "C246", "1.0290", "2", "180.0"}, {"C136", "C245", "N239", "C246", "-5.6330", "3", "0.0"}, {"C136", "C245", "N239", "C285", "1.4295", "1", "0.0"}, {"C136", "C245", "N239", "C285", "1.0290", "2", "180.0"}, {"C136", "C245", "N239", "C285", "-5.6330", "3", "0.0"}, {"C136", "C246", "C235", "N238", "2.5145", "1", "0.0"}, {"C136", "C246", "C235", "N238", "0.3595", "2", "180.0"}, {"C136", "C246", "C235", "N238", "1.1200", "3", "0.0"}, {"C136", "C246", "C235", "N239", "2.5145", "1", "0.0"}, {"C136", "C246", "C235", "N239", "0.3595", "2", "180.0"}, {"C136", "C246", "C235", "N239", "1.1200", "3", "0.0"}, {"C136", "C246", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C246", "N239", "C235", "-0.3410", "1", "0.0"}, {"C136", "C246", "N239", "C235", "0.0650", "2", "180.0"}, {"C136", "C246", "N239", "C235", "0.1690", "3", "0.0"}, {"C136", "C246", "N239", "C245", "2.3765", "1", "0.0"}, {"C136", "C246", "N239", "C245", "-0.3670", "2", "180.0"}, {"C136", "C267", "O268", "H270", "0.7500", "1", "0.0"}, {"C136", "C267", "O268", "H270", "2.7500", "2", "180.0"}, {"C136", "C274", "C271", "O272", "0.2730", "2", "180.0"}, {"C136", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C136", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C136", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C136", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C136", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C136", "C285", "C271", "O272", "0.4100", "2", "180.0"}, {"C136", "C285", "N239", "C235", "-0.3410", "1", "0.0"}, {"C136", "C285", "N239", "C235", "0.0650", "2", "180.0"}, {"C136", "C285", "N239", "C235", "0.1690", "3", "0.0"}, {"C136", "C285", "N239", "C245", "2.3765", "1", "0.0"}, {"C136", "C285", "N239", "C245", "-0.3670", "2", "180.0"}, {"C136", "C292", "N287", "H290", "0.1735", "3", "0.0"}, {"C136", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C136", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C136", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C136", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C136", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C136", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C136", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C136", "C295", "C235", "N238", "2.5145", "1", "0.0"}, {"C136", "C295", "C235", "N238", "0.3595", "2", "180.0"}, {"C136", "C295", "C235", "N238", "1.1200", "3", "0.0"}, {"C136", "C295", "C235", "N239", "2.5145", "1", "0.0"}, {"C136", "C295", "C235", "N239", "0.3595", "2", "180.0"}, {"C136", "C295", "C235", "N239", "1.1200", "3", "0.0"}, {"C136", "C295", "C235", "O236", "0.0000", "1", "0.0"}, {"C136", "C295", "N309", "C296", "0.71895", "1", "0.0"}, {"C136", "C295", "N309", "C296", "-0.0619", "2", "180.0"}, {"C136", "C295", "N309", "C296", "0.13195", "3", "0.0"}, {"C136", "C295", "N309", "H310", "0.1735", "3", "0.0"}, {"C136", "C296", "N309", "C295", "0.71895", "1", "0.0"}, {"C136", "C296", "N309", "C295", "-0.0619", "2", "180.0"}, {"C136", "C296", "N309", "C295", "0.13195", "3", "0.0"}, {"C136", "C296", "N309", "H310", "0.1735", "3", "0.0"}, {"C136", "C308", "C307", "H140", "0.1500", "3", "0.0"}, {"C136", "C308", "C307", "N303", "1.3660", "1", "0.0"}, {"C136", "C308", "C307", "N303", "-0.1145", "2", "180.0"}, {"C136", "C308", "C307", "N303", "0.2425", "3", "0.0"}, {"C137", "C136", "C135", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C224", "C235", "-0.8755", "1", "0.0"}, {"C137", "C136", "C224", "C235", "0.8030", "2", "180.0"}, {"C137", "C136", "C224", "C235", "0.0000", "3", "0.0"}, {"C137", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C224", "N238", "0.7860", "1", "0.0"}, {"C137", "C136", "C224", "N238", "0.0795", "2", "180.0"}, {"C137", "C136", "C224", "N238", "0.1000", "3", "0.0"}, {"C137", "C136", "C283", "C271", "-0.8755", "1", "0.0"}, {"C137", "C136", "C283", "C271", "0.8030", "2", "180.0"}, {"C137", "C136", "C283", "C271", "0.0000", "3", "0.0"}, {"C137", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C283", "N238", "0.7860", "1", "0.0"}, {"C137", "C136", "C283", "N238", "0.0795", "2", "180.0"}, {"C137", "C136", "C283", "N238", "0.1000", "3", "0.0"}, {"C137", "C136", "C293", "C235", "-0.8755", "1", "0.0"}, {"C137", "C136", "C293", "C235", "0.8030", "2", "180.0"}, {"C137", "C136", "C293", "C235", "0.0000", "3", "0.0"}, {"C137", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C137", "C136", "C293", "N287", "0.7860", "1", "0.0"}, {"C137", "C136", "C293", "N287", "0.0795", "2", "180.0"}, {"C137", "C136", "C293", "N287", "0.1000", "3", "0.0"}, {"C137", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C137", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C137", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C137", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C137", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C137", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C137", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C137", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C137", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C137", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C137", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C137", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C137", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C137", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C137", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C137", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C137", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C137", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C137", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C137", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C137", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C137", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C137", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C137", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C145", "C145", "C149", "C224", "0.0000", "1", "0.0"}, {"C145", "C145", "C149", "C283", "0.0000", "1", "0.0"}, {"C145", "C145", "C149", "C293", "0.0000", "1", "0.0"}, {"C145", "C145", "C149", "H140", "0.0000", "1", "0.0"}, {"C145", "C149", "C224", "C235", "-0.7030", "1", "0.0"}, {"C145", "C149", "C224", "C235", "0.8885", "2", "180.0"}, {"C145", "C149", "C224", "C235", "0.0000", "3", "0.0"}, {"C145", "C149", "C224", "H140", "0.2310", "3", "0.0"}, {"C145", "C149", "C224", "N238", "0.8560", "1", "0.0"}, {"C145", "C149", "C224", "N238", "0.3625", "2", "180.0"}, {"C145", "C149", "C224", "N238", "0.1830", "3", "0.0"}, {"C145", "C149", "C283", "C271", "-0.7030", "1", "0.0"}, {"C145", "C149", "C283", "C271", "0.8885", "2", "180.0"}, {"C145", "C149", "C283", "C271", "0.0000", "3", "0.0"}, {"C145", "C149", "C283", "H140", "0.2310", "3", "0.0"}, {"C145", "C149", "C283", "N238", "0.8560", "1", "0.0"}, {"C145", "C149", "C283", "N238", "0.3625", "2", "180.0"}, {"C145", "C149", "C283", "N238", "0.1830", "3", "0.0"}, {"C145", "C149", "C293", "C235", "-0.7030", "1", "0.0"}, {"C145", "C149", "C293", "C235", "0.8885", "2", "180.0"}, {"C145", "C149", "C293", "C235", "0.0000", "3", "0.0"}, {"C145", "C149", "C293", "H140", "0.2310", "3", "0.0"}, {"C145", "C149", "C293", "N287", "0.8560", "1", "0.0"}, {"C145", "C149", "C293", "N287", "0.3625", "2", "180.0"}, {"C145", "C149", "C293", "N287", "0.1830", "3", "0.0"}, {"C145", "C166", "C145", "H146", "3.6250", "2", "180.0"}, {"C145", "C166", "O167", "H168", "0.8410", "2", "180.0"}, {"C145", "C501", "C500", "C514", "1.6750", "2", "180.0"}, {"C145", "C502", "C501", "C500", "3.0000", "2", "180.0"}, {"C149", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C149", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C149", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C149", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C149", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C149", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C149", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C149", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C149", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C149", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C149", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C149", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C149", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C149", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C149", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C149", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C149", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C149", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C149", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C149", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C149", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C149", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C149", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C149", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C157", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C157", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C157", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C157", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C157", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C157", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C157", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C157", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C157", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C157", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C157", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C157", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C157", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C157", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C157", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C157", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C157", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C157", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C157", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C157", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C157", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C158", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C158", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C158", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C158", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C158", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C158", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C158", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C158", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C158", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C158", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C158", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C158", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C158", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C158", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C158", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C158", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C158", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C158", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C158", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C158", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C158", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C158", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C158", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C158", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C206", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C206", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C206", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C206", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C206", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C206", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C206", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C206", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C206", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C206", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C206", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C206", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C206", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C206", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C206", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C206", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C206", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C206", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C206", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C206", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C206", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C206", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C206", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C206", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C209", "S202", "C210", "H140", "0.3235", "3", "0.0"}, {"C210", "C136", "C224", "C235", "-0.4555", "1", "0.0"}, {"C210", "C136", "C224", "C235", "0.3495", "2", "180.0"}, {"C210", "C136", "C224", "C235", "0.0000", "3", "0.0"}, {"C210", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C210", "C136", "C224", "N238", "0.1070", "1", "0.0"}, {"C210", "C136", "C224", "N238", "0.2705", "2", "180.0"}, {"C210", "C136", "C224", "N238", "0.1960", "3", "0.0"}, {"C210", "C136", "C283", "C271", "-0.4555", "1", "0.0"}, {"C210", "C136", "C283", "C271", "0.3495", "2", "180.0"}, {"C210", "C136", "C283", "C271", "0.0000", "3", "0.0"}, {"C210", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C210", "C136", "C283", "N238", "0.1070", "1", "0.0"}, {"C210", "C136", "C283", "N238", "0.2705", "2", "180.0"}, {"C210", "C136", "C283", "N238", "0.1960", "3", "0.0"}, {"C210", "C136", "C293", "C235", "-0.4555", "1", "0.0"}, {"C210", "C136", "C293", "C235", "0.3495", "2", "180.0"}, {"C210", "C136", "C293", "C235", "0.0000", "3", "0.0"}, {"C210", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C210", "C136", "C293", "N287", "0.1070", "1", "0.0"}, {"C210", "C136", "C293", "N287", "0.2705", "2", "180.0"}, {"C210", "C136", "C293", "N287", "0.1960", "3", "0.0"}, {"C210", "S202", "C209", "H140", "0.3235", "3", "0.0"}, {"C214", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C214", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C214", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C214", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C214", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C214", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C214", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C214", "C224", "N238", "C235", "-0.3410", "1", "0.0"}, {"C214", "C224", "N238", "C235", "0.0650", "2", "180.0"}, {"C214", "C224", "N238", "C235", "0.1690", "3", "0.0"}, {"C214", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C214", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C214", "C283", "N238", "C235", "-0.3410", "1", "0.0"}, {"C214", "C283", "N238", "C235", "0.0650", "2", "180.0"}, {"C214", "C283", "N238", "C235", "0.1690", "3", "0.0"}, {"C214", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C214", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C214", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C214", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C214", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C214", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C214", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C214", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C214", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C214", "S203", "S203", "C214", "-3.7070", "2", "180.0"}, {"C214", "S203", "S203", "C214", "0.8525", "3", "0.0"}, {"C223", "C235", "N238", "C223", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C223", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C224", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C224", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C242", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C242", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C295", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C295", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "C284", "1.1500", "1", "0.0"}, {"C223", "C235", "N238", "C284", "3.0445", "2", "180.0"}, {"C223", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C223", "C235", "N239", "C245", "1.1500", "1", "0.0"}, {"C223", "C235", "N239", "C245", "3.0445", "2", "180.0"}, {"C223", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C223", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C223", "C235", "N239", "C285", "1.1500", "1", "0.0"}, {"C223", "C235", "N239", "C285", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C224", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C224", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C246", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C246", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C292", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C292", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C293", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C293", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "C295", "1.1500", "1", "0.0"}, {"C223", "N238", "C235", "C295", "3.0445", "2", "180.0"}, {"C223", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C224", "C136", "C136", "C235", "-0.6335", "1", "0.0"}, {"C224", "C136", "C136", "C235", "0.2395", "2", "180.0"}, {"C224", "C136", "C136", "C235", "-0.2430", "3", "0.0"}, {"C224", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C210", "S202", "-0.7825", "1", "0.0"}, {"C224", "C136", "C210", "S202", "-0.0045", "2", "180.0"}, {"C224", "C136", "C210", "S202", "-0.2250", "3", "0.0"}, {"C224", "C136", "C235", "N237", "0.7470", "1", "0.0"}, {"C224", "C136", "C235", "N237", "-0.2555", "2", "180.0"}, {"C224", "C136", "C235", "N237", "0.0625", "3", "0.0"}, {"C224", "C136", "C235", "O236", "0.8280", "1", "0.0"}, {"C224", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C224", "C136", "C235", "O236", "0.2195", "3", "0.0"}, {"C224", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C224", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C224", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C224", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C224", "C136", "C274", "C271", "-0.4425", "1", "0.0"}, {"C224", "C136", "C274", "C271", "0.5125", "2", "180.0"}, {"C224", "C136", "C274", "C271", "-0.6465", "3", "0.0"}, {"C224", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C308", "C307", "0.6500", "1", "0.0"}, {"C224", "C136", "C308", "C307", "-0.1000", "2", "180.0"}, {"C224", "C136", "C308", "C307", "0.1000", "3", "0.0"}, {"C224", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"C224", "C136", "C500", "C501", "0.0000", "1", "0.0"}, {"C224", "C136", "C500", "C514", "-0.3570", "1", "0.0"}, {"C224", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C224", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C224", "C157", "O154", "H155", "-0.1780", "1", "0.0"}, {"C224", "C157", "O154", "H155", "-0.0870", "2", "180.0"}, {"C224", "C157", "O154", "H155", "0.2460", "3", "0.0"}, {"C224", "C158", "C135", "H140", "0.1500", "3", "0.0"}, {"C224", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C224", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C224", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C224", "C206", "S200", "H204", "-0.3795", "1", "0.0"}, {"C224", "C206", "S200", "H204", "-0.1410", "2", "180.0"}, {"C224", "C206", "S200", "H204", "0.3400", "3", "0.0"}, {"C224", "C214", "S203", "S203", "0.9705", "1", "0.0"}, {"C224", "C214", "S203", "S203", "-0.4180", "2", "180.0"}, {"C224", "C214", "S203", "S203", "0.4675", "3", "0.0"}, {"C224", "C235", "N238", "C224", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C224", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "C242", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C242", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "C284", "1.1500", "1", "0.0"}, {"C224", "C235", "N238", "C284", "3.0445", "2", "180.0"}, {"C224", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C224", "C235", "N239", "C245", "1.1500", "1", "0.0"}, {"C224", "C235", "N239", "C245", "3.0445", "2", "180.0"}, {"C224", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C224", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C224", "C235", "N239", "C285", "1.1500", "1", "0.0"}, {"C224", "C235", "N239", "C285", "3.0445", "2", "180.0"}, {"C223", "C267", "O268", "H270", "0.7500", "1", "0.0"}, {"C223", "C267", "O268", "H270", "2.7500", "2", "180.0"}, {"C224", "C267", "O268", "H270", "0.7500", "1", "0.0"}, {"C224", "C267", "O268", "H270", "2.7500", "2", "180.0"}, {"C224", "C274", "C271", "O272", "1.2500", "1", "0.0"}, {"C224", "C274", "C271", "O272", "0.5000", "2", "180.0"}, {"C224", "C274", "C271", "O272", "0.6750", "3", "0.0"}, {"C224", "C505", "C507", "C508", "0.0000", "1", "0.0"}, {"C224", "C505", "C507", "N511", "-0.2800", "1", "0.0"}, {"C224", "C505", "C507", "N511", "-0.3700", "2", "180.0"}, {"C224", "C505", "C507", "N511", "0.1745", "3", "0.0"}, {"C224", "C505", "C508", "C507", "0.0000", "1", "0.0"}, {"C224", "C505", "C508", "N503", "-0.2800", "1", "0.0"}, {"C224", "C505", "C508", "N503", "-0.3700", "2", "180.0"}, {"C224", "C505", "C508", "N503", "0.1745", "3", "0.0"}, {"C224", "C505", "C510", "C510", "0.0000", "1", "0.0"}, {"C224", "C505", "C510", "N512", "-1.9950", "1", "0.0"}, {"C224", "C505", "C510", "N512", "0.8400", "2", "180.0"}, {"C224", "C505", "C510", "N512", "0.1450", "3", "0.0"}, {"C224", "N238", "C235", "C246", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C246", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "C292", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C292", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "C293", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C293", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "C295", "1.1500", "1", "0.0"}, {"C224", "N238", "C235", "C295", "3.0445", "2", "180.0"}, {"C224", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C235", "C136", "C136", "C283", "-0.6335", "1", "0.0"}, {"C235", "C136", "C136", "C283", "0.2395", "2", "180.0"}, {"C235", "C136", "C136", "C283", "-0.2430", "3", "0.0"}, {"C235", "C136", "C136", "C293", "-0.6335", "1", "0.0"}, {"C235", "C136", "C136", "C293", "0.2395", "2", "180.0"}, {"C235", "C136", "C136", "C293", "-0.2430", "3", "0.0"}, {"C235", "C136", "C136", "H140", "-0.0500", "3", "0.0"}, {"C235", "C136", "C224", "C235", "0.2990", "1", "0.0"}, {"C235", "C136", "C224", "C235", "0.7790", "2", "180.0"}, {"C235", "C136", "C224", "C235", "0.1275", "3", "0.0"}, {"C235", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C235", "C136", "C224", "N238", "-2.7505", "1", "0.0"}, {"C235", "C136", "C224", "N238", "0.7635", "2", "180.0"}, {"C235", "C136", "C224", "N238", "0.0000", "3", "0.0"}, {"C235", "C136", "C283", "C271", "0.2990", "1", "0.0"}, {"C235", "C136", "C283", "C271", "0.7790", "2", "180.0"}, {"C235", "C136", "C283", "C271", "0.1275", "3", "0.0"}, {"C235", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C235", "C136", "C283", "N238", "-2.7505", "1", "0.0"}, {"C235", "C136", "C283", "N238", "0.7635", "2", "180.0"}, {"C235", "C136", "C283", "N238", "0.0000", "3", "0.0"}, {"C235", "C136", "C293", "C235", "0.2990", "1", "0.0"}, {"C235", "C136", "C293", "C235", "0.7790", "2", "180.0"}, {"C235", "C136", "C293", "C235", "0.1275", "3", "0.0"}, {"C235", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C235", "C136", "C293", "N287", "-2.7505", "1", "0.0"}, {"C235", "C136", "C293", "N287", "0.7635", "2", "180.0"}, {"C235", "C136", "C293", "N287", "0.0000", "3", "0.0"}, {"C235", "C223", "N238", "C235", "-1.2555", "1", "0.0"}, {"C235", "C223", "N238", "C235", "0.1050", "2", "180.0"}, {"C235", "C223", "N238", "C235", "-0.1000", "3", "0.0"}, {"C235", "C223", "N238", "H241", "0.0000", "1", "0.0"}, {"C235", "C224", "C135", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C136", "C267", "0.2990", "1", "0.0"}, {"C235", "C224", "C136", "C267", "0.7790", "2", "180.0"}, {"C235", "C224", "C136", "C267", "0.1275", "3", "0.0"}, {"C235", "C224", "C136", "C274", "-0.8820", "1", "0.0"}, {"C235", "C224", "C136", "C274", "0.3500", "2", "180.0"}, {"C235", "C224", "C136", "C274", "0.0000", "3", "0.0"}, {"C235", "C224", "C136", "C308", "-0.9855", "1", "0.0"}, {"C235", "C224", "C136", "C308", "0.3850", "2", "180.0"}, {"C235", "C224", "C136", "C308", "0.0000", "3", "0.0"}, {"C235", "C224", "C136", "C500", "-0.2530", "1", "0.0"}, {"C235", "C224", "C136", "C500", "0.4875", "2", "180.0"}, {"C235", "C224", "C136", "C500", "0.0000", "3", "0.0"}, {"C235", "C224", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C137", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C149", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C157", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C157", "O154", "-2.8965", "1", "0.0"}, {"C235", "C224", "C157", "O154", "0.2025", "2", "180.0"}, {"C235", "C224", "C157", "O154", "0.0000", "3", "0.0"}, {"C235", "C224", "C158", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C158", "O154", "-2.8965", "1", "0.0"}, {"C235", "C224", "C158", "O154", "0.2025", "2", "180.0"}, {"C235", "C224", "C158", "O154", "0.0000", "3", "0.0"}, {"C235", "C224", "C206", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C206", "S200", "-1.6615", "1", "0.0"}, {"C235", "C224", "C206", "S200", "0.2645", "2", "180.0"}, {"C235", "C224", "C206", "S200", "0.0000", "3", "0.0"}, {"C235", "C224", "C214", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C214", "S203", "-1.6615", "1", "0.0"}, {"C235", "C224", "C214", "S203", "0.2645", "2", "180.0"}, {"C235", "C224", "C214", "S203", "0.0000", "3", "0.0"}, {"C235", "C224", "C274", "C271", "0.7715", "1", "0.0"}, {"C235", "C224", "C274", "C271", "0.3480", "2", "180.0"}, {"C235", "C224", "C274", "C271", "0.0000", "3", "0.0"}, {"C235", "C224", "C274", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "C505", "C507", "-0.6410", "1", "0.0"}, {"C235", "C224", "C505", "C507", "0.8225", "2", "180.0"}, {"C235", "C224", "C505", "C507", "-0.0085", "3", "0.0"}, {"C235", "C224", "C505", "C508", "-0.6410", "1", "0.0"}, {"C235", "C224", "C505", "C508", "0.8225", "2", "180.0"}, {"C235", "C224", "C505", "C508", "-0.0085", "3", "0.0"}, {"C235", "C224", "C505", "C510", "-0.8540", "1", "0.0"}, {"C235", "C224", "C505", "C510", "0.7580", "2", "180.0"}, {"C235", "C224", "C505", "C510", "-0.2510", "3", "0.0"}, {"C235", "C224", "C505", "H140", "-0.0380", "3", "0.0"}, {"C235", "C224", "N238", "C235", "-1.2555", "1", "0.0"}, {"C235", "C224", "N238", "C235", "0.1050", "2", "180.0"}, {"C235", "C224", "N238", "C235", "-0.1000", "3", "0.0"}, {"C235", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C235", "N238", "C223", "C267", "-1.2555", "1", "0.0"}, {"C235", "N238", "C223", "C267", "0.1050", "2", "180.0"}, {"C235", "N238", "C223", "C267", "-0.1000", "3", "0.0"}, {"C235", "N238", "C224", "C267", "-1.2555", "1", "0.0"}, {"C235", "N238", "C224", "C267", "0.1050", "2", "180.0"}, {"C235", "N238", "C224", "C267", "-0.1000", "3", "0.0"}, {"C235", "C246", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C246", "N239", "C235", "-1.2555", "1", "0.0"}, {"C235", "C246", "N239", "C235", "0.1050", "2", "180.0"}, {"C235", "C246", "N239", "C235", "-0.1000", "3", "0.0"}, {"C235", "C246", "N239", "C245", "-0.8685", "1", "0.0"}, {"C235", "C246", "N239", "C245", "0.6255", "2", "180.0"}, {"C235", "C246", "N239", "C245", "-1.7505", "3", "0.0"}, {"C235", "C292", "N287", "H290", "0.1735", "3", "0.0"}, {"C235", "C293", "C135", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C136", "C274", "-0.8820", "1", "0.0"}, {"C235", "C293", "C136", "C274", "0.3500", "2", "180.0"}, {"C235", "C293", "C136", "C274", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "C308", "-0.9855", "1", "0.0"}, {"C235", "C293", "C136", "C308", "0.3850", "2", "180.0"}, {"C235", "C293", "C136", "C308", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "C500", "-0.2530", "1", "0.0"}, {"C235", "C293", "C136", "C500", "0.4875", "2", "180.0"}, {"C235", "C293", "C136", "C500", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C137", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C149", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C157", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C157", "O154", "-2.8965", "1", "0.0"}, {"C235", "C293", "C157", "O154", "0.2025", "2", "180.0"}, {"C235", "C293", "C157", "O154", "0.0000", "3", "0.0"}, {"C235", "C293", "C158", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C158", "O154", "-2.8965", "1", "0.0"}, {"C235", "C293", "C158", "O154", "0.2025", "2", "180.0"}, {"C235", "C293", "C158", "O154", "0.0000", "3", "0.0"}, {"C235", "C293", "C206", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C206", "S200", "-1.6615", "1", "0.0"}, {"C235", "C293", "C206", "S200", "0.2645", "2", "180.0"}, {"C235", "C293", "C206", "S200", "0.0000", "3", "0.0"}, {"C235", "C293", "C214", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C214", "S203", "-1.6615", "1", "0.0"}, {"C235", "C293", "C214", "S203", "0.2645", "2", "180.0"}, {"C235", "C293", "C214", "S203", "0.0000", "3", "0.0"}, {"C235", "C293", "C274", "C271", "0.7715", "1", "0.0"}, {"C235", "C293", "C274", "C271", "0.3480", "2", "180.0"}, {"C235", "C293", "C274", "C271", "0.0000", "3", "0.0"}, {"C235", "C293", "C274", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "C505", "C507", "-0.6410", "1", "0.0"}, {"C235", "C293", "C505", "C507", "0.8225", "2", "180.0"}, {"C235", "C293", "C505", "C507", "-0.0085", "3", "0.0"}, {"C235", "C293", "C505", "C508", "-0.6410", "1", "0.0"}, {"C235", "C293", "C505", "C508", "0.8225", "2", "180.0"}, {"C235", "C293", "C505", "C508", "-0.0085", "3", "0.0"}, {"C235", "C293", "C505", "C510", "-0.8540", "1", "0.0"}, {"C235", "C293", "C505", "C510", "0.7580", "2", "180.0"}, {"C235", "C293", "C505", "C510", "-0.2510", "3", "0.0"}, {"C235", "C293", "C505", "H140", "-0.0380", "3", "0.0"}, {"C235", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C235", "C295", "C136", "H140", "-0.0380", "3", "0.0"}, {"C235", "C295", "N309", "C296", "0.71895", "1", "0.0"}, {"C235", "C295", "N309", "C296", "-0.0619", "2", "180.0"}, {"C235", "C295", "N309", "C296", "0.13195", "3", "0.0"}, {"C235", "C295", "N309", "H310", "0.1735", "3", "0.0"}, {"C235", "N238", "C223", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C224", "C274", "-0.3410", "1", "0.0"}, {"C235", "N238", "C224", "C274", "0.0650", "2", "180.0"}, {"C235", "N238", "C224", "C274", "0.1690", "3", "0.0"}, {"C235", "N238", "C224", "C505", "-0.3410", "1", "0.0"}, {"C235", "N238", "C224", "C505", "0.0650", "2", "180.0"}, {"C235", "N238", "C224", "C505", "0.1690", "3", "0.0"}, {"C235", "N238", "C224", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C242", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C283", "C271", "-1.2555", "1", "0.0"}, {"C235", "N238", "C283", "C271", "0.1050", "2", "180.0"}, {"C235", "N238", "C283", "C271", "-0.1000", "3", "0.0"}, {"C235", "N238", "C283", "C274", "-0.3410", "1", "0.0"}, {"C235", "N238", "C283", "C274", "0.0650", "2", "180.0"}, {"C235", "N238", "C283", "C274", "0.1690", "3", "0.0"}, {"C235", "N238", "C283", "C505", "-0.3410", "1", "0.0"}, {"C235", "N238", "C283", "C505", "0.0650", "2", "180.0"}, {"C235", "N238", "C283", "C505", "0.1690", "3", "0.0"}, {"C235", "N238", "C283", "H140", "0.0000", "1", "0.0"}, {"C235", "N238", "C284", "C271", "-1.2555", "1", "0.0"}, {"C235", "N238", "C284", "C271", "0.1050", "2", "180.0"}, {"C235", "N238", "C284", "C271", "-0.1000", "3", "0.0"}, {"C235", "N238", "C284", "H140", "0.0000", "1", "0.0"}, {"C235", "N239", "C245", "H140", "0.0000", "1", "0.0"}, {"C235", "N239", "C246", "H140", "0.0000", "1", "0.0"}, {"C235", "N239", "C285", "C271", "-1.2555", "1", "0.0"}, {"C235", "N239", "C285", "C271", "0.1050", "2", "180.0"}, {"C235", "N239", "C285", "C271", "-0.1000", "3", "0.0"}, {"C235", "N239", "C285", "H140", "0.0000", "1", "0.0"}, {"C242", "N238", "C235", "C246", "1.1500", "1", "0.0"}, {"C242", "N238", "C235", "C246", "3.0445", "2", "180.0"}, {"C242", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C245", "C136", "C136", "C246", "0.6500", "1", "0.0"}, {"C245", "C136", "C136", "C246", "-0.1000", "2", "180.0"}, {"C245", "C136", "C136", "C246", "0.1000", "3", "0.0"}, {"C245", "C136", "C136", "C285", "0.6500", "1", "0.0"}, {"C245", "C136", "C136", "C285", "-0.1000", "2", "180.0"}, {"C245", "C136", "C136", "C285", "0.1000", "3", "0.0"}, {"C245", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C245", "N239", "C235", "C246", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C246", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "C292", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C292", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "C293", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C293", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "C295", "1.1500", "1", "0.0"}, {"C245", "N239", "C235", "C295", "3.0445", "2", "180.0"}, {"C245", "N239", "C235", "O236", "3.0445", "2", "180.0"}, {"C245", "N239", "C246", "H140", "0.0000", "1", "0.0"}, {"C245", "N239", "C285", "C271", "-0.8685", "1", "0.0"}, {"C245", "N239", "C285", "C271", "0.6255", "2", "180.0"}, {"C245", "N239", "C285", "C271", "-1.7505", "3", "0.0"}, {"C245", "N239", "C285", "H140", "0.0000", "1", "0.0"}, {"C246", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C246", "C235", "N238", "C283", "1.1500", "1", "0.0"}, {"C246", "C235", "N238", "C283", "3.0445", "2", "180.0"}, {"C246", "C235", "N238", "C284", "1.1500", "1", "0.0"}, {"C246", "C235", "N238", "C284", "3.0445", "2", "180.0"}, {"C246", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C246", "C235", "N239", "C246", "1.1500", "1", "0.0"}, {"C246", "C235", "N239", "C246", "3.0445", "2", "180.0"}, {"C246", "C235", "N239", "C285", "1.1500", "1", "0.0"}, {"C246", "C235", "N239", "C285", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "C292", "1.1500", "1", "0.0"}, {"C246", "N239", "C235", "C292", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "C293", "1.1500", "1", "0.0"}, {"C246", "N239", "C235", "C293", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "C295", "1.1500", "1", "0.0"}, {"C246", "N239", "C235", "C295", "3.0445", "2", "180.0"}, {"C246", "N239", "C235", "O236", "3.0445", "2", "180.0"}, {"C246", "N239", "C245", "H140", "0.0000", "1", "0.0"}, {"C267", "C136", "C224", "H140", "-0.0380", "3", "0.0"}, {"C267", "C136", "C224", "N238", "-2.7505", "1", "0.0"}, {"C267", "C136", "C224", "N238", "0.7635", "2", "180.0"}, {"C267", "C136", "C224", "N238", "0.0000", "3", "0.0"}, {"C267", "C224", "C135", "H140", "0.0370", "3", "0.0"}, {"C267", "C223", "N238", "H241", "0.0000", "1", "0.0"}, {"C267", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C271", "C274", "C136", "C283", "-0.4425", "1", "0.0"}, {"C271", "C274", "C136", "C283", "0.5125", "2", "180.0"}, {"C271", "C274", "C136", "C283", "-0.6465", "3", "0.0"}, {"C271", "C274", "C136", "C293", "-0.4425", "1", "0.0"}, {"C271", "C274", "C136", "C293", "0.5125", "2", "180.0"}, {"C271", "C274", "C136", "C293", "-0.6465", "3", "0.0"}, {"C271", "C274", "C136", "H140", "-0.1125", "3", "0.0"}, {"C271", "C274", "C224", "H140", "0.1500", "3", "0.0"}, {"C271", "C274", "C224", "N238", "-3.9450", "1", "0.0"}, {"C271", "C274", "C224", "N238", "0.3310", "2", "180.0"}, {"C271", "C274", "C224", "N238", "0.4985", "3", "0.0"}, {"C271", "C274", "C283", "C271", "0.7715", "1", "0.0"}, {"C271", "C274", "C283", "C271", "0.3480", "2", "180.0"}, {"C271", "C274", "C283", "C271", "0.0000", "3", "0.0"}, {"C271", "C274", "C283", "H140", "0.1500", "3", "0.0"}, {"C271", "C274", "C283", "N238", "-3.9450", "1", "0.0"}, {"C271", "C274", "C283", "N238", "0.3310", "2", "180.0"}, {"C271", "C274", "C283", "N238", "0.4985", "3", "0.0"}, {"C271", "C274", "C293", "H140", "0.1500", "3", "0.0"}, {"C271", "C274", "C293", "N287", "-3.9450", "1", "0.0"}, {"C271", "C274", "C293", "N287", "0.3310", "2", "180.0"}, {"C271", "C274", "C293", "N287", "0.4985", "3", "0.0"}, {"C271", "C283", "C135", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C136", "C274", "-0.8820", "1", "0.0"}, {"C271", "C283", "C136", "C274", "0.3500", "2", "180.0"}, {"C271", "C283", "C136", "C274", "0.0000", "3", "0.0"}, {"C271", "C283", "C136", "C308", "-0.9855", "1", "0.0"}, {"C271", "C283", "C136", "C308", "0.3850", "2", "180.0"}, {"C271", "C283", "C136", "C308", "0.0000", "3", "0.0"}, {"C271", "C283", "C136", "C500", "-0.2530", "1", "0.0"}, {"C271", "C283", "C136", "C500", "0.4875", "2", "180.0"}, {"C271", "C283", "C136", "C500", "0.0000", "3", "0.0"}, {"C271", "C283", "C136", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C137", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C149", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C157", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C157", "O154", "-2.8965", "1", "0.0"}, {"C271", "C283", "C157", "O154", "0.2025", "2", "180.0"}, {"C271", "C283", "C157", "O154", "0.0000", "3", "0.0"}, {"C271", "C283", "C158", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C158", "O154", "-2.8965", "1", "0.0"}, {"C271", "C283", "C158", "O154", "0.2025", "2", "180.0"}, {"C271", "C283", "C158", "O154", "0.0000", "3", "0.0"}, {"C271", "C283", "C206", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C206", "S200", "-1.6615", "1", "0.0"}, {"C271", "C283", "C206", "S200", "0.2645", "2", "180.0"}, {"C271", "C283", "C206", "S200", "0.0000", "3", "0.0"}, {"C271", "C283", "C214", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C214", "S203", "-1.6615", "1", "0.0"}, {"C271", "C283", "C214", "S203", "0.2645", "2", "180.0"}, {"C271", "C283", "C214", "S203", "0.0000", "3", "0.0"}, {"C271", "C283", "C274", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "C505", "C507", "-0.6410", "1", "0.0"}, {"C271", "C283", "C505", "C507", "0.8225", "2", "180.0"}, {"C271", "C283", "C505", "C507", "-0.0085", "3", "0.0"}, {"C271", "C283", "C505", "C508", "-0.6410", "1", "0.0"}, {"C271", "C283", "C505", "C508", "0.8225", "2", "180.0"}, {"C271", "C283", "C505", "C508", "-0.0085", "3", "0.0"}, {"C271", "C283", "C505", "C510", "-0.8540", "1", "0.0"}, {"C271", "C283", "C505", "C510", "0.7580", "2", "180.0"}, {"C271", "C283", "C505", "C510", "-0.2510", "3", "0.0"}, {"C271", "C283", "C505", "H140", "-0.0380", "3", "0.0"}, {"C271", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C271", "C284", "N238", "H241", "0.0000", "1", "0.0"}, {"C271", "C285", "C136", "H140", "-0.0380", "3", "0.0"}, {"C274", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C274", "C136", "C224", "N238", "0.9935", "1", "0.0"}, {"C274", "C136", "C224", "N238", "0.2285", "2", "180.0"}, {"C274", "C136", "C224", "N238", "0.4100", "3", "0.0"}, {"C274", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C274", "C136", "C283", "N238", "0.9935", "1", "0.0"}, {"C274", "C136", "C283", "N238", "0.2285", "2", "180.0"}, {"C274", "C136", "C283", "N238", "0.4100", "3", "0.0"}, {"C274", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C274", "C136", "C293", "N287", "0.9935", "1", "0.0"}, {"C274", "C136", "C293", "N287", "0.2285", "2", "180.0"}, {"C274", "C136", "C293", "N287", "0.4100", "3", "0.0"}, {"C274", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C274", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C274", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C274", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C274", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C274", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C274", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C274", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C274", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C274", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C274", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C274", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C274", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C274", "C293", "C235", "N239", "0.8895", "1", "0.0"}, {"C274", "C293", "C235", "N239", "0.2095", "2", "180.0"}, {"C274", "C293", "C235", "N239", "-0.0550", "3", "0.0"}, {"C274", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C274", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C283", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C210", "S202", "-0.7825", "1", "0.0"}, {"C283", "C136", "C210", "S202", "-0.0045", "2", "180.0"}, {"C283", "C136", "C210", "S202", "-0.2250", "3", "0.0"}, {"C283", "C136", "C235", "N237", "0.7470", "1", "0.0"}, {"C283", "C136", "C235", "N237", "-0.2555", "2", "180.0"}, {"C283", "C136", "C235", "N237", "0.0625", "3", "0.0"}, {"C283", "C136", "C235", "O236", "0.8280", "1", "0.0"}, {"C283", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C283", "C136", "C235", "O236", "0.2195", "3", "0.0"}, {"C283", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C283", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C283", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C283", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C283", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C308", "C307", "0.6500", "1", "0.0"}, {"C283", "C136", "C308", "C307", "-0.1000", "2", "180.0"}, {"C283", "C136", "C308", "C307", "0.1000", "3", "0.0"}, {"C283", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"C283", "C136", "C500", "C501", "0.0000", "1", "0.0"}, {"C283", "C136", "C500", "C514", "-0.3570", "1", "0.0"}, {"C283", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C283", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C283", "C157", "O154", "H155", "-0.1780", "1", "0.0"}, {"C283", "C157", "O154", "H155", "-0.0870", "2", "180.0"}, {"C283", "C157", "O154", "H155", "0.2460", "3", "0.0"}, {"C283", "C158", "C135", "H140", "0.1500", "3", "0.0"}, {"C283", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C283", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C283", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C283", "C206", "S200", "H204", "-0.3795", "1", "0.0"}, {"C283", "C206", "S200", "H204", "-0.1410", "2", "180.0"}, {"C283", "C206", "S200", "H204", "0.3400", "3", "0.0"}, {"C283", "C214", "S203", "S203", "0.9705", "1", "0.0"}, {"C283", "C214", "S203", "S203", "-0.4180", "2", "180.0"}, {"C283", "C214", "S203", "S203", "0.4675", "3", "0.0"}, {"C283", "C274", "C271", "O272", "1.2500", "1", "0.0"}, {"C283", "C274", "C271", "O272", "0.5000", "2", "180.0"}, {"C283", "C274", "C271", "O272", "0.6750", "3", "0.0"}, {"C283", "C505", "C507", "C508", "0.0000", "1", "0.0"}, {"C283", "C505", "C507", "N511", "-0.2800", "1", "0.0"}, {"C283", "C505", "C507", "N511", "-0.3700", "2", "180.0"}, {"C283", "C505", "C507", "N511", "0.1745", "3", "0.0"}, {"C283", "C505", "C508", "C507", "0.0000", "1", "0.0"}, {"C283", "C505", "C508", "N503", "-0.2800", "1", "0.0"}, {"C283", "C505", "C508", "N503", "-0.3700", "2", "180.0"}, {"C283", "C505", "C508", "N503", "0.1745", "3", "0.0"}, {"C283", "C505", "C510", "C510", "0.0000", "1", "0.0"}, {"C283", "C505", "C510", "N512", "-1.9950", "1", "0.0"}, {"C283", "C505", "C510", "N512", "0.8400", "2", "180.0"}, {"C283", "C505", "C510", "N512", "0.1450", "3", "0.0"}, {"C283", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C284", "N238", "C235", "O236", "3.0445", "2", "180.0"}, {"C285", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C285", "N239", "C235", "O236", "3.0445", "2", "180.0"}, {"C285", "N239", "C245", "H140", "0.0000", "1", "0.0"}, {"C292", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C292", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C293", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C210", "S202", "-0.7825", "1", "0.0"}, {"C293", "C136", "C210", "S202", "-0.0045", "2", "180.0"}, {"C293", "C136", "C210", "S202", "-0.2250", "3", "0.0"}, {"C293", "C136", "C235", "N237", "0.7470", "1", "0.0"}, {"C293", "C136", "C235", "N237", "-0.2555", "2", "180.0"}, {"C293", "C136", "C235", "N237", "0.0625", "3", "0.0"}, {"C293", "C136", "C235", "O236", "0.8280", "1", "0.0"}, {"C293", "C136", "C235", "O236", "0.6520", "2", "180.0"}, {"C293", "C136", "C235", "O236", "0.2195", "3", "0.0"}, {"C293", "C136", "C267", "O268", "0.5000", "1", "0.0"}, {"C293", "C136", "C267", "O268", "0.2730", "2", "180.0"}, {"C293", "C136", "C267", "O268", "0.2250", "3", "0.0"}, {"C293", "C136", "C267", "O269", "0.2730", "2", "180.0"}, {"C293", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C308", "C307", "0.6500", "1", "0.0"}, {"C293", "C136", "C308", "C307", "-0.1000", "2", "180.0"}, {"C293", "C136", "C308", "C307", "0.1000", "3", "0.0"}, {"C293", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"C293", "C136", "C500", "C501", "0.0000", "1", "0.0"}, {"C293", "C136", "C500", "C514", "-0.3570", "1", "0.0"}, {"C293", "C137", "C135", "H140", "0.1500", "3", "0.0"}, {"C293", "C137", "C136", "H140", "0.1500", "3", "0.0"}, {"C293", "C157", "O154", "H155", "-0.1780", "1", "0.0"}, {"C293", "C157", "O154", "H155", "-0.0870", "2", "180.0"}, {"C293", "C157", "O154", "H155", "0.2460", "3", "0.0"}, {"C293", "C158", "C135", "H140", "0.1500", "3", "0.0"}, {"C293", "C158", "O154", "H155", "-0.1780", "1", "0.0"}, {"C293", "C158", "O154", "H155", "-0.0870", "2", "180.0"}, {"C293", "C158", "O154", "H155", "0.2460", "3", "0.0"}, {"C293", "C206", "S200", "H204", "-0.3795", "1", "0.0"}, {"C293", "C206", "S200", "H204", "-0.1410", "2", "180.0"}, {"C293", "C206", "S200", "H204", "0.3400", "3", "0.0"}, {"C293", "C214", "S203", "S203", "0.9705", "1", "0.0"}, {"C293", "C214", "S203", "S203", "-0.4180", "2", "180.0"}, {"C293", "C214", "S203", "S203", "0.4675", "3", "0.0"}, {"C293", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C293", "C274", "C271", "O272", "1.2500", "1", "0.0"}, {"C293", "C274", "C271", "O272", "0.5000", "2", "180.0"}, {"C293", "C274", "C271", "O272", "0.6750", "3", "0.0"}, {"C293", "C505", "C507", "C508", "0.0000", "1", "0.0"}, {"C293", "C505", "C507", "N511", "-0.2800", "1", "0.0"}, {"C293", "C505", "C507", "N511", "-0.3700", "2", "180.0"}, {"C293", "C505", "C507", "N511", "0.1745", "3", "0.0"}, {"C293", "C505", "C508", "C507", "0.0000", "1", "0.0"}, {"C293", "C505", "C508", "N503", "-0.2800", "1", "0.0"}, {"C293", "C505", "C508", "N503", "-0.3700", "2", "180.0"}, {"C293", "C505", "C508", "N503", "0.1745", "3", "0.0"}, {"C293", "C505", "C510", "C510", "0.0000", "1", "0.0"}, {"C293", "C505", "C510", "N512", "-1.9950", "1", "0.0"}, {"C293", "C505", "C510", "N512", "0.8400", "2", "180.0"}, {"C293", "C505", "C510", "N512", "0.1450", "3", "0.0"}, {"C295", "C136", "C136", "C296", "0.6500", "1", "0.0"}, {"C295", "C136", "C136", "C296", "-0.1000", "2", "180.0"}, {"C295", "C136", "C136", "C296", "0.1000", "3", "0.0"}, {"C295", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C295", "C235", "N238", "H241", "2.4500", "2", "180.0"}, {"C295", "N309", "C296", "H140", "0.15085", "3", "0.0"}, {"C296", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"C296", "N309", "C295", "H140", "0.15085", "3", "0.0"}, {"C302", "N303", "C307", "C308", "0.9145", "1", "0.0"}, {"C302", "N303", "C307", "C308", "0.1215", "2", "180.0"}, {"C302", "N303", "C307", "C308", "-0.2490", "3", "0.0"}, {"C302", "N303", "C307", "H140", "0.0885", "3", "0.0"}, {"C307", "C308", "C136", "H140", "0.1500", "3", "0.0"}, {"C307", "N303", "C302", "N300", "3.9680", "2", "180.0"}, {"C308", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"C308", "C136", "C224", "N238", "0.0515", "1", "0.0"}, {"C308", "C136", "C224", "N238", "0.3265", "2", "180.0"}, {"C308", "C136", "C224", "N238", "0.2815", "3", "0.0"}, {"C308", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"C308", "C136", "C283", "N238", "0.0515", "1", "0.0"}, {"C308", "C136", "C283", "N238", "0.3265", "2", "180.0"}, {"C308", "C136", "C283", "N238", "0.2815", "3", "0.0"}, {"C308", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"C308", "C136", "C293", "N287", "0.0515", "1", "0.0"}, {"C308", "C136", "C293", "N287", "0.3265", "2", "180.0"}, {"C308", "C136", "C293", "N287", "0.2815", "3", "0.0"}, {"C308", "C307", "N303", "H304", "-0.0950", "1", "0.0"}, {"C308", "C307", "N303", "H304", "-0.2085", "2", "180.0"}, {"C308", "C307", "N303", "H304", "0.2090", "3", "0.0"}, {"C500", "C136", "C224", "H140", "0.2310", "3", "0.0"}, {"C500", "C136", "C224", "N238", "-0.2940", "1", "0.0"}, {"C500", "C136", "C224", "N238", "0.5100", "2", "180.0"}, {"C500", "C136", "C224", "N238", "0.3325", "3", "0.0"}, {"C500", "C136", "C283", "H140", "0.2310", "3", "0.0"}, {"C500", "C136", "C283", "N238", "-0.2940", "1", "0.0"}, {"C500", "C136", "C283", "N238", "0.5100", "2", "180.0"}, {"C500", "C136", "C283", "N238", "0.3325", "3", "0.0"}, {"C500", "C136", "C293", "H140", "0.2310", "3", "0.0"}, {"C500", "C136", "C293", "N287", "-0.2940", "1", "0.0"}, {"C500", "C136", "C293", "N287", "0.5100", "2", "180.0"}, {"C500", "C136", "C293", "N287", "0.3325", "3", "0.0"}, {"C500", "C501", "C145", "H146", "3.5000", "2", "180.0"}, {"C501", "C500", "C136", "H140", "0.0000", "1", "0.0"}, {"C501", "C502", "C145", "H146", "3.6250", "2", "180.0"}, {"C502", "C501", "C145", "H146", "3.5000", "2", "180.0"}, {"C502", "C501", "C500", "C514", "1.6750", "2", "180.0"}, {"C502", "N503", "C514", "H146", "1.5000", "2", "180.0"}, {"C505", "C224", "C235", "N238", "0.8895", "1", "0.0"}, {"C505", "C224", "C235", "N238", "0.2095", "2", "180.0"}, {"C505", "C224", "C235", "N238", "-0.0550", "3", "0.0"}, {"C505", "C224", "C235", "N239", "0.8895", "1", "0.0"}, {"C505", "C224", "C235", "N239", "0.2095", "2", "180.0"}, {"C505", "C224", "C235", "N239", "-0.0550", "3", "0.0"}, {"C505", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"C505", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"C505", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"C505", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"C505", "C293", "C235", "N238", "0.8895", "1", "0.0"}, {"C505", "C293", "C235", "N238", "0.2095", "2", "180.0"}, {"C505", "C293", "C235", "N238", "-0.0550", "3", "0.0"}, {"C505", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"C505", "C293", "N287", "H290", "0.1735", "3", "0.0"}, {"C505", "C508", "C507", "H146", "5.3750", "2", "180.0"}, {"C505", "C508", "C507", "N511", "5.3750", "2", "180.0"}, {"C505", "C508", "N503", "C506", "1.4000", "2", "180.0"}, {"C505", "C508", "N503", "H504", "1.4000", "2", "180.0"}, {"C505", "C510", "N512", "C509", "1.4000", "2", "180.0"}, {"C505", "C510", "N512", "H513", "1.4000", "2", "180.0"}, {"C506", "N503", "C508", "C507", "1.4000", "2", "180.0"}, {"C506", "N503", "C508", "H146", "2.5000", "2", "180.0"}, {"C506", "N511", "C507", "C508", "2.4000", "2", "180.0"}, {"C506", "N511", "C507", "H146", "2.4000", "2", "180.0"}, {"C507", "C505", "C224", "H140", "0.2310", "3", "0.0"}, {"C507", "C505", "C224", "N238", "-0.2710", "1", "0.0"}, {"C507", "C505", "C224", "N238", "0.2175", "2", "180.0"}, {"C507", "C505", "C224", "N238", "0.0000", "3", "0.0"}, {"C507", "C505", "C283", "H140", "0.2310", "3", "0.0"}, {"C507", "C505", "C283", "N238", "-0.2710", "1", "0.0"}, {"C507", "C505", "C283", "N238", "0.2175", "2", "180.0"}, {"C507", "C505", "C283", "N238", "0.0000", "3", "0.0"}, {"C507", "C505", "C293", "H140", "0.2310", "3", "0.0"}, {"C507", "C505", "C293", "N287", "-0.2710", "1", "0.0"}, {"C507", "C505", "C293", "N287", "0.2175", "2", "180.0"}, {"C507", "C505", "C293", "N287", "0.0000", "3", "0.0"}, {"C507", "C508", "C505", "H140", "0.0000", "1", "0.0"}, {"C507", "C508", "N503", "H504", "1.4000", "2", "180.0"}, {"C507", "N511", "C506", "H146", "5.0000", "2", "180.0"}, {"C507", "N511", "C506", "N503", "5.0000", "2", "180.0"}, {"C508", "C505", "C224", "H140", "0.2310", "3", "0.0"}, {"C508", "C505", "C224", "N238", "-0.2710", "1", "0.0"}, {"C508", "C505", "C224", "N238", "0.2175", "2", "180.0"}, {"C508", "C505", "C224", "N238", "0.0000", "3", "0.0"}, {"C508", "C505", "C283", "H140", "0.2310", "3", "0.0"}, {"C508", "C505", "C283", "N238", "-0.2710", "1", "0.0"}, {"C508", "C505", "C283", "N238", "0.2175", "2", "180.0"}, {"C508", "C505", "C283", "N238", "0.0000", "3", "0.0"}, {"C508", "C505", "C293", "H140", "0.2310", "3", "0.0"}, {"C508", "C505", "C293", "N287", "-0.2710", "1", "0.0"}, {"C508", "C505", "C293", "N287", "0.2175", "2", "180.0"}, {"C508", "C505", "C293", "N287", "0.0000", "3", "0.0"}, {"C508", "C507", "C505", "H140", "0.0000", "1", "0.0"}, {"C508", "N503", "C506", "H146", "2.3250", "2", "180.0"}, {"C508", "N503", "C506", "N511", "2.3250", "2", "180.0"}, {"C509", "N512", "C510", "C510", "1.4000", "2", "180.0"}, {"C509", "N512", "C510", "H146", "2.5000", "2", "180.0"}, {"C510", "C505", "C224", "H140", "0.2310", "3", "0.0"}, {"C510", "C505", "C224", "N238", "-1.5190", "1", "0.0"}, {"C510", "C505", "C224", "N238", "0.2095", "2", "180.0"}, {"C510", "C505", "C224", "N238", "0.0000", "3", "0.0"}, {"C510", "C505", "C283", "H140", "0.2310", "3", "0.0"}, {"C510", "C505", "C283", "N238", "-1.5190", "1", "0.0"}, {"C510", "C505", "C283", "N238", "0.2095", "2", "180.0"}, {"C510", "C505", "C283", "N238", "0.0000", "3", "0.0"}, {"C510", "C505", "C293", "H140", "0.2310", "3", "0.0"}, {"C510", "C505", "C293", "N287", "-1.5190", "1", "0.0"}, {"C510", "C505", "C293", "N287", "0.2095", "2", "180.0"}, {"C510", "C505", "C293", "N287", "0.0000", "3", "0.0"}, {"C510", "C510", "C505", "H140", "0.0000", "1", "0.0"}, {"C510", "C510", "N512", "H513", "1.4000", "2", "180.0"}, {"C510", "N512", "C509", "H146", "2.3250", "2", "180.0"}, {"C510", "N512", "C509", "N512", "2.3250", "2", "180.0"}, {"C514", "C500", "C136", "H140", "-0.2400", "3", "0.0"}, {"H140", "C135", "C136", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C137", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C158", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C135", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C135", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C135", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C135", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C135", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C135", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C135", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C136", "C136", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C137", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C210", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C210", "S202", "0.2260", "3", "0.0"}, {"H140", "C136", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C136", "C235", "N237", "0.0000", "1", "0.0"}, {"H140", "C136", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C136", "C245", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C245", "N239", "0.2320", "3", "0.0"}, {"H140", "C136", "C246", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C246", "N239", "0.2320", "3", "0.0"}, {"H140", "C136", "C267", "O268", "0.0000", "1", "0.0"}, {"H140", "C136", "C267", "O269", "0.0000", "1", "0.0"}, {"H140", "C136", "C274", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C136", "C285", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C285", "N239", "0.2320", "3", "0.0"}, {"H140", "C136", "C292", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C292", "N287", "0.1920", "3", "0.0"}, {"H140", "C136", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C136", "C295", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C295", "N309", "0.1920", "3", "0.0"}, {"H140", "C136", "C296", "H140", "0.1500", "3", "0.0"}, {"H140", "C136", "C296", "N309", "0.1920", "3", "0.0"}, {"H140", "C136", "C308", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C137", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C137", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C137", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C149", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C149", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C149", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C149", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C149", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C149", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C157", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C157", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C157", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C157", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C157", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C157", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C157", "O154", "H155", "0.1762", "3", "0.0"}, {"H140", "C158", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C158", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C158", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C158", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C158", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C158", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C158", "O154", "H155", "0.1762", "3", "0.0"}, {"H140", "C206", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C206", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C206", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C206", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C206", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C206", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C206", "S200", "H204", "0.2400", "3", "0.0"}, {"H140", "C214", "C224", "H140", "0.1500", "3", "0.0"}, {"H140", "C214", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C214", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C214", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C214", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C214", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C214", "S203", "S203", "0.2790", "3", "0.0"}, {"H140", "C223", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C223", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C223", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C223", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C224", "C157", "O154", "0.2340", "3", "0.0"}, {"H140", "C224", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C224", "C206", "S200", "0.2260", "3", "0.0"}, {"H140", "C224", "C214", "S203", "0.2260", "3", "0.0"}, {"H140", "C224", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C224", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C223", "C267", "O268", "0.0000", "1", "0.0"}, {"H140", "C223", "C267", "O269", "0.0000", "1", "0.0"}, {"H140", "C224", "C267", "O268", "0.0000", "1", "0.0"}, {"H140", "C224", "C267", "O269", "0.0000", "1", "0.0"}, {"H140", "C224", "C274", "H140", "0.1500", "3", "0.0"}, {"H140", "C224", "C505", "H140", "0.1500", "3", "0.0"}, {"H140", "C224", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C242", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C246", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C246", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C246", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C274", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C274", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C274", "C283", "H140", "0.1500", "3", "0.0"}, {"H140", "C274", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C274", "C293", "H140", "0.1500", "3", "0.0"}, {"H140", "C274", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C283", "C157", "O154", "0.2340", "3", "0.0"}, {"H140", "C283", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C283", "C206", "S200", "0.2260", "3", "0.0"}, {"H140", "C283", "C214", "S203", "0.2260", "3", "0.0"}, {"H140", "C283", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C283", "C505", "H140", "0.1500", "3", "0.0"}, {"H140", "C283", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C284", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C284", "N238", "H241", "0.0000", "1", "0.0"}, {"H140", "C285", "C271", "O272", "0.0000", "1", "0.0"}, {"H140", "C292", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C292", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C292", "N287", "H290", "0.1305", "3", "0.0"}, {"H140", "C293", "C157", "O154", "0.2340", "3", "0.0"}, {"H140", "C293", "C158", "O154", "0.2340", "3", "0.0"}, {"H140", "C293", "C206", "S200", "0.2260", "3", "0.0"}, {"H140", "C293", "C214", "S203", "0.2260", "3", "0.0"}, {"H140", "C293", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C293", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C293", "C505", "H140", "0.1500", "3", "0.0"}, {"H140", "C293", "N287", "H290", "0.1305", "3", "0.0"}, {"H140", "C295", "C235", "N238", "0.0000", "1", "0.0"}, {"H140", "C295", "C235", "N239", "0.0000", "1", "0.0"}, {"H140", "C295", "C235", "O236", "0.0000", "1", "0.0"}, {"H140", "C295", "N309", "H310", "0.1305", "3", "0.0"}, {"H140", "C296", "N309", "H310", "0.1920", "3", "0.0"}, {"H140", "C307", "C308", "H140", "0.1500", "3", "0.0"}, {"H140", "C307", "N303", "H304", "0.0000", "1", "0.0"}, {"H140", "C308", "C307", "N303", "-0.2910", "3", "0.0"}, {"H140", "C505", "C224", "N238", "0.2320", "3", "0.0"}, {"H140", "C505", "C283", "N238", "0.2320", "3", "0.0"}, {"H140", "C505", "C293", "N287", "0.2320", "3", "0.0"}, {"H140", "C505", "C507", "N511", "0.2095", "3", "0.0"}, {"H140", "C505", "C508", "N503", "0.2095", "3", "0.0"}, {"H140", "C505", "C510", "N512", "0.2095", "3", "0.0"}, {"H146", "C508", "C507", "N511", "5.3750", "2", "180.0"}, {"H146", "C508", "N503", "H504", "2.5000", "2", "180.0"}, {"H146", "C510", "N512", "H513", "2.5000", "2", "180.0"}, {"H240", "N237", "C235", "O236", "2.4500", "2", "180.0"}, {"H241", "N238", "C235", "O236", "2.4500", "2", "180.0"}, {"H270", "O268", "C267", "O269", "2.7500", "2", "180.0"}, {"H301", "N300", "C302", "N300", "1.9500", "2", "180.0"}, {"H301", "N300", "C302", "N303", "1.9500", "2", "180.0"}, {"H304", "N303", "C302", "N300", "1.9500", "2", "180.0"}, {"H504", "N503", "C506", "N511", "2.3250", "2", "180.0"}, {"H513", "N512", "C509", "N512", "2.3250", "2", "180.0"}, {"N238", "C223", "C235", "N238", "0.9050", "1", "0.0"}, {"N238", "C223", "C235", "N238", "1.0775", "2", "180.0"}, {"N238", "C223", "C235", "N238", "-0.2350", "3", "0.0"}, {"N238", "C223", "C235", "N239", "0.9050", "1", "0.0"}, {"N238", "C223", "C235", "N239", "1.0775", "2", "180.0"}, {"N238", "C223", "C235", "N239", "-0.2350", "3", "0.0"}, {"N238", "C223", "C235", "O236", "0.0000", "1", "0.0"}, {"N238", "C224", "C157", "O154", "3.1290", "1", "0.0"}, {"N238", "C224", "C157", "O154", "-0.5185", "2", "180.0"}, {"N238", "C224", "C157", "O154", "0.6835", "3", "0.0"}, {"N238", "C224", "C158", "O154", "3.1290", "1", "0.0"}, {"N238", "C224", "C158", "O154", "-0.5185", "2", "180.0"}, {"N238", "C224", "C158", "O154", "0.6835", "3", "0.0"}, {"N238", "C224", "C206", "S200", "1.0275", "1", "0.0"}, {"N238", "C224", "C206", "S200", "0.2645", "2", "180.0"}, {"N238", "C224", "C206", "S200", "0.2720", "3", "0.0"}, {"N238", "C224", "C214", "S203", "1.0275", "1", "0.0"}, {"N238", "C224", "C214", "S203", "0.2645", "2", "180.0"}, {"N238", "C224", "C214", "S203", "0.2720", "3", "0.0"}, {"N238", "C224", "C235", "N238", "0.9050", "1", "0.0"}, {"N238", "C224", "C235", "N238", "1.0775", "2", "180.0"}, {"N238", "C224", "C235", "N238", "-0.2350", "3", "0.0"}, {"N238", "C224", "C235", "N239", "0.9050", "1", "0.0"}, {"N238", "C224", "C235", "N239", "1.0775", "2", "180.0"}, {"N238", "C224", "C235", "N239", "-0.2350", "3", "0.0"}, {"N238", "C224", "C235", "O236", "0.0000", "1", "0.0"}, {"N238", "C223", "C267", "O268", "2.6300", "1", "0.0"}, {"N238", "C223", "C267", "O268", "0.4100", "2", "180.0"}, {"N238", "C223", "C267", "O268", "0.0000", "3", "0.0"}, {"N238", "C224", "C267", "O268", "2.6300", "1", "0.0"}, {"N238", "C224", "C267", "O268", "0.4100", "2", "180.0"}, {"N238", "C224", "C267", "O268", "0.0000", "3", "0.0"}, {"N238", "C223", "C267", "O269", "0.0000", "1", "0.0"}, {"N238", "C224", "C267", "O269", "0.0000", "1", "0.0"}, {"N238", "C235", "C246", "N239", "-0.4700", "1", "0.0"}, {"N238", "C235", "C246", "N239", "1.3775", "2", "180.0"}, {"N238", "C235", "C246", "N239", "-1.3350", "3", "0.0"}, {"N238", "C235", "C292", "N287", "0.9050", "1", "0.0"}, {"N238", "C235", "C292", "N287", "1.0775", "2", "180.0"}, {"N238", "C235", "C292", "N287", "-0.2350", "3", "0.0"}, {"N238", "C235", "C293", "N287", "0.9050", "1", "0.0"}, {"N238", "C235", "C293", "N287", "1.0775", "2", "180.0"}, {"N238", "C235", "C293", "N287", "-0.2350", "3", "0.0"}, {"N238", "C235", "C295", "N309", "-0.4700", "1", "0.0"}, {"N238", "C235", "C295", "N309", "1.3775", "2", "180.0"}, {"N238", "C235", "C295", "N309", "-1.3350", "3", "0.0"}, {"N238", "C283", "C157", "O154", "3.1290", "1", "0.0"}, {"N238", "C283", "C157", "O154", "-0.5185", "2", "180.0"}, {"N238", "C283", "C157", "O154", "0.6835", "3", "0.0"}, {"N238", "C283", "C158", "O154", "3.1290", "1", "0.0"}, {"N238", "C283", "C158", "O154", "-0.5185", "2", "180.0"}, {"N238", "C283", "C158", "O154", "0.6835", "3", "0.0"}, {"N238", "C283", "C206", "S200", "1.0275", "1", "0.0"}, {"N238", "C283", "C206", "S200", "0.2645", "2", "180.0"}, {"N238", "C283", "C206", "S200", "0.2720", "3", "0.0"}, {"N238", "C283", "C214", "S203", "1.0275", "1", "0.0"}, {"N238", "C283", "C214", "S203", "0.2645", "2", "180.0"}, {"N238", "C283", "C214", "S203", "0.2720", "3", "0.0"}, {"N238", "C283", "C271", "O272", "0.4100", "2", "180.0"}, {"N238", "C284", "C271", "O272", "0.4100", "2", "180.0"}, {"N239", "C235", "C246", "N239", "-0.4700", "1", "0.0"}, {"N239", "C235", "C246", "N239", "1.3775", "2", "180.0"}, {"N239", "C235", "C246", "N239", "-1.3350", "3", "0.0"}, {"N239", "C235", "C293", "N287", "0.9050", "1", "0.0"}, {"N239", "C235", "C293", "N287", "1.0775", "2", "180.0"}, {"N239", "C235", "C293", "N287", "-0.2350", "3", "0.0"}, {"N239", "C235", "C295", "N309", "-0.4700", "1", "0.0"}, {"N239", "C235", "C295", "N309", "1.3775", "2", "180.0"}, {"N239", "C235", "C295", "N309", "-1.3350", "3", "0.0"}, {"N239", "C246", "C235", "O236", "0.0000", "1", "0.0"}, {"N239", "C285", "C271", "O272", "0.4100", "2", "180.0"}, {"N287", "C292", "C235", "O236", "0.0000", "1", "0.0"}, {"N287", "C293", "C157", "O154", "3.1290", "1", "0.0"}, {"N287", "C293", "C157", "O154", "-0.5185", "2", "180.0"}, {"N287", "C293", "C157", "O154", "0.6835", "3", "0.0"}, {"N287", "C293", "C158", "O154", "3.1290", "1", "0.0"}, {"N287", "C293", "C158", "O154", "-0.5185", "2", "180.0"}, {"N287", "C293", "C158", "O154", "0.6835", "3", "0.0"}, {"N287", "C293", "C206", "S200", "1.0275", "1", "0.0"}, {"N287", "C293", "C206", "S200", "0.2645", "2", "180.0"}, {"N287", "C293", "C206", "S200", "0.2720", "3", "0.0"}, {"N287", "C293", "C214", "S203", "1.0275", "1", "0.0"}, {"N287", "C293", "C214", "S203", "0.2645", "2", "180.0"}, {"N287", "C293", "C214", "S203", "0.2720", "3", "0.0"}, {"N287", "C293", "C235", "O236", "0.0000", "1", "0.0"}, {"N309", "C295", "C235", "O236", "0.0000", "1", "0.0"}, {"N503", "C508", "C507", "N511", "5.3750", "2", "180.0"}, {"C267", "C136", "C293", "N287", "-2.7505", "1", "0.0"}, {"C267", "C136", "C293", "N287", "0.7635", "2", "180.0"}, {"C267", "C136", "C293", "N287", "0.0000", "3", "0.0"}, {"C235", "C293", "C136", "C267", "0.2990", "1", "0.0"}, {"C235", "C293", "C136", "C267", "0.7790", "2", "180.0"}, {"C235", "C293", "C136", "C267", "0.1275", "3", "0.0"}, {"C267", "C136", "C283", "N238", "-2.7505", "1", "0.0"}, {"C267", "C136", "C283", "N238", "0.7635", "2", "180.0"}, {"C267", "C136", "C283", "N238", "0.0000", "3", "0.0"}, {"C267", "C136", "C283", "C271", "0.2990", "1", "0.0"}, {"C267", "C136", "C283", "C271", "0.7790", "2", "180.0"}, {"C267", "C136", "C283", "C271", "0.1275", "3", "0.0"}}; /* Impropers */ char * OPLSAAM_impropers[105][7]= {{"C136", "C500", "C501", "C514", "1.1000", "2", "180.0"}, {"C136", "C500", "C514", "C501", "1.1000", "2", "180.0"}, {"C145", "C502", "C501", "N503", "1.1000", "2", "180.0"}, {"C145", "C502", "N503", "C501", "1.1000", "2", "180.0"}, {"C149", "C145", "C145", "C145", "1.1000", "2", "180.0"}, {"C245", "N238", "C235", "C285", "2.5000", "2", "180.0"}, {"C245", "N238", "C285", "C235", "2.5000", "2", "180.0"}, {"C245", "N239", "C235", "C246", "2.5000", "2", "180.0"}, {"C245", "N239", "C235", "C285", "2.5000", "2", "180.0"}, {"C245", "N239", "C246", "C235", "2.5000", "2", "180.0"}, {"C245", "N239", "C285", "C235", "2.5000", "2", "180.0"}, {"C502", "C501", "C145", "C500", "1.1000", "2", "180.0"}, {"C502", "C501", "C500", "C145", "1.1000", "2", "180.0"}, {"C505", "C507", "C508", "N511", "1.1000", "2", "180.0"}, {"C505", "C507", "N511", "C508", "1.1000", "2", "180.0"}, {"C505", "C508", "C507", "N503", "1.1000", "2", "180.0"}, {"C505", "C508", "N503", "C507", "1.1000", "2", "180.0"}, {"C505", "C510", "C510", "N512", "1.1000", "2", "180.0"}, {"C505", "C510", "N512", "C510", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C145", "1.1000", "2", "180.0"}, {"H146", "C145", "C166", "C145", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C166", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C501", "1.1000", "2", "180.0"}, {"H146", "C145", "C501", "C145", "1.1000", "2", "180.0"}, {"H146", "C145", "C145", "C502", "1.1000", "2", "180.0"}, {"H146", "C145", "C502", "C145", "1.1000", "2", "180.0"}, {"H146", "C506", "N503", "N511", "1.1000", "2", "180.0"}, {"H146", "C506", "N511", "N503", "1.1000", "2", "180.0"}, {"H146", "C507", "C508", "N511", "1.1000", "2", "180.0"}, {"H146", "C507", "N511", "C508", "1.1000", "2", "180.0"}, {"H146", "C508", "C507", "N503", "1.1000", "2", "180.0"}, {"H146", "C508", "N503", "C507", "1.1000", "2", "180.0"}, {"H146", "C509", "N512", "N512", "1.1000", "2", "180.0"}, {"H146", "C510", "C510", "N512", "1.1000", "2", "180.0"}, {"H146", "C510", "N512", "C510", "1.1000", "2", "180.0"}, {"H146", "C514", "C500", "N503", "1.1000", "2", "180.0"}, {"H146", "C514", "N503", "C500", "1.1000", "2", "180.0"}, {"H240", "N237", "C235", "H240", "2.5000", "2", "180.0"}, {"H240", "N237", "H240", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C223", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C224", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C223", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C224", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C242", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C283", "2.5000", "2", "180.0"}, {"H241", "N238", "C235", "C284", "2.5000", "2", "180.0"}, {"H241", "N238", "C242", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C283", "C235", "2.5000", "2", "180.0"}, {"H241", "N238", "C284", "C235", "2.5000", "2", "180.0"}, {"H301", "N300", "C302", "H301", "2.5000", "2", "180.0"}, {"H301", "N300", "H301", "C302", "2.5000", "2", "180.0"}, {"H304", "N303", "C302", "C307", "2.5000", "2", "180.0"}, {"H304", "N303", "C307", "C302", "2.5000", "2", "180.0"}, {"H504", "N503", "C502", "C514", "2.5000", "2", "180.0"}, {"H504", "N503", "C506", "C508", "2.5000", "2", "180.0"}, {"H504", "N503", "C508", "C506", "2.5000", "2", "180.0"}, {"H504", "N503", "C514", "C502", "2.5000", "2", "180.0"}, {"H513", "N512", "C509", "C510", "2.5000", "2", "180.0"}, {"H513", "N512", "C510", "C509", "2.5000", "2", "180.0"}, {"N300", "C302", "N300", "N303", "10.5000", "2", "180.0"}, {"N300", "C302", "N303", "N300", "10.5000", "2", "180.0"}, {"O167", "C166", "C145", "C145", "1.1000", "2", "180.0"}, {"O236", "C235", "C135", "N239", "10.5", "2", "180.0"}, {"O236", "C235", "C135", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C136", "N237", "10.5000", "2", "180.0"}, {"O236", "C235", "C223", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C223", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C224", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C224", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C246", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C246", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C292", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C293", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C293", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "C295", "N238", "10.5000", "2", "180.0"}, {"O236", "C235", "C295", "N239", "10.5000", "2", "180.0"}, {"O236", "C235", "N237", "C136", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C135", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C223", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C224", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C246", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C292", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C293", "10.5000", "2", "180.0"}, {"O236", "C235", "N238", "C295", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C135", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C223", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C224", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C246", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C293", "10.5000", "2", "180.0"}, {"O236", "C235", "N239", "C295", "10.5000", "2", "180.0"}, {"O269", "C267", "C136", "O268", "10.5000", "2", "180.0"}, {"O269", "C267", "O268", "C136", "10.5000", "2", "180.0"}, {"O269", "C267", "C224", "O268", "10.5000", "2", "180.0"}, {"O269", "C267", "O268", "C224", "10.5000", "2", "180.0"}, {"O272", "C271", "C274", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "C283", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "C284", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "C285", "O272", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C274", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C283", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C284", "10.5000", "2", "180.0"}, {"O272", "C271", "O272", "C285", "10.5000", "2", "180.0"}, {"O268", "C267", "C136", "O269", "10.5", "2", "180.0"}, {"O268", "C267", "C223", "O269", "10.5", "2", "180.0"}, {"O268", "C267", "C224", "O269", "10.5", "2", "180.0"}}; /* Non-bonded */ char * OPLSAAM_vdw[78][7]= {{"C135", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C136", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C137", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C145", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C149", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C157", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C158", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C166", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C206", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C209", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C210", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C214", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C223", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C224", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C235", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C242", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C245", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C246", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C267", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C271", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C274", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C283", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C284", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C285", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C292", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C293", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C295", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C296", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C302", "0.00", "-0.050000", "1.2627698", "0.00", "-0.025000", "1.2627698"}, {"C307", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C308", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C500", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C501", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C502", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C505", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C506", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C507", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C508", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C509", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C510", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C514", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"H140", "0.00", "-0.030000", "1.4030776", "0.00", "-0.015000", "1.4030776"}, {"H146", "0.00", "-0.030000", "1.3581791", "0.00", "-0.015000", "1.3581791"}, {"H155", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H168", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H204", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H240", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H241", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H270", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H290", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H301", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H304", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H310", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H504", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H513", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"N237", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N238", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N239", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N287", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N300", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N303", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N309", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N503", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N511", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N512", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"O154", "0.00", "-0.170000", "1.7510408", "0.00", "-0.085000", "1.7510408"}, {"O167", "0.00", "-0.170000", "1.7229792", "0.00", "-0.085000", "1.7229792"}, {"O236", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O268", "0.00", "-0.170000", "1.6836931", "0.00", "-0.085000", "1.6836931"}, {"O269", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O272", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"S200", "0.00", "-0.425000", "2.0204317", "0.00", "-0.212500", "2.0204317"}, {"S202", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"S203", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"OT", "0.00", "-0.152100", "1.768200", "0.00", "-0.152100", "1.768200"}, {"HT", "0.00", "-0.046000", "0.224500", "0.00", "-0.046000", "0.22450"}, {"SOD", "0.00", "-0.000500", "2.9969737", "0.00", "-0.000500", "2.9969737"}, {"CLA", "0.00", "-0.710000", "2.2561487", "0.00", "-0.710000", "2.2561487"}}; Atomes-GNU-1.1.14/src/calc/force_fields/oplsaar.c000066400000000000000000012605401457665371200214270ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file oplsaar.c * @short OPLSAAR force field * @author Sébastien Le Roux */ /* * This file: 'oplsaar.c' * * Contains: * OPLSAAR force field This file contains several tables: Atoms : OPLSAAR_atoms[145][4] Bonds : OPLSAAR_bonds[242][5] Angles : OPLSAAR_angles[593][6] Dihedrals : OPLSAAR_dihedrals[2482][8] Impropers : OPLSAAR_impropers[131][[8] Non bonded : OPLSAAR_vdw[145][7] */ #include "global.h" /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= OPLSAAR info */ int OPLSAAR_objects[14] = {145, 0, 0, 242, 0, 0, 593, 0, 2482, 0 , 0, 131, 145, 0}; int OPLSAAR_dim[14] = {4, 0, 0, 5, 0, 0, 6, 0, 8, 0, 0, 8, 7, 0}; /* Atoms */ char * OPLSAAR_atoms[145][4]= {{"C", "12.01100", "C135", "CH3 all-atom C: alkanes ALL-ATOM "}, {"C", "12.01100", "C136", "CH2 all-atom C: alkanes PARAMETERS"}, {"C", "12.01100", "C137", "CH all-atom C: alkanes FROM HERE ON"}, {"C", "12.01100", "C145", "Benzene C - 12 site JACS,112,4768-90"}, {"C", "12.01100", "C149", "all-atom C: CH2, ethyl benzene"}, {"C", "12.01100", "C157", "all-atom C: CH3 and CH2, alcohols"}, {"C", "12.01100", "C158", "all-atom C: CH, alcohols"}, {"C", "12.01100", "C166", "C(OH) phenol Use with all"}, {"C", "12.01100", "C206", "all-atom C: CH2, thiols"}, {"C", "12.01100", "C209", "all-atom C: CH3, sulfides"}, {"C", "12.01100", "C210", "all-atom C: CH2, sulfides"}, {"C", "12.01100", "C214", "all-atom C: CH2, disulfides"}, {"C", "12.01100", "C223", "C in RCH2NH2 and Gly CA (See 900 for amines)"}, {"C", "12.01100", "C224", "C in R2CHNH2 and Ala CA"}, {"C", "12.01100", "C235", "C: C=O in amide. Acyl R in amides"}, {"C", "12.01100", "C242", "C on N: secondary N-Me amide"}, {"C", "12.01100", "C245", "C on N: tertiary N-CH2R amide (Pro Cdelta)"}, {"C", "12.01100", "C246", "C on N: tertiary N-CHR2 amide (Pro Calpha)"}, {"C", "12.01100", "C267", "Co in CCOOH carboxylic acid"}, {"C", "12.01100", "C271", "C in COO- carboxylate"}, {"C", "12.01100", "C274", "C: CH2, carboxylate ion"}, {"C", "12.01100", "C283", "AA C-alpha on C-terminal ALA"}, {"C", "12.01100", "C284", "AA C-alpha on C-terminal GLY"}, {"C", "12.01100", "C285", "AA C-alpha on C-terminal PRO"}, {"C", "12.01100", "C292", "C in RCH2NH3+ and CA in N-term Gly"}, {"C", "12.01100", "C293", "C in R2CHNH3+ and CA in N-term Ala, etc."}, {"C", "12.01100", "C295", "AA:C-alpha in N-term PRO"}, {"C", "12.01100", "C296", "AA:C-delta in N-term PRO"}, {"C", "12.01100", "C302", "C: guanidinium C+"}, {"C", "12.01100", "C307", "C: CH2(D), ARG, ethylguanidinium"}, {"C", "12.01100", "C308", "C: CH2(G), ARG"}, {"C", "12.01100", "C500", "CG in TRP"}, {"C", "12.01100", "C501", "CD C in TRP"}, {"C", "12.01100", "C502", "CE C in TRP"}, {"C", "12.01100", "C505", "CB in HIS"}, {"C", "12.01100", "C506", "CE1 in HID, HIE"}, {"C", "12.01100", "C507", "CD2 in HID, CG in HIE"}, {"C", "12.01100", "C508", "CG in HID, CD2 in HIE"}, {"C", "12.01100", "C509", "CE1 in HIP"}, {"C", "12.01100", "C510", "CG, CD2 in HIP"}, {"C", "12.01100", "C514", "CD1 in TRP"}, {"C", "12.011000", "C366", " "}, {"C", "12.011000", "C320", " "}, {"C", "12.011000", "C362", " "}, {"C", "12.011000", "C324", " "}, {"C", "12.011000", "C323", " "}, {"C", "12.011000", "C353", " "}, {"C", "12.011000", "C364", " "}, {"C", "12.011000", "C365", " "}, {"C", "12.011000", "C183", " "}, {"C", "12.011000", "C931", " "}, {"C", "12.011000", "C174", " "}, {"C", "12.011000", "C350", " "}, {"C", "12.011000", "C349", " "}, {"C", "12.011000", "C351", " "}, {"C", "12.011000", "C932", " "}, {"C", "12.011000", "C338", " "}, {"C", "12.011000", "C337", " "}, {"C", "12.011000", "C334", " "}, {"C", "12.011000", "C336", " "}, {"C", "12.011000", "C322", " "}, {"C", "12.011000", "C933", " "}, {"H", "1.00800", "H140", "H all-atom H: alkanes"}, {"H", "1.00800", "H146", "Benzene H - 12 site"}, {"H", "1.00800", "H155", "all-atom H(O): mono alcohols"}, {"H", "1.00800", "H168", "H phenol 145 and 146"}, {"H", "1.00800", "H204", "all-atom H(S): thiols (mod 11/99)"}, {"H", "1.00800", "H240", "H on N: primary amide"}, {"H", "1.00800", "H241", "H on N: secondary amide"}, {"H", "1.00800", "H270", "H in CCOOH"}, {"H", "1.00800", "H290", "H (RNH3+)"}, {"H", "1.00800", "H301", "H: guanidinium NH2"}, {"H", "1.00800", "H304", "H: guanidinium NHR"}, {"H", "1.00800", "H310", "H (R2NH2+)"}, {"H", "1.00800", "H504", "H on NE in TRP"}, {"H", "1.00800", "H513", "H on N in HIP"}, {"H", "1.008000", "H369", " "}, {"H", "1.008000", "H367", " "}, {"H", "1.008000", "H329", " "}, {"H", "1.008000", "H327", " "}, {"H", "1.008000", "H330", " "}, {"H", "1.008000", "H343", " "}, {"H", "1.008000", "H342", " "}, {"H", "1.008000", "H344", " "}, {"H", "1.008000", "H345", " "}, {"H", "1.008000", "H185", " "}, {"H", "1.008000", "H196", " "}, {"H", "1.008000", "H359", " "}, {"H", "1.008000", "H355", " "}, {"H", "1.008000", "H357", " "}, {"H", "1.008000", "H358", " "}, {"H", "1.008000", "H176", " "}, {"H", "1.008000", "H170", " "}, {"N", "14.00700", "N237", "N: primary amide. alkane parameters."}, {"N", "14.00700", "N238", "N: secondary amide 279 for formyl H."}, {"N", "14.00700", "N239", "N: tertiary amide"}, {"N", "14.00700", "N287", "N (RNH3+)"}, {"N", "14.00700", "N300", "N: guanidinium NH2"}, {"N", "14.00700", "N303", "N: guanidinium NHR"}, {"N", "14.00700", "N309", "N (R2NH2+)"}, {"N", "14.00700", "N503", "NE in TRP"}, {"N", "14.00700", "N511", "NE in HID, ND in HIE"}, {"N", "14.00700", "N512", "N in HIP"}, {"N", "14.007000", "N348", " "}, {"N", "14.007000", "N368", " "}, {"N", "14.007000", "N937", " "}, {"N", "14.007000", "N936", " "}, {"N", "14.007000", "N321", " "}, {"N", "14.007000", "N361", " "}, {"N", "14.007000", "N335", " "}, {"N", "14.007000", "N346", " "}, {"N", "14.007000", "N363", " "}, {"N", "14.007000", "N352", " "}, {"N", "14.007000", "N356", " "}, {"N", "14.007000", "N341", " "}, {"N", "14.007000", "N938", " "}, {"O", "15.99940", "O154", "all-atom O: mono alcohols"}, {"O", "15.99940", "O167", "O phenol atom C, H"}, {"O", "15.99940", "O236", "O: C=O in amide. is neutral - use"}, {"O", "15.99940", "O268", "Oh in CCOOH R in RCOOH is"}, {"O", "15.99940", "O269", "Oc in CCOOH neutral; use 135-140"}, {"O", "15.99940", "O272", "O: O in COO- carboxylate"}, {"O", "15.999400", "O370", " "}, {"O", "15.999400", "O340", " "}, {"O", "15.999400", "O441", " "}, {"O", "15.999400", "O169", " "}, {"O", "15.999400", "O186", " "}, {"P", "30.974000", "P440", " "}, {"C", "12.011000", "C347", " "}, {"O", "15.999400", "O328", " "}, {"O", "15.999400", "O326", " "}, {"C", "12.011000", "C6448", " "}, {"O", "15.999400", "O6934", " "}, {"O", "15.999400", "O6452", " "}, {"O", "15.999400", "O6442", " "}, {"P", "30.974000", "P6450", " "}, {"O", "15.999400", "O6441", " "}, {"S", "32.06000", "S200", "all-atom S: thiols (mod 11/99)"}, {"S", "32.06000", "S202", "all-atom S: sulfides"}, {"S", "32.06000", "S203", "all-atom S: disulfides"}, {"O", "15.99940", "OT", "TIP3P water"}, {"H", "1.00800", "HT", "TIP3P water"}, {"Na", "22.98977", "SOD", "Sodium Ion, adm jr."}, {"Cl", "35.45000", "CLA", "Chloride Ion, adm jr."}, {"Mg", "24.30000", "MG", "Magnesium Ion"}}; /* Bonds */ char * OPLSAAR_bonds[242][5]= {{"OT", "HT", "450.0", "0.9572", " "}, {"HT", "HT", "0.0", "1.5139", " "}, {"S203", "S203", "166.0", "2.038", " "}, {"C157", "O6934", "320.00", "1.410", " "}, {"O6934", "C174", "320.00", "1.410", " "}, {"C135", "C136", "268.00", "1.529", " "}, {"C135", "C137", "268.00", "1.529", " "}, {"C135", "C158", "268.00", "1.529", " "}, {"C135", "C224", "268.00", "1.529", " "}, {"C135", "C235", "317.00", "1.522", " "}, {"C135", "C283", "268.00", "1.529", " "}, {"C135", "C293", "268.00", "1.529", " "}, {"C135", "H140", "340.00", "1.090", " "}, {"C136", "C136", "268.00", "1.529", " "}, {"C136", "C137", "268.00", "1.529", " "}, {"C136", "C210", "268.00", "1.529", " "}, {"C136", "C224", "268.00", "1.529", " "}, {"C136", "C235", "317.00", "1.522", " "}, {"C136", "C245", "268.00", "1.529", " "}, {"C136", "C246", "268.00", "1.529", " "}, {"C136", "C267", "317.00", "1.522", " "}, {"C136", "C274", "268.00", "1.529", " "}, {"C136", "C283", "268.00", "1.529", " "}, {"C136", "C285", "268.00", "1.529", " "}, {"C136", "C292", "268.00", "1.529", " "}, {"C136", "C293", "268.00", "1.529", " "}, {"C136", "C295", "268.00", "1.529", " "}, {"C136", "C296", "268.00", "1.529", " "}, {"C136", "C308", "268.00", "1.529", " "}, {"C136", "C500", "317.00", "1.495", " "}, {"C136", "H140", "340.00", "1.090", " "}, {"C137", "C224", "268.00", "1.529", " "}, {"C137", "C283", "268.00", "1.529", " "}, {"C137", "C293", "268.00", "1.529", " "}, {"C137", "H140", "340.00", "1.090", " "}, {"C145", "C145", "469.00", "1.400", " "}, {"C145", "C149", "317.00", "1.510", " "}, {"C145", "C166", "469.00", "1.400", " "}, {"C145", "C501", "469.00", "1.404", " "}, {"C145", "C502", "469.00", "1.400", " "}, {"C145", "H146", "367.00", "1.080", " "}, {"C149", "C224", "268.00", "1.529", " "}, {"C149", "C283", "268.00", "1.529", " "}, {"C149", "C293", "268.00", "1.529", " "}, {"C149", "H140", "340.00", "1.090", " "}, {"C157", "C224", "268.00", "1.529", " "}, {"C157", "C283", "268.00", "1.529", " "}, {"C157", "C293", "268.00", "1.529", " "}, {"C157", "H140", "340.00", "1.090", " "}, {"C157", "O154", "320.00", "1.410", " "}, {"C158", "C224", "268.00", "1.529", " "}, {"C158", "C283", "268.00", "1.529", " "}, {"C158", "C293", "268.00", "1.529", " "}, {"C158", "H140", "340.00", "1.090", " "}, {"C158", "O154", "320.00", "1.410", " "}, {"C166", "O167", "450.00", "1.364", " "}, {"C206", "C224", "268.00", "1.529", " "}, {"C206", "C283", "268.00", "1.529", " "}, {"C206", "C293", "268.00", "1.529", " "}, {"C206", "H140", "340.00", "1.090", " "}, {"C206", "S200", "222.00", "1.810", " "}, {"C209", "H140", "340.00", "1.090", " "}, {"C209", "S202", "222.00", "1.810", " "}, {"C210", "H140", "340.00", "1.090", " "}, {"C210", "S202", "222.00", "1.810", " "}, {"C214", "C224", "268.00", "1.529", " "}, {"C214", "C283", "268.00", "1.529", " "}, {"C214", "C293", "268.00", "1.529", " "}, {"C214", "H140", "340.00", "1.090", " "}, {"C214", "S203", "222.00", "1.810", " "}, {"C223", "C235", "317.00", "1.522", " "}, {"C223", "H140", "340.00", "1.090", " "}, {"C223", "N238", "337.00", "1.449", " "}, {"C223", "C267", "317.00", "1.522", "phosphorylated C-terminal Gly, adm jr."}, {"C224", "C235", "317.00", "1.522", " "}, {"C224", "C267", "317.00", "1.522", " "}, {"C224", "C274", "268.00", "1.529", " "}, {"C224", "C505", "268.00", "1.529", " "}, {"C224", "H140", "340.00", "1.090", " "}, {"C224", "N238", "337.00", "1.449", " "}, {"C235", "C246", "317.00", "1.522", " "}, {"C235", "C292", "317.00", "1.522", " "}, {"C235", "C293", "317.00", "1.522", " "}, {"C235", "C295", "317.00", "1.522", " "}, {"C235", "N237", "490.00", "1.335", " "}, {"C235", "N238", "490.00", "1.335", " "}, {"C235", "N239", "490.00", "1.335", " "}, {"C235", "O236", "570.00", "1.229", " "}, {"C242", "H140", "340.00", "1.090", " "}, {"C242", "N238", "337.00", "1.449", " "}, {"C245", "H140", "340.00", "1.090", " "}, {"C245", "N239", "337.00", "1.449", " "}, {"C246", "H140", "340.00", "1.090", " "}, {"C246", "N239", "337.00", "1.449", " "}, {"C267", "O268", "450.00", "1.364", " "}, {"C267", "O269", "570.00", "1.229", " "}, {"C271", "C274", "317.00", "1.522", " "}, {"C271", "C283", "317.00", "1.522", " "}, {"C271", "C284", "317.00", "1.522", " "}, {"C271", "C285", "317.00", "1.522", " "}, {"C271", "O272", "656.00", "1.250", " "}, {"C274", "C283", "268.00", "1.529", " "}, {"C274", "C293", "268.00", "1.529", " "}, {"C274", "H140", "340.00", "1.090", " "}, {"C283", "C505", "268.00", "1.529", " "}, {"C283", "H140", "340.00", "1.090", " "}, {"C283", "N238", "337.00", "1.449", " "}, {"C284", "H140", "340.00", "1.090", " "}, {"C284", "N238", "337.00", "1.449", " "}, {"C285", "H140", "340.00", "1.090", " "}, {"C285", "N239", "337.00", "1.449", " "}, {"C292", "H140", "340.00", "1.090", " "}, {"C292", "N287", "367.00", "1.471", " "}, {"C293", "C505", "268.00", "1.529", " "}, {"C293", "H140", "340.00", "1.090", " "}, {"C293", "N287", "367.00", "1.471", " "}, {"C295", "H140", "340.00", "1.090", " "}, {"C295", "N309", "367.00", "1.471", " "}, {"C296", "H140", "340.00", "1.090", " "}, {"C296", "N309", "367.00", "1.471", " "}, {"C302", "N300", "481.00", "1.340", " "}, {"C302", "N303", "481.00", "1.340", " "}, {"C307", "C308", "268.00", "1.529", " "}, {"C307", "H140", "340.00", "1.090", " "}, {"C307", "N303", "337.00", "1.463", " "}, {"C308", "H140", "340.00", "1.090", " "}, {"C500", "C501", "388.00", "1.459", " "}, {"C500", "C514", "546.00", "1.352", " "}, {"C501", "C502", "447.00", "1.419", " "}, {"C502", "N503", "428.00", "1.380", " "}, {"C505", "C507", "317.00", "1.504", " "}, {"C505", "C508", "317.00", "1.504", " "}, {"C505", "C510", "317.00", "1.504", " "}, {"C505", "H140", "340.00", "1.090", " "}, {"C506", "H146", "367.00", "1.080", " "}, {"C506", "N503", "477.00", "1.343", " "}, {"C506", "N511", "488.00", "1.335", " "}, {"C507", "C508", "520.00", "1.370", " "}, {"C507", "H146", "367.00", "1.080", " "}, {"C507", "N511", "410.00", "1.394", " "}, {"C508", "H146", "367.00", "1.080", " "}, {"C508", "N503", "427.00", "1.381", " "}, {"C509", "H146", "367.00", "1.080", " "}, {"C509", "N512", "477.00", "1.343", " "}, {"C510", "C510", "520.00", "1.370", " "}, {"C510", "H146", "367.00", "1.080", " "}, {"C510", "N512", "427.00", "1.381", " "}, {"C514", "H146", "367.00", "1.080", " "}, {"C514", "N503", "427.00", "1.381", " "}, {"H155", "O154", "553.00", "0.945", " "}, {"H168", "O167", "553.00", "0.945", " "}, {"H204", "S200", "274.00", "1.336", " "}, {"H240", "N237", "434.00", "1.010", " "}, {"H241", "N238", "434.00", "1.010", " "}, {"H270", "O268", "553.00", "0.945", " "}, {"H290", "N287", "434.00", "1.010", " "}, {"H301", "N300", "434.00", "1.010", " "}, {"H304", "N303", "434.00", "1.010", " "}, {"H310", "N309", "434.00", "1.010", " "}, {"H504", "N503", "434.00", "1.010", " "}, {"H513", "N512", "434.00", "1.010", " "}, {"O186", "C933", "320.00", "1.380", " "}, {"C174", "C933", "268.00", "1.529", " "}, {"H196", "C933", "340.00", "1.090", " "}, {"C933", "N938", "337.00", "1.475", " "}, {"C320", "N938", "424.00", "1.383", " "}, {"C324", "N938", "448.00", "1.365", " "}, {"H330", "C324", "340.00", "1.080", " "}, {"C323", "C322", "410.00", "1.444", " "}, {"O328", "C322", "570.00", "1.229", " "}, {"H329", "C323", "340.00", "1.080", " "}, {"C324", "C323", "549.00", "1.340", " "}, {"N321", "C320", "418.00", "1.388", " "}, {"O326", "C320", "570.00", "1.229", " "}, {"C322", "N321", "418.00", "1.388", " "}, {"H327", "N321", "434.00", "1.010", " "}, {"N335", "C336", "483.00", "1.339", " "}, {"O186", "C932", "320.00", "1.380", " "}, {"C932", "N937", "337.00", "1.475", " "}, {"C174", "C932", "268.00", "1.529", " "}, {"H196", "C932", "340.00", "1.090", " "}, {"C334", "N937", "424.00", "1.383", " "}, {"C338", "N937", "448.00", "1.365", " "}, {"H345", "C338", "367.00", "1.080", " "}, {"H344", "C337", "340.00", "1.080", " "}, {"C337", "C338", "549.00", "1.340", " "}, {"N335", "C334", "457.00", "1.358", " "}, {"O340", "C334", "570.00", "1.229", " "}, {"N341", "C336", "481.00", "1.340", " "}, {"C336", "C337", "427.00", "1.433", " "}, {"H342", "N341", "434.00", "1.010", " "}, {"H343", "N341", "434.00", "1.010", " "}, {"O370", "C366", "570.00", "1.229", " "}, {"C364", "N936", "436.00", "1.374", " "}, {"N363", "C364", "461.00", "1.354", " "}, {"C365", "C364", "520.00", "1.370", " "}, {"H369", "N368", "434.00", "1.010", " "}, {"C362", "N363", "483.00", "1.339", " "}, {"N368", "C362", "481.00", "1.340", " "}, {"C362", "N361", "427.00", "1.381", " "}, {"H367", "N361", "434.00", "1.010", " "}, {"N361", "C366", "418.00", "1.388", " "}, {"C366", "C365", "447.00", "1.419", " "}, {"N352", "C365", "414.00", "1.391", " "}, {"C183", "C6448", "286.00", "1.529", " "}, {"C6448", "H140", "340.00", "1.090", " "}, {"C6448", "O6934", "320.00", "1.410", " "}, {"O6934", "P440", "230.00", "1.610", " "}, {"O441", "P440", "553.00", "1.480", " "}, {"O441", "P6450", "553.00", "1.480", " "}, {"O6452", "P440", "230.00", "1.610", " "}, {"O6442", "P440", "230.00", "1.610", " "}, {"O6442", "P6450", "230.00", "1.610", " "}, {"O6452", "P6450", "230.00", "1.610", " "}, {"O6441", "P6450", "553.00", "1.480", " "}, {"C931", "N936", "337.00", "1.475", " "}, {"C349", "N936", "436.00", "1.374", " "}, {"C353", "N936", "440.00", "1.371", " "}, {"C174", "C931", "268.00", "1.529", " "}, {"O186", "C931", "320.00", "1.380", " "}, {"H196", "C931", "340.00", "1.090", " "}, {"C174", "C174", "268.00", "1.529", " "}, {"O169", "C174", "320.00", "1.410", " "}, {"H176", "C174", "340.00", "1.090", " "}, {"C183", "C174", "268.00", "1.529", " "}, {"C157", "C183", "268.00", "1.529", " "}, {"H185", "C183", "340.00", "1.090", " "}, {"H170", "O169", "553.00", "0.945", " "}, {"C350", "C349", "520.00", "1.370", " "}, {"N348", "C349", "461.00", "1.354", " "}, {"C351", "C350", "469.00", "1.404", " "}, {"N352", "C350", "414.00", "1.391", " "}, {"N356", "C351", "481.00", "1.340", " "}, {"N346", "C351", "483.00", "1.339", " "}, {"H357", "N356", "434.00", "1.010", " "}, {"H358", "N356", "434.00", "1.010", " "}, {"C347", "N346", "502.00", "1.324", " "}, {"H355", "C347", "367.00", "1.080", " "}, {"H359", "C353", "367.00", "1.080", " "}, {"C183", "O186", "320.00", "1.410", " "}, {"C353", "N352", "529.00", "1.304", " "}, {"C347", "N348", "502.00", "1.324", " "}}; /* Angles */ char * OPLSAAR_angles[593][6]= {{"HT", "OT", "HT", "55.0", "104.52", " "}, {"O6934", "P440", "O6934", "45.0", "102.60", "new?"}, {"C183", "C157", "O6934", "50.00", "109.500", " "}, {"H140", "C157", "O6934", "35.00", "109.500", " "}, {"H176", "C174", "O6934", "35.00", "109.500", " "}, {"C183", "C174", "O6934", "50.00", "109.500", " "}, {"C174", "C174", "O6934", "50.0", "109.50", " "}, {"P440", "O6934", "C174", "30.0", "120.50", " "}, {"P440", "O6934", "C157", "100.0", "120.50", " "}, {"H140", "C135", "H140", "33.0", "107.8", " "}, {"H140", "C136", "H140", "33.0", "107.8", " "}, {"H140", "C149", "H140", "33.0", "107.8", " "}, {"H140", "C157", "H140", "33.0", "107.8", " "}, {"H140", "C206", "H140", "33.0", "107.8", " "}, {"H140", "C209", "H140", "33.0", "107.8", " "}, {"H140", "C210", "H140", "33.0", "107.8", " "}, {"H140", "C214", "H140", "33.0", "107.8", " "}, {"H140", "C223", "H140", "33.0", "107.8", " "}, {"H140", "C224", "H140", "33.0", "107.8", " "}, {"H140", "C242", "H140", "33.0", "107.8", " "}, {"H140", "C245", "H140", "33.0", "107.8", " "}, {"H140", "C274", "H140", "33.0", "107.8", " "}, {"H140", "C284", "H140", "33.0", "107.8", " "}, {"H140", "C292", "H140", "33.0", "107.8", " "}, {"H140", "C296", "H140", "33.0", "107.8", " "}, {"H140", "C307", "H140", "33.0", "107.8", " "}, {"H140", "C308", "H140", "33.0", "107.8", " "}, {"H140", "C505", "H140", "33.0", "107.8", " "}, {"H290", "N287", "H290", "35.0", "109.5", " "}, {"H310", "N309", "H310", "35.0", "109.5", " "}, {"C135", "C136", "C137", "58.35", "112.70", " "}, {"C135", "C136", "H140", "37.50", "110.70", " "}, {"C135", "C137", "C135", "58.35", "112.70", " "}, {"C135", "C137", "C136", "58.35", "112.70", " "}, {"C135", "C137", "C224", "58.35", "112.70", " "}, {"C135", "C137", "C283", "58.35", "112.70", " "}, {"C135", "C137", "C293", "58.35", "112.70", " "}, {"C135", "C137", "H140", "37.50", "110.70", " "}, {"C135", "C158", "C224", "58.35", "112.70", " "}, {"C135", "C158", "C283", "58.35", "112.70", " "}, {"C135", "C158", "C293", "58.35", "112.70", " "}, {"C135", "C158", "H140", "37.50", "110.70", " "}, {"C135", "C158", "O154", "50.00", "109.50", " "}, {"C135", "C224", "C235", "63.00", "111.10", " "}, {"C135", "C224", "C267", "63.00", "111.10", " "}, {"C135", "C224", "H140", "37.50", "110.70", " "}, {"C135", "C224", "N238", "80.00", "109.70", " "}, {"C135", "C235", "N238", "70.00", "116.60", " "}, {"C135", "C235", "N239", "70.00", "116.60", " "}, {"C135", "C235", "O236", "80.00", "120.40", " "}, {"C135", "C283", "C271", "63.00", "111.10", " "}, {"C135", "C283", "H140", "37.50", "110.70", " "}, {"C135", "C283", "N238", "80.00", "109.70", " "}, {"C135", "C293", "C235", "63.00", "111.10", " "}, {"C135", "C293", "H140", "37.50", "110.70", " "}, {"C135", "C293", "N287", "80.00", "111.20", " "}, {"C136", "C135", "H140", "37.50", "110.70", " "}, {"C136", "C136", "C136", "58.35", "112.70", " "}, {"C136", "C136", "C224", "58.35", "112.70", " "}, {"C136", "C136", "C235", "63.00", "111.10", " "}, {"C136", "C136", "C245", "58.35", "112.70", " "}, {"C136", "C136", "C246", "58.35", "112.70", " "}, {"C136", "C136", "C267", "63.00", "111.10", " "}, {"C136", "C136", "C283", "58.35", "112.70", " "}, {"C136", "C136", "C285", "58.35", "112.70", " "}, {"C136", "C136", "C292", "58.35", "112.70", " "}, {"C136", "C136", "C293", "58.35", "112.70", " "}, {"C136", "C136", "C295", "58.35", "112.70", " "}, {"C136", "C136", "C296", "58.35", "112.70", " "}, {"C136", "C136", "H140", "37.50", "110.70", " "}, {"C136", "C137", "C224", "58.35", "112.70", " "}, {"C136", "C137", "C283", "58.35", "112.70", " "}, {"C136", "C137", "C293", "58.35", "112.70", " "}, {"C136", "C137", "H140", "37.50", "110.70", " "}, {"C136", "C210", "H140", "37.50", "110.70", " "}, {"C136", "C210", "S202", "50.00", "114.70", " "}, {"C136", "C224", "C235", "63.00", "111.10", " "}, {"C136", "C224", "H140", "37.50", "110.70", " "}, {"C136", "C224", "N238", "80.00", "109.70", " "}, {"C136", "C235", "N237", "70.00", "116.60", " "}, {"C136", "C235", "O236", "80.00", "120.40", " "}, {"C136", "C245", "H140", "37.50", "110.70", " "}, {"C136", "C245", "N239", "80.00", "109.70", " "}, {"C136", "C246", "C235", "63.00", "111.10", " "}, {"C136", "C246", "H140", "37.50", "110.70", " "}, {"C136", "C246", "N239", "80.00", "109.70", " "}, {"C136", "C267", "O268", "70.00", "108.00", " "}, {"C136", "C267", "O269", "80.00", "120.40", " "}, {"C136", "C274", "C271", "63.00", "111.10", " "}, {"C136", "C274", "H140", "37.50", "110.70", " "}, {"C136", "C283", "C271", "63.00", "111.10", " "}, {"C136", "C283", "H140", "37.50", "110.70", " "}, {"C136", "C283", "N238", "80.00", "109.70", " "}, {"C136", "C285", "C271", "63.00", "111.10", " "}, {"C136", "C285", "H140", "37.50", "110.70", " "}, {"C136", "C285", "N239", "80.00", "109.70", " "}, {"C136", "C292", "H140", "37.50", "110.70", " "}, {"C136", "C292", "N287", "80.00", "111.20", " "}, {"C136", "C293", "C235", "63.00", "111.10", " "}, {"C136", "C293", "H140", "37.50", "110.70", " "}, {"C136", "C293", "N287", "80.00", "111.20", " "}, {"C136", "C295", "C235", "63.00", "111.10", " "}, {"C136", "C295", "H140", "37.50", "110.70", " "}, {"C136", "C295", "N309", "80.00", "111.20", " "}, {"C136", "C296", "H140", "37.50", "110.70", " "}, {"C136", "C296", "N309", "80.00", "111.20", " "}, {"C136", "C308", "C307", "58.35", "112.70", " "}, {"C136", "C308", "H140", "37.50", "110.70", " "}, {"C136", "C500", "C501", "70.00", "128.60", " "}, {"C136", "C500", "C514", "70.00", "125.00", " "}, {"C137", "C135", "H140", "37.50", "110.70", " "}, {"C137", "C136", "C224", "58.35", "112.70", " "}, {"C137", "C136", "C283", "58.35", "112.70", " "}, {"C137", "C136", "C293", "58.35", "112.70", " "}, {"C137", "C136", "H140", "37.50", "110.70", " "}, {"C137", "C224", "C235", "63.00", "111.10", " "}, {"C137", "C224", "H140", "37.50", "110.70", " "}, {"C137", "C224", "N238", "80.00", "109.70", " "}, {"C137", "C283", "C271", "63.00", "111.10", " "}, {"C137", "C283", "H140", "37.50", "110.70", " "}, {"C137", "C283", "N238", "80.00", "109.70", " "}, {"C137", "C293", "C235", "63.00", "111.10", " "}, {"C137", "C293", "H140", "37.50", "110.70", " "}, {"C137", "C293", "N287", "80.00", "111.20", " "}, {"C145", "C145", "C145", "63.00", "120.00", " "}, {"C145", "C145", "C149", "70.00", "120.00", " "}, {"C145", "C145", "C166", "63.00", "120.00", " "}, {"C145", "C145", "C501", "63.00", "120.00", " "}, {"C145", "C145", "C502", "85.00", "120.00", " "}, {"C145", "C145", "H146", "35.00", "120.00", " "}, {"C145", "C149", "C224", "63.00", "114.00", " "}, {"C145", "C149", "C283", "63.00", "114.00", " "}, {"C145", "C149", "C293", "63.00", "114.00", " "}, {"C145", "C149", "H140", "35.00", "109.50", " "}, {"C145", "C166", "C145", "63.00", "120.00", " "}, {"C145", "C166", "O167", "70.00", "120.00", " "}, {"C145", "C501", "C500", "85.00", "134.90", " "}, {"C145", "C501", "C502", "85.00", "116.20", " "}, {"C145", "C502", "C501", "85.00", "122.70", " "}, {"C145", "C502", "N503", "70.00", "132.80", " "}, {"C149", "C224", "C235", "63.00", "111.10", " "}, {"C149", "C224", "H140", "37.50", "110.70", " "}, {"C149", "C224", "N238", "80.00", "109.70", " "}, {"C149", "C283", "C271", "63.00", "111.10", " "}, {"C149", "C283", "H140", "37.50", "110.70", " "}, {"C149", "C283", "N238", "80.00", "109.70", " "}, {"C149", "C293", "C235", "63.00", "111.10", " "}, {"C149", "C293", "H140", "37.50", "110.70", " "}, {"C149", "C293", "N287", "80.00", "111.20", " "}, {"C157", "C224", "C235", "63.00", "111.10", " "}, {"C157", "C224", "H140", "37.50", "110.70", " "}, {"C157", "C224", "N238", "80.00", "109.70", " "}, {"C157", "C283", "C271", "63.00", "111.10", " "}, {"C157", "C283", "H140", "37.50", "110.70", " "}, {"C157", "C283", "N238", "80.00", "109.70", " "}, {"C157", "C293", "C235", "63.00", "111.10", " "}, {"C157", "C293", "H140", "37.50", "110.70", " "}, {"C157", "C293", "N287", "80.00", "111.20", " "}, {"C157", "O154", "H155", "55.00", "108.50", " "}, {"C158", "C135", "H140", "37.50", "110.70", " "}, {"C158", "C224", "C235", "63.00", "111.10", " "}, {"C158", "C224", "H140", "37.50", "110.70", " "}, {"C158", "C224", "N238", "80.00", "109.70", " "}, {"C158", "C283", "C271", "63.00", "111.10", " "}, {"C158", "C283", "H140", "37.50", "110.70", " "}, {"C158", "C283", "N238", "80.00", "109.70", " "}, {"C158", "C293", "C235", "63.00", "111.10", " "}, {"C158", "C293", "H140", "37.50", "110.70", " "}, {"C158", "C293", "N287", "80.00", "111.20", " "}, {"C158", "O154", "H155", "55.00", "108.50", " "}, {"C166", "C145", "H146", "35.00", "120.00", " "}, {"C166", "O167", "H168", "35.00", "113.00", " "}, {"C206", "C224", "C235", "63.00", "111.10", " "}, {"C206", "C224", "H140", "37.50", "110.70", " "}, {"C206", "C224", "N238", "80.00", "109.70", " "}, {"C206", "C283", "C271", "63.00", "111.10", " "}, {"C206", "C283", "H140", "37.50", "110.70", " "}, {"C206", "C283", "N238", "80.00", "109.70", " "}, {"C206", "C293", "C235", "63.00", "111.10", " "}, {"C206", "C293", "H140", "37.50", "110.70", " "}, {"C206", "C293", "N287", "80.00", "111.20", " "}, {"C206", "S200", "H204", "44.00", "96.00", " "}, {"C209", "S202", "C210", "62.00", "98.90", " "}, {"C210", "C136", "C224", "58.35", "112.70", " "}, {"C210", "C136", "C283", "58.35", "112.70", " "}, {"C210", "C136", "C293", "58.35", "112.70", " "}, {"C210", "C136", "H140", "37.50", "110.70", " "}, {"C214", "C224", "C235", "63.00", "111.10", " "}, {"C214", "C224", "H140", "37.50", "110.70", " "}, {"C214", "C224", "N238", "80.00", "109.70", " "}, {"C214", "C283", "C271", "63.00", "111.10", " "}, {"C214", "C283", "H140", "37.50", "110.70", " "}, {"C214", "C283", "N238", "80.00", "109.70", " "}, {"C214", "C293", "C235", "63.00", "111.10", " "}, {"C214", "C293", "H140", "37.50", "110.70", " "}, {"C214", "C293", "N287", "80.00", "111.20", " "}, {"C214", "S203", "S203", "68.00", "103.70", " "}, {"C223", "C235", "N238", "70.00", "116.60", " "}, {"C223", "C235", "N239", "70.00", "116.60", " "}, {"C223", "C235", "O236", "80.00", "120.40", " "}, {"C223", "N238", "C235", "50.00", "121.90", " "}, {"C223", "N238", "H241", "38.00", "118.40", " "}, {"C224", "C135", "H140", "37.50", "110.70", " "}, {"C224", "C136", "C235", "63.00", "111.10", " "}, {"C224", "C136", "C267", "63.00", "111.10", " "}, {"C224", "C136", "C274", "58.35", "112.70", " "}, {"C224", "C136", "C308", "58.35", "112.70", " "}, {"C224", "C136", "C500", "63.00", "115.60", " "}, {"C224", "C136", "H140", "37.50", "110.70", " "}, {"C224", "C137", "H140", "37.50", "110.70", " "}, {"C224", "C149", "H140", "37.50", "110.70", " "}, {"C224", "C157", "H140", "37.50", "110.70", " "}, {"C224", "C157", "O154", "50.00", "109.50", " "}, {"C224", "C158", "H140", "37.50", "110.70", " "}, {"C224", "C158", "O154", "50.00", "109.50", " "}, {"C224", "C206", "H140", "37.50", "110.70", " "}, {"C224", "C206", "S200", "50.00", "108.60", " "}, {"C224", "C214", "H140", "37.50", "110.70", " "}, {"C224", "C214", "S203", "50.00", "114.70", " "}, {"C224", "C235", "N238", "70.00", "116.60", " "}, {"C224", "C235", "N239", "70.00", "116.60", " "}, {"C224", "C235", "O236", "80.00", "120.40", " "}, {"C223", "C267", "O268", "70.00", "108.00", "protonated C-terminal Gly, adm jr."}, {"C224", "C267", "O268", "70.00", "108.00", " "}, {"C223", "C267", "O269", "80.00", "120.40", "protonated C-terminal Gly, adm jr."}, {"C224", "C267", "O269", "80.00", "120.40", " "}, {"C224", "C274", "C271", "63.00", "111.10", " "}, {"C224", "C274", "H140", "37.50", "110.70", " "}, {"C224", "C505", "C507", "63.00", "114.00", " "}, {"C224", "C505", "C508", "63.00", "114.00", " "}, {"C224", "C505", "C510", "63.00", "114.00", " "}, {"C224", "C505", "H140", "37.50", "110.70", " "}, {"C224", "N238", "C235", "50.00", "121.90", " "}, {"C224", "N238", "H241", "38.00", "118.40", " "}, {"C235", "C135", "H140", "35.00", "109.50", " "}, {"C235", "C136", "C283", "63.00", "111.10", " "}, {"C235", "C136", "C293", "63.00", "111.10", " "}, {"C235", "C136", "H140", "35.00", "109.50", " "}, {"C235", "C223", "H140", "35.00", "109.50", " "}, {"C235", "C223", "N238", "63.00", "110.10", " "}, {"C235", "C224", "C274", "63.00", "111.10", " "}, {"C235", "C224", "C505", "63.00", "111.10", " "}, {"C235", "C224", "H140", "35.00", "109.50", " "}, {"C235", "C224", "N238", "63.00", "110.10", " "}, {"C235", "C246", "H140", "35.00", "109.50", " "}, {"C235", "C246", "N239", "63.00", "110.10", " "}, {"C235", "C292", "H140", "35.00", "109.50", " "}, {"C235", "C292", "N287", "80.00", "111.20", " "}, {"C235", "C293", "C274", "63.00", "111.10", " "}, {"C235", "C293", "C505", "63.00", "111.10", " "}, {"C235", "C293", "H140", "35.00", "109.50", " "}, {"C235", "C293", "N287", "80.00", "111.20", " "}, {"C235", "C295", "H140", "35.00", "109.50", " "}, {"C235", "C295", "N309", "80.00", "111.20", " "}, {"C235", "N237", "H240", "35.00", "119.80", " "}, {"C235", "N238", "C242", "50.00", "121.90", " "}, {"C235", "N238", "C283", "50.00", "121.90", " "}, {"C235", "N238", "C284", "50.00", "121.90", " "}, {"C235", "N238", "H241", "35.00", "119.80", " "}, {"C235", "N239", "C245", "50.00", "121.90", " "}, {"C235", "N239", "C246", "50.00", "121.90", " "}, {"C235", "N239", "C285", "50.00", "121.90", " "}, {"C242", "N238", "H241", "38.00", "118.40", " "}, {"C245", "C136", "H140", "37.50", "110.70", " "}, {"C245", "N238", "C285", "50.00", "118.00", " "}, {"C245", "N239", "C246", "50.00", "118.00", " "}, {"C245", "N239", "C285", "50.00", "118.00", " "}, {"C246", "C136", "H140", "37.50", "110.70", " "}, {"C246", "C235", "N238", "70.00", "116.60", " "}, {"C246", "C235", "N239", "70.00", "116.60", " "}, {"C246", "C235", "O236", "80.00", "120.40", " "}, {"C267", "C136", "C283", "63.00", "111.10", " "}, {"C267", "C136", "C293", "63.00", "111.10", " "}, {"C267", "C136", "H140", "35.00", "109.50", " "}, {"C267", "C223", "H140", "35.00", "109.50", "protonated C-terminal Gly, adm jr."}, {"C267", "C224", "H140", "35.00", "109.50", " "}, {"C267", "C223", "N238", "63.00", "110.10", "protonated C-terminal Gly, adm jr."}, {"C267", "C224", "N238", "63.00", "110.10", " "}, {"C267", "O268", "H270", "35.00", "113.00", " "}, {"C271", "C274", "C283", "63.00", "111.10", " "}, {"C271", "C274", "C293", "63.00", "111.10", " "}, {"C271", "C274", "H140", "35.00", "109.50", " "}, {"C271", "C283", "C274", "63.00", "111.10", " "}, {"C271", "C283", "C505", "63.00", "111.10", " "}, {"C271", "C283", "H140", "35.00", "109.50", " "}, {"C271", "C283", "N238", "63.00", "110.10", " "}, {"C271", "C284", "H140", "35.00", "109.50", " "}, {"C271", "C284", "N238", "63.00", "110.10", " "}, {"C271", "C285", "H140", "35.00", "109.50", " "}, {"C271", "C285", "N239", "63.00", "110.10", " "}, {"C274", "C136", "C283", "58.35", "112.70", " "}, {"C274", "C136", "C293", "58.35", "112.70", " "}, {"C274", "C136", "H140", "37.50", "110.70", " "}, {"C274", "C224", "H140", "37.50", "110.70", " "}, {"C274", "C224", "N238", "80.00", "109.70", " "}, {"C274", "C271", "O272", "70.00", "117.00", " "}, {"C274", "C283", "H140", "37.50", "110.70", " "}, {"C274", "C283", "N238", "80.00", "109.70", " "}, {"C274", "C293", "H140", "37.50", "110.70", " "}, {"C274", "C293", "N287", "80.00", "111.20", " "}, {"C283", "C135", "H140", "37.50", "110.70", " "}, {"C283", "C136", "C308", "58.35", "112.70", " "}, {"C283", "C136", "C500", "63.00", "115.60", " "}, {"C283", "C136", "H140", "37.50", "110.70", " "}, {"C283", "C137", "H140", "37.50", "110.70", " "}, {"C283", "C149", "H140", "37.50", "110.70", " "}, {"C283", "C157", "H140", "37.50", "110.70", " "}, {"C283", "C157", "O154", "50.00", "109.50", " "}, {"C283", "C158", "H140", "37.50", "110.70", " "}, {"C283", "C158", "O154", "50.00", "109.50", " "}, {"C283", "C206", "H140", "37.50", "110.70", " "}, {"C283", "C206", "S200", "50.00", "108.60", " "}, {"C283", "C214", "H140", "37.50", "110.70", " "}, {"C283", "C214", "S203", "50.00", "114.70", " "}, {"C283", "C271", "O272", "70.00", "117.00", " "}, {"C283", "C274", "H140", "37.50", "110.70", " "}, {"C283", "C505", "C507", "63.00", "114.00", " "}, {"C283", "C505", "C508", "63.00", "114.00", " "}, {"C283", "C505", "C510", "63.00", "114.00", " "}, {"C283", "C505", "H140", "37.50", "110.70", " "}, {"C283", "N238", "H241", "38.00", "118.40", " "}, {"C284", "C271", "O272", "70.00", "117.00", " "}, {"C284", "N238", "H241", "38.00", "118.40", " "}, {"C285", "C136", "H140", "37.50", "110.70", " "}, {"C285", "C271", "O272", "70.00", "117.00", " "}, {"C292", "C136", "H140", "37.50", "110.70", " "}, {"C292", "C235", "N238", "70.00", "116.60", " "}, {"C292", "C235", "N239", "70.00", "116.60", " "}, {"C292", "C235", "O236", "80.00", "120.40", " "}, {"C292", "N287", "H290", "35.00", "109.50", " "}, {"C293", "C135", "H140", "37.50", "110.70", " "}, {"C293", "C136", "C308", "58.35", "112.70", " "}, {"C293", "C136", "C500", "63.00", "115.60", " "}, {"C293", "C136", "H140", "37.50", "110.70", " "}, {"C293", "C137", "H140", "37.50", "110.70", " "}, {"C293", "C149", "H140", "37.50", "110.70", " "}, {"C293", "C157", "H140", "37.50", "110.70", " "}, {"C293", "C157", "O154", "50.00", "109.50", " "}, {"C293", "C158", "H140", "37.50", "110.70", " "}, {"C293", "C158", "O154", "50.00", "109.50", " "}, {"C293", "C206", "H140", "37.50", "110.70", " "}, {"C293", "C206", "S200", "50.00", "108.60", " "}, {"C293", "C214", "H140", "37.50", "110.70", " "}, {"C293", "C214", "S203", "50.00", "114.70", " "}, {"C293", "C235", "N238", "70.00", "116.60", " "}, {"C293", "C235", "N239", "70.00", "116.60", " "}, {"C293", "C235", "O236", "80.00", "120.40", " "}, {"C293", "C274", "H140", "37.50", "110.70", " "}, {"C293", "C505", "C507", "63.00", "114.00", " "}, {"C293", "C505", "C508", "63.00", "114.00", " "}, {"C293", "C505", "C510", "63.00", "114.00", " "}, {"C293", "C505", "H140", "37.50", "110.70", " "}, {"C293", "N287", "H290", "35.00", "109.50", " "}, {"C295", "C136", "H140", "37.50", "110.70", " "}, {"C295", "C235", "N238", "70.00", "116.60", " "}, {"C295", "C235", "N239", "70.00", "116.60", " "}, {"C295", "C235", "O236", "80.00", "120.40", " "}, {"C295", "N309", "C296", "50.00", "113.00", " "}, {"C295", "N309", "H310", "35.00", "109.50", " "}, {"C296", "C136", "H140", "37.50", "110.70", " "}, {"C296", "N309", "H310", "35.00", "109.50", " "}, {"C302", "N300", "H301", "35.00", "120.00", " "}, {"C302", "N303", "C307", "50.00", "123.20", " "}, {"C302", "N303", "H304", "35.00", "120.00", " "}, {"C307", "C308", "H140", "37.50", "110.70", " "}, {"C307", "N303", "H304", "35.00", "118.40", " "}, {"C308", "C136", "H140", "37.50", "110.70", " "}, {"C308", "C307", "H140", "37.50", "110.70", " "}, {"C308", "C307", "N303", "80.00", "111.20", " "}, {"C500", "C136", "H140", "35.00", "109.50", " "}, {"C500", "C501", "C502", "85.00", "108.80", " "}, {"C500", "C514", "H146", "35.00", "120.00", " "}, {"C500", "C514", "N503", "70.00", "108.70", " "}, {"C501", "C145", "H146", "35.00", "120.00", " "}, {"C501", "C500", "C514", "85.00", "106.40", " "}, {"C501", "C502", "N503", "70.00", "104.40", " "}, {"C502", "C145", "H146", "35.00", "120.00", " "}, {"C502", "N503", "C514", "70.00", "111.60", " "}, {"C502", "N503", "H504", "35.00", "123.10", " "}, {"C505", "C224", "H140", "37.50", "110.70", " "}, {"C505", "C224", "N238", "80.00", "109.70", " "}, {"C505", "C283", "H140", "37.50", "110.70", " "}, {"C505", "C283", "N238", "80.00", "109.70", " "}, {"C505", "C293", "H140", "37.50", "110.70", " "}, {"C505", "C293", "N287", "80.00", "111.20", " "}, {"C505", "C507", "C508", "70.00", "130.70", " "}, {"C505", "C507", "N511", "70.00", "124.50", " "}, {"C505", "C508", "C507", "70.00", "130.70", " "}, {"C505", "C508", "N503", "70.00", "121.60", " "}, {"C505", "C510", "C510", "70.00", "130.70", " "}, {"C505", "C510", "N512", "70.00", "121.60", " "}, {"C506", "N503", "C508", "70.00", "109.80", " "}, {"C506", "N503", "H504", "35.00", "124.00", " "}, {"C506", "N511", "C507", "70.00", "110.00", " "}, {"C507", "C505", "H140", "35.00", "109.50", " "}, {"C507", "C508", "H146", "35.00", "130.70", " "}, {"C507", "C508", "N503", "70.00", "106.30", " "}, {"C508", "C505", "H140", "35.00", "109.50", " "}, {"C508", "C507", "H146", "35.00", "128.20", " "}, {"C508", "C507", "N511", "70.00", "111.00", " "}, {"C508", "N503", "H504", "35.00", "124.00", " "}, {"C509", "N512", "C510", "70.00", "109.80", " "}, {"C509", "N512", "H513", "35.00", "124.00", " "}, {"C510", "C505", "H140", "35.00", "109.50", " "}, {"C510", "C510", "H146", "35.00", "130.70", " "}, {"C510", "C510", "N512", "70.00", "106.30", " "}, {"C510", "N512", "H513", "35.00", "124.00", " "}, {"C514", "N503", "H504", "35.00", "124.00", " "}, {"H140", "C157", "O154", "35.00", "109.50", " "}, {"H140", "C158", "O154", "35.00", "109.50", " "}, {"H140", "C206", "S200", "35.00", "109.50", " "}, {"H140", "C209", "S202", "35.00", "109.50", " "}, {"H140", "C210", "S202", "35.00", "109.50", " "}, {"H140", "C214", "S203", "35.00", "109.50", " "}, {"H140", "C223", "N238", "35.00", "109.50", " "}, {"H140", "C224", "N238", "35.00", "109.50", " "}, {"H140", "C242", "N238", "35.00", "109.50", " "}, {"H140", "C245", "N239", "35.00", "109.50", " "}, {"H140", "C246", "N239", "35.00", "109.50", " "}, {"H140", "C283", "N238", "35.00", "109.50", " "}, {"H140", "C284", "N238", "35.00", "109.50", " "}, {"H140", "C285", "N239", "35.00", "109.50", " "}, {"H140", "C292", "N287", "35.00", "109.50", " "}, {"H140", "C293", "N287", "35.00", "109.50", " "}, {"H140", "C295", "N309", "35.00", "109.50", " "}, {"H140", "C296", "N309", "35.00", "109.50", " "}, {"H140", "C307", "N303", "35.00", "109.50", " "}, {"H146", "C506", "N503", "35.00", "120.00", " "}, {"H146", "C506", "N511", "35.00", "120.00", " "}, {"H146", "C507", "N511", "35.00", "120.00", " "}, {"H146", "C508", "N503", "35.00", "121.60", " "}, {"H146", "C509", "N512", "35.00", "120.00", " "}, {"H146", "C510", "N512", "35.00", "120.00", " "}, {"H146", "C514", "N503", "35.00", "121.60", " "}, {"H240", "N237", "H240", "35.00", "120.00", " "}, {"H301", "N300", "H301", "35.00", "120.00", " "}, {"N237", "C235", "O236", "80.00", "122.90", " "}, {"N238", "C235", "O236", "80.00", "122.90", " "}, {"N239", "C235", "O236", "80.00", "122.90", " "}, {"N300", "C302", "N300", "70.00", "120.00", " "}, {"N300", "C302", "N303", "70.00", "120.00", " "}, {"N503", "C506", "N511", "70.00", "120.00", " "}, {"N512", "C509", "N512", "70.00", "120.00", " "}, {"O268", "C267", "O269", "80.00", "121.00", " "}, {"O272", "C271", "O272", "80.00", "126.00", " "}, {"C183", "O186", "C933", "110.00", "115.000", " "}, {"H196", "C933", "O186", "35.00", "109.500", " "}, {"C320", "N321", "C322", "70.00", "126.400", " "}, {"C320", "N321", "H327", "35.00", "116.800", " "}, {"C324", "N938", "C320", "70.00", "121.600", " "}, {"N321", "C322", "O328", "80.00", "120.600", " "}, {"N321", "C322", "C323", "70.00", "114.100", " "}, {"O326", "C320", "N321", "80.00", "120.600", " "}, {"H327", "N321", "C322", "35.00", "116.800", " "}, {"C322", "C323", "C324", "85.00", "120.700", " "}, {"C322", "C323", "H329", "35.00", "119.700", " "}, {"O328", "C322", "C323", "80.00", "125.300", " "}, {"H329", "C323", "C324", "35.00", "120.000", " "}, {"H196", "C933", "C174", "37.50", "110.700", " "}, {"O186", "C933", "C174", "90.00", "106.000", " "}, {"N938", "C933", "O186", "50.00", "109.500", " "}, {"C933", "C174", "H176", "37.50", "110.700", " "}, {"C933", "C174", "O169", "50.00", "109.500", " "}, {"C933", "C174", "C174", "110.00", "96.000", " "}, {"C933", "N938", "C324", "70.00", "121.200", " "}, {"C320", "N938", "C933", "70.00", "117.600", " "}, {"N938", "C320", "O326", "80.00", "120.900", " "}, {"N938", "C320", "N321", "70.00", "115.400", " "}, {"C323", "C324", "N938", "70.00", "121.200", " "}, {"N938", "C324", "H330", "35.00", "119.100", " "}, {"N938", "C933", "H196", "35.00", "109.500", " "}, {"N938", "C933", "C174", "50.00", "109.500", " "}, {"H330", "C324", "C323", "35.00", "120.000", " "}, {"C336", "N335", "C334", "70.00", "120.500", " "}, {"N335", "C336", "N341", "70.00", "119.300", " "}, {"C337", "C336", "N335", "70.00", "121.500", " "}, {"C183", "O186", "C932", "110.00", "115.000", " "}, {"H196", "C932", "O186", "35.00", "109.500", " "}, {"O186", "C932", "C174", "90.00", "106.000", " "}, {"N937", "C932", "O186", "50.00", "109.500", " "}, {"C338", "C337", "H344", "35.00", "120.000", " "}, {"C334", "N937", "C338", "70.00", "121.600", " "}, {"O340", "C334", "N335", "80.00", "122.500", " "}, {"C336", "N341", "H343", "35.00", "120.000", " "}, {"C336", "N341", "H342", "35.00", "120.000", " "}, {"C338", "C337", "C336", "85.00", "117.000", " "}, {"H344", "C337", "C336", "35.00", "123.300", " "}, {"C337", "C336", "N341", "70.00", "120.100", " "}, {"H343", "N341", "H342", "35.00", "113.000", " "}, {"H196", "C932", "C174", "37.50", "110.700", " "}, {"C932", "C174", "H176", "37.50", "110.700", " "}, {"C932", "C174", "O169", "50.00", "109.500", " "}, {"C932", "C174", "C174", "110.00", "96.000", " "}, {"C338", "N937", "C932", "70.00", "121.200", " "}, {"C932", "N937", "C334", "70.00", "117.600", " "}, {"N937", "C334", "O340", "80.00", "120.900", " "}, {"N335", "C334", "N937", "70.00", "118.600", " "}, {"N937", "C338", "C337", "70.00", "121.200", " "}, {"N937", "C338", "H345", "35.00", "119.100", " "}, {"N937", "C932", "H196", "35.00", "109.500", " "}, {"N937", "C932", "C174", "50.00", "109.500", " "}, {"H345", "C338", "C337", "35.00", "119.700", " "}, {"O370", "C366", "N361", "80.00", "120.600", " "}, {"C364", "C365", "C366", "85.00", "119.200", " "}, {"C365", "N352", "C353", "70.00", "103.800", " "}, {"C365", "C366", "O370", "80.00", "128.800", " "}, {"C364", "C365", "N352", "70.00", "111.000", " "}, {"N361", "C362", "N363", "70.00", "123.300", " "}, {"C362", "N368", "H369", "35.00", "120.000", " "}, {"N352", "C365", "C366", "70.00", "130.000", " "}, {"C365", "C366", "N361", "70.00", "111.300", " "}, {"C366", "N361", "H367", "35.00", "116.800", " "}, {"N936", "C364", "C365", "70.00", "106.200", " "}, {"H369", "N368", "H369", "35.00", "113.000", " "}, {"N363", "C364", "C365", "70.00", "127.700", " "}, {"C366", "N361", "C362", "70.00", "125.200", " "}, {"H367", "N361", "C362", "35.00", "118.000", " "}, {"N936", "C364", "N363", "70.00", "126.200", " "}, {"C362", "N363", "C364", "70.00", "112.200", " "}, {"C353", "N936", "C364", "70.00", "105.400", " "}, {"N368", "C362", "N363", "70.00", "119.300", " "}, {"N361", "C362", "N368", "70.00", "116.000", " "}, {"C364", "N936", "C931", "70.00", "125.800", " "}, {"C183", "C6448", "H140", "37.5", "110.700", " "}, {"P440", "O6452", "P6450", "50.00", "150.000", " "}, {"O441", "P6450", "O6452", "100.00", "108.230", " "}, {"O441", "P6450", "O441", "140.00", "119.900", " "}, {"C6448", "O6934", "P440", "100.00", "120.500", " "}, {"C6448", "C183", "H185", "37.50", "110.700", " "}, {"C174", "C183", "C6448", "58.35", "112.700", " "}, {"C6448", "C183", "O186", "50.00", "109.500", " "}, {"H140", "C6448", "H140", "33.0", "107.800", " "}, {"O6452", "P440", "O6934", "45.00", "102.600", " "}, {"O441", "P440", "O6934", "100.00", "108.230", " "}, {"H140", "C6448", "O6934", "35.00", "109.500", " "}, {"C183", "C6448", "O6934", "50.00", "109.500", " "}, {"P440", "O6452", "P440", "50.00", "150.000", " "}, {"O441", "P440", "O6452", "100.00", "108.230", " "}, {"O441", "P440", "O441", "140.00", "119.900", " "}, {"O6442", "P440", "O6452", "45.00", "102.600", " "}, {"P440", "O6442", "P6450", "50.00", "150.000", " "}, {"O441", "P440", "O6442", "100.00", "108.230", " "}, {"O6441", "P6450", "O6442", "100.00", "108.230", " "}, {"O6441", "P6450", "O6441", "140.00", "119.900", " "}, {"C931", "N936", "C353", "70.00", "128.800", " "}, {"N936", "C931", "C174", "50.00", "109.500", " "}, {"N936", "C931", "O186", "50.00", "109.500", " "}, {"N936", "C931", "H196", "35.00", "109.500", " "}, {"C931", "C174", "C174", "110.00", "96.500", " "}, {"C931", "C174", "O169", "50.00", "109.500", " "}, {"C931", "C174", "H176", "37.50", "110.700", " "}, {"C174", "C174", "C183", "60.00", "100.000", " "}, {"C174", "C174", "H176", "37.50", "110.700", " "}, {"C174", "C183", "C157", "58.35", "112.700", " "}, {"C174", "C183", "H185", "37.50", "110.700", " "}, {"C183", "C157", "O154", "50.00", "109.500", " "}, {"C183", "C157", "H140", "37.50", "110.700", " "}, {"C174", "O169", "H170", "55.00", "108.500", " "}, {"N936", "C349", "C350", "70.00", "106.200", " "}, {"N936", "C349", "N348", "70.00", "126.200", " "}, {"C349", "C350", "C351", "85.00", "117.300", " "}, {"C349", "C350", "N352", "70.00", "111.000", " "}, {"C350", "C351", "N356", "70.00", "123.500", " "}, {"C350", "C351", "N346", "70.00", "117.300", " "}, {"C351", "N356", "H357", "35.00", "120.000", " "}, {"C351", "N356", "H358", "35.00", "120.000", " "}, {"C351", "N346", "C347", "70.00", "118.600", " "}, {"N346", "C347", "H355", "35.00", "115.450", " "}, {"N936", "C353", "H359", "35.00", "123.050", " "}, {"C349", "N936", "C931", "70.00", "125.800", " "}, {"C353", "N936", "C349", "70.00", "105.400", " "}, {"O186", "C931", "C174", "90.00", "106.000", " "}, {"H196", "C931", "C174", "37.50", "110.700", " "}, {"H196", "C931", "O186", "35.00", "109.500", " "}, {"N348", "C349", "C350", "70.00", "127.700", " "}, {"N352", "C353", "N936", "70.00", "113.900", " "}, {"H359", "C353", "N352", "35.00", "123.050", " "}, {"O169", "C174", "C174", "50.00", "109.500", " "}, {"H176", "C174", "O169", "35.00", "109.500", " "}, {"C183", "O186", "C931", "110.00", "115.000", " "}, {"O169", "C174", "C183", "50.00", "109.500", " "}, {"H176", "C174", "C183", "37.50", "110.700", " "}, {"C174", "C183", "O186", "100.00", "109.500", " "}, {"C157", "C183", "O186", "50.00", "109.500", " "}, {"H185", "C183", "O186", "35.00", "109.500", " "}, {"H185", "C183", "C157", "37.50", "110.700", " "}, {"N352", "C350", "C351", "70.00", "132.400", " "}, {"C347", "N348", "C349", "70.00", "111.000", " "}, {"N346", "C351", "N356", "70.00", "119.300", " "}, {"C350", "N352", "C353", "70.00", "103.800", " "}, {"H358", "N356", "H357", "35.00", "113.000", " "}, {"N346", "C347", "N348", "70.00", "129.100", " "}, {"H355", "C347", "N348", "35.00", "115.450", " "}}; /* Dihedrals */ char * OPLSAAR_dihedrals[2482][8]= {{"X", "C145", "C145", "X", "3.6250", "2", "180.0", " "}, {"X", "C145", "C166", "X", "3.6250", "2", "180.0", " "}, {"X", "C145", "C501", "X", "3.5000", "2", "180.0", " "}, {"X", "C145", "C502", "X", "3.6250", "2", "180.0", " "}, {"X", "C302", "N300", "X", "1.9500", "2", "180.0", " "}, {"X", "C500", "C501", "X", "1.6750", "2", "180.0", " "}, {"X", "C500", "C514", "X", "6.5250", "2", "180.0", " "}, {"X", "C501", "C502", "X", "3.0000", "2", "180.0", " "}, {"X", "C502", "N503", "X", "1.5250", "2", "180.0", " "}, {"X", "C506", "N503", "X", "2.3250", "2", "180.0", " "}, {"X", "C506", "N511", "X", "5.0000", "2", "180.0", " "}, {"X", "C507", "C508", "X", "5.3750", "2", "180.0", " "}, {"X", "C507", "N511", "X", "2.4000", "2", "180.0", " "}, {"X", "C509", "N512", "X", "2.3250", "2", "180.0", " "}, {"X", "C510", "C510", "X", "5.3750", "2", "180.0", " "}, {"X", "C514", "N503", "X", "1.5000", "2", "180.0", " "}, {"O6934", "P440", "O6934", "C157", "0.2500", "1", "0.0", "Alpha"}, {"O6934", "P440", "O6934", "C157", "-0.4000", "2", "180.0", " "}, {"O6934", "P440", "O6934", "C157", "0.2000", "3", "0.0", " "}, {"O6934", "P440", "O6934", "C157", "0.0000", "4", "180.0", " "}, {"O441", "P440", "O6934", "C157", "-0.4500", "1", "0.0", "Alpha prime"}, {"O441", "P440", "O6934", "C157", "0.8500", "2", "180.0", " "}, {"O441", "P440", "O6934", "C157", "0.2000", "3", "0.0", " "}, {"O441", "P440", "O6934", "C157", "0.0000", "4", "180.0", " "}, {"C174", "O6934", "P440", "O441", "-0.4000", "1", "0.0", "Zeta prime"}, {"C174", "O6934", "P440", "O441", "-0.2150", "2", "180.0", " "}, {"C174", "O6934", "P440", "O441", "0.7200", "3", "0.0", " "}, {"C174", "O6934", "P440", "O441", "0.0000", "4", "180.0", " "}, {"C174", "O6934", "P440", "O6934", "0.1900", "1", "0.0", "Zeta"}, {"C174", "O6934", "P440", "O6934", "-1.5100", "2", "180.0", " "}, {"C174", "O6934", "P440", "O6934", "-0.1500", "3", "0.0", " "}, {"C174", "O6934", "P440", "O6934", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C174", "O6934", "4.5330", "1", "0.0", "Technically a Sugar"}, {"O169", "C174", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C174", "O6934", "0.0000", "4", "0.0", " "}, {"P440", "O6934", "C157", "C183", "1.7100", "1", "0.0", "Beta"}, {"P440", "O6934", "C157", "C183", "-0.3100", "2", "180.0", " "}, {"P440", "O6934", "C157", "C183", "0.0500", "3", "0.0", " "}, {"P440", "O6934", "C157", "C183", "0.0000", "4", "180.0", " "}, {"C174", "C174", "O6934", "P440", "0.1000", "1", "0.0", "Epsilon"}, {"C174", "C174", "O6934", "P440", "-0.5500", "2", "180.0", " "}, {"C174", "C174", "O6934", "P440", "-0.0500", "3", "0.0", " "}, {"C174", "C174", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"C174", "C183", "C157", "O6934", "-0.8500", "1", "0.0", "Gamma"}, {"C174", "C183", "C157", "O6934", "-0.7000", "2", "180.0", " "}, {"C174", "C183", "C157", "O6934", "1.4000", "3", "0.0", " "}, {"C174", "C183", "C157", "O6934", "0.0000", "4", "180.0", " "}, {"C931", "C174", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar"}, {"C931", "C174", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C931", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C931", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar"}, {"C933", "C174", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C933", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C933", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar"}, {"C932", "C174", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C932", "C174", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C932", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"O6934", "C157", "C183", "O186", "1.9595", "1", "0.0", "Gamma Prime"}, {"O6934", "C157", "C183", "O186", "-1.0000", "2", "180.0", " "}, {"O6934", "C157", "C183", "O186", "-0.8500", "3", "0.0", " "}, {"O6934", "C157", "C183", "O186", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "O6934", "2.1595", "1", "0.0", "Sugar"}, {"O186", "C183", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"O186", "C183", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"H176", "C174", "O6934", "P440", "0.0000", "1", "0.0", "Epsilon Double Prime"}, {"H176", "C174", "O6934", "P440", "0.0000", "2", "180.0", " "}, {"H176", "C174", "O6934", "P440", "0.1500", "3", "0.0", " "}, {"H176", "C174", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"P440", "O6934", "C157", "H140", "0.0000", "1", "0.0", "Beta Prime"}, {"P440", "O6934", "C157", "H140", "0.0000", "2", "180.0", " "}, {"P440", "O6934", "C157", "H140", "0.1500", "3", "0.0", " "}, {"P440", "O6934", "C157", "H140", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "O6934", "0.0000", "1", "0.0", "Sugar Pucker"}, {"H185", "C183", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "O6934", "0.2340", "3", "0.0", " "}, {"H185", "C183", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "O6934", "0.0000", "1", "0.0", "Sugar"}, {"H176", "C174", "C174", "O6934", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "O6934", "0.2340", "3", "0.0", " "}, {"H176", "C174", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"O6934", "C157", "C183", "H185", "0.0000", "1", "0.0", "Sugar"}, {"O6934", "C157", "C183", "H185", "0.0000", "2", "180.0", " "}, {"O6934", "C157", "C183", "H185", "0.2340", "3", "0.0", " "}, {"O6934", "C157", "C183", "H185", "0.0000", "4", "180.0", " "}, {"C183", "C174", "O6934", "P440", "0.1400", "1", "0.0", "Epsilon Prime"}, {"C183", "C174", "O6934", "P440", "-0.6100", "2", "180.0", " "}, {"C183", "C174", "O6934", "P440", "-0.8000", "3", "0.0", " "}, {"C183", "C174", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "O6934", "-0.2180", "1", "0.0", "Sugar Pucker"}, {"C157", "C183", "C174", "O6934", "0.4500", "2", "180.0", " "}, {"C157", "C183", "C174", "O6934", "0.0000", "3", "0.0", " "}, {"C157", "C183", "C174", "O6934", "0.0000", "4", "180.0", " "}, {"C135", "C136", "C137", "C135", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C135", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C135", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "C224", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C224", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C224", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "C283", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C283", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C283", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "C293", "0.6500", "1", "0.0", " "}, {"C135", "C136", "C137", "C293", "-0.1000", "2", "180.0", " "}, {"C135", "C136", "C137", "C293", "0.1000", "3", "0.0", " "}, {"C135", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C136", "C224", "0.6500", "1", "0.0", " "}, {"C135", "C137", "C136", "C224", "-0.1000", "2", "180.0", " "}, {"C135", "C137", "C136", "C224", "0.1000", "3", "0.0", " "}, {"C135", "C137", "C136", "C283", "0.6500", "1", "0.0", " "}, {"C135", "C137", "C136", "C283", "-0.1000", "2", "180.0", " "}, {"C135", "C137", "C136", "C283", "0.1000", "3", "0.0", " "}, {"C135", "C137", "C136", "C293", "0.6500", "1", "0.0", " "}, {"C135", "C137", "C136", "C293", "-0.1000", "2", "180.0", " "}, {"C135", "C137", "C136", "C293", "0.1000", "3", "0.0", " "}, {"C135", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C224", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C137", "C224", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C137", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C137", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C224", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C137", "C224", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C137", "C224", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C283", "C271", "-0.7110", "1", "0.0", " "}, {"C135", "C137", "C283", "C271", "0.5340", "2", "180.0", " "}, {"C135", "C137", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C135", "C137", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C283", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C137", "C283", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C137", "C283", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C293", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C137", "C293", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C137", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C137", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C137", "C293", "N287", "1.4970", "1", "0.0", " "}, {"C135", "C137", "C293", "N287", "0.1260", "2", "180.0", " "}, {"C135", "C137", "C293", "N287", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C224", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C158", "C224", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C158", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C158", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C224", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C158", "C224", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C158", "C224", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C283", "C271", "-0.7110", "1", "0.0", " "}, {"C135", "C158", "C283", "C271", "0.5340", "2", "180.0", " "}, {"C135", "C158", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C135", "C158", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C283", "N238", "1.4970", "1", "0.0", " "}, {"C135", "C158", "C283", "N238", "0.1260", "2", "180.0", " "}, {"C135", "C158", "C283", "N238", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C293", "C235", "-0.7110", "1", "0.0", " "}, {"C135", "C158", "C293", "C235", "0.5340", "2", "180.0", " "}, {"C135", "C158", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C135", "C158", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C135", "C158", "C293", "N287", "1.4970", "1", "0.0", " "}, {"C135", "C158", "C293", "N287", "0.1260", "2", "180.0", " "}, {"C135", "C158", "C293", "N287", "0.1500", "3", "0.0", " "}, {"C135", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C135", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C135", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C135", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C135", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C135", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C135", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C135", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C135", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C135", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C135", "C224", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C135", "C224", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C135", "C224", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C135", "C224", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C135", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C135", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C135", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C135", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C135", "C235", "N238", "C223", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N238", "C223", "3.0445", "2", "180.0", " "}, {"C135", "C235", "N238", "C224", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N238", "C224", "3.0445", "2", "180.0", " "}, {"C135", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C135", "C235", "N239", "C245", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N239", "C245", "3.0445", "2", "180.0", " "}, {"C135", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C135", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C135", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C135", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C135", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C135", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C135", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C135", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C135", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C135", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C135", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C135", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C135", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C135", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C135", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C136", "C136", "C136", "C224", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C224", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C224", "0.1000", "3", "0.0", " "}, {"C267", "C136", "C136", "C224", "0.6500", "1", "0.0", "protonated Glu, adm jr."}, {"C267", "C136", "C136", "C224", "-0.1000", "2", "180.0", "protonated Glu, adm jr."}, {"C267", "C136", "C136", "C224", "0.1000", "3", "0.0", "protonated Glu, adm jr."}, {"C136", "C136", "C136", "C283", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C283", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C283", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C136", "C292", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C292", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C292", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C136", "C293", "0.6500", "1", "0.0", " "}, {"C136", "C136", "C136", "C293", "-0.1000", "2", "180.0", " "}, {"C136", "C136", "C136", "C293", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C267", "C136", "C136", "H140", "0.1500", "3", "0.0", "protonated Glu, adm jr."}, {"C136", "C136", "C224", "C235", "-1.1790", "1", "0.0", " "}, {"C136", "C136", "C224", "C235", "0.4555", "2", "180.0", " "}, {"C136", "C136", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C224", "N238", "0.4420", "1", "0.0", " "}, {"C136", "C136", "C224", "N238", "0.4485", "2", "180.0", " "}, {"C136", "C136", "C224", "N238", "0.4400", "3", "0.0", " "}, {"C136", "C136", "C235", "N237", "1.4220", "1", "0.0", " "}, {"C136", "C136", "C235", "N237", "-0.1805", "2", "180.0", " "}, {"C136", "C136", "C235", "N237", "-0.1625", "3", "0.0", " "}, {"C136", "C136", "C235", "O236", "0.2030", "1", "0.0", " "}, {"C136", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C136", "C136", "C235", "O236", "0.0695", "3", "0.0", " "}, {"C136", "C136", "C245", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C245", "N239", "0.4225", "1", "0.0", " "}, {"C136", "C136", "C245", "N239", "-0.4810", "2", "180.0", " "}, {"C136", "C136", "C245", "N239", "0.3565", "3", "0.0", " "}, {"C136", "C136", "C246", "C235", "-0.8755", "1", "0.0", " "}, {"C136", "C136", "C246", "C235", "0.8030", "2", "180.0", " "}, {"C136", "C136", "C246", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C246", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C246", "N239", "0.7860", "1", "0.0", " "}, {"C136", "C136", "C246", "N239", "0.0795", "2", "180.0", " "}, {"C136", "C136", "C246", "N239", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C136", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C136", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C136", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C136", "C136", "C283", "C271", "-1.1790", "1", "0.0", " "}, {"C136", "C136", "C283", "C271", "0.4555", "2", "180.0", " "}, {"C136", "C136", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C283", "N238", "0.4420", "1", "0.0", " "}, {"C136", "C136", "C283", "N238", "0.4485", "2", "180.0", " "}, {"C136", "C136", "C283", "N238", "0.4400", "3", "0.0", " "}, {"C136", "C136", "C285", "C271", "-0.8755", "1", "0.0", " "}, {"C136", "C136", "C285", "C271", "0.8030", "2", "180.0", " "}, {"C136", "C136", "C285", "C271", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C285", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C285", "N239", "0.7860", "1", "0.0", " "}, {"C136", "C136", "C285", "N239", "0.0795", "2", "180.0", " "}, {"C136", "C136", "C285", "N239", "0.1000", "3", "0.0", " "}, {"C136", "C136", "C292", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C292", "N287", "1.3660", "1", "0.0", " "}, {"C136", "C136", "C292", "N287", "-0.1145", "2", "180.0", " "}, {"C136", "C136", "C292", "N287", "0.2425", "3", "0.0", " "}, {"C136", "C136", "C293", "C235", "-1.1790", "1", "0.0", " "}, {"C136", "C136", "C293", "C235", "0.4555", "2", "180.0", " "}, {"C136", "C136", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C293", "N287", "0.4420", "1", "0.0", " "}, {"C136", "C136", "C293", "N287", "0.4485", "2", "180.0", " "}, {"C136", "C136", "C293", "N287", "0.4400", "3", "0.0", " "}, {"C136", "C136", "C295", "C235", "-0.8755", "1", "0.0", " "}, {"C136", "C136", "C295", "C235", "0.8030", "2", "180.0", " "}, {"C136", "C136", "C295", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C136", "C295", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C295", "N309", "1.3660", "1", "0.0", " "}, {"C136", "C136", "C295", "N309", "-0.1145", "2", "180.0", " "}, {"C136", "C136", "C295", "N309", "0.2425", "3", "0.0", " "}, {"C136", "C136", "C296", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C136", "C296", "N309", "1.3660", "1", "0.0", " "}, {"C136", "C136", "C296", "N309", "-0.1145", "2", "180.0", " "}, {"C136", "C136", "C296", "N309", "0.2425", "3", "0.0", " "}, {"C136", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C224", "C235", "-0.7110", "1", "0.0", " "}, {"C136", "C137", "C224", "C235", "0.5340", "2", "180.0", " "}, {"C136", "C137", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C137", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C224", "N238", "1.4970", "1", "0.0", " "}, {"C136", "C137", "C224", "N238", "0.1260", "2", "180.0", " "}, {"C136", "C137", "C224", "N238", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C283", "C271", "-0.7110", "1", "0.0", " "}, {"C136", "C137", "C283", "C271", "0.5340", "2", "180.0", " "}, {"C136", "C137", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C136", "C137", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C283", "N238", "1.4970", "1", "0.0", " "}, {"C136", "C137", "C283", "N238", "0.1260", "2", "180.0", " "}, {"C136", "C137", "C283", "N238", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C293", "C235", "-0.7110", "1", "0.0", " "}, {"C136", "C137", "C293", "C235", "0.5340", "2", "180.0", " "}, {"C136", "C137", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C136", "C137", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C137", "C293", "N287", "1.4970", "1", "0.0", " "}, {"C136", "C137", "C293", "N287", "0.1260", "2", "180.0", " "}, {"C136", "C137", "C293", "N287", "0.1500", "3", "0.0", " "}, {"C136", "C210", "S202", "C209", "0.4625", "1", "0.0", " "}, {"C136", "C210", "S202", "C209", "-0.2880", "2", "180.0", " "}, {"C136", "C210", "S202", "C209", "0.3385", "3", "0.0", " "}, {"C136", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C136", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C136", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C136", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C136", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C136", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C136", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C136", "C235", "N237", "H240", "2.4500", "2", "180.0", " "}, {"C136", "C245", "N239", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C245", "N239", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C245", "N239", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C245", "N239", "C246", "1.4295", "1", "0.0", " "}, {"C136", "C245", "N239", "C246", "1.0290", "2", "180.0", " "}, {"C136", "C245", "N239", "C246", "-5.6330", "3", "0.0", " "}, {"C136", "C245", "N239", "C285", "1.4295", "1", "0.0", " "}, {"C136", "C245", "N239", "C285", "1.0290", "2", "180.0", " "}, {"C136", "C245", "N239", "C285", "-5.6330", "3", "0.0", " "}, {"C136", "C246", "C235", "N238", "2.5145", "1", "0.0", " "}, {"C136", "C246", "C235", "N238", "0.3595", "2", "180.0", " "}, {"C136", "C246", "C235", "N238", "1.1200", "3", "0.0", " "}, {"C136", "C246", "C235", "N239", "2.5145", "1", "0.0", " "}, {"C136", "C246", "C235", "N239", "0.3595", "2", "180.0", " "}, {"C136", "C246", "C235", "N239", "1.1200", "3", "0.0", " "}, {"C136", "C246", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C246", "N239", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C246", "N239", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C246", "N239", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C246", "N239", "C245", "2.3765", "1", "0.0", " "}, {"C136", "C246", "N239", "C245", "-0.3670", "2", "180.0", " "}, {"C136", "C267", "O268", "H270", "0.7500", "1", "0.0", " "}, {"C136", "C267", "O268", "H270", "2.7500", "2", "180.0", " "}, {"C136", "C274", "C271", "O272", "0.2730", "2", "180.0", " "}, {"C136", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C136", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C136", "C285", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C136", "C285", "N239", "C235", "-0.3410", "1", "0.0", " "}, {"C136", "C285", "N239", "C235", "0.0650", "2", "180.0", " "}, {"C136", "C285", "N239", "C235", "0.1690", "3", "0.0", " "}, {"C136", "C285", "N239", "C245", "2.3765", "1", "0.0", " "}, {"C136", "C285", "N239", "C245", "-0.3670", "2", "180.0", " "}, {"C136", "C292", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C136", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C136", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C136", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C136", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C136", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C136", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C136", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C136", "C295", "C235", "N238", "2.5145", "1", "0.0", " "}, {"C136", "C295", "C235", "N238", "0.3595", "2", "180.0", " "}, {"C136", "C295", "C235", "N238", "1.1200", "3", "0.0", " "}, {"C136", "C295", "C235", "N239", "2.5145", "1", "0.0", " "}, {"C136", "C295", "C235", "N239", "0.3595", "2", "180.0", " "}, {"C136", "C295", "C235", "N239", "1.1200", "3", "0.0", " "}, {"C136", "C295", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C136", "C295", "N309", "C296", "0.71895", "1", "0.0", " "}, {"C136", "C295", "N309", "C296", "-0.0619", "2", "180.0", " "}, {"C136", "C295", "N309", "C296", "0.13195", "3", "0.0", " "}, {"C136", "C295", "N309", "H310", "0.1735", "3", "0.0", " "}, {"C136", "C296", "N309", "C295", "0.71895", "1", "0.0", " "}, {"C136", "C296", "N309", "C295", "-0.0619", "2", "180.0", " "}, {"C136", "C296", "N309", "C295", "0.13195", "3", "0.0", " "}, {"C136", "C296", "N309", "H310", "0.1735", "3", "0.0", " "}, {"C136", "C308", "C307", "H140", "0.1500", "3", "0.0", " "}, {"C136", "C308", "C307", "N303", "1.3660", "1", "0.0", " "}, {"C136", "C308", "C307", "N303", "-0.1145", "2", "180.0", " "}, {"C136", "C308", "C307", "N303", "0.2425", "3", "0.0", " "}, {"C137", "C136", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C224", "C235", "-0.8755", "1", "0.0", " "}, {"C137", "C136", "C224", "C235", "0.8030", "2", "180.0", " "}, {"C137", "C136", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C137", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C224", "N238", "0.7860", "1", "0.0", " "}, {"C137", "C136", "C224", "N238", "0.0795", "2", "180.0", " "}, {"C137", "C136", "C224", "N238", "0.1000", "3", "0.0", " "}, {"C137", "C136", "C283", "C271", "-0.8755", "1", "0.0", " "}, {"C137", "C136", "C283", "C271", "0.8030", "2", "180.0", " "}, {"C137", "C136", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C137", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C283", "N238", "0.7860", "1", "0.0", " "}, {"C137", "C136", "C283", "N238", "0.0795", "2", "180.0", " "}, {"C137", "C136", "C283", "N238", "0.1000", "3", "0.0", " "}, {"C137", "C136", "C293", "C235", "-0.8755", "1", "0.0", " "}, {"C137", "C136", "C293", "C235", "0.8030", "2", "180.0", " "}, {"C137", "C136", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C137", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C137", "C136", "C293", "N287", "0.7860", "1", "0.0", " "}, {"C137", "C136", "C293", "N287", "0.0795", "2", "180.0", " "}, {"C137", "C136", "C293", "N287", "0.1000", "3", "0.0", " "}, {"C137", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C137", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C137", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C137", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C137", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C137", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C137", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C137", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C137", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C137", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C137", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C137", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C137", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C137", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C137", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C137", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C137", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C137", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C137", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C137", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C137", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C137", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C137", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C137", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C145", "C145", "C149", "C224", "0.0000", "1", "0.0", " "}, {"C145", "C145", "C149", "C283", "0.0000", "1", "0.0", " "}, {"C145", "C145", "C149", "C293", "0.0000", "1", "0.0", " "}, {"C145", "C145", "C149", "H140", "0.0000", "1", "0.0", " "}, {"C145", "C149", "C224", "C235", "-0.7030", "1", "0.0", " "}, {"C145", "C149", "C224", "C235", "0.8885", "2", "180.0", " "}, {"C145", "C149", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C145", "C149", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C145", "C149", "C224", "N238", "0.8560", "1", "0.0", " "}, {"C145", "C149", "C224", "N238", "0.3625", "2", "180.0", " "}, {"C145", "C149", "C224", "N238", "0.1830", "3", "0.0", " "}, {"C145", "C149", "C283", "C271", "-0.7030", "1", "0.0", " "}, {"C145", "C149", "C283", "C271", "0.8885", "2", "180.0", " "}, {"C145", "C149", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C145", "C149", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C145", "C149", "C283", "N238", "0.8560", "1", "0.0", " "}, {"C145", "C149", "C283", "N238", "0.3625", "2", "180.0", " "}, {"C145", "C149", "C283", "N238", "0.1830", "3", "0.0", " "}, {"C145", "C149", "C293", "C235", "-0.7030", "1", "0.0", " "}, {"C145", "C149", "C293", "C235", "0.8885", "2", "180.0", " "}, {"C145", "C149", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C145", "C149", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C145", "C149", "C293", "N287", "0.8560", "1", "0.0", " "}, {"C145", "C149", "C293", "N287", "0.3625", "2", "180.0", " "}, {"C145", "C149", "C293", "N287", "0.1830", "3", "0.0", " "}, {"C145", "C166", "C145", "H146", "3.6250", "2", "180.0", " "}, {"C145", "C166", "O167", "H168", "0.8410", "2", "180.0", " "}, {"C145", "C501", "C500", "C514", "1.6750", "2", "180.0", " "}, {"C145", "C502", "C501", "C500", "3.0000", "2", "180.0", " "}, {"C149", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C149", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C149", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C149", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C149", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C149", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C149", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C149", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C149", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C149", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C149", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C149", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C149", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C149", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C149", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C149", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C149", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C149", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C149", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C149", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C149", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C149", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C149", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C149", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C157", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C157", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C157", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C157", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C157", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C157", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C157", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C157", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C157", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C157", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C157", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C157", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C157", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C157", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C157", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C157", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C157", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C157", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C157", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C157", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C157", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C158", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C158", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C158", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C158", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C158", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C158", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C158", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C158", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C158", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C158", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C158", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C158", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C158", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C158", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C158", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C158", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C158", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C158", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C158", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C158", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C158", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C158", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C158", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C158", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C206", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C206", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C206", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C206", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C206", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C206", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C206", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C206", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C206", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C206", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C206", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C206", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C206", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C206", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C206", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C206", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C206", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C206", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C206", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C206", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C206", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C206", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C206", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C206", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C209", "S202", "C210", "H140", "0.3235", "3", "0.0", " "}, {"C210", "C136", "C224", "C235", "-0.4555", "1", "0.0", " "}, {"C210", "C136", "C224", "C235", "0.3495", "2", "180.0", " "}, {"C210", "C136", "C224", "C235", "0.0000", "3", "0.0", " "}, {"C210", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C210", "C136", "C224", "N238", "0.1070", "1", "0.0", " "}, {"C210", "C136", "C224", "N238", "0.2705", "2", "180.0", " "}, {"C210", "C136", "C224", "N238", "0.1960", "3", "0.0", " "}, {"C210", "C136", "C283", "C271", "-0.4555", "1", "0.0", " "}, {"C210", "C136", "C283", "C271", "0.3495", "2", "180.0", " "}, {"C210", "C136", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C210", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C210", "C136", "C283", "N238", "0.1070", "1", "0.0", " "}, {"C210", "C136", "C283", "N238", "0.2705", "2", "180.0", " "}, {"C210", "C136", "C283", "N238", "0.1960", "3", "0.0", " "}, {"C210", "C136", "C293", "C235", "-0.4555", "1", "0.0", " "}, {"C210", "C136", "C293", "C235", "0.3495", "2", "180.0", " "}, {"C210", "C136", "C293", "C235", "0.0000", "3", "0.0", " "}, {"C210", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C210", "C136", "C293", "N287", "0.1070", "1", "0.0", " "}, {"C210", "C136", "C293", "N287", "0.2705", "2", "180.0", " "}, {"C210", "C136", "C293", "N287", "0.1960", "3", "0.0", " "}, {"C210", "S202", "C209", "H140", "0.3235", "3", "0.0", " "}, {"C214", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C214", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C214", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C214", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C214", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C214", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C214", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C214", "C224", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C214", "C224", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C214", "C224", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C214", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C214", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C214", "C283", "N238", "C235", "-0.3410", "1", "0.0", " "}, {"C214", "C283", "N238", "C235", "0.0650", "2", "180.0", " "}, {"C214", "C283", "N238", "C235", "0.1690", "3", "0.0", " "}, {"C214", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C214", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C214", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C214", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C214", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C214", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C214", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C214", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C214", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C214", "S203", "S203", "C214", "-3.7070", "2", "180.0", " "}, {"C214", "S203", "S203", "C214", "0.8525", "3", "0.0", " "}, {"C223", "C235", "N238", "C223", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C223", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "C224", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C224", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "C242", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C242", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "C283", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C283", "3.0445", "2", "180.0", " "}, {"C295", "C235", "N238", "C283", "1.1500", "1", "0.0", "N-terminal Pro (Pres prop), adm jr."}, {"C295", "C235", "N238", "C283", "3.0445", "2", "180.0", "N-terminal Pro (Pres prop), adm jr."}, {"C223", "C235", "N238", "C284", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N238", "C284", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C223", "C235", "N239", "C245", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N239", "C245", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C223", "C235", "N239", "C285", "1.1500", "1", "0.0", " "}, {"C223", "C235", "N239", "C285", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C224", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C224", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C223", "N238", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C223", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C224", "C136", "C136", "C235", "-0.6335", "1", "0.0", " "}, {"C224", "C136", "C136", "C235", "0.2395", "2", "180.0", " "}, {"C224", "C136", "C136", "C235", "-0.2430", "3", "0.0", " "}, {"C224", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C210", "S202", "-0.7825", "1", "0.0", " "}, {"C224", "C136", "C210", "S202", "-0.0045", "2", "180.0", " "}, {"C224", "C136", "C210", "S202", "-0.2250", "3", "0.0", " "}, {"C224", "C136", "C235", "N237", "0.7470", "1", "0.0", " "}, {"C224", "C136", "C235", "N237", "-0.2555", "2", "180.0", " "}, {"C224", "C136", "C235", "N237", "0.0625", "3", "0.0", " "}, {"C224", "C136", "C235", "O236", "0.8280", "1", "0.0", " "}, {"C224", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C224", "C136", "C235", "O236", "0.2195", "3", "0.0", " "}, {"C224", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C224", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C224", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C224", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C224", "C136", "C274", "C271", "-0.4425", "1", "0.0", " "}, {"C224", "C136", "C274", "C271", "0.5125", "2", "180.0", " "}, {"C224", "C136", "C274", "C271", "-0.6465", "3", "0.0", " "}, {"C224", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C308", "C307", "0.6500", "1", "0.0", " "}, {"C224", "C136", "C308", "C307", "-0.1000", "2", "180.0", " "}, {"C224", "C136", "C308", "C307", "0.1000", "3", "0.0", " "}, {"C224", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C136", "C500", "C501", "0.0000", "1", "0.0", " "}, {"C224", "C136", "C500", "C514", "-0.3570", "1", "0.0", " "}, {"C224", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C157", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C224", "C157", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C224", "C157", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C224", "C158", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C224", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C224", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C224", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C224", "C206", "S200", "H204", "-0.3795", "1", "0.0", " "}, {"C224", "C206", "S200", "H204", "-0.1410", "2", "180.0", " "}, {"C224", "C206", "S200", "H204", "0.3400", "3", "0.0", " "}, {"C224", "C214", "S203", "S203", "0.9705", "1", "0.0", " "}, {"C224", "C214", "S203", "S203", "-0.4180", "2", "180.0", " "}, {"C224", "C214", "S203", "S203", "0.4675", "3", "0.0", " "}, {"C224", "C235", "N238", "C224", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C224", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "C242", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C242", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "C283", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C283", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "C284", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N238", "C284", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C224", "C235", "N239", "C245", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N239", "C245", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C224", "C235", "N239", "C285", "1.1500", "1", "0.0", " "}, {"C224", "C235", "N239", "C285", "3.0445", "2", "180.0", " "}, {"C223", "C267", "O268", "H270", "0.7500", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"C223", "C267", "O268", "H270", "2.7500", "2", "180.0", "protonated C-terminal Gly, adm jr."}, {"C224", "C267", "O268", "H270", "0.7500", "1", "0.0", " "}, {"C224", "C267", "O268", "H270", "2.7500", "2", "180.0", " "}, {"C224", "C274", "C271", "O272", "1.2500", "1", "0.0", " "}, {"C224", "C274", "C271", "O272", "0.5000", "2", "180.0", " "}, {"C224", "C274", "C271", "O272", "0.6750", "3", "0.0", " "}, {"C224", "C505", "C507", "C508", "0.0000", "1", "0.0", " "}, {"C224", "C505", "C507", "N511", "-0.2800", "1", "0.0", " "}, {"C224", "C505", "C507", "N511", "-0.3700", "2", "180.0", " "}, {"C224", "C505", "C507", "N511", "0.1745", "3", "0.0", " "}, {"C224", "C505", "C508", "C507", "0.0000", "1", "0.0", " "}, {"C224", "C505", "C508", "N503", "-0.2800", "1", "0.0", " "}, {"C224", "C505", "C508", "N503", "-0.3700", "2", "180.0", " "}, {"C224", "C505", "C508", "N503", "0.1745", "3", "0.0", " "}, {"C224", "C505", "C510", "C510", "0.0000", "1", "0.0", " "}, {"C224", "C505", "C510", "N512", "-1.9950", "1", "0.0", " "}, {"C224", "C505", "C510", "N512", "0.8400", "2", "180.0", " "}, {"C224", "C505", "C510", "N512", "0.1450", "3", "0.0", " "}, {"C224", "N238", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C224", "N238", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C224", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C235", "C136", "C136", "C283", "-0.6335", "1", "0.0", " "}, {"C235", "C136", "C136", "C283", "0.2395", "2", "180.0", " "}, {"C235", "C136", "C136", "C283", "-0.2430", "3", "0.0", " "}, {"C235", "C136", "C136", "C293", "-0.6335", "1", "0.0", " "}, {"C235", "C136", "C136", "C293", "0.2395", "2", "180.0", " "}, {"C235", "C136", "C136", "C293", "-0.2430", "3", "0.0", " "}, {"C235", "C136", "C136", "H140", "-0.0500", "3", "0.0", " "}, {"C235", "C136", "C224", "C235", "0.2990", "1", "0.0", " "}, {"C235", "C136", "C224", "C235", "0.7790", "2", "180.0", " "}, {"C235", "C136", "C224", "C235", "0.1275", "3", "0.0", " "}, {"C235", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C235", "C136", "C224", "N238", "-2.7505", "1", "0.0", " "}, {"C235", "C136", "C224", "N238", "0.7635", "2", "180.0", " "}, {"C235", "C136", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C235", "C136", "C283", "C271", "0.2990", "1", "0.0", " "}, {"C235", "C136", "C283", "C271", "0.7790", "2", "180.0", " "}, {"C235", "C136", "C283", "C271", "0.1275", "3", "0.0", " "}, {"C235", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C235", "C136", "C283", "N238", "-2.7505", "1", "0.0", " "}, {"C235", "C136", "C283", "N238", "0.7635", "2", "180.0", " "}, {"C235", "C136", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C235", "C136", "C293", "C235", "0.2990", "1", "0.0", " "}, {"C235", "C136", "C293", "C235", "0.7790", "2", "180.0", " "}, {"C235", "C136", "C293", "C235", "0.1275", "3", "0.0", " "}, {"C235", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C235", "C136", "C293", "N287", "-2.7505", "1", "0.0", " "}, {"C235", "C136", "C293", "N287", "0.7635", "2", "180.0", " "}, {"C235", "C136", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C235", "C223", "N238", "C235", "-1.2555", "1", "0.0", " "}, {"C235", "C223", "N238", "C235", "0.1050", "2", "180.0", " "}, {"C235", "C223", "N238", "C235", "-0.1000", "3", "0.0", " "}, {"C235", "C223", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C235", "C224", "C135", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C136", "C267", "0.2990", "1", "0.0", " "}, {"C235", "C224", "C136", "C267", "0.7790", "2", "180.0", " "}, {"C235", "C224", "C136", "C267", "0.1275", "3", "0.0", " "}, {"C235", "C224", "C136", "C274", "-0.8820", "1", "0.0", " "}, {"C235", "C224", "C136", "C274", "0.3500", "2", "180.0", " "}, {"C235", "C224", "C136", "C274", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C136", "C308", "-0.9855", "1", "0.0", " "}, {"C235", "C224", "C136", "C308", "0.3850", "2", "180.0", " "}, {"C235", "C224", "C136", "C308", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C136", "C500", "-0.2530", "1", "0.0", " "}, {"C235", "C224", "C136", "C500", "0.4875", "2", "180.0", " "}, {"C235", "C224", "C136", "C500", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C137", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C149", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C157", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C157", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C224", "C157", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C224", "C157", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C158", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C158", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C224", "C158", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C224", "C158", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C206", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C206", "S200", "-1.6615", "1", "0.0", " "}, {"C235", "C224", "C206", "S200", "0.2645", "2", "180.0", " "}, {"C235", "C224", "C206", "S200", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C214", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C214", "S203", "-1.6615", "1", "0.0", " "}, {"C235", "C224", "C214", "S203", "0.2645", "2", "180.0", " "}, {"C235", "C224", "C214", "S203", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C274", "C271", "0.7715", "1", "0.0", " "}, {"C235", "C224", "C274", "C271", "0.3480", "2", "180.0", " "}, {"C235", "C224", "C274", "C271", "0.0000", "3", "0.0", " "}, {"C235", "C224", "C274", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "C505", "C507", "-0.6410", "1", "0.0", " "}, {"C235", "C224", "C505", "C507", "0.8225", "2", "180.0", " "}, {"C235", "C224", "C505", "C507", "-0.0085", "3", "0.0", " "}, {"C235", "C224", "C505", "C508", "-0.6410", "1", "0.0", " "}, {"C235", "C224", "C505", "C508", "0.8225", "2", "180.0", " "}, {"C235", "C224", "C505", "C508", "-0.0085", "3", "0.0", " "}, {"C235", "C224", "C505", "C510", "-0.8540", "1", "0.0", " "}, {"C235", "C224", "C505", "C510", "0.7580", "2", "180.0", " "}, {"C235", "C224", "C505", "C510", "-0.2510", "3", "0.0", " "}, {"C235", "C224", "C505", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C224", "N238", "C235", "-1.2555", "1", "0.0", " "}, {"C235", "C224", "N238", "C235", "0.1050", "2", "180.0", " "}, {"C235", "C224", "N238", "C235", "-0.1000", "3", "0.0", " "}, {"C235", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C223", "C267", "-1.2555", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"C235", "N238", "C223", "C267", "0.1050", "2", "180.0", "protonated C-terminal Gly, adm jr."}, {"C235", "N238", "C223", "C267", "-0.1000", "3", "0.0", "protonated C-terminal Gly, adm jr."}, {"C235", "N238", "C224", "C267", "-1.2555", "1", "0.0", " "}, {"C235", "N238", "C224", "C267", "0.1050", "2", "180.0", " "}, {"C235", "N238", "C224", "C267", "-0.1000", "3", "0.0", " "}, {"C235", "C246", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C246", "N239", "C235", "-1.2555", "1", "0.0", " "}, {"C235", "C246", "N239", "C235", "0.1050", "2", "180.0", " "}, {"C235", "C246", "N239", "C235", "-0.1000", "3", "0.0", " "}, {"C235", "C246", "N239", "C245", "-0.8685", "1", "0.0", " "}, {"C235", "C246", "N239", "C245", "0.6255", "2", "180.0", " "}, {"C235", "C246", "N239", "C245", "-1.7505", "3", "0.0", " "}, {"C235", "C292", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C235", "C293", "C135", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C136", "C274", "-0.8820", "1", "0.0", " "}, {"C235", "C293", "C136", "C274", "0.3500", "2", "180.0", " "}, {"C235", "C293", "C136", "C274", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "C308", "-0.9855", "1", "0.0", " "}, {"C235", "C293", "C136", "C308", "0.3850", "2", "180.0", " "}, {"C235", "C293", "C136", "C308", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "C500", "-0.2530", "1", "0.0", " "}, {"C235", "C293", "C136", "C500", "0.4875", "2", "180.0", " "}, {"C235", "C293", "C136", "C500", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C137", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C149", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C157", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C157", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C293", "C157", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C293", "C157", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C158", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C158", "O154", "-2.8965", "1", "0.0", " "}, {"C235", "C293", "C158", "O154", "0.2025", "2", "180.0", " "}, {"C235", "C293", "C158", "O154", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C206", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C206", "S200", "-1.6615", "1", "0.0", " "}, {"C235", "C293", "C206", "S200", "0.2645", "2", "180.0", " "}, {"C235", "C293", "C206", "S200", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C214", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C214", "S203", "-1.6615", "1", "0.0", " "}, {"C235", "C293", "C214", "S203", "0.2645", "2", "180.0", " "}, {"C235", "C293", "C214", "S203", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C274", "C271", "0.7715", "1", "0.0", " "}, {"C235", "C293", "C274", "C271", "0.3480", "2", "180.0", " "}, {"C235", "C293", "C274", "C271", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C274", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "C505", "C507", "-0.6410", "1", "0.0", " "}, {"C235", "C293", "C505", "C507", "0.8225", "2", "180.0", " "}, {"C235", "C293", "C505", "C507", "-0.0085", "3", "0.0", " "}, {"C235", "C293", "C505", "C508", "-0.6410", "1", "0.0", " "}, {"C235", "C293", "C505", "C508", "0.8225", "2", "180.0", " "}, {"C235", "C293", "C505", "C508", "-0.0085", "3", "0.0", " "}, {"C235", "C293", "C505", "C510", "-0.8540", "1", "0.0", " "}, {"C235", "C293", "C505", "C510", "0.7580", "2", "180.0", " "}, {"C235", "C293", "C505", "C510", "-0.2510", "3", "0.0", " "}, {"C235", "C293", "C505", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C235", "C295", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C235", "C295", "N309", "C296", "0.71895", "1", "0.0", " "}, {"C235", "C295", "N309", "C296", "-0.0619", "2", "180.0", " "}, {"C235", "C295", "N309", "C296", "0.13195", "3", "0.0", " "}, {"C235", "C295", "N309", "H310", "0.1735", "3", "0.0", " "}, {"C235", "N238", "C223", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C224", "C274", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C224", "C274", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C224", "C274", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C224", "C505", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C224", "C505", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C224", "C505", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C224", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C242", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C283", "C271", "-1.2555", "1", "0.0", " "}, {"C235", "N238", "C283", "C271", "0.1050", "2", "180.0", " "}, {"C235", "N238", "C283", "C271", "-0.1000", "3", "0.0", " "}, {"C235", "N238", "C283", "C274", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C283", "C274", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C283", "C274", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C283", "C505", "-0.3410", "1", "0.0", " "}, {"C235", "N238", "C283", "C505", "0.0650", "2", "180.0", " "}, {"C235", "N238", "C283", "C505", "0.1690", "3", "0.0", " "}, {"C235", "N238", "C283", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N238", "C284", "C271", "-1.2555", "1", "0.0", " "}, {"C235", "N238", "C284", "C271", "0.1050", "2", "180.0", " "}, {"C235", "N238", "C284", "C271", "-0.1000", "3", "0.0", " "}, {"C235", "N238", "C284", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N239", "C245", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N239", "C246", "H140", "0.0000", "1", "0.0", " "}, {"C235", "N239", "C285", "C271", "-1.2555", "1", "0.0", " "}, {"C235", "N239", "C285", "C271", "0.1050", "2", "180.0", " "}, {"C235", "N239", "C285", "C271", "-0.1000", "3", "0.0", " "}, {"C235", "N239", "C285", "H140", "0.0000", "1", "0.0", " "}, {"C242", "N238", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C242", "N238", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C242", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C245", "C136", "C136", "C246", "0.6500", "1", "0.0", " "}, {"C245", "C136", "C136", "C246", "-0.1000", "2", "180.0", " "}, {"C245", "C136", "C136", "C246", "0.1000", "3", "0.0", " "}, {"C245", "C136", "C136", "C285", "0.6500", "1", "0.0", " "}, {"C245", "C136", "C136", "C285", "-0.1000", "2", "180.0", " "}, {"C245", "C136", "C136", "C285", "0.1000", "3", "0.0", " "}, {"C245", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C245", "N239", "C235", "C246", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C246", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C245", "N239", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C245", "N239", "C246", "H140", "0.0000", "1", "0.0", " "}, {"C245", "N239", "C285", "C271", "-0.8685", "1", "0.0", " "}, {"C245", "N239", "C285", "C271", "0.6255", "2", "180.0", " "}, {"C245", "N239", "C285", "C271", "-1.7505", "3", "0.0", " "}, {"C245", "N239", "C285", "H140", "0.0000", "1", "0.0", " "}, {"C246", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C246", "C235", "N238", "C283", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N238", "C283", "3.0445", "2", "180.0", " "}, {"C246", "C235", "N238", "C284", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N238", "C284", "3.0445", "2", "180.0", " "}, {"C246", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C246", "C235", "N239", "C246", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N239", "C246", "3.0445", "2", "180.0", " "}, {"C246", "C235", "N239", "C285", "1.1500", "1", "0.0", " "}, {"C246", "C235", "N239", "C285", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "C292", "1.1500", "1", "0.0", " "}, {"C246", "N239", "C235", "C292", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "C293", "1.1500", "1", "0.0", " "}, {"C246", "N239", "C235", "C293", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "C295", "1.1500", "1", "0.0", " "}, {"C246", "N239", "C235", "C295", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C246", "N239", "C245", "H140", "0.0000", "1", "0.0", " "}, {"C267", "C136", "C224", "H140", "-0.0380", "3", "0.0", " "}, {"C267", "C136", "C224", "N238", "-2.7505", "1", "0.0", " "}, {"C267", "C136", "C224", "N238", "0.7635", "2", "180.0", " "}, {"C267", "C136", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C267", "C224", "C135", "H140", "0.0370", "3", "0.0", " "}, {"C267", "C223", "N238", "H241", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"C267", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C271", "C274", "C136", "C283", "-0.4425", "1", "0.0", " "}, {"C271", "C274", "C136", "C283", "0.5125", "2", "180.0", " "}, {"C271", "C274", "C136", "C283", "-0.6465", "3", "0.0", " "}, {"C271", "C274", "C136", "C293", "-0.4425", "1", "0.0", " "}, {"C271", "C274", "C136", "C293", "0.5125", "2", "180.0", " "}, {"C271", "C274", "C136", "C293", "-0.6465", "3", "0.0", " "}, {"C271", "C274", "C136", "H140", "-0.1125", "3", "0.0", " "}, {"C271", "C274", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C271", "C274", "C224", "N238", "-3.9450", "1", "0.0", " "}, {"C271", "C274", "C224", "N238", "0.3310", "2", "180.0", " "}, {"C271", "C274", "C224", "N238", "0.4985", "3", "0.0", " "}, {"C271", "C274", "C283", "C271", "0.7715", "1", "0.0", " "}, {"C271", "C274", "C283", "C271", "0.3480", "2", "180.0", " "}, {"C271", "C274", "C283", "C271", "0.0000", "3", "0.0", " "}, {"C271", "C274", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C271", "C274", "C283", "N238", "-3.9450", "1", "0.0", " "}, {"C271", "C274", "C283", "N238", "0.3310", "2", "180.0", " "}, {"C271", "C274", "C283", "N238", "0.4985", "3", "0.0", " "}, {"C271", "C274", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C271", "C274", "C293", "N287", "-3.9450", "1", "0.0", " "}, {"C271", "C274", "C293", "N287", "0.3310", "2", "180.0", " "}, {"C271", "C274", "C293", "N287", "0.4985", "3", "0.0", " "}, {"C271", "C283", "C135", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C136", "C274", "-0.8820", "1", "0.0", " "}, {"C271", "C283", "C136", "C274", "0.3500", "2", "180.0", " "}, {"C271", "C283", "C136", "C274", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C136", "C308", "-0.9855", "1", "0.0", " "}, {"C271", "C283", "C136", "C308", "0.3850", "2", "180.0", " "}, {"C271", "C283", "C136", "C308", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C136", "C500", "-0.2530", "1", "0.0", " "}, {"C271", "C283", "C136", "C500", "0.4875", "2", "180.0", " "}, {"C271", "C283", "C136", "C500", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C137", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C149", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C157", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C157", "O154", "-2.8965", "1", "0.0", " "}, {"C271", "C283", "C157", "O154", "0.2025", "2", "180.0", " "}, {"C271", "C283", "C157", "O154", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C158", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C158", "O154", "-2.8965", "1", "0.0", " "}, {"C271", "C283", "C158", "O154", "0.2025", "2", "180.0", " "}, {"C271", "C283", "C158", "O154", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C206", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C206", "S200", "-1.6615", "1", "0.0", " "}, {"C271", "C283", "C206", "S200", "0.2645", "2", "180.0", " "}, {"C271", "C283", "C206", "S200", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C214", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C214", "S203", "-1.6615", "1", "0.0", " "}, {"C271", "C283", "C214", "S203", "0.2645", "2", "180.0", " "}, {"C271", "C283", "C214", "S203", "0.0000", "3", "0.0", " "}, {"C271", "C283", "C274", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "C505", "C507", "-0.6410", "1", "0.0", " "}, {"C271", "C283", "C505", "C507", "0.8225", "2", "180.0", " "}, {"C271", "C283", "C505", "C507", "-0.0085", "3", "0.0", " "}, {"C271", "C283", "C505", "C508", "-0.6410", "1", "0.0", " "}, {"C271", "C283", "C505", "C508", "0.8225", "2", "180.0", " "}, {"C271", "C283", "C505", "C508", "-0.0085", "3", "0.0", " "}, {"C271", "C283", "C505", "C510", "-0.8540", "1", "0.0", " "}, {"C271", "C283", "C505", "C510", "0.7580", "2", "180.0", " "}, {"C271", "C283", "C505", "C510", "-0.2510", "3", "0.0", " "}, {"C271", "C283", "C505", "H140", "-0.0380", "3", "0.0", " "}, {"C271", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C271", "C284", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C271", "C285", "C136", "H140", "-0.0380", "3", "0.0", " "}, {"C274", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C274", "C136", "C224", "N238", "0.9935", "1", "0.0", " "}, {"C274", "C136", "C224", "N238", "0.2285", "2", "180.0", " "}, {"C274", "C136", "C224", "N238", "0.4100", "3", "0.0", " "}, {"C274", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C274", "C136", "C283", "N238", "0.9935", "1", "0.0", " "}, {"C274", "C136", "C283", "N238", "0.2285", "2", "180.0", " "}, {"C274", "C136", "C283", "N238", "0.4100", "3", "0.0", " "}, {"C274", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C274", "C136", "C293", "N287", "0.9935", "1", "0.0", " "}, {"C274", "C136", "C293", "N287", "0.2285", "2", "180.0", " "}, {"C274", "C136", "C293", "N287", "0.4100", "3", "0.0", " "}, {"C274", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C274", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C274", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C274", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C274", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C274", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C274", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C274", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C274", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C274", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C274", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C274", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C274", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C274", "C293", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C274", "C293", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C274", "C293", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C274", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C274", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C283", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C210", "S202", "-0.7825", "1", "0.0", " "}, {"C283", "C136", "C210", "S202", "-0.0045", "2", "180.0", " "}, {"C283", "C136", "C210", "S202", "-0.2250", "3", "0.0", " "}, {"C283", "C136", "C235", "N237", "0.7470", "1", "0.0", " "}, {"C283", "C136", "C235", "N237", "-0.2555", "2", "180.0", " "}, {"C283", "C136", "C235", "N237", "0.0625", "3", "0.0", " "}, {"C283", "C136", "C235", "O236", "0.8280", "1", "0.0", " "}, {"C283", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C283", "C136", "C235", "O236", "0.2195", "3", "0.0", " "}, {"C283", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C283", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C283", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C283", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C283", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C308", "C307", "0.6500", "1", "0.0", " "}, {"C283", "C136", "C308", "C307", "-0.1000", "2", "180.0", " "}, {"C283", "C136", "C308", "C307", "0.1000", "3", "0.0", " "}, {"C283", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C136", "C500", "C501", "0.0000", "1", "0.0", " "}, {"C283", "C136", "C500", "C514", "-0.3570", "1", "0.0", " "}, {"C283", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C157", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C283", "C157", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C283", "C157", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C283", "C158", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C283", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C283", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C283", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C283", "C206", "S200", "H204", "-0.3795", "1", "0.0", " "}, {"C283", "C206", "S200", "H204", "-0.1410", "2", "180.0", " "}, {"C283", "C206", "S200", "H204", "0.3400", "3", "0.0", " "}, {"C283", "C214", "S203", "S203", "0.9705", "1", "0.0", " "}, {"C283", "C214", "S203", "S203", "-0.4180", "2", "180.0", " "}, {"C283", "C214", "S203", "S203", "0.4675", "3", "0.0", " "}, {"C283", "C274", "C271", "O272", "1.2500", "1", "0.0", " "}, {"C283", "C274", "C271", "O272", "0.5000", "2", "180.0", " "}, {"C283", "C274", "C271", "O272", "0.6750", "3", "0.0", " "}, {"C283", "C505", "C507", "C508", "0.0000", "1", "0.0", " "}, {"C283", "C505", "C507", "N511", "-0.2800", "1", "0.0", " "}, {"C283", "C505", "C507", "N511", "-0.3700", "2", "180.0", " "}, {"C283", "C505", "C507", "N511", "0.1745", "3", "0.0", " "}, {"C283", "C505", "C508", "C507", "0.0000", "1", "0.0", " "}, {"C283", "C505", "C508", "N503", "-0.2800", "1", "0.0", " "}, {"C283", "C505", "C508", "N503", "-0.3700", "2", "180.0", " "}, {"C283", "C505", "C508", "N503", "0.1745", "3", "0.0", " "}, {"C283", "C505", "C510", "C510", "0.0000", "1", "0.0", " "}, {"C283", "C505", "C510", "N512", "-1.9950", "1", "0.0", " "}, {"C283", "C505", "C510", "N512", "0.8400", "2", "180.0", " "}, {"C283", "C505", "C510", "N512", "0.1450", "3", "0.0", " "}, {"C283", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C284", "N238", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C285", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C285", "N239", "C235", "O236", "3.0445", "2", "180.0", " "}, {"C285", "N239", "C245", "H140", "0.0000", "1", "0.0", " "}, {"C292", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C292", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C293", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C210", "S202", "-0.7825", "1", "0.0", " "}, {"C293", "C136", "C210", "S202", "-0.0045", "2", "180.0", " "}, {"C293", "C136", "C210", "S202", "-0.2250", "3", "0.0", " "}, {"C293", "C136", "C235", "N237", "0.7470", "1", "0.0", " "}, {"C293", "C136", "C235", "N237", "-0.2555", "2", "180.0", " "}, {"C293", "C136", "C235", "N237", "0.0625", "3", "0.0", " "}, {"C293", "C136", "C235", "O236", "0.8280", "1", "0.0", " "}, {"C293", "C136", "C235", "O236", "0.6520", "2", "180.0", " "}, {"C293", "C136", "C235", "O236", "0.2195", "3", "0.0", " "}, {"C293", "C136", "C267", "O268", "0.5000", "1", "0.0", " "}, {"C293", "C136", "C267", "O268", "0.2730", "2", "180.0", " "}, {"C293", "C136", "C267", "O268", "0.2250", "3", "0.0", " "}, {"C293", "C136", "C267", "O269", "0.2730", "2", "180.0", " "}, {"C293", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C308", "C307", "0.6500", "1", "0.0", " "}, {"C293", "C136", "C308", "C307", "-0.1000", "2", "180.0", " "}, {"C293", "C136", "C308", "C307", "0.1000", "3", "0.0", " "}, {"C293", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C136", "C500", "C501", "0.0000", "1", "0.0", " "}, {"C293", "C136", "C500", "C514", "-0.3570", "1", "0.0", " "}, {"C293", "C137", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C137", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C157", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C293", "C157", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C293", "C157", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C293", "C158", "C135", "H140", "0.1500", "3", "0.0", " "}, {"C293", "C158", "O154", "H155", "-0.1780", "1", "0.0", " "}, {"C293", "C158", "O154", "H155", "-0.0870", "2", "180.0", " "}, {"C293", "C158", "O154", "H155", "0.2460", "3", "0.0", " "}, {"C293", "C206", "S200", "H204", "-0.3795", "1", "0.0", " "}, {"C293", "C206", "S200", "H204", "-0.1410", "2", "180.0", " "}, {"C293", "C206", "S200", "H204", "0.3400", "3", "0.0", " "}, {"C293", "C214", "S203", "S203", "0.9705", "1", "0.0", " "}, {"C293", "C214", "S203", "S203", "-0.4180", "2", "180.0", " "}, {"C293", "C214", "S203", "S203", "0.4675", "3", "0.0", " "}, {"C293", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C293", "C274", "C271", "O272", "1.2500", "1", "0.0", " "}, {"C293", "C274", "C271", "O272", "0.5000", "2", "180.0", " "}, {"C293", "C274", "C271", "O272", "0.6750", "3", "0.0", " "}, {"C293", "C505", "C507", "C508", "0.0000", "1", "0.0", " "}, {"C293", "C505", "C507", "N511", "-0.2800", "1", "0.0", " "}, {"C293", "C505", "C507", "N511", "-0.3700", "2", "180.0", " "}, {"C293", "C505", "C507", "N511", "0.1745", "3", "0.0", " "}, {"C293", "C505", "C508", "C507", "0.0000", "1", "0.0", " "}, {"C293", "C505", "C508", "N503", "-0.2800", "1", "0.0", " "}, {"C293", "C505", "C508", "N503", "-0.3700", "2", "180.0", " "}, {"C293", "C505", "C508", "N503", "0.1745", "3", "0.0", " "}, {"C293", "C505", "C510", "C510", "0.0000", "1", "0.0", " "}, {"C293", "C505", "C510", "N512", "-1.9950", "1", "0.0", " "}, {"C293", "C505", "C510", "N512", "0.8400", "2", "180.0", " "}, {"C293", "C505", "C510", "N512", "0.1450", "3", "0.0", " "}, {"C295", "C136", "C136", "C296", "0.6500", "1", "0.0", " "}, {"C295", "C136", "C136", "C296", "-0.1000", "2", "180.0", " "}, {"C295", "C136", "C136", "C296", "0.1000", "3", "0.0", " "}, {"C295", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C295", "C235", "N238", "H241", "2.4500", "2", "180.0", " "}, {"C295", "N309", "C296", "H140", "0.15085", "3", "0.0", " "}, {"C296", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C296", "N309", "C295", "H140", "0.15085", "3", "0.0", " "}, {"C302", "N303", "C307", "C308", "0.9145", "1", "0.0", " "}, {"C302", "N303", "C307", "C308", "0.1215", "2", "180.0", " "}, {"C302", "N303", "C307", "C308", "-0.2490", "3", "0.0", " "}, {"C302", "N303", "C307", "H140", "0.0885", "3", "0.0", " "}, {"C307", "C308", "C136", "H140", "0.1500", "3", "0.0", " "}, {"C307", "N303", "C302", "N300", "3.9680", "2", "180.0", " "}, {"C308", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"C308", "C136", "C224", "N238", "0.0515", "1", "0.0", " "}, {"C308", "C136", "C224", "N238", "0.3265", "2", "180.0", " "}, {"C308", "C136", "C224", "N238", "0.2815", "3", "0.0", " "}, {"C308", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"C308", "C136", "C283", "N238", "0.0515", "1", "0.0", " "}, {"C308", "C136", "C283", "N238", "0.3265", "2", "180.0", " "}, {"C308", "C136", "C283", "N238", "0.2815", "3", "0.0", " "}, {"C308", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"C308", "C136", "C293", "N287", "0.0515", "1", "0.0", " "}, {"C308", "C136", "C293", "N287", "0.3265", "2", "180.0", " "}, {"C308", "C136", "C293", "N287", "0.2815", "3", "0.0", " "}, {"C308", "C307", "N303", "H304", "-0.0950", "1", "0.0", " "}, {"C308", "C307", "N303", "H304", "-0.2085", "2", "180.0", " "}, {"C308", "C307", "N303", "H304", "0.2090", "3", "0.0", " "}, {"C500", "C136", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C500", "C136", "C224", "N238", "-0.2940", "1", "0.0", " "}, {"C500", "C136", "C224", "N238", "0.5100", "2", "180.0", " "}, {"C500", "C136", "C224", "N238", "0.3325", "3", "0.0", " "}, {"C500", "C136", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C500", "C136", "C283", "N238", "-0.2940", "1", "0.0", " "}, {"C500", "C136", "C283", "N238", "0.5100", "2", "180.0", " "}, {"C500", "C136", "C283", "N238", "0.3325", "3", "0.0", " "}, {"C500", "C136", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C500", "C136", "C293", "N287", "-0.2940", "1", "0.0", " "}, {"C500", "C136", "C293", "N287", "0.5100", "2", "180.0", " "}, {"C500", "C136", "C293", "N287", "0.3325", "3", "0.0", " "}, {"C500", "C501", "C145", "H146", "3.5000", "2", "180.0", " "}, {"C501", "C500", "C136", "H140", "0.0000", "1", "0.0", " "}, {"C501", "C502", "C145", "H146", "3.6250", "2", "180.0", " "}, {"C502", "C501", "C145", "H146", "3.5000", "2", "180.0", " "}, {"C502", "C501", "C500", "C514", "1.6750", "2", "180.0", " "}, {"C502", "N503", "C514", "H146", "1.5000", "2", "180.0", " "}, {"C505", "C224", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C505", "C224", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C505", "C224", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C505", "C224", "C235", "N239", "0.8895", "1", "0.0", " "}, {"C505", "C224", "C235", "N239", "0.2095", "2", "180.0", " "}, {"C505", "C224", "C235", "N239", "-0.0550", "3", "0.0", " "}, {"C505", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C505", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C505", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"C505", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"C505", "C293", "C235", "N238", "0.8895", "1", "0.0", " "}, {"C505", "C293", "C235", "N238", "0.2095", "2", "180.0", " "}, {"C505", "C293", "C235", "N238", "-0.0550", "3", "0.0", " "}, {"C505", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"C505", "C293", "N287", "H290", "0.1735", "3", "0.0", " "}, {"C505", "C508", "C507", "H146", "5.3750", "2", "180.0", " "}, {"C505", "C508", "C507", "N511", "5.3750", "2", "180.0", " "}, {"C505", "C508", "N503", "C506", "1.4000", "2", "180.0", " "}, {"C505", "C508", "N503", "H504", "1.4000", "2", "180.0", " "}, {"C505", "C510", "N512", "C509", "1.4000", "2", "180.0", " "}, {"C505", "C510", "N512", "H513", "1.4000", "2", "180.0", " "}, {"C506", "N503", "C508", "C507", "1.4000", "2", "180.0", " "}, {"C506", "N503", "C508", "H146", "2.5000", "2", "180.0", " "}, {"C506", "N511", "C507", "C508", "2.4000", "2", "180.0", " "}, {"C506", "N511", "C507", "H146", "2.4000", "2", "180.0", " "}, {"C507", "C505", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C507", "C505", "C224", "N238", "-0.2710", "1", "0.0", " "}, {"C507", "C505", "C224", "N238", "0.2175", "2", "180.0", " "}, {"C507", "C505", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C507", "C505", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C507", "C505", "C283", "N238", "-0.2710", "1", "0.0", " "}, {"C507", "C505", "C283", "N238", "0.2175", "2", "180.0", " "}, {"C507", "C505", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C507", "C505", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C507", "C505", "C293", "N287", "-0.2710", "1", "0.0", " "}, {"C507", "C505", "C293", "N287", "0.2175", "2", "180.0", " "}, {"C507", "C505", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C507", "C508", "C505", "H140", "0.0000", "1", "0.0", " "}, {"C507", "C508", "N503", "H504", "1.4000", "2", "180.0", " "}, {"C507", "N511", "C506", "H146", "5.0000", "2", "180.0", " "}, {"C507", "N511", "C506", "N503", "5.0000", "2", "180.0", " "}, {"C508", "C505", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C508", "C505", "C224", "N238", "-0.2710", "1", "0.0", " "}, {"C508", "C505", "C224", "N238", "0.2175", "2", "180.0", " "}, {"C508", "C505", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C508", "C505", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C508", "C505", "C283", "N238", "-0.2710", "1", "0.0", " "}, {"C508", "C505", "C283", "N238", "0.2175", "2", "180.0", " "}, {"C508", "C505", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C508", "C505", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C508", "C505", "C293", "N287", "-0.2710", "1", "0.0", " "}, {"C508", "C505", "C293", "N287", "0.2175", "2", "180.0", " "}, {"C508", "C505", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C508", "C507", "C505", "H140", "0.0000", "1", "0.0", " "}, {"C508", "N503", "C506", "H146", "2.3250", "2", "180.0", " "}, {"C508", "N503", "C506", "N511", "2.3250", "2", "180.0", " "}, {"C509", "N512", "C510", "C510", "1.4000", "2", "180.0", " "}, {"C509", "N512", "C510", "H146", "2.5000", "2", "180.0", " "}, {"C510", "C505", "C224", "H140", "0.2310", "3", "0.0", " "}, {"C510", "C505", "C224", "N238", "-1.5190", "1", "0.0", " "}, {"C510", "C505", "C224", "N238", "0.2095", "2", "180.0", " "}, {"C510", "C505", "C224", "N238", "0.0000", "3", "0.0", " "}, {"C510", "C505", "C283", "H140", "0.2310", "3", "0.0", " "}, {"C510", "C505", "C283", "N238", "-1.5190", "1", "0.0", " "}, {"C510", "C505", "C283", "N238", "0.2095", "2", "180.0", " "}, {"C510", "C505", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C510", "C505", "C293", "H140", "0.2310", "3", "0.0", " "}, {"C510", "C505", "C293", "N287", "-1.5190", "1", "0.0", " "}, {"C510", "C505", "C293", "N287", "0.2095", "2", "180.0", " "}, {"C510", "C505", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C510", "C510", "C505", "H140", "0.0000", "1", "0.0", " "}, {"C510", "C510", "N512", "H513", "1.4000", "2", "180.0", " "}, {"C510", "N512", "C509", "H146", "2.3250", "2", "180.0", " "}, {"C510", "N512", "C509", "N512", "2.3250", "2", "180.0", " "}, {"C514", "C500", "C136", "H140", "-0.2400", "3", "0.0", " "}, {"H140", "C135", "C136", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C137", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C158", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C135", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C135", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C135", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C135", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C135", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C135", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C135", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C136", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C137", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C210", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C210", "S202", "0.2260", "3", "0.0", " "}, {"H140", "C136", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C235", "N237", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C245", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C245", "N239", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C246", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C246", "N239", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C267", "O268", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C267", "O269", "0.0000", "1", "0.0", " "}, {"H140", "C136", "C274", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C285", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C285", "N239", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C292", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C292", "N287", "0.1920", "3", "0.0", " "}, {"H140", "C136", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C136", "C295", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C295", "N309", "0.1920", "3", "0.0", " "}, {"H140", "C136", "C296", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C136", "C296", "N309", "0.1920", "3", "0.0", " "}, {"H140", "C136", "C308", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C137", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C137", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C137", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C149", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C149", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C149", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C149", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C149", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C149", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C157", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C157", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C157", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C157", "O154", "H155", "0.1762", "3", "0.0", " "}, {"H140", "C158", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C158", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C158", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C158", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C158", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C158", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C158", "O154", "H155", "0.1762", "3", "0.0", " "}, {"H140", "C206", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C206", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C206", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C206", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C206", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C206", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C206", "S200", "H204", "0.2400", "3", "0.0", " "}, {"H140", "C214", "C224", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C214", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C214", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C214", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C214", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C214", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C214", "S203", "S203", "0.2790", "3", "0.0", " "}, {"H140", "C223", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C223", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C223", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C223", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C157", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C224", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C224", "C206", "S200", "0.2260", "3", "0.0", " "}, {"H140", "C224", "C214", "S203", "0.2260", "3", "0.0", " "}, {"H140", "C224", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C223", "C267", "O268", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"H140", "C223", "C267", "O269", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"H140", "C224", "C267", "O268", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C267", "O269", "0.0000", "1", "0.0", " "}, {"H140", "C224", "C274", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C224", "C505", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C224", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C242", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C246", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C246", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C246", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C274", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C274", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C274", "C283", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C274", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C274", "C293", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C274", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C283", "C157", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C283", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C283", "C206", "S200", "0.2260", "3", "0.0", " "}, {"H140", "C283", "C214", "S203", "0.2260", "3", "0.0", " "}, {"H140", "C283", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C283", "C505", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C283", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C284", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C284", "N238", "H241", "0.0000", "1", "0.0", " "}, {"H140", "C285", "C271", "O272", "0.0000", "1", "0.0", " "}, {"H140", "C292", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C292", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C292", "N287", "H290", "0.1305", "3", "0.0", " "}, {"H140", "C293", "C157", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C293", "C158", "O154", "0.2340", "3", "0.0", " "}, {"H140", "C293", "C206", "S200", "0.2260", "3", "0.0", " "}, {"H140", "C293", "C214", "S203", "0.2260", "3", "0.0", " "}, {"H140", "C293", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C293", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C293", "C505", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C293", "N287", "H290", "0.1305", "3", "0.0", " "}, {"H140", "C295", "C235", "N238", "0.0000", "1", "0.0", " "}, {"H140", "C295", "C235", "N239", "0.0000", "1", "0.0", " "}, {"H140", "C295", "C235", "O236", "0.0000", "1", "0.0", " "}, {"H140", "C295", "N309", "H310", "0.1305", "3", "0.0", " "}, {"H140", "C296", "N309", "H310", "0.1920", "3", "0.0", " "}, {"H140", "C307", "C308", "H140", "0.1500", "3", "0.0", " "}, {"H140", "C307", "N303", "H304", "0.0000", "1", "0.0", " "}, {"H140", "C308", "C307", "N303", "-0.2910", "3", "0.0", " "}, {"H140", "C505", "C224", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C505", "C283", "N238", "0.2320", "3", "0.0", " "}, {"H140", "C505", "C293", "N287", "0.2320", "3", "0.0", " "}, {"H140", "C505", "C507", "N511", "0.2095", "3", "0.0", " "}, {"H140", "C505", "C508", "N503", "0.2095", "3", "0.0", " "}, {"H140", "C505", "C510", "N512", "0.2095", "3", "0.0", " "}, {"H146", "C508", "C507", "N511", "5.3750", "2", "180.0", " "}, {"H146", "C508", "N503", "H504", "2.5000", "2", "180.0", " "}, {"H146", "C510", "N512", "H513", "2.5000", "2", "180.0", " "}, {"H240", "N237", "C235", "O236", "2.4500", "2", "180.0", " "}, {"H241", "N238", "C235", "O236", "2.4500", "2", "180.0", " "}, {"H270", "O268", "C267", "O269", "2.7500", "2", "180.0", " "}, {"H301", "N300", "C302", "N300", "1.9500", "2", "180.0", " "}, {"H301", "N300", "C302", "N303", "1.9500", "2", "180.0", " "}, {"H304", "N303", "C302", "N300", "1.9500", "2", "180.0", " "}, {"H504", "N503", "C506", "N511", "2.3250", "2", "180.0", " "}, {"H513", "N512", "C509", "N512", "2.3250", "2", "180.0", " "}, {"N238", "C223", "C235", "N238", "0.9050", "1", "0.0", " "}, {"N238", "C223", "C235", "N238", "1.0775", "2", "180.0", " "}, {"N238", "C223", "C235", "N238", "-0.2350", "3", "0.0", " "}, {"N238", "C223", "C235", "N239", "0.9050", "1", "0.0", " "}, {"N238", "C223", "C235", "N239", "1.0775", "2", "180.0", " "}, {"N238", "C223", "C235", "N239", "-0.2350", "3", "0.0", " "}, {"N238", "C223", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N238", "C224", "C157", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C224", "C157", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C224", "C157", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C224", "C158", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C224", "C158", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C224", "C158", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C224", "C206", "S200", "1.0275", "1", "0.0", " "}, {"N238", "C224", "C206", "S200", "0.2645", "2", "180.0", " "}, {"N238", "C224", "C206", "S200", "0.2720", "3", "0.0", " "}, {"N238", "C224", "C214", "S203", "1.0275", "1", "0.0", " "}, {"N238", "C224", "C214", "S203", "0.2645", "2", "180.0", " "}, {"N238", "C224", "C214", "S203", "0.2720", "3", "0.0", " "}, {"N238", "C224", "C235", "N238", "0.9050", "1", "0.0", " "}, {"N238", "C224", "C235", "N238", "1.0775", "2", "180.0", " "}, {"N238", "C224", "C235", "N238", "-0.2350", "3", "0.0", " "}, {"N238", "C224", "C235", "N239", "0.9050", "1", "0.0", " "}, {"N238", "C224", "C235", "N239", "1.0775", "2", "180.0", " "}, {"N238", "C224", "C235", "N239", "-0.2350", "3", "0.0", " "}, {"N238", "C224", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N238", "C223", "C267", "O268", "2.6300", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C223", "C267", "O268", "0.4100", "2", "180.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C223", "C267", "O268", "0.0000", "3", "0.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C224", "C267", "O268", "2.6300", "1", "0.0", " "}, {"N238", "C224", "C267", "O268", "0.4100", "2", "180.0", " "}, {"N238", "C224", "C267", "O268", "0.0000", "3", "0.0", " "}, {"N238", "C223", "C267", "O269", "0.0000", "1", "0.0", "protonated C-terminal Gly, adm jr."}, {"N238", "C224", "C267", "O269", "0.0000", "1", "0.0", " "}, {"N238", "C235", "C246", "N239", "-0.4700", "1", "0.0", " "}, {"N238", "C235", "C246", "N239", "1.3775", "2", "180.0", " "}, {"N238", "C235", "C246", "N239", "-1.3350", "3", "0.0", " "}, {"N238", "C235", "C292", "N287", "0.9050", "1", "0.0", " "}, {"N238", "C235", "C292", "N287", "1.0775", "2", "180.0", " "}, {"N238", "C235", "C292", "N287", "-0.2350", "3", "0.0", " "}, {"N238", "C235", "C293", "N287", "0.9050", "1", "0.0", " "}, {"N238", "C235", "C293", "N287", "1.0775", "2", "180.0", " "}, {"N238", "C235", "C293", "N287", "-0.2350", "3", "0.0", " "}, {"N238", "C235", "C295", "N309", "-0.4700", "1", "0.0", " "}, {"N238", "C235", "C295", "N309", "1.3775", "2", "180.0", " "}, {"N238", "C235", "C295", "N309", "-1.3350", "3", "0.0", " "}, {"N238", "C283", "C157", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C283", "C157", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C283", "C157", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C283", "C158", "O154", "3.1290", "1", "0.0", " "}, {"N238", "C283", "C158", "O154", "-0.5185", "2", "180.0", " "}, {"N238", "C283", "C158", "O154", "0.6835", "3", "0.0", " "}, {"N238", "C283", "C206", "S200", "1.0275", "1", "0.0", " "}, {"N238", "C283", "C206", "S200", "0.2645", "2", "180.0", " "}, {"N238", "C283", "C206", "S200", "0.2720", "3", "0.0", " "}, {"N238", "C283", "C214", "S203", "1.0275", "1", "0.0", " "}, {"N238", "C283", "C214", "S203", "0.2645", "2", "180.0", " "}, {"N238", "C283", "C214", "S203", "0.2720", "3", "0.0", " "}, {"N238", "C283", "C271", "O272", "0.4100", "2", "180.0", " "}, {"N238", "C284", "C271", "O272", "0.4100", "2", "180.0", " "}, {"N239", "C235", "C246", "N239", "-0.4700", "1", "0.0", " "}, {"N239", "C235", "C246", "N239", "1.3775", "2", "180.0", " "}, {"N239", "C235", "C246", "N239", "-1.3350", "3", "0.0", " "}, {"N239", "C235", "C293", "N287", "0.9050", "1", "0.0", " "}, {"N239", "C235", "C293", "N287", "1.0775", "2", "180.0", " "}, {"N239", "C235", "C293", "N287", "-0.2350", "3", "0.0", " "}, {"N239", "C235", "C295", "N309", "-0.4700", "1", "0.0", " "}, {"N239", "C235", "C295", "N309", "1.3775", "2", "180.0", " "}, {"N239", "C235", "C295", "N309", "-1.3350", "3", "0.0", " "}, {"N239", "C246", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N239", "C285", "C271", "O272", "0.4100", "2", "180.0", " "}, {"N287", "C292", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N287", "C293", "C157", "O154", "3.1290", "1", "0.0", " "}, {"N287", "C293", "C157", "O154", "-0.5185", "2", "180.0", " "}, {"N287", "C293", "C157", "O154", "0.6835", "3", "0.0", " "}, {"N287", "C293", "C158", "O154", "3.1290", "1", "0.0", " "}, {"N287", "C293", "C158", "O154", "-0.5185", "2", "180.0", " "}, {"N287", "C293", "C158", "O154", "0.6835", "3", "0.0", " "}, {"N287", "C293", "C206", "S200", "1.0275", "1", "0.0", " "}, {"N287", "C293", "C206", "S200", "0.2645", "2", "180.0", " "}, {"N287", "C293", "C206", "S200", "0.2720", "3", "0.0", " "}, {"N287", "C293", "C214", "S203", "1.0275", "1", "0.0", " "}, {"N287", "C293", "C214", "S203", "0.2645", "2", "180.0", " "}, {"N287", "C293", "C214", "S203", "0.2720", "3", "0.0", " "}, {"N287", "C293", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N309", "C295", "C235", "O236", "0.0000", "1", "0.0", " "}, {"N503", "C508", "C507", "N511", "5.3750", "2", "180.0", " "}, {"C267", "C136", "C293", "N287", "-2.7505", "1", "0.0", " "}, {"C267", "C136", "C293", "N287", "0.7635", "2", "180.0", " "}, {"C267", "C136", "C293", "N287", "0.0000", "3", "0.0", " "}, {"C235", "C293", "C136", "C267", "0.2990", "1", "0.0", " "}, {"C235", "C293", "C136", "C267", "0.7790", "2", "180.0", " "}, {"C235", "C293", "C136", "C267", "0.1275", "3", "0.0", " "}, {"C267", "C136", "C283", "N238", "-2.7505", "1", "0.0", " "}, {"C267", "C136", "C283", "N238", "0.7635", "2", "180.0", " "}, {"C267", "C136", "C283", "N238", "0.0000", "3", "0.0", " "}, {"C267", "C136", "C283", "C271", "0.2990", "1", "0.0", " "}, {"C267", "C136", "C283", "C271", "0.7790", "2", "180.0", " "}, {"C267", "C136", "C283", "C271", "0.1275", "3", "0.0", " "}, {"O340", "C334", "N335", "C336", "0.0000", "1", "0.0", " "}, {"O340", "C334", "N335", "C336", "3.6250", "2", "180.0", " "}, {"O340", "C334", "N335", "C336", "0.0000", "3", "0.0", " "}, {"O340", "C334", "N335", "C336", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C933", "C174", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C933", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C933", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C324", "C323", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C324", "C323", "2.5000", "2", "180.0", " "}, {"C933", "N938", "C324", "C323", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C324", "C323", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C320", "O326", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C320", "O326", "3.6250", "2", "180.0", " "}, {"C933", "N938", "C320", "O326", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C320", "O326", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C324", "H330", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C324", "H330", "2.5000", "2", "180.0", " "}, {"C933", "N938", "C324", "H330", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C324", "H330", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C933", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C933", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C933", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C933", "C174", "O169", "H170", "1.3370", "1", "0.0", " "}, {"C933", "C174", "O169", "H170", "-1.4415", "2", "180.0", " "}, {"C933", "C174", "O169", "H170", "0.5130", "3", "0.0", " "}, {"C933", "C174", "O169", "H170", "0.0000", "4", "180.0", " "}, {"C933", "N938", "C320", "N321", "0.0000", "1", "0.0", " "}, {"C933", "N938", "C320", "N321", "3.6250", "2", "180.0", " "}, {"C933", "N938", "C320", "N321", "0.0000", "3", "0.0", " "}, {"C933", "N938", "C320", "N321", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C933", "O186", "0.2000", "1", "0.0", " "}, {"C324", "N938", "C933", "O186", "-1.4000", "2", "180.0", " "}, {"C324", "N938", "C933", "O186", "-0.3000", "3", "0.0", " "}, {"C324", "N938", "C933", "O186", "0.0000", "4", "180.0", " "}, {"O186", "C933", "C174", "C174", "-0.2180", "1", "0.0", " "}, {"O186", "C933", "C174", "C174", "0.4500", "2", "180.0", " "}, {"O186", "C933", "C174", "C174", "0.0000", "3", "0.0", " "}, {"O186", "C933", "C174", "C174", "0.0000", "4", "180.0", " "}, {"O186", "C933", "C174", "O169", "2.1595", "1", "0.0", " "}, {"O186", "C933", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O186", "C933", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O186", "C933", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O186", "C933", "C174", "H176", "0.0000", "1", "0.0", " "}, {"O186", "C933", "C174", "H176", "0.0000", "2", "180.0", " "}, {"O186", "C933", "C174", "H176", "0.2340", "3", "0.0", " "}, {"O186", "C933", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C933", "C174", "C174", "C183", "0.6500", "1", "0.0", " "}, {"C933", "C174", "C174", "C183", "-0.1000", "2", "180.0", " "}, {"C933", "C174", "C174", "C183", "0.1000", "3", "0.0", " "}, {"C933", "C174", "C174", "C183", "0.0000", "4", "180.0", " "}, {"N938", "C933", "O186", "C183", "-0.2500", "1", "0.0", " "}, {"N938", "C933", "O186", "C183", "-0.7500", "2", "180.0", " "}, {"N938", "C933", "O186", "C183", "0.5000", "3", "0.0", " "}, {"N938", "C933", "O186", "C183", "0.0000", "4", "180.0", " "}, {"C933", "O186", "C183", "H185", "0.0000", "1", "0.0", " "}, {"C933", "O186", "C183", "H185", "0.0000", "2", "180.0", " "}, {"C933", "O186", "C183", "H185", "0.3800", "3", "0.0", " "}, {"C933", "O186", "C183", "H185", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C933", "O186", "-0.1000", "1", "0.0", " "}, {"C320", "N938", "C933", "O186", "-1.2500", "2", "180.0", " "}, {"C320", "N938", "C933", "O186", "0.3500", "3", "0.0", " "}, {"C320", "N938", "C933", "O186", "0.0000", "4", "180.0", " "}, {"C174", "C933", "O186", "C183", "0.3250", "1", "0.0", " "}, {"C174", "C933", "O186", "C183", "-0.1250", "2", "180.0", " "}, {"C174", "C933", "O186", "C183", "-0.2350", "3", "0.0", " "}, {"C174", "C933", "O186", "C183", "0.0000", "4", "180.0", " "}, {"H196", "C933", "O186", "C183", "0.0000", "1", "0.0", " "}, {"H196", "C933", "O186", "C183", "0.0000", "2", "180.0", " "}, {"H196", "C933", "O186", "C183", "0.3800", "3", "0.0", " "}, {"H196", "C933", "O186", "C183", "0.0000", "4", "180.0", " "}, {"N335", "C336", "N341", "H342", "0.0000", "1", "0.0", " "}, {"N335", "C336", "N341", "H342", "1.9500", "2", "180.0", " "}, {"N335", "C336", "N341", "H342", "0.0000", "3", "0.0", " "}, {"N335", "C336", "N341", "H342", "0.0000", "4", "180.0", " "}, {"N335", "C336", "N341", "H343", "0.0000", "1", "0.0", " "}, {"N335", "C336", "N341", "H343", "1.9500", "2", "180.0", " "}, {"N335", "C336", "N341", "H343", "0.0000", "3", "0.0", " "}, {"N335", "C336", "N341", "H343", "0.0000", "4", "180.0", " "}, {"N937", "C334", "N335", "C336", "0.0000", "1", "0.0", " "}, {"N937", "C334", "N335", "C336", "3.6250", "2", "180.0", " "}, {"N937", "C334", "N335", "C336", "0.0000", "3", "0.0", " "}, {"N937", "C334", "N335", "C336", "0.0000", "4", "180.0", " "}, {"C338", "C337", "C336", "N335", "0.0000", "1", "0.0", " "}, {"C338", "C337", "C336", "N335", "3.5000", "2", "180.0", " "}, {"C338", "C337", "C336", "N335", "0.0000", "3", "0.0", " "}, {"C338", "C337", "C336", "N335", "0.0000", "4", "180.0", " "}, {"C337", "C336", "N335", "C334", "0.0000", "1", "0.0", " "}, {"C337", "C336", "N335", "C334", "3.6250", "2", "180.0", " "}, {"C337", "C336", "N335", "C334", "0.0000", "3", "0.0", " "}, {"C337", "C336", "N335", "C334", "0.0000", "4", "180.0", " "}, {"H344", "C337", "C336", "N335", "0.0000", "1", "0.0", " "}, {"H344", "C337", "C336", "N335", "3.5000", "2", "180.0", " "}, {"H344", "C337", "C336", "N335", "0.0000", "3", "0.0", " "}, {"H344", "C337", "C336", "N335", "0.0000", "4", "180.0", " "}, {"N341", "C336", "N335", "C334", "0.0000", "1", "0.0", " "}, {"N341", "C336", "N335", "C334", "3.6250", "2", "180.0", " "}, {"N341", "C336", "N335", "C334", "0.0000", "3", "0.0", " "}, {"N341", "C336", "N335", "C334", "0.0000", "4", "180.0", " "}, {"C932", "O186", "C183", "C174", "0.3250", "1", "0.0", " "}, {"C932", "O186", "C183", "C174", "-0.1250", "2", "180.0", " "}, {"C932", "O186", "C183", "C174", "-0.2350", "3", "0.0", " "}, {"C932", "O186", "C183", "C174", "0.0000", "4", "180.0", " "}, {"H344", "C337", "C336", "N341", "0.0000", "1", "0.0", " "}, {"H344", "C337", "C336", "N341", "3.5000", "2", "180.0", " "}, {"H344", "C337", "C336", "N341", "0.0000", "3", "0.0", " "}, {"H344", "C337", "C336", "N341", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C932", "C174", "-0.3500", "1", "0.0", " "}, {"C334", "N937", "C932", "C174", "-0.2000", "2", "180.0", " "}, {"C334", "N937", "C932", "C174", "0.1500", "3", "0.0", " "}, {"C334", "N937", "C932", "C174", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C334", "O340", "0.0000", "1", "0.0", " "}, {"C338", "N937", "C334", "O340", "3.6250", "2", "180.0", " "}, {"C338", "N937", "C334", "O340", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C334", "O340", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C338", "C337", "0.0000", "1", "0.0", " "}, {"C334", "N937", "C338", "C337", "3.6250", "2", "180.0", " "}, {"C334", "N937", "C338", "C337", "0.0000", "3", "0.0", " "}, {"C334", "N937", "C338", "C337", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C338", "H345", "0.0000", "1", "0.0", " "}, {"C334", "N937", "C338", "H345", "3.6250", "2", "180.0", " "}, {"C334", "N937", "C338", "H345", "0.0000", "3", "0.0", " "}, {"C334", "N937", "C338", "H345", "0.0000", "4", "180.0", " "}, {"H345", "C338", "C337", "C336", "0.0000", "1", "0.0", " "}, {"H345", "C338", "C337", "C336", "7.0000", "2", "180.0", " "}, {"H345", "C338", "C337", "C336", "0.0000", "3", "0.0", " "}, {"H345", "C338", "C337", "C336", "0.0000", "4", "180.0", " "}, {"H345", "C338", "C337", "H344", "0.0000", "1", "0.0", " "}, {"H345", "C338", "C337", "H344", "7.0000", "2", "180.0", " "}, {"H345", "C338", "C337", "H344", "0.0000", "3", "0.0", " "}, {"H345", "C338", "C337", "H344", "0.0000", "4", "180.0", " "}, {"C337", "C336", "N341", "H342", "0.0000", "1", "0.0", " "}, {"C337", "C336", "N341", "H342", "1.9500", "2", "180.0", " "}, {"C337", "C336", "N341", "H342", "0.0000", "3", "0.0", " "}, {"C337", "C336", "N341", "H342", "0.0000", "4", "180.0", " "}, {"C337", "C336", "N341", "H343", "0.0000", "1", "0.0", " "}, {"C337", "C336", "N341", "H343", "1.9500", "2", "180.0", " "}, {"C337", "C336", "N341", "H343", "0.0000", "3", "0.0", " "}, {"C337", "C336", "N341", "H343", "0.0000", "4", "180.0", " "}, {"N937", "C932", "C174", "C174", "1.1960", "1", "0.0", " "}, {"N937", "C932", "C174", "C174", "-0.3370", "2", "180.0", " "}, {"N937", "C932", "C174", "C174", "0.2750", "3", "0.0", " "}, {"N937", "C932", "C174", "C174", "0.0000", "4", "180.0", " "}, {"N937", "C932", "C174", "O169", "4.0000", "1", "0.0", " "}, {"N937", "C932", "C174", "O169", "0.0000", "2", "180.0", " "}, {"N937", "C932", "C174", "O169", "0.0000", "3", "0.0", " "}, {"N937", "C932", "C174", "O169", "0.0000", "4", "180.0", " "}, {"N937", "C932", "C174", "H176", "-0.5065", "1", "0.0", " "}, {"N937", "C932", "C174", "H176", "-0.3545", "2", "180.0", " "}, {"N937", "C932", "C174", "H176", "0.2365", "3", "0.0", " "}, {"N937", "C932", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C338", "C337", "C336", "N341", "0.0000", "1", "0.0", " "}, {"C338", "C337", "C336", "N341", "3.5000", "2", "180.0", " "}, {"C338", "C337", "C336", "N341", "0.0000", "3", "0.0", " "}, {"C338", "C337", "C336", "N341", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C932", "C174", "0.2000", "1", "0.0", " "}, {"C338", "N937", "C932", "C174", "-0.2500", "2", "180.0", " "}, {"C338", "N937", "C932", "C174", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C932", "C174", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "1", "0.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "2", "180.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C933", "H196", "0.0000", "4", "180.0", " "}, {"O326", "C320", "N321", "H327", "0.0000", "1", "0.0", " "}, {"O326", "C320", "N321", "H327", "3.6250", "2", "180.0", " "}, {"O326", "C320", "N321", "H327", "0.0000", "3", "0.0", " "}, {"O326", "C320", "N321", "H327", "0.0000", "4", "180.0", " "}, {"O328", "C322", "C323", "H329", "0.0000", "1", "0.0", " "}, {"O328", "C322", "C323", "H329", "3.6250", "2", "180.0", " "}, {"O328", "C322", "C323", "H329", "0.0000", "3", "0.0", " "}, {"O328", "C322", "C323", "H329", "0.0000", "4", "180.0", " "}, {"O326", "C320", "N321", "C322", "0.0000", "1", "0.0", " "}, {"O326", "C320", "N321", "C322", "3.6250", "2", "180.0", " "}, {"O326", "C320", "N321", "C322", "0.0000", "3", "0.0", " "}, {"O326", "C320", "N321", "C322", "0.0000", "4", "180.0", " "}, {"H327", "N321", "C322", "O328", "0.0000", "1", "0.0", " "}, {"H327", "N321", "C322", "O328", "3.6250", "2", "180.0", " "}, {"H327", "N321", "C322", "O328", "0.0000", "3", "0.0", " "}, {"H327", "N321", "C322", "O328", "0.0000", "4", "180.0", " "}, {"H327", "N321", "C322", "C323", "0.0000", "1", "0.0", " "}, {"H327", "N321", "C322", "C323", "3.6250", "2", "180.0", " "}, {"H327", "N321", "C322", "C323", "0.0000", "3", "0.0", " "}, {"H327", "N321", "C322", "C323", "0.0000", "4", "180.0", " "}, {"N321", "C322", "C323", "H329", "0.0000", "1", "0.0", " "}, {"N321", "C322", "C323", "H329", "3.6250", "2", "180.0", " "}, {"N321", "C322", "C323", "H329", "0.0000", "3", "0.0", " "}, {"N321", "C322", "C323", "H329", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C324", "H330", "0.0000", "1", "0.0", " "}, {"C320", "N938", "C324", "H330", "3.6250", "2", "180.0", " "}, {"C320", "N938", "C324", "H330", "0.0000", "3", "0.0", " "}, {"C320", "N938", "C324", "H330", "0.0000", "4", "180.0", " "}, {"H330", "C324", "C323", "C322", "0.0000", "1", "0.0", " "}, {"H330", "C324", "C323", "C322", "7.0000", "2", "180.0", " "}, {"H330", "C324", "C323", "C322", "0.0000", "3", "0.0", " "}, {"H330", "C324", "C323", "C322", "0.0000", "4", "180.0", " "}, {"C320", "N321", "C322", "O328", "0.0000", "1", "0.0", " "}, {"C320", "N321", "C322", "O328", "3.6250", "2", "180.0", " "}, {"C320", "N321", "C322", "O328", "0.0000", "3", "0.0", " "}, {"C320", "N321", "C322", "O328", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C933", "C174", "-0.3500", "1", "0.0", " "}, {"C320", "N938", "C933", "C174", "-0.2000", "2", "180.0", " "}, {"C320", "N938", "C933", "C174", "0.1500", "3", "0.0", " "}, {"C320", "N938", "C933", "C174", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C324", "C323", "0.0000", "1", "0.0", " "}, {"C320", "N938", "C324", "C323", "3.6250", "2", "180.0", " "}, {"C320", "N938", "C324", "C323", "0.0000", "3", "0.0", " "}, {"C320", "N938", "C324", "C323", "0.0000", "4", "180.0", " "}, {"H330", "C324", "C323", "H329", "0.0000", "1", "0.0", " "}, {"H330", "C324", "C323", "H329", "7.0000", "2", "180.0", " "}, {"H330", "C324", "C323", "H329", "0.0000", "3", "0.0", " "}, {"H330", "C324", "C323", "H329", "0.0000", "4", "180.0", " "}, {"C320", "N321", "C322", "C323", "0.0000", "1", "0.0", " "}, {"C320", "N321", "C322", "C323", "3.6250", "2", "180.0", " "}, {"C320", "N321", "C322", "C323", "0.0000", "3", "0.0", " "}, {"C320", "N321", "C322", "C323", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C320", "O326", "0.0000", "1", "0.0", " "}, {"C324", "N938", "C320", "O326", "3.6250", "2", "180.0", " "}, {"C324", "N938", "C320", "O326", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C320", "O326", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C320", "N321", "0.0000", "1", "0.0", " "}, {"C324", "N938", "C320", "N321", "3.6250", "2", "180.0", " "}, {"C324", "N938", "C320", "N321", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C320", "N321", "0.0000", "4", "180.0", " "}, {"C324", "N938", "C933", "C174", "0.2000", "1", "0.0", " "}, {"C324", "N938", "C933", "C174", "-0.2500", "2", "180.0", " "}, {"C324", "N938", "C933", "C174", "0.0000", "3", "0.0", " "}, {"C324", "N938", "C933", "C174", "0.0000", "4", "180.0", " "}, {"O328", "C322", "C323", "C324", "0.0000", "1", "0.0", " "}, {"O328", "C322", "C323", "C324", "3.5000", "2", "180.0", " "}, {"O328", "C322", "C323", "C324", "0.0000", "3", "0.0", " "}, {"O328", "C322", "C323", "C324", "0.0000", "4", "180.0", " "}, {"N321", "C322", "C323", "C324", "0.0000", "1", "0.0", " "}, {"N321", "C322", "C323", "C324", "3.5000", "2", "180.0", " "}, {"N321", "C322", "C323", "C324", "0.0000", "3", "0.0", " "}, {"N321", "C322", "C323", "C324", "0.0000", "4", "180.0", " "}, {"N938", "C933", "C174", "H176", "-0.5065", "1", "0.0", " "}, {"N938", "C933", "C174", "H176", "-0.3545", "2", "180.0", " "}, {"N938", "C933", "C174", "H176", "0.2365", "3", "0.0", " "}, {"N938", "C933", "C174", "H176", "0.0000", "4", "180.0", " "}, {"N938", "C933", "C174", "O169", "4.0000", "1", "0.0", " "}, {"N938", "C933", "C174", "O169", "0.0000", "2", "180.0", " "}, {"N938", "C933", "C174", "O169", "0.0000", "3", "0.0", " "}, {"N938", "C933", "C174", "O169", "0.0000", "4", "180.0", " "}, {"N938", "C933", "C174", "C174", "1.1960", "1", "0.0", " "}, {"N938", "C933", "C174", "C174", "-0.3370", "2", "180.0", " "}, {"N938", "C933", "C174", "C174", "0.2750", "3", "0.0", " "}, {"N938", "C933", "C174", "C174", "0.0000", "4", "180.0", " "}, {"N938", "C324", "C323", "C322", "0.0000", "1", "0.0", " "}, {"N938", "C324", "C323", "C322", "7.0000", "2", "180.0", " "}, {"N938", "C324", "C323", "C322", "0.0000", "3", "0.0", " "}, {"N938", "C324", "C323", "C322", "0.0000", "4", "180.0", " "}, {"N938", "C324", "C323", "H329", "0.0000", "1", "0.0", " "}, {"N938", "C324", "C323", "H329", "7.0000", "2", "180.0", " "}, {"N938", "C324", "C323", "H329", "0.0000", "3", "0.0", " "}, {"N938", "C324", "C323", "H329", "0.0000", "4", "180.0", " "}, {"H196", "C933", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H196", "C933", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H196", "C933", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H196", "C933", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H196", "C933", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H196", "C933", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H196", "C933", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H196", "C933", "C174", "H176", "0.0000", "4", "180.0", " "}, {"N938", "C320", "N321", "H327", "0.0000", "1", "0.0", " "}, {"N938", "C320", "N321", "H327", "3.6250", "2", "180.0", " "}, {"N938", "C320", "N321", "H327", "0.0000", "3", "0.0", " "}, {"N938", "C320", "N321", "H327", "0.0000", "4", "180.0", " "}, {"N938", "C320", "N321", "C322", "0.0000", "1", "0.0", " "}, {"N938", "C320", "N321", "C322", "3.6250", "2", "180.0", " "}, {"N938", "C320", "N321", "C322", "0.0000", "3", "0.0", " "}, {"N938", "C320", "N321", "C322", "0.0000", "4", "180.0", " "}, {"H196", "C933", "C174", "C174", "0.0000", "1", "0.0", " "}, {"H196", "C933", "C174", "C174", "0.0000", "2", "180.0", " "}, {"H196", "C933", "C174", "C174", "0.1500", "3", "0.0", " "}, {"H196", "C933", "C174", "C174", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C334", "N335", "0.0000", "1", "0.0", " "}, {"C338", "N937", "C334", "N335", "3.6250", "2", "180.0", " "}, {"C338", "N937", "C334", "N335", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C334", "N335", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "1", "0.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "2", "180.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "3", "0.0", " "}, {"C334", "N937", "C932", "H196", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "1", "0.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "2", "180.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "3", "0.0", " "}, {"C338", "N937", "C932", "H196", "0.0000", "4", "180.0", " "}, {"H196", "C932", "C174", "C174", "0.0000", "1", "0.0", " "}, {"H196", "C932", "C174", "C174", "0.0000", "2", "180.0", " "}, {"H196", "C932", "C174", "C174", "0.1500", "3", "0.0", " "}, {"H196", "C932", "C174", "C174", "0.0000", "4", "180.0", " "}, {"H196", "C932", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H196", "C932", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H196", "C932", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H196", "C932", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H196", "C932", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H196", "C932", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H196", "C932", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H196", "C932", "C174", "H176", "0.0000", "4", "180.0", " "}, {"N937", "C338", "C337", "C336", "0.0000", "1", "0.0", " "}, {"N937", "C338", "C337", "C336", "7.0000", "2", "180.0", " "}, {"N937", "C338", "C337", "C336", "0.0000", "3", "0.0", " "}, {"N937", "C338", "C337", "C336", "0.0000", "4", "180.0", " "}, {"N937", "C338", "C337", "H344", "0.0000", "1", "0.0", " "}, {"N937", "C338", "C337", "H344", "7.0000", "2", "180.0", " "}, {"N937", "C338", "C337", "H344", "0.0000", "3", "0.0", " "}, {"N937", "C338", "C337", "H344", "0.0000", "4", "180.0", " "}, {"C338", "N937", "C932", "O186", "0.2000", "1", "0.0", " "}, {"C338", "N937", "C932", "O186", "-1.4000", "2", "180.0", " "}, {"C338", "N937", "C932", "O186", "-0.3000", "3", "0.0", " "}, {"C338", "N937", "C932", "O186", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C334", "N335", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C334", "N335", "3.6250", "2", "180.0", " "}, {"C932", "N937", "C334", "N335", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C334", "N335", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C334", "O340", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C334", "O340", "3.6250", "2", "180.0", " "}, {"C932", "N937", "C334", "O340", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C334", "O340", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C338", "H345", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C338", "H345", "2.5000", "2", "180.0", " "}, {"C932", "N937", "C338", "H345", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C338", "H345", "0.0000", "4", "180.0", " "}, {"C932", "N937", "C338", "C337", "0.0000", "1", "0.0", " "}, {"C932", "N937", "C338", "C337", "2.5000", "2", "180.0", " "}, {"C932", "N937", "C338", "C337", "0.0000", "3", "0.0", " "}, {"C932", "N937", "C338", "C337", "0.0000", "4", "180.0", " "}, {"C932", "C174", "O169", "H170", "1.3370", "1", "0.0", " "}, {"C932", "C174", "O169", "H170", "-1.4415", "2", "180.0", " "}, {"C932", "C174", "O169", "H170", "0.5130", "3", "0.0", " "}, {"C932", "C174", "O169", "H170", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C932", "C174", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C932", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C932", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C932", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C932", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C932", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"O186", "C932", "C174", "H176", "0.0000", "1", "0.0", " "}, {"O186", "C932", "C174", "H176", "0.0000", "2", "180.0", " "}, {"O186", "C932", "C174", "H176", "0.2340", "3", "0.0", " "}, {"O186", "C932", "C174", "H176", "0.0000", "4", "180.0", " "}, {"O186", "C932", "C174", "O169", "2.1595", "1", "0.0", " "}, {"O186", "C932", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O186", "C932", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O186", "C932", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O186", "C932", "C174", "C174", "-0.2180", "1", "0.0", " "}, {"O186", "C932", "C174", "C174", "0.4500", "2", "180.0", " "}, {"O186", "C932", "C174", "C174", "0.0000", "3", "0.0", " "}, {"O186", "C932", "C174", "C174", "0.0000", "4", "180.0", " "}, {"N937", "C932", "O186", "C183", "-0.2500", "1", "0.0", " "}, {"N937", "C932", "O186", "C183", "-0.7500", "2", "180.0", " "}, {"N937", "C932", "O186", "C183", "0.5000", "3", "0.0", " "}, {"N937", "C932", "O186", "C183", "0.0000", "4", "180.0", " "}, {"C932", "O186", "C183", "H185", "0.0000", "1", "0.0", " "}, {"C932", "O186", "C183", "H185", "0.0000", "2", "180.0", " "}, {"C932", "O186", "C183", "H185", "0.3800", "3", "0.0", " "}, {"C932", "O186", "C183", "H185", "0.0000", "4", "180.0", " "}, {"C334", "N937", "C932", "O186", "-0.1000", "1", "0.0", " "}, {"C334", "N937", "C932", "O186", "-1.2580", "2", "180.0", " "}, {"C334", "N937", "C932", "O186", "0.3500", "3", "0.0", " "}, {"C334", "N937", "C932", "O186", "0.0000", "4", "180.0", " "}, {"C174", "C932", "O186", "C183", "0.3250", "1", "0.0", " "}, {"C174", "C932", "O186", "C183", "-0.1250", "2", "180.0", " "}, {"C174", "C932", "O186", "C183", "-0.2350", "3", "0.0", " "}, {"C174", "C932", "O186", "C183", "0.0000", "4", "180.0", " "}, {"H196", "C932", "O186", "C183", "0.0000", "1", "0.0", " "}, {"H196", "C932", "O186", "C183", "0.0000", "2", "180.0", " "}, {"H196", "C932", "O186", "C183", "0.3800", "3", "0.0", " "}, {"H196", "C932", "O186", "C183", "0.0000", "4", "180.0", " "}, {"C932", "C174", "C174", "C183", "0.6500", "1", "0.0", " "}, {"C932", "C174", "C174", "C183", "-0.1000", "2", "180.0", " "}, {"C932", "C174", "C174", "C183", "0.1000", "3", "0.0", " "}, {"C932", "C174", "C174", "C183", "0.0000", "4", "180.0", " "}, {"C931", "N936", "C364", "C365", "0.0000", "1", "0.0", " "}, {"C931", "N936", "C364", "C365", "2.5000", "2", "180.0", " "}, {"C931", "N936", "C364", "C365", "0.0000", "3", "0.0", " "}, {"C931", "N936", "C364", "C365", "0.0000", "4", "180.0", " "}, {"N936", "C353", "N352", "C365", "0.0000", "1", "0.0", " "}, {"N936", "C353", "N352", "C365", "5.0000", "2", "180.0", " "}, {"N936", "C353", "N352", "C365", "0.0000", "3", "0.0", " "}, {"N936", "C353", "N352", "C365", "0.0000", "4", "180.0", " "}, {"N936", "C364", "N363", "C362", "0.0000", "1", "0.0", " "}, {"N936", "C364", "N363", "C362", "3.6250", "2", "180.0", " "}, {"N936", "C364", "N363", "C362", "0.0000", "3", "0.0", " "}, {"N936", "C364", "N363", "C362", "0.0000", "4", "180.0", " "}, {"N936", "C364", "C365", "C366", "0.0000", "1", "0.0", " "}, {"N936", "C364", "C365", "C366", "3.6250", "2", "180.0", " "}, {"N936", "C364", "C365", "C366", "0.0000", "3", "0.0", " "}, {"N936", "C364", "C365", "C366", "0.0000", "4", "180.0", " "}, {"N936", "C364", "C365", "N352", "0.0000", "1", "0.0", " "}, {"N936", "C364", "C365", "N352", "3.6250", "2", "180.0", " "}, {"N936", "C364", "C365", "N352", "0.0000", "3", "0.0", " "}, {"N936", "C364", "C365", "N352", "0.0000", "4", "180.0", " "}, {"C364", "C365", "C366", "N361", "0.0000", "1", "0.0", " "}, {"C364", "C365", "C366", "N361", "3.5000", "2", "180.0", " "}, {"C364", "C365", "C366", "N361", "0.0000", "3", "0.0", " "}, {"C364", "C365", "C366", "N361", "0.0000", "4", "180.0", " "}, {"C364", "C365", "C366", "O370", "0.0000", "1", "0.0", " "}, {"C364", "C365", "C366", "O370", "3.5000", "2", "180.0", " "}, {"C364", "C365", "C366", "O370", "0.0000", "3", "0.0", " "}, {"C364", "C365", "C366", "O370", "0.0000", "4", "180.0", " "}, {"C364", "C365", "N352", "C353", "0.0000", "1", "0.0", " "}, {"C364", "C365", "N352", "C353", "3.6250", "2", "180.0", " "}, {"C364", "C365", "N352", "C353", "0.0000", "3", "0.0", " "}, {"C364", "C365", "N352", "C353", "0.0000", "4", "180.0", " "}, {"C364", "N363", "C362", "N368", "0.0000", "1", "0.0", " "}, {"C364", "N363", "C362", "N368", "3.6250", "2", "180.0", " "}, {"C364", "N363", "C362", "N368", "0.0000", "3", "0.0", " "}, {"C364", "N363", "C362", "N368", "0.0000", "4", "180.0", " "}, {"C364", "N363", "C362", "N361", "0.0000", "1", "0.0", " "}, {"C364", "N363", "C362", "N361", "3.6250", "2", "180.0", " "}, {"C364", "N363", "C362", "N361", "0.0000", "3", "0.0", " "}, {"C364", "N363", "C362", "N361", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C353", "N352", "0.0000", "1", "0.0", " "}, {"C364", "N936", "C353", "N352", "3.6250", "2", "180.0", " "}, {"C364", "N936", "C353", "N352", "0.0000", "3", "0.0", " "}, {"C364", "N936", "C353", "N352", "0.0000", "4", "180.0", " "}, {"N363", "C362", "N368", "H369", "0.0000", "1", "0.0", " "}, {"N363", "C362", "N368", "H369", "1.9500", "2", "180.0", " "}, {"N363", "C362", "N368", "H369", "0.0000", "3", "0.0", " "}, {"N363", "C362", "N368", "H369", "0.0000", "4", "180.0", " "}, {"H367", "N361", "C362", "N363", "0.0000", "1", "0.0", " "}, {"H367", "N361", "C362", "N363", "3.6250", "2", "180.0", " "}, {"H367", "N361", "C362", "N363", "0.0000", "3", "0.0", " "}, {"H367", "N361", "C362", "N363", "0.0000", "4", "180.0", " "}, {"C366", "N361", "C362", "N363", "0.0000", "1", "0.0", " "}, {"C366", "N361", "C362", "N363", "3.6250", "2", "180.0", " "}, {"C366", "N361", "C362", "N363", "0.0000", "3", "0.0", " "}, {"C366", "N361", "C362", "N363", "0.0000", "4", "180.0", " "}, {"N363", "C364", "C365", "C366", "0.0000", "1", "0.0", " "}, {"N363", "C364", "C365", "C366", "3.6250", "2", "180.0", " "}, {"N363", "C364", "C365", "C366", "0.0000", "3", "0.0", " "}, {"N363", "C364", "C365", "C366", "0.0000", "4", "180.0", " "}, {"N363", "C364", "C365", "N352", "0.0000", "1", "0.0", " "}, {"N363", "C364", "C365", "N352", "3.6250", "2", "180.0", " "}, {"N363", "C364", "C365", "N352", "0.0000", "3", "0.0", " "}, {"N363", "C364", "C365", "N352", "0.0000", "4", "180.0", " "}, {"O370", "C366", "N361", "C362", "0.0000", "1", "0.0", " "}, {"O370", "C366", "N361", "C362", "3.0445", "2", "180.0", " "}, {"O370", "C366", "N361", "C362", "0.0000", "3", "0.0", " "}, {"O370", "C366", "N361", "C362", "0.0000", "4", "180.0", " "}, {"C365", "C364", "N363", "C362", "0.0000", "1", "0.0", " "}, {"C365", "C364", "N363", "C362", "3.6250", "2", "180.0", " "}, {"C365", "C364", "N363", "C362", "0.0000", "3", "0.0", " "}, {"C365", "C364", "N363", "C362", "0.0000", "4", "180.0", " "}, {"O370", "C366", "N361", "H367", "0.0000", "1", "0.0", " "}, {"O370", "C366", "N361", "H367", "2.4500", "2", "180.0", " "}, {"O370", "C366", "N361", "H367", "0.0000", "3", "0.0", " "}, {"O370", "C366", "N361", "H367", "0.0000", "4", "180.0", " "}, {"C366", "C365", "N352", "C353", "0.0000", "1", "0.0", " "}, {"C366", "C365", "N352", "C353", "3.6250", "2", "180.0", " "}, {"C366", "C365", "N352", "C353", "0.0000", "3", "0.0", " "}, {"C366", "C365", "N352", "C353", "0.0000", "4", "180.0", " "}, {"N352", "C365", "C366", "O370", "0.0000", "1", "0.0", " "}, {"N352", "C365", "C366", "O370", "3.5000", "2", "180.0", " "}, {"N352", "C365", "C366", "O370", "0.0000", "3", "0.0", " "}, {"N352", "C365", "C366", "O370", "0.0000", "4", "180.0", " "}, {"H359", "C353", "N352", "C365", "0.0000", "1", "0.0", " "}, {"H359", "C353", "N352", "C365", "5.0000", "2", "180.0", " "}, {"H359", "C353", "N352", "C365", "0.0000", "3", "0.0", " "}, {"H359", "C353", "N352", "C365", "0.0000", "4", "180.0", " "}, {"C353", "N936", "C364", "C365", "0.0000", "1", "0.0", " "}, {"C353", "N936", "C364", "C365", "3.6250", "2", "180.0", " "}, {"C353", "N936", "C364", "C365", "0.0000", "3", "0.0", " "}, {"C353", "N936", "C364", "C365", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C931", "O186", "0.2000", "1", "0.0", " "}, {"C364", "N936", "C931", "O186", "-0.6000", "2", "180.0", " "}, {"C364", "N936", "C931", "O186", "0.6000", "3", "0.0", " "}, {"C364", "N936", "C931", "O186", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C931", "C174", "-0.3500", "1", "0.0", " "}, {"C364", "N936", "C931", "C174", "-0.0500", "2", "180.0", " "}, {"C364", "N936", "C931", "C174", "0.3000", "3", "0.0", " "}, {"C364", "N936", "C931", "C174", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C353", "H359", "0.0000", "1", "0.0", " "}, {"C364", "N936", "C353", "H359", "3.6250", "2", "180.0", " "}, {"C364", "N936", "C353", "H359", "0.0000", "3", "0.0", " "}, {"C364", "N936", "C353", "H359", "0.0000", "4", "180.0", " "}, {"H367", "N361", "C362", "N368", "0.0000", "1", "0.0", " "}, {"H367", "N361", "C362", "N368", "3.6250", "2", "180.0", " "}, {"H367", "N361", "C362", "N368", "0.0000", "3", "0.0", " "}, {"H367", "N361", "C362", "N368", "0.0000", "4", "180.0", " "}, {"C366", "N361", "C362", "N368", "0.0000", "1", "0.0", " "}, {"C366", "N361", "C362", "N368", "3.6250", "2", "180.0", " "}, {"C366", "N361", "C362", "N368", "0.0000", "3", "0.0", " "}, {"C366", "N361", "C362", "N368", "0.0000", "4", "180.0", " "}, {"N361", "C362", "N368", "H369", "0.0000", "1", "0.0", " "}, {"N361", "C362", "N368", "H369", "1.9500", "2", "180.0", " "}, {"N361", "C362", "N368", "H369", "0.0000", "3", "0.0", " "}, {"N361", "C362", "N368", "H369", "0.0000", "4", "180.0", " "}, {"C353", "N936", "C364", "N363", "0.0000", "1", "0.0", " "}, {"C353", "N936", "C364", "N363", "3.6250", "2", "180.0", " "}, {"C353", "N936", "C364", "N363", "0.0000", "3", "0.0", " "}, {"C353", "N936", "C364", "N363", "0.0000", "4", "180.0", " "}, {"C365", "C366", "N361", "C362", "1.1500", "1", "0.0", " "}, {"C365", "C366", "N361", "C362", "3.0445", "2", "180.0", " "}, {"C365", "C366", "N361", "C362", "0.0000", "3", "0.0", " "}, {"C365", "C366", "N361", "C362", "0.0000", "4", "180.0", " "}, {"N352", "C365", "C366", "N361", "0.0000", "1", "0.0", " "}, {"N352", "C365", "C366", "N361", "3.5000", "2", "180.0", " "}, {"N352", "C365", "C366", "N361", "0.0000", "3", "0.0", " "}, {"N352", "C365", "C366", "N361", "0.0000", "4", "180.0", " "}, {"C365", "C366", "N361", "H367", "0.0000", "1", "0.0", " "}, {"C365", "C366", "N361", "H367", "2.4500", "2", "180.0", " "}, {"C365", "C366", "N361", "H367", "0.0000", "3", "0.0", " "}, {"C365", "C366", "N361", "H367", "0.0000", "4", "180.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "1", "0.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "2", "180.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "3", "0.0", " "}, {"C364", "N936", "C931", "H196", "0.0000", "4", "180.0", " "}, {"C931", "N936", "C364", "N363", "0.0000", "1", "0.0", " "}, {"C931", "N936", "C364", "N363", "2.5000", "2", "180.0", " "}, {"C931", "N936", "C364", "N363", "0.0000", "3", "0.0", " "}, {"C931", "N936", "C364", "N363", "0.0000", "4", "180.0", " "}, {"C183", "C6448", "O6934", "P440", "-0.7100", "1", "0.0", " "}, {"C183", "C6448", "O6934", "P440", "-0.3100", "2", "180.0", " "}, {"C183", "C6448", "O6934", "P440", "0.0500", "3", "0.0", " "}, {"C183", "C6448", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C6448", "O6934", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C6448", "O6934", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C6448", "O6934", "0.2340", "3", "0.0", " "}, {"H185", "C183", "C6448", "O6934", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C6448", "H140", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C6448", "H140", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C6448", "H140", "0.1500", "3", "0.0", " "}, {"H185", "C183", "C6448", "H140", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C6448", "O6934", "3.7595", "1", "0.0", " "}, {"O186", "C183", "C6448", "O6934", "-0.6000", "2", "180.0", " "}, {"O186", "C183", "C6448", "O6934", "-0.0500", "3", "0.0", " "}, {"O186", "C183", "C6448", "O6934", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C6448", "H140", "0.0000", "1", "0.0", " "}, {"O186", "C183", "C6448", "H140", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C6448", "H140", "0.2340", "3", "0.0", " "}, {"O186", "C183", "C6448", "H140", "0.0000", "4", "180.0", " "}, {"C933", "O186", "C183", "C174", "0.3250", "1", "0.0", " "}, {"C933", "O186", "C183", "C174", "-0.1250", "2", "180.0", " "}, {"C933", "O186", "C183", "C174", "-0.2350", "3", "0.0", " "}, {"C933", "O186", "C183", "C174", "0.0000", "4", "180.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "1", "0.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "2", "180.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "3", "0.0", " "}, {"C320", "N938", "C933", "H196", "0.0000", "4", "180.0", " "}, {"C933", "O186", "C183", "C6448", "0.3250", "1", "0.0", " "}, {"C933", "O186", "C183", "C6448", "-0.1250", "2", "180.0", " "}, {"C933", "O186", "C183", "C6448", "-0.2650", "3", "0.0", " "}, {"C933", "O186", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C931", "O186", "C183", "C6448", "0.3250", "1", "0.0", " "}, {"C931", "O186", "C183", "C6448", "-0.1250", "2", "180.0", " "}, {"C931", "O186", "C183", "C6448", "-0.2650", "3", "0.0", " "}, {"C931", "O186", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C932", "O186", "C183", "C6448", "0.3250", "1", "0.0", " "}, {"C932", "O186", "C183", "C6448", "-0.1250", "2", "180.0", " "}, {"C932", "O186", "C183", "C6448", "-0.2650", "3", "0.0", " "}, {"C932", "O186", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C6448", "C183", "C174", "C174", "0.6500", "1", "0.0", " "}, {"C6448", "C183", "C174", "C174", "-0.1000", "2", "180.0", " "}, {"C6448", "C183", "C174", "C174", "0.1000", "3", "0.0", " "}, {"C6448", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"C174", "C183", "C6448", "O6934", "0.7000", "1", "0.0", " "}, {"C174", "C183", "C6448", "O6934", "0.2500", "2", "180.0", " "}, {"C174", "C183", "C6448", "O6934", "1.0500", "3", "0.0", " "}, {"C174", "C183", "C6448", "O6934", "0.0000", "4", "180.0", " "}, {"C174", "C183", "C6448", "H140", "0.0000", "1", "0.0", " "}, {"C174", "C183", "C6448", "H140", "0.0000", "2", "180.0", " "}, {"C174", "C183", "C6448", "H140", "0.1500", "3", "0.0", " "}, {"C174", "C183", "C6448", "H140", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C183", "C6448", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C183", "C6448", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C183", "C6448", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C183", "C6448", "-0.2180", "1", "0.0", " "}, {"O169", "C174", "C183", "C6448", "0.4500", "2", "180.0", " "}, {"O169", "C174", "C183", "C6448", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C183", "C6448", "0.0000", "4", "180.0", " "}, {"C6448", "O6934", "P440", "O441", "0.4000", "1", "0.0", " "}, {"C6448", "O6934", "P440", "O441", "0.1500", "2", "180.0", " "}, {"C6448", "O6934", "P440", "O441", "0.0500", "3", "0.0", " "}, {"C6448", "O6934", "P440", "O441", "0.0000", "4", "180.0", " "}, {"C6448", "O6934", "P440", "O6452", "-0.4500", "1", "0.0", " "}, {"C6448", "O6934", "P440", "O6452", "-0.2500", "2", "180.0", " "}, {"C6448", "O6934", "P440", "O6452", "0.1000", "3", "0.0", " "}, {"C6448", "O6934", "P440", "O6452", "0.0000", "4", "180.0", " "}, {"H140", "C6448", "O6934", "P440", "0.0000", "1", "0.0", " "}, {"H140", "C6448", "O6934", "P440", "0.0000", "2", "180.0", " "}, {"H140", "C6448", "O6934", "P440", "0.1500", "3", "0.0", " "}, {"H140", "C6448", "O6934", "P440", "0.0000", "4", "180.0", " "}, {"O6934", "P440", "O6452", "P6450", "-0.0500", "1", "0.0", " "}, {"O6934", "P440", "O6452", "P6450", "-0.2000", "2", "180.0", " "}, {"O6934", "P440", "O6452", "P6450", "0.0500", "3", "0.0", " "}, {"O6934", "P440", "O6452", "P6450", "0.0000", "4", "180.0", " "}, {"O6934", "P440", "O6452", "P440", "-0.0500", "1", "0.0", " "}, {"O6934", "P440", "O6452", "P440", "-0.2000", "2", "180.0", " "}, {"O6934", "P440", "O6452", "P440", "0.0500", "3", "0.0", " "}, {"O6934", "P440", "O6452", "P440", "0.0000", "4", "180.0", " "}, {"P440", "O6452", "P6450", "O441", "0.1500", "1", "0.0", " "}, {"P440", "O6452", "P6450", "O441", "0.1500", "2", "180.0", " "}, {"P440", "O6452", "P6450", "O441", "0.0000", "3", "0.0", " "}, {"P440", "O6452", "P6450", "O441", "0.0000", "4", "180.0", " "}, {"P6450", "O6452", "P440", "O441", "0.1500", "1", "0.0", " "}, {"P6450", "O6452", "P440", "O441", "0.1500", "2", "180.0", " "}, {"P6450", "O6452", "P440", "O441", "0.0000", "3", "0.0", " "}, {"P6450", "O6452", "P440", "O441", "0.0000", "4", "180.0", " "}, {"P440", "O6452", "P440", "O441", "0.1500", "1", "0.0", " "}, {"P440", "O6452", "P440", "O441", "0.1500", "2", "180.0", " "}, {"P440", "O6452", "P440", "O441", "0.0000", "3", "0.0", " "}, {"P440", "O6452", "P440", "O441", "0.0000", "4", "180.0", " "}, {"P440", "O6452", "P440", "O6442", "-0.0500", "1", "0.0", " "}, {"P440", "O6452", "P440", "O6442", "-0.2000", "2", "180.0", " "}, {"P440", "O6452", "P440", "O6442", "0.0500", "3", "0.0", " "}, {"P440", "O6452", "P440", "O6442", "0.0000", "4", "180.0", " "}, {"O6452", "P440", "O6442", "P6450", "-0.0500", "1", "0.0", " "}, {"O6452", "P440", "O6442", "P6450", "-0.2000", "2", "180.0", " "}, {"O6452", "P440", "O6442", "P6450", "0.0500", "3", "0.0", " "}, {"O6452", "P440", "O6442", "P6450", "0.0000", "4", "180.0", " "}, {"P440", "O6442", "P6450", "O6441", "0.0000", "1", "0.0", " "}, {"P440", "O6442", "P6450", "O6441", "0.0000", "2", "180.0", " "}, {"P440", "O6442", "P6450", "O6441", "-0.0500", "3", "0.0", " "}, {"P440", "O6442", "P6450", "O6441", "0.0000", "4", "180.0", " "}, {"O441", "P440", "O6442", "P6450", "0.1500", "1", "0.0", " "}, {"O441", "P440", "O6442", "P6450", "0.1500", "2", "180.0", " "}, {"O441", "P440", "O6442", "P6450", "0.0000", "3", "0.0", " "}, {"O441", "P440", "O6442", "P6450", "0.0000", "4", "180.0", " "}, {"H355", "C347", "N346", "C351", "0.0000", "1", "0.0", " "}, {"H355", "C347", "N346", "C351", "3.6250", "2", "180.0", " "}, {"H355", "C347", "N346", "C351", "0.0000", "3", "0.0", " "}, {"H355", "C347", "N346", "C351", "0.0000", "4", "180.0", " "}, {"H359", "C353", "N936", "C931", "0.0000", "1", "0.0", " "}, {"H359", "C353", "N936", "C931", "5.0000", "2", "180.0", " "}, {"H359", "C353", "N936", "C931", "0.0000", "3", "0.0", " "}, {"H359", "C353", "N936", "C931", "0.0000", "4", "180.0", " "}, {"O186", "C931", "N936", "C349", "0.2000", "1", "0.0", " "}, {"O186", "C931", "N936", "C349", "-0.6000", "2", "180.0", " "}, {"O186", "C931", "N936", "C349", "0.6000", "3", "0.0", " "}, {"O186", "C931", "N936", "C349", "0.0000", "4", "180.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "1", "0.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "2", "180.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "3", "0.0", " "}, {"H196", "C931", "N936", "C349", "0.0000", "4", "180.0", " "}, {"C174", "C931", "N936", "C353", "0.0500", "1", "0.0", " "}, {"C174", "C931", "N936", "C353", "-0.3500", "2", "180.0", " "}, {"C174", "C931", "N936", "C353", "-0.1500", "3", "0.0", " "}, {"C174", "C931", "N936", "C353", "0.0000", "4", "180.0", " "}, {"O186", "C931", "N936", "C353", "1.8000", "1", "0.0", " "}, {"O186", "C931", "N936", "C353", "-1.8000", "2", "180.0", " "}, {"O186", "C931", "N936", "C353", "0.6000", "3", "0.0", " "}, {"O186", "C931", "N936", "C353", "0.0000", "4", "180.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "1", "0.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "2", "180.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "3", "0.0", " "}, {"H196", "C931", "N936", "C353", "0.0000", "4", "180.0", " "}, {"N348", "C349", "N936", "C931", "0.0000", "1", "0.0", " "}, {"N348", "C349", "N936", "C931", "2.5000", "2", "180.0", " "}, {"N348", "C349", "N936", "C931", "0.0000", "3", "0.0", " "}, {"N348", "C349", "N936", "C931", "0.0000", "4", "180.0", " "}, {"C350", "C349", "N936", "C353", "0.0000", "1", "0.0", " "}, {"C350", "C349", "N936", "C353", "3.6250", "2", "180.0", " "}, {"C350", "C349", "N936", "C353", "0.0000", "3", "0.0", " "}, {"C350", "C349", "N936", "C353", "0.0000", "4", "180.0", " "}, {"N348", "C349", "N936", "C353", "0.0000", "1", "0.0", " "}, {"N348", "C349", "N936", "C353", "3.6250", "2", "180.0", " "}, {"N348", "C349", "N936", "C353", "0.0000", "3", "0.0", " "}, {"N348", "C349", "N936", "C353", "0.0000", "4", "180.0", " "}, {"N352", "C353", "N936", "C931", "0.0000", "1", "0.0", " "}, {"N352", "C353", "N936", "C931", "5.0000", "2", "180.0", " "}, {"N352", "C353", "N936", "C931", "0.0000", "3", "0.0", " "}, {"N352", "C353", "N936", "C931", "0.0000", "4", "180.0", " "}, {"N352", "C353", "N936", "C349", "0.0000", "1", "0.0", " "}, {"N352", "C353", "N936", "C349", "3.6250", "2", "180.0", " "}, {"N352", "C353", "N936", "C349", "0.0000", "3", "0.0", " "}, {"N352", "C353", "N936", "C349", "0.0000", "4", "180.0", " "}, {"H359", "C353", "N936", "C349", "0.0000", "1", "0.0", " "}, {"H359", "C353", "N936", "C349", "3.6250", "2", "180.0", " "}, {"H359", "C353", "N936", "C349", "0.0000", "3", "0.0", " "}, {"H359", "C353", "N936", "C349", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C931", "N936", "4.0000", "1", "0.0", " "}, {"O169", "C174", "C931", "N936", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C931", "N936", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C931", "N936", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C931", "N936", "-0.5065", "1", "0.0", " "}, {"H176", "C174", "C931", "N936", "-0.3545", "2", "180.0", " "}, {"H176", "C174", "C931", "N936", "0.2365", "3", "0.0", " "}, {"H176", "C174", "C931", "N936", "0.0000", "4", "180.0", " "}, {"C174", "C174", "C931", "O186", "-0.2180", "1", "0.0", " "}, {"C174", "C174", "C931", "O186", "0.4500", "2", "180.0", " "}, {"C174", "C174", "C931", "O186", "0.0000", "3", "0.0", " "}, {"C174", "C174", "C931", "O186", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C931", "O186", "2.1595", "1", "0.0", " "}, {"O169", "C174", "C931", "O186", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C931", "O186", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C931", "O186", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C931", "O186", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C931", "O186", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C931", "O186", "0.2340", "3", "0.0", " "}, {"H176", "C174", "C931", "O186", "0.0000", "4", "180.0", " "}, {"C174", "C174", "C931", "H196", "0.0000", "1", "0.0", " "}, {"C174", "C174", "C931", "H196", "0.0000", "2", "180.0", " "}, {"C174", "C174", "C931", "H196", "0.1500", "3", "0.0", " "}, {"C174", "C174", "C931", "H196", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C931", "H196", "0.0000", "1", "0.0", " "}, {"O169", "C174", "C931", "H196", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C931", "H196", "0.2340", "3", "0.0", " "}, {"O169", "C174", "C931", "H196", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C931", "H196", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C931", "H196", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C931", "H196", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C931", "H196", "0.0000", "4", "180.0", " "}, {"C183", "O186", "C931", "N936", "-0.2500", "1", "0.0", " "}, {"C183", "O186", "C931", "N936", "-0.7500", "2", "180.0", " "}, {"C183", "O186", "C931", "N936", "0.5000", "3", "0.0", " "}, {"C183", "O186", "C931", "N936", "0.0000", "4", "180.0", " "}, {"C183", "O186", "C931", "C174", "0.3250", "1", "0.0", " "}, {"C183", "O186", "C931", "C174", "-0.1250", "2", "180.0", " "}, {"C183", "O186", "C931", "C174", "-0.2650", "3", "0.0", " "}, {"C183", "O186", "C931", "C174", "0.0000", "4", "180.0", " "}, {"C183", "O186", "C931", "H196", "0.0000", "1", "0.0", " "}, {"C183", "O186", "C931", "H196", "0.0000", "2", "180.0", " "}, {"C183", "O186", "C931", "H196", "0.3800", "3", "0.0", " "}, {"C183", "O186", "C931", "H196", "0.0000", "4", "180.0", " "}, {"N352", "C350", "C349", "N936", "0.0000", "1", "0.0", " "}, {"N352", "C350", "C349", "N936", "3.6250", "2", "180.0", " "}, {"N352", "C350", "C349", "N936", "0.0000", "3", "0.0", " "}, {"N352", "C350", "C349", "N936", "0.0000", "4", "180.0", " "}, {"C351", "C350", "C349", "N348", "0.0000", "1", "0.0", " "}, {"C351", "C350", "C349", "N348", "3.6250", "2", "180.0", " "}, {"C351", "C350", "C349", "N348", "0.0000", "3", "0.0", " "}, {"C351", "C350", "C349", "N348", "0.0000", "4", "180.0", " "}, {"N352", "C350", "C349", "N348", "0.0000", "1", "0.0", " "}, {"N352", "C350", "C349", "N348", "3.6250", "2", "180.0", " "}, {"N352", "C350", "C349", "N348", "0.0000", "3", "0.0", " "}, {"N352", "C350", "C349", "N348", "0.0000", "4", "180.0", " "}, {"C347", "N348", "C349", "N936", "0.0000", "1", "0.0", " "}, {"C347", "N348", "C349", "N936", "3.6250", "2", "180.0", " "}, {"C347", "N348", "C349", "N936", "0.0000", "3", "0.0", " "}, {"C347", "N348", "C349", "N936", "0.0000", "4", "180.0", " "}, {"C347", "N348", "C349", "C350", "0.0000", "1", "0.0", " "}, {"C347", "N348", "C349", "C350", "3.6250", "2", "180.0", " "}, {"C347", "N348", "C349", "C350", "0.0000", "3", "0.0", " "}, {"C347", "N348", "C349", "C350", "0.0000", "4", "180.0", " "}, {"C350", "N352", "C353", "N936", "0.0000", "1", "0.0", " "}, {"C350", "N352", "C353", "N936", "5.0000", "2", "180.0", " "}, {"C350", "N352", "C353", "N936", "0.0000", "3", "0.0", " "}, {"C350", "N352", "C353", "N936", "0.0000", "4", "180.0", " "}, {"C350", "N352", "C353", "H359", "0.0000", "1", "0.0", " "}, {"C350", "N352", "C353", "H359", "5.0000", "2", "180.0", " "}, {"C350", "N352", "C353", "H359", "0.0000", "3", "0.0", " "}, {"C350", "N352", "C353", "H359", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C174", "C931", "-0.2180", "1", "0.0", " "}, {"O169", "C174", "C174", "C931", "0.4500", "2", "180.0", " "}, {"O169", "C174", "C174", "C931", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C174", "C931", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "C931", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C174", "C931", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "C931", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C174", "C931", "0.0000", "4", "180.0", " "}, {"C183", "C174", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C183", "C174", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C183", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C183", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O169", "C174", "C174", "O169", "4.5330", "1", "0.0", " "}, {"O169", "C174", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O169", "C174", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O169", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H176", "C174", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C183", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C183", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C183", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C183", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"H176", "C174", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H176", "C174", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H176", "C174", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H176", "C174", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C174", "C183", "O186", "C931", "0.3250", "1", "0.0", " "}, {"C174", "C183", "O186", "C931", "-0.1250", "2", "180.0", " "}, {"C174", "C183", "O186", "C931", "-0.2650", "3", "0.0", " "}, {"C174", "C183", "O186", "C931", "0.0000", "4", "180.0", " "}, {"C157", "C183", "O186", "C931", "0.3250", "1", "0.0", " "}, {"C157", "C183", "O186", "C931", "-0.1250", "2", "180.0", " "}, {"C157", "C183", "O186", "C931", "-0.2650", "3", "0.0", " "}, {"C157", "C183", "O186", "C931", "0.0000", "4", "180.0", " "}, {"C157", "C183", "O186", "C932", "0.3250", "1", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C932", "-0.1250", "2", "180.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C932", "-0.2650", "3", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C932", "0.0000", "4", "180.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "0.3250", "1", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "-0.1250", "2", "180.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "-0.2650", "3", "0.0", "adm jr., from C157 C183 O186 C931"}, {"C157", "C183", "O186", "C933", "0.0000", "4", "180.0", "adm jr., from C157 C183 O186 C931"}, {"H185", "C183", "O186", "C931", "0.0000", "1", "0.0", " "}, {"H185", "C183", "O186", "C931", "0.0000", "2", "180.0", " "}, {"H185", "C183", "O186", "C931", "0.3800", "3", "0.0", " "}, {"H185", "C183", "O186", "C931", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "C174", "-0.2180", "1", "0.0", " "}, {"O186", "C183", "C174", "C174", "0.4500", "2", "180.0", " "}, {"O186", "C183", "C174", "C174", "0.0000", "3", "0.0", " "}, {"O186", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "C174", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C174", "C174", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "C174", "0.1500", "3", "0.0", " "}, {"H185", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "O169", "2.1595", "1", "0.0", " "}, {"O186", "C183", "C174", "O169", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C174", "O169", "0.0000", "3", "0.0", " "}, {"O186", "C183", "C174", "O169", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "O169", "-0.2180", "1", "0.0", " "}, {"C157", "C183", "C174", "O169", "0.4500", "2", "180.0", " "}, {"C157", "C183", "C174", "O169", "0.0000", "3", "0.0", " "}, {"C157", "C183", "C174", "O169", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "O169", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C174", "O169", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "O169", "0.2340", "3", "0.0", " "}, {"H185", "C183", "C174", "O169", "0.0000", "4", "180.0", " "}, {"O186", "C183", "C174", "H176", "0.0000", "1", "0.0", " "}, {"O186", "C183", "C174", "H176", "0.0000", "2", "180.0", " "}, {"O186", "C183", "C174", "H176", "0.2340", "3", "0.0", " "}, {"O186", "C183", "C174", "H176", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "H176", "0.0000", "1", "0.0", " "}, {"C157", "C183", "C174", "H176", "0.0000", "2", "180.0", " "}, {"C157", "C183", "C174", "H176", "0.1500", "3", "0.0", " "}, {"C157", "C183", "C174", "H176", "0.0000", "4", "180.0", " "}, {"H185", "C183", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H185", "C183", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H185", "C183", "C174", "H176", "0.1500", "3", "0.0", " "}, {"H185", "C183", "C174", "H176", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "C183", "-0.1780", "1", "0.0", " "}, {"H170", "O169", "C174", "C183", "-0.0870", "2", "180.0", " "}, {"H170", "O169", "C174", "C183", "0.2460", "3", "0.0", " "}, {"H170", "O169", "C174", "C183", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "H176", "0.0000", "1", "0.0", " "}, {"H170", "O169", "C174", "H176", "0.0000", "2", "180.0", " "}, {"H170", "O169", "C174", "H176", "0.1760", "3", "0.0", " "}, {"H170", "O169", "C174", "H176", "0.0000", "4", "180.0", " "}, {"O154", "C157", "C183", "O186", "3.4095", "1", "0.0", " "}, {"O154", "C157", "C183", "O186", "-1.2500", "2", "180.0", " "}, {"O154", "C157", "C183", "O186", "0.5000", "3", "0.0", " "}, {"O154", "C157", "C183", "O186", "0.0000", "4", "180.0", " "}, {"H140", "C157", "C183", "O186", "0.0000", "1", "0.0", " "}, {"H140", "C157", "C183", "O186", "0.0000", "2", "180.0", " "}, {"H140", "C157", "C183", "O186", "0.2340", "3", "0.0", " "}, {"H140", "C157", "C183", "O186", "0.0000", "4", "180.0", " "}, {"H140", "C157", "C183", "C174", "0.0000", "1", "0.0", " "}, {"H140", "C157", "C183", "C174", "0.0000", "2", "180.0", " "}, {"H140", "C157", "C183", "C174", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C183", "C174", "0.0000", "4", "180.0", " "}, {"O154", "C157", "C183", "H185", "0.0000", "1", "0.0", " "}, {"O154", "C157", "C183", "H185", "0.0000", "2", "180.0", " "}, {"O154", "C157", "C183", "H185", "0.2340", "3", "0.0", " "}, {"O154", "C157", "C183", "H185", "0.0000", "4", "180.0", " "}, {"H140", "C157", "C183", "H185", "0.0000", "1", "0.0", " "}, {"H140", "C157", "C183", "H185", "0.0000", "2", "180.0", " "}, {"H140", "C157", "C183", "H185", "0.1500", "3", "0.0", " "}, {"H140", "C157", "C183", "H185", "0.0000", "4", "180.0", " "}, {"N346", "C351", "C350", "C349", "0.0000", "1", "0.0", " "}, {"N346", "C351", "C350", "C349", "3.5000", "2", "180.0", " "}, {"N346", "C351", "C350", "C349", "0.0000", "3", "0.0", " "}, {"N346", "C351", "C350", "C349", "0.0000", "4", "180.0", " "}, {"N356", "C351", "C350", "N352", "0.0000", "1", "0.0", " "}, {"N356", "C351", "C350", "N352", "3.5000", "2", "180.0", " "}, {"N356", "C351", "C350", "N352", "0.0000", "3", "0.0", " "}, {"N356", "C351", "C350", "N352", "0.0000", "4", "180.0", " "}, {"N346", "C351", "C350", "N352", "0.0000", "1", "0.0", " "}, {"N346", "C351", "C350", "N352", "3.5000", "2", "180.0", " "}, {"N346", "C351", "C350", "N352", "0.0000", "3", "0.0", " "}, {"N346", "C351", "C350", "N352", "0.0000", "4", "180.0", " "}, {"C353", "N352", "C350", "C349", "0.0000", "1", "0.0", " "}, {"C353", "N352", "C350", "C349", "3.6250", "2", "180.0", " "}, {"C353", "N352", "C350", "C349", "0.0000", "3", "0.0", " "}, {"C353", "N352", "C350", "C349", "0.0000", "4", "180.0", " "}, {"C353", "N352", "C350", "C351", "0.0000", "1", "0.0", " "}, {"C353", "N352", "C350", "C351", "3.6250", "2", "180.0", " "}, {"C353", "N352", "C350", "C351", "0.0000", "3", "0.0", " "}, {"C353", "N352", "C350", "C351", "0.0000", "4", "180.0", " "}, {"N346", "C347", "N348", "C349", "0.0000", "1", "0.0", " "}, {"N346", "C347", "N348", "C349", "3.6250", "2", "180.0", " "}, {"N346", "C347", "N348", "C349", "0.0000", "3", "0.0", " "}, {"N346", "C347", "N348", "C349", "0.0000", "4", "180.0", " "}, {"H355", "C347", "N348", "C349", "0.0000", "1", "0.0", " "}, {"H355", "C347", "N348", "C349", "3.6250", "2", "180.0", " "}, {"H355", "C347", "N348", "C349", "0.0000", "3", "0.0", " "}, {"H355", "C347", "N348", "C349", "0.0000", "4", "180.0", " "}, {"H358", "N356", "C351", "C350", "0.0000", "1", "0.0", " "}, {"H358", "N356", "C351", "C350", "1.9500", "2", "180.0", " "}, {"H358", "N356", "C351", "C350", "0.0000", "3", "0.0", " "}, {"H358", "N356", "C351", "C350", "0.0000", "4", "180.0", " "}, {"H357", "N356", "C351", "N346", "0.0000", "1", "0.0", " "}, {"H357", "N356", "C351", "N346", "1.9500", "2", "180.0", " "}, {"H357", "N356", "C351", "N346", "0.0000", "3", "0.0", " "}, {"H357", "N356", "C351", "N346", "0.0000", "4", "180.0", " "}, {"H358", "N356", "C351", "N346", "0.0000", "1", "0.0", " "}, {"H358", "N356", "C351", "N346", "1.9500", "2", "180.0", " "}, {"H358", "N356", "C351", "N346", "0.0000", "3", "0.0", " "}, {"H358", "N356", "C351", "N346", "0.0000", "4", "180.0", " "}, {"C347", "N346", "C351", "N356", "0.0000", "1", "0.0", " "}, {"C347", "N346", "C351", "N356", "3.6250", "2", "180.0", " "}, {"C347", "N346", "C351", "N356", "0.0000", "3", "0.0", " "}, {"C347", "N346", "C351", "N356", "0.0000", "4", "180.0", " "}, {"N348", "C347", "N346", "C351", "0.0000", "1", "0.0", " "}, {"N348", "C347", "N346", "C351", "3.6250", "2", "180.0", " "}, {"N348", "C347", "N346", "C351", "0.0000", "3", "0.0", " "}, {"N348", "C347", "N346", "C351", "0.0000", "4", "180.0", " "}, {"C174", "C931", "N936", "C349", "-0.3500", "1", "0.0", " "}, {"C174", "C931", "N936", "C349", "-0.0500", "2", "180.0", " "}, {"C174", "C931", "N936", "C349", "0.3000", "3", "0.0", " "}, {"C174", "C931", "N936", "C349", "0.0000", "4", "180.0", " "}, {"C174", "C174", "C931", "N936", "1.1960", "1", "0.0", " "}, {"C174", "C174", "C931", "N936", "-0.3370", "2", "180.0", " "}, {"C174", "C174", "C931", "N936", "0.2750", "3", "0.0", " "}, {"C174", "C174", "C931", "N936", "0.0000", "4", "180.0", " "}, {"C183", "C174", "C174", "C931", "0.6500", "1", "0.0", " "}, {"C183", "C174", "C174", "C931", "-0.1000", "2", "180.0", " "}, {"C183", "C174", "C174", "C931", "0.1000", "3", "0.0", " "}, {"C183", "C174", "C174", "C931", "0.0000", "4", "180.0", " "}, {"C157", "C183", "C174", "C174", "0.6500", "1", "0.0", " "}, {"C157", "C183", "C174", "C174", "-0.1000", "2", "180.0", " "}, {"C157", "C183", "C174", "C174", "0.1000", "3", "0.0", " "}, {"C157", "C183", "C174", "C174", "0.0000", "4", "180.0", " "}, {"O154", "C157", "C183", "C174", "-1.0000", "1", "0.0", " "}, {"O154", "C157", "C183", "C174", "-0.1000", "2", "180.0", " "}, {"O154", "C157", "C183", "C174", "-0.2500", "3", "0.0", " "}, {"O154", "C157", "C183", "C174", "0.0000", "4", "180.0", " "}, {"H155", "O154", "C157", "C183", "1.3370", "1", "0.0", " "}, {"H155", "O154", "C157", "C183", "-1.4415", "2", "180.0", " "}, {"H155", "O154", "C157", "C183", "0.5130", "3", "0.0", " "}, {"H155", "O154", "C157", "C183", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "C174", "1.3370", "1", "0.0", " "}, {"H170", "O169", "C174", "C174", "-1.4415", "2", "180.0", " "}, {"H170", "O169", "C174", "C174", "0.5130", "3", "0.0", " "}, {"H170", "O169", "C174", "C174", "0.0000", "4", "180.0", " "}, {"H170", "O169", "C174", "C931", "1.3370", "1", "0.0", " "}, {"H170", "O169", "C174", "C931", "-1.4415", "2", "180.0", " "}, {"H170", "O169", "C174", "C931", "0.5130", "3", "0.0", " "}, {"H170", "O169", "C174", "C931", "0.0000", "4", "180.0", " "}, {"C350", "C349", "N936", "C931", "0.0000", "1", "0.0", " "}, {"C350", "C349", "N936", "C931", "2.5000", "2", "180.0", " "}, {"C350", "C349", "N936", "C931", "0.0000", "3", "0.0", " "}, {"C350", "C349", "N936", "C931", "0.0000", "4", "180.0", " "}, {"C351", "C350", "C349", "N936", "0.0000", "1", "0.0", " "}, {"C351", "C350", "C349", "N936", "3.6250", "2", "180.0", " "}, {"C351", "C350", "C349", "N936", "0.0000", "3", "0.0", " "}, {"C351", "C350", "C349", "N936", "0.0000", "4", "180.0", " "}, {"N356", "C351", "C350", "C349", "0.0000", "1", "0.0", " "}, {"N356", "C351", "C350", "C349", "3.5000", "2", "180.0", " "}, {"N356", "C351", "C350", "C349", "0.0000", "3", "0.0", " "}, {"N356", "C351", "C350", "C349", "0.0000", "4", "180.0", " "}, {"H357", "N356", "C351", "C350", "0.0000", "1", "0.0", " "}, {"H357", "N356", "C351", "C350", "1.9500", "2", "180.0", " "}, {"H357", "N356", "C351", "C350", "0.0000", "3", "0.0", " "}, {"H357", "N356", "C351", "C350", "0.0000", "4", "180.0", " "}, {"C347", "N346", "C351", "C350", "0.0000", "1", "0.0", " "}, {"C347", "N346", "C351", "C350", "3.6250", "2", "180.0", " "}, {"C347", "N346", "C351", "C350", "0.0000", "3", "0.0", " "}, {"C347", "N346", "C351", "C350", "0.0000", "4", "180.0", " "}}; /* Impropers */ char * OPLSAAR_impropers[131][8]= {{"C136", "C500", "C501", "C514", "1.1000", "2", "180.0", " "}, {"C136", "C500", "C514", "C501", "1.1000", "2", "180.0", " "}, {"C145", "C502", "C501", "N503", "1.1000", "2", "180.0", " "}, {"C145", "C502", "N503", "C501", "1.1000", "2", "180.0", " "}, {"C149", "C145", "C145", "C145", "1.1000", "2", "180.0", " "}, {"C245", "N238", "C235", "C285", "2.5000", "2", "180.0", " "}, {"C245", "N238", "C285", "C235", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C235", "C246", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C235", "C285", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C246", "C235", "2.5000", "2", "180.0", " "}, {"C245", "N239", "C285", "C235", "2.5000", "2", "180.0", " "}, {"C502", "C501", "C145", "C500", "1.1000", "2", "180.0", " "}, {"C502", "C501", "C500", "C145", "1.1000", "2", "180.0", " "}, {"C505", "C507", "C508", "N511", "1.1000", "2", "180.0", " "}, {"C505", "C507", "N511", "C508", "1.1000", "2", "180.0", " "}, {"C505", "C508", "C507", "N503", "1.1000", "2", "180.0", " "}, {"C505", "C508", "N503", "C507", "1.1000", "2", "180.0", " "}, {"C505", "C510", "C510", "N512", "1.1000", "2", "180.0", " "}, {"C505", "C510", "N512", "C510", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C166", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C166", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C501", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C501", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C145", "C502", "1.1000", "2", "180.0", " "}, {"H146", "C145", "C502", "C145", "1.1000", "2", "180.0", " "}, {"H146", "C506", "N503", "N511", "1.1000", "2", "180.0", " "}, {"H146", "C506", "N511", "N503", "1.1000", "2", "180.0", " "}, {"H146", "C507", "C508", "N511", "1.1000", "2", "180.0", " "}, {"H146", "C507", "N511", "C508", "1.1000", "2", "180.0", " "}, {"H146", "C508", "C507", "N503", "1.1000", "2", "180.0", " "}, {"H146", "C508", "N503", "C507", "1.1000", "2", "180.0", " "}, {"H146", "C509", "N512", "N512", "1.1000", "2", "180.0", " "}, {"H146", "C510", "C510", "N512", "1.1000", "2", "180.0", " "}, {"H146", "C510", "N512", "C510", "1.1000", "2", "180.0", " "}, {"H146", "C514", "C500", "N503", "1.1000", "2", "180.0", " "}, {"H146", "C514", "N503", "C500", "1.1000", "2", "180.0", " "}, {"H240", "N237", "C235", "H240", "2.5000", "2", "180.0", " "}, {"H240", "N237", "H240", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C223", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C224", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C223", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C224", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C242", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C283", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C235", "C284", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C242", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C283", "C235", "2.5000", "2", "180.0", " "}, {"H241", "N238", "C284", "C235", "2.5000", "2", "180.0", " "}, {"H301", "N300", "C302", "H301", "2.5000", "2", "180.0", " "}, {"H301", "N300", "H301", "C302", "2.5000", "2", "180.0", " "}, {"H304", "N303", "C302", "C307", "2.5000", "2", "180.0", " "}, {"H304", "N303", "C307", "C302", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C502", "C514", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C506", "C508", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C508", "C506", "2.5000", "2", "180.0", " "}, {"H504", "N503", "C514", "C502", "2.5000", "2", "180.0", " "}, {"H513", "N512", "C509", "C510", "2.5000", "2", "180.0", " "}, {"H513", "N512", "C510", "C509", "2.5000", "2", "180.0", " "}, {"N300", "C302", "N300", "N303", "10.5000", "2", "180.0", " "}, {"N300", "C302", "N303", "N300", "10.5000", "2", "180.0", " "}, {"O167", "C166", "C145", "C145", "1.1000", "2", "180.0", " "}, {"O236", "C235", "C135", "N239", "10.5", "2", "180.0", " "}, {"O236", "C235", "C135", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C136", "N237", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C223", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C223", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C224", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C224", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C246", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C246", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C292", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C293", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C293", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C295", "N238", "10.5000", "2", "180.0", " "}, {"O236", "C235", "C295", "N239", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N237", "C136", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C135", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C223", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C224", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C246", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C292", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C293", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N238", "C295", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C135", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C223", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C224", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C246", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C293", "10.5000", "2", "180.0", " "}, {"O236", "C235", "N239", "C295", "10.5000", "2", "180.0", " "}, {"O269", "C267", "C136", "O268", "10.5000", "2", "180.0", " "}, {"O269", "C267", "O268", "C136", "10.5000", "2", "180.0", " "}, {"O269", "C267", "C224", "O268", "10.5000", "2", "180.0", " "}, {"O269", "C267", "O268", "C224", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C274", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C283", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C284", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "C285", "O272", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C274", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C283", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C284", "10.5000", "2", "180.0", " "}, {"O272", "C271", "O272", "C285", "10.5000", "2", "180.0", " "}, {"O268", "C267", "C136", "O269", "10.5", "2", "180.0", " "}, {"O268", "C267", "C223", "O269", "10.5", "2", "180.0", "Gly"}, {"O268", "C267", "C224", "O269", "10.5", "2", "180.0", " "}, {"C320", "C933", "N938", "C324", "2.5000", "2", "180.0", " "}, {"C320", "N938", "N321", "O326", "2.5000", "2", "180.0", " "}, {"C322", "C320", "N321", "H327", "2.5000", "2", "180.0", " "}, {"C322", "N321", "C323", "O328", "2.5000", "2", "180.0", " "}, {"C324", "C322", "C323", "H329", "2.5000", "2", "180.0", " "}, {"C323", "N938", "C324", "H330", "2.5000", "2", "180.0", " "}, {"C338", "N937", "C932", "C334", "2.5000", "2", "180.0", " "}, {"N335", "N937", "C334", "O340", "2.5000", "2", "180.0", " "}, {"N341", "N335", "C336", "C337", "2.5000", "2", "180.0", " "}, {"H342", "C336", "N341", "H343", "2.5000", "2", "180.0", " "}, {"C338", "C336", "C337", "H344", "2.5000", "2", "180.0", " "}, {"C337", "N937", "C338", "H345", "2.5000", "2", "180.0", " "}, {"C364", "C365", "C366", "N352", "2.5000", "2", "180.0", " "}, {"N361", "N363", "C362", "N368", "2.5000", "2", "180.0", " "}, {"H369", "C362", "N368", "H369", "2.5000", "2", "180.0", " "}, {"C362", "H367", "N361", "C366", "2.5000", "2", "180.0", " "}, {"O370", "C365", "C366", "N361", "2.5000", "2", "180.0", " "}, {"N936", "N363", "C364", "C365", "2.5000", "2", "180.0", " "}, {"C353", "C931", "N936", "C364", "2.5000", "2", "180.0", " "}, {"H358", "N356", "C351", "H357", "2.5000", "2", "180.0", " "}, {"H355", "C347", "N346", "N348", "2.5000", "2", "180.0", " "}, {"N356", "C351", "C350", "N346", "2.5000", "2", "180.0", " "}, {"C351", "C350", "C349", "N352", "2.5000", "2", "180.0", " "}, {"N352", "N936", "C353", "H359", "2.5000", "2", "180.0", " "}, {"N348", "C349", "C350", "N936", "2.5000", "2", "180.0", " "}, {"C349", "N936", "C931", "C353", "2.5000", "2", "180.0", " "}}; /* Non-bonded */ char * OPLSAAR_vdw[145][7]= {{"C135", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C136", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C137", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C145", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C149", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C157", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C158", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C166", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C206", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C209", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C210", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C214", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C223", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C224", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C235", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C242", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C245", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C246", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C267", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C271", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"C274", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C283", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C284", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C285", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C292", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C293", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C295", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C296", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C302", "0.00", "-0.050000", "1.2627698", "0.00", "-0.025000", "1.2627698"}, {"C307", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C308", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C500", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C501", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C502", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C505", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C506", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C507", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C508", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C509", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C510", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"C514", "0.00", "-0.070000", "1.9923701", "0.00", "-0.035000", "1.9923701"}, {"H140", "0.00", "-0.030000", "1.4030776", "0.00", "-0.015000", "1.4030776"}, {"H146", "0.00", "-0.030000", "1.3581791", "0.00", "-0.015000", "1.3581791"}, {"H155", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H168", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H204", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H240", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H241", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H270", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H290", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H301", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H304", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H310", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H504", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"H513", "0.00", "0.000000", "0.0000000", "0.00", "0.000000", "0.0000000"}, {"N237", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N238", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N239", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N287", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N300", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N303", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N309", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N503", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N511", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N512", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"O154", "0.00", "-0.170000", "1.7510408", "0.00", "-0.085000", "1.7510408"}, {"O167", "0.00", "-0.170000", "1.7229792", "0.00", "-0.085000", "1.7229792"}, {"O236", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O268", "0.00", "-0.170000", "1.6836931", "0.00", "-0.085000", "1.6836931"}, {"O269", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"O272", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"S200", "0.00", "-0.425000", "2.0204317", "0.00", "-0.212500", "2.0204317"}, {"S202", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"S203", "0.00", "-0.355000", "2.0204317", "0.00", "-0.177500", "2.0204317"}, {"OT", "0.00", "-0.152100", "1.768200", "0.00", "-0.152100", "1.768200"}, {"HT", "0.00", "-0.046000", "0.224500", "0.00", "-0.046000", "0.22450"}, {"SOD", "0.00", "-0.000500", "2.9969737", "0.00", "-0.000500", "2.9969737"}, {"CLA", "0.00", "-0.710000", "2.2561487", "0.00", "-0.710000", "2.2561487"}, {"MG", "0.00", "-0.857044", "0.9229261", "0.00", "-0.857044", "0.9229261"}, {"H329", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C933", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"N938", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C324", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H330", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C320", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O326", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"N321", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H327", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C322", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O328", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"C323", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"C932", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"N937", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N936", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C338", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H345", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C337", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H344", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C334", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O340", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"N335", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C336", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N341", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H342", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"H343", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C931", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"C349", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"C353", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"C174", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"O186", "0.00", "-0.140000", "1.6275699", "0.00", "-0.070000", "1.6275699"}, {"H196", "0.00", "-0.030000", "1.4030775", "0.00", "-0.015000", "1.4030775"}, {"O169", "0.00", "-0.170000", "1.7229792", "0.00", "-0.085000", "1.7229792"}, {"H176", "0.00", "-0.030000", "1.4030775", "0.00", "-0.015000", "1.4030775"}, {"C183", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"H185", "0.00", "-0.030000", "1.4030775", "0.00", "-0.015000", "1.4030775"}, {"H170", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C350", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N348", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C351", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N352", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N356", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"N346", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H357", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"H358", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C347", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"H355", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"H359", "0.00", "-0.050000", "1.4030775", "0.00", "-0.025000", "1.4030775"}, {"C6448", "0.00", "-0.066000", "1.9643086", "0.00", "-0.033000", "1.9643086"}, {"O6934", "0.00", "-0.140000", "1.6275700", "0.00", "-0.070000", "1.6275700"}, {"P440", "0.00", "-0.200000", "2.0990040", "0.00", "-0.100000", "2.0990040"}, {"O441", "0.00", "-0.200000", "1.7678777", "0.00", "-0.100000", "1.7678777"}, {"O6452", "0.00", "-0.140000", "1.6275700", "0.00", "-0.070000", "1.6275700"}, {"O6442", "0.00", "-0.140000", "1.6275700", "0.00", "-0.070000", "1.6275700"}, {"P6450", "0.00", "-0.200000", "2.0990040", "0.00", "-0.100000", "2.0990040"}, {"O6441", "0.00", "-0.200000", "1.7678777", "0.00", "-0.100000", "1.7678777"}, {"C364", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N368", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H369", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"N363", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"C362", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}, {"N361", "0.00", "-0.170000", "1.8240008", "0.00", "-0.085000", "1.8240008"}, {"H367", "0.00", "-0.000000", "0.0000000", "0.00", "-0.000000", "0.0000000"}, {"C366", "0.00", "-0.105000", "2.1046163", "0.00", "-0.052500", "2.1046163"}, {"O370", "0.00", "-0.210000", "1.6612438", "0.00", "-0.105000", "1.6612438"}, {"C365", "0.00", "-0.080000", "1.9643086", "0.00", "-0.040000", "1.9643086"}}; Atomes-GNU-1.1.14/src/calc/force_fields/pcff.c000066400000000000000000012202251457665371200207000ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file pcff.c * @short PCFF force field, from 'PCFF.frc' * @author Sébastien Le Roux */ /* * This file: 'pcff.c' * * Contains: * PCFF force field, data from taken from: - the file: 'PCFF.frc' This file contains several tables: Atoms : PCFF_atoms[133][5] Equivalence : PCFF_equivalence_auto[108][11] Equivalence : PCFF_equivalence[134][7] Quadractic bonds : PCFF_bonds_auto[627][5] Quartic bonds : PCFF_bonds[126][7] Quadratic angles : PCFF_angles_auto[329][6] Quartic angles : PCFF_angles[302][8] Torsions : PCFF_torsions_auto[216][8] Torsions : PCFF_torsions[492][11] Inversions : PCFF_inversions[83][7] Non bonded : PCFF_vdw[94][4] Bond increments : PCFF_bond_increments[564][5] */ #include "global.h" int PCFF_objects[14] = {133, 108, 134, 627, 126, 0, 329, 302, 216, 492, 83, 0, 94, 564}; int PCFF_dim[14] = {5, 11, 7, 5, 7, 0, 6, 8, 8, 11, 7, 0, 4, 5}; /* Atoms 0= Element, 1= Mass, 2= Key, 3= Description, 4= PCFF info */ char * PCFF_atoms[133][5]= {{"Ag", "107.86800", "Ag", "Silver metal", "Ver. 2.1, Ref. 11"}, {"Al", "26.98200", "Al", "Aluminium metal", "Ver. 2.1, Ref. 11"}, {"Au", "196.96700", "Au", "Gold metal", "Ver. 2.1, Ref. 11"}, {"Br", "79.90900", "Br", "bromine ion", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "Cl", "chlorine ion", "Ver. 1.0, Ref. 1"}, {"Cr", "51.99600", "Cr", "Chromium metal", "Ver. 2.1, Ref. 11"}, {"Cu", "63.54600", "Cu", "Copper metal", "Ver. 2.1, Ref. 11"}, {"Fe", "55.84700", "Fe", "Iron metal", "Ver. 2.1, Ref. 11"}, {"K", "39.10200", "K", "Potassium metal", "Ver. 2.1, Ref. 11"}, {"Li", "6.94000", "Li", "Lithium metal", "Ver. 2.1, Ref. 11"}, {"Mo", "95.94000", "Mo", "Molybdenum metal", "Ver. 2.1, Ref. 11"}, {"Na", "22.99000", "Na", "Sodium metal", "Ver. 2.1, Ref. 11"}, {"Ni", "58.71000", "Ni", "Nickel metal", "Ver. 2.1, Ref. 11"}, {"Pb", "207.20000", "Pb", "Lead metal", "Ver. 2.1, Ref. 11"}, {"Pd", "106.40000", "Pd", "Palladium metal", "Ver. 2.1, Ref. 11"}, {"Pt", "195.09000", "Pt", "Platinum metal", "Ver. 2.1, Ref. 11"}, {"Sn", "118.69000", "Sn", "Tin metal", "Ver. 2.1, Ref. 11"}, {"W", "183.85000", "W", "Tungsten metal", "Ver. 2.1, Ref. 11"}, {"Ar", "39.94400", "ar", "Argon ", "Ver. 2.1, Ref. 8"}, {"Al", "26.98200", "az", "aluminium atom in zeolites", "Ver. 3.0, Ref. 10"}, {"Br", "79.90900", "br", "bromine atom", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c", "generic SP3 carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c+", "C in guanidinium group", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c-", "C in charged carboxylate", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c1", "sp3 carbon with 1 H 3 heavies", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c2", "sp3 carbon with 2 H's, 2 Heavy's", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3", "sp3 carbon with 3 hHs 1 heavy", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3h", "sp3 carbon in 3-membered ring with hydrogens", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c3m", "sp3 carbon in 3-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4h", "sp3 carbon in 4-membered ring with hydrogens", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c4m", "sp3 carbon in 4-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c5", "sp2 aromatic carbon in 5-membered ring", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=", "non aromatic end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=1", "non aromatic, next to end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c=2", "non aromatic doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "c_0", "carbonyl carbon of aldehydes, ketones", "Ver. 2.1, Ref. 8"}, {"C", "12.01115", "c_1", "carbonyl carbon of acid, ester, amide", "Ver. 2.1, Ref. 8"}, {"C", "12.01100", "c_2", "carbonyl carbon of carbamate, urea", "Ver. 2.1, Ref. 8"}, {"C", "12.01115", "c_a", "general amino acid alpha carbon (sp3)", "Ver. 1.0, Ref. 1"}, {"Ca", "40.08000", "ca+", "calcium ion", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cg", "sp3 alpha carbon in glycine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ci", "sp2 aromatic carbon in charged imidazole ring (His+)", "Ver. 1.0, Ref. 1"}, {"Cl", "35.45300", "cl", "chlorine atom", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "co", "sp3 carbon in acetals", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "coh", "sp3 carbon in acetals with hydrogen", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cp", "sp2 aromatic carbon", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cr", "C in neutral arginine", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "cs", "sp2 aromatic carbon in 5 membered ring next to S", "Ver. 1.0, Ref. 1"}, {"C", "12.01115", "ct", "sp carbon involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"C", "12.01100", "cz", "carbonyl carbon of carbonate", "Ver. 2.0, Ref. 5"}, {"D", "2.01400", "dw", "deuterium in heivy water", "Ver. 1.0, Ref. 1"}, {"F", "18.99840", "f", "fluorine atom", "Ver. 2.1, Ref. 8"}, {"H", "1.00797", "h", "generic hydrogen bound to C, Si,or H", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "h*", "hydrogen bonded to nitrogen, Oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "h+", "charged hydrogen in cations", "Ver. 1.0, Ref. 1"}, {"H", "1.00782", "hb", "hydrogen atom in bridging hydroxyl group", "Ver. 3.0, Ref. 10"}, {"H", "1.00797", "hc", "hydrogen bonded to carbon", "Ver. 1.0, Ref. 1"}, {"He", "4.00300", "he", "Helium ", "Ver. 2.1, Ref. 8"}, {"H", "1.00797", "hi", "Hydrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "hn", "hydrogen bonded to nitrogen", "Ver. 1.0, Ref. 1"}, {"H", "1.00800", "hn2", "amino hydrogen", "Ver. 2.1, Ref. 8"}, {"H", "1.00797", "ho", "hydrogen bonded to oxygen", "Ver. 1.0, Ref. 1"}, {"H", "1.00800", "ho2", "hydroxyl hydrogen", "Ver. 2.1, Ref. 8"}, {"H", "1.00782", "hoa", "hydrogen atom in terminal hydroxyl group on aluminium", "Ver. 3.0, Ref. 10"}, {"H", "1.00782", "hos", "hydrogen atom in terminal hydroxyl group on silicon", "Ver. 3.0, Ref. 10"}, {"H", "1.00797", "hp", "hydrogen bonded to phosphorus", "Ver. 1.0, Ref. 1"}, {"H", "1.00797", "hs", "hydrogen bonded to sulfur", "Ver. 1.0, Ref. 1"}, {"H", "1.00800", "hsi", "silane hydrogen", "Ver. 2.2, Ref. 9"}, {"H", "1.00797", "hw", "hydrogen in water", "Ver. 1.0, Ref. 1"}, {"I", "126.90440", "i", "iodine atom", "Ver. 1.0, Ref. 1"}, {"Kr", "83.80000", "kr", "Krypton ", "Ver. 2.1, Ref. 8"}, {"N", "14.00670", "n", "generic sp2 nitrogen (in amids))", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n+", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n1", "sp2 nitrogen in charged arginine", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n2", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3m", "sp3 nitrogen in 3- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n3n", "sp2 nitrogen in 3- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4", "sp3 nitrogen in protonated amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4m", "sp3 nitrogen in 4- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n4n", "sp2 nitrogen in 4- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=", "non aromatic end doubly bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=1", "non aromatic, next to end doubly bonded carbon", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "n=2", "non aromatic doubly bonded nitrogen", "Ver. 1.0, Ref. 1"}, {"N", "14.01000", "n_2", "nitrogen of urethane", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "na", "sp3 nitrogen in amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nb", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"Ne", "20.18300", "ne", "Neon ", "Ver. 2.1, Ref. 8"}, {"N", "14.00670", "nh", "sp2 nitrogen in 5 or 6 membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nh+", "protonated nitrogen in 6 membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nho", "sp2 nitrogen in 6 membered ring next to a carbonyl", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "ni", "nitrogen in charged imidazole ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nn", "sp2 nitrogen in aromatic amines", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "np", "sp2 nitrogen in 5- or 6- membered ring", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "npc", "sp2 nitrogen in 5- or 6- membered ring and with a heavy atom", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nr", "sp2 nitrogen (NH2) in guanidinium group (HN=C(NH2)2)", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nt", "sp nitrogen involved in a triple bond", "Ver. 1.0, Ref. 1"}, {"N", "14.00670", "nz", "sp3 nitrogen bonded to two atoms", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o", "generic SP3 oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o*", "oxygen in water", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o-", "partial double oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o3e", "sp3 oxygen in three membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o4e", "sp3 oxygen in four membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "o=", "oxygen double bonded to O, C, S, N, P", "Ver. 2.1, Ref. 8"}, {"O", "15.99940", "o_1", "oxygen in carbonyl group", "Ver. 2.1, Ref. 8"}, {"O", "15.99940", "o_2", "ester oxygen", "Ver. 2.1, Ref. 8"}, {"O", "15.99491", "oah", "oxygen atom in terminal hydroxyl group on aluminium", "Ver. 3.0, Ref. 10"}, {"O", "15.99491", "oas", "oxygen atom between aluminium and silicon", "Ver. 3.0, Ref. 10"}, {"O", "15.99491", "ob", "oxygen atom in bridging hydroxyl group", "Ver. 3.0, Ref. 10"}, {"O", "15.99940", "oc", "sp3 oxygen in ether or acetals", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oe", "sp3 oxygen in ester", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oh", "oxygen bonded to hydrogen", "Ver. 1.0, Ref. 1"}, {"O", "15.99940", "oo", "oxygen in carbonyl group, carbonate only", "Ver. 2.0, Ref. 5"}, {"O", "15.99940", "op", "sp2 aromatic in 5 membered ring", "Ver. 1.0, Ref. 1"}, {"O", "15.99491", "osh", "oxygen atom in terminal hydroxyl group on silicon", "Ver. 3.0, Ref. 10"}, {"O", "16.00000", "osi", "siloxane oxygen", "Ver. 1.0, Ref. 1"}, {"O", "15.99491", "oss", "oxygen atom betweem two silicons", "Ver. 3.0, Ref. 10"}, {"O", "15.99940", "oz", "ester oxygen in carbonate", "Ver. 2.0, Ref. 5"}, {"P", "30.97380", "p", "general phosphorous atom", "Ver. 1.0, Ref. 1"}, {"P", "30.97380", "p=", "phosphazene phosphorous atom", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s", "sp3 sulfur", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s'", "S in thioketone group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s-", "partial double sulfur", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s1", "sp3 sulfur involved in (S-S) group of disulfides", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s3e", "sulfur in three membered ring", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "s4e", "sulfur in four membered ring", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sc", "sp3 sulfur in methionines (C-S-C) group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sf", "S in sulfonate group", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sh", "sp3 sulfur in sulfhydryl (-SH) group (e.g. cysteine)", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "si", "silicon atom", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "sio", "siloxane silicon", "Ver. 1.0, Ref. 1"}, {"S", "32.06400", "sp", "sulfur in an aromatic ring (e.g. thiophene)", "Ver. 1.0, Ref. 1"}, {"Si", "28.08600", "sz", "silicon atom in zeolites", "Ver. 3.0, Ref. 10"}, {"Xe", "131.30000", "xe", "Xenon ", "Ver. 2.1, Ref. 8"}}; /* Equivalence table for key symbols PCFF auto with: 0 = Key in atom list 1 = Non-bonded 2 = Bond increments 3 = Bonds 4 = Angles end atom 5 = Angles appex atom 6 = Torsion end atom 7 = Torsion center atom 8 = Inversion end atom 9 = Inversion center atom 10 = PCFF info */ char * PCFF_equivalence_auto[108][11]= {{"Br", "Br", "Br", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Br_", "Ver. 2.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Cl_", "Ver. 2.0, Ref. 1"}, {"Na", "Na", "Na", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Na_", "Ver. 2.0, Ref. 1"}, {"ar", "ar", "ar", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "ar_", "Ver. 2.1, Ref. 8"}, {"br", "br", "br", "br_", "br_", "br_", "br_", "br_", "br_", "br_", "Ver. 2.0, Ref. 1"}, {"c", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c+", "c+", "c+", "cr_", "c_", "c'_", "c_", "c+_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c-", "c-", "c-", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c1", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c2", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c3", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c3h", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c3m", "c", "c", "c3m_", "c3m_", "c3m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c4h", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c4m", "c", "c", "c4m_", "c4m_", "c4m_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"c5", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"c=", "c=", "c=", "c=_3", "c_", "c=_", "c_", "c=_3", "c_", "c=_", "Ver. 2.0, Ref. 1"}, {"c=1", "c=", "c=", "c=_1", "c_", "c=_", "c_", "c=_1", "c_", "c=_", "Ver. 2.0, Ref. 1"}, {"c=2", "c=", "c=", "c=_2", "c_", "c=_", "c_", "c=_2", "c_", "c=_", "Ver. 2.0, Ref. 1"}, {"c_0", "c_0", "c_0", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c_1", "c_1", "c_1", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c_2", "c_2", "c_2", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"c_a", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca_", "ca_", "ca_", "ca_", "ca_", "ca_", "ca_", "Ver. 2.0, Ref. 1"}, {"cg", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"ci", "cp", "ci", "ci_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"cl", "cl", "cl", "cl_", "cl_", "cl_", "c_", "cl_", "cl_", "cl_", "Ver. 2.0, Ref. 1"}, {"co", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"coh", "c", "c", "c_", "c_", "c_", "c_", "c_", "c_", "c_", "Ver. 2.0, Ref. 1"}, {"cp", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"cr", "cr", "cr", "cr_", "c_", "c'_", "c_", "c=_3", "c_", "c'_", "Ver. 2.0, Ref. 1"}, {"cs", "cp", "cp", "cp_", "c_", "cp_", "c_", "cp_", "c_", "cp_", "Ver. 2.0, Ref. 1"}, {"ct", "ct", "ct", "ct_", "c_", "ct_", "c_", "ct_", "c_", "ct_", "Ver. 2.0, Ref. 1"}, {"cz", "cz", "cz", "c'_", "c_", "c'_", "c_", "c'_", "c_", "c'_", "Ver. 2.0, Ref. 5"}, {"dw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"f", "f", "f", "f_", "f_", "f_", "f_", "f_", "f_", "f_", "Ver. 2.0, Ref. 1"}, {"h", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"h*", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"h+", "h+", "h+", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hc", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"he", "he", "he", "he_", "he_", "he_", "he_", "he_", "he_", "he_", "Ver. 2.1, Ref. 8"}, {"hi", "h*", "hi", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hn", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hn2", "hn2", "hn2", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"ho", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"ho2", "ho2", "ho2", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hp", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hs", "h", "h", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"hsi", "hsi", "hsi", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.2, Ref. 9"}, {"hw", "h*", "h*", "h_", "h_", "h_", "h_", "h_", "h_", "h_", "Ver. 2.0, Ref. 1"}, {"i", "i", "i", "i_", "i_", "i_", "i_", "i_", "i_", "i_", "Ver. 2.0, Ref. 1"}, {"kr", "kr", "kr", "kr_", "kr_", "kr_", "kr_", "kr_", "kr_", "kr_", "Ver. 2.1, Ref. 8"}, {"n", "n", "n", "n_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"n+", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n1", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 1"}, {"n2", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 1"}, {"n3m", "na", "na", "n3m_", "n3m_", "n3m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n3n", "n", "n", "n3m_", "n3m_", "n3m_", "n_", "n3n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"n4", "n+", "n+", "n+_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n4m", "na", "na", "n4m_", "n4m_", "n4m_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"n4n", "n", "n", "n4m_", "n4m_", "n4m_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"n=", "n=", "n=", "n=_3", "n_", "n_", "n_", "n=_3", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"n=1", "n=", "n=", "n=_1", "n_", "n_", "n_", "n=_1", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"n=2", "n=", "n=", "n=_2", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"n_2", "n_2", "n_2", "n_", "n_", "n_", "n_", "n=_2", "n_", "n=_", "Ver. 2.0, Ref. 1"}, {"na", "na", "na", "na_", "n_", "na_", "n_", "na_", "n_", "na_", "Ver. 2.0, Ref. 1"}, {"nb", "nn", "nn", "np_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"ne", "ne", "ne", "ne_", "ne_", "ne_", "ne_", "ne_", "ne_", "ne_", "Ver. 2.1, Ref. 8"}, {"nh", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nh+", "nh", "nh+", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nho", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"ni", "nh", "nh", "ni_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nn", "nn", "nn", "na_", "n_", "n_", "n_", "n_", "n_", "n_", "Ver. 2.0, Ref. 1"}, {"np", "np", "np", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"npc", "nh", "nh", "np_", "n_", "np_", "n_", "np_", "n_", "np_", "Ver. 2.0, Ref. 1"}, {"nr", "nr", "nr", "n_", "n_", "n_", "n_", "n_", "n_", "nr_", "Ver. 2.0, Ref. 1"}, {"nt", "nt", "nt", "nt_", "n_", "nt_", "n_", "nt_", "n_", "nt_", "Ver. 2.0, Ref. 1"}, {"nz", "nz", "nz", "nz_", "n_", "nz_", "n_", "nz_", "n_", "nz_", "Ver. 2.0, Ref. 1"}, {"o", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o*", "o*", "o*", "o_", "o_", "o*_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o-", "o-", "o-", "o-_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"o3e", "o", "o", "o3e_", "o3e_", "o3e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o4e", "o", "o", "o4e_", "o4e_", "o4e_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"o=", "o-", "o-", "o-_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"o_1", "o_1", "o_1", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"o_2", "o_2", "o_2", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 1"}, {"oc", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oe", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oh", "o", "o", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oo", "oo", "oo", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 5"}, {"op", "op", "op", "op_", "o_", "op_", "o_", "o_", "o_", "op_", "Ver. 2.0, Ref. 1"}, {"osi", "osi", "osi", "o_", "o_", "o_", "o_", "o_", "o_", "o_", "Ver. 2.0, Ref. 1"}, {"oz", "oz", "oz", "o'_", "o'_", "o'_", "o_", "o'_", "o_", "o'_", "Ver. 2.0, Ref. 5"}, {"p", "p", "p", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 1"}, {"p=", "p=", "p=", "p_", "p_", "p_", "p_", "p_", "p_", "p_", "Ver. 2.0, Ref. 1"}, {"s", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s'", "s", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s-", "s", "s-", "s-_", "s'_", "s'_", "s_", "s'_", "s_", "s'_", "Ver. 2.0, Ref. 1"}, {"s1", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s3e", "s", "s", "s3e_", "s3e_", "s3e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"s4e", "s", "s", "s4e_", "s4e_", "s4e_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"sc", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"sf", "s", "s'", "s'_", "s'_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"sh", "s", "s", "s_", "s_", "s_", "s_", "s_", "s_", "s_", "Ver. 2.0, Ref. 1"}, {"si", "si", "si", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 1"}, {"sio", "sio", "sio", "si_", "si_", "si_", "si_", "si_", "si_", "si_", "Ver. 2.0, Ref. 1"}, {"sp", "sp", "sp", "sp_", "s_", "sp_", "s_", "sp_", "s_", "sp_", "Ver. 2.0, Ref. 1"}, {"xe", "xe", "xe", "xe_", "xe_", "xe_", "xe_", "xe_", "xe_", "xe_", "Ver. 2.1, Ref. 8"}}; /* Equivalence table for key symbols PCFF with: 0 = Key in atom list 1 = Non-bonded 2 = Bonds 3 = Angles 4 = Torsion 5 = Inversion 6 = PCFF info */ char * PCFF_equivalence[134][7]= {{"Ag", "Ag", "Ag", "Ag", "Ag", "Ag", "Ver. 2.1, Ref. 11"}, {"Al", "Al", "Al", "Al", "Al", "Al", "Ver. 2.1, Ref. 11"}, {"Au", "Au", "Au", "Au", "Au", "Au", "Ver. 2.1, Ref. 11"}, {"Br", "Br", "Br", "Br", "Br", "Br", "Ver. 1.0, Ref. 1"}, {"Cl", "Cl", "Cl", "Cl", "Cl", "Cl", "Ver. 1.0, Ref. 1"}, {"Cr", "Cr", "Cr", "Cr", "Cr", "Cr", "Ver. 2.1, Ref. 11"}, {"Cu", "Cu", "Cu", "Cu", "Cu", "Cu", "Ver. 2.1, Ref. 11"}, {"Fe", "Fe", "Fe", "Fe", "Fe", "Fe", "Ver. 2.1, Ref. 11"}, {"K", "K", "K", "K", "K", "K", "Ver. 2.1, Ref. 11"}, {"Li", "Li", "Li", "Li", "Li", "Li", "Ver. 2.1, Ref. 11"}, {"Mo", "Mo", "Mo", "Mo", "Mo", "Mo", "Ver. 2.1, Ref. 11"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 2.1, Ref. 11"}, {"Na", "Na", "Na", "Na", "Na", "Na", "Ver. 1.0, Ref. 1"}, {"Ni", "Ni", "Ni", "Ni", "Ni", "Ni", "Ver. 2.1, Ref. 11"}, {"Pb", "Pb", "Pb", "Pb", "Pb", "Pb", "Ver. 2.1, Ref. 11"}, {"Pd", "Pd", "Pd", "Pd", "Pd", "Pd", "Ver. 2.1, Ref. 11"}, {"Pt", "Pt", "Pt", "Pt", "Pt", "Pt", "Ver. 2.1, Ref. 11"}, {"Sn", "Sn", "Sn", "Sn", "Sn", "Sn", "Ver. 2.1, Ref. 11"}, {"W", "W", "W", "W", "W", "W", "Ver. 2.1, Ref. 11"}, {"ar", "ar", "ar", "ar", "ar", "ar", "Ver. 2.1, Ref. 8"}, {"az", "az", "az", "az", "az", "az", "Ver. 3.0, Ref. 10"}, {"br", "br", "br", "br", "br", "br", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c+", "c+", "c+", "c+", "c+", "c+", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "c-", "c-", "c-", "c-", "Ver. 1.0, Ref. 1"}, {"c1", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c2", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3h", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c3m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c4h", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c4m", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"c5", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "c=", "c=", "c=", "c=", "Ver. 1.0, Ref. 1"}, {"c=1", "c=", "c=1", "c=", "c=1", "c=", "Ver. 1.0, Ref. 1"}, {"c=2", "c=", "c=2", "c=", "c=2", "c=", "Ver. 1.0, Ref. 1"}, {"c_0", "c_0", "c_0", "c_0", "c_0", "c_0", "Ver. 1.0, Ref. 1"}, {"c_1", "c_1", "c_1", "c_1", "c_1", "c_1", "Ver. 1.0, Ref. 1"}, {"c_2", "c_2", "c_2", "c_2", "c_2", "c_2", "Ver. 1.0, Ref. 1"}, {"c_a", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ca+", "ca+", "ca+", "ca+", "ca+", "ca+", "Ver. 1.0, Ref. 1"}, {"cg", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"ci", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cl", "cl", "cl", "cl", "cl", "cl", "Ver. 1.0, Ref. 1"}, {"co", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"coh", "c", "c", "c", "c", "c", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"cr", "cr", "cr", "cr", "cr", "cr", "Ver. 1.0, Ref. 1"}, {"cs", "cp", "cp", "cp", "cp", "cp", "Ver. 1.0, Ref. 1"}, {"ct", "ct", "ct", "ct", "ct", "ct", "Ver. 1.0, Ref. 1"}, {"cz", "cz", "cz", "cz", "cz", "cz", "Ver. 2.0, Ref. 5"}, {"dw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"f", "f", "f", "f", "f", "f", "Ver. 1.0, Ref. 1"}, {"h", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"h*", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"h+", "h+", "h+", "h+", "h+", "h+", "Ver. 1.0, Ref. 1"}, {"hb", "hb", "hb", "hb", "hb", "hb", "Ver. 3.0, Ref. 10"}, {"hc", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"he", "he", "he", "he", "he", "he", "Ver. 2.1, Ref. 8"}, {"hi", "h*", "hi", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hn", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"hn2", "hn2", "hn2", "hn2", "hn2", "hn2", "Ver. 1.0, Ref. 1"}, {"ho", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"ho2", "ho2", "ho2", "ho2", "ho2", "ho2", "Ver. 1.0, Ref. 1"}, {"hoa", "hoa", "hoa", "hoa", "hoa", "hoa", "Ver. 3.0, Ref. 10"}, {"hos", "hos", "hos", "hos", "hos", "hos", "Ver. 3.0, Ref. 10"}, {"hp", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hs", "h", "h", "h", "h", "h", "Ver. 1.0, Ref. 1"}, {"hsi", "hsi", "h", "h", "h", "h", "Ver. 2.0, Ref. 1"}, {"hw", "h*", "h*", "h*", "h*", "h*", "Ver. 1.0, Ref. 1"}, {"i", "i", "i", "i", "i", "i", "Ver. 1.0, Ref. 1"}, {"kr", "kr", "kr", "kr", "kr", "kr", "Ver. 2.1, Ref. 8"}, {"n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n+", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"n1", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n2", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"n3m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n3n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n4", "n+", "n+", "n+", "n+", "n+", "Ver. 1.0, Ref. 1"}, {"n4m", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"n4n", "n", "n", "n", "n", "n", "Ver. 1.0, Ref. 1"}, {"n=", "n=", "n=", "n=", "n=", "n=", "Ver. 1.0, Ref. 1"}, {"n=1", "n=", "n=1", "n=", "n=1", "n=", "Ver. 1.0, Ref. 1"}, {"n=2", "n=", "n=2", "n=", "n=2", "n=", "Ver. 1.0, Ref. 1"}, {"n_2", "n_2", "n_2", "n_2", "n_2", "n_2", "Ver. 1.0, Ref. 1"}, {"na", "na", "na", "na", "na", "na", "Ver. 1.0, Ref. 1"}, {"nb", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"ne", "ne", "ne", "ne", "ne", "ne", "Ver. 2.1, Ref. 8"}, {"nh", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nh+", "nh", "nh+", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nho", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"ni", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nn", "nn", "nn", "nn", "nn", "nn", "Ver. 1.0, Ref. 1"}, {"np", "np", "np", "np", "np", "np", "Ver. 1.0, Ref. 1"}, {"npc", "nh", "nh", "nh", "nh", "nh", "Ver. 1.0, Ref. 1"}, {"nr", "nr", "nr", "nr", "nr", "nr", "Ver. 1.0, Ref. 1"}, {"nt", "nt", "nt", "nt", "nt", "nt", "Ver. 1.0, Ref. 1"}, {"nz", "nz", "nz", "nz", "nz", "nz", "Ver. 1.0, Ref. 1"}, {"o", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o*", "o*", "o*", "o*", "o*", "o*", "Ver. 1.0, Ref. 1"}, {"o-", "o-", "o-", "o-", "o-", "o-", "Ver. 1.0, Ref. 1"}, {"o3e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o4e", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"o=", "o=", "o=", "o-", "o-", "o-", "Ver. 1.0, Ref. 1"}, {"o_1", "o_1", "o_1", "o_1", "o_1", "o_1", "Ver. 1.0, Ref. 1"}, {"o_2", "o_2", "o_2", "o_2", "o_2", "o_2", "Ver. 1.0, Ref. 1"}, {"oah", "oah", "oah", "oah", "oah", "oah", "Ver. 3.0, Ref. 10"}, {"oas", "oas", "oas", "oas", "oas", "oas", "Ver. 3.0, Ref. 10"}, {"ob", "ob", "ob", "ob", "ob", "ob", "Ver. 3.0, Ref. 10"}, {"oc", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oe", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oh", "o", "o", "o", "o", "o", "Ver. 1.0, Ref. 1"}, {"oo", "oo", "oo", "oo", "oo", "oo", "Ver. 2.0, Ref. 5"}, {"op", "op", "op", "op", "op", "op", "Ver. 1.0, Ref. 1"}, {"osh", "osh", "osh", "osh", "osh", "osh", "Ver. 3.0, Ref. 10"}, {"osi", "osi", "osi", "osi", "osi", "osi", "Ver. 1.0, Ref. 1"}, {"oss", "oss", "oss", "oss", "oss", "oss", "Ver. 3.0, Ref. 10"}, {"oz", "oz", "oz", "oz", "oz", "oz", "Ver. 2.0, Ref. 5"}, {"p", "p", "p", "p", "p", "p", "Ver. 1.0, Ref. 1"}, {"p=", "p=", "p=", "p=", "p=", "p=", "Ver. 1.0, Ref. 1"}, {"s", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s'", "s'", "s'", "s'", "s'", "s'", "Ver. 1.0, Ref. 1"}, {"s-", "sp", "sp", "sp", "sp", "sp", "Ver. 1.0, Ref. 1"}, {"s1", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s3e", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"s4e", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sc", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"sf", "s'", "s'", "s'", "s'", "s'", "Ver. 1.0, Ref. 1"}, {"sh", "s", "s", "s", "s", "s", "Ver. 1.0, Ref. 1"}, {"si", "si", "si", "si", "si", "si", "Ver. 1.0, Ref. 1"}, {"sio", "sio", "sio", "sio", "sio", "sio", "Ver. 1.0, Ref. 1"}, {"sp", "sp", "sp", "sp", "sp", "sp", "Ver. 1.0, Ref. 1"}, {"sz", "sz", "sz", "sz", "sz", "sz", "Ver. 3.0, Ref. 10"}, {"xe", "xe", "xe", "xe", "xe", "xe", "Ver. 2.1, Ref. 8"}}; /* Quadratic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= PCFF info E = K2 * (R - R0)^2 */ char * PCFF_bonds_auto[627][5]= {{"br_", "br_", "2.2900", "175.6329", "Ver. 2.0, Ref. 2"}, {"br_", "c'_", "1.8750", "228.2808", "Ver. 2.0, Ref. 2"}, {"br_", "c3m_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "c4m_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "c=", "1.8800", "253.7008", "Ver. 2.0, Ref. 2"}, {"br_", "c=_1", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"br_", "c=_2", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"br_", "c=_3", "1.8800", "253.7008", "Ver. 2.0, Ref. 3"}, {"br_", "c_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "cl_", "2.1320", "209.1876", "Ver. 2.0, Ref. 2"}, {"br_", "cp_", "1.9200", "223.6000", "Ver. 2.0, Ref. 2"}, {"br_", "ct_", "1.8250", "268.8528", "Ver. 2.0, Ref. 2"}, {"br_", "f_", "1.7950", "193.5000", "Ver. 2.0, Ref. 2"}, {"br_", "h_", "1.5080", "314.1728", "Ver. 2.0, Ref. 2"}, {"br_", "i_", "2.4660", "165.6156", "Ver. 2.0, Ref. 2"}, {"br_", "n+_", "1.8370", "196.5940", "Ver. 2.0, Ref. 2"}, {"br_", "n3m_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"br_", "n4m_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"br_", "n=", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"br_", "n=_1", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"br_", "n=_2", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"br_", "n=_3", "1.8100", "259.1980", "Ver. 2.0, Ref. 3"}, {"br_", "n_", "1.8100", "206.3980", "Ver. 2.0, Ref. 2"}, {"br_", "na_", "1.8370", "203.8340", "Ver. 2.0, Ref. 2"}, {"br_", "np_", "1.8100", "259.1980", "Ver. 2.0, Ref. 2"}, {"br_", "o'_", "1.7550", "233.2954", "Ver. 2.0, Ref. 2"}, {"br_", "o_", "1.7980", "284.7988", "Ver. 2.0, Ref. 2"}, {"br_", "op_", "1.7550", "260.8954", "Ver. 2.0, Ref. 2"}, {"br_", "p_", "2.1800", "183.1472", "Ver. 2.0, Ref. 2"}, {"br_", "s'_", "2.1450", "187.6017", "Ver. 2.0, Ref. 2"}, {"br_", "s3e_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"br_", "s4e_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"br_", "s_", "2.1750", "187.8836", "Ver. 2.0, Ref. 2"}, {"br_", "si_", "2.2350", "180.2320", "Ver. 2.0, Ref. 2"}, {"br_", "sp_", "2.1450", "172.8017", "Ver. 2.0, Ref. 2"}, {"c'_", "c'_", "1.5000", "266.4000", "Ver. 2.0, Ref. 2"}, {"c'_", "c3m_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c'_", "c4m_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c'_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c'_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c'_", "c_", "1.5200", "283.0924", "Ver. 2.0, Ref. 2"}, {"c'_", "cl_", "1.7270", "249.8588", "Ver. 2.0, Ref. 2"}, {"c'_", "cp_", "1.5000", "284.3316", "Ver. 2.0, Ref. 2"}, {"c'_", "ct_", "1.4200", "311.1492", "Ver. 2.0, Ref. 2"}, {"c'_", "f_", "1.3900", "217.7092", "Ver. 2.0, Ref. 2"}, {"c'_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c'_", "i_", "2.0610", "208.6024", "Ver. 2.0, Ref. 2"}, {"c'_", "n3m_", "1.4460", "272.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n4m_", "1.4000", "332.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "n=", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "n=_1", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_2", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n=_3", "1.4050", "296.2996", "Ver. 2.0, Ref. 3"}, {"c'_", "n_", "1.3600", "388.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "np_", "1.4050", "296.2996", "Ver. 2.0, Ref. 2"}, {"c'_", "o'_", "1.2200", "615.3220", "Ver. 2.0, Ref. 2"}, {"c'_", "o-_", "1.2500", "572.8860", "Ver. 2.0, Ref. 2"}, {"c'_", "o_", "1.3400", "400.0000", "Ver. 2.0, Ref. 2"}, {"c'_", "op_", "1.3500", "294.1008", "Ver. 2.0, Ref. 2"}, {"c'_", "p_", "1.7200", "241.3820", "Ver. 2.0, Ref. 2"}, {"c'_", "s'_", "1.6110", "510.2775", "Ver. 2.0, Ref. 2"}, {"c'_", "s-_", "1.6800", "280.3060", "Ver. 2.0, Ref. 2"}, {"c'_", "s3e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s4e_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "s_", "1.7700", "175.0035", "Ver. 2.0, Ref. 2"}, {"c'_", "si_", "1.8300", "239.3552", "Ver. 2.0, Ref. 2"}, {"c'_", "sp_", "1.7400", "215.3532", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "1.5100", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c3m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c3m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c3m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "1.4850", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c3m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c3m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c3m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "1.4340", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o4e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c3m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c3m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c3m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s4e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "1.5520", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c=_1", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_2", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c=_3", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c4m_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c4m_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c4m_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c4m_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "1.4670", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c4m_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c4m_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c4m_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c4m_", "o3e_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "1.4462", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c4m_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c4m_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c4m_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c4m_", "s3e_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "1.8470", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "1.3300", "655.2000", "Ver. 2.0, Ref. 2"}, {"c=", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c=", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 2"}, {"c=", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 2"}, {"c=", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 2"}, {"c=", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 2"}, {"c=", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 2"}, {"c=", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 2"}, {"c=", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"c=", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 2"}, {"c=", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 2"}, {"c=", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 2"}, {"c=", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 2"}, {"c=", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 2"}, {"c=", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 2"}, {"c=", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 2"}, {"c=", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 2"}, {"c=", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 2"}, {"c=", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 2"}, {"c=", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 2"}, {"c=_1", "c=_1", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_2", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_1", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_1", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_1", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_1", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_1", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_1", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_1", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_1", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_1", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_1", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_1", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_1", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_1", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_1", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_1", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_1", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_1", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_1", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_1", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_2", "1.4100", "480.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c=_3", "1.4800", "320.0000", "Ver. 2.0, Ref. 3"}, {"c=_2", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_2", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_2", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_2", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_2", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_2", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_2", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_2", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_1", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_2", "1.3430", "493.5268", "Ver. 2.0, Ref. 3"}, {"c=_2", "n=_3", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_2", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_2", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_2", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_2", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_2", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_2", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_2", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_2", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_2", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_2", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c=_3", "c=_3", "1.3300", "655.2000", "Ver. 2.0, Ref. 3"}, {"c=_3", "c_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_3", "cl_", "1.7320", "278.5132", "Ver. 2.0, Ref. 3"}, {"c=_3", "cp_", "1.5000", "322.8000", "Ver. 2.0, Ref. 3"}, {"c=_3", "ct_", "1.4250", "337.6424", "Ver. 2.0, Ref. 3"}, {"c=_3", "f_", "1.3950", "285.1320", "Ver. 2.0, Ref. 3"}, {"c=_3", "h_", "1.0900", "361.6000", "Ver. 2.0, Ref. 3"}, {"c=_3", "i_", "2.0660", "233.4432", "Ver. 2.0, Ref. 3"}, {"c=_3", "n3m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n4m_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_2", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"c=_3", "n_", "1.4100", "279.0740", "Ver. 2.0, Ref. 3"}, {"c=_3", "na_", "1.4370", "273.7168", "Ver. 2.0, Ref. 3"}, {"c=_3", "np_", "1.4100", "331.8740", "Ver. 2.0, Ref. 3"}, {"c=_3", "o'_", "1.3550", "312.9116", "Ver. 2.0, Ref. 3"}, {"c=_3", "o_", "1.3680", "355.1988", "Ver. 2.0, Ref. 3"}, {"c=_3", "op_", "1.3550", "340.5116", "Ver. 2.0, Ref. 3"}, {"c=_3", "p_", "1.7250", "250.9988", "Ver. 2.0, Ref. 3"}, {"c=_3", "s'_", "1.7450", "255.7880", "Ver. 2.0, Ref. 3"}, {"c=_3", "s3e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s4e_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "s_", "1.7750", "254.9440", "Ver. 2.0, Ref. 3"}, {"c=_3", "si_", "1.8350", "241.0424", "Ver. 2.0, Ref. 3"}, {"c=_3", "sp_", "1.7450", "240.9880", "Ver. 2.0, Ref. 3"}, {"c_", "c_", "1.5260", "322.7158", "Ver. 2.0, Ref. 2"}, {"c_", "cl_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "1.5100", "283.0924", "Ver. 2.0, Ref. 2"}, {"c_", "ct_", "1.4000", "340.0000", "Ver. 2.0, Ref. 2"}, {"c_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"c_", "h_", "1.1050", "340.6175", "Ver. 2.0, Ref. 2"}, {"c_", "i_", "2.1200", "200.0000", "Ver. 2.0, Ref. 2"}, {"c_", "n+_", "1.4620", "270.8836", "Ver. 2.0, Ref. 2"}, {"c_", "n3m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n4m_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "n=", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "n=_1", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_2", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n=_3", "1.4750", "336.8000", "Ver. 2.0, Ref. 3"}, {"c_", "n_", "1.4600", "377.5752", "Ver. 2.0, Ref. 2"}, {"c_", "na_", "1.4700", "356.5988", "Ver. 2.0, Ref. 2"}, {"c_", "np_", "1.4750", "336.8000", "Ver. 2.0, Ref. 2"}, {"c_", "o'_", "1.3800", "318.9484", "Ver. 2.0, Ref. 2"}, {"c_", "o_", "1.4250", "273.2000", "Ver. 2.0, Ref. 2"}, {"c_", "op_", "1.3800", "346.5484", "Ver. 2.0, Ref. 2"}, {"c_", "p_", "1.7500", "249.1344", "Ver. 2.0, Ref. 2"}, {"c_", "s'_", "1.7700", "257.3324", "Ver. 2.0, Ref. 2"}, {"c_", "s_", "1.8000", "228.0000", "Ver. 2.0, Ref. 2"}, {"c_", "si_", "1.8090", "238.0000", "Ver. 2.0, Ref. 2"}, {"c_", "sp_", "1.7700", "242.5324", "Ver. 2.0, Ref. 2"}, {"ci_", "ci_", "1.3900", "280.0000", "Ver. 2.0, Ref. 2"}, {"ci_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"ci_", "ni_", "1.3800", "320.0000", "Ver. 2.0, Ref. 2"}, {"cl_", "cl_", "1.9880", "236.5339", "Ver. 2.0, Ref. 2"}, {"cl_", "cp_", "1.7610", "314.0000", "Ver. 2.0, Ref. 2"}, {"cl_", "ct_", "1.6770", "292.1952", "Ver. 2.0, Ref. 2"}, {"cl_", "f_", "1.6470", "207.1180", "Ver. 2.0, Ref. 2"}, {"cl_", "h_", "1.3600", "345.9024", "Ver. 2.0, Ref. 2"}, {"cl_", "i_", "2.3180", "189.3396", "Ver. 2.0, Ref. 2"}, {"cl_", "n+_", "1.6890", "217.7248", "Ver. 2.0, Ref. 2"}, {"cl_", "n3m_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"cl_", "n4m_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"cl_", "n=", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"cl_", "n=_1", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"cl_", "n=_2", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"cl_", "n=_3", "1.6620", "280.3604", "Ver. 2.0, Ref. 3"}, {"cl_", "n_", "1.6620", "227.5604", "Ver. 2.0, Ref. 2"}, {"cl_", "na_", "1.6890", "226.4260", "Ver. 2.0, Ref. 2"}, {"cl_", "np_", "1.6620", "280.3604", "Ver. 2.0, Ref. 2"}, {"cl_", "o'_", "1.6070", "251.7939", "Ver. 2.0, Ref. 2"}, {"cl_", "o_", "1.6500", "307.0632", "Ver. 2.0, Ref. 2"}, {"cl_", "op_", "1.6070", "279.3939", "Ver. 2.0, Ref. 2"}, {"cl_", "p_", "2.0430", "208.8228", "Ver. 2.0, Ref. 2"}, {"cl_", "s'_", "1.9970", "211.1368", "Ver. 2.0, Ref. 2"}, {"cl_", "s3e_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"cl_", "s4e_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"cl_", "s_", "2.0270", "212.0812", "Ver. 2.0, Ref. 2"}, {"cl_", "si_", "2.0870", "207.9748", "Ver. 2.0, Ref. 2"}, {"cl_", "sp_", "1.9970", "196.3368", "Ver. 2.0, Ref. 2"}, {"cp_", "cp_", "1.3900", "480.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "ct_", "1.4000", "321.6716", "Ver. 2.0, Ref. 2"}, {"cp_", "f_", "1.3630", "496.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "h_", "1.0800", "363.4164", "Ver. 2.0, Ref. 2"}, {"cp_", "i_", "2.0410", "217.4512", "Ver. 2.0, Ref. 2"}, {"cp_", "n+_", "1.4120", "251.3344", "Ver. 2.0, Ref. 2"}, {"cp_", "n3m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n4m_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "n=", "1.3850", "316.0380", "Ver. 2.0, Ref. 2"}, {"cp_", "n=_1", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_2", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n=_3", "1.3850", "316.0380", "Ver. 2.0, Ref. 3"}, {"cp_", "n_", "1.4200", "280.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "na_", "1.4120", "257.7752", "Ver. 2.0, Ref. 2"}, {"cp_", "np_", "1.3500", "440.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "o'_", "1.3300", "297.4852", "Ver. 2.0, Ref. 2"}, {"cp_", "o_", "1.3700", "384.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "op_", "1.3700", "420.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "p_", "1.7000", "235.0428", "Ver. 2.0, Ref. 2"}, {"cp_", "s'_", "1.7200", "239.8024", "Ver. 2.0, Ref. 2"}, {"cp_", "s3e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s4e", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "s_", "1.7300", "228.0000", "Ver. 2.0, Ref. 2"}, {"cp_", "si_", "1.8100", "225.1676", "Ver. 2.0, Ref. 2"}, {"cp_", "sp_", "1.7106", "320.0000", "Ver. 2.0, Ref. 2"}, {"cr_", "n=", "1.2600", "560.0000", "Ver. 2.0, Ref. 2"}, {"cr_", "n=_1", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_2", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n=_3", "1.2600", "560.0000", "Ver. 2.0, Ref. 3"}, {"cr_", "n_", "1.3200", "388.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "ct_", "1.2040", "800.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "f_", "1.3400", "278.3932", "Ver. 2.0, Ref. 2"}, {"ct_", "h_", "1.0530", "316.9016", "Ver. 2.0, Ref. 2"}, {"ct_", "i_", "2.0110", "248.9268", "Ver. 2.0, Ref. 2"}, {"ct_", "n+_", "1.3820", "278.3768", "Ver. 2.0, Ref. 2"}, {"ct_", "n3m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "n4m_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "n=", "1.3550", "342.2448", "Ver. 2.0, Ref. 2"}, {"ct_", "n=_1", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_2", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n=_3", "1.3550", "342.2448", "Ver. 2.0, Ref. 3"}, {"ct_", "n_", "1.3550", "289.4448", "Ver. 2.0, Ref. 2"}, {"ct_", "na_", "1.3820", "286.8096", "Ver. 2.0, Ref. 2"}, {"ct_", "nt_", "1.1580", "880.0000", "Ver. 2.0, Ref. 2"}, {"ct_", "o'_", "1.3000", "318.8680", "Ver. 2.0, Ref. 2"}, {"ct_", "o_", "1.3130", "367.8164", "Ver. 2.0, Ref. 2"}, {"ct_", "op_", "1.3000", "346.4680", "Ver. 2.0, Ref. 2"}, {"ct_", "p_", "1.6700", "273.4668", "Ver. 2.0, Ref. 2"}, {"ct_", "s'_", "1.6900", "270.8344", "Ver. 2.0, Ref. 2"}, {"ct_", "s3e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "s4e_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "s_", "1.7200", "271.4328", "Ver. 2.0, Ref. 2"}, {"ct_", "si_", "1.7800", "267.2964", "Ver. 2.0, Ref. 2"}, {"ct_", "sp_", "1.6900", "256.0344", "Ver. 2.0, Ref. 2"}, {"dw", "dw", "0.7416", "398.2392", "Ver. 2.0, Ref. 2"}, {"f_", "f_", "1.4170", "259.0683", "Ver. 2.0, Ref. 2"}, {"f_", "h_", "1.0230", "520.7304", "Ver. 2.0, Ref. 2"}, {"f_", "i_", "1.9810", "174.1664", "Ver. 2.0, Ref. 2"}, {"f_", "n+_", "1.3520", "178.0372", "Ver. 2.0, Ref. 2"}, {"f_", "n3m_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"f_", "n4m_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"f_", "n=", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"f_", "n=_1", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"f_", "n=_2", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"f_", "n=_3", "1.3250", "242.1856", "Ver. 2.0, Ref. 3"}, {"f_", "n_", "1.3250", "189.3856", "Ver. 2.0, Ref. 2"}, {"f_", "na_", "1.3520", "200.9852", "Ver. 2.0, Ref. 2"}, {"f_", "np_", "1.3250", "242.1856", "Ver. 2.0, Ref. 2"}, {"f_", "o'_", "1.2700", "204.0505", "Ver. 2.0, Ref. 2"}, {"f_", "o_", "1.4180", "224.0000", "Ver. 2.0, Ref. 2"}, {"f_", "op_", "1.2700", "231.6505", "Ver. 2.0, Ref. 2"}, {"f_", "p_", "1.5400", "230.3664", "Ver. 2.0, Ref. 2"}, {"f_", "s'_", "1.6600", "195.3021", "Ver. 2.0, Ref. 2"}, {"f_", "s3e_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"f_", "s4e_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"f_", "s_", "1.6900", "204.8184", "Ver. 2.0, Ref. 2"}, {"f_", "si_", "1.5870", "297.3400", "Ver. 2.0, Ref. 2"}, {"f_", "sp_", "1.6600", "180.5021", "Ver. 2.0, Ref. 2"}, {"h_", "h_", "0.7461", "398.7301", "Ver. 2.0, Ref. 2"}, {"h_", "i_", "1.6940", "292.0432", "Ver. 2.0, Ref. 2"}, {"h_", "n+_", "1.0650", "461.1848", "Ver. 2.0, Ref. 2"}, {"h_", "n3m_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"h_", "n4m_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"h_", "n=", "1.0380", "551.2061", "Ver. 2.0, Ref. 2"}, {"h_", "n=_1", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"h_", "n=_2", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"h_", "n=_3", "1.0380", "551.2061", "Ver. 2.0, Ref. 3"}, {"h_", "n_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"h_", "na_", "1.0260", "457.4592", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "1.0260", "483.4512", "Ver. 2.0, Ref. 2"}, {"h_", "o'_", "0.9830", "458.4610", "Ver. 2.0, Ref. 2"}, {"h_", "o_", "0.9600", "493.8480", "Ver. 2.0, Ref. 2"}, {"h_", "op_", "0.9830", "486.0610", "Ver. 2.0, Ref. 2"}, {"h_", "p_", "1.4300", "224.0000", "Ver. 2.0, Ref. 2"}, {"h_", "s'_", "1.3730", "316.8138", "Ver. 2.0, Ref. 2"}, {"h_", "s3e_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"h_", "s4e_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"h_", "s_", "1.3300", "274.1288", "Ver. 2.0, Ref. 2"}, {"h_", "si_", "1.4630", "288.3168", "Ver. 2.0, Ref. 2"}, {"h_", "sp_", "1.3730", "236.5449", "Ver. 2.0, Ref. 2"}, {"i_", "i_", "2.6620", "123.2110", "Ver. 2.0, Ref. 2"}, {"i_", "n+_", "2.0230", "177.2764", "Ver. 2.0, Ref. 2"}, {"i_", "n3m_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"i_", "n4m_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"i_", "n=", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"i_", "n=_1", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"i_", "n=_2", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"i_", "n=_3", "1.9960", "239.4972", "Ver. 2.0, Ref. 3"}, {"i_", "n_", "1.9960", "186.6972", "Ver. 2.0, Ref. 2"}, {"i_", "na_", "2.0230", "184.0104", "Ver. 2.0, Ref. 2"}, {"i_", "np_", "1.9960", "239.4972", "Ver. 2.0, Ref. 2"}, {"i_", "o'_", "1.9410", "213.2317", "Ver. 2.0, Ref. 2"}, {"i_", "o_", "1.9840", "264.9868", "Ver. 2.0, Ref. 2"}, {"i_", "op_", "1.9410", "240.8317", "Ver. 2.0, Ref. 2"}, {"i_", "p_", "2.3110", "162.7080", "Ver. 2.0, Ref. 2"}, {"i_", "s'_", "2.3310", "167.6272", "Ver. 2.0, Ref. 2"}, {"i_", "s3e_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"i_", "s4e_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"i_", "s_", "2.3610", "167.7624", "Ver. 2.0, Ref. 2"}, {"i_", "si_", "2.4210", "158.9664", "Ver. 2.0, Ref. 2"}, {"i_", "sp_", "2.3310", "152.8272", "Ver. 2.0, Ref. 2"}, {"n+_", "n+_", "1.3940", "193.5604", "Ver. 2.0, Ref. 2"}, {"n+_", "n3m_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n+_", "n4m_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n+_", "n=", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"n+_", "n=_1", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n+_", "n=_2", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n+_", "n=_3", "1.3670", "263.4360", "Ver. 2.0, Ref. 3"}, {"n+_", "n_", "1.3670", "210.6360", "Ver. 2.0, Ref. 2"}, {"n+_", "na_", "1.3940", "211.1592", "Ver. 2.0, Ref. 2"}, {"n+_", "np_", "1.3670", "263.4360", "Ver. 2.0, Ref. 2"}, {"n+_", "o'_", "1.3120", "234.1060", "Ver. 2.0, Ref. 2"}, {"n+_", "o_", "1.3250", "291.0020", "Ver. 2.0, Ref. 2"}, {"n+_", "op_", "1.3120", "261.7060", "Ver. 2.0, Ref. 2"}, {"n+_", "p_", "1.6820", "209.1536", "Ver. 2.0, Ref. 2"}, {"n+_", "s'_", "1.7020", "198.0952", "Ver. 2.0, Ref. 2"}, {"n+_", "s_", "1.7320", "200.1168", "Ver. 2.0, Ref. 2"}, {"n+_", "si_", "1.7920", "206.9412", "Ver. 2.0, Ref. 2"}, {"n+_", "sp_", "1.7020", "183.2952", "Ver. 2.0, Ref. 2"}, {"n3m_", "n3m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n3m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n3m_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n3m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n3m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n3m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n3m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n3m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n3m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n3m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n3m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n3m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n4m_", "n4m_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "n=_1", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_2", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n=_3", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n4m_", "n_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n4m_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"n4m_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n4m_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"n4m_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"n4m_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"n4m_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"n4m_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"n4m_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"n4m_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"n4m_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "1.2100", "651.2000", "Ver. 2.0, Ref. 2"}, {"n=", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n=", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"n=", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"n=", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 2"}, {"n=", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"n=", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"n=", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"n=", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 2"}, {"n=", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"n=", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n=_1", "n=_1", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_2", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_1", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n=_1", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n=_1", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_1", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 3"}, {"n=_1", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_1", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_1", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_1", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 3"}, {"n=_1", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_1", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_1", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_2", "1.2760", "488.0000", "Ver. 2.0, Ref. 3"}, {"n=_2", "n=_3", "1.3400", "325.6000", "Ver. 2.0, Ref. 2"}, {"n=_2", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n=_2", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n=_2", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_2", "o'_", "1.2225", "434.0900", "Ver. 2.0, Ref. 3"}, {"n=_2", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_2", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_2", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_2", "s'_", "1.6325", "375.1624", "Ver. 2.0, Ref. 3"}, {"n=_2", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_2", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_2", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 3"}, {"n=_3", "n=_3", "1.2100", "651.2000", "Ver. 2.0, Ref. 3"}, {"n=_3", "n_", "1.3400", "272.8000", "Ver. 2.0, Ref. 3"}, {"n=_3", "na_", "1.3670", "274.4968", "Ver. 2.0, Ref. 3"}, {"n=_3", "np_", "1.3400", "325.6000", "Ver. 2.0, Ref. 3"}, {"n=_3", "o'_", "1.1600", "575.8720", "Ver. 2.0, Ref. 3"}, {"n=_3", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 3"}, {"n=_3", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 3"}, {"n=_3", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 3"}, {"n=_3", "s'_", "1.5900", "489.2400", "Ver. 2.0, Ref. 3"}, {"n=_3", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 3"}, {"n=_3", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"n=_3", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 3"}, {"n=_3", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"n_", "n_", "1.3400", "220.0000", "Ver. 2.0, Ref. 2"}, {"n_", "na_", "1.3670", "221.6968", "Ver. 2.0, Ref. 2"}, {"n_", "np_", "1.3400", "272.8000", "Ver. 2.0, Ref. 2"}, {"n_", "o'_", "1.2850", "239.5080", "Ver. 2.0, Ref. 2"}, {"n_", "o_", "1.2980", "301.2632", "Ver. 2.0, Ref. 2"}, {"n_", "op_", "1.2850", "267.1080", "Ver. 2.0, Ref. 2"}, {"n_", "p_", "1.6550", "219.9524", "Ver. 2.0, Ref. 2"}, {"n_", "s'_", "1.6750", "208.2844", "Ver. 2.0, Ref. 2"}, {"n_", "s3e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "s4e_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "s_", "1.7050", "210.6208", "Ver. 2.0, Ref. 2"}, {"n_", "si_", "1.7650", "216.8064", "Ver. 2.0, Ref. 2"}, {"n_", "sp_", "1.6750", "193.4844", "Ver. 2.0, Ref. 2"}, {"na_", "na_", "1.3940", "220.8000", "Ver. 2.0, Ref. 2"}, {"na_", "np_", "1.3670", "274.4968", "Ver. 2.0, Ref. 2"}, {"na_", "o'_", "1.3120", "246.5760", "Ver. 2.0, Ref. 2"}, {"na_", "o_", "1.3250", "301.3500", "Ver. 2.0, Ref. 2"}, {"na_", "op_", "1.3120", "274.1760", "Ver. 2.0, Ref. 2"}, {"na_", "p_", "1.6820", "210.5400", "Ver. 2.0, Ref. 2"}, {"na_", "s'_", "1.7020", "205.7752", "Ver. 2.0, Ref. 2"}, {"na_", "s3e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "s4e_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "s_", "1.7320", "206.9404", "Ver. 2.0, Ref. 2"}, {"na_", "si_", "1.7920", "204.4236", "Ver. 2.0, Ref. 2"}, {"na_", "sp_", "1.7020", "190.9752", "Ver. 2.0, Ref. 2"}, {"np_", "np_", "1.3400", "408.0000", "Ver. 2.0, Ref. 2"}, {"np_", "o'_", "1.2850", "292.3080", "Ver. 2.0, Ref. 2"}, {"np_", "o_", "1.2980", "354.0632", "Ver. 2.0, Ref. 2"}, {"np_", "op_", "1.2850", "319.9080", "Ver. 2.0, Ref. 2"}, {"np_", "p_", "1.6550", "272.7524", "Ver. 2.0, Ref. 2"}, {"np_", "s'_", "1.6750", "261.0844", "Ver. 2.0, Ref. 2"}, {"np_", "s3e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s4e_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "s_", "1.7050", "263.4208", "Ver. 2.0, Ref. 2"}, {"np_", "si_", "1.7650", "269.6064", "Ver. 2.0, Ref. 2"}, {"np_", "sp_", "1.6750", "246.2844", "Ver. 2.0, Ref. 2"}, {"nt_", "nt_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"nz_", "nz_", "1.0976", "1632.4955", "Ver. 2.0, Ref. 2"}, {"o'_", "o'_", "1.1100", "484.8000", "Ver. 2.0, Ref. 2"}, {"o'_", "o_", "1.2430", "323.1720", "Ver. 2.0, Ref. 2"}, {"o'_", "op_", "1.2300", "272.4000", "Ver. 2.0, Ref. 2"}, {"o'_", "p_", "1.4800", "524.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "s'_", "1.5400", "421.5188", "Ver. 2.0, Ref. 2"}, {"o'_", "s3e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"o'_", "s4e_", "1.6500", "239.5744", "Ver. 2.0, Ref. 2"}, {"o'_", "s_", "1.5900", "360.4188", "Ver. 2.0, Ref. 2"}, {"o'_", "si_", "1.6500", "454.7464", "Ver. 2.0, Ref. 2"}, {"o'_", "sp_", "1.5600", "341.2736", "Ver. 2.0, Ref. 2"}, {"o-_", "p_", "1.4800", "428.0000", "Ver. 2.0, Ref. 2"}, {"o_", "o_", "1.2080", "833.6868", "Ver. 2.0, Ref. 2"}, {"o_", "op_", "1.2430", "350.7720", "Ver. 2.0, Ref. 2"}, {"o_", "p_", "1.6100", "245.2000", "Ver. 2.0, Ref. 2"}, {"o_", "s'_", "1.6330", "286.7584", "Ver. 2.0, Ref. 2"}, {"o_", "s3e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "s4e_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "s_", "1.6930", "288.0848", "Ver. 2.0, Ref. 2"}, {"o_", "si_", "1.6650", "392.8000", "Ver. 2.0, Ref. 2"}, {"o_", "sp_", "1.6330", "271.9584", "Ver. 2.0, Ref. 2"}, {"op_", "op_", "1.2300", "300.0000", "Ver. 2.0, Ref. 2"}, {"op_", "p_", "1.6300", "286.0904", "Ver. 2.0, Ref. 2"}, {"op_", "s'_", "1.6200", "262.9744", "Ver. 2.0, Ref. 2"}, {"op_", "s3e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "s4e_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "s_", "1.6800", "266.7748", "Ver. 2.0, Ref. 2"}, {"op_", "si", "1.5870", "292.2400", "Ver. 2.0, Ref. 2"}, {"op_", "sp_", "1.6500", "247.8440", "Ver. 2.0, Ref. 2"}, {"p_", "p_", "1.9700", "176.0000", "Ver. 2.0, Ref. 2"}, {"p_", "s'_", "1.9700", "255.2524", "Ver. 2.0, Ref. 2"}, {"p_", "s-_", "1.9800", "210.9800", "Ver. 2.0, Ref. 2"}, {"p_", "s3e_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"p_", "s4e_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"p_", "s_", "2.0200", "186.8792", "Ver. 2.0, Ref. 2"}, {"p_", "si_", "1.9170", "168.2072", "Ver. 2.0, Ref. 2"}, {"p_", "sp_", "1.9900", "175.1796", "Ver. 2.0, Ref. 2"}, {"s'_", "s'_", "1.9700", "320.0000", "Ver. 2.0, Ref. 2"}, {"s'_", "s3e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "s4e_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "s_", "2.0400", "189.9260", "Ver. 2.0, Ref. 2"}, {"s'_", "si_", "2.0800", "247.5744", "Ver. 2.0, Ref. 2"}, {"s'_", "sp_", "1.9900", "240.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s3e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "s_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s3e_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s4e_", "s4e_", "2.0000", "180.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "s_", "2.1000", "160.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s4e_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"s_", "s_", "2.0547", "180.0000", "Ver. 2.0, Ref. 2"}, {"s_", "si_", "2.1300", "177.2928", "Ver. 2.0, Ref. 2"}, {"s_", "sp_", "2.0400", "175.1260", "Ver. 2.0, Ref. 2"}, {"si_", "si_", "2.1900", "144.0000", "Ver. 2.0, Ref. 2"}, {"si_", "sp_", "2.1000", "167.4260", "Ver. 2.0, Ref. 2"}, {"sp_", "sp_", "2.0100", "160.0000", "Ver. 2.0, Ref. 2"}}; /* Quartic bonds 0= Key_a, 1= Key_b, 2= R0 (A), 3= K2 (kcal mol-1), 4= K3 (kcal mol-1), 5= K4 (kcal mol-1), 6= PCFF info E = K2 * (R - R0)^2 + K3 * (R - R0)^3 + K4 * (R - R0)^4 */ char * PCFF_bonds[126][7]= {{"az", "oah", "1.6987", "330.3950", "-600.3590", "662.1600", "Ver. 3.0, Ref. 10"}, {"az", "oas", "1.6614", "378.8170", "-590.1830", "419.2000", "Ver. 3.0, Ref. 10"}, {"az", "ob", "2.2643", "131.8700", "462.6760", "650.2020", "Ver. 3.0, Ref. 10"}, {"br", "c", "1.9390", "151.1370", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "1.5300", "299.6700", "-501.7700", "679.8100", "Ver. 2.1, Ref. 8"}, {"c", "c", "1.5300", "299.6700", "-501.7700", "679.8100", "Ver. 1.0, Ref. 1"}, {"c", "c-", "1.5483", "253.0800", "-449.0300", "457.3200", "Ver. 1.0, Ref. 1"}, {"c", "c=", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "1.5060", "312.3517", "-582.1861", "339.8971", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "1.5140", "312.3719", "-465.8290", "473.8300", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "1.5202", "253.7067", "-423.0370", "396.9000", "Ver. 1.0, Ref. 1"}, {"c", "cl", "1.7900", "194.3190", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "cp", "1.5010", "321.9021", "-521.8208", "572.1628", "Ver. 1.0, Ref. 1"}, {"c", "f", "1.3900", "403.0320", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "h", "1.1010", "345.0000", "-691.8900", "844.6000", "Ver. 2.1, Ref. 8"}, {"c", "h", "1.1010", "341.0000", "-691.8900", "844.6000", "Ver. 1.0, Ref. 1"}, {"c", "n", "1.4520", "327.1657", "-547.8990", "526.5000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "1.5185", "293.1700", "-603.7882", "629.6900", "Ver. 1.0, Ref. 1"}, {"c", "n=", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n=1", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n=2", "1.4750", "336.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n_2", "1.4632", "319.1593", "-586.3243", "961.4143", "Ver. 2.1, Ref. 7"}, {"c", "na", "1.4570", "365.8052", "-699.6368", "998.4842", "Ver. 1.0, Ref. 1"}, {"c", "nr", "1.4695", "340.2400", "-589.4800", "854.5300", "Ver. 1.0, Ref. 1"}, {"c", "o", "1.4200", "400.3954", "-835.1951", "1313.0142", "Ver. 1.0, Ref. 1"}, {"c", "o_2", "1.4300", "326.7273", "-608.5306", "689.0333", "Ver. 2.2, Ref. 7"}, {"c", "o_2", "1.4457", "326.7273", "-608.5306", "689.0333", "Ver. 2.1, Ref. 6"}, {"c", "oz", "1.4457", "326.7273", "-608.5306", "689.0333", "Ver. 2.0, Ref. 5"}, {"c", "s", "1.8230", "225.2768", "-327.7057", "488.9722", "Ver. 1.0, Ref. 1"}, {"c", "si", "1.8995", "189.6536", "-279.4210", "307.5135", "Ver. 2.2, Ref. 9"}, {"c", "sio", "1.9073", "157.0049", "-237.7023", "356.0328", "Ver. 1.0, Ref. 4"}, {"c+", "nr", "1.3834", "380.4600", "-814.4300", "1153.3000", "Ver. 1.0, Ref. 1"}, {"c-", "h", "1.1331", "241.0600", "-574.7800", "853.7500", "Ver. 1.0, Ref. 1"}, {"c-", "o-", "1.2339", "711.3500", "-1543.9000", "1858.6000", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "1.3400", "543.9900", "-1238.2025", "1644.0282", "Ver. 3.1, Ref. 12"}, {"c=", "c=1", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c=2", "1.3521", "545.2663", "-1005.6330", "1225.7415", "Ver. 1.0, Ref. 1"}, {"c=", "c_1", "1.4600", "270.1200", "-433.2519", "405.3601", "Ver. 3.1, Ref. 12"}, {"c=", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=", "n_2", "1.3600", "380.8100", "-725.2168", "805.6459", "Ver. 3.1, Ref. 12"}, {"c=1", "c=2", "1.4400", "304.9700", "-519.7458", "516.7039", "Ver. 3.1, Ref. 12"}, {"c=1", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=2", "c=2", "1.3400", "543.9900", "-1238.2025", "1644.0282", "Ver. 3.1, Ref. 12"}, {"c=2", "c_1", "1.4600", "270.1200", "-433.2519", "405.3601", "Ver. 3.1, Ref. 12"}, {"c=2", "h", "1.0883", "365.7679", "-725.5404", "781.6621", "Ver. 1.0, Ref. 1"}, {"c=2", "o=", "1.1600", "1112.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c=2", "s'", "1.5526", "567.3600", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_0", "cp", "1.4890", "339.3574", "-655.7236", "670.2362", "Ver. 2.1, Ref. 8"}, {"c_0", "h", "1.1220", "304.8631", "-623.3705", "700.2828", "Ver. 2.1, Ref. 8"}, {"c_0", "o_1", "1.2160", "823.7948", "-1878.7940", "2303.5311", "Ver. 2.1, Ref. 8"}, {"c_1", "cp", "1.4890", "339.3574", "-655.7236", "670.2362", "Ver. 2.1, Ref. 6"}, {"c_1", "h", "1.1110", "325.5717", "-632.1990", "726.0003", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "1.4160", "359.1591", "-558.4730", "1146.3810", "Ver. 1.0, Ref. 1"}, {"c_1", "n_2", "1.3660", "390.6783", "-768.3798", "923.2418", "Ver. 2.1, Ref. 8"}, {"c_1", "o", "1.3649", "368.7309", "-832.4784", "1274.0231", "Ver. 1.0, Ref. 1"}, {"c_1", "o_1", "1.2020", "851.1403", "-1918.4882", "2160.7659", "Ver. 2.1, Ref. 6"}, {"c_1", "o_1", "1.2195", "820.7018", "-1875.1000", "2303.7600", "Ver. 1.0, Ref. 1"}, {"c_1", "o_2", "1.3683", "367.1481", "-794.7908", "1055.2319", "Ver. 2.1, Ref. 6"}, {"c_2", "n_2", "1.3580", "440.6783", "-828.3798", "1423.2418", "Ver. 2.1, Ref. 7"}, {"c_2", "o_1", "1.2063", "854.2903", "-1922.3407", "2101.6824", "Ver. 2.1, Ref. 7"}, {"c_2", "o_2", "1.3598", "391.3310", "-788.5655", "1212.3812", "Ver. 2.1, Ref. 7"}, {"cl", "p=", "2.0378", "158.7770", "-239.1290", "210.0844", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "1.4170", "470.8361", "-627.6179", "1327.6345", "Ver. 2.1, Ref. 8"}, {"cp", "cp", "1.3823", "476.2720", "-869.7532", "1281.3640", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "1.4314", "356.0904", "-627.6179", "1327.6345", "Ver. 1.0, Ref. 1"}, {"cp", "h", "1.0982", "372.8251", "-803.4526", "894.3173", "Ver. 2.1, Ref. 8"}, {"cp", "h", "1.0731", "374.9058", "-799.8437", "899.9151", "Ver. 2.0, Ref. 5"}, {"cp", "n_2", "1.4390", "344.0452", "-652.1208", "1022.2242", "Ver. 2.1, Ref. 7"}, {"cp", "nh", "1.3749", "477.5202", "-848.5592", "1022.3909", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "1.3912", "447.0438", "-784.5346", "886.1671", "Ver. 1.0, Ref. 1"}, {"cp", "np", "1.3485", "508.8587", "-977.6914", "1772.5134", "Ver. 1.0, Ref. 1"}, {"cp", "o", "1.3768", "428.8798", "-738.2351", "1114.9655", "Ver. 1.0, Ref. 1"}, {"cp", "o_2", "1.4098", "387.9119", "-715.9186", "660.2442", "Ver. 2.1, Ref. 6"}, {"cp", "op", "1.3597", "547.5169", "-834.0665", "544.3090", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "1.3828", "387.9119", "-715.9186", "660.2442", "Ver. 2.0, Ref. 5"}, {"cp", "p=", "1.7886", "197.7015", "-332.2507", "325.7157", "Ver. 3.1, Ref. 12"}, {"cp", "si", "1.8634", "233.2433", "-276.8692", "161.6659", "Ver. 2.2, Ref. 9"}, {"cp", "sp", "1.7053", "364.2568", "-457.7758", "291.1498", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 2"}, {"cr", "n=1", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"cr", "n=2", "1.2600", "560.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"cr", "nr", "1.3200", "388.0000", "0.0000", "0.0000", "Ver. 1.1, Ref. 2"}, {"cz", "oo", "1.1953", "854.2903", "-1922.3407", "2301.6824", "Ver. 2.0, Ref. 5"}, {"cz", "oz", "1.3398", "391.3310", "-788.5655", "1212.3812", "Ver. 2.0, Ref. 5"}, {"f", "f", "1.4200", "330.3795", "-647.0052", "760.1593", "Ver. 1.0, Ref. 4"}, {"f", "h*", "0.9170", "695.3795", "-1736.0052", "2430.1593", "Ver. 1.0, Ref. 4"}, {"f", "p=", "1.5632", "379.1441", "-882.3835", "1197.9185", "Ver. 3.1, Ref. 12"}, {"h", "h", "0.7414", "414.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "p=", "1.3861", "285.2043", "-575.6851", "677.8456", "Ver. 3.1, Ref. 12"}, {"h", "s", "1.3261", "275.1123", "-531.3181", "562.9630", "Ver. 1.0, Ref. 1"}, {"h", "si", "1.4783", "202.7798", "-305.3603", "280.2685", "Ver. 2.2, Ref. 9"}, {"h", "sio", "1.4802", "187.1010", "-280.7306", "258.8998", "Ver. 1.0, Ref. 4"}, {"h*", "n", "1.0100", "462.7500", "-1053.6300", "1545.7570", "Ver. 1.0, Ref. 1"}, {"h*", "n=", "1.0025", "540.1120", "-1500.2952", "2431.0081", "Ver. 3.1, Ref. 12"}, {"h*", "na", "1.0060", "466.7400", "-1073.6018", "1251.1056", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "1.0012", "465.8608", "-1066.2360", "1496.5647", "Ver. 1.0, Ref. 1"}, {"h*", "nr", "1.0023", "462.3900", "-1044.6000", "1468.7000", "Ver. 1.0, Ref. 1"}, {"h*", "o", "0.9650", "532.5062", "-1282.9050", "2004.7658", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "0.9700", "563.2800", "-1428.2200", "1902.1200", "Ver. 1.2, Ref. 3"}, {"h*", "osi", "0.9494", "540.3633", "-1311.8663", "2132.4446", "Ver. 1.0, Ref. 4"}, {"h+", "n+", "1.0119", "448.6300", "-963.1917", "1248.4000", "Ver. 1.0, Ref. 1"}, {"hb", "ob", "0.9513", "665.5370", "-1616.9700", "2259.4700", "Ver. 3.0, Ref. 10"}, {"hi", "nh", "1.0053", "463.9230", "-1050.8070", "1284.7262", "Ver. 1.1, Ref. 2"}, {"hn2", "n_2", "0.9959", "495.8294", "-1092.7239", "1441.1290", "Ver. 2.1, Ref. 7"}, {"ho2", "o_2", "0.9520", "534.2994", "-1287.1937", "1889.1396", "Ver. 2.1, Ref. 6"}, {"ho2", "oz", "0.9520", "534.2994", "-1287.1937", "1889.1396", "Ver. 2.0, Ref. 5"}, {"hoa", "oah", "0.9421", "719.2330", "-1606.4200", "2199.7200", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "0.9457", "702.8730", "-1531.8700", "1814.8300", "Ver. 3.0, Ref. 10"}, {"n", "p=", "1.6580", "329.1660", "-713.7949", "902.9188", "Ver. 3.1, Ref. 12"}, {"n=", "p=", "1.5880", "429.1660", "-751.4047", "767.4308", "Ver. 3.1, Ref. 12"}, {"nh", "np", "1.3204", "646.7598", "-1639.8800", "6799.7099", "Ver. 1.0, Ref. 1"}, {"np", "np", "1.3121", "513.0111", "-873.6366", "1634.3437", "Ver. 1.0, Ref. 1"}, {"nz", "nz", "1.0977", "1652.4000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o", "p=", "1.6090", "333.0981", "-726.6232", "924.6198", "Ver. 3.1, Ref. 12"}, {"o=", "o=", "1.2074", "847.4400", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o=", "s'", "1.4308", "743.7600", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"oas", "sz", "1.5923", "392.6680", "-1004.4800", "3452.8601", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "1.6446", "393.6690", "-989.8420", "1461.9800", "Ver. 3.0, Ref. 10"}, {"osh", "sz", "1.6125", "420.0240", "-845.6110", "1438.6300", "Ver. 3.0, Ref. 10"}, {"osi", "sio", "1.6562", "306.1232", "-517.3424", "673.7067", "Ver. 1.0, Ref. 4"}, {"oss", "sz", "1.6155", "325.4430", "-943.3640", "1454.6700", "Ver. 3.0, Ref. 10"}, {"s", "s", "2.0559", "197.6560", "-196.1366", "644.4103", "Ver. 1.0, Ref. 1"}, {"si", "si", "2.3384", "114.2164", "-140.4212", "80.7084", "Ver. 2.2, Ref. 9"}}; /* Quadratic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= PCFF info E = K2 * (Theta - Theta0)^2 With: - Theta = Angle - Theta0 = Equilibrium angle - K2 = Spring constant */ char * PCFF_angles_auto[329][6]= {{"*", "c'_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "si_", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "h_", "110.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "f_", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s'_", "123.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s3e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s4e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "o'_", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "o_", "110.0000", "122.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n3m_", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n4m_", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n_", "120.0000", "53.5000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c3m_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c4m_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "c_", "115.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "n3m_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "n4m_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c'_", "n_", "114.0000", "82.0000", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "h_", "117.0200", "26.3900", "Ver. 2.0, Ref. 2"}, {"h_", "c'_", "o'_", "120.0000", "55.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c'_", "o'_", "125.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c'_", "o'_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"n_", "c'_", "o'_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"o'_", "c'_", "o_", "123.0000", "145.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "si_", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "h_", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "f_", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s'_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s3e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s4e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "s_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o'_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o3e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o4e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "o_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "n3m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "n4m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "n_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "c3m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "c4m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c3m_", "c_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "c3m_", "60.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "o3e_", "60.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c3m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c3m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c3m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"n3m_", "c3m_", "n3m_", "60.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"s3e_", "c3m_", "s3e_", "60.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "si_", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "h_", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "f_", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s'_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s3e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s4e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "s_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o'_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o3e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o4e_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "o_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "n3m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "n4m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "n_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "c3m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "c4m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c4m_", "c_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c4m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "c4m_", "95.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "n4m_", "88.3400", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o4e_", "91.8400", "70.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "o_", "121.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c4m_", "s4e_", "94.5900", "62.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c4m_", "n_", "112.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c4m_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "n4m_", "88.4000", "50.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"n4m_", "c4m_", "s4e_", "89.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "o4e_", "90.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"o4e_", "c4m_", "s4e_", "89.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"s4e_", "c4m_", "s4e_", "91.0000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "*", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "si_", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "h_", "120.0000", "37.5000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "f_", "120.0000", "96.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s'_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s3e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s4e_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "s_", "120.0000", "40.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "o'_", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "o_", "120.0000", "68.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "n3m_", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "n4m_", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "n_", "120.0000", "90.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "c3m_", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "c4m_", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"*", "c=_", "c_", "120.0000", "36.2000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "si_", "112.3000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "h_", "109.5000", "44.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "f_", "107.8000", "95.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s'_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s3e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s4e_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s_", "109.5000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "o_", "109.5000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n3m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n4m_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n_", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "c3m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "c4m_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "c_", "109.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "c_", "n_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "c_", "n_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "n3m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "n4m_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "n_", "114.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "o_", "110.5000", "46.0000", "Ver. 2.0, Ref. 2"}, {"c_", "c_", "s_", "115.0000", "46.0000", "Ver. 2.0, Ref. 2"}, {"f_", "c_", "h_", "107.1000", "62.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "*", "120.0000", "65.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "si_", "120.0000", "34.6000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "h_", "120.0000", "37.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "f_", "120.0000", "99.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s'_", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s3e_", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s4e_", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s_", "120.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o'_", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o_", "120.0000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n3m_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n4m_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n_", "120.0000", "102.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "c3m_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "c4m_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "c_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c_", "cp_", "s_", "114.0000", "89.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "*", "180.0000", "200.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "si_", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "f_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s3e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s4e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "s_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "o'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "o_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "n3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "n4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "n_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3m_", "c_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "c3m_", "60.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "c_", "113.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "n3m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "si_", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "f_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s3e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s4e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "s_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "o'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "o_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "n3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "n4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "n_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n4m_", "c_", "110.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "c4m_", "91.3800", "80.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "n4m_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "*", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "si_", "120.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "f_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "h_", "122.0000", "35.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s'_", "120.0000", "70.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s3e_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s4e_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "o'_", "120.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "o_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "n_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "c3m_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "c4m_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "c_", "120.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "*", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "si_", "109.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "f_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "h_", "110.0000", "41.6000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s3e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s4e_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "o'_", "114.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "o_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "n3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "n4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "n_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "c3m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "c4m_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "c_", "109.0000", "80.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "*", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "si_", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "f_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "h_", "120.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s'_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s3e_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s4e_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "o'_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "o_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "n_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "c3m_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "c4m_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "c_", "120.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "nt_", "*", "180.0000", "50.0000", "Ver. 2.0, Ref. 2"}, {"h_", "o*_", "h_", "104.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "o3e_", "c3m_", "58.9580", "60.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "o4e_", "c4m_", "91.7370", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "*", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "si_", "124.1000", "56.4000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "h_", "109.0000", "58.5000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "f_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s'_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s3e_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s4e_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "o'_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "o_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "n3m_", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "n4m_", "120.0010", "72.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "n_", "120.0000", "72.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "c3m_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "c4m_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "c_", "109.5000", "60.0000", "Ver. 2.0, Ref. 2"}, {"si", "o_", "si_", "149.8000", "31.1000", "Ver. 2.0, Ref. 2"}, {"*", "op_", "*", "108.0000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "op_", "si_", "106.0000", "27.5000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "*", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "si_", "109.5000", "30.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "h_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "f_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "s'_", "120.0000", "100.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "s_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "o'_", "120.0000", "110.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "o_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "n_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "c3m_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "c4m_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "c_", "109.5000", "45.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "si_", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "f_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s'_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s3e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s4e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "s_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "o'_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "n3m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "n4m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "n_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "c3m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "c4m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s3e_", "c_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c3m_", "s3e_", "c3m_", "44.5000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "*", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "si_", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "f_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s'_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s3e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s4e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "s_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "o'_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "n3m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "n4m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "n_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "c3m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "c4m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s4e_", "c_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"c4m_", "s4e_", "c4m_", "85.9200", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "*", "109.5000", "50.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "si_", "109.5000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "f_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s'_", "109.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s3e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s4e_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s_", "103.5000", "75.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "o'_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "n3m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "n4m_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "n_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "c3m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "c4m_", "99.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "c_", "102.0000", "58.0000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "*", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "si_", "113.4000", "33.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "h_", "112.0000", "31.8000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "f_", "117.3000", "44.1000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "s_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "o_", "113.1000", "42.3000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "n_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "c3m_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "c4m_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "c_", "113.5000", "44.4000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "*", "92.5670", "120.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "si_", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "h_", "96.0000", "48.0000", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "f_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "s'_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "s_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "o'_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "o_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "n_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "c3m_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "c4m_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}, {"*", "sp_", "c_", "92.5670", "126.5060", "Ver. 2.0, Ref. 2"}}; /* Quartic angles 0= Key_a, 1= Key_b, 2= Key_c, 3= Theta0, 4= K2, 5= K3, 6= K4, 7= PCFF info Delta = Theta - Theta0 E = K2 * Delta^2 + K3 * Delta^3 + K4 * Delta^4 With: - Theta = Angle - Theta0 = Equilibrium angle */ char * PCFF_angles[302][8]= {{"oah", "az", "oah", "119.5540", "56.2161", "67.5146", "75.6704", "Ver. 3.0, Ref. 10"}, {"oah", "az", "oas", "135.8500", "1.5716", "-23.2602", "24.2341", "Ver. 3.0, Ref. 10"}, {"oah", "az", "ob", "96.9383", "41.2978", "-101.1850", "180.8230", "Ver. 3.0, Ref. 10"}, {"oas", "az", "oas", "114.1500", "112.9470", "-37.6330", "22.7467", "Ver. 3.0, Ref. 10"}, {"oas", "az", "ob", "97.0360", "73.0531", "-31.9551", "5.5982", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "97.0360", "73.0531", "-31.9551", "5.5982", "Ver. 3.0, Ref. 10"}, {"br", "c", "br", "109.6985", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "109.1026", "64.7730", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "cl", "111.6408", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "f", "109.1026", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"br", "c", "h", "106.9999", "46.0608", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "112.6700", "39.5160", "-7.4430", "-9.5583", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "104.4900", "31.3750", "-4.4023", "-6.5271", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "111.7600", "45.7026", "-10.6396", "-9.9121", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_0", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_1", "108.5295", "51.9747", "-9.4851", "-10.9985", "Ver. 2.1, Ref. 8"}, {"c", "c", "cl", "107.0000", "61.1745", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.3, Ref. 1"}, {"c", "c", "f", "109.2000", "68.3715", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c", "h", "110.7700", "41.4530", "-10.6040", "5.1290", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "114.3018", "42.6589", "-10.5464", "-9.3243", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "112.1300", "66.4520", "4.8694", "37.7860", "Ver. 1.0, Ref. 1"}, {"c", "c", "n=", "117.2847", "55.4431", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "c", "n_2", "109.8300", "76.8966", "-48.7334", "18.0162", "Ver. 2.1, Ref. 7"}, {"c", "c", "na", "111.9100", "60.7147", "-13.3366", "-13.0785", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "117.3500", "55.0400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "111.2700", "54.5381", "-8.3642", "-13.0838", "Ver. 1.0, Ref. 1"}, {"c", "c", "o_2", "107.4100", "63.3907", "-13.4513", "1.6650", "Ver. 2.1, Ref. 6"}, {"c", "c", "oz", "105.4100", "63.3907", "-13.4513", "0.0000", "Ver. 2.0, Ref. 5"}, {"c", "c", "s", "112.5642", "47.0276", "-10.6790", "-10.1687", "Ver. 1.0, Ref. 1"}, {"c", "c", "si", "112.6700", "39.5160", "-7.4430", "0.0000", "Ver. 2.2, Ref. 9"}, {"c-", "c", "h", "109.6700", "37.9190", "-7.3877", "-8.0694", "Ver. 1.0, Ref. 1"}, {"c-", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"c=", "c", "c=", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "113.0100", "44.2251", "-10.2683", "-9.5886", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "h", "110.0600", "41.2784", "-14.2963", "5.2229", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "h", "107.8594", "38.0833", "-17.5074", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "o", "106.1764", "74.4143", "-12.6018", "-48.7850", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "h", "107.7336", "40.6099", "-28.8121", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_1", "c", "n", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "n+", "100.5663", "52.0966", "-5.2642", "-10.7045", "Ver. 1.3, Ref. 1"}, {"cl", "c", "cl", "111.6408", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"cl", "c", "f", "109.1026", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"cl", "c", "h", "107.9968", "51.0987", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"cp", "c", "cp", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.5, Ref. 4"}, {"cp", "c", "h", "111.0000", "44.3234", "-9.4454", "0.0000", "Ver. 1.0, Ref. 1"}, {"f", "c", "f", "109.1026", "71.9700", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"f", "c", "h", "108.5010", "57.5760", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "c", "h", "107.6600", "39.6410", "-12.9210", "-2.4318", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "108.9372", "57.4010", "2.9374", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "105.8500", "72.2630", "-28.1923", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "n=", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=1", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=2", "107.4989", "62.7484", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h", "c", "n_2", "108.5330", "66.9202", "-13.6480", "10.3280", "Ver. 2.1, Ref. 7"}, {"h", "c", "na", "110.6204", "51.3137", "-6.7198", "-2.6003", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "107.5000", "62.6790", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "108.7280", "58.5446", "-10.8088", "-12.4006", "Ver. 1.0, Ref. 1"}, {"h", "c", "o_2", "107.6880", "65.4801", "-10.3498", "5.8866", "Ver. 2.1, Ref. 6"}, {"h", "c", "oz", "107.6880", "70.4801", "-10.3498", "0.0000", "Ver. 2.0, Ref. 5"}, {"h", "c", "s", "107.8522", "51.4949", "-13.5270", "7.0260", "Ver. 1.0, Ref. 1"}, {"h", "c", "si", "112.0355", "28.7721", "-13.9523", "0.0000", "Ver. 2.2, Ref. 9"}, {"h", "c", "sio", "111.5360", "30.2481", "-15.5255", "0.0000", "Ver. 1.0, Ref. 4"}, {"s", "c", "s", "111.5000", "27.9677", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "117.4500", "83.9840", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "115.0600", "59.0960", "-15.1430", "-12.9820", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "112.7500", "61.1530", "-14.0190", "-13.2380", "Ver. 1.0, Ref. 1"}, {"o-", "c-", "o-", "130.0100", "111.2900", "-52.3390", "-28.1070", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "c=", "117.6000", "56.4800", "-16.2283", "-12.6333", "Ver. 3.1, Ref. 12"}, {"c=", "c=", "c_1", "121.1000", "66.1100", "-22.0206", "-15.2133", "Ver. 3.1, Ref. 12"}, {"c=", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "n_2", "121.0000", "55.9100", "-18.5471", "-12.8549", "Ver. 3.1, Ref. 12"}, {"c=1", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=2", "c=", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c_1", "c=", "h", "120.3000", "35.7000", "-11.5062", "-8.1591", "Ver. 3.1, Ref. 12"}, {"h", "c=", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"h", "c=", "n_2", "115.7000", "38.2900", "-10.1050", "-8.4480", "Ver. 3.1, Ref. 12"}, {"o-", "c=", "o-", "180.0000", "200.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"s'", "c=", "s'", "180.0000", "70.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c=1", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c=", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=1", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=2", "c=1", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"h", "c=1", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c", "121.0100", "29.2704", "-10.1175", "-6.7906", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c=", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c=1", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "c=2", "126.2600", "43.8250", "-27.7266", "1.0056", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "h", "117.2700", "30.0944", "-8.0826", "-8.6781", "Ver. 1.0, Ref. 1"}, {"c=", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=1", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"c=2", "c=2", "h", "124.8800", "35.2766", "-17.7740", "-1.6215", "Ver. 1.0, Ref. 1"}, {"h", "c=2", "h", "115.4900", "29.6363", "-12.4853", "-6.2218", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "c", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "cp", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "h", "106.2000", "27.4878", "-1.9350", "14.5545", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "o_1", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "cp", "110.5884", "34.6214", "-7.0939", "-7.4032", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "h", "106.2000", "27.4878", "-1.9350", "14.5545", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "o_1", "119.3000", "65.1016", "-17.9766", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "h", "108.6000", "40.0764", "-6.8139", "-8.4349", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "o_1", "116.5000", "59.6420", "-21.9179", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "n_2", "116.9257", "39.4193", "-10.9945", "-8.7733", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_1", "123.1451", "55.5431", "-17.2123", "0.1348", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_2", "100.3182", "38.8631", "-3.8323", "-7.9802", "Ver. 2.1, Ref. 8"}, {"c=", "c_1", "n_2", "113.6000", "41.1200", "-9.8283", "-8.9479", "Ver. 3.1, Ref. 12"}, {"c=", "c_1", "o_1", "125.9000", "46.0600", "-18.5463", "-11.0998", "Ver. 3.1, Ref. 12"}, {"cp", "c_1", "n_2", "108.4400", "84.8377", "-19.9640", "2.7405", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "o_1", "125.5320", "72.3167", "-16.0650", "2.0818", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "108.4400", "84.8377", "-19.9640", "2.7405", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "n_2", "110.3935", "52.1647", "-18.4845", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "o_1", "117.8326", "45.9187", "-22.5264", "0.0000", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "o_2", "110.5209", "32.3751", "-0.6174", "-6.5639", "Ver. 2.1, Ref. 8"}, {"n", "c_1", "n", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.0, Ref. 1"}, {"n", "c_1", "o_1", "125.5420", "92.5720", "-34.4800", "-11.1871", "Ver. 1.0, Ref. 1"}, {"n_2", "c_1", "o_1", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 2.1, Ref. 8"}, {"o", "c_1", "o_1", "118.9855", "98.6813", "-22.2485", "10.3673", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "o_2", "120.7970", "95.3446", "-32.2869", "6.3778", "Ver. 2.1, Ref. 6"}, {"n_2", "c_2", "n_2", "114.5292", "104.0857", "-36.7315", "24.2616", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_1", "125.5320", "101.8765", "-41.8094", "7.7236", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "108.4400", "112.4403", "-59.9730", "38.3067", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "120.7970", "95.3446", "-32.2869", "6.3778", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "109.4930", "137.9111", "-39.8755", "59.0768", "Ver. 2.1, Ref. 7"}, {"c", "cp", "cp", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "np", "120.0500", "44.7148", "-22.7352", "0.0000", "Ver. 1.3, Ref. 1"}, {"c_0", "cp", "cp", "108.4000", "43.9594", "-8.3924", "-9.3379", "Ver. 1.0, Ref. 1"}, {"c_1", "cp", "cp", "116.0640", "71.2598", "-15.8273", "2.0506", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "118.9000", "61.0226", "-34.9931", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "117.9400", "35.1558", "-12.4682", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n_2", "120.7640", "73.2738", "-27.4033", "13.3920", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "nh", "112.5900", "78.6418", "-16.3888", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "121.4584", "61.0647", "-21.6172", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "116.5100", "76.6970", "-35.3868", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "123.4200", "73.6781", "-21.6787", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o_2", "117.1400", "33.0391", "-14.7807", "3.8573", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "op", "104.1700", "101.3206", "-17.3072", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "oz", "120.1400", "33.0391", "-14.7807", "0.0000", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "p=", "120.0007", "47.8413", "-15.2288", "-10.9066", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "si", "120.0000", "30.4689", "-23.5439", "0.0000", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "sp", "105.5300", "96.2006", "-44.9267", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "109.8000", "43.8408", "-9.5153", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "110.5500", "40.8275", "-13.0318", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "106.1700", "48.0995", "-9.0144", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "115.9800", "36.7902", "-13.1342", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "105.0080", "107.0693", "-27.7154", "0.0000", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "108.9100", "98.8519", "-5.7502", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "118.5414", "56.9522", "-7.2655", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "115.3800", "85.4923", "-6.5225", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "104.0100", "104.4800", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "114.2300", "92.3110", "-35.5956", "0.0000", "Ver. 1.0, Ref. 1"}, {"n=", "cr", "nr", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "nr", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 1.1, Ref. 1"}, {"n=2", "cr", "nr", "125.5320", "101.8765", "-41.8094", "0.0000", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "nr", "122.5292", "104.0857", "-36.7315", "-24.2616", "Ver. 1.1, Ref. 1"}, {"oo", "cz", "oz", "120.0510", "97.3782", "-26.5619", "0.0000", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "109.4930", "137.9111", "-39.8755", "59.0768", "Ver. 2.0, Ref. 5"}, {"c", "n", "c", "111.5635", "39.6084", "-8.5459", "-8.5152", "Ver. 1.0, Ref. 1"}, {"c", "n", "c_1", "111.0372", "31.8958", "-6.6942", "-6.8370", "Ver. 1.0, Ref. 1"}, {"c", "n", "h*", "113.8683", "45.9271", "-20.0824", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "p=", "120.0833", "25.0010", "-6.1167", "-5.4570", "Ver. 3.1, Ref. 12"}, {"c_1", "n", "c_1", "121.9556", "76.3105", "-26.3166", "-17.6944", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "h*", "117.9607", "37.4964", "-8.1837", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "h*", "116.9402", "37.5749", "-8.6676", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "n", "p=", "114.0833", "25.0010", "-6.1167", "-5.4570", "Ver. 3.1, Ref. 12"}, {"c", "n+", "c", "109.7700", "44.8220", "-3.9132", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n+", "h+", "110.5100", "49.2170", "-12.2153", "-18.9667", "Ver. 1.0, Ref. 1"}, {"h+", "n+", "h+", "106.1100", "45.3280", "-14.0474", "1.9350", "Ver. 1.0, Ref. 1"}, {"c", "n=", "cr", "117.0900", "31.6888", "0.0000", "0.0000", "Ver. 1.1, Ref. 1"}, {"h*", "n=", "p=", "120.0000", "26.0683", "-8.2978", "-5.9429", "Ver. 3.1, Ref. 12"}, {"p=", "n=", "p=", "118.2000", "36.0683", "-7.6881", "-5.8576", "Ver. 3.1, Ref. 12"}, {"c", "n_2", "c_1", "122.7520", "60.4647", "-29.6188", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "n_2", "c_2", "122.7520", "60.4647", "-29.6188", "5.3290", "Ver. 2.1, Ref. 7"}, {"c", "n_2", "hn2", "120.1350", "29.2218", "-14.1448", "7.2380", "Ver. 2.1, Ref. 7"}, {"c=", "n_2", "c_1", "125.1000", "67.5900", "-26.3889", "-16.1536", "Ver. 3.1, Ref. 12"}, {"c=", "n_2", "hn2", "120.1000", "52.1200", "-16.6595", "-11.8919", "Ver. 3.1, Ref. 12"}, {"c_1", "n_2", "cp", "116.6260", "42.4711", "-10.4269", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_1", "n_2", "hn2", "122.9480", "40.4820", "-16.2028", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_2", "n_2", "cp", "120.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.1, Ref. 7"}, {"c_2", "n_2", "hn2", "122.9480", "40.4820", "-16.2028", "8.3280", "Ver. 2.1, Ref. 7"}, {"cp", "n_2", "hn2", "116.3230", "18.3123", "-7.8325", "5.3290", "Ver. 2.1, Ref. 7"}, {"hn2", "n_2", "hn2", "122.3730", "27.6081", "-10.3291", "9.2800", "Ver. 2.1, Ref. 7"}, {"c", "na", "c", "112.4436", "47.2337", "-10.6612", "-10.2062", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "110.9538", "50.8652", "-4.4522", "-10.0298", "Ver. 1.0, Ref. 1"}, {"h*", "na", "h*", "107.0671", "45.2520", "-7.5558", "-9.5120", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "106.0100", "109.7746", "-9.0636", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "109.3800", "47.0120", "-17.3556", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "np", "109.3900", "119.1811", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "99.4530", "41.6499", "-5.7422", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "111.8725", "40.8369", "-15.6673", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "h*", "107.5130", "42.5182", "-21.7566", "-4.3372", "Ver. 1.0, Ref. 1"}, {"cp", "np", "cp", "111.6800", "84.5159", "-48.5528", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "nh", "108.2200", "119.0383", "-24.2061", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "106.0400", "109.1158", "-42.9319", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "117.0900", "31.4400", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "h*", "117.2000", "37.2620", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "119.0700", "45.8110", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "122.9480", "40.4820", "-16.2028", "0.0000", "Ver. 1.1, Ref. 1"}, {"h*", "nr", "h*", "110.9100", "31.0910", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "o", "c", "104.5000", "35.7454", "-10.0067", "-6.2729", "Ver. 1.0, Ref. 1"}, {"c", "o", "c_1", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.0, Ref. 1"}, {"c", "o", "cp", "102.9695", "38.9739", "-6.2595", "-8.1710", "Ver. 1.4, Ref. 1"}, {"c", "o", "h*", "105.8000", "52.7061", "-12.1090", "-9.8681", "Ver. 1.0, Ref. 1"}, {"c", "o", "p=", "118.2833", "35.0010", "-10.3597", "-7.8699", "Ver. 3.1, Ref. 12"}, {"c_1", "o", "h*", "111.2537", "53.5303", "-11.8454", "-11.5405", "Ver. 1.0, Ref. 1"}, {"cp", "o", "h*", "108.1900", "53.1250", "-8.5016", "0.0000", "Ver. 1.0, Ref. 1"}, {"h*", "o", "p=", "112.2833", "26.0310", "-5.8280", "-5.6195", "Ver. 3.1, Ref. 12"}, {"h*", "o*", "h*", "103.7000", "49.8400", "-11.6000", "-8.0000", "Ver. 1.2, Ref. 1"}, {"c", "o_2", "c_1", "113.2880", "61.2868", "-28.9786", "7.9929", "Ver. 2.1, Ref. 6"}, {"c", "o_2", "c_2", "113.6200", "57.9274", "-17.1312", "23.5480", "Ver. 2.1, Ref. 7"}, {"c_1", "o_2", "cp", "113.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.1, Ref. 6"}, {"c_1", "o_2", "ho2", "112.8740", "53.2512", "-14.9979", "2.4640", "Ver. 2.1, Ref. 6"}, {"c_2", "o_2", "cp", "115.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.1, Ref. 7"}, {"c_2", "o_2", "ho2", "113.1580", "49.6892", "-25.9467", "5.3280", "Ver. 2.1, Ref. 7"}, {"az", "oah", "hoa", "129.6770", "15.5877", "-23.6906", "9.7663", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "167.7890", "21.3772", "-3.8146", "8.1995", "Ver. 3.0, Ref. 10"}, {"az", "ob", "hb", "106.4920", "73.8986", "-23.9590", "8.0039", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "139.4630", "62.0713", "-30.7987", "16.6347", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "113.0480", "26.6270", "-29.5879", "19.8910", "Ver. 3.0, Ref. 10"}, {"cp", "op", "cp", "103.4300", "112.4497", "-25.7326", "0.0000", "Ver. 1.0, Ref. 1"}, {"hos", "osh", "sz", "123.4920", "14.8634", "-17.2643", "57.7495", "Ver. 3.0, Ref. 10"}, {"h*", "osi", "sio", "122.8880", "23.7764", "-19.8152", "9.6331", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "157.0260", "9.0740", "-19.5576", "8.5000", "Ver. 1.0, Ref. 4"}, {"sz", "oss", "sz", "176.2650", "18.8146", "37.9749", "42.8222", "Ver. 3.0, Ref. 10"}, {"c", "oz", "cz", "113.6200", "57.9274", "-17.1312", "60.0000", "Ver. 2.0, Ref. 5"}, {"cp", "oz", "cz", "115.0700", "47.1131", "-32.5592", "13.1257", "Ver. 2.0, Ref. 5"}, {"cz", "oz", "ho2", "113.1580", "49.6892", "-25.9467", "0.0000", "Ver. 2.0, Ref. 5"}, {"cl", "p=", "cl", "100.6000", "94.7390", "-9.6046", "-19.4682", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "cp", "109.9153", "75.4619", "-13.4603", "-16.0981", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "f", "98.4500", "104.3358", "-8.2038", "-21.3348", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "h", "100.0557", "59.5624", "-5.7203", "-12.2224", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "n", "98.8500", "90.2538", "-7.6919", "-18.4787", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "n=", "119.5000", "83.6226", "-26.0666", "-18.9852", "Ver. 3.1, Ref. 12"}, {"cl", "p=", "o", "98.0500", "91.2538", "-7.0872", "-18.6603", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "cp", "119.2306", "56.1847", "-17.3159", "-12.7280", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "f", "107.7653", "85.0587", "-12.0595", "-17.9646", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "h", "108.2306", "36.1847", "-6.4878", "-7.6463", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "n", "108.1653", "70.9767", "-11.5476", "-15.1086", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "n=", "119.6000", "63.0624", "-19.7404", "-14.3290", "Ver. 3.1, Ref. 12"}, {"cp", "p=", "o", "107.3653", "71.9767", "-10.9429", "-15.2901", "Ver. 3.1, Ref. 12"}, {"f", "p=", "f", "96.3000", "113.9327", "-6.8030", "-23.2013", "Ver. 3.1, Ref. 12"}, {"f", "p=", "h", "99.9197", "80.7297", "-7.6457", "-16.5604", "Ver. 3.1, Ref. 12"}, {"f", "p=", "n", "96.7000", "99.8506", "-6.2912", "-20.3452", "Ver. 3.1, Ref. 12"}, {"f", "p=", "n=", "120.0245", "99.8462", "-31.8145", "-22.7669", "Ver. 3.1, Ref. 12"}, {"f", "p=", "o", "95.9000", "100.8506", "-5.6865", "-20.5268", "Ver. 3.1, Ref. 12"}, {"h", "p=", "h", "103.4084", "39.6953", "-5.1338", "-8.2266", "Ver. 3.1, Ref. 12"}, {"h", "p=", "n", "103.9784", "68.2569", "-9.2212", "-14.1736", "Ver. 3.1, Ref. 12"}, {"h", "p=", "n=", "119.0329", "45.9784", "-14.0522", "-10.3994", "Ver. 3.1, Ref. 12"}, {"h", "p=", "o", "103.9784", "73.2569", "-9.8966", "-15.2119", "Ver. 3.1, Ref. 12"}, {"n", "p=", "n", "97.1000", "85.7686", "-5.7793", "-17.4892", "Ver. 3.1, Ref. 12"}, {"n", "p=", "n=", "123.2153", "89.9233", "-32.6119", "-21.0956", "Ver. 3.1, Ref. 12"}, {"n", "p=", "o", "96.3000", "86.7686", "-5.1746", "-17.6707", "Ver. 3.1, Ref. 12"}, {"n=", "p=", "n=", "112.8000", "90.5233", "-20.8007", "-19.6019", "Ver. 3.1, Ref. 12"}, {"n=", "p=", "o", "120.2153", "99.9233", "-32.0927", "-22.8209", "Ver. 3.1, Ref. 12"}, {"o", "p=", "o", "95.5000", "87.7686", "-4.5699", "-17.8523", "Ver. 3.1, Ref. 12"}, {"c", "s", "c", "97.5000", "57.6938", "-5.0559", "-11.8206", "Ver. 1.0, Ref. 1"}, {"c", "s", "h", "96.8479", "56.7336", "14.2713", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "100.3000", "57.2900", "-6.5301", "-11.8204", "Ver. 1.0, Ref. 1"}, {"h", "s", "h", "94.3711", "54.9676", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "97.2876", "54.4281", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"o-", "s'", "o-", "119.3290", "135.0000", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "si", "c", "113.1855", "36.2069", "-20.3939", "20.0172", "Ver. 2.2, Ref. 9"}, {"c", "si", "h", "112.0977", "36.4832", "-12.8094", "0.0000", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "113.0000", "19.4692", "-34.3471", "0.0000", "Ver. 2.2, Ref. 9"}, {"cp", "si", "h", "109.5932", "41.9497", "-42.3639", "48.1442", "Ver. 2.2, Ref. 9"}, {"h", "si", "h", "108.6051", "32.5415", "-8.3164", "0.0000", "Ver. 2.2, Ref. 9"}, {"h", "si", "si", "112.0893", "22.5062", "-11.5926", "0.0000", "Ver. 2.2, Ref. 9"}, {"si", "si", "si", "114.2676", "24.9501", "-19.5949", "0.0000", "Ver. 2.2, Ref. 9"}, {"c", "sio", "c", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 4"}, {"c", "sio", "h", "110.1810", "38.5645", "-17.8735", "0.0000", "Ver. 1.0, Ref. 4"}, {"c", "sio", "osi", "114.9060", "23.0218", "-31.3993", "24.9814", "Ver. 1.0, Ref. 4"}, {"h", "sio", "h", "106.0360", "48.9872", "-9.1607", "0.0000", "Ver. 1.0, Ref. 4"}, {"h", "sio", "osi", "107.3550", "57.6643", "-10.6506", "4.6274", "Ver. 1.0, Ref. 4"}, {"osi", "sio", "osi", "110.6930", "70.3069", "-6.9375", "0.0000", "Ver. 1.0, Ref. 4"}, {"cp", "sp", "cp", "88.2540", "130.6992", "-18.4789", "0.0000", "Ver. 1.0, Ref. 1"}, {"oas", "sz", "oas", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"oas", "sz", "ob", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"oas", "sz", "osh", "119.3400", "28.1962", "-64.3068", "4.7117", "Ver. 3.0, Ref. 10"}, {"oas", "sz", "oss", "108.3940", "127.0520", "-16.5736", "0.0000", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "ob", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "osh", "107.3310", "79.2578", "-46.7537", "108.6900", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "oss", "104.4940", "83.7103", "-97.1839", "16.9574", "Ver. 3.0, Ref. 10"}, {"osh", "sz", "osh", "115.0310", "68.3381", "49.4314", "116.2400", "Ver. 3.0, Ref. 10"}, {"osh", "sz", "oss", "110.6700", "117.5060", "-49.8921", "0.0000", "Ver. 3.0, Ref. 10"}, {"oss", "sz", "oss", "110.6120", "154.1860", "-68.6595", "23.6292", "Ver. 3.0, Ref. 10"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= Kphi, 5= n, 6= Phi0, 7= PCFF info E = Kphi * [ 1 + cos(n*Phi - Phi0) ] With: - Kphi = Rotation barrier - n = Periodicity / multiplicity - Phi0 = Equilibrium angle */ char * PCFF_torsions_auto[216][8]= {{"*", "c'_", "c'_", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c=", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "c=_1", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "c=_2", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "c=_3", "*", "0.4500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "c_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "cp_", "*", "2.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n=", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n=_1", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "n=_2", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "n=_3", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c'_", "n_", "*", "3.2000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "n_", "h_", "1.2000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "np_", "*", "5.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "np_", "h", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "o_", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "op", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "si_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c'_", "sp_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c+_", "n_", "*", "3.4000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "c=", "*", "4.0750", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n3n_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n=", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "c=_1", "c=_1", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "c=_2", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "c=_3", "*", "4.0750", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n=_1", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n=_2", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n=_3", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_1", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "c=_2", "*", "3.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "c=_3", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n=_1", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n=_2", "*", "2.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n=_3", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_2", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "c=_3", "*", "4.0750", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "c_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "cp_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n3n_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=_1", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=_2", "*", "0.6250", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n=_3", "*", "8.1500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "n_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "o_", "*", "0.9000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "op", "*", "4.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "p_", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "si_", "*", "0.2110", "3", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c=_3", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "c_", "*", "0.1580", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "cp_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n3n_", "*", "0.0500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n=", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "n=_1", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "n=_2", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "n=_3", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "c_", "n_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "na_", "*", "0.0500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "np_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "o_", "*", "0.1300", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "p_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "s_", "*", "0.1367", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "c_", "si_", "*", "0.1111", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "cp_", "*", "3.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n3n_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n=", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "n=_1", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "cp_", "n=_2", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "cp_", "n=_3", "*", "1.2500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "cp_", "n_", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "na_", "*", "2.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "np_", "*", "2.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "np_", "h_", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o_", "*", "1.8000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "o_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "op", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "p_", "*", "0.2500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "s_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "si_", "*", "0.1667", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "cp_", "sp_", "*", "6.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "ct_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "n3n_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "n_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "np_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "o_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "s_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "ct_", "si_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "n3n_", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "n=", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "n=_1", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n3n_", "n=_2", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n3n_", "n=_3", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n3n_", "n_", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "np_", "*", "0.0500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "o_", "*", "0.3000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "s_", "*", "0.3000", "2", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n3n_", "si_", "*", "0.0500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n=", "*", "15.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n=_1", "n=_1", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "n=_2", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "n=_3", "*", "15.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_1", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "n=_2", "*", "7.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "n=_3", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_2", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "n=_3", "*", "15.0000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "n_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "np_", "*", "1.5000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "np_", "h_", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "o_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "s_", "*", "0.7000", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n=_3", "si_", "*", "0.2333", "2", "180.0000", "Ver. 2.0, Ref. 3"}, {"*", "n_", "n_", "*", "0.3750", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "na_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "np_", "*", "0.7500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "np_", "h_", "0.3750", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "o_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "s_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "n_", "si_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "na_", "*", "0.2500", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "np_", "*", "0.0000", "0", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "o_", "*", "0.0975", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "s_", "*", "0.0975", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "na_", "si_", "*", "0.0667", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "np_", "*", "11.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "np_", "h_", "5.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "o_", "*", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "o_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "op", "*", "11.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "op", "*", "5.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "s_", "*", "1.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "s_", "*", "0.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "si_", "*", "0.2500", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "si_", "*", "0.1250", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "np_", "sp_", "*", "10.0000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"h_", "np_", "sp_", "*", "5.5000", "2", "180.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "o_", "*", "1.0000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "p_", "*", "0.3750", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "s_", "*", "1.0000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "o_", "si_", "*", "0.3333", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "s_", "*", "0.3750", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "p_", "si_", "*", "0.0000", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "s_", "*", "5.5000", "2", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "s_", "si_", "*", "0.2333", "3", "0.0000", "Ver. 2.0, Ref. 2"}, {"*", "si_", "si_", "*", "0.1667", "3", "0.0000", "Ver. 2.0, Ref. 2"}}; /* Dihedrals / torsions 0, 1, 2, 3 = Keys, 4= V1, 5= Phi0, 6= V2, 7= Phi0, 8= V3, 9= Phi0, 10= PCFF info E = SUM(n=1,3) { V(n) * [ 1 - cos(n*Phi - Phi0(n)) ] } With: - Phi0 = Equilibrium angle */ char * PCFF_torsions[492][11]= {{"oah", "az", "oah", "hoa", "0.2821", "0.0", "-0.0644", "0.0", "0.0752", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "oah", "hoa", "0.0574", "0.0", "-0.3288", "0.0", "0.1277", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "oah", "hoa", "-0.7542", "0.0", "-0.7885", "0.0", "-0.3199", "0.0", "Ver. 3.0, Ref. 10"}, {"oah", "az", "oas", "sz", "1.5821", "0.0", "2.8457", "0.0", "0.8378", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "oas", "sz", "-4.8417", "0.0", "-0.6233", "0.0", "-1.7530", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "oas", "sz", "-0.0282", "0.0", "5.2299", "0.0", "-1.6555", "0.0", "Ver. 3.0, Ref. 10"}, {"oah", "az", "ob", "hb", "8.3762", "0.0", "0.4366", "0.0", "-0.2767", "0.0", "Ver. 3.0, Ref. 10"}, {"oah", "az", "ob", "sz", "1.1339", "0.0", "-0.4378", "0.0", "0.2658", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "ob", "hb", "6.7872", "0.0", "1.7367", "0.0", "0.1690", "0.0", "Ver. 3.0, Ref. 10"}, {"oas", "az", "ob", "sz", "-0.5306", "0.0", "-1.2578", "0.0", "-0.1954", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "hb", "6.7872", "0.0", "1.7367", "0.0", "0.1690", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "hoa", "-0.7542", "0.0", "-0.7885", "0.0", "-0.3199", "0.0", "Ver. 3.0, Ref. 10"}, {"ob", "az", "ob", "sz", "-0.5306", "0.0", "-1.2578", "0.0", "-0.1954", "0.0", "Ver. 3.0, Ref. 10"}, {"br", "c", "c", "br", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "c", "0.0000", "0.0", "0.0000", "0.0", "0.1500", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "cl", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"br", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.2000", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "c", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "c", "0.1223", "0.0", "0.0514", "0.0", "-0.2230", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c-", "-0.4054", "0.0", "0.4825", "0.0", "0.4345", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=1", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c=2", "0.0883", "0.0", "0.0000", "0.0", "-0.0198", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "c_0", "0.0929", "0.0", "0.0689", "0.0", "-0.2466", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "c_1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "cl", "0.0000", "0.0", "0.0000", "0.0", "0.1500", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "0.1500", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "h", "0.0000", "0.0", "0.0316", "0.0", "-0.1681", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c", "h", "0.0000", "0.0", "0.0316", "0.0", "-0.1781", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n+", "-1.9394", "0.0", "0.0086", "0.0", "0.2775", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "n=", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "c", "n=1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "c", "n=2", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "c", "n_2", "0.0000", "0.0", "0.0000", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "c", "na", "0.1764", "0.0", "0.1766", "0.0", "-0.5206", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "o", "0.7137", "0.0", "0.2660", "0.0", "-0.2545", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "o_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2500", "0.0", "Ver. 2.1, Ref. 6"}, {"c", "c", "c", "oz", "-3.6896", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"c", "c", "c", "s", "-0.7017", "0.0", "0.0201", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c", "si", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.2, Ref. 9"}, {"c-", "c", "c", "c_1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "c", "h", "-1.2767", "0.0", "0.5949", "0.0", "0.2379", "0.0", "Ver. 1.0, Ref. 1"}, {"c-", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c=", "c", "c", "c=", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "c=1", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c", "c=2", "0.0000", "0.0", "0.0000", "0.0", "-0.3160", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1166", "0.0", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "c", "c_0", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "c", "c", "c_1", "-1.2352", "0.0", "-0.2551", "0.0", "-0.1335", "0.0", "Ver. 1.3, Ref. 1"}, {"c_0", "c", "c", "cp", "0.0929", "0.0", "0.0689", "0.0", "-0.2466", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "c", "c", "h", "-0.1569", "0.0", "-0.2030", "0.0", "-0.1599", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c_0", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 2.1, Ref. 8"}, {"c_1", "c", "c", "c_1", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "c", "cp", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 2.1, Ref. 8"}, {"c_1", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "c", "o", "-0.0858", "0.0", "-0.1320", "0.0", "-0.5909", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "c", "s", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"cl", "c", "c", "cl", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"cl", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"cl", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c", "c", "h", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "n", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "c", "si", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.2, Ref. 9"}, {"f", "c", "c", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"f", "c", "c", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1000", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c", "h", "-0.1432", "0.0", "0.0617", "0.0", "-0.1083", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c", "h", "-0.2432", "0.0", "0.0617", "0.0", "-0.1383", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n+", "-0.2179", "0.0", "-0.4127", "0.0", "-0.1252", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "n=", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n=1", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n=2", "-0.0228", "0.0", "0.0280", "0.0", "-0.1863", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "c", "n_2", "0.0000", "0.0", "0.0000", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "c", "na", "-0.2428", "0.0", "0.4065", "0.0", "-0.3079", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "nr", "-0.5336", "0.0", "-0.0444", "0.0", "-0.1432", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "o", "-0.1435", "0.0", "0.2530", "0.0", "-0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "o_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2500", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c", "c", "oz", "-3.6896", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "c", "c", "s", "-0.2078", "0.0", "-0.1060", "0.0", "-0.3595", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c", "si", "0.0000", "0.0", "0.0514", "0.0", "-0.1430", "0.0", "Ver. 2.2, Ref. 9"}, {"n", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.3, Ref. 1"}, {"n", "c", "c", "s", "0.0972", "0.0", "0.0722", "0.0", "-0.2581", "0.0", "Ver. 1.3, Ref. 1"}, {"n_2", "c", "c", "n_2", "0.0000", "0.0", "0.0060", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c", "c", "o_2", "0.0000", "0.0", "0.0000", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 7"}, {"na", "c", "c", "na", "0.3805", "0.0", "0.3547", "0.0", "-0.1102", "0.0", "Ver. 1.0, Ref. 1"}, {"o", "c", "c", "o", "-0.1820", "0.0", "-0.1084", "0.0", "-0.7047", "0.0", "Ver. 1.0, Ref. 1"}, {"o_2", "c", "c", "o_2", "-0.6070", "0.0", "0.0060", "0.0", "-0.1441", "0.0", "Ver. 2.1, Ref. 6"}, {"oz", "c", "c", "oz", "-0.6070", "0.0", "0.0060", "0.0", "-0.1441", "0.0", "Ver. 2.0, Ref. 5"}, {"s", "c", "c", "s", "-1.2002", "0.0", "-1.2999", "0.0", "-0.1626", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c-", "o-", "1.7311", "0.0", "1.8510", "0.0", "-0.1933", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c-", "o-", "-2.5999", "0.0", "1.0488", "0.0", "-0.2089", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c-", "o-", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "c=", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=1", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=1", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=1", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c", "-0.0871", "0.0", "0.0619", "0.0", "-0.7371", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c=", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c=1", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "c=2", "0.2433", "0.0", "0.0000", "0.0", "0.1040", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c=2", "h", "-0.2433", "0.0", "0.0000", "0.0", "-0.3281", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=1", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "c=", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "c=1", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "c=2", "0.0025", "0.0", "0.0000", "0.0", "0.0173", "0.0", "Ver. 1.0, Ref. 1"}, {"c=2", "c", "c=2", "h", "0.0025", "0.0", "0.0000", "0.0", "-0.2911", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c", "-0.1143", "0.0", "0.0000", "0.0", "-0.1682", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c=", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c=1", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "c=2", "0.1143", "0.0", "0.0000", "0.0", "0.1854", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "c=2", "h", "-0.1143", "0.0", "0.0000", "0.0", "-0.1349", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_0", "c", "0.2904", "0.0", "1.0177", "0.0", "-0.1085", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_0", "cp", "0.2904", "0.0", "1.0177", "0.0", "-0.1085", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_0", "h", "0.3055", "0.0", "0.6703", "0.0", "-0.2816", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_0", "o_1", "0.6989", "0.0", "1.2089", "0.0", "-0.0445", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c", "c_0", "o_1", "0.6989", "0.0", "1.2089", "0.0", "-0.0445", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "c", "-0.4768", "0.0", "0.6051", "0.0", "-0.1205", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "cp", "-0.4768", "0.0", "0.6051", "0.0", "-0.1205", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "h", "-0.5265", "0.0", "0.3627", "0.0", "-0.1792", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_0", "o_1", "-0.9975", "0.0", "0.9060", "0.0", "-0.0195", "0.0", "Ver. 2.1, Ref. 8"}, {"o", "c", "c_0", "h", "-0.0390", "0.0", "1.4052", "0.0", "0.0757", "0.0", "Ver. 1.0, Ref. 1"}, {"o", "c", "c_0", "o_1", "0.6444", "0.0", "0.7897", "0.0", "1.0604", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "c_1", "n_2", "0.1693", "0.0", "-0.0090", "0.0", "-0.0687", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_1", "o_1", "0.0442", "0.0", "0.0292", "0.0", "0.0562", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c", "c_1", "o_2", "1.8341", "0.0", "2.0603", "0.0", "-0.0195", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_1", "n_2", "0.1693", "0.0", "-0.0090", "0.0", "-0.0687", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_1", "o_1", "-0.1804", "0.0", "0.0012", "0.0", "0.0371", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c", "c_1", "o_2", "-0.6359", "0.0", "1.4807", "0.0", "-0.0438", "0.0", "Ver. 2.1, Ref. 8"}, {"n", "c", "c_1", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c", "c_1", "o_1", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.0, Ref. 1"}, {"n+", "c", "c_1", "n", "-0.0892", "0.0", "0.1259", "0.0", "-0.0884", "0.0", "Ver. 1.3, Ref. 1"}, {"n+", "c", "c_1", "o_1", "0.0899", "0.0", "0.1220", "0.0", "0.0905", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.5, Ref. 1"}, {"h", "c", "cp", "cp", "-0.2801", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 2.0, Ref. 1"}, {"h", "c", "cp", "cp", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "cp", "np", "-0.2802", "0.0", "-0.0678", "0.0", "-0.0122", "0.0", "Ver. 1.3, Ref. 1"}, {"c", "c", "n", "c", "-0.0017", "0.0", "-0.0072", "0.0", "0.0008", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "c_1", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n", "h*", "-0.0483", "0.0", "-0.0077", "0.0", "-0.0014", "0.0", "Ver. 1.0, Ref. 1"}, {"c-", "c", "n", "c_1", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.3, Ref. 1"}, {"c-", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "n", "c", "-0.0036", "0.0", "0.0049", "0.0", "0.0039", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "n", "c_1", "-0.0688", "0.0", "0.0762", "0.0", "-0.0618", "0.0", "Ver. 1.0, Ref. 1"}, {"c_1", "c", "n", "h*", "0.0546", "0.0", "0.0756", "0.0", "0.0728", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c", "0.0406", "0.0", "0.0354", "0.0", "-0.1649", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "c_1", "0.0219", "0.0", "-0.0260", "0.0", "0.0714", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n", "h*", "-0.0148", "0.0", "-0.0791", "0.0", "-0.0148", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "c", "0.7077", "0.0", "-0.3744", "0.0", "-0.1914", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 1"}, {"c_1", "c", "n+", "h+", "-0.8792", "0.0", "-0.5978", "0.0", "-0.3242", "0.0", "Ver. 1.3, Ref. 1"}, {"h", "c", "n+", "c", "0.3624", "0.0", "0.1012", "0.0", "-0.2486", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "n+", "h+", "-0.2458", "0.0", "-0.2789", "0.0", "-0.0294", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "n=", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n=1", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=1", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n=2", "cr", "0.0143", "0.0", "-0.0132", "0.0", "0.0091", "0.0", "Ver. 1.1, Ref. 1"}, {"h", "c", "n=2", "cr", "0.5865", "0.0", "-0.5482", "0.0", "-0.2767", "0.0", "Ver. 1.1, Ref. 1"}, {"c", "c", "n_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "n_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "n_2", "hn2", "0.0000", "0.0", "0.0000", "0.0", "-0.3263", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "n_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "n_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.2263", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "c", "n_2", "hn2", "0.0000", "0.0", "0.0000", "0.0", "-0.3263", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "na", "c", "-0.1406", "0.0", "0.4168", "0.0", "0.0150", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "na", "h*", "-1.1506", "0.0", "-0.6344", "0.0", "-0.1845", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "c", "0.1904", "0.0", "-0.1342", "0.0", "-0.2460", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "na", "h*", "-0.5187", "0.0", "-0.4837", "0.0", "-0.1692", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "c+", "-5.4418", "0.0", "-0.0437", "0.0", "0.8035", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "nr", "h*", "-5.0724", "0.0", "-0.4980", "0.0", "-0.4381", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "c+", "2.8272", "0.0", "-0.3930", "0.0", "-0.3847", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "nr", "h*", "1.2659", "0.0", "-0.7739", "0.0", "0.0378", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "c", "-0.5203", "0.0", "-0.3028", "0.0", "-0.3450", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "c_0", "0.1302", "0.0", "-0.3250", "0.0", "0.1134", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o", "h*", "-0.6732", "0.0", "-0.4778", "0.0", "-0.1670", "0.0", "Ver. 1.0, Ref. 1"}, {"c_0", "c", "o", "c_0", "-1.8534", "0.0", "0.1981", "0.0", "0.2423", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "c", "0.5302", "0.0", "0.0000", "0.0", "-0.3966", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "c_0", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "o", "cp", "0.9513", "0.0", "0.1155", "0.0", "0.0720", "0.0", "Ver. 1.4, Ref. 1"}, {"h", "c", "o", "h*", "0.1863", "0.0", "-0.4338", "0.0", "-0.2121", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "o_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.1, Ref. 6"}, {"c", "c", "o_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.0882", "0.0", "Ver. 2.1, Ref. 7"}, {"c_1", "c", "o_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c", "o_2", "c_1", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c", "o_2", "c_2", "0.0000", "0.0", "0.0000", "0.0", "-0.0882", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "c", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "c", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "c", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "-0.1932", "0.0", "Ver. 2.0, Ref. 5"}, {"c", "c", "s", "c", "-0.5073", "0.0", "0.0155", "0.0", "-0.0671", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "h", "-0.4871", "0.0", "-0.4514", "0.0", "-0.1428", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "s", "s", "-0.6269", "0.0", "-0.9598", "0.0", "-0.4957", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "c", "-0.3338", "0.0", "-0.0684", "0.0", "-0.1706", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "h", "-0.5374", "0.0", "-0.5091", "0.0", "-0.1361", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c", "s", "s", "-0.0610", "0.0", "-0.6387", "0.0", "-0.3072", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "c", "-1.9835", "0.0", "-1.9213", "0.0", "-0.3816", "0.0", "Ver. 1.0, Ref. 1"}, {"s", "c", "s", "h", "-0.0591", "0.0", "-0.6235", "0.0", "-0.0788", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "c", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "c", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "c", "si", "si", "-0.3500", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "c", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0657", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "c", "sio", "c", "-1.3513", "0.0", "0.0000", "0.0", "-0.0580", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "sio", "h", "-0.9301", "0.0", "0.0000", "0.0", "-0.1259", "0.0", "Ver. 1.0, Ref. 4"}, {"h", "c", "sio", "osi", "-1.3513", "0.0", "0.0000", "0.0", "-0.0580", "0.0", "Ver. 1.0, Ref. 4"}, {"nr", "c+", "nr", "c", "-0.6197", "0.0", "3.0539", "0.0", "0.1861", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "c+", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=1", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=1", "c", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=1", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=2", "c", "0.0860", "0.0", "5.1995", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=2", "h", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=2", "c", "0.0000", "0.0", "5.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "c=", "c=2", "h", "0.0000", "0.0", "4.8974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_0", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_0", "o", "c", "0.8905", "0.0", "3.2644", "0.0", "0.2646", "0.0", "Ver. 1.0, Ref. 1"}, {"n_2", "c_1", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_1", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"o_2", "c_1", "cp", "cp", "0.0000", "0.0", "0.9063", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "n", "c_1", "0.1907", "0.0", "1.1212", "0.0", "0.0426", "0.0", "Ver. 1.0, Ref. 1"}, {"n", "c_1", "n", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "n", "c", "0.8297", "0.0", "3.7234", "0.0", "-0.0495", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "n", "c_1", "-0.4066", "0.0", "1.2513", "0.0", "-0.7507", "0.0", "Ver. 1.0, Ref. 1"}, {"o_1", "c_1", "n", "h*", "-1.6938", "0.0", "2.7386", "0.0", "-0.3360", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "n_2", "c", "-0.7532", "0.0", "2.7392", "0.0", "0.0907", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "n_2", "hn2", "-0.8236", "0.0", "2.1467", "0.0", "-0.2142", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "c", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "cp", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "hn2", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "n_2", "c", "0.3345", "0.0", "2.5838", "0.0", "-0.4006", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "n_2", "hn2", "-0.0078", "0.0", "2.6186", "0.0", "-0.0900", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_1", "n_2", "c", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_1", "n_2", "cp", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_1", "n_2", "hn2", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_1", "o", "h*", "-2.7332", "0.0", "2.9646", "0.0", "-0.0155", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "c_1", "o_2", "*", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_2", "c", "-2.5594", "0.0", "2.2013", "0.0", "0.0325", "0.0", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_2", "ho2", "-2.9126", "0.0", "1.0199", "0.0", "-0.2077", "0.0", "Ver. 2.1, Ref. 8"}, {"c=1", "c_1", "o_2", "ho2", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "c", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "cp", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "c_1", "o_2", "ho2", "-1.1077", "0.0", "2.0082", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "o_2", "c", "-0.9993", "0.0", "0.2131", "0.0", "-0.4274", "0.0", "Ver. 2.1, Ref. 8"}, {"h", "c_1", "o_2", "ho2", "-1.4540", "0.0", "0.8387", "0.0", "-0.4912", "0.0", "Ver. 2.1, Ref. 8"}, {"o_1", "c_1", "o_2", "c", "0.0000", "0.0", "2.2089", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"o_1", "c_1", "o_2", "cp", "0.0000", "0.0", "2.2089", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"o_1", "c_1", "o_2", "ho2", "0.0000", "0.0", "2.2089", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"n_2", "c_2", "n_2", "c", "-1.0632", "0.0", "1.5632", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "n_2", "cp", "-1.0632", "0.0", "1.5632", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "n_2", "hn2", "-1.0632", "0.0", "1.5632", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "n_2", "c", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "n_2", "cp", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "n_2", "hn2", "0.0000", "0.0", "2.0521", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "n_2", "c", "-1.7177", "0.0", "1.8863", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "n_2", "cp", "-1.7177", "0.0", "1.8863", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "n_2", "hn2", "-1.7177", "0.0", "1.8863", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "c", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "cp", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_2", "ho2", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "c", "0.0000", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "cp", "0.0000", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "ho2", "0.0000", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "c", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "cp", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"o_2", "c_2", "o_2", "ho2", "-2.9522", "0.0", "2.4047", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"c", "cp", "cp", "cp", "0.0000", "0.0", "4.4072", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "h", "0.0000", "0.0", "1.5590", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"c_0", "cp", "cp", "cp", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"c_0", "cp", "cp", "h", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 8"}, {"c_1", "cp", "cp", "cp", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"c_1", "cp", "cp", "h", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "cp", "8.3667", "0.0", "1.1932", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "0.0000", "0.0", "3.9661", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "n_2", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "cp", "nh", "11.5270", "0.0", "2.7183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "0.0000", "0.0", "5.3826", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "np", "0.0000", "0.0", "4.7675", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "0.0000", "0.0", "4.8498", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o_2", "0.0000", "0.0", "2.5372", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "op", "0.0000", "0.0", "10.6923", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "oz", "0.0000", "0.0", "4.6282", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "cp", "p=", "0.0000", "0.0", "5.4768", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "cp", "si", "0.0000", "0.0", "4.3270", "0.0", "0.0000", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "cp", "sp", "0.0000", "0.0", "9.2097", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "h", "0.0000", "0.0", "1.8769", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "n_2", "0.0000", "0.0", "3.4040", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"h", "cp", "cp", "nh", "0.0000", "0.0", "3.0202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "nn", "0.0000", "0.0", "1.3331", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "np", "0.0000", "0.0", "3.6689", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "o", "0.0000", "0.0", "1.7234", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "o_2", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"h", "cp", "cp", "op", "0.0000", "0.0", "3.3516", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "cp", "oz", "0.0000", "0.0", "2.1670", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "cp", "cp", "p=", "0.0000", "0.0", "2.2698", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h", "cp", "cp", "si", "0.0000", "0.0", "1.5093", "0.0", "0.0000", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "cp", "cp", "sp", "0.0000", "0.0", "3.7957", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "nh", "0.0000", "0.0", "12.7748", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "cp", "np", "0.0000", "0.0", "4.8266", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "np", "0.0000", "0.0", "8.8338", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "op", "0.0000", "0.0", "9.7415", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "cp", "sp", "0.0000", "0.0", "8.5974", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "n_2", "c_1", "0.0000", "0.0", "0.8107", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "n_2", "c_2", "0.0000", "0.0", "0.8107", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "n_2", "hn2", "0.0000", "0.0", "0.6107", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "nh", "cp", "10.8765", "0.0", "6.3475", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "h*", "0.0000", "0.0", "1.8202", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nh", "np", "0.0000", "0.0", "10.7803", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "cp", "0.0000", "0.0", "3.7848", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "h*", "0.0000", "0.0", "1.3342", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "0.0000", "0.0", "4.1751", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "cp", "0.0000", "0.0", "23.0443", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "nh", "h*", "0.0000", "0.0", "7.0570", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "cp", "0.0000", "0.0", "20.0173", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nh", "h*", "0.0000", "0.0", "3.5096", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "nn", "h*", "0.0000", "0.0", "1.2190", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "nn", "h*", "0.0000", "0.0", "2.0184", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.3, Ref. 1"}, {"cp", "cp", "np", "cp", "0.0000", "0.0", "6.8517", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "nh", "0.0000", "0.0", "5.1942", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "np", "np", "0.0000", "0.0", "12.0680", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "cp", "0.0000", "0.0", "5.6183", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "nh", "0.0000", "0.0", "5.2455", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "0.0000", "0.0", "6.3346", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nh", "cp", "np", "cp", "0.0000", "0.0", "9.7830", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "cp", "0.0000", "0.0", "6.7119", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "np", "cp", "0.0000", "0.0", "7.4664", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "cp", "0.0000", "0.0", "15.3660", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"op", "cp", "np", "np", "0.0000", "0.0", "11.8577", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "cp", "0.0000", "0.0", "13.6743", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"sp", "cp", "np", "np", "0.0000", "0.0", "11.5762", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o", "c", "0.0000", "0.0", "1.5000", "0.0", "0.0000", "0.0", "Ver. 1.4, Ref. 1"}, {"cp", "cp", "o", "h*", "-0.6900", "0.0", "0.5097", "0.0", "0.0095", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "o_2", "c_1", "0.0000", "0.0", "0.4561", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "o_2", "c_2", "0.0000", "0.0", "0.4961", "0.0", "0.0000", "0.0", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "op", "cp", "0.0000", "0.0", "27.5402", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "op", "cp", "0.0000", "0.0", "2.6043", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "op", "cp", "0.0000", "0.0", "30.4292", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "oz", "cz", "-2.4045", "0.0", "0.4561", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"h", "cp", "oz", "cz", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"*", "cp", "p=", "*", "-0.2717", "0.0", "1.1901", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "p=", "h", "-0.2717", "0.0", "1.1901", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "p=", "n=", "-0.2717", "0.0", "1.1901", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0231", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0231", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "si", "si", "0.0000", "0.0", "-0.1000", "0.0", "-0.0231", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "sp", "cp", "0.0000", "0.0", "31.5576", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "cp", "sp", "cp", "0.0000", "0.0", "4.2145", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"np", "cp", "sp", "cp", "0.0000", "0.0", "21.1715", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"nr", "cr", "n=", "c", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "n=1", "c", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "n=2", "c", "-7.3589", "0.0", "0.4643", "0.0", "-0.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"n=", "cr", "nr", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"n=1", "cr", "nr", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"n=2", "cr", "nr", "h*", "-0.7358", "0.0", "0.4643", "0.0", "-1.1098", "0.0", "Ver. 1.1, Ref. 1"}, {"nr", "cr", "nr", "h*", "-7.2378", "0.0", "1.9150", "0.0", "0.1436", "0.0", "Ver. 1.1, Ref. 1"}, {"oo", "cz", "oz", "c", "-4.2342", "0.0", "1.8099", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oo", "cz", "oz", "cp", "-3.4253", "0.0", "2.3292", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oo", "cz", "oz", "ho2", "-3.0147", "0.0", "1.6536", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "c", "-4.0149", "0.0", "1.8643", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "cp", "-3.2773", "0.0", "1.3788", "0.0", "0.0000", "0.0", "Ver. 2.0, Ref. 5"}, {"oz", "cz", "oz", "ho2", "-3.0513", "0.0", "1.4279", "0.0", "-0.1216", "0.0", "Ver. 2.0, Ref. 5"}, {"*", "n", "p=", "*", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n", "p=", "h", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n", "p=", "n=", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n", "p=", "o", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"*", "n=", "p=", "*", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "cl", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "f", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "n=", "p=", "o", "0.0000", "0.0", "0.0000", "0.0", "-0.3500", "0.0", "Ver. 3.1, Ref. 12"}, {"p=", "n=", "p=", "h", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"p=", "n=", "p=", "n=", "0.0000", "0.0", "0.0000", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"cp", "nh", "np", "cp", "0.0000", "0.0", "14.4766", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "np", "cp", "0.0000", "0.0", "7.4549", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"cp", "np", "np", "cp", "0.0000", "0.0", "13.7232", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 1"}, {"*", "o", "p=", "*", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "o", "p=", "h", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "o", "p=", "n=", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"h*", "o", "p=", "o", "5.7083", "0.0", "2.1176", "0.0", "0.0000", "0.0", "Ver. 3.1, Ref. 12"}, {"az", "oas", "sz", "oas", "-4.8417", "0.0", "-0.6233", "0.0", "-1.7530", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "osh", "1.0239", "0.0", "0.2734", "0.0", "0.0173", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "oas", "sz", "oss", "0.2875", "0.0", "1.0574", "0.0", "-0.0222", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "oas", "-23.4547", "0.0", "5.3019", "0.0", "1.7206", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "osh", "-20.7064", "0.0", "4.3987", "0.0", "-0.5242", "0.0", "Ver. 3.0, Ref. 10"}, {"az", "ob", "sz", "oss", "-23.4547", "0.0", "5.3019", "0.0", "1.7206", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "oas", "-15.3826", "0.0", "-4.7952", "0.0", "0.6596", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "ob", "-12.5965", "0.0", "-5.0843", "0.0", "0.2414", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "osh", "-12.5965", "0.0", "-5.0843", "0.0", "0.2414", "0.0", "Ver. 3.0, Ref. 10"}, {"hb", "ob", "sz", "oss", "-15.3826", "0.0", "-4.7952", "0.0", "0.6596", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "ob", "sz", "ob", "-0.5851", "0.0", "-1.4467", "0.0", "-0.3115", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "ob", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "oas", "1.1145", "0.0", "-0.4708", "0.0", "-0.3937", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "ob", "-0.5851", "0.0", "-1.4467", "0.0", "-0.3115", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "osh", "0.4627", "0.0", "0.1147", "0.0", "0.0390", "0.0", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "sz", "oss", "2.3777", "0.0", "-0.0069", "0.0", "-0.5244", "0.0", "Ver. 3.0, Ref. 10"}, {"h*", "osi", "sio", "c", "-0.6741", "0.0", "0.3661", "0.0", "-0.1008", "0.0", "Ver. 1.0, Ref. 4"}, {"h*", "osi", "sio", "h", "-0.7720", "0.0", "0.9364", "0.0", "-0.1169", "0.0", "Ver. 1.0, Ref. 4"}, {"h*", "osi", "sio", "osi", "-0.6741", "0.0", "0.3661", "0.0", "-0.1008", "0.0", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.1300", "0.0", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.1300", "0.0", "Ver. 1.0, Ref. 4"}, {"sio", "osi", "sio", "osi", "0.3000", "0.0", "0.3658", "0.0", "0.0000", "0.0", "Ver. 1.0, Ref. 4"}, {"sz", "oss", "sz", "oas", "-0.3747", "0.0", "0.3232", "0.0", "-0.0194", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "oss", "sz", "ob", "-2.3957", "0.0", "0.4026", "0.0", "0.0077", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "oss", "sz", "osh", "-0.2403", "0.0", "0.1673", "0.0", "0.0002", "0.0", "Ver. 3.0, Ref. 10"}, {"sz", "oss", "sz", "oss", "-0.3417", "0.0", "0.0961", "0.0", "0.1683", "0.0", "Ver. 3.0, Ref. 10"}, {"c", "s", "s", "c", "-1.8578", "0.0", "-3.8321", "0.0", "-0.4469", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "s", "s", "h", "-0.4956", "0.0", "-3.4601", "0.0", "-0.2482", "0.0", "Ver. 1.0, Ref. 1"}, {"h", "s", "s", "h", "-0.0528", "0.0", "-3.5171", "0.0", "-0.2394", "0.0", "Ver. 1.0, Ref. 1"}, {"c", "si", "si", "c", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"c", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "si", "si", "cp", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "si", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"cp", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "si", "si", "h", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"h", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}, {"si", "si", "si", "si", "0.0000", "0.0", "0.0000", "0.0", "-0.0653", "0.0", "Ver. 2.2, Ref. 9"}}; /* Inversions 0, 1, 2, 3 = Keys, 4= K, 5= Chi0, 6= PCFF info E = K * (Chi - Chi0)^2 */ char * PCFF_inversions[83][7]= {{"nr", "c+", "nr", "nr", "54.4060", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "o-", "o-", "44.1500", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c-", "o-", "o-", "45.7520", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c", "c=", "2.0568", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=", "c=", "h", "2.0765", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "c=", "h", "h", "2.8561", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "c", "o_1", "38.7949", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "cp", "o_1", "38.7949", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "h", "o_1", "38.4069", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "o", "o_1", "46.9264", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "cp", "o_1", "38.7949", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "c_0", "h", "o_1", "38.4069", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "h", "o_1", "37.8733", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "c_0", "o", "o_1", "45.3800", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "n_2", "o_1", "24.3329", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "c_1", "o_1", "o_2", "46.9264", "0.0000", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "n_2", "o_1", "49.3740", "0.0000", "Ver. 2.1, Ref. 8"}, {"cp", "c_1", "o_1", "o_2", "49.3740", "0.0000", "Ver. 2.1, Ref. 6"}, {"h", "c_1", "n_2", "o_1", "23.1691", "0.0000", "Ver. 2.1, Ref. 7"}, {"h", "c_1", "o_1", "o_2", "45.3800", "0.0000", "Ver. 2.1, Ref. 8"}, {"n_2", "c_2", "n_2", "o_1", "59.3740", "0.0000", "Ver. 2.1, Ref. 7"}, {"n_2", "c_2", "o_1", "o_2", "49.3740", "0.0000", "Ver. 2.1, Ref. 7"}, {"o_1", "c_2", "o_2", "o_2", "51.6374", "0.0000", "Ver. 2.1, Ref. 7"}, {"c", "cp", "cp", "cp", "7.8153", "0.0000", "Ver. 2.0, Ref. 5"}, {"c", "cp", "cp", "cp", "6.9644", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cp", "cp", "np", "10.4920", "0.0000", "Ver. 1.3, Ref. 1"}, {"c_1", "cp", "cp", "cp", "17.0526", "0.0000", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "cp", "7.1794", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "h", "4.8912", "0.0000", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "cp", "h", "7.6012", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "n_2", "17.0526", "0.0000", "Ver. 2.1, Ref. 7"}, {"cp", "cp", "cp", "nh", "8.3206", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "nn", "10.7855", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o", "13.0421", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "cp", "o_2", "-8.8126", "0.0000", "Ver. 2.1, Ref. 6"}, {"cp", "cp", "cp", "oz", "19.8126", "0.0000", "Ver. 2.0, Ref. 5"}, {"cp", "cp", "cp", "p=", "6.7092", "0.0000", "Ver. 3.1, Ref. 12"}, {"cp", "cp", "cp", "si", "5.3654", "0.0000", "Ver. 2.2, Ref. 9"}, {"cp", "cp", "h", "nh", "7.9682", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "np", "10.4920", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "op", "8.1654", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "cp", "h", "sp", "5.5684", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "nh", "10.2877", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "nh", "np", "8.8464", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "np", "14.3802", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "op", "10.8102", "0.0000", "Ver. 1.0, Ref. 1"}, {"h", "cp", "np", "sp", "7.3414", "0.0000", "Ver. 1.0, Ref. 1"}, {"nn", "cp", "np", "np", "15.0921", "0.0000", "Ver. 1.0, Ref. 1"}, {"n=", "cr", "nr", "nr", "54.4060", "0.0000", "Ver. 1.1, Ref. 1"}, {"oo", "cz", "oz", "oz", "51.6374", "0.0000", "Ver. 2.0, Ref. 5"}, {"c", "n", "c", "c_1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n", "c_1", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "c_1", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_1", "n", "h*", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "n=", "cr", "h*", "0.3176", "0.0000", "Ver. 1.1, Ref. 1"}, {"c", "n_2", "c_1", "hn2", "-5.3119", "0.0000", "Ver. 2.1, Ref. 8"}, {"c", "n_2", "c_2", "hn2", "-5.3119", "0.0000", "Ver. 2.1, Ref. 7"}, {"c_1", "n_2", "cp", "hn2", "4.4181", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_1", "n_2", "hn2", "hn2", "-6.5636", "0.0000", "Ver. 2.1, Ref. 8"}, {"c_2", "n_2", "cp", "hn2", "4.4181", "0.0000", "Ver. 2.1, Ref. 7"}, {"c_2", "n_2", "hn2", "hn2", "-6.5636", "0.0000", "Ver. 2.1, Ref. 7"}, {"c", "na", "c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "na", "c", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "na", "h*", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "cp", "h*", "5.9154", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "h*", "np", "4.9959", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "h*", "h*", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "nr", "c+", "h*", "0.3176", "0.0000", "Ver. 1.0, Ref. 1"}, {"c+", "nr", "h*", "h*", "1.0035", "0.0000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "h*", "h*", "1.0035", "0.0000", "Ver. 1.1, Ref. 1"}, {"az", "ob", "hb", "sz", "116.0100", "3.8934", "Ver. 3.0, Ref. 10"}, {"*", "c'_", "*", "*", "36.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "c+", "*", "*", "54.4060", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "c=_", "*", "*", "2.0568", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "cp_", "*", "*", "10.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "n=_", "*", "*", "0.5000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "n_", "*", "*", "0.1000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "na_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "np_", "*", "*", "5.5000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "nr_", "*", "*", "1.0035", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "o_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "p_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"*", "s_", "*", "*", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}}; /* Non-bonded (9-6) 0= Key, 1= r, 2= eps, 3= PCFF info E = eps(ij) [2(R(ij)/r(ij))^9 - 3(R(ij)/r(ij))^6] where R(ij) = [(r(i)^6 + r(j)^6))/2]^(1/6) eps(ij) = 2 sqrt(eps(i) * eps(j)) * r(i)^3 * r(j)^3/[r(i)^6 + r(j)^6] */ char * PCFF_vdw[94][4]= {{"Ag", "3.0222", "4.10020", "Ver. 2.1, Ref. 11"}, {"Al", "2.9964", "3.32320", "Ver. 2.1, Ref. 11"}, {"Au", "3.0177", "6.09800", "Ver. 2.1, Ref. 11"}, {"Br", "4.2150", "0.30500", "Ver. 2.0, Ref. 3"}, {"Cl", "3.9150", "0.30500", "Ver. 2.0, Ref. 3"}, {"Cr", "2.6764", "5.80440", "Ver. 2.1, Ref. 11"}, {"Cu", "2.6775", "3.81870", "Ver. 2.1, Ref. 11"}, {"Fe", "2.6595", "13.88920", "Ver. 2.1, Ref. 11"}, {"K", "4.8858", "0.74410", "Ver. 2.1, Ref. 11"}, {"Li", "3.2494", "0.72140", "Ver. 2.1, Ref. 11"}, {"Mo", "2.9184", "9.78710", "Ver. 2.1, Ref. 11"}, {"Na", "3.9624", "0.73800", "Ver. 2.1, Ref. 11"}, {"Ni", "2.6105", "5.07370", "Ver. 2.1, Ref. 11"}, {"Pb", "3.6541", "34.18600", "Ver. 2.1, Ref. 11"}, {"Pd", "2.8810", "6.08460", "Ver. 2.1, Ref. 11"}, {"Pt", "2.9034", "9.14470", "Ver. 2.1, Ref. 11"}, {"Sn", "2.9927", "4.84330", "Ver. 2.1, Ref. 11"}, {"W", "2.9344", "12.04700", "Ver. 2.1, Ref. 11"}, {"ar", "3.8400", "0.24640", "Ver. 2.1, Ref. 8"}, {"az", "0.0001", "0.00000", "Ver. 3.0, Ref. 10"}, {"br", "4.3000", "0.34890", "Ver. 2.1, Ref. 8"}, {"c", "4.0100", "0.05400", "Ver. 2.0, Ref. 1"}, {"c+", "3.3080", "0.12000", "Ver. 2.0, Ref. 1"}, {"c-", "3.9080", "0.12000", "Ver. 2.0, Ref. 1"}, {"c=", "3.9000", "0.06400", "Ver. 2.1, Ref. 8"}, {"c=", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"c=1", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"c=2", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"c_0", "3.3080", "0.12000", "Ver. 2.0, Ref. 1"}, {"c_1", "3.8100", "0.12000", "Ver. 2.1, Ref. 6"}, {"c_2", "3.8100", "0.12000", "Ver. 2.1, Ref. 7"}, {"ca+", "3.9800", "0.30150", "Ver. 2.1, Ref. 8"}, {"cl", "3.9200", "0.22470", "Ver. 2.1, Ref. 8"}, {"cp", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"cr", "3.3080", "0.12000", "Ver. 2.0, Ref. 1"}, {"ct", "4.0100", "0.06400", "Ver. 2.0, Ref. 1"}, {"cz", "3.9000", "0.06400", "Ver. 2.0, Ref. 5"}, {"f", "3.2000", "0.05980", "Ver. 2.1, Ref. 8"}, {"h", "2.9950", "0.02000", "Ver. 2.0, Ref. 1"}, {"h*", "1.0980", "0.01300", "Ver. 2.0, Ref. 1"}, {"h+", "1.0980", "0.01300", "Ver. 2.0, Ref. 1"}, {"hb", "1.2149", "5.23020", "Ver. 3.0, Ref. 10"}, {"he", "2.9000", "0.02030", "Ver. 2.1, Ref. 8"}, {"hn2", "1.6500", "0.01300", "Ver. 2.1, Ref. 7"}, {"ho2", "1.1100", "0.01300", "Ver. 2.1, Ref. 6"}, {"ho2", "1.0100", "0.15000", "Ver. 2.0, Ref. 5"}, {"hoa", "1.2879", "3.68600", "Ver. 3.0, Ref. 10"}, {"hos", "2.3541", "0.09880", "Ver. 3.0, Ref. 10"}, {"hsi", "2.9400", "0.02300", "Ver. 2.2, Ref. 9"}, {"i", "4.8000", "0.40000", "Ver. 2.0, Ref. 3"}, {"kr", "4.3000", "0.40280", "Ver. 2.1, Ref. 8"}, {"n", "4.0700", "0.10600", "Ver. 2.0, Ref. 1"}, {"n+", "3.2620", "0.06500", "Ver. 2.0, Ref. 1"}, {"n=", "3.8000", "0.08000", "Ver. 3.1, Ref. 12"}, {"n=", "4.1210", "0.06200", "Ver. 2.0, Ref. 1"}, {"n=1", "4.1210", "0.06200", "Ver. 2.0, Ref. 1"}, {"n=2", "4.1210", "0.06200", "Ver. 2.0, Ref. 1"}, {"n_2", "3.6000", "0.10600", "Ver. 2.1, Ref. 7"}, {"na", "4.0700", "0.06500", "Ver. 2.0, Ref. 1"}, {"ne", "3.1300", "0.07090", "Ver. 2.1, Ref. 8"}, {"nh", "4.0700", "0.13400", "Ver. 2.0, Ref. 1"}, {"nn", "4.0700", "0.06500", "Ver. 2.0, Ref. 1"}, {"np", "3.5700", "0.04100", "Ver. 2.0, Ref. 1"}, {"nr", "4.0700", "0.10600", "Ver. 2.0, Ref. 1"}, {"nt", "3.5700", "0.06500", "Ver. 2.0, Ref. 1"}, {"nz", "3.7500", "0.06500", "Ver. 2.1, Ref. 8"}, {"nz", "3.5700", "0.06500", "Ver. 2.0, Ref. 1"}, {"o", "3.5350", "0.24000", "Ver. 2.0, Ref. 1"}, {"o*", "3.6080", "0.27400", "Ver. 2.0, Ref. 1"}, {"o-", "3.5960", "0.16700", "Ver. 2.0, Ref. 1"}, {"o=", "3.5350", "0.06000", "Ver. 2.1, Ref. 8"}, {"o_1", "3.3000", "0.26700", "Ver. 2.1, Ref. 6"}, {"o_1", "3.5350", "0.26700", "Ver. 2.0, Ref. 1"}, {"o_2", "3.4200", "0.24000", "Ver. 2.1, Ref. 6"}, {"oah", "3.7245", "0.10260", "Ver. 3.0, Ref. 10"}, {"oas", "5.2591", "0.01290", "Ver. 3.0, Ref. 10"}, {"ob", "5.2191", "0.01350", "Ver. 3.0, Ref. 10"}, {"oo", "3.2000", "0.25700", "Ver. 2.0, Ref. 5"}, {"op", "3.5350", "0.10900", "Ver. 2.0, Ref. 1"}, {"osh", "3.4618", "0.15910", "Ver. 3.0, Ref. 10"}, {"osi", "3.3500", "0.24000", "Ver. 1.0, Ref. 4"}, {"oss", "3.4506", "0.16220", "Ver. 3.0, Ref. 10"}, {"oz", "3.3200", "0.24000", "Ver. 2.0, Ref. 5"}, {"p", "4.2950", "0.21500", "Ver. 2.0, Ref. 3"}, {"p=", "4.3000", "0.21500", "Ver. 3.1, Ref. 12"}, {"s", "4.0270", "0.07100", "Ver. 2.0, Ref. 1"}, {"s'", "4.0270", "0.25000", "Ver. 2.1, Ref. 8"}, {"s'", "4.0270", "0.07100", "Ver. 2.0, Ref. 1"}, {"si", "4.4500", "0.19000", "Ver. 2.2, Ref. 9"}, {"si", "4.4350", "0.09500", "Ver. 2.0, Ref. 3"}, {"sio", "4.2840", "0.07000", "Ver. 1.0, Ref. 4"}, {"sp", "4.0270", "0.07100", "Ver. 2.0, Ref. 1"}, {"sz", "0.0001", "0.00000", "Ver. 3.0, Ref. 10"}, {"xe", "4.5600", "0.45500", "Ver. 2.1, Ref. 8"}}; /* Bond increments To implement atomic charges */ char * PCFF_bond_increments[564][5]= {{"Ag", "Ag", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Al", "Al", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Au", "Au", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Cr", "Cr", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Cu", "Cu", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Fe", "Fe", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"K", "K", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Li", "Li", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Mo", "Mo", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Na", "Na", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Ni", "Ni", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Pb", "Pb", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Pd", "Pd", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Pt", "Pt", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"Sn", "Sn", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"W", "W", "0.0000", "0.0000", "Ver. 2.1, Ref. 11"}, {"az", "oah", "0.3013", "-0.3013", "Ver. 3.0, Ref. 10"}, {"az", "oas", "0.1694", "-0.1694", "Ver. 3.0, Ref. 10"}, {"az", "ob", "0.0284", "-0.0284", "Ver. 3.0, Ref. 10"}, {"br", "br", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"br", "c", "-0.1600", "0.1600", "Ver. 2.1, Ref. 8"}, {"br", "c-", "-0.0281", "0.0281", "Ver. 2.0, Ref. 2"}, {"br", "c=", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c=1", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c=2", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c_0", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "c_1", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "cl", "0.0507", "-0.0507", "Ver. 2.0, Ref. 2"}, {"br", "cp", "-0.0800", "0.0800", "Ver. 2.0, Ref. 3"}, {"br", "ct", "0.0173", "-0.0173", "Ver. 2.0, Ref. 2"}, {"br", "f", "0.2099", "-0.2099", "Ver. 2.0, Ref. 2"}, {"br", "h", "-0.1978", "0.1978", "Ver. 2.0, Ref. 2"}, {"br", "i", "-0.0110", "0.0110", "Ver. 2.0, Ref. 2"}, {"br", "n", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "n+", "0.2452", "0.0048", "Ver. 2.0, Ref. 2"}, {"br", "n=", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "n=1", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "n=2", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "na", "0.0601", "-0.0601", "Ver. 2.0, Ref. 2"}, {"br", "nh", "-0.0438", "0.0438", "Ver. 2.0, Ref. 2"}, {"br", "nn", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "np", "0.1422", "-0.1422", "Ver. 2.0, Ref. 2"}, {"br", "o", "0.0818", "-0.0818", "Ver. 2.0, Ref. 2"}, {"br", "op", "0.3140", "-0.3140", "Ver. 2.0, Ref. 2"}, {"br", "p", "-0.2156", "0.2156", "Ver. 2.0, Ref. 2"}, {"br", "s", "-0.0437", "0.0437", "Ver. 2.0, Ref. 2"}, {"br", "s'", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"br", "si", "-0.3273", "0.3273", "Ver. 2.0, Ref. 2"}, {"br", "sp", "0.0034", "-0.0034", "Ver. 2.0, Ref. 2"}, {"c", "c", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c-", "-0.2300", "0.2300", "Ver. 1.0, Ref. 1"}, {"c", "c=", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c=2", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_0", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "c_1", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cl", "0.1840", "-0.1840", "Ver. 2.1, Ref. 8"}, {"c", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "cr", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c", "ct", "0.0400", "-0.0400", "Ver. 1.0, Ref. 1"}, {"c", "f", "0.2500", "-0.2500", "Ver. 2.1, Ref. 8"}, {"c", "h", "-0.0530", "0.0530", "Ver. 1.0, Ref. 1"}, {"c", "i", "0.1120", "-0.1120", "Ver. 2.0, Ref. 2"}, {"c", "n", "0.2108", "-0.2108", "Ver. 1.0, Ref. 1"}, {"c", "n+", "0.4071", "-0.1571", "Ver. 1.0, Ref. 1"}, {"c", "n=", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c", "n=1", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c", "n=2", "0.3000", "-0.3000", "Ver. 1.0, Ref. 1"}, {"c", "n_2", "0.2100", "-0.2100", "Ver. 2.1, Ref. 7"}, {"c", "na", "0.0827", "-0.0827", "Ver. 1.0, Ref. 1"}, {"c", "nh", "0.0610", "-0.0610", "Ver. 1.0, Ref. 2"}, {"c", "nn", "0.2108", "-0.2108", "Ver. 1.0, Ref. 2"}, {"c", "np", "0.1100", "-0.1100", "Ver. 1.0, Ref. 3"}, {"c", "nr", "0.4802", "-0.4802", "Ver. 1.0, Ref. 1"}, {"c", "nt", "0.3640", "-0.3640", "Ver. 1.0, Ref. 2"}, {"c", "o", "0.1330", "-0.1330", "Ver. 2.1, Ref. 8"}, {"c", "o_2", "0.2250", "-0.2250", "Ver. 2.1, Ref. 6"}, {"c", "oz", "0.0500", "-0.0500", "Ver. 2.0, Ref. 4"}, {"c", "p", "0.0110", "-0.0110", "Ver. 2.0, Ref. 2"}, {"c", "p=", "-0.0500", "0.0500", "Ver. 3.1, Ref. 12"}, {"c", "s", "0.0650", "-0.0650", "Ver. 1.0, Ref. 1"}, {"c", "si", "-0.1350", "0.1350", "Ver. 2.2, Ref. 9"}, {"c", "si", "-0.1767", "0.1767", "Ver. 2.0, Ref. 2"}, {"c", "sio", "-0.1000", "0.1000", "Ver. 1.0, Ref. 4"}, {"c+", "nr", "0.2653", "0.0680", "Ver. 1.0, Ref. 1"}, {"c-", "c-", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c-", "c_0", "0.1368", "-0.1368", "Ver. 2.0, Ref. 2"}, {"c-", "c_1", "0.1368", "-0.1368", "Ver. 2.0, Ref. 2"}, {"c-", "cl", "0.0747", "-0.0747", "Ver. 2.0, Ref. 2"}, {"c-", "cp", "-0.0424", "0.0424", "Ver. 2.0, Ref. 2"}, {"c-", "ct", "0.0432", "-0.0432", "Ver. 2.0, Ref. 2"}, {"c-", "f", "0.2241", "-0.2241", "Ver. 2.0, Ref. 2"}, {"c-", "h", "-0.0530", "0.0530", "Ver. 1.0, Ref. 1"}, {"c-", "i", "0.0185", "-0.0185", "Ver. 2.0, Ref. 2"}, {"c-", "n", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "n+", "0.2597", "-0.0097", "Ver. 2.0, Ref. 2"}, {"c-", "n=", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "n=1", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "n=2", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "nh", "-0.0176", "0.0176", "Ver. 2.0, Ref. 2"}, {"c-", "nn", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "np", "0.1607", "-0.1607", "Ver. 2.0, Ref. 2"}, {"c-", "o", "0.1012", "-0.1012", "Ver. 2.0, Ref. 2"}, {"c-", "o-", "0.0337", "-0.5337", "Ver. 1.0, Ref. 1"}, {"c-", "o_1", "0.3241", "-0.3241", "Ver. 2.0, Ref. 2"}, {"c-", "op", "0.3241", "-0.3241", "Ver. 2.0, Ref. 2"}, {"c-", "p", "-0.0857", "0.0857", "Ver. 2.0, Ref. 2"}, {"c-", "s", "-0.0087", "0.0087", "Ver. 2.0, Ref. 2"}, {"c-", "s-", "-0.1223", "-0.3777", "Ver. 2.0, Ref. 2"}, {"c-", "si", "-0.2775", "0.2775", "Ver. 2.0, Ref. 2"}, {"c=", "c=", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c=", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"c=", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c=", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c=", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"c=", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"c=", "n=", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=", "n=1", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=", "n=2", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=", "n_2", "0.1000", "-0.1000", "Ver. 3.1, Ref. 12"}, {"c=", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "nh", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"c=", "o_1", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=", "p", "-0.0380", "0.0380", "Ver. 2.0, Ref. 2"}, {"c=", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"c=", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"c=", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=1", "c=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=1", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=1", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c=1", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"c=1", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c=1", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c=1", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"c=1", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"c=1", "n=", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=1", "n=1", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=1", "n=2", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=1", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "nh", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=1", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=1", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"c=1", "o_1", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=1", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=1", "p", "-0.0380", "0.0380", "Ver. 2.0, Ref. 2"}, {"c=1", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"c=1", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=1", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"c=1", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=2", "c=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 1"}, {"c=2", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c=2", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"c=2", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c=2", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"c=2", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"c=2", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"c=2", "n=", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=2", "n=1", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=2", "n=2", "0.3000", "-0.3000", "Ver. 2.0, Ref. 3"}, {"c=2", "n_2", "0.1000", "-0.1000", "Ver. 3.1, Ref. 12"}, {"c=2", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "nh", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c=2", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c=2", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"c=2", "o=", "0.1200", "-0.1200", "Ver. 2.1, Ref. 8"}, {"c=2", "o_1", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=2", "op", "0.3583", "-0.3583", "Ver. 2.0, Ref. 2"}, {"c=2", "p", "-0.0380", "0.0380", "Ver. 2.0, Ref. 2"}, {"c=2", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"c=2", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c=2", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"c=2", "sp", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"c_0", "c_0", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_0", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_0", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c_0", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_0", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 2"}, {"c_0", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c_0", "h", "-0.0456", "0.0456", "Ver. 1.0, Ref. 1"}, {"c_0", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 2"}, {"c_0", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_0", "n+", "0.1331", "0.1169", "Ver. 2.0, Ref. 2"}, {"c_0", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "nh", "-0.1422", "0.1422", "Ver. 2.0, Ref. 2"}, {"c_0", "nn", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_0", "nt", "0.1641", "-0.1641", "Ver. 2.0, Ref. 2"}, {"c_0", "o", "0.0030", "-0.0030", "Ver. 1.0, Ref. 1"}, {"c_0", "o_1", "0.3964", "-0.3964", "Ver. 1.0, Ref. 1"}, {"c_0", "op", "0.0283", "-0.0283", "Ver. 1.0, Ref. 1"}, {"c_0", "p", "-0.2396", "0.2396", "Ver. 2.0, Ref. 2"}, {"c_0", "s", "-0.0140", "0.0140", "Ver. 2.0, Ref. 2"}, {"c_0", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c_0", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 2"}, {"c_0", "sp", "-0.0130", "0.0130", "Ver. 1.0, Ref. 1"}, {"c_1", "c_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_1", "cl", "0.1020", "-0.1020", "Ver. 2.0, Ref. 3"}, {"c_1", "cp", "0.0180", "-0.0180", "Ver. 2.1, Ref. 6"}, {"c_1", "cp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"c_1", "ct", "-0.0927", "0.0927", "Ver. 2.0, Ref. 2"}, {"c_1", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"c_1", "h", "-0.0456", "0.0456", "Ver. 1.0, Ref. 1"}, {"c_1", "i", "-0.1291", "0.1291", "Ver. 2.0, Ref. 2"}, {"c_1", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"c_1", "n+", "0.1331", "0.1169", "Ver. 2.0, Ref. 2"}, {"c_1", "n=", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "n=1", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "n=2", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "n_2", "0.1110", "-0.1110", "Ver. 2.1, Ref. 7"}, {"c_1", "nh", "-0.1422", "0.1422", "Ver. 2.0, Ref. 2"}, {"c_1", "nn", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "np", "0.0362", "-0.0362", "Ver. 2.0, Ref. 2"}, {"c_1", "nt", "0.1641", "-0.1641", "Ver. 2.0, Ref. 2"}, {"c_1", "o", "0.0030", "-0.0030", "Ver. 1.0, Ref. 1"}, {"c_1", "o_1", "0.5310", "-0.5310", "Ver. 2.1, Ref. 6"}, {"c_1", "o_2", "0.1710", "-0.1710", "Ver. 2.1, Ref. 6"}, {"c_1", "op", "0.0283", "-0.0283", "Ver. 1.0, Ref. 1"}, {"c_1", "p", "-0.2396", "0.2396", "Ver. 2.0, Ref. 2"}, {"c_1", "s", "-0.0140", "0.0140", "Ver. 2.0, Ref. 2"}, {"c_1", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 3"}, {"c_1", "si", "-0.4405", "0.4405", "Ver. 2.0, Ref. 2"}, {"c_1", "sp", "-0.0130", "0.0130", "Ver. 1.0, Ref. 1"}, {"c_2", "n_2", "0.1110", "-0.1110", "Ver. 2.1, Ref. 7"}, {"c_2", "o_1", "0.5850", "-0.5850", "Ver. 2.1, Ref. 7"}, {"c_2", "o_2", "0.1890", "-0.1890", "Ver. 2.1, Ref. 7"}, {"cl", "cl", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"cl", "cp", "-0.1020", "0.1020", "Ver. 2.0, Ref. 3"}, {"cl", "ct", "-0.0319", "0.0319", "Ver. 2.0, Ref. 2"}, {"cl", "f", "0.1589", "-0.1589", "Ver. 2.0, Ref. 2"}, {"cl", "h", "-0.2404", "0.2404", "Ver. 2.0, Ref. 2"}, {"cl", "i", "-0.0623", "0.0623", "Ver. 2.0, Ref. 2"}, {"cl", "n", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "n+", "0.1858", "0.0642", "Ver. 2.0, Ref. 2"}, {"cl", "n=", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "n=1", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "n=2", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "na", "0.0117", "-0.0117", "Ver. 2.0, Ref. 2"}, {"cl", "nh", "-0.0854", "0.0854", "Ver. 2.0, Ref. 2"}, {"cl", "nn", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "np", "0.0897", "-0.0897", "Ver. 2.0, Ref. 2"}, {"cl", "o", "0.0367", "-0.0367", "Ver. 2.0, Ref. 2"}, {"cl", "op", "0.2585", "-0.2585", "Ver. 2.0, Ref. 2"}, {"cl", "p", "-0.2544", "0.2544", "Ver. 2.0, Ref. 2"}, {"cl", "p=", "-0.1200", "0.1200", "Ver. 3.1, Ref. 12"}, {"cl", "s", "-0.0898", "0.0898", "Ver. 2.0, Ref. 2"}, {"cl", "s'", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"cl", "si", "-0.3598", "0.3598", "Ver. 2.0, Ref. 2"}, {"cl", "sp", "-0.0457", "0.0457", "Ver. 2.0, Ref. 2"}, {"cp", "cp", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "ct", "0.0852", "-0.0852", "Ver. 2.0, Ref. 2"}, {"cp", "f", "0.1300", "-0.1300", "Ver. 2.0, Ref. 3"}, {"cp", "h", "-0.1268", "0.1268", "Ver. 1.0, Ref. 1"}, {"cp", "i", "0.0642", "-0.0642", "Ver. 2.0, Ref. 2"}, {"cp", "n", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "n+", "0.2989", "-0.0489", "Ver. 2.0, Ref. 2"}, {"cp", "n=", "0.1993", "-0.1993", "Ver. 2.0, Ref. 2"}, {"cp", "n=1", "0.1993", "-0.1993", "Ver. 2.0, Ref. 2"}, {"cp", "n=2", "0.1993", "-0.1993", "Ver. 2.0, Ref. 2"}, {"cp", "n_2", "0.2370", "-0.2370", "Ver. 2.1, Ref. 7"}, {"cp", "na", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"cp", "nh", "-0.0500", "0.0500", "Ver. 1.0, Ref. 1"}, {"cp", "nn", "0.0827", "-0.0827", "Ver. 1.0, Ref. 1"}, {"cp", "np", "0.2405", "-0.2405", "Ver. 1.0, Ref. 1"}, {"cp", "o", "0.0265", "-0.0265", "Ver. 1.0, Ref. 1"}, {"cp", "o_1", "0.3964", "-0.3964", "Ver. 2.0, Ref. 2"}, {"cp", "o_2", "0.2790", "-0.2790", "Ver. 2.1, Ref. 6"}, {"cp", "op", "0.0283", "-0.0283", "Ver. 1.0, Ref. 1"}, {"cp", "oz", "0.1700", "-0.1700", "Ver. 2.0, Ref. 4"}, {"cp", "p", "-0.0380", "0.0380", "Ver. 1.0, Ref. 2"}, {"cp", "p=", "-0.0600", "0.0600", "Ver. 3.1, Ref. 12"}, {"cp", "s", "-0.0120", "0.0120", "Ver. 2.0, Ref. 2"}, {"cp", "s'", "0.0732", "-0.0732", "Ver. 2.0, Ref. 2"}, {"cp", "si", "-0.1170", "0.1170", "Ver. 2.2, Ref. 9"}, {"cp", "si", "-0.2270", "0.2270", "Ver. 2.0, Ref. 2"}, {"cp", "sio", "-0.1500", "0.1500", "Ver. 1.0, Ref. 4"}, {"cp", "sp", "-0.0130", "0.0130", "Ver. 1.0, Ref. 1"}, {"cr", "n=", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"cr", "n=1", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"cr", "n=2", "0.4000", "-0.4000", "Ver. 1.0, Ref. 1"}, {"cr", "nr", "0.0000", "-0.0000", "Ver. 2.0, Ref. 2"}, {"ct", "ct", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"ct", "f", "0.1873", "-0.1873", "Ver. 2.0, Ref. 2"}, {"ct", "h", "-0.2052", "0.2052", "Ver. 2.0, Ref. 2"}, {"ct", "i", "-0.0281", "0.0281", "Ver. 2.0, Ref. 2"}, {"ct", "n", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "n+", "0.0992", "0.1508", "Ver. 2.0, Ref. 2"}, {"ct", "n=", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "n=1", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "n=2", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "na", "-0.0636", "0.0636", "Ver. 2.0, Ref. 2"}, {"ct", "nh", "-0.0568", "0.0568", "Ver. 2.0, Ref. 2"}, {"ct", "nn", "0.0920", "-0.0920", "Ver. 2.0, Ref. 2"}, {"ct", "np", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "nt", "0.1204", "-0.1204", "Ver. 2.0, Ref. 2"}, {"ct", "o", "0.0675", "-0.0675", "Ver. 2.0, Ref. 2"}, {"ct", "p", "-0.1335", "0.1335", "Ver. 2.0, Ref. 2"}, {"ct", "s", "-0.0522", "0.0522", "Ver. 2.0, Ref. 2"}, {"ct", "si", "-0.3266", "0.3266", "Ver. 2.0, Ref. 2"}, {"cz", "oo", "0.5000", "-0.5000", "Ver. 2.0, Ref. 4"}, {"cz", "oz", "0.1000", "-0.1000", "Ver. 2.0, Ref. 4"}, {"f", "f", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"f", "h", "-0.3823", "0.3823", "Ver. 2.0, Ref. 2"}, {"f", "h*", "-0.4089", "0.4089", "Ver. 1.0, Ref. 4"}, {"f", "i", "-0.2234", "0.2234", "Ver. 2.0, Ref. 2"}, {"f", "n", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "n+", "0.0062", "0.2438", "Ver. 2.0, Ref. 2"}, {"f", "n=", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "n=1", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "n=2", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "na", "-0.1415", "0.1415", "Ver. 2.0, Ref. 2"}, {"f", "nh", "-0.2220", "0.2220", "Ver. 2.0, Ref. 2"}, {"f", "nn", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "np", "-0.0731", "0.0731", "Ver. 2.0, Ref. 2"}, {"f", "o", "-0.1077", "0.1077", "Ver. 2.0, Ref. 2"}, {"f", "op", "0.0888", "-0.0888", "Ver. 2.0, Ref. 2"}, {"f", "p", "-0.3869", "0.3869", "Ver. 2.0, Ref. 2"}, {"f", "p=", "-0.1800", "0.1800", "Ver. 3.1, Ref. 12"}, {"f", "s", "-0.2380", "0.2380", "Ver. 2.0, Ref. 2"}, {"f", "s'", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"f", "si", "-0.4789", "0.4789", "Ver. 2.0, Ref. 2"}, {"f", "sp", "-0.2011", "0.2011", "Ver. 2.0, Ref. 2"}, {"h", "h", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"h", "i", "0.1923", "-0.1923", "Ver. 2.0, Ref. 2"}, {"h", "op", "0.4943", "-0.4943", "Ver. 2.0, Ref. 2"}, {"h", "p", "-0.0356", "0.0356", "Ver. 2.0, Ref. 2"}, {"h", "p=", "-0.0500", "0.0500", "Ver. 3.1, Ref. 12"}, {"h", "s", "0.1392", "-0.1392", "Ver. 2.0, Ref. 2"}, {"h", "s'", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"h", "si", "-0.1260", "0.1260", "Ver. 2.2, Ref. 9"}, {"h", "si", "-0.1537", "0.1537", "Ver. 2.0, Ref. 2"}, {"h", "sio", "-0.1300", "0.1300", "Ver. 1.0, Ref. 4"}, {"h", "sp", "0.1932", "-0.1932", "Ver. 2.0, Ref. 2"}, {"h*", "n", "0.4395", "-0.4395", "Ver. 1.0, Ref. 1"}, {"h*", "n=", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "n=1", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "n=2", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "na", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"h*", "nh", "0.3925", "-0.3925", "Ver. 1.0, Ref. 1"}, {"h*", "nn", "0.2487", "-0.2487", "Ver. 1.0, Ref. 1"}, {"h*", "np", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "nr", "0.4068", "-0.4068", "Ver. 1.0, Ref. 1"}, {"h*", "nt", "0.3278", "-0.3278", "Ver. 2.0, Ref. 2"}, {"h*", "o", "0.4241", "-0.4241", "Ver. 1.0, Ref. 1"}, {"h*", "o*", "0.3991", "-0.3991", "Ver. 1.0, Ref. 1"}, {"h*", "osi", "0.3400", "-0.3400", "Ver. 1.0, Ref. 4"}, {"h+", "n+", "0.2800", "-0.0300", "Ver. 1.0, Ref. 1"}, {"hb", "ob", "0.0839", "-0.0839", "Ver. 3.0, Ref. 10"}, {"hi", "nh", "0.3925", "0.1075", "Ver. 1.0, Ref. 1"}, {"hn2", "n_2", "0.3780", "-0.3780", "Ver. 2.1, Ref. 7"}, {"ho2", "o_2", "0.4230", "-0.4230", "Ver. 2.1, Ref. 6"}, {"ho2", "oz", "0.4500", "-0.4500", "Ver. 2.0, Ref. 4"}, {"hoa", "oah", "0.0575", "-0.0575", "Ver. 3.0, Ref. 10"}, {"hos", "osh", "0.0641", "-0.0641", "Ver. 3.0, Ref. 10"}, {"hsi", "si", "-0.1260", "0.1260", "Ver. 2.2, Ref. 9"}, {"i", "i", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"i", "n", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "n+", "0.2615", "-0.0115", "Ver. 2.0, Ref. 2"}, {"i", "n=", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "n=1", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "n=2", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "na", "0.0714", "-0.0714", "Ver. 2.0, Ref. 2"}, {"i", "nh", "-0.0356", "0.0358", "Ver. 2.0, Ref. 2"}, {"i", "nn", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "np", "0.1554", "-0.1554", "Ver. 2.0, Ref. 2"}, {"i", "o", "0.0924", "-0.0924", "Ver. 2.0, Ref. 2"}, {"i", "op", "0.3297", "-0.3297", "Ver. 2.0, Ref. 2"}, {"i", "p", "-0.2110", "0.2110", "Ver. 2.0, Ref. 2"}, {"i", "s", "-0.0345", "0.0345", "Ver. 2.0, Ref. 2"}, {"i", "s'", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"i", "si", "-0.3263", "0.3263", "Ver. 2.0, Ref. 2"}, {"i", "sp", "0.0140", "-0.0140", "Ver. 2.0, Ref. 2"}, {"n", "n", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "n+", "0.0883", "0.1617", "Ver. 2.0, Ref. 2"}, {"n", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n", "p=", "-0.1200", "0.1200", "Ver. 3.1, Ref. 12"}, {"n", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n+", "n+", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n+", "n=", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "n=1", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "n=2", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "na", "0.0850", "0.1650", "Ver. 2.0, Ref. 2"}, {"n+", "nh", "-0.0044", "0.2544", "Ver. 2.0, Ref. 2"}, {"n+", "nn", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "np", "0.1617", "0.0883", "Ver. 2.0, Ref. 2"}, {"n+", "o", "0.1250", "0.1250", "Ver. 2.0, Ref. 2"}, {"n+", "o_1", "0.3418", "-0.0918", "Ver. 2.0, Ref. 2"}, {"n+", "op", "0.3418", "-0.0918", "Ver. 2.0, Ref. 2"}, {"n+", "p", "-0.1994", "0.4494", "Ver. 2.0, Ref. 2"}, {"n+", "s", "-0.0255", "0.2755", "Ver. 2.0, Ref. 2"}, {"n+", "s'", "0.0159", "0.2341", "Ver. 2.0, Ref. 2"}, {"n+", "si", "-0.3083", "0.5583", "Ver. 2.0, Ref. 2"}, {"n+", "sp", "0.0159", "0.2341", "Ver. 2.0, Ref. 2"}, {"n=", "n=", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n=", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n=", "p=", "-0.3500", "0.3500", "Ver. 3.1, Ref. 12"}, {"n=", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n=", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n=", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=1", "n=1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=1", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=1", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=1", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n=1", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=1", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=1", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n=1", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n=1", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=1", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n=1", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=2", "n=2", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=2", "na", "-0.0742", "0.0742", "Ver. 2.0, Ref. 2"}, {"n=2", "nh", "-0.1637", "0.1637", "Ver. 2.0, Ref. 2"}, {"n=2", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=2", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"n=2", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"n=2", "o=", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=2", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=2", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"n=2", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"n=2", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"n=2", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"n=2", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"n=2", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"na", "na", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"na", "nh", "-0.0919", "0.0919", "Ver. 2.0, Ref. 2"}, {"na", "nn", "0.0371", "-0.0371", "Ver. 2.0, Ref. 2"}, {"na", "np", "0.0742", "-0.0742", "Ver. 2.0, Ref. 2"}, {"na", "o", "0.0254", "-0.0254", "Ver. 2.0, Ref. 2"}, {"na", "o_1", "0.2369", "-0.2369", "Ver. 2.0, Ref. 2"}, {"na", "op", "0.2369", "-0.2369", "Ver. 2.0, Ref. 2"}, {"na", "p", "-0.2518", "0.2518", "Ver. 2.0, Ref. 2"}, {"na", "s", "-0.0966", "0.0966", "Ver. 2.0, Ref. 2"}, {"na", "s'", "-0.0551", "0.0551", "Ver. 2.0, Ref. 2"}, {"na", "si", "-0.3501", "0.3501", "Ver. 2.0, Ref. 2"}, {"na", "sp", "-0.0551", "0.0551", "Ver. 2.0, Ref. 2"}, {"nh", "nh", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nh", "nn", "0.1637", "-0.1637", "Ver. 2.0, Ref. 2"}, {"nh", "np", "-0.2823", "0.2823", "Ver. 1.0, Ref. 1"}, {"nh", "o", "-0.1090", "-0.1090", "Ver. 2.0, Ref. 2"}, {"nh", "o_1", "0.3148", "-0.3148", "Ver. 2.0, Ref. 2"}, {"nh", "op", "0.3148", "-0.3148", "Ver. 2.0, Ref. 2"}, {"nh", "p", "-0.1375", "0.1375", "Ver. 2.0, Ref. 2"}, {"nh", "s", "0.0046", "-0.0046", "Ver. 2.0, Ref. 2"}, {"nh", "s'", "0.0454", "-0.0454", "Ver. 2.0, Ref. 2"}, {"nh", "si", "-0.2278", "0.2278", "Ver. 2.0, Ref. 2"}, {"nh", "sp", "0.0454", "-0.0454", "Ver. 2.0, Ref. 2"}, {"nn", "nn", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nn", "np", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"nn", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"nn", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"nn", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"nn", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"nn", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"nn", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"nn", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"nn", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"np", "np", "0.0000", "0.0000", "Ver. 1.0, Ref. 1"}, {"np", "o", "-0.0427", "0.0427", "Ver. 2.0, Ref. 2"}, {"np", "o_1", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"np", "op", "0.1684", "-0.1684", "Ver. 2.0, Ref. 2"}, {"np", "p", "-0.3359", "0.3359", "Ver. 2.0, Ref. 2"}, {"np", "s", "-0.1753", "0.1753", "Ver. 2.0, Ref. 2"}, {"np", "s'", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"np", "si", "-0.4368", "0.4368", "Ver. 2.0, Ref. 2"}, {"np", "sp", "-0.1346", "0.1346", "Ver. 2.0, Ref. 2"}, {"nt", "nt", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"nz", "nz", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o", "o", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o", "op", "0.1962", "-0.1962", "Ver. 2.0, Ref. 2"}, {"o", "p", "-0.2548", "0.2548", "Ver. 2.0, Ref. 2"}, {"o", "p=", "-0.1400", "0.1400", "Ver. 3.1, Ref. 12"}, {"o", "s", "-0.1143", "0.1143", "Ver. 2.0, Ref. 2"}, {"o", "s'", "-0.0766", "0.0766", "Ver. 2.0, Ref. 2"}, {"o", "si", "-0.3425", "0.3425", "Ver. 2.0, Ref. 2"}, {"o", "sp", "-0.0766", "0.0766", "Ver. 2.0, Ref. 2"}, {"o-", "p", "-0.8500", "0.3500", "Ver. 2.0, Ref. 3"}, {"o-", "s'", "-0.1143", "0.1143", "Ver. 2.1, Ref. 8"}, {"o=", "o=", "0.0000", "0.0000", "Ver. 2.1, Ref. 8"}, {"o=", "s'", "-0.1143", "0.1143", "Ver. 2.1, Ref. 8"}, {"o_1", "o_1", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o_1", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"o_1", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 2"}, {"o_1", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 2"}, {"o_1", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"o_1", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 2"}, {"o_1", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"oas", "sz", "-0.1265", "0.1265", "Ver. 3.0, Ref. 10"}, {"ob", "sz", "-0.1392", "0.1392", "Ver. 3.0, Ref. 10"}, {"op", "op", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"op", "p", "-0.4933", "0.4933", "Ver. 2.0, Ref. 2"}, {"op", "s", "-0.3386", "0.3386", "Ver. 2.0, Ref. 2"}, {"op", "s'", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"op", "si", "-0.5883", "0.5883", "Ver. 2.0, Ref. 2"}, {"op", "sp", "-0.3024", "0.3024", "Ver. 2.0, Ref. 2"}, {"osh", "sz", "-0.1303", "0.1303", "Ver. 3.0, Ref. 10"}, {"osi", "sio", "-0.2200", "0.2200", "Ver. 1.0, Ref. 4"}, {"oss", "sz", "-0.1309", "0.1309", "Ver. 3.0, Ref. 10"}, {"p", "p", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"p", "s", "0.1600", "-0.1600", "Ver. 2.0, Ref. 2"}, {"p", "s'", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"p", "s-", "0.1824", "-0.6824", "Ver. 2.0, Ref. 2"}, {"p", "si", "-0.1069", "0.1069", "Ver. 2.0, Ref. 2"}, {"p", "sp", "0.2106", "-0.2106", "Ver. 2.0, Ref. 2"}, {"s", "s", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s", "s'", "0.0455", "-0.0455", "Ver. 2.0, Ref. 2"}, {"s", "si", "-0.2634", "0.2634", "Ver. 2.0, Ref. 2"}, {"s", "sp", "0.0455", "-0.0455", "Ver. 2.0, Ref. 2"}, {"s'", "s'", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"s'", "si", "-0.3172", "0.3172", "Ver. 2.0, Ref. 2"}, {"s'", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.2, Ref. 9"}, {"si", "si", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}, {"si", "sp", "0.3172", "-0.3172", "Ver. 2.0, Ref. 2"}, {"sp", "sp", "0.0000", "0.0000", "Ver. 2.0, Ref. 2"}}; Atomes-GNU-1.1.14/src/calc/lammps/000077500000000000000000000000001457665371200164575ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/calc/lammps/la_print.c000066400000000000000000000600531457665371200204370ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file la_print.c * @short Functions to print the LAMMPS input file(s) * @author Sébastien Le Roux */ /* * This file: 'la_print.c' * * Contains: * - The functions to print the LAMMPS input file(s) * * List of functions: int get_mol_id_from_model_id (int at); int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, field_struct * dh); int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, field_struct * an); int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, field_struct * bd); int is_this_new_prop (int sid, field_prop * init, field_prop * to_check); int get_type_struct_to_print (field_molecule * tfmol, int sid); int get_different_atoms (); gboolean are_different_field_atoms (field_atom* at, field_atom* bt); void print_lammps_mass (GtkTextBuffer * buf); void print_lammps_atoms (GtkTextBuffer * buf); void print_lammps_atom_file (GtkTextBuffer * buf); field_atom* get_print_atom (int aid); */ #include "dlp_field.h" #include "interface.h" /*! \enum lammps_atom_types */ enum lammps_atom_types { // comments = corresponding data file formats l_angle = 0, /*!< atom-ID molecule-ID atom-type x y z */ l_atomic = 1, /*!< atom-ID atom-type x y z */ l_body = 2, /*!< atom-ID atom-type bodyflag mass x y z */ l_bond = 3, /*!< atom-ID molecule-ID atom-type x y z */ l_charge = 4, /*!< atom-type q x y z */ l_dipole = 5, /*!< atom-ID atom-type q x y z mux muy muz */ l_dpd = 6, /*!< atom-ID atom-type theta x y z */ l_edpd = 7, /*!< atom-ID atom-type edpd_temp edpd_cv x y z */ l_electron = 8, /*!< atom-ID atom-type q spin eradius x y z */ l_ellipsoid = 9, /*!< atom-ID atom-type ellipsoidflag density x y z */ l_full = 10, /*!< atom-ID molecule-ID atom-type q x y z */ l_line = 11, /*!< atom-ID molecule-ID atom-type lineflag density x y z */ l_mdpd = 12, /*!< atom-ID atom-type rho x y z */ l_molecular = 13, /*!< atom-ID molecule-ID atom-type x y z */ l_peri = 14, /*!< atom-ID atom-type volume density x y z */ l_smd = 15, /*!< atom-ID atom-type molecule volume mass kernel-radius contact-radius x0 y0 z0 x y z */ l_sph = 16, /*!< atom-ID atom-type rho esph cv x y z */ l_sphere = 17, /*!< atom-ID atom-type diameter density x y z */ l_spin = 18, /*!< atom-ID atom-type x y z spx spy spz sp */ l_tdpd = 19, /*!< atom-ID atom-type x y z cc1 cc2 … ccNspecies */ l_template = 20, /*!< atom-ID atom-type molecule-ID template-index template-atom x y z */ l_tri = 21, /*!< atom-ID molecule-ID atom-type triangleflag density x y z */ l_wavepacket = 22, /*!< atom-ID atom-type charge spin eradius etag cs_re cs_im x y z */ l_hybrid = 23 /*!< atom-ID atom-type x y z sub-style1 sub-style2 … */ }; extern gboolean in_bond (int at, int bd[2]); extern int get_num_vdw_max (); extern gchar * get_body_element_name (field_nth_body * body, int aid, int nbd); extern int get_num_struct_to_print (field_molecule * fmol, int sid); extern gboolean are_identical_prop (int ti, int ai, field_prop * pro_a, field_prop * pro_b); extern void merging_atoms (field_atom* to_merge, field_atom* to_remove, gboolean upda); extern char * vect_comp[3]; /*! \fn int get_mol_id_from_model_id (int at) \brief get field molecule id using atom id \param at the atom id */ int get_mol_id_from_model_id (int at) { int i; tmp_fmol = tmp_field -> first_molecule; field_atom* fat; while (tmp_fmol) { fat = tmp_fmol -> first_atom; while (fat) { for (i=0; i< fat -> num; i++) { if (at == fat -> list[i]) return tmp_fmol -> id; } fat = fat -> next; } tmp_fmol = tmp_fmol -> next; } return -1; } field_prop * print_prop[8]; /*! \fn int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, field_struct * dh) \brief print LAMMPS dihedral \param did the dihedral id to print \param di the type of structural property = 2 \param buf the GtkTextBuffer to print into \param dh the structural property to print */ int print_lammps_dihedral (int did, int di, GtkTextBuffer * buf, field_struct * dh) { int a, c, i, j, k, l, m, n, o, p; gchar * str; field_prop * tp_prop; gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fdt -> id && tmp_fbt -> id && tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } int * ids = allocint(4); for (i=0; i num; i++) { j = tmp_fat -> list[i]; a = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[a] = TRUE; for (k=0; k atoms[0][j].numv; k++) { l = tmp_proj -> atoms[0][j].vois[k]; if (tmp_proj -> atoms[0][l].faid == tmp_fbt -> id) { ids[1] = tmp_proj -> atoms[0][l].fid; for (m=0; m atoms[0][l].numv; m++) { n = tmp_proj -> atoms[0][l].vois[m]; if (n != j && tmp_proj -> atoms[0][n].faid == tmp_fct -> id) { ids[2] = tmp_proj -> atoms[0][n].fid; for (o=0; o atoms[0][n].numv; o++) { p = tmp_proj -> atoms[0][n].vois[o]; c = ids[3] = tmp_proj -> atoms[0][p].fid; if (p != j && p != l && tmp_proj -> atoms[0][p].faid == tmp_fdt -> id && (! same_atom || (same_atom && ! already_done[c]))) { tmp_fprop = get_active_prop_using_atoms (dh -> other, 4, ids); if (tmp_fprop == NULL) tmp_fprop = dh -> def; tp_prop = print_prop[2*di]; while (! are_identical_prop (2*di+1, 0, tmp_fprop, tp_prop) && tp_prop -> next) tp_prop = tp_prop -> next; if (tp_prop -> use) { str = g_strdup_printf ("%5d %5d %10d %10d %10d %10d\n", did+1, tp_prop -> pid, j+1, l+1, n+1, p+1); print_info (str, NULL, buf); g_free (str); did ++; } } } } } } } } g_free (ids); if (same_atom) g_free (already_done); return did; } /*! \fn int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, field_struct * an) \brief print LAMMPS angle \param aid the angle id to print \param ai the type of structural property = 1 \param buf the GtkTextBuffer to print into \param an the structural property to print */ int print_lammps_angle (int aid, int ai, GtkTextBuffer * buf, field_struct * an) { int i, j, k, l, m, o, p, q; gchar * str; field_prop * tp_prop; int * ids = allocint(3); gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fct -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; k = ids[0] = tmp_proj -> atoms[0][j].fid; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id) { ids[1] = tmp_proj -> atoms[0][m].fid; for (o=0; o atoms[0][m].numv; o++) { p = tmp_proj -> atoms[0][m].vois[o]; q = ids[2] = tmp_proj -> atoms[0][p].fid; if (p != j && tmp_proj -> atoms[0][p].faid == tmp_fct -> id && (! same_atom || (same_atom && ! already_done[q]))) { tmp_fprop = get_active_prop_using_atoms (an -> other, 3, ids); if (tmp_fprop == NULL) tmp_fprop = an -> def; tp_prop = print_prop[2*ai]; while (! are_identical_prop (2*ai+1, 0, tmp_fprop, tp_prop)) tp_prop = tp_prop -> next; if (tp_prop -> use) { str = g_strdup_printf ("%5d %5d %10d %10d %10d\n", aid+1, tp_prop -> pid, j+1, m+1, p+1); print_info (str, NULL, buf); g_free (str); aid ++; } } } } } } g_free (ids); if (same_atom) g_free (already_done); return aid; } /*! \fn int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, field_struct * bd) \brief print LAMMPS bond \param bid the bond id to print \param bi the type of structural property = 0 \param buf the GtkTextBuffer to print into \param bd the structural property to print */ int print_lammps_bond (int bid, int bi, GtkTextBuffer * buf, field_struct * bd) { int i, j, k, l, m, n; gchar * str; field_prop * tp_prop; int * ids = allocint(2); gboolean same_atom = FALSE; gboolean * already_done; if (tmp_fat -> id == tmp_fbt -> id) { same_atom = TRUE; already_done = allocbool (tmp_fmol -> mol -> natoms); } for (i=0; i num; i++) { j = tmp_fat -> list[i]; k = ids[0] = tmp_fat -> list_id[i]; if (same_atom) already_done[k] = TRUE; for (l=0; l atoms[0][j].numv; l++) { m = tmp_proj -> atoms[0][j].vois[l]; n = ids[1] = tmp_proj -> atoms[0][m].fid; if (tmp_proj -> atoms[0][m].faid == tmp_fbt -> id && (! same_atom || (same_atom && ! already_done[n]))) { tmp_fprop = get_active_prop_using_atoms (bd -> other, 2, ids); if (tmp_fprop == NULL) tmp_fprop = bd -> def; tp_prop = print_prop[2*bi]; while (! are_identical_prop (2*bi+1, 0, tmp_fprop, tp_prop)) tp_prop = tp_prop -> next; if (tmp_fprop -> use) { str = g_strdup_printf ("%5d %5d %10d %10d\n", bid+1, tp_prop -> pid, j+1, m+1); print_info (str, NULL, buf); g_free (str); bid ++; } } } } g_free (ids); if (same_atom) g_free (already_done); return bid; } /*! \fn int is_this_new_prop (int sid, field_prop * init, field_prop * to_check) \brief check if field property exists, if not add it \param sid the type of structural property \param init the initial field property pointer \param to_check the field property to check */ int is_this_new_prop (int sid, field_prop * init, field_prop * to_check) { field_prop * tmp_pr = init; gboolean add_prop = TRUE; while (tmp_pr) { if (are_identical_prop (sid+1, 0, to_check, tmp_pr)) { add_prop = FALSE; break; } else if (tmp_pr -> next) { tmp_pr = tmp_pr -> next; } else { break; } } if (add_prop) { tmp_pr -> next = duplicate_field_prop (to_check, sid); tmp_pr -> next -> pid = tmp_pr -> pid + 1; } return (add_prop) ? 1 : 0; } /*! \fn int get_type_struct_to_print (field_molecule * tfmol, int sid) \brief build the list of 'sid' type structural property(ies) to print \param tfmol the field molecule \param sid the type of structural */ int get_type_struct_to_print (field_molecule * tfmol, int sid) { int pid = 0; tmp_fstr = tfmol -> first_struct[sid]; while (tmp_fstr) { if (tmp_fstr -> def -> use) { if (! print_prop[sid]) { print_prop[sid] = duplicate_field_prop (tmp_fstr -> def, sid); pid = print_prop[sid] -> pid = 1; } else { pid += is_this_new_prop (sid, print_prop[sid], tmp_fstr -> def); } } if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (tmp_fprop -> use && ! are_identical_prop (sid+1, 0, tmp_fstr -> def, tmp_fprop)) { if (! print_prop[sid]) { print_prop[sid] = duplicate_field_prop (tmp_fprop, sid); pid = print_prop[sid] -> pid = 1; } else { pid += is_this_new_prop (sid, print_prop[sid], tmp_fprop); } } tmp_fprop = tmp_fprop -> next; } } tmp_fstr = tmp_fstr -> next; } return pid; } field_atom* all_at; /*! \fn gboolean are_different_field_atoms (field_atom* at, field_atom* bt) \brief check if two field atoms are different \param at 1st field atom \param bt 2nd field atom */ gboolean are_different_field_atoms (field_atom* at, field_atom* bt) { if (g_strcmp0(at -> name, bt -> name) != 0) return TRUE; if (at -> sp != bt -> sp) return TRUE; if (at -> mass != bt -> mass) return TRUE; if (at -> charge != bt -> charge) return TRUE; return FALSE; } /*! \fn int get_different_atoms () \brief create the list of all different field atoms */ int get_different_atoms () { int numat = 0; tmp_fmol = tmp_field -> first_molecule; all_at = NULL; gboolean append; while (tmp_fmol) { tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { if (! all_at) { all_at = duplicate_field_atom(tmp_fat); numat = all_at -> id = 1; } else { append = TRUE; tmp_fbt = all_at; while (tmp_fbt) { if (! are_different_field_atoms(tmp_fat, tmp_fbt)) { merging_atoms (tmp_fbt, tmp_fat, FALSE); append = FALSE; break; } tmp_fbt = tmp_fbt -> next; } if (append) { tmp_fbt = all_at; while (tmp_fbt -> next) tmp_fbt = tmp_fbt -> next; tmp_fbt -> next = duplicate_field_atom (tmp_fat); numat = tmp_fbt -> next -> id = tmp_fbt -> id + 1; } } tmp_fat = tmp_fat -> next; } tmp_fmol = tmp_fmol -> next; } return numat; } /*! \fn void print_lammps_mass (GtkTextBuffer * buf) \brief pritn LAMMPS atomic masses \param buf the GtkTextBuffer to print into */ void print_lammps_mass (GtkTextBuffer * buf) { gchar * str; print_info ("\nMasses\n\n", "bold", buf); tmp_fat = all_at; while (tmp_fat) { str = g_strdup_printf ("\t%d\t%f\n", tmp_fat -> id, tmp_fat -> mass); print_info (str, NULL, buf); g_free (str); tmp_fat = tmp_fat -> next; } } /*! \fn field_atom* get_print_atom (int aid) \brief get LAMMPS field atom \param aid the atom id to find */ field_atom* get_print_atom (int aid) { int i; tmp_fat = all_at; while (tmp_fat) { for (i=0; i num; i++) { if (tmp_fat -> list[i] == aid) return tmp_fat; } tmp_fat = tmp_fat -> next; } return NULL; } /*! \fn void print_lammps_atoms (GtkTextBuffer * buf) \brief print LAMMPS atoms \param buf the GtkTextBuffer to print into */ void print_lammps_atoms (GtkTextBuffer * buf) { int i; //, j, k; // * field_molecule * la_mol; field_atom* la_ats; gchar * pos, * atid, * atype; //* molid, * amass; gchar * str; print_info ("\nAtoms\n\n", "bold", buf); for (i=0; i natomes; i++) { atid = g_strdup_printf ("%10d", i+1); // * la_mol = get_active_field_molecule_from_model_id (tmp_proj, i); // molid = g_strdup_printf ("%5d", la_mol -> id+1); la_ats = get_print_atom (i); atype = g_strdup_printf ("%5d", la_ats -> id); pos = g_strdup_printf ("%f\t%f\t%f", tmp_proj -> atoms[0][i].x, tmp_proj -> atoms[0][i].y, tmp_proj -> atoms[0][i].z); // amass = g_strdup_printf ("%f", la_ats -> mass); /* switch () { case l_angle: // atom-ID molecule-ID atom-type x y z str = g_strdup_printf ("%s\t%s\t%s\t%s\n", atid, molid, atype, pos); print_info (str, NULL, buf); g_free (str); break; case l_atomic: */ // atom-ID atom-type x y z str = g_strdup_printf ("%s\t%s\t%s\n", atid, atype, pos); print_info (str, NULL, buf); g_free (str); /*break; case l_body: // atom-ID atom-type bodyflag mass x y z break; case l_bond: // atom-ID molecule-ID atom-type x y z str = g_strdup_printf ("%s\t%s\t%s\t%s\n", atid, molid, atype, pos); print_info (str, NULL, buf); g_free (str); break; case l_charge: // atom-type q x y z break; case l_dipole: // atom-ID atom-type q x y z mux muy muz break; case l_dpd: // atom-ID atom-type theta x y z break; case l_edpd: // atom-ID atom-type edpd_temp edpd_cv x y z break; case l_electron: // atom-ID atom-type q spin eradius x y z break; case l_ellipsoid: // atom-ID atom-type ellipsoidflag density x y z break; case l_full: // atom-ID molecule-ID atom-type q x y z break; case l_line: // atom-ID molecule-ID atom-type lineflag density x y z break; case l_mdpd: // atom-ID atom-type rho x y z break; case l_molecular: // atom-ID molecule-ID atom-type x y z break; case l_peri: // atom-ID atom-type volume density x y z break; case l_smd: // atom-ID atom-type molecule volume mass kernel-radius contact-radius x0 y0 z0 x y z break; case l_sph: // atom-ID atom-type rho esph cv x y z break; case l_sphere: // atom-ID atom-type diameter density x y z break; case l_spin: // atom-ID atom-type x y z spx spy spz sp break; case l_tdpd: // atom-ID atom-type x y z cc1 cc2 … ccNspecies break; case l_template: // atom-ID atom-type molecule-ID template-index template-atom x y z break; case l_tri: // atom-ID molecule-ID atom-type triangleflag density x y z break; case l_wavepacket: // atom-ID atom-type charge spin eradius etag cs_re cs_im x y z break; }*/ } } /*! \fn void print_lammps_atom_file (GtkTextBuffer * buf) \brief print LAMMPS atom file \param buf the GtkTextBuffer to print into */ void print_lammps_atom_file (GtkTextBuffer * buf) { int i, j; //, k, l; gchar * str; GtkTextIter bStart; GtkTextIter bEnd; gtk_text_buffer_get_start_iter (buf, & bStart); gtk_text_buffer_get_end_iter (buf, & bEnd); gtk_text_buffer_delete (buf, & bStart, & bEnd); //str = g_strdup_printf ("# This file was created using %s\n", PACKAGE); //print_info (str, NULL, buf); //g_free (str); print_info ("LAMMPS Atom File\n\n", NULL, buf); str = g_strdup_printf ("%12d", tmp_proj -> natomes); print_info (str, "bold_blue", buf); g_free (str); print_info (" atoms", "bold", buf); print_info ("\n", NULL, buf); gchar * str_title[4] = {" bond", " angle", " dihedral", " improper"}; for (i=0; i<4; i++) { tmp_fmol = tmp_field -> first_molecule; j = 0; while (tmp_fmol) { if (tmp_field -> afp[i*2+15]) { j += get_num_struct_to_print (tmp_fmol, i*2); } tmp_fmol = tmp_fmol -> next; } if (j > 0) { str = g_strdup_printf ("%12d", j); print_info (str, "bold_blue", buf); g_free (str); print_info (str_title[i], "bold", buf); print_info ("s\n", "bold", buf); } } print_info ("\n", NULL, buf); int numat = get_different_atoms (); str = g_strdup_printf ("%12d", numat); print_info (str, "bold_red", buf); g_free (str); print_info (" atom types", "bold", buf); print_info ("\n", NULL, buf); int ntypes[4]; for (i=0; i<4; i++) { ntypes[i] = 0; print_prop[2*i] = NULL; if (tmp_field -> afp[i*2+15]) { tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { j = get_type_struct_to_print (tmp_fmol, 2*i); ntypes[i] += j; tmp_fmol = tmp_fmol -> next; } if (ntypes[i] > 0) { str = g_strdup_printf ("%12d", ntypes[i]); print_info (str, "bold_red", buf); g_free (str); print_info (str_title[i], "bold", buf); print_info (" types\n", "bold", buf); } } } // Lattice print_info ("\n", NULL, buf); /*xlo xhi ylo yhi zlo zhi*/ if (tmp_proj -> cell.pbc) { j = 0; for (i=0; i<3; i++) { str = g_strdup_printf ("%f %f %slo %shi\n", 0.0, tmp_proj -> cell.box[0].param[0][i], vect_comp[i], vect_comp[i]); print_info (str, NULL, buf); g_free (str); if (tmp_proj -> cell.box[0].param[1][i] != 90.0) j=1; } if (j) { float lx, ly, lz; float xy, xz, yz; lx = tmp_proj -> cell.box[0].param[0][0]; xy = tmp_proj -> cell.box[0].param[0][1] * cos(tmp_proj -> cell.box[0].param[1][2]*pi/180.0); xz = tmp_proj -> cell.box[0].param[0][2] * cos(tmp_proj -> cell.box[0].param[1][1]*pi/180.0); ly = sqrt(tmp_proj -> cell.box[0].param[0][1]*tmp_proj -> cell.box[0].param[0][1] -xy*xy); yz = (tmp_proj -> cell.box[0].param[0][1]*(tmp_proj -> cell.box[0].param[0][2]*cos(tmp_proj -> cell.box[0].param[1][0]*pi/180.0)) - xy*xz) / ly; lz = sqrt(tmp_proj -> cell.box[0].param[0][2]*tmp_proj -> cell.box[0].param[0][2] - xz*xz - yz*yz); str = g_strdup_printf ("%f %f %f\n", lx, ly, lz); print_info (str, NULL, buf); g_free (str); } } else { // min(pos), max(pos) } // Masses print_lammps_mass (buf); gchar * coeffs[13]={"Pair", "Bond", "Angle", "Dihedral", "Improper", "BondBond", "BondAngle", "MiddleBondTorsion", "EndBondTorsion", "AngleTorsion", "AngleAngleTorsion", "BondBond13", "AngleAngle"}; // > 5 = CVFF force field ? /* if (tmp_field -> afp[23]) { j=0; tmp_fbody = tmp_field -> first_body[0]; while (tmp_fbody) { if (tmp_fbody -> use) j++; tmp_fbody = tmp_fbody -> next; } if (j > 0) { k = get_num_vdw_max (); l = k * (k+1) / 2; str = g_strdup_printf ("%s Coeffs\n\n", coeffs[0]); print_info(str, "bold", buf); g_free (str); tmp_fbody = tmp_field -> first_body[0]; while (tmp_fbody) { if (tmp_fbody -> use) { print_lam_body (buf, l, tmp_fbody); } tmp_fbody = tmp_fbody -> next; } } } */ for (i=0; i<4; i++) { if (ntypes[i]) { str = g_strdup_printf ("\n%s Coeffs\n\n", coeffs[i+1]); print_info (str, "bold", buf); g_free (str); tmp_fprop = print_prop[2*i]; while (tmp_fprop) { str = g_strdup_printf (" %5d", tmp_fprop -> pid); print_info (str, NULL, buf); g_free (str); for (j=0; j key]; j++) { str = g_strdup_printf (" %15.10f", tmp_fprop -> val[j]); print_info (str, NULL, buf); g_free (str); } print_info ("\n", NULL, buf); tmp_fprop = tmp_fprop -> next; } } } // Atoms print_lammps_atoms (buf); for (i=0; i<4; i++) { j = 0; if (ntypes[i]) { str = g_strdup_printf ("\n%ss\n\n", coeffs[i+1]); print_info(str, "bold", buf); g_free (str); tmp_fmol = tmp_field -> first_molecule; while (tmp_fmol) { if (get_num_struct_to_print (tmp_fmol, i*2)) { tmp_fstr = tmp_fmol -> first_struct[i*2]; while (tmp_fstr) { tmp_fat = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[0]); tmp_fbt = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[1]); if (i > 0) tmp_fct = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[2]); if (i > 1) tmp_fdt = get_active_atom (tmp_fmol -> id, tmp_fstr -> aid[3]); if (i == 0) j = print_lammps_bond (j, i, buf, tmp_fstr); if (i == 1) j = print_lammps_angle (j, i, buf, tmp_fstr); if (i == 2) j = print_lammps_dihedral (j, i, buf, tmp_fstr); // if (i == 3) j = print_lammps_improper (j, i, buf, tmp_fstr); tmp_fstr = tmp_fstr -> next; } } tmp_fmol = tmp_fmol -> next; } } } } Atomes-GNU-1.1.14/src/curve/000077500000000000000000000000001457665371200154105ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/curve/cedit.c000066400000000000000000000331641457665371200166530ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cedit.c * @short Initialization of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'cedit.c' * * Contains: * - The initialization of the curve layout edition dialog * * List of functions: void prepbox (int k, int l, int m); void set_set (int a, int b, int c); void set_visible_curve_data (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void edit_curve (gpointer data); static void fill_proj_model (GtkTreeStore * store); G_MODULE_EXPORT void run_curve_edit (GtkDialog * dial, gint response_id, gpointer data); GtkWidget * create_projects_tree (); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" extern G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void update_axis (GtkComboBox * widg, gpointer data); extern void action_to_plot (gpointer data); extern gboolean was_not_added (ExtraSets * sets, int a, int b, int c); extern G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data); extern GtkWidget * create_org_list (gpointer data); extern GtkWidget * create_tab_1 (gpointer data); extern GtkWidget * create_tab_2 (gpointer data); extern GtkWidget * create_tab_3 (gpointer data); extern GtkWidget * create_tab_4 (gpointer data); extern GtkWidget * data_aspect; extern GtkWidget * Glyph_box; extern GtkWidget * Hist_box; extern GtkWidget * orgtree; extern GtkWidget * datascroll; extern char * ctext[2]; GtkWidget * setcolorbox = NULL; GtkWidget * thesetbox = NULL; tint prc; GtkTreePath ** ppath = NULL; GtkTreePath ** cpath = NULL; GtkWidget * projtree = NULL; GtkWidget * xyp[2]; char * lapos[2]={"x: ", "y: "}; /*! \fn void prepbox (int k, int l, int m) \brief prepare the curve selection combo box \param k project id \param l calculation id \param m curve id */ void prepbox (int k, int l, int m) { int i, n, o, p; gchar * str; project * extra_proj; project * this_proj = get_project_by_id(k); str = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_proj -> curves[l][m] -> name); combo_text_append (setcolorbox, str); g_free (str); CurveExtra * ctmp = this_proj -> curves[l][m] -> extrac -> first; for ( i=0 ; i < this_proj -> curves[l][m] -> extrac -> extras ; i++ ) { n = ctmp -> id.a; o = ctmp -> id.b; p = ctmp -> id.c; extra_proj = get_project_by_id(n); str = g_strdup_printf ("%s - %s", prepare_for_title(extra_proj -> name), extra_proj -> curves[o][p] -> name); combo_text_append (setcolorbox, str); g_free (str); if (ctmp -> next != NULL) ctmp = ctmp -> next; } if (this_proj -> curves[l][m] -> extrac -> extras > 0) { widget_set_sensitive (setcolorbox, 1); } else { widget_set_sensitive (setcolorbox, 0); } gtk_widget_set_size_request (setcolorbox, -1, 40); gtk_combo_box_set_active (GTK_COMBO_BOX (setcolorbox), 0); g_signal_connect (G_OBJECT(setcolorbox), "changed", G_CALLBACK(choose_set), NULL); } /*! \fn void set_set (int a, int b, int c) \brief addjust widgets to handle the new curve \param a project id \param b calculation id \param c curve id */ void set_set (int a, int b, int c) { setcolorbox = destroy_this_widget (setcolorbox); setcolorbox = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, thesetbox, setcolorbox, FALSE, FALSE, 0); gtk_widget_show(setcolorbox); action_to_plot (& get_project_by_id(a) -> idcc[b][c]); prepbox (activeg, activer, activec); choose_set (GTK_COMBO_BOX(setcolorbox), NULL); orgtree = destroy_this_widget (orgtree); add_container_child (CONTAINER_SCR, datascroll, create_org_list(& get_project_by_id(activeg) -> idcc[activer][activec])); gtk_widget_show (orgtree); widget_set_sensitive (orgtree, get_project_by_id(activeg) -> curves[activer][activec] -> extrac -> extras); } /*! \fn static void fill_proj_model (GtkTreeStore * store) \brief fill project(s) / curves tree store \param store the GtkTreeStore to fill */ static void fill_proj_model (GtkTreeStore * store) { GtkTreeIter projlevel; GtkTreeIter calclevel; GtkTreeIter curvelevel; project * this_proj; int i, j, k; int start, end, step; gboolean append; /* Append a top level row and leave it empty */ if (ppath != NULL) g_free (ppath); if (cpath != NULL) g_free (cpath); ppath = g_malloc0 (nprojects*sizeof*ppath); cpath = g_malloc0 (nprojects*sizeof*cpath); for (i=0; i name), 2, TRUE, 3, -1, -1); ppath[i] = gtk_tree_model_get_path ((GtkTreeModel *)store, & projlevel); if (activer == 0 || activer == 3) { start = 0; end = 4; step = 3; } else if (activer == 1 || activer == 2) { start = 1; end = 3; step = 1; } else { start = activer; end = start + 1; step = 1; } for (j=start; j initok[j]) { gtk_tree_store_append (store, & calclevel, & projlevel); gtk_tree_store_set (store, & calclevel, 0, 0, 1, graph_name[j], 2, TRUE, 3, -1, -1); if (j == start) { cpath[i] = gtk_tree_model_get_path ((GtkTreeModel *)store, & calclevel); } for (k = 0 ; k < this_proj -> numc[j] ; k++) { append = FALSE; if (i != activeg && this_proj -> curves[j][k] -> ndata != 0) { append = TRUE; } else if (((i != activeg) || (j != activer || k != activec)) && this_proj -> curves[j][k] -> ndata != 0) { append = TRUE; } if (append) { gtk_tree_store_append (store, & curvelevel, & calclevel); gtk_tree_store_set (store, & curvelevel, 0, 1, 1, this_proj -> curves[j][k] -> name, 2, ! was_not_added (active_project -> curves[activer][activec] -> extrac, i, j, k), 3, i, 4, j, 5, k, -1); } } } } } } GtkTreeStore * projmodel; /*! \fn void toggle_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief show / hide curve cellrenderer toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void toggle_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k; gboolean status; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(projmodel), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(projmodel), & iter, 2, & status, 3, & i, 4, & j, 5, & k, -1); gtk_tree_store_set (projmodel, & iter, 2, ! status, -1); set_set (i, j, k); } /*! \fn void set_visible_curve_data (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer \param col the tree view column \param renderer the cell renderer \param mod the tree model \param iter the tree iter \param data the associated data pointer */ void set_visible_curve_data (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int m; gtk_tree_model_get (mod, iter, 0, & m, -1); gtk_cell_renderer_set_visible (renderer, m); } /*! \fn GtkWidget * create_projects_tree () \brief curve edition create the project(s) / curves tree model */ GtkWidget * create_projects_tree () { int i; GtkTreeViewColumn * projcol[6]; GtkCellRenderer * projcell[6]; gchar * col_title[6] = {" ", "Data sets", "Select", " ", " ", " "}; gchar * ctype[6]={"text", "text", "active", "text", "text", "text"}; GType col_type[6] = {G_TYPE_INT, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT}; projmodel = gtk_tree_store_newv (6, col_type); projtree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(projmodel)); for (i=0; i<6; i++) { if (i == 2) { projcell[i] = gtk_cell_renderer_toggle_new (); projcol[i] = gtk_tree_view_column_new_with_attributes(col_title[i], projcell[i], ctype[i], i, NULL); g_signal_connect (G_OBJECT(projcell[i]), "toggled", G_CALLBACK(toggle_curve), NULL); gtk_tree_view_column_set_cell_data_func (projcol[i], projcell[i], set_visible_curve_data, NULL, NULL); } else { projcell[i] = gtk_cell_renderer_text_new(); projcol[i] = gtk_tree_view_column_new_with_attributes(col_title[i], projcell[i], ctype[i], i, NULL); } gtk_tree_view_append_column(GTK_TREE_VIEW(projtree), projcol[i]); if (i == 0 || i > 2) gtk_tree_view_column_set_visible (projcol[i], FALSE); } fill_proj_model (projmodel); g_object_unref (projmodel); gtk_tree_view_expand_all (GTK_TREE_VIEW(projtree)); return projtree; } /*! \fn G_MODULE_EXPORT void run_curve_edit (GtkDialog * dial, gint response_id, gpointer data) \brief curve edition dialog callback \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_curve_edit (GtkDialog * dial, gint response_id, gpointer data) { destroy_this_dialog (dial); int i; for (i=0 ; i<2; i++) xyp[i] = NULL; axischoice = NULL; } /*! \fn void edit_curve (gpointer data) \brief create the curve edition dialog \param data the associated data pointer */ void edit_curve (gpointer data) { GtkWidget * edit_box; GtkWidget * ebox; GtkWidget * enoote; GtkWidget * dbox; GtkWidget * scrollsets; // Axis data tint * cd = (tint *) data; int a = activeg = cd -> a; int b = activer = cd -> b; int c = activec = cd -> c; #ifdef DEBUG g_debug ("CEDIT: a= %d, b= %d, c= %d", a, b, c); #endif project * this_proj = get_project_by_id(a); ctext[0] = "x ∈ [0.0, 1.0]"; ctext[1] = "y ∈ [0.0, 1.0]"; edit_box = dialogmodal ("Edit curve", GTK_WINDOW(this_proj -> curves[b][c] -> window)); gtk_window_set_resizable (GTK_WINDOW (edit_box), FALSE); #ifndef GTK4 gtk_window_set_icon (GTK_WINDOW (edit_box), THETD); #endif ebox = dialog_get_content_area (edit_box); enoote = gtk_notebook_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, ebox, enoote, FALSE, FALSE, 0); // The first tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_1 (data), gtk_label_new ("Graph")); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 0), gtk_label_new ("Graph")); // The second tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_2 (data), gtk_label_new ("Data")); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 1), gtk_label_new ("Data")); // The third tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_3 (data), gtk_label_new ("Legend")); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 2), gtk_label_new ("Legend")); // The fourth tab of the notebook gtk_notebook_append_page (GTK_NOTEBOOK(enoote), create_tab_4 (data), gtk_label_new ("Axis")); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 3), gtk_label_new ("Axis")); // The fifth tab of the notebook dbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, dbox, markup_label("Add data set(s) to the active window", -1, 30, 0.5, 0.5), FALSE, FALSE, 0); scrollsets = create_scroll (dbox, 250, 525, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrollsets, create_projects_tree ()); gtk_notebook_append_page (GTK_NOTEBOOK(enoote), dbox, gtk_label_new ("Add data set")); // gtk_notebook_set_tab_label (GTK_NOTEBOOK (enoote), gtk_notebook_get_nth_page (GTK_NOTEBOOK (enoote), 4), gtk_label_new ("Add data set")); add_gtk_close_event (edit_box, G_CALLBACK(destroy_this_window), NULL); if (gtk_combo_box_get_active (GTK_COMBO_BOX(data_aspect))) { gtk_widget_hide (Glyph_box); } else { gtk_widget_hide (Hist_box); } g_signal_connect (G_OBJECT(edit_box), "response", G_CALLBACK(run_curve_edit), NULL); show_the_widgets (edit_box); set_data_aspect (GTK_COMBO_BOX(data_aspect), data); update_axis (GTK_COMBO_BOX(axischoice), data); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } Atomes-GNU-1.1.14/src/curve/cedit.h000066400000000000000000000022771457665371200166610ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cedit.h * @short Variable declarations for the curve layout edition window * @author Sébastien Le Roux */ /* * This header file: 'cedit.h' * * Contains: - Variable declarations for the curve layout edition window */ #ifndef CEDIT_H_ #define CEDIT_H_ #include "global.h" extern GtkWidget * thesetbox; extern GtkWidget * setcolorbox; extern char * lapos[2]; void prepbox (int a, int b, int c); void edit_curve (gpointer cdata); #endif Atomes-GNU-1.1.14/src/curve/curve.c000066400000000000000000000324221457665371200167030ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file curve.c * @short Functions to manage curves * @author Sébastien Le Roux */ /* * This file: 'curve.c' * * Contains: * - Functions to manage curves * * List of functions: double scale (double axe); void prep_plot (project * this_proj, int rid, int cid); void clean_this_curve_window (int cid, int rid); void set_curve_data_zero (int rid, int cid, int interv); void save_curve_ (int * interv, double datacurve[* interv], int * cid, int * rid); void hide_curves (project * this_proj, int c); void remove_this_curve_from_extras (int a, int b, int c); void erase_curves (project * this_proj, int c); void update_curves (); void update_curve (gpointer data); curve_dash * selectdash (int iddash); */ #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "cedit.h" #include "curve.h" extern void adjust_tool_model (int calc, int curve, gchar * string_path); gint32 etime; int resol[2]; double XDRAW, YDRAW; double DXDRAW, DYDRAW; double xmax, ymax; double x_min, x_max; double y_max, y_min; double ax, ay; double cxy[2]; double mticks; int nticks; int xlog, ylog; int dxlog, dylog; char * sca; int originp; PangoLayout * layout; gboolean dogrid; int x_shift, y_shift; int amint, amajt; int tickpos, labpos; // Marge sur X et Y dans les graphs int xmarge = MARGX; int ymarge = MARGY; char * curve_image_file = NULL; // Number of dash formats int ndash = NDASHS; int nglyph = NGLYPHS; const double dashed0[] = {0.0, 0.0}; int len0 = sizeof(dashed0) / sizeof(dashed0[0]); const double dashed1[] = {1.0, 0.0}; int len1 = sizeof(dashed1) / sizeof(dashed1[0]); const double dashed2[] = {5.0, 2.5}; int len2 = sizeof(dashed2) / sizeof(dashed2[0]); const double dashed3[] = {4.0, 6.0}; int len3 = sizeof(dashed3) / sizeof(dashed3[0]); const double dashed4[] = {2.0, 5.0}; int len4 = sizeof(dashed4) / sizeof(dashed4[0]); const double dashed5[] = {10.0, 5.0}; int len5 = sizeof(dashed5) / sizeof(dashed5[0]);; const double dashed6[] = {10.0, 10.0}; int len6 = sizeof(dashed6) / sizeof(dashed6[0]);; const double dashed7[] = {4.0, 1.0, 4.0}; int len7 = sizeof(dashed7) / sizeof(dashed7[0]); const double dashed8[] = {10.0, 2.5, 10.0}; int len8 = sizeof(dashed8) / sizeof(dashed8[0]);; const double dashed9[] = {10.0, 5.0, 2.0}; int len9 = sizeof(dashed9) / sizeof(dashed9[0]);; const double pdashed[] = {1.0}; int lenp = 1; /*! \fn curve_dash * selectdash (int iddash) \brief setup dash pointer \param iddash the target dash */ curve_dash * selectdash (int iddash) { curve_dash * dashtab; dashtab = g_malloc0 (sizeof*dashtab); if (iddash == 0) { dashtab -> a = dashed0; dashtab -> b = len0; } if (iddash == 1) { dashtab -> a = dashed1; dashtab -> b = len1; } if (iddash == 2) { dashtab -> a = dashed2; dashtab -> b = len2; } if (iddash == 3) { dashtab -> a = dashed3; dashtab -> b = len3; } if (iddash == 4) { dashtab -> a = dashed4; dashtab -> b = len4; } if (iddash == 5) { dashtab -> a = dashed5; dashtab -> b = len5; } if (iddash == 6) { dashtab -> a = dashed6; dashtab -> b = len6; } if (iddash == 7) { dashtab -> a = dashed7; dashtab -> b = len7; } if (iddash == 8) { dashtab -> a = dashed8; dashtab -> b = len8; } if (iddash == 9) { dashtab -> a = dashed9; dashtab -> b = len9; } if (iddash == 10) { dashtab -> a = pdashed; dashtab -> b = lenp; } return (dashtab); } /*! \fn double scale (double axe) \brief find appropriate major tick spacing based on axis length \param axe axis length */ double scale (double axe) { double xs; double axis; axis = fabs(axe); if (axis < 0.0005) { xs=0.00005; } else if (axis < 0.0025) { xs=0.00025; } else if (axis < 0.005) { xs=0.0005; } else if (axis < 0.025) { xs=0.0025; } else if (axis < 0.05) { xs=0.005; } else if (axis < 0.25) { xs=0.025; } else if (axis < 0.5 ) { xs=0.05; } else if (axis < 1.5 ) { xs=0.1; } else if (axis < 2.5) { xs=0.25; } else if (axis < 5) { xs=0.5; } else if (axis < 15) { xs = 1.0; } else if (axis < 30) { xs = 2.0; } else if (axis < 50) { xs = 5.0; } else if (axis < 100) { xs = 10.0; } else if (axis < 250) { xs = 25.0; } else if (axis < 500) { xs = 50.0; } else if (axis < 1000) { xs = 100.0; } else if (axis < 5000) { xs = 500.0; } else if (axis < 10000) { xs = 1000.0; } else if (axis < 50000) { xs = 5000.0; } else if (axis < 100000) { xs = 10000.0; } else if (axis < 500000) { xs = 50000.0; } else if (axis < 1000000) { xs = 100000.0; } return (xs); } /*! \fn void prep_plot (project * this_proj, int rid, int cid) \brief prepare curve plot (setting up variables for the plot) \param this_proj the target project \param rid the calculation id \param cid the curve id */ void prep_plot (project * this_proj, int rid, int cid) { x_min = resol[0] * this_proj -> curves[rid][cid] -> frame_pos[0][0]; x_max = resol[0] * this_proj -> curves[rid][cid] -> frame_pos[0][1]; y_max = resol[1] * (1.0 - this_proj -> curves[rid][cid] -> frame_pos[1][1]); y_max = resol[1] - y_max; y_min = resol[1] * (1.0 - this_proj -> curves[rid][cid] -> frame_pos[1][0]); y_min = resol[1] - y_min; // The x size of the graph in pixels XDRAW = x_max - x_min; // The y size of the graph in pixels YDRAW = y_max - y_min; } /*! \fn void clean_this_curve_window (int cid, int rid) \brief free curve window data \param cid the curve id \param rid the calculation id */ void clean_this_curve_window (int cid, int rid) { /*if (active_project -> curves[rid][cid] -> window != NULL) { active_project -> curves[rid][cid] -> window = destroy_this_widget (active_project -> curves[rid][cid] -> window); active_project -> curves[rid][cid] -> plot = destroy_this_widget (active_project -> curves[rid][cid] -> plot); }*/ if (active_project -> curves[rid][cid] -> ndata > 0) { int i; for (i=0; i<2; i++) { if (active_project -> curves[rid][cid] -> data[i] != NULL) { g_free (active_project -> curves[rid][cid] -> data[i]); active_project -> curves[rid][cid] -> data[i] = NULL; } } } active_project -> curves[rid][cid] -> ndata = 0; } /*! \fn void set_curve_data_zero (int rid, int cid, int interv) \brief initialize curve data \param rid the calculation id \param cid the curve id \param interv the number of data point(s) */ void set_curve_data_zero (int rid, int cid, int interv) { active_project -> curves[rid][cid] -> ndata = interv; active_project -> curves[rid][cid] -> data[0] = allocdouble (interv); int i; for (i=0; i curves[rid][cid] -> data[0][i] = active_project -> min[rid] + i*active_project -> delta[rid]; } } /*! \fn void save_curve_ (int * interv, double datacurve[*interv], int * cid, int * rid) \brief save calculation results from Fortran90 \param interv number of data point(s) \param datacurve calculation result(s) to save \param cid curve id \param rid calculation id */ void save_curve_ (int * interv, double datacurve[* interv], int * cid, int * rid) { int i, j; #ifdef DEBUG /*g_debug ("SAVE_CURVE:: rid= %d, cid= %d, name= %s, interv= %d", * rid, * cid, active_project -> curves[* rid][* cid] -> name, * interv); for ( i=0 ; i < *interv ; i++ ) { g_debug ("SAVECURVE:: i= %d, data[i]= %f", i, datacurve[i]); }*/ #endif // DEBUG clean_this_curve_window (* cid, * rid); if (* interv != 0) { int inter = (* rid == SP) ? * interv/2 + 1: * interv; if (* rid == SK) { active_project -> curves[* rid][* cid] -> ndata = inter; active_project -> curves[* rid][* cid] -> data[0] = duplicate_double (inter, xsk); } else { set_curve_data_zero (* rid, * cid, inter); } if (* rid != SP) { active_project -> curves[* rid][* cid] -> data[1] = duplicate_double (inter, datacurve); } else { active_project -> curves[* rid][* cid] -> data[1] = allocdouble (inter); for (i=0; i curves[* rid][* cid] -> data[1][i] = datacurve[i*2]; } } for (i=0; i<2; i++) { j = active_project -> curves[* rid][* cid] -> extrac -> extras; active_project -> curves[* rid][* cid] -> extrac -> extras = 0; autoscale_axis (active_project, * rid, * cid, i); active_project -> curves[* rid][* cid] -> extrac -> extras = j; active_project -> curves[* rid][* cid] -> majt[i] = scale (active_project -> curves[* rid][* cid] -> axmax[i] - active_project -> curves[* rid][* cid] -> axmin[i]); active_project -> curves[* rid][* cid] -> mint[i] = 2; } } else { active_project -> curves[* rid][* cid] -> ndata = 0; } } /*! \fn void hide_curves (project * this_proj, int c) \brief for project hide all curves for a calculation \param this_proj the target project \param c the target calculation */ void hide_curves (project * this_proj, int c) { int i; for ( i = 0 ; i < this_proj -> numc[c] ; i ++ ) { if (this_proj -> curves[c][i]) { if (this_proj -> curves[c][i] -> window) { if (is_the_widget_visible(this_proj -> curves[c][i] -> window)) { gtk_widget_hide(this_proj -> curves[c][i] -> window); adjust_tool_model (c, i, this_proj -> curves[c][i] -> path); g_free (this_proj -> curves[c][i] -> path); this_proj -> curves[c][i] -> path = NULL; } } } } } /*! \fn void remove_this_curve_from_extras (int a, int b, int c) \brief free all target (a,b,c) curve from other curve(s) extra(s) \param a the target project \param b the target calculation \param c the target curve */ void remove_this_curve_from_extras (int a, int b, int c) { int i, j, k, l; project * this_proj; CurveExtra * ctmp; for (i=0; i idcc[j] != NULL) { for (k=0; k numc[j]; k++) { if (this_proj -> curves[j][k] -> extrac > 0) { ctmp = this_proj -> curves[j][k] -> extrac -> first; for (l=0; l curves[j][k] -> extrac -> extras; l++) { if (ctmp -> id.a == a && ctmp -> id.b == b && ctmp -> id.c == c) { remove_extra (this_proj -> curves[j][k] -> extrac, ctmp); break; } if (ctmp -> next != NULL) ctmp = ctmp -> next; } } } } } } } } /*! \fn void erase_curves (project * this_proj, int c) \brief free all curve(s) data \param this_proj the target project \param c the target calculation */ void erase_curves (project * this_proj, int c) { int i, j; for (i=0 ; i numc[c]; i ++) { if (this_proj -> curves[c][i]) { remove_this_curve_from_extras (this_proj -> id, c, i); for (j=0; j<2; j++) { if (this_proj -> curves[c][i] -> data[j]) { free (this_proj -> curves[c][i] -> data[j]); this_proj -> curves[c][i] -> data[j] = NULL; } } if (this_proj -> curves[c][i] -> name) { g_free (this_proj -> curves[c][i] -> name); this_proj -> curves[c][i] -> name = NULL; } g_free (this_proj -> curves[c][i]); this_proj -> curves[c][i] = NULL; } } } /*! \fn void update_curves () \brief update all curve(s) rendering for all project(s) in the workspace */ void update_curves () { int i, j, k; project * this_proj; for (i=0; i numc[j]; k++) { if (this_proj -> curves[j][k] -> plot != NULL) { if (is_the_widget_visible(this_proj -> curves[j][k] -> plot)) { gtk_widget_queue_draw (this_proj -> curves[j][k] -> plot); } } } } } } /*! \fn void update_curve (gpointer data) \brief update curve rendering \param data the associated data pointer */ void update_curve (gpointer data) { tint * cd = (tint *)data; gtk_widget_queue_draw (get_project_by_id(cd -> a) -> curves[cd -> b][cd -> c] -> plot); } Atomes-GNU-1.1.14/src/curve/curve.h000066400000000000000000000135121457665371200167070ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file curve.h * @short Variable declarations for the curve widget \n Functions for interactions with the curve widget * @author Sébastien Le Roux */ /* * This header file: 'curve.h' * * Contains: - Variable declarations for the curve widget - Functions for interactions with the curve widget */ #ifndef CURVE_H_ #define CURVE_H_ #include "global.h" // Grid lines width in pixels #define GRIDSIZE 0.1 // Default position of the legend on the curve #define LEGX 0.65 #define LEGY 0.15 // Default color of the data from 0 to 65535 #define RED 1.0 #define GREEN 0.0 #define BLUE 0.0 // Default linewidth of the data line #define DTHICK 1.0 // Number of dash types #define NDASHS 11 // Number of glyph types #define NGLYPHS 37 // The marges between the windows border and the axes #define MARGX 100 #define MARGY 70 extern GtkWidget * axischoice; extern GtkWidget * vmin, * vmax; extern GtkWidget * majt; extern GtkWidget * nmi[2]; extern GtkWidget * xyp[2]; extern int resol[2]; extern int originp; extern int ndash; extern int nglyph; extern double back_alpha; extern int activeg; extern int activec; extern int activer; typedef struct curve_dash curve_dash; struct curve_dash { const double * a; int b; }; extern gint32 etime; extern double XDRAW, YDRAW; extern double DXDRAW, DYDRAW; extern double xmax, ymax; extern double x_min, x_max; extern double y_max, y_min; extern double ax, ay; extern double cxy[2]; extern double mticks; extern int nticks; extern int xlog, ylog; extern int dxlog, dylog; extern char * sca; extern PangoLayout * layout; extern gboolean dogrid; extern int x_shift, y_shift; extern int amint, amajt; extern int tickpos, labpos; // Marge sur X et Y dans les graphs extern int xmarge; extern int ymarge; extern char * curve_image_file; extern int get_curve_shift (project * this_proj, int b, int c); // Number of dash formats extern int ndash; extern int nglyph; extern const double dashed1[]; extern int len1; extern const double pdashed[]; extern int lenp; extern curve_dash * selectdash (int iddash); extern double scale (double axe); extern void prep_plot (project * this_proj, int rid, int cid); extern void prep_axis_data (project * this_proj, int rid, int cid, int ax); extern void hide_curves (project * this_proj, int c); extern void erase_curves (project * this_proj, int c); extern void update_curves (); extern void update_curve (gpointer curve); #ifdef GTK3 extern gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve); #else extern void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve); #endif extern void hide_curve (gpointer data); #ifdef GTK3 extern G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data); #else extern G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data); #endif extern void clean_curves_data (int calc, int start, int end); extern void initcurve (project * pid, int rid, int cid); extern void addcurwidgets (int pid, int rid, int st); extern void allocextra (int a, int b, int c); extern void label (cairo_t * cr, double val, int axe, int p, project * this_proj); extern void show_frame (cairo_t * cd, int tf, int da, int res[2], double ti, double x[2], double y[2], ColRGBA dcol); extern void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol); extern void draw_frame (cairo_t * cr, project * this_proj, int rid, int cid); extern void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size); extern const gchar * default_title (int ax, int c); extern void show_title (cairo_t * cr, project * this_proj, int rid, int cid); extern void autoscale_axis (project * this_proj, int rid, int cid, int aid); extern void setup_xaxis_linear (cairo_t * cr, project * this_proj, int rid, int cid); extern void setup_xaxis_log (cairo_t * cr, project * this_proj, int rid, int cid, gboolean draw_it); extern void setup_yaxis_linear (cairo_t * cr, project * this_proj, int rid, int cid); extern void setup_yaxis_log (cairo_t * cr, project * this_proj, int rid, int cid, gboolean draw_it); extern void write_curve (gpointer idata); extern void save_image (gpointer cdata); extern void remove_extra (ExtraSets * sets, CurveExtra * ctmp); extern void curve_window_add_menu_bar (tint * data); extern GtkWidget * curve_popup_menu (gpointer data); extern void show_curve_popup_menu (GdkEvent * event, gpointer data); void draw_curve (cairo_t * cr, int cid, int rid, project * this_proj, int points, ColRGBA withcolor, int xscale, int yscale, int asp, int vdash, double thick, int glyp, double gize, int freq, double hwidth, double hopac, int hpos, int extra, int pid); extern void show_legend (cairo_t * cr, project * this_proj, int rid, int cid); #endif Atomes-GNU-1.1.14/src/curve/cwidget.c000066400000000000000000000217651457665371200172150ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cwidget.c * @short Initialization of the curve widget * @author Sébastien Le Roux */ /* * This file: 'cwidget.c' * * Contains: * - The initialization of the curve widget * * List of functions: void curve_default_scale (int rid, int cid); void initcurve (project * pid, int rid, int cid); void addcurwidgets (int pid, int rid, int str); DataLayout * curve_default_layout (project * pid, int rid, int cid); */ #include #include #include "global.h" #include "interface.h" #include "curve.h" /*! \fn DataLayout * curve_default_layout (project * pid, int rid, int cid) \brief prepare the default layout for a curve \param pid the project id \param rid the analysis id \param cid the curve id */ DataLayout * curve_default_layout (project * pid, int rid, int cid) { DataLayout * layout = g_malloc0 (sizeof*layout); layout -> datacolor.red = RED; layout -> datacolor.green = GREEN; layout -> datacolor.blue = BLUE; layout -> datacolor.alpha = 1.0; layout -> thickness = DTHICK; layout -> hwidth = (rid == SP) ? 1.0 : pid -> delta[rid]; layout -> hopac = 0.25; layout -> hpos = 1; layout -> dash = 1; layout -> gfreq = 1; if (rid < RI) { layout -> aspect = 0; layout -> glyph = 0; layout -> gsize = 10; } else if (rid == RI) { if ( cid%4 == 0 || cid%4 == 1 ) { layout -> aspect = 1; layout -> glyph = 0; layout -> gsize = 10; } else { layout -> aspect = 0; layout -> glyph = 13; layout -> gsize = 5.0; } } else if (rid < MS) { layout -> aspect = 1; layout -> glyph = 0; layout -> gsize = 10; } else { layout -> aspect = 0; layout -> glyph = 0; layout -> gsize = 10; } return layout; } /*! \fn void curve_default_scale (int rid, int cid) \brief pick appropriate scale based on the type of analysis \param rid analysis id \param cid curve id */ void curve_default_scale (int rid, int cid) { if (rid < RI || rid == MS) { active_project -> curves[rid][cid] -> cmin[0] = active_project -> min[rid]; active_project -> curves[rid][cid] -> cmax[0] = active_project -> max[rid]; } else { active_project -> curves[rid][cid] -> cmin[0] = 1.0; active_project -> curves[rid][cid] -> cmax[0] = active_project -> curves[rid][cid] -> ndata; } if (rid < MS) { active_project -> curves[rid][cid] -> scale[0] = 0; active_project -> curves[rid][cid] -> scale[1] = 0; } else { if (cid < active_project -> numc[MS] - 6) { active_project -> curves[rid][cid] -> scale[0] = 1; active_project -> curves[rid][cid] -> scale[1] = 1; } else { active_project -> curves[rid][cid] -> scale[0] = 0; active_project -> curves[rid][cid] -> scale[1] = 0; } } } /*! \fn void initcurve (project * pid, int rid, int cid) \brief initialize curve widget \param pid the project id \param rid the analysis id \param cid the curve id */ void initcurve (project * pid, int rid, int cid) { int k; pid -> curves[rid][cid] -> window = NULL; pid -> curves[rid][cid] -> plot = NULL; pid -> curves[rid][cid] -> wsize[0] = 800; pid -> curves[rid][cid] -> wsize[1] = 600; pid -> curves[rid][cid] -> show_title = FALSE; pid -> curves[rid][cid] -> default_title = TRUE; pid -> curves[rid][cid] -> title_font = g_strdup_printf ("Sans Bold 12"); pid -> curves[rid][cid] -> title_pos[0] = 0.4; pid -> curves[rid][cid] -> title_pos[1] = 0.05; pid -> curves[rid][cid] -> title_color.red = 0.0; pid -> curves[rid][cid] -> title_color.blue = 0.0; pid -> curves[rid][cid] -> title_color.green = 0.0; pid -> curves[rid][cid] -> title_color.alpha = 1.0; pid -> curves[rid][cid] -> format = 0; for (k=0 ; k<2; k++) { if (pid -> curves[rid][cid] -> data[k] != NULL) { g_free (pid -> curves[rid][cid] -> data[k]); pid -> curves[rid][cid] -> data[k] = NULL; } pid -> curves[rid][cid] -> autoscale[k] = TRUE; pid -> curves[rid][cid] -> show_grid[k] = FALSE; pid -> curves[rid][cid] -> show_axis[k] = TRUE; pid -> curves[rid][cid] -> labels_digit[k] = 1; pid -> curves[rid][cid] -> ticks_io[k] = 0; pid -> curves[rid][cid] -> labels_angle[k] = 0.0; pid -> curves[rid][cid] -> labels_font[k] = g_strdup_printf ("Sans 12"); pid -> curves[rid][cid] -> mint_size[k] = 5; pid -> curves[rid][cid] -> majt_size[k] = 10; pid -> curves[rid][cid] -> axis_defaut_title[k] = TRUE; pid -> curves[rid][cid] -> axis_title_font[k] = g_strdup_printf ("Sans 12"); } if (pid -> curves[rid][cid] -> err != NULL) { g_free (pid -> curves[rid][cid] -> err); pid -> curves[rid][cid] -> err = NULL; } pid -> curves[rid][cid] -> labels_shift_x[0] = 10; pid -> curves[rid][cid] -> labels_shift_y[0] = 20; pid -> curves[rid][cid] -> labels_shift_x[1] = 50; pid -> curves[rid][cid] -> labels_shift_y[1] = 10; pid -> curves[rid][cid] -> axis_title_x[0] = -20; pid -> curves[rid][cid] -> axis_title_y[0] = 45; pid -> curves[rid][cid] -> axis_title_x[1] = MARGX - 10; pid -> curves[rid][cid] -> axis_title_y[1] = -50; pid -> curves[rid][cid] -> frame_type = 2; pid -> curves[rid][cid] -> frame_dash = 1; pid -> curves[rid][cid] -> frame_thickness = 1.0; pid -> curves[rid][cid] -> frame_color.red = 0.0; pid -> curves[rid][cid] -> frame_color.green = 0.0; pid -> curves[rid][cid] -> frame_color.blue = 0.0; pid -> curves[rid][cid] -> frame_color.alpha = 1.0; pid -> curves[rid][cid] -> frame_pos[0][0] = 100.0/840.0; pid -> curves[rid][cid] -> frame_pos[0][1] = 1.0; pid -> curves[rid][cid] -> frame_pos[1][0] = 530.0/600.0; pid -> curves[rid][cid] -> frame_pos[1][1] = 0.0; pid -> curves[rid][cid] -> legend_font = g_strdup_printf ("Sans 10"); pid -> curves[rid][cid] -> show_legend = FALSE; pid -> curves[rid][cid] -> show_frame = TRUE; pid -> curves[rid][cid] -> legend_color.red = 0.0; pid -> curves[rid][cid] -> legend_color.blue = 0.0; pid -> curves[rid][cid] -> legend_color.green = 0.0; pid -> curves[rid][cid] -> legend_color.alpha = 1.0; pid -> curves[rid][cid] -> legend_pos[0] = LEGX; pid -> curves[rid][cid] -> legend_pos[1] = LEGY; pid -> curves[rid][cid] -> show_legend_box = FALSE; pid -> curves[rid][cid] -> legend_box_dash = 1; pid -> curves[rid][cid] -> legend_box_color.red = 0.0; pid -> curves[rid][cid] -> legend_box_color.green = 0.0; pid -> curves[rid][cid] -> legend_box_color.blue = 0.0; pid -> curves[rid][cid] -> legend_box_color.alpha = 1.0; pid -> curves[rid][cid] -> legend_box_thickness = 1.0; pid -> curves[rid][cid] -> backcolor.red = 1.0; pid -> curves[rid][cid] -> backcolor.green = 1.0; pid -> curves[rid][cid] -> backcolor.blue = 1.0; pid -> curves[rid][cid] -> backcolor.alpha = 1.0; pid -> curves[rid][cid] -> layout = curve_default_layout (pid, rid, cid); pid -> curves[rid][cid] -> extrac = NULL; pid -> curves[rid][cid] -> extrac = g_malloc0 (sizeof*pid -> curves[rid][cid] -> extrac); pid -> curves[rid][cid] -> extrac -> extras = 0; if (pid -> curves[rid][cid] -> cfile != NULL) { g_free (pid -> curves[rid][cid] -> cfile); } activer = -1; curve_default_scale (rid, cid); activer = rid; } /*! \fn void addcurwidgets (int pid, int rid, int str) \brief add curve widgets to the project \param pid the project id \param rid the analysis id \param str at the project creation stage (1) or latter on (0) */ void addcurwidgets (int pid, int rid, int str) { int j, k, l; l = 0; activer = rid; project * tmp_proj = get_project_by_id(pid); for (j=0; j numc[j]; } for (j=0; j numc[rid]; j++) { tmp_proj -> curves[rid][j] -> cid = l + j; tmp_proj -> idcc[rid][j].a = pid; tmp_proj -> idcc[rid][j].b = rid; tmp_proj -> idcc[rid][j].c = j; if (str == 0 || tmp_proj -> curves[rid][j] -> ndata == 0) { initcurve (tmp_proj, rid, j); } if (tmp_proj -> curves[rid][j] -> default_title) { tmp_proj -> curves[rid][j] -> title = g_strdup_printf ("%s - %s", prepare_for_title(tmp_proj -> name), tmp_proj -> curves[rid][j] -> name); } for (k=0; k<2; k++) { if (tmp_proj -> curves[rid][j] -> axis_defaut_title[k]) { tmp_proj -> curves[rid][j] -> axis_title[k] = g_strdup_printf ("%s", default_title(k, j)); } } } } Atomes-GNU-1.1.14/src/curve/datab.c000066400000000000000000001036541457665371200166400ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file datab.c * @short Curve data edition window and associated callbacks * @author Sébastien Le Roux */ /* * This file: 'datab.c' * * Contains: * - The curve data edition window and associated callbacks * * List of functions: G_MODULE_EXPORT gboolean on_data_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data); G_MODULE_EXPORT gboolean cancel_win (GtkWidget * win, GdkEvent * event, gpointer data); void get_tree_data (GtkWidget * tree); void save_row (gpointer data, gpointer user_data); void update_first_row (gpointer data, gpointer user_data); void update_first_col (); void add_to_last_row (gpointer data, gpointer user_data); void add_to_last_col (double cte, gpointer data); void multiply_last_row (gpointer data, gpointer user_data); void multiply_last_col (double cte, gpointer data); void select_row (gpointer data, gpointer user_data); void copy_row (gpointer data, gpointer user_data); void copy_content (gpointer data); void add_row (gpointer data, gpointer user_data); void delete_row (gpointer data, gpointer user_data); void insert_cell (gpointer data); void delete_cell (gpointer data); void add_to_column (gpointer data); void multiply_column (gpointer data); void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data); void data_popup_menu (GtkWidget * top_level, GdkEvent * event, gpointer data); void data_button_event (GtkWidget * data_tree, double event_x, double event_y, guint event_button, guint event_type, gpointer data); void data_button_event (GtkWidget * data_tree, GdkEvent * event, guint event_button, guint event_type, gpointer data); void cancel_changes (GtkWidget * widg, gpointer data); void edit_data (gpointer data); static void fill_data_model (GtkListStore * store, project * this_proj, int b, int c); G_MODULE_EXPORT void edit_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data); G_MODULE_EXPORT void adjust_value (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_add_to_column (GtkDialog * wind, gint response_id, gpointer data); G_MODULE_EXPORT void run_multiply_column (GtkDialog * wind, gint response_id, gpointer data); G_MODULE_EXPORT void data_pop_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void on_data_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_data_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void cancel_but (GtkButton * but, gpointer data); G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data); GtkWidget * setview (project * this_proj, int b, int c); GMenu * insert_place (); GMenu * insert_data (); GMenu * delete_data (); GMenu* cell_actions (); GMenu * cell_title (); GMenu * column_actions (); GMenu * column_title (); GMenu * data_menu (); */ #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" int nrows; GtkTreeModel * curve_model; GList * lrows; GList * rows; GtkTreeSelection * sel; GtkTreePath * path; GtkTreeIter row; gchar * text; /*! \fn void get_tree_data (GtkWidget * tree) \brief get information on location in a GtkTreeView \param tree the GtkTreeView */ void get_tree_data (GtkWidget * tree) { sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree)); curve_model = gtk_tree_view_get_model(GTK_TREE_VIEW(tree)); lrows = gtk_tree_selection_get_selected_rows (sel, & curve_model); nrows = gtk_tree_selection_count_selected_rows (sel); } /*! \fn void save_row (gpointer data, gpointer user_data) \brief save row data and udpate calculation result accordingly \param data the path in the tree model \param user_data the associated data pointer */ void save_row (gpointer data, gpointer user_data) { path = data; tint * id = (tint *)user_data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 1, & get_project_by_id(id -> a) -> curves[id -> b][id -> c] -> data[0][nrows], 2, & get_project_by_id(id -> a) -> curves[id -> b][id -> c] -> data[1][nrows], -1); } nrows = nrows + 1; } /*! \fn void update_first_row (gpointer data, gpointer user_data) \brief update row in the first column \param data the path in the tree model \param user_data the associated data pointer */ void update_first_row (gpointer data, gpointer user_data) { path = data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { nrows = nrows + 1; gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, 0, nrows, -1); } } /*! \fn void update_first_col () \brief update all rows in the first column * */ void update_first_col () { gtk_tree_selection_select_all (sel); lrows = gtk_tree_selection_get_selected_rows (sel, & curve_model); nrows = 0; g_list_foreach (lrows, (GFunc)update_first_row, NULL); gtk_tree_selection_unselect_all (sel); } /*! \fn void add_to_last_row (gpointer data, gpointer user_data) \brief add constant to last row \param data the path in the tree model \param user_data the constant */ void add_to_last_row (gpointer data, gpointer user_data) { path = data; double vold; double * cte = (double *)user_data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 2, & vold, -1); gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, 2, * cte + vold, -1); } } /*! \fn void add_to_last_col (double cte, gpointer data) \brief add constant value to selected rows \param cte the constant to add \param data the associated data pointer */ void add_to_last_col (double cte, gpointer data) { qint * dat = (qint *)data; project * this_proj = get_project_by_id(dat -> a); curve_model = gtk_tree_view_get_model (GTK_TREE_VIEW(this_proj -> curves[dat -> b][dat -> c] -> datatree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(this_proj -> curves[dat -> b][dat -> c] -> datatree)); gtk_tree_selection_select_all (sel); get_tree_data (this_proj -> curves[dat -> b][dat -> c] -> datatree); g_list_foreach (lrows, (GFunc)add_to_last_row, & cte); gtk_tree_selection_unselect_all (sel); } /*! \fn void multiply_last_row (gpointer data, gpointer user_data) \brief multiply last row by constant \param data the path in the tree model \param user_data the constant */ void multiply_last_row (gpointer data, gpointer user_data) { path = data; double vold; double * cte = (double *) user_data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 2, & vold, -1); gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, 2, * cte * vold, -1); } } /*! \fn void multiply_last_col (double cte, gpointer data) \brief multiply last colum by constant value \param cte the constant value \param data the associated data pointer */ void multiply_last_col (double cte, gpointer data) { qint * dat = (qint *)data; project * this_proj = get_project_by_id(dat -> a); curve_model = gtk_tree_view_get_model (GTK_TREE_VIEW(this_proj -> curves[dat -> b][dat -> c] -> datatree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(this_proj -> curves[dat -> b][dat -> c] -> datatree)); gtk_tree_selection_select_all (sel); get_tree_data (this_proj -> curves[dat -> b][dat -> c] -> datatree); g_list_foreach (lrows, (GFunc)multiply_last_row, & cte); gtk_tree_selection_unselect_all (sel); } /*! \fn void select_row (gpointer data, gpointer user_data) \brief select row \param data the path in the tree model \param user_data the associated data pointer */ void select_row (gpointer data, gpointer user_data) { path = data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_selection_select_iter (sel, & row); } } /*! \fn void copy_row (gpointer data, gpointer user_data) \brief copy row \param data the path in the tree model \param user_data the associated data pointer */ void copy_row (gpointer data, gpointer user_data) { path = data; int v1; double v2, v3; gchar * tmp; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_tree_model_get (curve_model, & row, 0, & v1, 1, & v2, 2, & v3, -1); if (text == NULL) { text = g_strdup_printf ("%d\t%f\t%f\n", v1, v2, v3); } else { tmp = g_strdup_printf ("%s%d\t%f\t%f\n", text, v1, v2, v3); g_free (text); text = g_strdup_printf ("%s", tmp); g_free (tmp); } } } /*! \fn void copy_content (gpointer data) \brief copy selection \param data the associated data pointer */ void copy_content (gpointer data) { text = NULL; g_list_foreach (lrows, (GFunc)copy_row, NULL); #ifdef GTK3 gtk_clipboard_set_text (gtk_clipboard_get(GDK_SELECTION_CLIPBOARD), text, -1); gtk_clipboard_store (gtk_clipboard_get(GDK_SELECTION_CLIPBOARD)); #endif g_free (text); } /*! \fn void add_row (gpointer data, gpointer user_data) \brief add row \param data the path in the tree model \param user_data the associated data pointer */ void add_row (gpointer data, gpointer user_data) { GtkTreeIter newrow; if (gtk_tree_model_get_iter (curve_model, & row, path)) { if (GPOINTER_TO_INT(user_data) == 0) { gtk_list_store_insert_before (GTK_LIST_STORE(curve_model), & newrow, & row); } else { gtk_list_store_insert_after (GTK_LIST_STORE(curve_model), & newrow, & row); } gtk_list_store_set (GTK_LIST_STORE(curve_model), & newrow, 0, 0, 1, 0.00000, 2, 0.00000, -1); } } /*! \fn void delete_row (gpointer data, gpointer user_data) \brief delete row \param data the path in the tree model \param user_data the associated data pointer */ void delete_row (gpointer data, gpointer user_data) { path = data; if (gtk_tree_model_get_iter (curve_model, & row, path)) { gtk_list_store_remove (GTK_LIST_STORE(curve_model), & row); } } /*! \fn void insert_cell (gpointer data) \brief insert row \param data the associated data pointer */ void insert_cell (gpointer data) { if (GPOINTER_TO_INT(data) == 0) { path = (GtkTreePath *) g_list_nth_data (lrows, 0); } else { path = (GtkTreePath *) g_list_nth_data (lrows, nrows-1); } g_list_foreach (lrows, (GFunc)add_row, data); update_first_col (); } /*! \fn void delete_cell (gpointer data) \brief delete row \param data the associated data pointer */ void delete_cell (gpointer data) { g_list_foreach (g_list_reverse (lrows), (GFunc)delete_row, NULL); update_first_col (); } /*! \fn G_MODULE_EXPORT void edit_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) \brief edit cell in the curve data edition tree model \param cell the GtkCellRendererText sending the signal \param path_string the path in the tree model \param new_text the string describing the new value \param user_data the associated data pointer */ G_MODULE_EXPORT void edit_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer user_data) { qint * id = (qint *)user_data; project * this_proj = get_project_by_id (id -> a); curve_model = gtk_tree_view_get_model(GTK_TREE_VIEW(this_proj -> curves[id -> b][id -> c] -> datatree)); gtk_tree_model_get_iter_from_string (curve_model, & row, path_string); double val = atof(new_text); gtk_list_store_set (GTK_LIST_STORE(curve_model), & row, id -> d, val, -1); } GtkWidget * col_entry; /*! \fn G_MODULE_EXPORT void adjust_value (GtkEntry * res, gpointer data) \brief adjust constant value entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void adjust_value (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = atof(m); update_entry_double (res, v); } /*! \fn G_MODULE_EXPORT void run_add_to_column (GtkDialog * wind, gint response_id, gpointer data) \brief add constant to column - running the dialog \param wind the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_add_to_column (GtkDialog * wind, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { const gchar * p = entry_get_text (GTK_ENTRY(col_entry)); double c = atof(p); update_entry_double (GTK_ENTRY(col_entry), c); add_to_last_col (c, data); } destroy_this_dialog (wind); } /*! \fn void add_to_column (gpointer data) \brief add constant to column - creating the dialog \param data the associated data pointer */ void add_to_column (gpointer data) { GtkWidget * wind; GtkWidget * box; GtkWidget * hbox; GtkWidget * lab; gchar * str; qint * dat = (qint *)data; wind = dialogmodal ("Add constant to column", GTK_WINDOW(get_project_by_id(dat -> a) -> curves[dat -> b][dat -> c] -> window)); gtk_dialog_add_button (GTK_DIALOG (wind), "Apply", GTK_RESPONSE_APPLY); box = dialog_get_content_area (wind); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, TRUE, TRUE, 0); str = g_strdup_printf ("Add Constant to Last Column"); lab = gtk_label_new (str); gtk_widget_set_size_request (lab, 200, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, TRUE, FALSE, 0); col_entry = create_entry (G_CALLBACK(adjust_value), 100, 15, FALSE, NULL); gtk_entry_set_alignment (GTK_ENTRY(col_entry), 1.0); update_entry_double (GTK_ENTRY(col_entry), 1.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, col_entry, FALSE, FALSE, 0); run_this_gtk_dialog (wind, G_CALLBACK(run_add_to_column), data); } /*! \fn G_MODULE_EXPORT void run_multiply_column (GtkDialog * wind, gint response_id, gpointer data) \brief multiply column by constant - running the dialog \param wind the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_multiply_column (GtkDialog * wind, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { const gchar * p = entry_get_text (GTK_ENTRY(col_entry)); double c = atof(p); update_entry_double (GTK_ENTRY(col_entry), c); multiply_last_col (c, data); } destroy_this_dialog (wind); } /*! \fn void multiply_column (gpointer data) \brief multiply column by constant - creating dialog \param data the associated data pointer */ void multiply_column (gpointer data) { GtkWidget * wind; GtkWidget * box; GtkWidget * hbox; GtkWidget * lab; gchar * str; qint * dat = (qint *)data; wind = dialogmodal ("Multiply Column by Constant", GTK_WINDOW(get_project_by_id(dat -> a) -> curves[dat -> b][dat -> c] -> window)); gtk_dialog_add_button (GTK_DIALOG (wind), "Apply", GTK_RESPONSE_APPLY); box = dialog_get_content_area (wind); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, TRUE, TRUE, 0); str = g_strdup_printf ("Multiply Last Column by Constant"); lab = gtk_label_new (str); gtk_widget_set_size_request (lab, 200, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, TRUE, FALSE, 0); col_entry = create_entry (G_CALLBACK(adjust_value), 100, 15, FALSE, NULL); gtk_entry_set_alignment (GTK_ENTRY(col_entry), 1.0); update_entry_double (GTK_ENTRY(col_entry), 1.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, col_entry, FALSE, FALSE, 0); run_this_gtk_dialog (wind, G_CALLBACK(run_multiply_column), data); } /*! \fn GMenu * insert_place () \brief create the insertion submenu */ GMenu * insert_place () { GMenu * menu = g_menu_new (); append_menu_item (menu, "Before", "data-pop.insert.before", NULL, NULL, IMG_STOCK, (gpointer)GO_UP, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "After", "data-pop.insert.after", NULL, NULL, IMG_STOCK, (gpointer)GO_DOWN, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * insert_data () \brief create the insert data submenu */ GMenu * insert_data () { GMenu * menu = g_menu_new (); append_submenu (menu, "Insert Row(s)", insert_place()); return menu; } /*! \fn GMenu * delete_data () \brief create the delete data submenu */ GMenu * delete_data () { GMenu * menu = g_menu_new (); append_menu_item (menu, "Delete Row(s)", "data-pop.delete", NULL, NULL, IMG_STOCK, (gpointer)LIST_REM, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu* cell_actions () \brief create the cell actions submenu */ GMenu* cell_actions () { GMenu * menu = g_menu_new (); append_menu_item (menu, "Copy Selected Row(s)", "data-pop.copy", NULL, NULL, IMG_STOCK, (gpointer)EDITC, FALSE, FALSE, FALSE, NULL); g_menu_append_section (menu, NULL, (GMenuModel*)insert_data()); g_menu_append_section (menu, NULL, (GMenuModel*)delete_data()); return menu; } /*! \fn GMenu * cell_title () \brief create the cell based operations subemu */ GMenu * cell_title () { GMenu * menu = g_menu_new (); append_menu_item (menu, "Cell Based Operations", "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * column_actions () \brief create the column actions submenu */ GMenu * column_actions () { GMenu * menu = g_menu_new (); append_menu_item (menu, "Add Constant to Last Column", "data-pop.add", NULL, NULL, IMG_STOCK, (gpointer)LIST_ADD, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "Multiply Last Column by Constant", "data-pop.mul", NULL, NULL, IMG_STOCK, (gpointer)FCLOSE, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * column_title () \brief create the column based operations submenu */ GMenu * column_title () { GMenu * menu = g_menu_new (); append_menu_item (menu, "Column Based Operations", "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * data_menu () \brief create the curve data edition popup menu elements */ GMenu * data_menu () { GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel*)cell_title()); g_menu_append_section (menu, NULL, (GMenuModel*)cell_actions()); g_menu_append_section (menu, NULL, (GMenuModel*)column_title()); g_menu_append_section (menu, NULL, (GMenuModel*)column_actions()); return menu; } /*! \fn G_MODULE_EXPORT void data_pop_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve data edition popup menu actions callbacks \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void data_pop_action (GSimpleAction * action, GVariant * parameter, gpointer data) { gchar * name = g_strdup_printf ("%s", g_action_get_name(G_ACTION(action))); if (g_strcmp0 (name, "copy") == 0) { copy_content (data); } else if (g_strcmp0 (name, "insert.before") == 0) { insert_cell (data); } else if (g_strcmp0 (name, "insert.after") == 0) { insert_cell (data); } else if (g_strcmp0 (name, "delete") == 0) { delete_cell (data); } else if (g_strcmp0 (name, "add") == 0) { add_to_column (data); } else if (g_strcmp0 (name, "mul") == 0) { multiply_column (data); } } #ifdef GTK4 /*! \fn void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data) \brief create curve data edition popup menu GTK4 \param top_level the top level widget \param x x position \param y y position \param data the associated data pointer */ void data_popup_menu (GtkWidget * top_level, double x, double y, gpointer data) #else /*! \fn void data_popup_menu (GtkWidget * top_level, GdkEvent * event, gpointer data) \brief create curve data edition popup menu GTK3 \param top_level the top level widget \param event the GdkEvent triggering the signal \param data the associated data pointer */ void data_popup_menu (GtkWidget * top_level, GdkEvent * event, gpointer data) #endif { GSimpleActionGroup * data_popup = g_simple_action_group_new (); GSimpleAction * pop_data[6]; pop_data[0] = g_simple_action_new ("copy", NULL); pop_data[1] = g_simple_action_new ("insert.before", NULL); pop_data[2] = g_simple_action_new ("insert.after", NULL); pop_data[3] = g_simple_action_new ("delete", NULL); pop_data[4] = g_simple_action_new ("add", NULL); pop_data[5] = g_simple_action_new ("mul", NULL); g_signal_connect (pop_data[0], "activate", G_CALLBACK(data_pop_action), NULL); g_signal_connect (pop_data[1], "activate", G_CALLBACK(data_pop_action), GINT_TO_POINTER(0)); g_signal_connect (pop_data[2], "activate", G_CALLBACK(data_pop_action), GINT_TO_POINTER(1)); g_signal_connect (pop_data[3], "activate", G_CALLBACK(data_pop_action), NULL); g_signal_connect (pop_data[4], "activate", G_CALLBACK(data_pop_action), data); g_signal_connect (pop_data[5], "activate", G_CALLBACK(data_pop_action), data); int i; for (i=0; i<6; i++) g_action_map_add_action (G_ACTION_MAP(data_popup), G_ACTION(pop_data[i])); GtkWidget * menu; #ifdef GTK4 menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)data_menu(), GTK_POPOVER_MENU_NESTED); gtk_widget_set_parent (menu, top_level); #else menu = gtk_menu_new_from_model ((GMenuModel *)data_menu ()); #endif gtk_widget_insert_action_group (menu, "data-pop", G_ACTION_GROUP(data_popup)); #ifdef GTK4 gtk_widget_set_size_request (menu, -1, 240); pop_menu_at_pointer (menu, x, y); #else pop_menu_at_pointer (menu, event); #endif } #ifdef GTK4 /*! \fn void data_button_event (GtkWidget * data_tree, double event_x, double event_y, guint event_button, guint event_type, gpointer data) \brief curve data edition mouse button event GTK4 \param data_tree the GtkWidget sending the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param data the associated data pointer */ void data_button_event (GtkWidget * data_tree, double event_x, double event_y, guint event_button, guint event_type, gpointer data) #else /*! \fn void data_button_event (GtkWidget * data_tree, GdkEvent * event, guint event_button, guint event_type, gpointer data) \brief curve data edition mouse button event GTK3 \param data_tree the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param event_button event button \param event_type event type \param data the associated data pointer */ void data_button_event (GtkWidget * data_tree, GdkEvent * event, guint event_button, guint event_type, gpointer data) #endif { if (event_type == GDK_BUTTON_PRESS) { get_tree_data (data_tree); if (event_button == 3) { #ifdef GTK4 data_popup_menu ((GtkWidget *)get_top_level(data_tree), event_x, event_y, data); #else data_popup_menu (data_tree, event, data); #endif } } else if (event_type == GDK_BUTTON_RELEASE) { g_list_foreach (lrows, (GFunc)gtk_tree_path_free, NULL); g_list_free (lrows); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_data_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed callback GTK4 \param gesture the GtkGesture sending the signal \param n_press the number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_data_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { data_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, data); } /*! \fn G_MODULE_EXPORT void on_data_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released callback GTK4 \param gesture the GtkGesture sending the signal \param n_press the number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_data_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { data_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, data); } #else /*! \fn G_MODULE_EXPORT gboolean on_data_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief on button event in the curve data edition window \param widget the GtkWidget sending the signal \param event \param data */ G_MODULE_EXPORT gboolean on_data_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton*)event; data_button_event (widget, event, bevent -> button, bevent -> type, data); return FALSE; } #endif /*! \fn static void fill_data_model (GtkListStore * store, project * this_proj, int b, int c) \brief fill curve data list store \param store the GtkListStore to fill \param this_proj the target project \param b the calculation id \param c the curve id */ static void fill_data_model (GtkListStore * store, project * this_proj, int b, int c) { GtkTreeIter datalevel; int i; for (i=0; i curves[b][c] -> ndata; i++) { gtk_list_store_append (store, & datalevel); gtk_list_store_set (store, & datalevel, 0, i+1, 1, this_proj -> curves[b][c] -> data[0][i], 2, this_proj -> curves[b][c] -> data[1][i], -1); } } /*! \fn GtkWidget * setview (project * this_proj, int b, int c) \brief create the curve data tree store \param this_proj the target project \param b the target calculation \param c the target curve */ GtkWidget * setview (project * this_proj, int b, int c) { GtkWidget * dataview; GtkListStore * datamodel; GType type[3]={G_TYPE_INT, G_TYPE_DOUBLE, G_TYPE_DOUBLE}; GtkTreeViewColumn * datacol[3]; GtkCellRenderer * datacel[3]; GtkTreeSelection * dataselect; // ColRGBA col[3]; gchar * name[3]; int i; name[0]=g_strdup_printf (" "); name[1]=g_strdup_printf ("%s", this_proj -> curves[b][c] -> axis_title[0]); name[2]=g_strdup_printf ("%s\n%s", prepare_for_title(this_proj -> name), this_proj -> curves[b][c] -> name); datamodel = gtk_list_store_newv (3, type); fill_data_model (datamodel, this_proj, b, c); dataview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(datamodel)); //gtk_tree_view_set_rules_hint (GTK_TREE_VIEW(dataview), TRUE); for (i=0; i<3; i++) { datacel[i] = gtk_cell_renderer_text_new(); /* if (i == 1) \param 890: /afs /bin /boot /data /dev /etc /home /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /share /srv /sys /tmp /usr /var if (i == 1) 890: /afs /bin /boot /data /dev /etc /home /lib /lib64 /lost+found /media /mnt /opt /proc /root /run /sbin /share /srv /sys /tmp /usr /var if (i == 1) { col[i].red = 62965; col[i].green = 62965; col[i].blue = 62965; } else { col[i].red = 51914; col[i].green = 57825; col[i].blue = 65535; } g_object_set (datacel[i], "cell-background-gdk", & col[i], "cell-background-set", TRUE, NULL); */ if (i > 0) { g_object_set (datacel[i], "editable", TRUE, NULL); gtk_cell_renderer_set_alignment (datacel[i], 0.5, 0.5); this_proj -> curves[b][c] -> idcol[i-1].a = this_proj -> id; this_proj -> curves[b][c] -> idcol[i-1].b = b; this_proj -> curves[b][c] -> idcol[i-1].c = c; this_proj -> curves[b][c] -> idcol[i-1].d = i; g_signal_connect (G_OBJECT(datacel[i]), "edited", G_CALLBACK(edit_cell), & this_proj -> curves[b][c] -> idcol[i-1]); } datacol[i] = gtk_tree_view_column_new_with_attributes(name[i], datacel[i], "text", i, NULL); gtk_tree_view_column_set_alignment (datacol[i], 0.5); gtk_tree_view_column_set_resizable (datacol[i], TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(dataview), datacol[i]); if (i > 0) { gtk_tree_view_column_set_min_width (datacol[i], 100); } } g_object_unref (datamodel); dataselect = gtk_tree_view_get_selection (GTK_TREE_VIEW(dataview)); gtk_tree_selection_set_mode (dataselect, GTK_SELECTION_MULTIPLE); #ifdef GTK3 g_signal_connect (G_OBJECT(dataview), "button_press_event", G_CALLBACK(on_data_button_event), & this_proj -> curves[b][c] -> idcol[1]); #else add_widget_gesture_and_key_action (dataview, "datab-context-click", G_CALLBACK(on_data_button_pressed), & this_proj -> curves[b][c] -> idcol[1], "datab-context-release", G_CALLBACK(on_data_button_released), & this_proj -> curves[b][c] -> idcol[1], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif gtk_tree_view_expand_all (GTK_TREE_VIEW(dataview)); return dataview; } /*! \fn void cancel_changes (GtkWidget * widg, gpointer data) \brief cancel curve data edition \param widg the GtkWidget sending the signal \param data the associated data pointer */ void cancel_changes (GtkWidget * widg, gpointer data) { tint * id = (tint *)data; destroy_this_widget (widg); get_project_by_id(id -> a) -> curves[id -> b][id -> c] -> datatree = NULL; } /*! \fn G_MODULE_EXPORT void cancel_but (GtkButton * but, gpointer data) \brief cancel curve data edition button callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cancel_but (GtkButton * but, gpointer data) { cancel_changes (get_top_level(GTK_WIDGET(but)), data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data) \brief cancel curve data edition callback GTK4 \param win the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean cancel_win (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean cancel_win (GtkWidget * win, GdkEvent * event, gpointer data) \brief cancel curve data edition callback GTK3 \param win the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean cancel_win (GtkWidget * win, GdkEvent * event, gpointer data) #endif { cancel_changes ((GtkWidget *)win, data); return TRUE; } /*! \fn G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data) \brief apply data edition changes \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void validate_changes (GtkButton * but, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id(id -> a); curve_model = gtk_tree_view_get_model(GTK_TREE_VIEW(this_proj -> curves[id -> b][id -> c] -> datatree)); sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(this_proj -> curves[id -> b][id -> c] -> datatree)); gtk_tree_selection_select_all (sel); get_tree_data (this_proj -> curves[id -> b][id -> c] -> datatree); if (nrows != this_proj -> curves[id -> b][id -> c] -> ndata) { this_proj -> curves[id -> b][id -> c] -> ndata = nrows; g_free (this_proj -> curves[id -> b][id -> c] -> data[0]); this_proj -> curves[id -> b][id -> c] -> data[0] = g_malloc0 (nrows*sizeof*this_proj -> curves[id -> b][id -> c] -> data[0]); g_free (this_proj -> curves[id -> b][id -> c] -> data[1]); this_proj -> curves[id -> b][id -> c] -> data[1] = g_malloc0 (nrows*sizeof*this_proj -> curves[id -> b][id -> c] -> data[1]); } nrows = 0; g_list_foreach (lrows, (GFunc)save_row, data); cancel_changes (get_top_level(GTK_WIDGET(but)), data); update_curves (); } /*! \fn void edit_data (gpointer data) \brief create edit curve data dialog \param data the associated data pointer */ void edit_data (gpointer data) { GtkWidget * win; tint * id = (tint *)data; project * this_proj = get_project_by_id(id -> a); if (this_proj -> curves[id -> b][id -> c] -> datatree != NULL) { win = get_top_level(GTK_WIDGET(this_proj -> curves[id -> b][id -> c] -> datatree)); } else { gchar * str = g_strdup_printf ("%s - %s", prepare_for_title (this_proj -> name), this_proj -> curves[id -> b][id -> c] -> name); win = create_win (str, MainWindow, FALSE, TRUE); g_free (str); gtk_window_set_default_size (GTK_WINDOW(win), 300, 600); GtkWidget * vbox = create_vbox (BSEP); this_proj -> curves[id -> b][id -> c] -> datatree = setview (this_proj, id -> b, id -> c); GtkWidget * scrol = create_scroll (vbox, -1, 570, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, scrol, this_proj -> curves[id -> b][id -> c] -> datatree); GtkWidget * hbox = create_hbox (0); GtkWidget * butc = create_button ("Cancel", IMG_STOCK, CANCEL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(cancel_but), data); GtkWidget * butv = create_button ("Apply", IMG_STOCK, EXECUTE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(validate_changes), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, butc, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, butv, TRUE, TRUE, 0); gtk_widget_set_size_request (hbox, -1, 40); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); add_container_child (CONTAINER_WIN, win, vbox); add_gtk_close_event (win, G_CALLBACK(cancel_win), data); } show_the_widgets (win); } Atomes-GNU-1.1.14/src/curve/datab.h000066400000000000000000000020601457665371200166320ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file datab.h * @short Variable declarations for the curve data edition window * @author Sébastien Le Roux */ /* * This header file: 'datab.h' * * Contains: - Variable declarations for the curve data edition window */ #ifndef DATAB_H_ #define DATAB_H_ extern void edit_data (gpointer data); #endif Atomes-GNU-1.1.14/src/curve/draw.c000066400000000000000000000222341457665371200165140ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file draw.c * @short Function to draw a curve * @author Sébastien Le Roux */ /* * This file: 'draw.c' * * Contains: * - The function to draw a curve * */ #include #include #include #include #include #include "global.h" #include "curve.h" /*! \fn void draw_curve (cairo_t * cr, int cid, int rid, project * this_proj, int points, ColRGBA withcolor, int xscale, int yscale, int asp, int vdash, double thick, int glyp, double gize, int freq, double hwidth, double hopac, int hpos, int extra, int pid) \brief draw target curve to the cairo drawing context \param cr the cairo drawing context to use for the draw \param cid the target curve id \param rid the target calculation id \param this_proj the target project \param points the number of data point(s) \param withcolor the data color \param xscale x axis scale type (0 = linear, 1 = log) \param yscale y axis scale type (0 = linear, 1 = log) \param asp data aspect (0 = x/y normal, 1 = historgram) \param vdash dash type \param thick line tthickness \param glyp glyph type \param gize glyph size \param freq glyph frequency \param hwidth histogram bar width \param hopac histogram bar opacity value \param hpos histogram opacity treatment (0 = no opacity, 1 = use opacity) \param extra the number of extra data sets \param pid 0 (x/y plot) or plot id number (historgram) */ void draw_curve (cairo_t * cr, int cid, int rid, project * this_proj, int points, ColRGBA withcolor, int xscale, int yscale, int asp, int vdash, double thick, int glyp, double gize, int freq, double hwidth, double hopac, int hpos, int extra, int pid) { int i, j, k; double x, y; double x1, x2, y1, y2; double dx1, dx2, dy1, dy2; double slope, bval; double ** plotdata; gboolean plot; gboolean dglyp; curve_dash * dasht; plotdata = allocddouble (points, 2); for ( i=0 ; i < points; i++ ) { if (xscale == 0) { plotdata[i][0] = x_min + XDRAW * (this_proj -> curves[rid][cid] -> data[0][i] - cxy[0])/ xmax; } else { x = (i+1) * this_proj -> num_delta[rid] * this_proj -> delta[rid] * pow(10, dxlog); x = log(x) / log(pow(10, xlog)); plotdata[i][0] = x_min + XDRAW * x; } if (yscale == 0) { plotdata[i][1] = y_min + YDRAW * (this_proj -> curves[rid][cid] -> data[1][i] - cxy[1]) / ymax; } else { y = this_proj -> curves[rid][cid] -> data[1][i] * pow(10, dylog); y = log(y) / log(pow(10, ylog)); plotdata[i][1] = y_min + YDRAW * y; } #ifdef DEBUG // g_debug ("CURVE: DRAWCURVE: x= %f, y= %f", plotdata[i][0], plotdata[i][1]); #endif } if (vdash > 0) { dasht = selectdash (vdash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_line_width (cr, thick); g_free (dasht); } else { cairo_set_line_width (cr, 0.0); } cairo_set_source_rgba (cr, withcolor.red, withcolor.green, withcolor.blue, 1.0); if (asp == 0) { j = 0; k = 1; if (rid == RI) j = 2; for ( i = j ; i < points - k ; i ++) { plot = TRUE; dglyp = FALSE; slope = (plotdata[i+k][1] - plotdata[i][1])/ (plotdata[i+k][0] - plotdata[i][0]); bval = plotdata[i][1] - slope*plotdata[i][0]; dy1 = slope*x_min + bval; dy2 = slope*x_max + bval; if (slope < 0) { dx1 = (y_min - bval) / slope; dx2 = (y_max - bval) / slope; } else { dx1 = (y_max - bval) / slope; dx2 = (y_min - bval) / slope; } if (plotdata[i][0] < x_min && plotdata[i+k][0] < x_min) { plot = FALSE; } else if (plotdata[i][0] > x_max && plotdata[i+k][0] > x_max) { plot = FALSE; } if (plotdata[i][1] < y_max && plotdata[i+k][1] < y_max) { plot = FALSE; } else if (plotdata[i][1] > y_min && plotdata[i+k][1] > y_min) { plot = FALSE; } if (plot) { if (plotdata[i][0] >= x_min && plotdata[i][0] <= x_max) { if(plotdata[i][1] >= y_max && plotdata[i][1] <= y_min) { x1 = plotdata[i][0]; y1 = plotdata[i][1]; dglyp = TRUE; } else { x1 = dx1; y1 = (slope < 0) ? y_min : y_max; } } else { x1 = x_min; y1 = dy1; } if (plotdata[i+k][0] >= x_min && plotdata[i+k][0] <= x_max) { if (plotdata[i+k][1] >= y_max && plotdata[i+k][1] <= y_min) { x2 = plotdata[i+k][0]; y2 = plotdata[i+k][1]; } else { x2 = dx2; y2 = (slope < 0) ? y_max : y_min; } } else { x2 = x_max; y2 = dy2; } cairo_move_to (cr, x1, y1); cairo_line_to (cr, x2, y2); cairo_stroke (cr); if (i % freq == 0 && dglyp) draw_glyph (cr, glyp, x1, y1, withcolor, gize); if (i == points - 2 && (i+k) % freq == 0 && dglyp) { draw_glyph (cr, glyp, x2, y2, withcolor, gize); } } } } else if (asp == 1) { j = 0; k = 1; if (rid == RI) j = 2; // g_debug ("x_min= %f, x_max= %f, y_min= %f, y_max= %f", x_min, x_max, y_min, y_max); for ( i = j ; i < points ; i ++) { if (this_proj -> curves[rid][cid] -> data[1][i] != 0.0) { if (plotdata[i][0] >= x_min && plotdata[i][0] <= x_max) { if (plotdata[i][1] <= y_min || (cxy[1] <= 0.0 && plotdata[i][1] > y_min)) { x1 = plotdata[i][0] - hwidth * 0.5 * XDRAW / xmax; if (pid) x1 -= hwidth * 0.5 * ((float)pid / (float)extra) * XDRAW / xmax; x2 = hwidth * XDRAW / xmax; if (x1 < x_min) { x2 -= (x_min - x1); x1 = x_min; } if (x1+x2 > x_max) { x2 = x_max - x1; } y1 = plotdata[i][1]; if (plotdata[i][1] > y_min) { y1 = y_min; } else if (plotdata[i][1] < y_max) { y1 = y_max; } y2 = y_min - y1; if (cxy[1] <= 0.0) { y2 = y2 - cxy[1] * YDRAW / ymax; } if (hpos) { cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 1.0); cairo_rectangle (cr, x1, y1, x2, y2); cairo_fill(cr); } cairo_set_source_rgba (cr, withcolor.red, withcolor.green, withcolor.blue, hopac); cairo_rectangle (cr, x1, y1, x2, y2); cairo_fill(cr); cairo_set_source_rgba (cr, withcolor.red, withcolor.green, withcolor.blue, 1.0); y2 = y_min; if (cxy[1] <= 0.0) { y2 = y2 - cxy[1] * YDRAW / ymax; } cairo_move_to (cr, x1, y2); cairo_line_to (cr, x1, y1); cairo_move_to (cr, x1, y1); x2 = plotdata[i][0] + hwidth * 0.5 * XDRAW / xmax; if (pid) x2 -= hwidth * 0.5 * ((float)pid / (float)extra) * XDRAW / xmax; if (x2 > x_max) { x2 = x_max; cairo_line_to(cr, x2, y1); cairo_move_to(cr, x2, y1); } else { cairo_line_to(cr, x2, y1); cairo_move_to(cr, x2, y1); cairo_line_to(cr, x2, y2); } cairo_stroke(cr); } } } } } cairo_stroke(cr); g_free (plotdata); } Atomes-GNU-1.1.14/src/curve/frame.c000066400000000000000000000154311457665371200166520ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file frame.c * @short Functions to draw the frame * @author Sébastien Le Roux */ /* * This file: 'frame.c' * * Contains: * - The functions to draw the frame * * List of functions: void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol); void prep_axis_data (project * this_proj, int rid, int cid, int ax); void draw_frame (cairo_t * cr, project * this_proj, int rid, int cid); */ #include #include #include #include "global.h" #include "curve.h" /*! \fn void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol) \brief draw frame line \param fr the cairo drawing context to use for the draw \param da dash type \param ti line width \param dcol color */ void prep_frame (cairo_t * fr, int da, double ti, ColRGBA dcol) { curve_dash * tdash; tdash = selectdash (da); cairo_set_dash (fr, tdash -> a, tdash -> b, 0.0); cairo_set_source_rgba (fr, dcol.red, dcol.green, dcol.blue, dcol.alpha); cairo_set_line_width (fr, ti); g_free (tdash); } /*! \fn void show_frame (cairo_t * cd, int tf, int da, int res[2], double ti, double x[2], double y[2], ColRGBA dcol) \brief draw frame \param cd the cairo drawing context to use for the draw \param tf frame type \param da dash type \param res image size \param ti line width \param x x positions (right, left) \param y y positions (top, bottom) \param dcol color */ void show_frame (cairo_t * cd, int tf, int da, int res[2], double ti, double x[2], double y[2], ColRGBA dcol) { double x1, x2; double y1, y2; prep_frame (cd, da, ti, dcol); x1 = x[0] * res[0]; x2 = x[1] * res[0]; y1 = y[0] * res[1]; y2 = y[1] * res[1]; switch (tf) { case 0: cairo_move_to (cd, x1, y2); cairo_line_to (cd, x2, y2); cairo_line_to (cd, x2, y1); cairo_line_to (cd, x1, y1); cairo_line_to (cd, x1, y2); break; case 1: cairo_move_to (cd, x1, y2); cairo_line_to (cd, x1, y1); cairo_line_to (cd, x2, y1); cairo_line_to (cd, x2, y2); break; case 2: cairo_move_to (cd, x1, y2); cairo_line_to (cd, x1, y1); cairo_line_to (cd, x2, y1); break; case 3: cairo_move_to (cd, x2, y2); cairo_line_to (cd, x2, y1); cairo_line_to (cd, x1, y1); break; case 4: cairo_move_to (cd, x1, y1); cairo_line_to (cd, x2, y1); break; } cairo_stroke (cd); } /*! \fn void prep_axis_data (project * this_proj, int rid, int cid, int ax) \brief prepare axis data \param this_proj the target project \param rid the calculation id \param cid the curve id \param ax the axis */ void prep_axis_data (project * this_proj, int rid, int cid, int ax) { dogrid = this_proj -> curves[rid][cid] -> show_grid[ax]; x_shift = this_proj -> curves[rid][cid] -> labels_shift_x[ax]; y_shift = this_proj -> curves[rid][cid] -> labels_shift_y[ax]; mticks = this_proj -> curves[rid][cid] -> majt[ax]; nticks = this_proj -> curves[rid][cid] -> mint[ax]; if (this_proj -> curves[rid][cid] -> ticks_io[ax] == 1) { amint = this_proj -> curves[rid][cid] -> mint_size[ax]; amajt = this_proj -> curves[rid][cid] -> majt_size[ax]; } else { amint = - this_proj -> curves[rid][cid] -> mint_size[ax]; amajt = - this_proj -> curves[rid][cid] -> majt_size[ax]; } tickpos = this_proj -> curves[rid][cid] -> ticks_pos[ax]; labpos = this_proj -> curves[rid][cid] -> labels_pos[ax]; } /*! \fn void draw_frame (cairo_t * cr, project * this_proj, int rid, int cid) \brief draw frame and axis data \param cr the cairo drawing context to use for the draw \param this_proj the target project \param rid the calculation id \param cid the curve id */ void draw_frame (cairo_t * cr, project * this_proj, int rid, int cid) { show_frame (cr, this_proj -> curves[rid][cid] -> frame_type, this_proj -> curves[rid][cid] -> frame_dash, resol, this_proj -> curves[rid][cid] -> frame_thickness, this_proj -> curves[rid][cid] -> frame_pos[0], this_proj -> curves[rid][cid] -> frame_pos[1], this_proj -> curves[rid][cid] -> frame_color); // X axis // Draw X axis ticks and labels pango_layout_set_font_description (layout, pango_font_description_from_string (this_proj -> curves[rid][cid] -> labels_font[0])); prep_axis_data (this_proj, rid, cid, 0); if (this_proj -> curves[rid][cid] -> scale[0] == 0) { setup_xaxis_linear (cr, this_proj, rid, cid); } else { setup_xaxis_log (cr, this_proj, rid, cid, TRUE); } // Draw X axis title cairo_move_to (cr, x_min + XDRAW / 2.0 + this_proj -> curves[rid][cid] -> axis_title_x[0], y_min + this_proj -> curves[rid][cid] -> axis_title_y[0]); pango_layout_set_font_description (layout, pango_font_description_from_string (this_proj -> curves[rid][cid] -> axis_title_font[0])); pango_layout_set_text (layout, this_proj -> curves[rid][cid] -> axis_title[0], -1); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke(cr); // Y axis // Draw Y axis ticks and labels pango_layout_set_font_description (layout, pango_font_description_from_string (this_proj -> curves[rid][cid] -> labels_font[1])); prep_axis_data (this_proj, rid, cid, 1); if (this_proj -> curves[rid][cid] -> scale[1] == 0) { setup_yaxis_linear (cr, this_proj, rid, cid); } else { setup_yaxis_log (cr, this_proj, rid, cid, TRUE); } cairo_move_to (cr, x_min - this_proj -> curves[rid][cid] -> axis_title_x[1], y_min + YDRAW/2 - this_proj -> curves[rid][cid] -> axis_title_y[1]); pango_layout_set_font_description (layout, pango_font_description_from_string (this_proj -> curves[rid][cid] -> axis_title_font[1])); pango_layout_set_text (layout, this_proj -> curves[rid][cid] -> axis_title[1], -1); cairo_rotate (cr, -pi/2.0); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); cairo_rotate (cr, pi/2.0); pango_cairo_update_layout (cr, layout); } Atomes-GNU-1.1.14/src/curve/glyph.c000066400000000000000000000164711457665371200167100ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file glyph.c * @short Functions to draw the glyphs * @author Sébastien Le Roux */ /* * This file: 'glyph.c' * * Contains: * - Functions to draw the glyphs * * List of functions: void draw_poly (cairo_t * to, double x, double y, double size, double step, double initp); void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size); */ #include #include #include "global.h" #include "curve.h" /*! \fn void draw_poly (cairo_t * to, double x, double y, double size, double step, double initp) \brief draw polyhedra glyph \param to the cairo drawing context to use for the draw \param x x position \param y y position \param size glyph size \param step number of points \param initp starting position */ void draw_poly (cairo_t * to, double x, double y, double size, double step, double initp) { double px, py; double alpha; double astep; double astart; astart = 2*pi / initp; px = x + size * cos (astart); py = y + size * sin (astart); astep = 2 * pi / step; cairo_move_to (to, px, py); for (alpha =0.0 ; alpha <= 2*pi ; alpha += astep) { px = x + size * cos (astart + alpha); py = y + size *sin (astart + alpha); cairo_line_to (to, px, py); } } /*! \fn void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size) \brief draw glyph at (x,y) \param in the cairo drawing context to use for the draw \param theglyph the type of glyph \param x x position \param y y position \param gcolor the glyph color \param size the glyph size */ void draw_glyph (cairo_t * in, int theglyph, double x, double y, ColRGBA gcolor, double size) { double step; double start; double width; double cdash[3]; double offset; int dcount; int idglyph; double starttab[] = {1.0, 4.0, 2.0, 1.33333}; dcount = cairo_get_dash_count (in); cairo_get_dash (in, cdash, & offset); cairo_set_dash (in, dashed1, len1, 0.0); width = cairo_get_line_width (in); cairo_set_line_width (in, 1.0); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 1.0); if (theglyph == 1) { cairo_move_to (in, x + size/2.0, y - size/2.0); cairo_line_to (in, x - size/2.0, y + size/2.0); cairo_move_to (in, x + size/2.0, y + size/2.0); cairo_line_to (in, x - size/2.0, y - size/2.0); cairo_stroke (in); } if (theglyph > 1 && theglyph < 7) { cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); if (theglyph == 2) { cairo_fill(in); } else if (theglyph == 3) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); } else if (theglyph == 4) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); } else if (theglyph == 5) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_move_to (in, x, y); cairo_rectangle (in, x - size/2.0, y - size/2.0, size, size); cairo_fill (in); } cairo_stroke (in); } else if (theglyph >= 7 && theglyph < 12) { step = 4.0; start = 1.0; draw_poly (in, x, y, size, step, start); if (theglyph == 7) { cairo_fill(in); } else if (theglyph == 8) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 9) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 10) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); } cairo_stroke (in); } else if (theglyph >= 12 && theglyph < 17) { cairo_arc (in, x, y, size, 0.0, 2*pi); if (theglyph == 12) { cairo_fill(in); } else if (theglyph == 13) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); } else if (theglyph == 14) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); } else if (theglyph == 15) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); cairo_arc (in, x, y, size, 0.0, 2*pi); cairo_fill (in); } cairo_stroke (in); } else if (theglyph > 16) { step = 3.0; idglyph = (theglyph - 17) / 5; start = starttab[idglyph]; draw_poly (in, x, y, size, step, start); if (theglyph == 18 + idglyph*5) { cairo_fill(in); } else if (theglyph == 19 + idglyph*5) { cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 20 + idglyph*5) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); cairo_stroke (in); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 0.25); draw_poly (in, x, y, size, step, start); cairo_fill (in); } else if (theglyph == 21 + idglyph*5) { cairo_stroke (in); cairo_set_source_rgba (in, 1.0, 1.0, 1.0, 1.0); draw_poly (in, x, y, size, step, start); cairo_fill (in); } cairo_stroke (in); } cairo_set_dash (in, cdash, dcount, offset); cairo_set_source_rgba (in, gcolor.red, gcolor.green, gcolor.blue, 1.0); cairo_set_line_width (in, width); } Atomes-GNU-1.1.14/src/curve/labels.c000066400000000000000000000060241457665371200170200ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file labels.c * @short Function to draw the axis labels * @author Sébastien Le Roux */ /* * This file: 'labels.c' * * Contains: * - Function to draw the axis labels * * List of functions: void label (cairo_t * cr, double val, int axe, int p, project * this_proj); */ #include #include #include #include #include "global.h" #include "curve.h" /*! \fn void label (cairo_t * cr, double val, int axe, int p, project * this_proj) \brief draw axis label \param cr the cairo drawing context to use for the draw \param val the value to display \param axe axis (0 = x, 1 = y) \param p label position (0 = bottom, 1 = top) \param this_proj the target project */ void label (cairo_t * cr, double val, int axe, int p, project * this_proj) { gchar * label; gchar * lab; gchar * tmp; int i, j; double u, v; lab = g_strdup_printf ("%.10lf", val); for (i=0; i < strlen(lab); i++) { tmp = g_strdup_printf ("%c", lab[i]); if (g_strcmp0 ((char *)tmp, ".") == 0) j = i; g_free (tmp); } for (i=0; i < j + this_proj -> curves[activer][activec] -> labels_digit[axe] + 1; i++) { if (i == 0) { label = g_strdup_printf ("%c", lab[i]); } else { tmp = g_strdup_printf ("%s%c", label, lab[i]); g_free (label); label = g_strdup_printf ("%s", tmp); g_free (tmp); } } pango_layout_set_text (layout, label, -1); if (p == 1) { pango_layout_get_size (layout, & i, & j); if (axe == 0) { u = sin (this_proj -> curves[activer][activec] -> labels_angle[axe]) * (double)i; v = sin (pi / 2.0 - this_proj -> curves[activer][activec] -> labels_angle[axe]) * (double)j; ay = ay - (u + v)/PANGO_SCALE; } else { u = sqrt (1.0*i*i + 1.0*j*j); v = atan ((1.0*j) / (1.0*i)); u = u * cos (this_proj -> curves[activer][activec] -> labels_angle[axe] + v); ax = ax - u / PANGO_SCALE; } } cairo_move_to (cr, ax, ay); cairo_rotate (cr, this_proj -> curves[activer][activec] -> labels_angle[axe]); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); cairo_rotate (cr, -this_proj -> curves[activer][activec] -> labels_angle[axe]); pango_cairo_update_layout (cr, layout); } Atomes-GNU-1.1.14/src/curve/legend.c000066400000000000000000000143721457665371200170210ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file legend.c * @short Function to draw the legend * @author Sébastien Le Roux */ /* * This file: 'legend.c' * * Contains: * - The function to draw the legend * * List of functions: void show_legend (cairo_t * cr, project * this_proj, int rid, int cid); */ #include #include #include #include "global.h" #include "curve.h" extern DataLayout * get_extra_layout (int i); /*! \fn void show_legend (cairo_t * cr, project * this_proj, int rid, int cid) \brief draw legend \param cr the cairo drawing context to use for the draw \param this_proj the target project \param rid the calculation id \param cid the curve id */ void show_legend (cairo_t * cr, project * this_proj, int rid, int cid) { double x, y, z; double ih, fh; double tw, th; int w, h; int j, k, l, m; gchar * str; curve_dash * dasht; x = this_proj -> curves[rid][cid] -> legend_pos[0] * resol[0]; y = this_proj -> curves[rid][cid] -> legend_pos[1] * resol[1]; pango_layout_set_font_description (layout, pango_font_description_from_string (this_proj -> curves[rid][cid] -> legend_font)); CurveExtra * ctmp; ctmp = this_proj -> curves[rid][cid] -> extrac -> first; for ( j=this_proj -> curves[rid][cid] -> extrac -> extras ; j >= 0 ; j-- ) { y = y + 4.0*z/3.0; if (this_proj -> curves[rid][cid] -> draw_id == j) { if (this_proj -> curves[rid][cid] -> layout -> dash > 0) { dasht = selectdash (this_proj -> curves[rid][cid] -> layout -> dash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_source_rgba (cr, this_proj -> curves[rid][cid] -> layout -> datacolor.red, this_proj -> curves[rid][cid] -> layout -> datacolor.green, this_proj -> curves[rid][cid] -> layout -> datacolor.blue, this_proj -> curves[rid][cid] -> layout -> datacolor.alpha); cairo_set_line_width (cr, this_proj -> curves[rid][cid] -> layout -> thickness); cairo_move_to (cr, x-5, y); cairo_line_to (cr, x+20, y); cairo_stroke(cr); g_free (dasht); } z = x-5; draw_glyph (cr, this_proj -> curves[rid][cid] -> layout -> glyph, z, y, this_proj -> curves[rid][cid] -> layout -> datacolor, this_proj -> curves[rid][cid] -> layout -> gsize); z = x+20; draw_glyph (cr, this_proj -> curves[rid][cid] -> layout -> glyph, z, y, this_proj -> curves[rid][cid] -> layout -> datacolor, this_proj -> curves[rid][cid] -> layout -> gsize); cairo_set_source_rgba (cr, this_proj -> curves[rid][cid] -> legend_color.red, this_proj -> curves[rid][cid] -> legend_color.green, this_proj -> curves[rid][cid] -> legend_color.blue, this_proj -> curves[rid][cid] -> legend_color.alpha); str = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_proj -> curves[rid][cid] -> name); } else { DataLayout * lay = ctmp -> layout; if (lay -> dash > 0) { dasht = selectdash (lay -> dash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_source_rgba (cr, lay -> datacolor.red, lay -> datacolor.green, lay -> datacolor.blue, lay -> datacolor.alpha); cairo_set_line_width (cr, lay -> thickness); cairo_move_to (cr, x-5, y); cairo_line_to (cr, x+20, y); cairo_stroke(cr); g_free (dasht); } z = x-5; draw_glyph (cr, lay -> glyph, z, y, lay -> datacolor, lay -> gsize); z = x+20; draw_glyph (cr, lay -> glyph, z, y, lay -> datacolor, lay -> gsize); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); k = ctmp -> id.a; l = ctmp -> id.b; m = ctmp -> id.c; str = g_strdup_printf ("%s - %s", prepare_for_title(get_project_by_id(k) -> name), get_project_by_id(k) -> curves[l][m] -> name); if (ctmp -> next != NULL) ctmp = ctmp -> next; } pango_layout_set_text (layout, str, -1); pango_layout_get_size (layout, & w, & h); z = (double) h / PANGO_SCALE; if (j == 0) ih = z; fh = z; tw = max(tw, (double) w / PANGO_SCALE); cairo_move_to (cr, x + 35.0, y - z/2); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); g_free (str); } if (this_proj -> curves[rid][cid] -> show_legend_box) { dasht = selectdash (this_proj -> curves[rid][cid] -> legend_box_dash); cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0); cairo_set_source_rgba (cr, this_proj -> curves[rid][cid] -> legend_box_color.red, this_proj -> curves[rid][cid] -> legend_box_color.green, this_proj -> curves[rid][cid] -> legend_box_color.blue, this_proj -> curves[rid][cid] -> legend_box_color.alpha); cairo_set_line_width (cr, this_proj -> curves[rid][cid] -> legend_box_thickness); x = this_proj -> curves[rid][cid] -> legend_pos[0] * resol[0] - 25; th = ih + fh + (y - this_proj -> curves[rid][cid] -> legend_pos[1] * resol[1]); y = this_proj -> curves[rid][cid] -> legend_pos[1] * resol[1] - ih; tw = tw + 80; cairo_rectangle (cr, x, y, tw, th); cairo_stroke(cr); g_free (dasht); } } Atomes-GNU-1.1.14/src/curve/m_curve.c000066400000000000000000000557031457665371200172260ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_curve.c * @short Curve context menu (mouse right click) * @author Sébastien Le Roux */ /* * This file: 'm_curve.c' * * Contains: * - The curve context menu (mouse right click) * * List of functions: gboolean was_not_added (ExtraSets * sets, int a, int b, int c); void autoscale (gpointer data); void action_to_plot (pointer data); void add_extra (ExtraSets * sets, tint * id); void remove_extra (ExtraSets * sets, CurveExtra * ctmp); void prep_extra_rid (tint * data); void curve_window_add_menu_bar (tint * data); G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * curve_popup_menu (gpointer data); GMenu * curve_section (GSimpleActionGroup * action_group, gchar * act, ExtraSets * sets, gboolean add, int edit, int a, int b, tint * data); GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit); GMenu * create_curve_menu (gchar * str); GMenu * edit_data_section (GSimpleActionGroup * action_group, gchar * str, tint * data); GMenu * curve_close_section (gchar * str); GMenu * create_data_menu (GSimpleActionGroup * action_group, int pop, gchar * str, tint * data); GMenu * curve_menu_bar (project * this_proj, GSimpleActionGroup * action_group, gchar * str, tint * data); GMenu * create_add_remove_section (GSimpleActionGroup * action_group, gchar * act, int num, tint * data); GMenu * autoscale_section (gchar * str); CurveExtra * init_extra (tint * id); */ #include #include #include "global.h" #include "callbacks.h" #include "curve.h" #include "cedit.h" #include "datab.h" extern DataLayout * curve_default_layout (project * pid, int rid, int cid); int ** extrarid; // gchar * curve_act[3]={"edit", "add", "rem"}; /*! \fn void autoscale (gpointer data) \brief autoscale callback \param data the associated data pointer */ void autoscale (gpointer data) { tint * id = (tint *)data; get_project_by_id(id -> a) -> curves[id -> b][id -> c] -> autoscale[0] = TRUE; get_project_by_id(id -> a) -> curves[id -> b][id -> c] -> autoscale[1] = TRUE; update_curve (data); } /*! \fn CurveExtra * init_extra (tint * id) \brief create extra data set \param id the associated data pointer */ CurveExtra * init_extra (tint * id) { CurveExtra * ctmp = g_malloc0 (sizeof*ctmp); ctmp -> id.a = id -> a; ctmp -> id.b = id -> b; ctmp -> id.c = id -> c; ctmp -> layout = curve_default_layout (get_project_by_id(id -> a), id -> b, id -> c); ctmp -> layout -> datacolor.red = 0.0; ctmp -> layout -> datacolor.green = 0.0; ctmp -> layout -> datacolor.blue = 0.0; return ctmp; } /*! \fn void add_extra (ExtraSets * sets, tint * id) \brief add set to the extra set(s) \param sets the extra set(s) \param id the associated data pointer */ void add_extra (ExtraSets * sets, tint * id) { if (sets -> extras == 0) { sets -> first = init_extra (id); sets -> last = sets -> first; } else { sets -> last -> next = init_extra (id); sets -> last -> next -> prev = sets -> last; sets -> last = sets -> last -> next; } sets -> extras ++; } /*! \fn void remove_extra (ExtraSets * sets, CurveExtra * ctmp) \brief remove data from extra set(s) \param sets the extra set(s) \param ctmp the data set to remove from the extra set(s) */ void remove_extra (ExtraSets * sets, CurveExtra * ctmp) { if (sets -> extras == 1) { g_free (ctmp); sets -> first = NULL; sets -> last = NULL; } else { if (ctmp -> prev == NULL) { sets -> first = ctmp -> next; g_free (ctmp); sets -> first -> prev = NULL; } else if (ctmp -> next == NULL) { ctmp = ctmp -> prev; g_free (ctmp -> next); ctmp -> next = NULL; sets -> last = ctmp; } else { ctmp -> prev -> next = ctmp -> next; ctmp -> next -> prev = ctmp -> prev; g_free (ctmp); } } sets -> extras --; } void curve_window_add_menu_bar (tint * data); /*! \fn void prep_extra_rid (tint * data) \brief look up extra data set(s) for curve \param data the associated data pointer */ void prep_extra_rid (tint * data) { int i; extrarid = allocdint (nprojects, NGRAPHS); project * this_proj = get_project_by_id (data -> a); if (this_proj -> curves[data -> b][data -> c] -> extrac -> extras > 0) { CurveExtra * ctmp = this_proj -> curves[data -> b][data -> c] -> extrac -> first; for (i=0; i curves[data -> b][data -> c] -> extrac -> extras; i++) { extrarid[ctmp -> id.a][ctmp -> id.b] ++; if (ctmp -> next != NULL) ctmp = ctmp -> next; } } } /*! \fn void action_to_plot (gpointer data) \brief add to plot, or, remove curve from plot \param data the associated data pointer */ void action_to_plot (gpointer data) { int i; tint * id = (tint *)data; gboolean remove = FALSE; project * this_proj = get_project_by_id (activeg); if (this_proj -> curves[activer][activec] -> extrac > 0) { CurveExtra * ctmp = this_proj -> curves[activer][activec] -> extrac -> first; for (i=0; i curves[activer][activec] -> extrac -> extras; i++) { if (ctmp -> id.a == id -> a && ctmp -> id.b == id -> b && ctmp -> id.c == id -> c) { remove = TRUE; break; } if (ctmp -> next != NULL) ctmp = ctmp -> next; } if (! remove) { add_extra (this_proj -> curves[activer][activec] -> extrac, id); } else { remove_extra (this_proj -> curves[activer][activec] -> extrac, ctmp); } } else { add_extra (this_proj -> curves[activer][activec] -> extrac, id); } curve_window_add_menu_bar (& this_proj -> idcc[activer][activec]); update_curve ((gpointer)& this_proj -> idcc[activer][activec]); } /*! \fn G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve menu edit action callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void curve_edit_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) { edit_data (data); } /*! \fn G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve menu add / remove action callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void curve_add_remove_menu_action (GSimpleAction * action, GVariant * parameter, gpointer data) { action_to_plot (data); } /*! \fn G_MODULE_EXPORT void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief curve menu action callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) { gchar * name = g_strdup_printf ("%s", g_action_get_name(G_ACTION(action))); if (g_strcmp0 (name, "save.data") == 0) { write_curve (data); } else if (g_strcmp0 (name, "close.curve") == 0) { hide_curve (data); } else if (g_strcmp0 (name, "edit.curve") == 0) { edit_curve (data); } else if (g_strcmp0 (name, "save.image") == 0) { save_image (data); } else if (g_strcmp0 (name, "autoscale.curve") == 0) { autoscale (data); } } /*! \fn gboolean was_not_added (ExtraSets * sets, int a, int b, int c) \brief test if already in the menu or not \param sets the target extra sets \param a the target project \param b the target calculation \param c the target curve */ gboolean was_not_added (ExtraSets * sets, int a, int b, int c) { int i, j; CurveExtra * ctmp = sets -> first; for (i=0; i extras; i++) { if (ctmp -> id.a == a && ctmp -> id.b == b) { for (j=0; j numc[b]; j++) { if (ctmp -> id.c == c) return FALSE; } } if (ctmp -> next != NULL) ctmp = ctmp -> next; } return TRUE; } /*! \fn GMenu * curve_section (GSimpleActionGroup * action_group, gchar * act, ExtraSets * sets, gboolean add, int edit, int a, int b, tint * data) \brief create curve submenu \param action_group the menu action group \param act the action string \param sets the target extra sets \param add remove (0) or add (1) menu \param edit data edition (1 / 0) \param a target project \param b target calculation \param data the associated data pointer */ GMenu * curve_section (GSimpleActionGroup * action_group, gchar * act, ExtraSets * sets, gboolean add, int edit, int a, int b, tint * data) { GMenu * menu = g_menu_new (); gchar * str_a, * str_b, * str_c; gchar * text[2] = {"curve.action", "edit.data"}; project * this_proj = get_project_by_id(a); int i; for (i=0; i numc[b]; i++) { if (this_proj -> curves[b][i] -> ndata > 0) { if (((a != data -> a || b != data -> b || i != data -> c) && add == was_not_added(sets, a, b, i)) || (a == data -> a && b == data -> b && i == data -> c && edit)) { str_a = g_strdup_printf ("%s", this_proj -> curves[b][i] -> name); str_b = g_strdup_printf ("%s.%d-%d-%d", text[edit], a, b, i); str_c = g_strdup_printf ("%s.%s", act, str_b); append_menu_item (menu, (const gchar *)str_a, (const gchar *)str_c, NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); g_free (str_a); g_free (str_c); if (edit) { widget_add_action (action_group, (const gchar *)str_b, G_CALLBACK(curve_edit_menu_action), & this_proj -> idcc[b][i], FALSE, FALSE, FALSE, NULL); } else { widget_add_action (action_group, (const gchar *)str_b, G_CALLBACK(curve_add_remove_menu_action), & this_proj -> idcc[b][i], FALSE, FALSE, FALSE, NULL); } g_free (str_b); } } } return menu; } /*! \fn GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit) \brief create curve add / remove submenus \param action_group the menu action group \param act the action string \param data the associated data pointer \param add remove (0) or add (1) menu \param edit data edition (1 / 0) */ GMenu * create_curve_submenu (GSimpleActionGroup * action_group, gchar * act, tint * data, gboolean add, int edit) { project * this_proj; GMenu * menu = g_menu_new (); int i, j, k; gboolean * create_proj = allocbool (nprojects); gboolean ** create_menu = allocdbool (nprojects, NCALCS); for (i=0; i b] = FALSE; create_proj[i] = FALSE; j = 0; if (data -> b == GR || data -> b == GK) { j = 1; k = (data -> b == GR) ? GK : GR; } else if (data -> b == SQ || data -> b == SK) { j = 1; k = (data -> b == SQ) ? SK : SQ; } if (((add && extrarid[i][data -> b] < this_proj -> numc[data -> b]) || (! add && extrarid[i][data -> b] > 0)) && this_proj -> visok[data -> b]) { create_menu[i][data -> b] = TRUE; create_proj[i] = TRUE; } if (j && this_proj -> visok[k]) { create_menu[i][k] = FALSE; if (this_proj -> curves[k][0] -> ndata > 0) { if ((add && extrarid[i][k] < this_proj -> numc[k]) || (! add && extrarid[i][k] > 0)) { create_menu[i][k] = TRUE; create_proj[i] = TRUE; } } } } if (edit) { create_menu[data -> a][data -> b] = TRUE; create_proj[data -> a] = TRUE; } this_proj = get_project_by_id(data -> a); GMenu * smenu; for (i=0; i b]) append_submenu (smenu, graph_name[data -> b], curve_section(action_group, act, this_proj -> curves[data -> b][data -> c] -> extrac, add, edit, i, data -> b, data)); if (j && create_menu[i][k]) append_submenu (smenu, graph_name[k], curve_section(action_group, act, this_proj -> curves[data -> b][data -> c] -> extrac, add, edit, i, k, data)); append_submenu (menu, get_project_by_id(i) -> name, smenu); } } g_free (create_proj); g_free (create_menu); return menu; } extern GIcon * get_gicon_from_data (int format, const gchar * icon); /*! \fn GMenu * create_curve_menu (gchar * str) \brief create the curve submenu \param str the action string */ GMenu * create_curve_menu (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.edit.curve", str); append_menu_item (menu, "Edit Curve", (const gchar *)act, "E", NULL, IMG_STOCK, PAGE_SETUP, FALSE, FALSE, FALSE, NULL); g_free (act); act = g_strdup_printf ("%s.save.image", str); append_menu_item (menu, "Export Image", (const gchar *)act, "I", NULL, IMG_FILE, PACKAGE_IMG, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GMenu * edit_data_section (GSimpleActionGroup * action_group, gchar * str, tint * data) \brief create the edit data submenu \param action_group the menu action group \param str the action string \param data the associated data pointer */ GMenu * edit_data_section (GSimpleActionGroup * action_group, gchar * str, tint * data) { GMenu * menu = g_menu_new (); GMenuItem * item = g_menu_item_new ("Edit Data", NULL); gchar * str_edit = g_strdup_printf ("%s-win-edit", str); g_menu_item_set_attribute (item, "custom", "s", str_edit, NULL); g_free (str_edit); #ifdef MENU_ICONS GIcon * gicon = get_gicon_from_data (IMG_STOCK, EDITA); g_menu_item_set_icon (item, gicon); g_object_unref (gicon); #endif g_menu_item_set_submenu (item, (GMenuModel *)create_curve_submenu (action_group, str, data, FALSE, 1)); g_menu_append_item (menu, item); g_object_unref (item); return menu; } /*! \fn GMenu * curve_close_section (gchar * str) \brief create the close menu item \param str the action string */ GMenu * curve_close_section (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.close.curve", str); append_menu_item (menu, "Close", (const gchar *)act, "C", NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GMenu * create_data_menu (GSimpleActionGroup * action_group, int pop, gchar * str, tint * data) \brief create the save data submenu \param action_group the menu action group \param pop 0 = menu bar, 1 = popup menu \param str the action string \param data the associated data pointer */ GMenu * create_data_menu (GSimpleActionGroup * action_group, int pop, gchar * str, tint * data) { GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel*)edit_data_section(action_group, str, data)); gchar * act = g_strdup_printf ("%s.save.data", str); append_menu_item (menu, "Save Data", (const gchar *)act, "S", NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL); g_free (act); if (! pop) g_menu_append_section (menu, NULL, (GMenuModel *)curve_close_section(str)); return menu; } /*! \fn GMenu * curve_menu_bar (project * this_proj, GSimpleActionGroup * action_group, gchar * str, tint * data) \brief create the curve window menu bar \param this_proj the target project \param action_group the menu action group \param str the action string \param data the associated data pointer */ GMenu * curve_menu_bar (project * this_proj, GSimpleActionGroup * action_group, gchar * str, tint * data) { GMenu * menu = g_menu_new (); prep_extra_rid (data); append_submenu (menu, "Data", create_data_menu(action_group, 0, str, data)); g_free (extrarid); append_submenu (menu, "Curve", create_curve_menu(str)); return menu; } /*! \fn void curve_window_add_menu_bar (tint * data) \brief add menu bar to the curve window \param data the associated data pointer */ void curve_window_add_menu_bar (tint * data) { project * this_proj = get_project_by_id (data -> a); this_proj -> curves[data -> b][data -> c] -> pos = destroy_this_widget (this_proj -> curves[data -> b][data -> c] -> pos); this_proj -> curves[data -> b][data -> c] -> pos = gtk_label_new (" "); this_proj -> curves[data -> b][data -> c] -> curve_hbox = destroy_this_widget (this_proj -> curves[data -> b][data -> c] -> curve_hbox); this_proj -> curves[data -> b][data -> c] -> curve_hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> curves[data -> b][data -> c] -> curve_vbox, this_proj -> curves[data -> b][data -> c] -> curve_hbox, FALSE, FALSE, 0); gchar * str = g_strdup_printf ("c-%d", this_proj -> curves[data -> b][data -> c] -> action_id); #ifdef GTK3 GtkWidget * menu = gtk_menu_bar_new_from_model ((GMenuModel *)curve_menu_bar(this_proj, this_proj -> curves[data -> b][data -> c] -> action_group, str, data)); #else GtkWidget * menu = gtk_popover_menu_bar_new_from_model ((GMenuModel *)curve_menu_bar(this_proj, this_proj -> curves[data -> b][data -> c] -> action_group, str, data)); #endif g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> curves[data -> b][data -> c] -> curve_hbox, menu, TRUE, TRUE, 0); gtk_label_align (this_proj -> curves[data -> b][data -> c] -> pos, 1.0, 0.5); add_box_child_end (this_proj -> curves[data -> b][data -> c] -> curve_hbox, this_proj -> curves[data -> b][data -> c] -> pos, FALSE, FALSE, 0); show_the_widgets (this_proj -> curves[data -> b][data -> c] -> curve_hbox); } /*! \fn GMenu * create_add_remove_section (GSimpleActionGroup * action_group, gchar * act, int num, tint * data) \brief create the add / remove curve submenus \param action_group the menu action group \param act the action string \param num the number of curve(s) to add \param data the associatec data pointer */ GMenu * create_add_remove_section (GSimpleActionGroup * action_group, gchar * act, int num, tint * data) { GMenu * menu = g_menu_new (); GMenuItem * item = g_menu_item_new ("Add Data Set", NULL); #ifdef MENU_ICONS GIcon * gicon = get_gicon_from_data (IMG_STOCK, LIST_ADD); g_menu_item_set_icon (item, gicon); g_object_unref (gicon); #endif project * this_proj = get_project_by_id (data -> a); if (this_proj -> curves[data -> b][data -> c] -> extrac -> extras < num) { g_menu_item_set_submenu (item, (GMenuModel *)create_curve_submenu (action_group, act, data, TRUE, 0)); } else { g_menu_item_set_attribute (item, "action", "s", "None", NULL); } g_menu_append_item (menu, item); g_object_unref (item); item = g_menu_item_new ("Remove Data Set", NULL); #ifdef MENU_ICONS gicon = get_gicon_from_data (IMG_STOCK, LIST_REM); g_menu_item_set_icon (item, gicon); g_object_unref (gicon); #endif if (this_proj -> curves[data -> b][data -> c] -> extrac -> extras > 0) { g_menu_item_set_submenu (item, (GMenuModel *)create_curve_submenu (action_group, act, data, FALSE, 0)); } else { g_menu_item_set_attribute (item, "action", "s", "None", NULL); } g_menu_append_item (menu, item); g_object_unref (item); return menu; } /*! \fn GMenu * autoscale_section (gchar * str) \brief create autoscale menu item \param str the action string id */ GMenu * autoscale_section (gchar * str) { GMenu * menu = g_menu_new (); gchar * act = g_strdup_printf ("%s.autoscale.curve", str); append_menu_item (menu, "Autoscale", (const gchar *)act, "A", NULL, IMG_STOCK, FITBEST, FALSE, FALSE, FALSE, NULL); g_free (act); return menu; } /*! \fn GtkWidget * curve_popup_menu (gpointer data) \brief create curve popup menu \param data the associated data pointer */ GtkWidget * curve_popup_menu (gpointer data) { GtkWidget * curve_pop_menu; int i, j; CurveState * cstate = (CurveState *)data; GSimpleActionGroup * curve_popup_actions = g_simple_action_group_new (); GSimpleAction * curve_popup_action[5]; curve_popup_action[0] = g_simple_action_new ("save.data", NULL); curve_popup_action[1] = g_simple_action_new ("close.curve", NULL); curve_popup_action[2] = g_simple_action_new ("edit.curve", NULL); curve_popup_action[3] = g_simple_action_new ("save.image", NULL); curve_popup_action[4] = g_simple_action_new ("autoscale.curve", NULL); for (i=0; i<5; i++) { g_action_map_add_action (G_ACTION_MAP(curve_popup_actions), G_ACTION(curve_popup_action[i])); g_signal_connect (curve_popup_action[i], "activate", G_CALLBACK(curve_menu_bar_action), cstate -> id); } prep_extra_rid (cstate -> id); gchar * str = g_strdup_printf ("mc-%d", get_project_by_id(cstate -> id -> a) -> curves[cstate -> id -> b][cstate -> id -> c] -> action_id); GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel *)create_data_menu(curve_popup_actions, 1, str, cstate -> id)); g_menu_append_section (menu, NULL, (GMenuModel *)create_curve_menu(str)); i = -1; for ( j=0 ; j < nprojects; j++ ) { i += get_project_by_id(j) -> numc[cstate -> id -> b]; if (cstate -> id -> b == GR || cstate -> id -> b == GK) { i += get_project_by_id(j) -> numc[(cstate -> id -> b == GR) ? GK : GR]; } else if (cstate -> id -> b == SQ || cstate -> id -> b == SK) { i += get_project_by_id(j) -> numc[(cstate -> id -> b == SQ) ? SK : SQ]; } } g_menu_append_section (menu, NULL, (GMenuModel *)create_add_remove_section(curve_popup_actions, str, i, cstate -> id)); g_menu_append_section (menu, NULL, (GMenuModel *)autoscale_section(str)); g_menu_append_section (menu, NULL, (GMenuModel *)curve_close_section(str)); g_free (extrarid); #ifdef GTK4 curve_pop_menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)menu, GTK_POPOVER_MENU_NESTED); gtk_widget_set_parent (curve_pop_menu, get_project_by_id(cstate -> id -> a) -> curves[cstate -> id -> b][cstate -> id -> c] -> window); gtk_widget_set_size_request (curve_pop_menu, -1, 305); #else curve_pop_menu = gtk_menu_new_from_model ((GMenuModel *)menu); #endif // Finally adding actions to the menu gtk_widget_insert_action_group (curve_pop_menu, str, G_ACTION_GROUP(curve_popup_actions)); g_free (str); return curve_pop_menu; } Atomes-GNU-1.1.14/src/curve/show.c000066400000000000000000000273611457665371200165450ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file show.c * @short Functions to draw the complete graph * @author Sébastien Le Roux */ /* * This file: 'show.c' * * Contains: * - The functions to draw the complete graph * * List of functions: gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve); G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data); G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data); void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve); void hide_curve (gpointer data); */ #include #include #include #include #include #include "global.h" #include "curve.h" extern void adjust_tool_model (int calc, int curve, gchar * string_path); #ifdef GTK3 /*! \fn gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve) \brief show curve callback GTK4 \param grwdget the GtkWidget sending the signal \param cr the cairo drawing context to use for the draw \param curve the associated data pointer */ gboolean show_curve (GtkWidget * grwdget, cairo_t * cr, gpointer curve) #else /*! \fn void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve) \brief show curve callback GTK3 \param area the GtkDrawingArea sending the signal \param cr the cairo drawing context to use for the draw \param width drawing area width \param height drawing area height \param curve the associated pointer data */ void show_curve (GtkDrawingArea * area, cairo_t * cr, int width, int height, gpointer curve) #endif { int pid, rid, cid; int where; int i, j, k; double alp; gboolean upm; tint * cd = (tint *)curve; pid = cd -> a; rid = cd -> b; cid = cd -> c; activec = cid; activer = rid; cairo_surface_t * surface; project * this_proj = get_project_by_id(pid); where = this_proj -> curves[rid][cid] -> format; // g_print ("where= %d, width = %d, height= %d\n", where, width, height); this_proj -> curves[rid][cid] -> format = 0; if (where == 0) { alp=1.0; #ifdef GTK3 this_proj -> curves[rid][cid] -> wsize[0] = gtk_widget_get_allocated_width (grwdget); this_proj -> curves[rid][cid] -> wsize[1] = gtk_widget_get_allocated_height (grwdget); #else this_proj -> curves[rid][cid] -> wsize[0] = width; this_proj -> curves[rid][cid] -> wsize[1] = height; #endif for (j=0; j<2; j++) { resol[j] = this_proj -> curves[rid][cid] -> wsize[j]; if (xyp[j] != NULL) update_entry_int (GTK_ENTRY(xyp[j]), this_proj -> curves[rid][cid] -> wsize[j]); } } else { alp=0.0; if (where == 1) { alp = back_alpha; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, resol[0], resol[1]); } else if (where == 2) { alp=1.0; surface = cairo_pdf_surface_create (curve_image_file, (double)resol[0], (double)resol[1]); } else if (where == 3) { alp = back_alpha; surface = cairo_svg_surface_create (curve_image_file, (double)resol[0], (double)resol[1]); } else if (where == 4) { surface = cairo_ps_surface_create (curve_image_file, (double)resol[0], (double)resol[1]); } cr = cairo_create (surface); } // Painting the background cairo_set_source_rgba (cr, this_proj -> curves[rid][cid] -> backcolor.red, this_proj -> curves[rid][cid] -> backcolor.green, this_proj -> curves[rid][cid] -> backcolor.blue, alp); cairo_paint (cr); cairo_set_source_rgba (cr, this_proj -> curves[rid][cid] -> backcolor.red, this_proj -> curves[rid][cid] -> backcolor.green, this_proj -> curves[rid][cid] -> backcolor.blue, 1.0); // Creating Pango Font Layout layout = pango_cairo_create_layout (cr); upm = FALSE; // Autoscale and autoticking for X and or Y axis for (j=0; j<2; j++) { if (this_proj -> curves[rid][cid] -> autoscale[j]) { // Autoscale autoscale_axis (this_proj, rid, cid, j); this_proj -> curves[rid][cid] -> autoscale[j] = FALSE; // Autoticking this_proj -> curves[rid][cid] -> majt[j] = scale (this_proj -> curves[rid][cid] -> axmax[j] - this_proj -> curves[rid][cid] -> axmin[j]); this_proj -> curves[rid][cid] -> mint[j] = 2; upm = TRUE; } cxy[j] = this_proj -> curves[rid][cid] -> axmin[j]; } xmax = this_proj -> curves[rid][cid] -> axmax[0] - cxy[0]; ymax = this_proj -> curves[rid][cid] -> axmax[1] - cxy[1]; // Ensuring no log scale issues if (this_proj -> curves[rid][cid] -> scale[0]) setup_xaxis_log (cr, this_proj, rid, cid, FALSE); if (this_proj -> curves[rid][cid] -> scale[1]) setup_yaxis_log (cr, this_proj, rid, cid, FALSE); if (upm) { if (axischoice != NULL) { j = gtk_combo_box_get_active (GTK_COMBO_BOX(axischoice)); update_entry_double (GTK_ENTRY(vmin), this_proj -> curves[rid][cid] -> axmin[j]); update_entry_double (GTK_ENTRY(vmax), this_proj -> curves[rid][cid] -> axmax[j]); update_entry_double (GTK_ENTRY(majt), this_proj -> curves[rid][cid] -> majt[j]); update_entry_int (GTK_ENTRY(nmi[j]), this_proj -> curves[rid][cid] -> mint[j] - 1); } } prep_plot (this_proj, rid, cid); // let's go for the plot // first we start by the possible extra curves i = 0; CurveExtra * ctmp = this_proj -> curves[rid][cid] -> extrac -> last; for ( j=0 ; j < this_proj -> curves[rid][cid] -> extrac -> extras + 1; j++ ) { if (this_proj -> curves[rid][cid] -> draw_id == j) { if (this_proj -> curves[rid][cid] -> bshift && this_proj -> curves[rid][cid] -> layout -> aspect && this_proj -> curves[rid][cid] -> extrac -> extras) i ++; k = (this_proj -> curves[rid][cid] -> layout -> aspect) ? i : 0; draw_curve (cr, cid, rid, this_proj, this_proj -> curves[rid][cid] -> ndata, this_proj -> curves[rid][cid] -> layout -> datacolor, this_proj -> curves[rid][cid] -> scale[0], this_proj -> curves[rid][cid] -> scale[1], this_proj -> curves[rid][cid] -> layout -> aspect, this_proj -> curves[rid][cid] -> layout -> dash, this_proj -> curves[rid][cid] -> layout -> thickness, this_proj -> curves[rid][cid] -> layout -> glyph, this_proj -> curves[rid][cid] -> layout -> gsize, this_proj -> curves[rid][cid] -> layout -> gfreq, this_proj -> curves[rid][cid] -> layout -> hwidth, this_proj -> curves[rid][cid] -> layout -> hopac, this_proj -> curves[rid][cid] -> layout -> hpos, this_proj -> curves[rid][cid] -> extrac -> extras, k); } else { if (this_proj -> curves[rid][cid] -> bshift && ctmp -> layout -> aspect) i++; k = (ctmp -> layout -> aspect) ? i : 0; draw_curve (cr, ctmp -> id.c, ctmp -> id.b, get_project_by_id(ctmp -> id.a), get_project_by_id(ctmp -> id.a) -> curves[ctmp -> id.b][ctmp -> id.c] -> ndata, ctmp -> layout -> datacolor, this_proj -> curves[rid][cid] -> scale[0], this_proj -> curves[rid][cid] -> scale[1], ctmp -> layout -> aspect, ctmp -> layout -> dash, ctmp -> layout -> thickness, ctmp -> layout -> glyph, ctmp -> layout -> gsize, ctmp -> layout -> gfreq, ctmp -> layout -> hwidth, ctmp -> layout -> hopac, ctmp -> layout -> hpos, this_proj -> curves[rid][cid] -> extrac -> extras, k); if (ctmp -> prev != NULL) ctmp = ctmp -> prev; } } // Draw the axis bars - in option if (this_proj -> curves[rid][cid] -> show_axis[1]) { if (this_proj -> curves[rid][cid] -> axmin[0] < 0.0 && this_proj -> curves[rid][cid] -> axmax[0] > 0.0) { cairo_set_line_width (cr, 1.0); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); cairo_move_to (cr, x_min - this_proj -> curves[rid][cid] -> axmin[0] * XDRAW / xmax, y_min); cairo_line_to (cr, x_min - this_proj -> curves[rid][cid] -> axmin[0] * XDRAW / xmax, y_max); cairo_stroke (cr); } } if (this_proj -> curves[rid][cid] -> show_axis[0]) { if (this_proj -> curves[rid][cid] -> axmin[1] < 0.0 && this_proj -> curves[rid][cid] -> axmax[1] > 0.0) { cairo_set_line_width (cr, 1.0); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_set_source_rgba (cr, 0.0, 0.0, 0.0, 1.0); cairo_move_to (cr, x_min, y_min - this_proj -> curves[rid][cid] -> axmin[1] * YDRAW / ymax); cairo_line_to (cr, x_max, y_min - this_proj -> curves[rid][cid] -> axmin[1] * YDRAW / ymax); cairo_stroke (cr); } } // Maybe show the frame if (this_proj -> curves[rid][cid] -> show_frame) draw_frame (cr, this_proj, rid, cid); // maybe for the title if (this_proj -> curves[rid][cid] -> show_title) show_title (cr, this_proj, rid, cid); // and maybe for the legend if (this_proj -> curves[rid][cid] -> show_legend) show_legend (cr, this_proj, rid, cid); // and we plot the complete curve if (where == 0) { this_proj -> curves[rid][cid] -> surface = cairo_surface_reference (cairo_get_target (cr)); } else if (where == 1) { cairo_surface_write_to_png (surface, curve_image_file); cairo_surface_destroy (surface); } else if (where == 2 || where == 4) { cairo_show_page (cr); cairo_surface_destroy (surface); } else if (where == 3) { cairo_surface_destroy (surface); } if (where > 0) cairo_destroy (cr); this_proj -> curves[rid][cid] -> displayed = TRUE; #ifdef GTK3 return TRUE; #endif } /*! \fn void hide_curve (gpointer data) \brief hide curve \param data the associated data pointer */ void hide_curve (gpointer data) { tint * idc = (tint *)data; gtk_widget_hide (get_project_by_id(idc -> a) -> curves[idc -> b][idc -> c] -> window); if (idc -> a == activep) { adjust_tool_model (idc -> b, idc -> c, get_project_by_id(idc -> a) -> curves[idc -> b][idc -> c] -> path); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data) \brief hide curve callback GTK4 \param thecurve the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean to_hide_curve (GtkWindow * thecurve, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data) \brief hide curve callback GTK3 \param thecurve the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean to_hide_curve (GtkWidget * thecurve, GdkEvent * event, gpointer data) #endif { hide_curve (data); return TRUE; } Atomes-GNU-1.1.14/src/curve/tab-1.c000066400000000000000000000647331457665371200164750ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file tab-1.c * @short 1st tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-1.c' * * Contains: * - The 1st tab of the curve layout edition dialog * * List of functions: void set_frame_style (gpointer data); G_MODULE_EXPORT void set_window_size (GtkEntry * maj, gpointer data); G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_title (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_title_default (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_title_custom (GtkEntry * tit, gpointer data); G_MODULE_EXPORT void set_title_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_title_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_title_pos (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_frame (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_background_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_frame_type (GtkComboBox * fbox, gpointer data); G_MODULE_EXPORT void set_frame_line (GtkComboBox * fbox, gpointer data); G_MODULE_EXPORT void set_frame_thickness (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_frame_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_frame_pos (GtkEntry * fen, gpointer data); cairo_surface_t * draw_frame_surface (int tf, int da, double ti, double x[2], double y[2], ColRGBA dcol, ColRGBA bcol); GtkWidget * create_tab_1 (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "cedit.h" extern void set_data_style (gpointer data); GtkWidget * title_box = NULL; GtkWidget * frame[11]; GtkWidget * frame_box = NULL; GtkWidget * frame_style_area = NULL; GtkWidget * frame_pix_box = NULL; char * ctext[2]; qint dataxe[2]; qint framxe[4]; GtkWidget * custom_title = NULL; int a, b, c, d; /*! \fn G_MODULE_EXPORT void set_window_size (GtkEntry * maj, gpointer data) \brief change window size entry callback \param maj the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_window_size (GtkEntry * maj, gpointer data) { const gchar *m; char * text[2]; int i; qint * ad = (qint *)data; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; project * this_proj = get_project_by_id(a); int shift = get_curve_shift (this_proj, b, c); text[0] = "X size must be > 0"; text[1] = "Y size must be > 0"; m = entry_get_text (maj); i = atof(m); if (i > 0) { switch (d) { case 0: resize_this_window (this_proj -> curves[b][c] -> window, i, this_proj -> curves[b][c] -> wsize[1] + shift); break; case 1: resize_this_window (this_proj -> curves[b][c] -> window, this_proj -> curves[b][c] -> wsize[0], i + shift); break; } this_proj -> curves[b][c] -> wsize[d] = i; } else { show_warning (text[d], this_proj -> curves[b][c] -> window); } update_entry_int (maj, this_proj -> curves[b][c] -> wsize[d]); } /*! \fn cairo_surface_t * draw_frame_surface (int tf, int da, double ti, double x[2], double y[2], ColRGBA dcol, ColRGBA bcol) \brief draw frame preview \param tf frame type \param da frame dash \param ti frame thickness \param x x positions (min / max) \param y y positions (min / max) \param dcol frame color \param bcol background color */ cairo_surface_t * draw_frame_surface (int tf, int da, double ti, double x[2], double y[2], ColRGBA dcol, ColRGBA bcol) { cairo_surface_t * cst; cairo_t * tcst; int r[2]; r[0] = 100; r[1] = 100; cst = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 100, 100); tcst = cairo_create (cst); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); show_frame (tcst, tf, da, r, ti, x, y, dcol); cairo_destroy (tcst); return cst; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data) \brief show / hide title toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_title (GtkToggleButton * but, gpointer data) \brief show / hide title toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title (GtkToggleButton * but, gpointer data) #endif { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); #ifdef GTK4 this_proj -> curves[b][c] -> show_title = gtk_check_button_get_active (but); #else this_proj -> curves[b][c] -> show_title = gtk_toggle_button_get_active (but); #endif widget_set_sensitive (title_box, this_proj -> curves[b][c] -> show_title); update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data) \brief use / not default title toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_default (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_title_default (GtkToggleButton * but, gpointer data) \brief use / not default title toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_default (GtkToggleButton * but, gpointer data) #endif { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); #ifdef GTK4 this_proj -> curves[b][c] -> default_title = gtk_check_button_get_active (but); #else this_proj -> curves[b][c] -> default_title = gtk_toggle_button_get_active (but); #endif widget_set_sensitive (custom_title, ! this_proj -> curves[b][c] -> default_title); if (this_proj -> curves[b][c] -> default_title) { g_free (this_proj -> curves[b][c] -> title); this_proj -> curves[b][c] -> title = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_proj -> curves[b][c] -> name); } update_entry_text (GTK_ENTRY(custom_title), this_proj -> curves[b][c] -> title); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_custom (GtkEntry * tit, gpointer data) \brief set custom title entry callback \param tit the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_custom (GtkEntry * tit, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); g_free (this_proj -> curves[b][c] -> title); this_proj -> curves[b][c] -> title = g_strdup_printf ("%s", entry_get_text (tit)); update_entry_text (tit, this_proj -> curves[b][c] -> title); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_font (GtkFontButton * fontb, gpointer data) \brief set title font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_font (GtkFontButton * fontb, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); g_free (this_proj -> curves[b][c] -> title_font); this_proj -> curves[b][c] -> title_font = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_color (GtkColorChooser * colob, gpointer data) \brief set title color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_color (GtkColorChooser * colob, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> title_color = get_button_color (colob); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_title_pos (GtkEntry * entry, gpointer data) \brief set axis title position entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_title_pos (GtkEntry * entry, gpointer data) { const gchar * p; double v; qint * ad = (qint *)data; tint cd; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; project * this_proj = get_project_by_id(a); p = entry_get_text (entry); v = atof(p); if (v >= 0.0 && v <= 1.0) { this_proj -> curves[b][c] -> title_pos[d] = v; } else { show_warning (ctext[ad -> d], this_proj -> curves[b][c] -> window); } update_entry_double (entry, this_proj -> curves[b][c] -> title_pos[d]); cd.a = ad -> a; cd.b = ad -> b; cd.c = ad -> c; update_curve ((gpointer)& cd); } /*! \fn void set_frame_style (gpointer data) \brief create frame preview \param data the associated data pointer */ void set_frame_style (gpointer data) { cairo_surface_t * surf; tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); surf = draw_frame_surface (this_proj -> curves[b][c] -> frame_type, this_proj -> curves[b][c] -> frame_dash, this_proj -> curves[b][c] -> frame_thickness, this_proj -> curves[b][c] -> frame_pos[0], this_proj -> curves[b][c] -> frame_pos[1], this_proj -> curves[b][c] -> frame_color, this_proj -> curves[b][c] -> backcolor); frame_style_area = destroy_this_widget (frame_style_area); frame_style_area = create_image_from_data (IMG_SURFACE, (gpointer)surf); cairo_surface_destroy (surf); widget_set_sensitive (frame_style_area, this_proj -> curves[b][c] -> show_frame); gtk_widget_show (frame_style_area); #ifdef GTK4 gtk_widget_set_hexpand (frame_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, frame_pix_box, frame_style_area, TRUE, TRUE, 20); update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data) \brief show / hide frame toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_frame (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_frame (GtkToggleButton * but, gpointer data) \brief show / hide frame toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_frame (GtkToggleButton * but, gpointer data) #endif { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); #ifdef GTK4 this_proj -> curves[b][c] -> show_frame = gtk_check_button_get_active (but); #else this_proj -> curves[b][c] -> show_frame = gtk_toggle_button_get_active (but); #endif widget_set_sensitive (frame_box, this_proj -> curves[b][c] -> show_frame); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_background_color (GtkColorChooser * colob, gpointer data) \brief change background color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_background_color (GtkColorChooser * colob, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> backcolor = get_button_color (colob); set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_type (GtkComboBox * fbox, gpointer data) \brief change frame type \param fbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_type (GtkComboBox * fbox, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; get_project_by_id(a) -> curves[b][c] -> frame_type = gtk_combo_box_get_active (GTK_COMBO_BOX(fbox)); set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_line (GtkComboBox * fbox, gpointer data) \brief change frame line type \param fbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_line (GtkComboBox * fbox, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; get_project_by_id(a) -> curves[b][c] -> frame_dash = gtk_combo_box_get_active (GTK_COMBO_BOX(fbox)) + 1; set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_thickness (GtkEntry * entry, gpointer data) \brief set frame thickness entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_thickness (GtkEntry * entry, gpointer data) { const gchar * str; tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; str = entry_get_text (entry); project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> frame_thickness = atof(str); update_entry_double (entry, this_proj -> curves[b][c] -> frame_thickness); set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_color (GtkColorChooser * colob, gpointer data) \brief set frame color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_color (GtkColorChooser * colob, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> frame_color = get_button_color (colob); set_frame_style (data); } /*! \fn G_MODULE_EXPORT void set_frame_pos (GtkEntry * fen, gpointer data) \brief set frame position entry callback \param fen the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frame_pos (GtkEntry * fen, gpointer data) { qint * cd = (qint *)data; int k; const gchar * m; double z; a = cd -> a; b = cd -> b; c = cd -> c; d = cd -> d; project * this_proj = get_project_by_id(a); m = entry_get_text (fen); z= atof(m); if (d < 2) { if (d == 0) { k = 0; if (z < this_proj -> curves[b][c] -> frame_pos[0][1]) { this_proj -> curves[b][c] -> frame_pos[0][0] = z; } else { show_warning ("Frame x min must be < to frame x max", this_proj -> curves[b][c] -> window); } } else if (d == 1) { k = 1; if (z > this_proj -> curves[b][c] -> frame_pos[0][0]) { this_proj -> curves[b][c] -> frame_pos[0][1] = z; } else { show_warning ("Frame x max must be > to frame x min", this_proj -> curves[b][c] -> window); } } update_entry_double (fen, this_proj -> curves[b][c] -> frame_pos[0][k]); } else { if (d == 2) { k = 0; if (z > this_proj -> curves[b][c] -> frame_pos[1][1]) { this_proj -> curves[b][c] -> frame_pos[1][0] = z; } else { show_warning ("Frame y min must be > to frame y max", this_proj -> curves[b][c] -> window); } } else { k = 1; if (z < this_proj -> curves[b][c] -> frame_pos[1][0]) { this_proj -> curves[b][c] -> frame_pos[1][1] = z; } else { show_warning ("Frame y max must be < to frame y min", this_proj -> curves[b][c] -> window); } } update_entry_double (fen, this_proj -> curves[b][c] -> frame_pos[1][k]); } set_frame_style (data); } /*! \fn GtkWidget * create_tab_1 (gpointer data) \brief handle the creation of the 1st tab of the curve edition dialog \param data the associated data pointer */ GtkWidget * create_tab_1 (gpointer data) { GtkWidget * graphbox; GtkWidget * fbox; GtkWidget * ghbox; GtkWidget * gvbox; GtkWidget * frame_style_box; GtkWidget * frame_thickness; GtkWidget * xyf; gchar * str[2]; str[0] = "min"; str[1] = "max"; gchar * axl[2]; axl[0] = "x"; axl[1] = "y"; gchar * ftb[5]; ftb[0] = "closed"; ftb[1] = "top open"; ftb[2] = "right open"; ftb[3] = "left open"; ftb[4] = "open"; int xlgt, ylgt; int i, j, k; tint * cd = (tint *) data; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); // Axis related signals for ( i=0 ; i < 2 ; i++ ) { dataxe[i].a = a; dataxe[i].b = b; dataxe[i].c = c; dataxe[i].d = i; xyp[i] = create_entry (G_CALLBACK(set_window_size), 100, 10, FALSE, (gpointer)& dataxe[i]); } graphbox = create_vbox (BSEP); ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, ghbox, FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label("Size:", 50, 35, 1.0, 0.5), FALSE, FALSE, 20); xlgt = gtk_widget_get_allocated_width (this_proj -> curves[b][c] -> plot); ylgt = gtk_widget_get_allocated_height (this_proj -> curves[b][c] -> plot); update_entry_int (GTK_ENTRY(xyp[0]), xlgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, xyp[0], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label("x", -1, -1, 0.5, 0.5), FALSE, FALSE, 10); update_entry_int (GTK_ENTRY(xyp[1]), ylgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, xyp[1], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label("pixels", -1, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, check_button ("Insert title", -1, -1, this_proj -> curves[b][c] -> show_title, G_CALLBACK(set_title), data), FALSE, FALSE, 10); title_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, title_box, FALSE, FALSE, 0); ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, title_box, ghbox, FALSE, FALSE, 2); gvbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, gvbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, gvbox, check_button ("Default title", 100, 35, this_proj -> curves[b][c] -> default_title, G_CALLBACK(set_title_default), data), FALSE, FALSE, 40); custom_title = create_entry (G_CALLBACK(set_title_custom), 200, 15, TRUE, data); gtk_entry_set_alignment (GTK_ENTRY(custom_title), 0.0); if (this_proj -> curves[b][c] -> show_title) { widget_set_sensitive (custom_title, ! this_proj -> curves[b][c] -> default_title); } else { widget_set_sensitive (custom_title, 0); } update_entry_text (GTK_ENTRY(custom_title), this_proj -> curves[b][c] -> title); add_box_child_end (gvbox, custom_title, FALSE, FALSE, 0); add_box_child_end (bbox (title_box, "Font:"), font_button (this_proj -> curves[b][c] -> title_font, 150, 35, G_CALLBACK(set_title_font), data), FALSE, FALSE, 0); add_box_child_end (bbox (title_box, "Color:"), color_button (this_proj -> curves[b][c] -> title_color, TRUE, 150, 30, G_CALLBACK(set_title_color), data), FALSE, FALSE, 0); ghbox = bbox (title_box, "Position:"); GtkWidget * txyc; for ( i=0 ; i < 2 ; i++ ) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label(lapos[i], (i==0)?10:30, -1, 1.0, 0.5), FALSE, FALSE, 5); txyc = create_entry (G_CALLBACK(set_title_pos), 100, 10, FALSE, (gpointer)& dataxe[i]); update_entry_double (GTK_ENTRY(txyc), this_proj -> curves[b][c] -> title_pos[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, txyc, FALSE, FALSE, 5); } widget_set_sensitive (title_box, this_proj -> curves[b][c] -> show_title); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 10); ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, ghbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, markup_label("Background color:", 120, 30, 0.0, 0.5), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, color_button (this_proj -> curves[b][c] -> backcolor, TRUE, 100, -1, G_CALLBACK(set_background_color), data), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 10); // Frame add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, check_button ("Show/hide frame", -1, -1, this_proj -> curves[b][c] -> show_frame, G_CALLBACK(set_show_frame), data), FALSE, FALSE, 10); frame_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, graphbox, frame_box, FALSE, FALSE, 0); frame_pix_box = create_hbox (0); frame_style_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, frame_box, frame_pix_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, frame_pix_box, frame_style_box, FALSE, FALSE, 0); // Frame style fbox = create_combo (); for (i=0; i<5; i++) { combo_text_append (fbox, ftb[i]); } gtk_widget_set_size_request (fbox, 150, 30); gtk_combo_box_set_active(GTK_COMBO_BOX(fbox), this_proj -> curves[b][c] -> frame_type); g_signal_connect (G_OBJECT(fbox), "changed", G_CALLBACK(set_frame_type), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, "Type:"), fbox, FALSE, FALSE, 0); // Frame line style fbox = create_combo (); for ( i=1 ; i < ndash ; i++) { combo_text_append (fbox, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (fbox, 150, 30); gtk_combo_box_set_active(GTK_COMBO_BOX(fbox), this_proj -> curves[b][c] -> frame_dash - 1); g_signal_connect (G_OBJECT(fbox), "changed", G_CALLBACK(set_frame_line), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, "Line style:"), fbox, FALSE, FALSE, 0); // Frame line width frame_thickness = create_entry (G_CALLBACK(set_frame_thickness), -1, 10, FALSE, data); update_entry_double (GTK_ENTRY(frame_thickness), this_proj -> curves[b][c] -> frame_thickness); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, "Line width:"), frame_thickness, FALSE, FALSE, 0); // Frame color add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (frame_style_box, "Color:"), color_button (this_proj -> curves[b][c] -> frame_color, TRUE, 150, 30, G_CALLBACK(set_frame_color), data), FALSE, FALSE, 0); // Frame pix cairo_surface_t * frame = draw_frame_surface (this_proj -> curves[b][c] -> frame_type, this_proj -> curves[b][c] -> frame_dash, this_proj -> curves[b][c] -> frame_thickness, this_proj -> curves[b][c] -> frame_pos[0], this_proj -> curves[b][c] -> frame_pos[1], this_proj -> curves[b][c] -> frame_color, this_proj -> curves[b][c] -> backcolor); frame_style_area = create_image_from_data (IMG_SURFACE, (gpointer)frame); cairo_surface_destroy (frame); gtk_widget_set_size_request (frame_pix_box, -1, 150); #ifdef GTK4 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, frame_pix_box, markup_label(" ", 20, -1, 0.0, 0.0), FALSE, FALSE, 0); gtk_widget_set_hexpand (frame_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, frame_pix_box, frame_style_area, FALSE, FALSE, 20); bbox (frame_box, "Position: "); GtkWidget * fxyc; k = -1; for (i=0; i<2; i++) { ghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, frame_box, ghbox, FALSE, FALSE, 0); for (j=0; j<2; j++) { k = k + 1; framxe[k].a = a; framxe[k].b = b; framxe[k].c = c; framxe[k].d = k; xyf = markup_label (g_strdup_printf ("%s %s: ",axl[i], str[j]), 70, -1, 1.0, 0.5); widget_set_sensitive (xyf, this_proj -> curves[b][c] -> show_frame); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, xyf, FALSE, FALSE, 20); fxyc = create_entry (G_CALLBACK(set_frame_pos), 100, 10, FALSE, (gpointer)& framxe[k]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ghbox, fxyc, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(fxyc), this_proj -> curves[b][c] -> frame_pos[i][j]); } } widget_set_sensitive (frame_box, this_proj -> curves[b][c] -> show_frame); return graphbox; } Atomes-GNU-1.1.14/src/curve/tab-2.c000066400000000000000000001021561457665371200164660ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file tab-2.c * @short 2nd tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-2.c' * * Contains: * - The 2nd tab of the curve layout edition dialog * * List of functions: void set_data_style (gpointer data); static void fill_org_model (GtkListStore * store, gpointer data); G_MODULE_EXPORT void set_data_glyph (GtkComboBox * gbox, gpointer data); G_MODULE_EXPORT void set_data_dash (GtkComboBox * gbox, gpointer data); G_MODULE_EXPORT void set_data_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_data_thickness (GtkEntry * thickd, gpointer data); G_MODULE_EXPORT void set_data_glyph_size (GtkEntry * glsize, gpointer data); G_MODULE_EXPORT void set_data_hist_width (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_data_hist_opac (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_data_hist_pos (GtkComboBox * gbox, gpointer data); G_MODULE_EXPORT void set_data_glyph_freq (GtkEntry * glfreq, gpointer data); G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void move_back_front (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data); G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data); G_MODULE_EXPORT void set_bshift (GtkToggleButton * shift, gpointer data); GtkWidget * create_org_list (gpointer data); GtkWidget * create_tab_2 (gpointer data); DataLayout * get_extra_layout (int i); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "cedit.h" GtkWidget * data_shape = NULL; GtkWidget * data_color = NULL; GtkWidget * data_aspect = NULL; GtkWidget * data_thickness = NULL; GtkWidget * data_glyph = NULL; GtkWidget * data_glyph_size = NULL; GtkWidget * data_glyph_freq = NULL; GtkWidget * data_hist_width = NULL; GtkWidget * data_hist_opac = NULL; GtkWidget * data_hist_pos = NULL; GtkWidget * data_dash = NULL; GtkWidget * stylearea = NULL; GtkWidget * pixarea = NULL; GtkWidget * Glyph_box = NULL; GtkWidget * Hist_box = NULL; GtkWidget * xyl[2]; GtkWidget * orgtree = NULL; GtkTreeModel * orgmodel = NULL; GtkWidget * datascroll = NULL; extern qint dataxe[2]; extern int a, b, c, d; /*! \fn cairo_surface_t * draw_surface (int aspect, double hwidth, double hopac, int da, double ti, ColRGBA dcol, ColRGBA bcol, int tglyph, double tgsize) \brief draw the data set preview \param aspect the data aspect (x/y or bars) \param hwidth the histogram bar width \param hopac the histogram bar opacity \param da the dash type \param ti the thickness \param dcol the data color \param bcol the background color \param tglyph the glyphe type \param tgsize the glyph size */ cairo_surface_t * draw_surface (int aspect, double hwidth, double hopac, int da, double ti, ColRGBA dcol, ColRGBA bcol, int tglyph, double tgsize) { cairo_surface_t * cst; cairo_t * tcst; curve_dash * tdash; double x, y; double x1, x2, y1, y2; switch (aspect) { case 1: cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 100, 100); tcst = cairo_create(cst); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); cairo_stroke (tcst); cairo_set_source_rgba (tcst, dcol.red, dcol.green, dcol.blue, hopac); x1 = (100.0-hwidth*50.0)/2.0; x2 = hwidth*50.0; y1 = 15.0; y2 = 70.0; cairo_rectangle (tcst, x1, y1, x2, y2); cairo_fill (tcst); cairo_set_source_rgba (tcst, dcol.red, dcol.green, dcol.blue, 1.0); cairo_stroke (tcst); if (da > 0) { tdash = selectdash (da); cairo_set_dash (tcst, tdash -> a, tdash -> b, 0); cairo_set_line_width (tcst, ti); x2 += x1; y2 = 100 - y1; cairo_move_to (tcst, x1, y2); cairo_line_to (tcst, x1, y1); cairo_move_to (tcst, x1, y1); cairo_line_to (tcst, x2, y1); cairo_move_to (tcst, x2, y1); cairo_line_to (tcst, x2, y2); cairo_stroke (tcst); g_free (tdash); } break; default: cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 100, 30); tcst = cairo_create(cst); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); cairo_stroke (tcst); if (da > 0) { tdash = selectdash (da); cairo_set_dash (tcst, tdash -> a, tdash -> b, 0); cairo_set_source_rgb (tcst, dcol.red, dcol.green, dcol.blue); cairo_set_line_width (tcst, ti); cairo_move_to (tcst, 0, 15); cairo_line_to (tcst, 100, 15); cairo_stroke (tcst); g_free (tdash); } x = 25.0; y = 15.0; draw_glyph (tcst, tglyph, x, y, dcol, tgsize); x = 75.0; draw_glyph (tcst, tglyph, x, y, dcol, tgsize); break; } cairo_destroy (tcst); return cst; } /*! \fn DataLayout * get_extra_layout (int i) \brief retrieve the i data layout \param i the id of data layout to retrieve */ DataLayout * get_extra_layout (int i) { int j; CurveExtra * ctmp = get_project_by_id(a) -> curves[b][c] -> extrac -> first; for (j=0; j next; } return ctmp -> layout; } /*! \fn void set_data_style (gpointer data) \brief update the data style widgets \param data the associated data pointer */ void set_data_style (gpointer data) { int i; cairo_surface_t * pix; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); project * this_proj = get_project_by_id(a); DataLayout * layout; if (i > 0) { layout = get_extra_layout (i-1); } else { layout = this_proj -> curves[b][c] -> layout; } pix = draw_surface (layout -> aspect, layout -> hwidth, layout -> hopac, layout -> dash, layout -> thickness, layout -> datacolor, this_proj -> curves[b][c] -> backcolor, layout -> glyph, layout -> gsize); stylearea = destroy_this_widget (stylearea); stylearea = create_image_from_data (IMG_SURFACE, pix); cairo_surface_destroy (pix); gtk_widget_show (stylearea); #ifdef GTK4 gtk_widget_set_hexpand (stylearea, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, pixarea, stylearea, TRUE, TRUE, 0); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_data_glyph (GtkComboBox * gbox, gpointer data) \brief change glyph type \param gbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_glyph (GtkComboBox * gbox, gpointer data) { int i, j; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); j = gtk_combo_box_get_active (GTK_COMBO_BOX(gbox)); if (i > 0) { get_extra_layout (i-1) -> glyph = j; } else { get_project_by_id(a) -> curves[b][c] -> layout -> glyph = j; } if (j == 0) { widget_set_sensitive (data_glyph_size, 0); widget_set_sensitive (data_glyph_freq, 0); } else { widget_set_sensitive (data_glyph_size, 1); widget_set_sensitive (data_glyph_freq, 1); } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_dash (GtkComboBox * gbox, gpointer data) \brief change data dash style \param gbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_dash (GtkComboBox * gbox, gpointer data) { int i, j; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); j = gtk_combo_box_get_active (GTK_COMBO_BOX(gbox)); if (i > 0) { get_extra_layout (i-1) -> dash = j; } else { get_project_by_id(a) -> curves[b][c] -> layout -> dash = j; } if (j == 0) { widget_set_sensitive (data_thickness, 0); } else { widget_set_sensitive (data_thickness, 1); } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_color (GtkColorChooser * colob, gpointer data) \brief set data color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_color (GtkColorChooser * colob, gpointer data) { int i; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); if (i > 0) { get_extra_layout (i-1) -> datacolor = get_button_color (colob); } else { this_proj -> curves[b][c] -> layout -> datacolor = get_button_color (colob); } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_thickness (GtkEntry * thickd, gpointer data) \brief set data thickness entry callback \param thickd the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_thickness (GtkEntry * thickd, gpointer data) { int i; double k; const gchar * wid; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; wid = entry_get_text (thickd); k = atof(wid); project * this_proj = get_project_by_id(a); i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); if (k > 0.0) { if (i > 0) { get_extra_layout (i-1) -> thickness = k; } else { this_proj -> curves[b][c] -> layout -> thickness = k; } update_entry_double (thickd, k); set_data_style (data); } else { show_warning ("Line width must be > 0.0", this_proj -> curves[b][c] -> window); if (i > 0) { update_entry_double (thickd, get_extra_layout (i-1) -> thickness); } else { update_entry_double (thickd, this_proj -> curves[b][c] -> layout -> thickness); } } } /*! \fn G_MODULE_EXPORT void set_data_glyph_size (GtkEntry * glsize, gpointer data) \brief set glyph size entry callback \param glsize the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_glyph_size (GtkEntry * glsize, gpointer data) { int i; double k; const gchar * wid; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; wid = entry_get_text (glsize); k = atof(wid); project * this_proj = get_project_by_id(a); i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); if (k > 0.0) { if (i > 0) { get_extra_layout (i-1) -> gsize = k; } else { this_proj -> curves[b][c] -> layout -> gsize = k; } update_entry_double (glsize, k); set_data_style (data); } else { show_warning ("Glyph size must be > 0.0", this_proj -> curves[b][c] -> window); if (i > 0) { update_entry_double (glsize, get_extra_layout (i-1) -> gsize); } else { update_entry_double (glsize, this_proj -> curves[b][c] -> layout -> gsize); } } } /*! \fn G_MODULE_EXPORT void set_data_hist_width (GtkEntry * entry, gpointer data) \brief set histogram bar width entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_hist_width (GtkEntry * entry, gpointer data) { int i; double k; const gchar * wid; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; wid = entry_get_text (entry); k = atof(wid); project * this_proj = get_project_by_id(a); i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); if (k > 0.0) { if (i > 0) { get_extra_layout (i-1) -> hwidth = k; } else { this_proj -> curves[b][c] -> layout -> hwidth = k; } update_entry_double (entry, k); set_data_style (data); } else { show_warning ("Bar width must be > 0.0", this_proj -> curves[b][c] -> window); if (i > 0) { update_entry_double (entry, get_extra_layout (i-1) -> hwidth); } else { update_entry_double (entry, this_proj -> curves[b][c] -> layout -> hwidth); } } } /*! \fn G_MODULE_EXPORT void set_data_hist_opac (GtkEntry * entry, gpointer data) \brief set histogram bar opacity entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_hist_opac (GtkEntry * entry, gpointer data) { int i; double k; const gchar * wid; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; wid = entry_get_text (entry); k = atof(wid); project * this_proj = get_project_by_id(a); i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); if (k >= 0.0 && k <= 1.0) { if (i > 0) { get_extra_layout (i-1) -> hopac = k; } else { this_proj -> curves[b][c] -> layout -> hopac = k; } update_entry_double (entry, k); set_data_style (data); } else { show_warning ("Bar opacity must be in [0.0 - 1.0]", this_proj -> curves[b][c] -> window); if (i > 0) { update_entry_double (entry, get_extra_layout (i-1) -> hopac); } else { update_entry_double (entry, this_proj -> curves[b][c] -> layout -> hopac); } } } /*! \fn G_MODULE_EXPORT void set_data_hist_pos (GtkComboBox * gbox, gpointer data) \brief change histogram bar position \param gbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_hist_pos (GtkComboBox * gbox, gpointer data) { int i, j; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); j = gtk_combo_box_get_active (GTK_COMBO_BOX(gbox)); if (i > 0) { get_extra_layout (i-1) -> hpos = j; } else { get_project_by_id(a) -> curves[b][c] -> layout -> hpos = j; } set_data_style (data); } /*! \fn G_MODULE_EXPORT void set_data_glyph_freq (GtkEntry * glfreq, gpointer data) \brief set glyph frequency entry callback \param glfreq the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_glyph_freq (GtkEntry * glfreq, gpointer data) { int i, j; const gchar * wid; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; wid = entry_get_text (glfreq); j = atof(wid); project * this_proj = get_project_by_id(a); i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); if (j > 0) { if (i > 0) { get_extra_layout (i-1) -> gfreq = j; } else { this_proj -> curves[b][c] -> layout -> gfreq = j; } update_entry_int (glfreq, j); set_data_style (data); } else { show_warning ("Glyph frequency must be > 0", this_proj -> curves[b][c] -> window); if (i > 0) { update_entry_int (glfreq, get_extra_layout (i-1) -> thickness); } else { update_entry_int (glfreq, this_proj -> curves[b][c] -> layout -> gfreq); } } } /*! \fn G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data) \brief change the data set to customize \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void choose_set (GtkComboBox * box, gpointer data) { int i, j, k, l; tint ad; i = gtk_combo_box_get_active (box); j = dataxe[0].a; k = dataxe[0].b; l = dataxe[0].c; ad.a = j; ad.b = k; ad.c = l; DataLayout * layout; if (i > 0) { layout = get_extra_layout (i-1); } else { layout = get_project_by_id(j) -> curves[k][l] -> layout; } GdkRGBA col = colrgba_togtkrgba (layout -> datacolor); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(data_color), & col); gtk_combo_box_set_active (GTK_COMBO_BOX(data_dash), layout -> dash); update_entry_double (GTK_ENTRY(data_thickness), layout -> thickness); gtk_combo_box_set_active (GTK_COMBO_BOX(data_glyph), layout -> glyph); update_entry_double (GTK_ENTRY(data_glyph_size), layout -> gsize); update_entry_int (GTK_ENTRY(data_glyph_freq), layout -> gfreq); update_entry_double (GTK_ENTRY(data_hist_width), layout -> hwidth); update_entry_double (GTK_ENTRY(data_hist_opac), layout -> hopac); gtk_combo_box_set_active (GTK_COMBO_BOX(data_hist_pos), layout -> hpos); gtk_combo_box_set_active (GTK_COMBO_BOX(data_aspect), layout -> aspect); set_data_style (& ad); } /*! \fn G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data) \brief change data aspect (x/y or histogram bars) \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_data_aspect (GtkComboBox * box, gpointer data) { int i, j; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; i = gtk_combo_box_get_active (GTK_COMBO_BOX(setcolorbox)); j = gtk_combo_box_get_active (box); if (j == 1) { gtk_combo_box_set_active (GTK_COMBO_BOX(data_glyph), 0); widget_set_sensitive (data_glyph, 0); gtk_widget_hide (Glyph_box); gtk_widget_show (Hist_box); } else { widget_set_sensitive (data_glyph, 1); gtk_widget_hide (Hist_box); gtk_widget_show (Glyph_box); } if (i > 0) { get_extra_layout (i-1) -> aspect = j; } else { get_project_by_id(a) -> curves[b][c] -> layout -> aspect = j; } set_data_style (data); update_curve (data); } /*! \fn static void fill_org_model (GtkListStore * store, gpointer data) \brief fill the data set list store \param store the data set list store to fill \param data the associated data pointer */ static void fill_org_model (GtkListStore * store, gpointer data) { GtkTreeIter curvelevel; int i, j, k, l; tint * cd = (tint *) data; gchar * str; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id (a); CurveExtra * ctmp; ctmp = this_proj -> curves[b][c] -> extrac -> first; if (this_proj -> curves[b][c] -> draw_id == this_proj -> curves[b][c] -> extrac -> extras) { gtk_list_store_append (store, & curvelevel); str = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_proj -> curves[b][c] -> name); gtk_list_store_set (store, & curvelevel, 0, a, 1, b, 2, c, 3, str, -1); g_free (str); } i = this_proj -> curves[b][c] -> extrac -> extras; while (ctmp) { gtk_list_store_append (store, & curvelevel); j = ctmp -> id.a; k = ctmp -> id.b; l = ctmp -> id.c; str = g_strdup_printf ("%s - %s", prepare_for_title(get_project_by_id(j) -> name), get_project_by_id(j) -> curves[k][l] -> name); gtk_list_store_set (store, & curvelevel, 0, j, 1, k, 2, l, 3, str, -1); g_free (str); i --; if (this_proj -> curves[b][c] -> draw_id == i) { gtk_list_store_append (store, & curvelevel); str = g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_proj -> curves[b][c] -> name); gtk_list_store_set (store, & curvelevel, 0, a, 1, b, 2, c, 3, str, -1); g_free (str); } ctmp = ctmp -> next; } } /*! \fn G_MODULE_EXPORT void move_back_front (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) \brief move up or down data set in the tree model to move it front or back in the data plot \param tree_model the GtkTreeModel sending the signal \param path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void move_back_front (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) { tint * cid = (tint *) data; GtkTreeIter iter; gboolean valid; gboolean done; int i, j, k, l, m; tint cbid; CurveExtra * ctmpa, * ctmpb, * ctmpc, * ctmpd; project * this_proj = get_project_by_id(cid -> a); l = this_proj -> curves[cid -> b][cid -> c] -> extrac -> extras; m = gtk_combo_box_get_active (GTK_COMBO_BOX (setcolorbox)); if (m > 0) { ctmpa = this_proj -> curves[cid -> b][cid -> c] -> extrac -> first; for (i=0; i next; cbid = ctmpa -> id; } ctmpa = this_proj -> curves[cid -> b][cid -> c] -> extrac -> first; valid = gtk_tree_model_get_iter_first (tree_model, & iter); while (valid) { gtk_tree_model_get (tree_model, & iter, 0, & i, 1, & j, 2, & k, -1); if (i == cid -> a && j == cid -> b && k == cid -> c) { this_proj -> curves[cid -> b][cid -> c] -> draw_id = l; } else if (ctmpa -> id.a != i || ctmpa -> id.b != j || ctmpa -> id.c != k) { ctmpb = ctmpa -> next; done = FALSE; while (! done && ctmpb) { if (ctmpb -> id.a == i && ctmpb -> id.b == j && ctmpb -> id.c == k) { done = TRUE; } else { ctmpb = ctmpb -> next; done = FALSE; } } if (done) { ctmpc = ctmpa -> prev; if (ctmpb -> prev != ctmpa) { ctmpb -> prev -> next = ctmpa; ctmpa -> prev = ctmpb -> prev; ctmpd = ctmpa -> next; } else { ctmpa -> prev = ctmpb; ctmpd = NULL; } if (ctmpb -> next) { ctmpb -> next -> prev = ctmpa; ctmpa -> next = ctmpb -> next; } else { ctmpa -> next = NULL; this_proj -> curves[cid -> b][cid -> c] -> extrac -> last = ctmpa; } if (ctmpc) { ctmpb -> prev = ctmpc; ctmpc -> next = ctmpb; } else { ctmpb -> prev = NULL; this_proj -> curves[cid -> b][cid -> c] -> extrac -> first = ctmpb; } if (ctmpd) { ctmpd -> prev = ctmpb; ctmpb -> next = ctmpd; } else { ctmpb -> next = ctmpa; ctmpa -> prev = ctmpb; } ctmpa = ctmpb; } ctmpa = ctmpa -> next; } else { ctmpa = ctmpa -> next; } l --; valid = gtk_tree_model_iter_next (tree_model, & iter); } if (m > 0) { ctmpa = this_proj -> curves[cid -> b][cid -> c] -> extrac -> first; m = 0; while (ctmpa) { if (cbid.a == ctmpa -> id.a && cbid.b == ctmpa -> id.b && cbid.c == ctmpa -> id.c) break; m ++; ctmpa = ctmpa -> next; } m ++; } setcolorbox = destroy_this_widget (setcolorbox); setcolorbox = create_combo (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, thesetbox, setcolorbox, FALSE, FALSE, 0); gtk_widget_show(setcolorbox); prepbox (this_proj -> id, cid -> b, cid -> c); gtk_combo_box_set_active (GTK_COMBO_BOX (setcolorbox), m); choose_set (GTK_COMBO_BOX(setcolorbox), NULL); update_curve (data); } /*! \fn GtkWidget * create_org_list (gpointer data) \brief create the data set organisation widget \param data the associated data pointer */ GtkWidget * create_org_list (gpointer data) { int i; GtkTreeViewColumn * orgcol[4]; GtkCellRenderer * orgcell[4]; gchar * col_title[4] = {" ", " ", " ", "Data set(s)"}; gchar * ctype[4] = {"text", "text", "text", "text"}; GType col_type[4] = {G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING}; GtkListStore * orglist = gtk_list_store_newv (4, col_type); orgmodel = GTK_TREE_MODEL(orglist); orgtree = gtk_tree_view_new_with_model(orgmodel); for (i=0; i<4; i++) { orgcell[i] = gtk_cell_renderer_text_new(); orgcol[i] = gtk_tree_view_column_new_with_attributes(col_title[i], orgcell[i], ctype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(orgtree), orgcol[i]); if (i < 3) gtk_tree_view_column_set_visible (orgcol[i], FALSE); } fill_org_model (orglist, data); g_object_unref (orglist); g_signal_connect (G_OBJECT(orgmodel), "row-deleted", G_CALLBACK(move_back_front), data); gtk_tree_view_expand_all (GTK_TREE_VIEW(orgtree)); gtk_tree_view_set_activate_on_single_click (GTK_TREE_VIEW(orgtree), TRUE); /* #ifdef GTK4 add_widget_gesture_and_key_action (orgtree, "orgtree-pressed", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif */ gtk_tree_view_set_reorderable (GTK_TREE_VIEW(orgtree), TRUE); return orgtree; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data) \brief shift / not histogram bars toggle callback GTK4 \param shift the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bshift (GtkCheckButton * shift, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_bshift (GtkToggleButton * shift, gpointer data) \brief shift / not histogram bars toggle callback GTK3 \param shift the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bshift (GtkToggleButton * shift, gpointer data) #endif { tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); #ifdef GTK4 this_proj -> curves[b][c] -> bshift = gtk_check_button_get_active (shift); #else this_proj -> curves[b][c] -> bshift = gtk_toggle_button_get_active (shift); #endif update_curve (data); } /*! \fn GtkWidget * create_tab_2 (gpointer data) \brief handle the creation of the 2nd tab of the curve edition dialog \param data the associated data pointer */ GtkWidget * create_tab_2 (gpointer data) { GtkWidget * databox; GtkWidget * dhbox; tint * cd = (tint *) data; int i; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); const int naspects = 2; char * aspects[2]; aspects[0]="x/y"; aspects[1]="bar"; databox = create_vbox (BSEP); thesetbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, thesetbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, thesetbox, markup_label("Select set: ", -1, -1, 0.0, 0.5), FALSE, FALSE, 20); setcolorbox = create_combo (); prepbox (a, b, c); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, thesetbox, setcolorbox, FALSE, FALSE, 10); pixarea = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, pixarea, FALSE, FALSE, 10); dhbox = create_vbox (BSEP); gtk_widget_set_size_request (dhbox, -1, 270); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, pixarea, dhbox, FALSE, FALSE, 0); data_aspect = create_combo (); for ( i=0 ; i < naspects ; i++ ) { combo_text_append (data_aspect, aspects[i]); } gtk_combo_box_set_active (GTK_COMBO_BOX(data_aspect), this_proj -> curves[b][c] -> layout -> aspect); gtk_widget_set_size_request (data_aspect, 120, -1); g_signal_connect (G_OBJECT(data_aspect), "changed", G_CALLBACK(set_data_aspect), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, "Plot type:"), data_aspect, FALSE, FALSE, 0); if (b == MS) { widget_set_sensitive (data_aspect, 0); } // Data color data_color = color_button (this_proj -> curves[b][c] -> layout -> datacolor, TRUE, 120, -1, G_CALLBACK(set_data_color), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, "Data color:"), data_color, FALSE, FALSE, 0); // Line style data_dash = create_combo (); combo_text_append (data_dash, "No line"); for ( i=1 ; i < ndash ; i++) { combo_text_append (data_dash, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (data_dash, 120, -1); gtk_combo_box_set_active(GTK_COMBO_BOX(data_dash), this_proj -> curves[b][c] -> layout -> dash); g_signal_connect (G_OBJECT(data_dash), "changed", G_CALLBACK(set_data_dash), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, "Line style:"), data_dash, FALSE, FALSE, 0); // Line line width data_thickness = create_entry (G_CALLBACK(set_data_thickness), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(data_thickness), this_proj -> curves[b][c] -> layout -> thickness); if (this_proj -> curves[b][c] -> layout -> dash == 0) { widget_set_sensitive (data_thickness, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (dhbox, "Line width:"), data_thickness, FALSE, FALSE, 0); GtkWidget * data_shape = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, dhbox, data_shape, FALSE, FALSE, 0); Glyph_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, data_shape, Glyph_box, FALSE, FALSE, 0); // Glyph type data_glyph = create_combo (); combo_text_append (data_glyph, "No glyph"); for ( i=1 ; i < nglyph ; i++) { combo_text_append (data_glyph, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (data_glyph, 120, -1); gtk_combo_box_set_active (GTK_COMBO_BOX(data_glyph), this_proj -> curves[b][c] -> layout -> glyph); g_signal_connect (G_OBJECT(data_glyph), "changed", G_CALLBACK(set_data_glyph), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (Glyph_box, "Glyph type:"), data_glyph, FALSE, FALSE, 0); // Glyph size data_glyph_size = create_entry (G_CALLBACK(set_data_glyph_size), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(data_glyph_size), this_proj -> curves[b][c] -> layout -> gsize); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (Glyph_box, "Glyph size:"), data_glyph_size, FALSE, FALSE, 0); // Glyph frequency data_glyph_freq = create_entry (G_CALLBACK(set_data_glyph_freq), 120, 10, FALSE, data); update_entry_int (GTK_ENTRY(data_glyph_freq), this_proj -> curves[b][c] -> layout -> gfreq); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (Glyph_box, "Glyph freq.:"), data_glyph_freq, FALSE, FALSE, 0); if (this_proj -> curves[b][c] -> layout -> glyph == 0) { widget_set_sensitive (data_glyph_size, 0); widget_set_sensitive (data_glyph_freq, 0); } Hist_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, data_shape, Hist_box, FALSE, FALSE, 0); // Histogram width data_hist_width = create_entry (G_CALLBACK(set_data_hist_width), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(data_hist_width), this_proj -> curves[b][c] -> layout -> hwidth); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (Hist_box, "Bar width:"), data_hist_width, FALSE, FALSE, 0); // Histogram opacity data_hist_opac = create_entry (G_CALLBACK(set_data_hist_opac), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(data_hist_opac), this_proj -> curves[b][c] -> layout -> hopac); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (Hist_box, "Color opacity:"), data_hist_opac, FALSE, FALSE, 0); data_hist_pos = create_combo (); combo_text_append (data_hist_pos, "Transparent"); combo_text_append (data_hist_pos, "Plain"); gtk_widget_set_size_request (data_hist_pos, 120, -1); gtk_combo_box_set_active (GTK_COMBO_BOX(data_hist_pos), this_proj -> curves[b][c] -> layout -> hpos); g_signal_connect (G_OBJECT(data_hist_pos), "changed", G_CALLBACK(set_data_hist_pos), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (Hist_box, "Bar opacity:"), data_hist_pos, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); GtkWidget * hbox; if (b != MS) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button ("Automatic x axis shift for bar diagram (to improve visibility)", -1, -1, this_proj -> curves[b][c] -> bshift, G_CALLBACK(set_bshift), data), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Layers organization: ", -1, -1, 0.0, 0.5), FALSE, FALSE, 20); GtkWidget * shbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, shbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, shbox, hbox, FALSE, FALSE, 75); datascroll = create_scroll (hbox, 350, 200, GTK_SHADOW_ETCHED_IN); add_container_child (CONTAINER_SCR, datascroll, create_org_list(data)); widget_set_sensitive (orgtree, this_proj -> curves[b][c] -> extrac -> extras); #ifndef GTK4 gchar * str = "\tMove up/down to adjust layer position (up to front, down to back)"; add_box_child_start (GTK_ORIENTATION_VERTICAL, databox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 5); #endif return databox; } Atomes-GNU-1.1.14/src/curve/tab-3.c000066400000000000000000000365301457665371200164710ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file tab-3.c * @short 3rd tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-3.c' * * Contains: * - The 3rd tab of the curve layout edition dialog * * List of functions: void set_legend_box_style (gpointer data); G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data); G_MODULE_EXPORT void show_data_legend (GtkToggleButton * leg, gpointer data); G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data); G_MODULE_EXPORT void show_data_legend_box (GtkToggleButton * bleg, gpointer data); G_MODULE_EXPORT void set_legend_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_legend_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_legend_pos (GtkEntry * p, gpointer data); G_MODULE_EXPORT void set_legend_box_line (GtkComboBox * fbox, gpointer data); G_MODULE_EXPORT void set_legend_box_thickness (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_legend_box_color (GtkColorChooser * colob, gpointer data); GtkWidget * create_tab_3 (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "cedit.h" GtkWidget * legend_box = NULL; GtkWidget * legend_box_style = NULL; GtkWidget * legend_style_area = NULL; extern char * ctext[2]; extern qint dataxe[2]; extern int a, b, c, d; /*! \fn cairo_surface_t * draw_legend_surface (int da, double ti, ColRGBA dcol, ColRGBA bcol) \brief draw legend preview \param da the dash type \param ti the thickness \param dcol the legend color \param bcol the background color */ cairo_surface_t * draw_legend_surface (int da, double ti, ColRGBA dcol, ColRGBA bcol) { cairo_surface_t * cst; cairo_t * tcst; curve_dash * tdash; cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 80, 80); tcst = cairo_create (cst); tdash = selectdash (da); cairo_set_dash (tcst, tdash -> a, tdash -> b, 0); cairo_set_source_rgb (tcst, bcol.red, bcol.green, bcol.blue); cairo_paint (tcst); cairo_set_source_rgb (tcst, dcol.red, dcol.green, dcol.blue); cairo_set_line_width (tcst, ti); cairo_move_to (tcst, 10, 10); cairo_line_to (tcst, 70, 10); cairo_line_to (tcst, 70, 70); cairo_line_to (tcst, 10, 70); cairo_line_to (tcst, 10, 10); cairo_stroke (tcst); g_free (tdash); cairo_destroy (tcst); return cst; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data) \brief show / hide legend toggle callback GTK4 \param leg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend (GtkCheckButton * leg, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_data_legend (GtkToggleButton * leg, gpointer data) \brief show / hide legend toggle callback GTK3 \param leg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend (GtkToggleButton * leg, gpointer data) #endif { tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); #ifdef GTK4 this_proj -> curves[b][c] -> show_legend = gtk_check_button_get_active (leg); #else this_proj -> curves[b][c] -> show_legend = gtk_toggle_button_get_active (leg); #endif widget_set_sensitive (legend_box, this_proj -> curves[b][c] -> show_legend); if (! this_proj -> curves[b][c] -> show_legend) { widget_set_sensitive (legend_box_style, 0); } else { widget_set_sensitive (legend_box_style, this_proj -> curves[b][c] -> show_legend_box); } update_curve (data); } /*! \fn void set_legend_box_style (gpointer data) \brief update legend style widgets \param data the associated data pointer */ void set_legend_box_style (gpointer data) { cairo_surface_t * pix; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); pix = draw_legend_surface (this_proj -> curves[b][c] -> legend_box_dash, this_proj -> curves[b][c] -> legend_box_thickness, this_proj -> curves[b][c] -> legend_box_color, this_proj -> curves[b][c] -> backcolor); legend_style_area = destroy_this_widget (legend_style_area); legend_style_area = create_image_from_data (IMG_SURFACE, (gpointer)pix); cairo_surface_destroy (pix); widget_set_sensitive (legend_style_area, this_proj -> curves[b][c] -> show_legend_box); gtk_widget_show (legend_style_area); #ifdef GTK4 gtk_widget_set_hexpand (legend_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, legend_box_style, legend_style_area, TRUE, TRUE, 0); update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data) \brief show / hide legend box toggle callback GTK4 \param bleg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend_box (GtkCheckButton * bleg, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_data_legend_box (GtkToggleButton * bleg, gpointer data) \brief show / hide legend box toggle callback GTK3 \param bleg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_data_legend_box (GtkToggleButton * bleg, gpointer data) #endif { tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); #ifdef GTK4 this_proj -> curves[b][c] -> show_legend_box = gtk_check_button_get_active (bleg); #else this_proj -> curves[b][c] -> show_legend_box = gtk_toggle_button_get_active (bleg); #endif widget_set_sensitive (legend_box_style, this_proj -> curves[b][c] -> show_legend_box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_legend_font (GtkFontButton * fontb, gpointer data) \brief change legend font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_font (GtkFontButton * fontb, gpointer data) { tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); g_free (this_proj -> curves[b][c] -> legend_font); this_proj -> curves[b][c] -> legend_font = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_legend_color (GtkColorChooser * colob, gpointer data) \brief change legend color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_color (GtkColorChooser * colob, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> legend_color = get_button_color (colob); set_legend_box_style (data); } /*! \fn G_MODULE_EXPORT void set_legend_pos (GtkEntry * entry, gpointer data) \brief set the legend position entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_pos (GtkEntry * entry, gpointer data) { const gchar *f; double z; qint * ad = (qint *)data; tint cd; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; f = entry_get_text (entry); z = atof(f); project * this_proj = get_project_by_id(a); if (z >= 0.0 && z <= 1.0) { this_proj -> curves[b][c] -> legend_pos[d] = z; } else { show_warning (ctext[d], this_proj -> curves[b][c] -> window); } update_entry_double (entry, this_proj -> curves[b][c] -> legend_pos[d]); cd.a = a; cd.b = b; cd.c = c; update_curve (& cd); } /*! \fn G_MODULE_EXPORT void set_legend_box_line (GtkComboBox * fbox, gpointer data) \brief change the legend box line type \param fbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_box_line (GtkComboBox * fbox, gpointer data) { tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; get_project_by_id(a) -> curves[b][c] -> legend_box_dash = gtk_combo_box_get_active (GTK_COMBO_BOX(fbox)) + 1; set_legend_box_style (data); } /*! \fn G_MODULE_EXPORT void set_legend_box_thickness (GtkEntry * entry, gpointer data) \brief set legend box thickness entry callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_box_thickness (GtkEntry * entry, gpointer data) { tint * cd = (tint *)data; const gchar * str; a = cd -> a; b = cd -> b; c = cd -> c; str = entry_get_text (entry); project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> legend_box_thickness = atof(str); update_entry_double (entry, this_proj -> curves[b][c] -> legend_box_thickness); set_legend_box_style (data); } /*! \fn G_MODULE_EXPORT void set_legend_box_color (GtkColorChooser * colob, gpointer data) \brief set legend color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_legend_box_color (GtkColorChooser * colob, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; get_project_by_id(a) -> curves[b][c] -> legend_box_color = get_button_color (colob); set_legend_box_style (data); } /*! \fn GtkWidget * create_tab_3 (gpointer data) \brief handle the creation of the 3rd tab of the curve edition dialog \param data the associated data pointer */ GtkWidget * create_tab_3 (gpointer data) { GtkWidget * dhbox; GtkWidget * legend_area; GtkWidget * legend_style_box; GtkWidget * legend_dash_box; GtkWidget * legend_thickness; tint * cd = (tint *) data; int i; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); GtkWidget * legendbox = create_vbox (BSEP); GtkWidget * leghbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, legendbox, leghbox, FALSE, FALSE, 10); GtkWidget * legvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, leghbox, legvbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, legvbox, check_button ("Show/hide legend", -1, -1, this_proj -> curves[b][c] -> show_legend, G_CALLBACK(show_data_legend), data), FALSE, TRUE, 5); legend_area = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, legvbox, legend_area, FALSE, FALSE, 10); legend_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, legend_area, legend_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (legend_box, "Font:"), font_button (this_proj -> curves[b][c] -> legend_font, 150, -1, G_CALLBACK(set_legend_font), data), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, bbox (legend_box, "Color:"), color_button (this_proj -> curves[b][c] -> legend_color, TRUE, 150, 30, G_CALLBACK(set_legend_color), data), FALSE, FALSE, 0); dhbox = bbox (legend_box, "Position:"); GtkWidget * lxyc; for ( i=0 ; i < 2 ; i++ ) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, dhbox, markup_label(lapos[i], (i==0)?10:30, -1, 1.0, 0.5), FALSE, FALSE, 5); lxyc = create_entry (G_CALLBACK(set_legend_pos), 100, 10, FALSE, (gpointer)& dataxe[i]); update_entry_double (GTK_ENTRY(lxyc), this_proj -> curves[b][c] -> legend_pos[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, dhbox, lxyc, FALSE, FALSE, 5); } dhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, legend_box, dhbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, dhbox, check_button ("Show/hide legend box", -1, -1, this_proj -> curves[b][c] -> show_legend_box, G_CALLBACK(show_data_legend_box), data), FALSE, FALSE, 40); legend_box_style = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, legend_box, legend_box_style, FALSE, FALSE, 0); legend_style_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, legend_box_style, legend_style_box, FALSE, FALSE, 0); // Legend box style legend_dash_box = create_combo (); for ( i=1 ; i < ndash ; i++) { combo_text_append (legend_dash_box, g_strdup_printf("%d", i)); } gtk_widget_set_size_request (legend_dash_box, 120, -1); gtk_combo_box_set_active(GTK_COMBO_BOX(legend_dash_box), this_proj -> curves[b][c] -> legend_box_dash - 1); g_signal_connect (G_OBJECT(legend_dash_box), "changed", G_CALLBACK(set_legend_box_line), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbox (legend_style_box, "Line style:"), legend_dash_box, FALSE, FALSE, 0); // Legend box linewidth legend_thickness = create_entry (G_CALLBACK(set_legend_box_thickness), 120, 10, FALSE, data); update_entry_double (GTK_ENTRY(legend_thickness), this_proj -> curves[b][c] -> legend_box_thickness); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbox (legend_style_box, "Line width:"), legend_thickness, FALSE, FALSE, 0); // Legend box line color add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbox (legend_style_box, "Color:"), color_button (this_proj -> curves[b][c] -> legend_box_color, TRUE, 120, -1, G_CALLBACK(set_legend_box_color), data), FALSE, FALSE, 0); // Legend box pix cairo_surface_t * legend_pix = draw_legend_surface (this_proj -> curves[b][c] -> legend_box_dash, this_proj -> curves[b][c] -> legend_box_thickness, this_proj -> curves[b][c] -> legend_box_color, this_proj -> curves[b][c] -> backcolor); legend_style_area = create_image_from_data (IMG_SURFACE, (gpointer)legend_pix); cairo_surface_destroy (legend_pix); #ifdef GTK4 add_box_child_start (GTK_ORIENTATION_HORIZONTAL, legend_box_style, markup_label(" ", 20, -1, 0.0, 0.0), FALSE, FALSE, 0); gtk_widget_set_hexpand (legend_style_area, TRUE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, legend_box_style, legend_style_area, FALSE, FALSE, 0); widget_set_sensitive (legend_box_style, this_proj -> curves[b][c] -> show_legend_box); widget_set_sensitive (legend_box, this_proj -> curves[b][c] -> show_legend); return legendbox; } Atomes-GNU-1.1.14/src/curve/tab-4.c000066400000000000000000001035371457665371200164740ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file tab-4.c * @short 4th tab of the curve layout edition dialog * @author Sébastien Le Roux */ /* * This file: 'tab-4.c' * * Contains: * - The 4th tab of the curve layout edition dialog * * List of functions: int get_active_axis (); G_MODULE_EXPORT gboolean scroll_set_ticks_angle (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void ticks_angle_has_changed (gpointer data, double value); G_MODULE_EXPORT void set_axis_min (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_axis_max (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_div (GtkEntry * maj, gpointer data); G_MODULE_EXPORT void set_min_div_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_ticks_size_major_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_ticks_size_minor_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_lab_digit_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_lab_shift_x_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_lab_shift_y_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_axis_title_x_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_axis_title_y_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_io_ticks (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_pos_ticks (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_pos_labels (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_ticks_labels_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_ticks_angle (GtkRange * range, gpointer data); G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void to_axis_title (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data); G_MODULE_EXPORT void set_grid (GtkToggleButton * grid, gpointer data); G_MODULE_EXPORT void set_autoscale (GtkButton * autosc, gpointer data); G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data); G_MODULE_EXPORT void set_axis (GtkToggleButton * axis, gpointer data); G_MODULE_EXPORT void set_axis_legend (GtkEntry * xtit, gpointer data); G_MODULE_EXPORT void set_axis_title_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_scale (GtkComboBox * sbox, gpointer data); G_MODULE_EXPORT void update_axis (GtkComboBox * widg, gpointer data); GtkWidget * create_tab_4 (gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "cedit.h" GtkWidget * axischoice = NULL; GtkWidget * scale_box = NULL; GtkWidget * ticks_inout_box = NULL; GtkWidget * ticks_pos_box = NULL; GtkWidget * labels_pos_box = NULL; GtkWidget * ticks_labels_angle = NULL; GtkWidget * ticks_labels_font = NULL; GtkWidget * show_axis = NULL; GtkWidget * show_grid = NULL; GtkWidget * auto_scale = NULL; GtkWidget * axis_default_title = NULL; GtkWidget * axis_title = NULL; GtkWidget * axis_title_font = NULL; GtkWidget * majt = NULL; GtkWidget * vmin = NULL; GtkWidget * vmax = NULL; GtkWidget * nmi[2], * ndi[2]; GtkWidget * mats[2]; GtkWidget * mits[2]; GtkWidget * nptx[2], * npty[2]; GtkWidget * tptx[2], * tpty[2]; extern qint dataxe[2]; extern qint framxe[4]; extern int a, b, c, d; /*! \fn int get_active_axis () \brief get active axis */ int get_active_axis () { return gtk_combo_box_get_active (GTK_COMBO_BOX(axischoice)); } /*! \fn G_MODULE_EXPORT void set_axis_min (GtkEntry * res, gpointer data) \brief set axis min \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_min (GtkEntry * res, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); int i = get_active_axis(); if (i > -1) { const gchar * m; m = entry_get_text (res); if (atof(m) < this_proj -> curves[b][c] -> axmax[i]) { this_proj -> curves[b][c] -> axmin[i] = atof(m); } else { show_warning ("Axis min must be < to axis max", this_proj -> curves[b][c] -> window); } update_entry_double (res, this_proj -> curves[b][c] -> axmin[i]); update_curve (data); } } /*! \fn G_MODULE_EXPORT void set_axis_max (GtkEntry * res, gpointer data) \brief set axis max \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_max (GtkEntry * res, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); int i = get_active_axis (); const gchar * m; m = entry_get_text (res); if (atof(m) > this_proj -> curves[b][c] -> axmin[i]) { this_proj -> curves[b][c] -> axmax[i] = atof(m); } else { show_warning ("Axis max must be > to axis min", this_proj -> curves[b][c] -> window); } update_entry_double (res, this_proj -> curves[b][c] -> axmax[i]); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_max_div (GtkEntry * maj, gpointer data) \brief set number of major tick divisions \param maj the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_div (GtkEntry * maj, gpointer data) { double tmp; tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); int i = get_active_axis (); const gchar * m; m = entry_get_text (maj); tmp = atof(m); if (tmp != 0.0) { this_proj -> curves[b][c] -> majt[i] = tmp; update_curve (data); } else { show_warning ("Major tick must be > 0.0", this_proj -> curves[b][c] -> window); } update_entry_double (maj, this_proj -> curves[b][c] -> majt[i]); } /*! \fn G_MODULE_EXPORT void set_min_div_spin (GtkSpinButton * res, gpointer data) \brief set number of minor tick division(s) \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_min_div_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; get_project_by_id(a) -> curves[b][c] -> mint[d] = gtk_spin_button_get_value_as_int(res) + 1; tint cd; cd.a = a; cd.b = b; cd.c = c; update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_ticks_size_major_spin (GtkSpinButton * res, gpointer data) \brief set major ticks size \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_size_major_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; get_project_by_id(a) -> curves[b][c] -> majt_size[d] = gtk_spin_button_get_value_as_int(res); tint cd; cd.a = a; cd.b = b; cd.c = c; update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_ticks_size_minor_spin (GtkSpinButton * res, gpointer data) \brief set minor ticks size \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_size_minor_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; project * this_proj = get_project_by_id(a); this_proj -> curves[b][c]-> mint_size[d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_proj -> curves[b][c] -> mint_size[d]); tint cd; cd.a = a; cd.b = b; cd.c = c; update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_lab_digit_spin (GtkSpinButton * res, gpointer data) \brief set ticks label number of digit(s) \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lab_digit_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; project * this_proj = get_project_by_id(a); this_proj -> curves[b][c]-> labels_digit[d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_proj -> curves[b][c] -> labels_digit[d]); tint cd; cd.a = a; cd.b = b; cd.c = c; update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_lab_shift_x_spin (GtkSpinButton * res, gpointer data) \brief set ticks label position shift on x axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lab_shift_x_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> labels_shift_x[d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_proj -> curves[b][c] -> labels_shift_x[d]); tint cd; cd.a = a; cd.b = b; cd.c = c; update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_lab_shift_y_spin (GtkSpinButton * res, gpointer data) \brief set ticks label position shift on y axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lab_shift_y_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> labels_shift_y[d] = gtk_spin_button_get_value_as_int(res); update_entry_int (GTK_ENTRY(res), this_proj -> curves[b][c]-> labels_shift_y[d]); tint cd; cd.a = a; cd.b = b; cd.c = c; update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_axis_title_x_spin (GtkSpinButton * res, gpointer data) \brief set axis title position shift on x axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title_x_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; get_project_by_id(a) -> curves[b][c] -> axis_title_x[d] = gtk_spin_button_get_value_as_int(res); tint cd; cd.a = a; cd.b = b; cd.c = c; update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_axis_title_y_spin (GtkSpinButton * res, gpointer data) \brief set axis title position shift on y axis \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title_y_spin (GtkSpinButton * res, gpointer data) { qint * ad = (qint *) data; a = ad -> a; b = ad -> b; c = ad -> c; d = ad -> d; get_project_by_id(a) -> curves[b][c] -> axis_title_y[d] = gtk_spin_button_get_value_as_int(res); tint cd; cd.a = a; cd.b = b; cd.c = c; update_curve ((gpointer)& cd); } /*! \fn G_MODULE_EXPORT void set_io_ticks (GtkComboBox * box, gpointer data) \brief change tick marks location \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_io_ticks (GtkComboBox * box, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; int i = get_active_axis (); get_project_by_id(a) -> curves[b][c] -> ticks_io[i] = gtk_combo_box_get_active (box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_pos_ticks (GtkComboBox * box, gpointer data) \brief change tick marks position \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_pos_ticks (GtkComboBox * box, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; int i = get_active_axis (); get_project_by_id(a) -> curves[b][c] -> ticks_pos[i] = gtk_combo_box_get_active (box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_pos_labels (GtkComboBox * box, gpointer data) \brief change ticks labels position \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_pos_labels (GtkComboBox * box, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; int i = get_active_axis (); get_project_by_id(a) -> curves[b][c] -> labels_pos[i] = gtk_combo_box_get_active (box); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_ticks_labels_font (GtkFontButton * fontb, gpointer data) \brief set ticks labels font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_labels_font (GtkFontButton * fontb, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; int i = get_active_axis (); project * this_proj = get_project_by_id(a); g_free (this_proj -> curves[b][c] -> labels_font[i]); this_proj -> curves[b][c] -> labels_font[i] = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn void ticks_angle_has_changed (gpointer data, double value) \brief set ticks angle \param data the associated data pointer \param value the new ticks angle */ void ticks_angle_has_changed (gpointer data, double value) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; int i = get_active_axis (); get_project_by_id(a) -> curves[b][c] -> labels_angle[i] = value * (pi/180.0); update_curve (data); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_ticks_angle (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief set ticks angle callback - scroll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_ticks_angle (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { ticks_angle_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_ticks_angle (GtkRange * range, gpointer data) \brief set ticks angle callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_ticks_angle (GtkRange * range, gpointer data) { ticks_angle_has_changed (data, gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data) \brief show / hide axis title toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_axis_title (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_axis_title (GtkToggleButton * but, gpointer data) \brief show / hide axis title toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_axis_title (GtkToggleButton * but, gpointer data) #endif { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; int i = get_active_axis (); #ifdef GTK4 if (gtk_check_button_get_active (but)) #else if (gtk_toggle_button_get_active (but)) #endif { widget_set_sensitive (axis_title, 0); project * this_proj = get_project_by_id(a); g_free (this_proj -> curves[b][c] -> axis_title[i]); this_proj -> curves[b][c] -> axis_title[i] = g_strdup_printf ("%s", default_title (i, c)); update_entry_text (GTK_ENTRY(axis_title), this_proj -> curves[b][c] -> axis_title[i]); } else { widget_set_sensitive (axis_title, 1); } update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data) \brief show / hide grid toggle callback GTK4 \param grid the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_grid (GtkCheckButton * grid, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_grid (GtkToggleButton * grid, gpointer data) \brief show / hide grid toggle callback GTK3 \param grid the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_grid (GtkToggleButton * grid, gpointer data) #endif { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; int i = get_active_axis (); #ifdef GTK4 get_project_by_id(a) -> curves[b][c] -> show_grid[i] = gtk_check_button_get_active (grid); #else get_project_by_id(a) -> curves[b][c] -> show_grid[i] = gtk_toggle_button_get_active (grid); #endif update_curve (data); } /*! \fn G_MODULE_EXPORT void set_autoscale (GtkButton * autosc, gpointer data) \brief autoscale axis \param autosc the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_autoscale (GtkButton * autosc, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; int i = get_active_axis (); get_project_by_id(a) -> curves[b][c] -> autoscale[i] = TRUE; update_curve (data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data) \brief show / hide axis toggle callback GTK4 \param axis the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis (GtkCheckButton * axis, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_axis (GtkToggleButton * axis, gpointer data) \brief show / hide axis toggle callback GTK3 \param axis the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis (GtkToggleButton * axis, gpointer data) #endif { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; int i = get_active_axis (); #ifdef GTK4 get_project_by_id(a) -> curves[b][c] -> show_axis[i] = gtk_check_button_get_active (axis); #else get_project_by_id(a) -> curves[b][c] -> show_axis[i] = gtk_toggle_button_get_active (axis); #endif update_curve (data); } /*! \fn G_MODULE_EXPORT void set_axis_legend (GtkEntry * xtit, gpointer data) \brief set axis legend entry callback \param xtit the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_legend (GtkEntry * xtit, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; int i = get_active_axis (); project * this_proj = get_project_by_id(a); g_free (this_proj -> curves[b][c] -> axis_title[i]); this_proj -> curves[b][c] -> axis_title[i] = g_strdup_printf ("%s", entry_get_text (xtit)); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_axis_title_font (GtkFontButton * fontb, gpointer data) \brief set axis title font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title_font (GtkFontButton * fontb, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); int i = get_active_axis (); g_free (this_proj -> curves[b][c] -> axis_title_font[i]); this_proj -> curves[b][c] -> axis_title_font[i] = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); update_curve (data); } /*! \fn G_MODULE_EXPORT void set_scale (GtkComboBox * sbox, gpointer data) \brief change the axis scale \param sbox the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_scale (GtkComboBox * sbox, gpointer data) { tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); int i = get_active_axis (); this_proj -> curves[b][c] -> scale[i] = gtk_combo_box_get_active(sbox); widget_set_sensitive (majt, ! gtk_combo_box_get_active(sbox)); widget_set_sensitive (nmi[i], ! gtk_combo_box_get_active(sbox)); this_proj -> curves[b][c]-> autoscale[i] = TRUE; update_curve (data); } int handler_id; /*! \fn G_MODULE_EXPORT void update_axis (GtkComboBox * widg, gpointer data) \brief change the axis \param widg the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_axis (GtkComboBox * widg, gpointer data) { int i; tint * ad = (tint *)data; a = ad -> a; b = ad -> b; c = ad -> c; project * this_proj = get_project_by_id(a); i = gtk_combo_box_get_active (widg); update_entry_double (GTK_ENTRY(vmin), this_proj -> curves[b][c] -> axmin[i]); update_entry_double (GTK_ENTRY(vmax), this_proj -> curves[b][c] -> axmax[i]); update_entry_double (GTK_ENTRY(majt), this_proj -> curves[b][c] -> majt[i]); gtk_combo_box_set_active (GTK_COMBO_BOX(ticks_inout_box), this_proj -> curves[b][c] -> ticks_io[i]); gtk_combo_box_set_active (GTK_COMBO_BOX(ticks_pos_box), this_proj -> curves[b][c] -> ticks_pos[i]); gtk_combo_box_set_active (GTK_COMBO_BOX(labels_pos_box), this_proj -> curves[b][c] -> labels_pos[i]); gtk_font_chooser_set_font (GTK_FONT_CHOOSER(ticks_labels_font), this_proj -> curves[b][c] -> labels_font[i]); gtk_range_set_value (GTK_RANGE(ticks_labels_angle), this_proj -> curves[b][c] -> labels_angle[i] * (180.0/pi)); if (b < MS) { widget_set_sensitive (scale_box, 0); } else { g_signal_handler_disconnect (G_OBJECT(scale_box), handler_id); gtk_combo_box_set_active (GTK_COMBO_BOX(scale_box), this_proj -> curves[b][c] -> scale[i]); handler_id = g_signal_connect (G_OBJECT(scale_box), "changed", G_CALLBACK(set_scale), data); widget_set_sensitive (scale_box, 1); /* widget_set_sensitive (vmax, ! this_proj -> curves[b][c] -> scale[i]); widget_set_sensitive (vmin, ! this_proj -> curves[b][c] -> scale[i]); */ widget_set_sensitive (majt, ! this_proj -> curves[b][c] -> scale[i]); widget_set_sensitive (nmi[i], ! this_proj -> curves[b][c] -> scale[i]); } gtk_widget_hide (nmi[! i]); gtk_widget_hide (ndi[! i]); gtk_widget_hide (mats[! i]); gtk_widget_hide (mits[! i]); gtk_widget_hide (nptx[! i]); gtk_widget_hide (npty[! i]); gtk_widget_hide (tptx[! i]); gtk_widget_hide (tpty[! i]); gtk_widget_show (nmi[i]); gtk_widget_show (ndi[i]); gtk_widget_show (mats[i]); gtk_widget_show (mits[i]); gtk_widget_show (nptx[i]); gtk_widget_show (npty[i]); gtk_widget_show (tptx[i]); gtk_widget_show (tpty[i]); #ifdef GTK4 gtk_check_button_set_active (GTK_CHECK_BUTTON(show_axis), this_proj -> curves[b][c] -> show_axis[i]); gtk_check_button_set_active (GTK_CHECK_BUTTON(show_grid), this_proj -> curves[b][c] -> show_grid[i]); gtk_check_button_set_active (GTK_CHECK_BUTTON(axis_default_title), this_proj -> curves[b][c] -> axis_defaut_title[i]); #else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(show_axis), this_proj -> curves[b][c] -> show_axis[i]); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(show_grid), this_proj -> curves[b][c] -> show_grid[i]); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(axis_default_title), this_proj -> curves[b][c] -> axis_defaut_title[i]); #endif widget_set_sensitive (axis_title, ! this_proj -> curves[b][c] -> axis_defaut_title[i]); update_entry_text (GTK_ENTRY(axis_title), this_proj -> curves[b][c] -> axis_title[i]); gtk_font_chooser_set_font (GTK_FONT_CHOOSER(axis_title_font), this_proj -> curves[b][c] -> axis_title_font[i]); } /*! \fn GtkWidget * create_tab_4 (gpointer data) \brief handle the creation of the 4th tab of the curve edition dialog \param data the associated data pointer */ GtkWidget * create_tab_4 (gpointer data) { tint * cd = (tint *) data; int i; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); GtkWidget * axisbox; #ifdef GTK4 axisbox = create_vbox (3); #else axisbox = create_vbox (BSEP); #endif GtkWidget * ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("Select axis:", 175, -1, 1.0, 0.5), FALSE, FALSE, 0); axischoice = create_combo (); combo_text_append (axischoice, "X axis"); combo_text_append (axischoice, "Y axis"); gtk_combo_box_set_active (GTK_COMBO_BOX(axischoice), 0); gtk_widget_set_size_request (axischoice, 80, 35); g_signal_connect (G_OBJECT(axischoice), "changed", G_CALLBACK(update_axis), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, axischoice, FALSE, FALSE, 25); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 5); ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("Scale type:", 100, -1, 0.0, 0.5), FALSE, FALSE, 0); scale_box = create_combo (); combo_text_append (scale_box, "Linear"); combo_text_append (scale_box, "Log"); gtk_combo_box_set_active (GTK_COMBO_BOX(scale_box), this_proj -> curves[b][c] -> scale[0]); gtk_widget_set_size_request (scale_box, 80, -1); handler_id = g_signal_connect (G_OBJECT(scale_box), "changed", G_CALLBACK(set_scale), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, scale_box, FALSE, FALSE, 0); auto_scale = create_button ("Autoscale axis", IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(set_autoscale), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, auto_scale, FALSE, FALSE, 30); // Axis min and max ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("Min:", 30, -1, 0.5, 0.5), FALSE, FALSE, 20); vmin = create_entry (G_CALLBACK(set_axis_min), 100, 15, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, vmin, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("Max:", 30, -1, 0.5, 0.5), FALSE, FALSE, 20); vmax = create_entry (G_CALLBACK(set_axis_max), 100, 15, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, vmax, FALSE, FALSE, 0); // Major ticks spacing ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("Major ticks spacing:", 160, -1, 0.0, 0.5), FALSE, FALSE, 10); majt = create_entry (G_CALLBACK(set_max_div), 100, 15, FALSE, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, majt, FALSE, FALSE, 0); // Number of minors ticks ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("Number of minor ticks:", 160, -1, 0.0, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { nmi[i] = spin_button (G_CALLBACK(set_min_div_spin), (double)this_proj -> curves[b][c] -> mint[i]-1.0, 0.0, 100.0, 1.0, 0, 50, & dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, nmi[i], FALSE, FALSE, 0); } // Ticks ... ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("Tick marks:", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); // ... position ... ahbox = abox (axisbox, "Location:", 1); ticks_inout_box = create_combo (); combo_text_append (ticks_inout_box, "In"); combo_text_append (ticks_inout_box, "Out"); gtk_widget_set_size_request (ticks_inout_box, 60, -1); g_signal_connect (G_OBJECT(ticks_inout_box), "changed", G_CALLBACK(set_io_ticks), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, ticks_inout_box, FALSE, FALSE, 3); ticks_pos_box = create_combo (); combo_text_append (ticks_pos_box, "Normal"); combo_text_append (ticks_pos_box, "Opposite"); combo_text_append (ticks_pos_box, "Both"); combo_text_append (ticks_pos_box, "None"); gtk_widget_set_size_request (ticks_pos_box, 100, -1); g_signal_connect (G_OBJECT(ticks_pos_box), "changed", G_CALLBACK(set_pos_ticks), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, ticks_pos_box, FALSE, FALSE, 3); // ... sizes ... ahbox = abox (axisbox, "Major ticks size:", 1); for (i=0; i<2; i++) { mats[i] = spin_button (G_CALLBACK(set_ticks_size_major_spin), (double)this_proj -> curves[b][c] -> majt_size[i], 0.0, 100.0, 1.0, 0, 50, & dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, mats[i], FALSE, FALSE, 0); } ahbox = abox (axisbox, "Minor ticks size:", 1); for (i=0; i<2; i++) { mits[i] = spin_button (G_CALLBACK(set_ticks_size_minor_spin), (double)this_proj -> curves[b][c] -> mint_size[i], 0.0, 100.0, 1.0, 0, 50, & dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, mits[i], FALSE, FALSE, 0); } // Ticks labels ... ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("Tick labels:", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); // ... position ... ahbox = abox (axisbox, "Location:", 1); labels_pos_box = create_combo (); combo_text_append (labels_pos_box, "Normal"); combo_text_append (labels_pos_box, "Opposite"); combo_text_append (labels_pos_box, "Both"); combo_text_append (labels_pos_box, "None"); gtk_widget_set_size_request (labels_pos_box, 150, -1); g_signal_connect (G_OBJECT(labels_pos_box), "changed", G_CALLBACK(set_pos_labels), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, labels_pos_box, FALSE, FALSE, 0); // ... significant digits ... ahbox = abox (axisbox, "Significant digits:", 1); for (i=0; i<2; i++) { ndi[i] = spin_button (G_CALLBACK(set_lab_digit_spin), (double)this_proj -> curves[b][c] -> labels_digit[i], 0.0, 100.0, 1.0, 0, 50, & dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, ndi[i], FALSE, FALSE, 0); } // ... font ... ticks_labels_font = font_button (this_proj -> curves[b][c] -> labels_font[0], 150, 35, G_CALLBACK(set_ticks_labels_font), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (axisbox, "Font:", 1), ticks_labels_font, FALSE, FALSE, 5); // ... angle .. ticks_labels_angle = create_hscale (-180.0, 180.0, 1.0, 0.0, GTK_POS_LEFT, 0, 150, G_CALLBACK(set_ticks_angle), G_CALLBACK(scroll_set_ticks_angle), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (axisbox, "Angle:", 1), ticks_labels_angle, FALSE, FALSE, 5); // ...distance to axis ahbox = abox (axisbox, "Position: ", 1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("x:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { nptx[i] = spin_button (G_CALLBACK(set_lab_shift_x_spin), (double)this_proj -> curves[b][c] -> labels_shift_x[i], -100.0, 100.0, 1.0, 0, 50, & dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, nptx[i], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("y:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { npty[i] = spin_button (G_CALLBACK(set_lab_shift_y_spin), (double) this_proj -> curves[b][c] -> labels_shift_y[i], -100.0, 100.0, 1.0, 0, 50, & dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, npty[i], FALSE, FALSE, 0); } show_axis = check_button ("Show/hide axis (if min[axis] < 0.0 < max[axis])", 100, 30, FALSE, G_CALLBACK(set_axis), data); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, show_axis, FALSE, FALSE, 3); show_grid = check_button ("Show/hide axis grid", 100, 30, FALSE, G_CALLBACK(set_grid), data); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, show_grid, FALSE, FALSE, 1); // Axis title ahbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axisbox, ahbox, FALSE, FALSE,3); axis_default_title = check_button ("Use default axis title", 175, -1, FALSE, G_CALLBACK(to_axis_title), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, axis_default_title, FALSE, FALSE, 0); axis_title = create_entry (G_CALLBACK(set_axis_legend), 150, 15, FALSE, data); gtk_entry_set_alignment (GTK_ENTRY(axis_title), 0.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, axis_title, FALSE, FALSE, 0); axis_title_font = font_button (this_proj -> curves[b][c] -> axis_title_font[0], 150, 35, G_CALLBACK(set_axis_title_font), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (axisbox, "Font:", 3), axis_title_font, FALSE, FALSE, 0); ahbox = abox (axisbox, "Position: ", 3); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("x:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { tptx[i] = spin_button (G_CALLBACK(set_axis_title_x_spin), (double)this_proj -> curves[b][c] -> axis_title_x[i], -500.0, 500.0, 1.0, 0, 50, & dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, tptx[i], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label("y:", -1, -1, 0.9, 0.5), FALSE, FALSE, 10); for (i=0; i<2; i++) { tpty[i] = spin_button (G_CALLBACK(set_axis_title_y_spin), (double)this_proj -> curves[b][c] -> axis_title_y[i], -500.0, 500.0, 1.0, 0, 50, & dataxe[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, tpty[i], FALSE, FALSE, 0); } return axisbox; } Atomes-GNU-1.1.14/src/curve/title.c000066400000000000000000000062701457665371200167020ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file title.c * @short Functions to draw the title * @author Sébastien Le Roux */ /* * This file: 'title.c' * * Contains: * - The functions to draw the curve title * * List of functions: const gchar * default_title (int ax, int c); void show_title (cairo_t * cr, project * this_proj, int rid, int cid); */ #include #include #include #include "global.h" #include "curve.h" /*! \fn const gchar * default_title (int ax, int c) \brief default title string \param ax axis \param c curve id */ const gchar * default_title (int ax, int c) { if (ax == 0) { if (activer == GR || activer == GK) { return ("r [Å]"); } else if (activer == SQ || activer == SK) { return ("q [Å-1]"); } else if (activer == BD) { return ("Dij [Å]"); } else if (activer == AN) { return ("θ [°]"); } else if (activer == RI) { return ("Size n of the ring [total number of nodes]"); } else if (activer == CH) { return ("Size n of the chain [total number of nodes]"); } else if (activer == SP) { return ("Ql"); } else { return g_strdup_printf ("t [%s]", untime[active_project -> tunit]); } } else { return active_project -> curves[activer][c] -> name; } } /*! \fn void show_title (cairo_t * cr, project * this_proj, int rid, int cid) \brief draw title \param cr the cairo drawing context to use for the draw \param this_proj the target project \param rid the calculation id \param cid the curve id */ void show_title (cairo_t * cr, project * this_proj, int rid, int cid) { double x, y; x = this_proj -> curves[rid][cid] -> title_pos[0] * resol[0]; y = this_proj -> curves[rid][cid] -> title_pos[1] * resol[1]; cairo_set_source_rgba (cr, this_proj -> curves[rid][cid] -> title_color.red, this_proj -> curves[rid][cid] -> title_color.green, this_proj -> curves[rid][cid] -> title_color.blue, this_proj -> curves[rid][cid] -> title_color.alpha); pango_layout_set_font_description (layout, pango_font_description_from_string (this_proj -> curves[rid][cid] -> title_font)); pango_layout_set_text (layout, this_proj -> curves[rid][cid] -> title, -1); cairo_move_to (cr, x, y); pango_cairo_update_layout (cr, layout); pango_cairo_show_layout (cr, layout); cairo_stroke (cr); } Atomes-GNU-1.1.14/src/curve/w_curve.c000066400000000000000000000637021457665371200172360ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_curve.c * @short Functions to create the graph/curve window * @author Sébastien Le Roux */ /* * This file: 'w_curve.c' * * Contains: * - The functions to create the graph/curve window * * List of functions: int get_curve_shift (project * this_proj, int b, int c); G_MODULE_EXPORT gboolean view_curve_popup (GtkWidget * widget, gpointer data); G_MODULE_EXPORT gboolean on_motion_notify_event (GtkWidget * widget, GdkEventMotion * event, gpointer data); G_MODULE_EXPORT gboolean on_curve_button_event (GtkWidget * widget, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data); G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data); void curve_zoom_in_out (gboolean state, gdouble event_x, gdouble event_y, gpointer data); void curve_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void curve_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void curve_key_pressed (guint keyval, GdkModifierType state, gpointer data); static void on_curve_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT void on_curve_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_curve_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data); GtkWidget * create_curve (tint * data); */ #include #include #include #include #include #include "global.h" #include "callbacks.h" #include "curve.h" #include "cedit.h" #include "datab.h" extern void autoscale (gpointer data); extern void curve_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); int curve_action_id = -1; int activeg = 0; int activec = 0; int activer = 0; #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean view_curve_popup (GtkWidget * widget, gpointer data) \brief show curve popup menu GTK3 \param widget the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean view_curve_popup (GtkWidget * widget, gpointer data) { pop_menu_at_pointer (curve_popup_menu(data), NULL); return TRUE; } #endif /*! \fn void curve_zoom_in_out (gboolean state, gdouble event_x, gdouble event_y, gpointer data) \brief curve zoom in or out \param state mouse button state (pressed or released) \param event_x x position \param event_y y position \param data the associated data pointer */ void curve_zoom_in_out (gboolean state, gdouble event_x, gdouble event_y, gpointer data) { int a, b, c; int x, y; double r, g, d; double tmp, xp, yp; gchar * str; gint width, height; CurveState * cstate = (CurveState *)data; a = cstate -> id -> a; b = cstate -> id -> b; c = cstate -> id -> c; project * this_proj = get_project_by_id(a); int curve_shift = get_curve_shift (this_proj,b,c); #ifdef GTK4 event_y -= (double) curve_shift; #endif if (state && cstate -> mouseState.MouseIsDown) { cairo_t * rec; cairo_region_t * reg; #ifdef GTK3 GdkWindow * win = gtk_widget_get_window (this_proj -> curves[b][c] -> plot); reg = gdk_window_get_visible_region (win); GdkDrawingContext * curve_context = gdk_window_begin_draw_frame (win, reg); if (gdk_drawing_context_is_valid (curve_context)) { rec = gdk_drawing_context_get_cairo_context (curve_context); if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) #else GtkNative * native = gtk_widget_get_native (this_proj -> curves[b][c] -> plot); GdkSurface * surf = gtk_native_get_surface (native); cairo_surface_t * csurf = cairo_surface_create_for_rectangle (this_proj -> curves[b][c] -> surface, 0.0, (double)curve_shift, (double)gtk_widget_get_width(this_proj -> curves[b][c] -> plot), (double)gtk_widget_get_height(this_proj -> curves[b][c] -> plot)); reg = gdk_cairo_region_create_from_surface (csurf); GdkDrawContext * curve_context = (GdkDrawContext *) gdk_surface_create_cairo_context (surf); gdk_draw_context_begin_frame (curve_context, reg); if (gdk_draw_context_is_in_frame (curve_context)) { rec = gdk_cairo_context_cairo_create ((GdkCairoContext *)curve_context); if (event_x >= x_min && event_x <= x_max && event_y <= y_min+(double)curve_shift && event_y >= y_max) #endif { width = event_x - cstate -> mouseState.start_x; height = event_y - cstate -> mouseState.start_y; #ifdef GTK3 cairo_set_source_surface (rec, this_proj -> curves[b][c] -> surface, 0, -curve_shift); #else height += (double) curve_shift; cairo_set_source_surface (rec, this_proj -> curves[b][c] -> surface, 0, +curve_shift); #endif cairo_paint (rec); if (event_x < cstate -> mouseState.start_x) { r=0.0; x = cstate -> mouseState.start_x + 2; if (event_y < cstate -> mouseState.start_y) { g=0.0; d=1.0; y = cstate -> mouseState.start_y + 8; str = g_strdup_printf ("zoom: out (x) / in (y)"); } else { g=1.0; d=0.0; y = cstate -> mouseState.start_y - 4; str = g_strdup_printf ("zoom: out (x) / out (y)"); } } else { r=1.0; x = cstate -> mouseState.start_x - 100; if (event_y < cstate -> mouseState.start_y) { g=0.0; d=0.0; y = cstate -> mouseState.start_y + 8; str = g_strdup_printf ("zoom: in (x) / in (y)"); } else { g=0.0; d=1.0; y = cstate -> mouseState.start_y - 4; str = g_strdup_printf ("zoom: in (x) / out (y)"); } } cairo_set_source_rgba (rec, r, g, d, 0.05); cairo_rectangle (rec, cstate -> mouseState.start_x, cstate -> mouseState.start_y, width, height); cairo_fill (rec); cairo_set_source_rgba (rec, r, g, d, 1.0); cairo_set_line_width (rec, 1.0); cairo_move_to (rec, cstate -> mouseState.start_x, cstate -> mouseState.start_y); #ifdef GTK4 event_y += (double) curve_shift; #endif cairo_line_to (rec, cstate -> mouseState.start_x, event_y); cairo_line_to (rec, event_x, event_y); cairo_line_to (rec, event_x, cstate -> mouseState.start_y); cairo_line_to (rec, cstate -> mouseState.start_x, cstate -> mouseState.start_y); cairo_stroke (rec); if (abs(width) > 10 && abs(height) > 5) { cairo_move_to (rec, x, y); cairo_show_text (rec, str); } g_free (str); width = event_x - x_min; tmp = this_proj -> curves[b][c] -> axmax[0] - this_proj -> curves[b][c] -> axmin[0]; xp = this_proj -> curves[b][c] -> axmin[0] + width * tmp / XDRAW; #ifdef GTK4 event_y -= (double) curve_shift; #endif height = event_y - y_max; tmp = this_proj -> curves[b][c] -> axmax[1] - this_proj -> curves[b][c] -> axmin[1]; yp = this_proj -> curves[b][c] -> axmax[1] + height * tmp / YDRAW; str = g_strdup_printf ("(x= %f, y= %f)", xp, yp); } else { str = g_strdup_printf ("(Not in plot)"); } gtk_label_set_text (GTK_LABEL(this_proj -> curves[b][c] -> pos), str); g_free (str); } #ifdef GTK3 gdk_window_end_draw_frame (win, curve_context); #else gdk_draw_context_end_frame (curve_context); #endif } else if (! cstate -> mouseState.MouseIsDown) { #ifdef GTK3 // gtk_widget_get_size_request (this_proj -> curves[b][c] -> plot, & this_proj -> curves[b][c] -> wsize[0], & this_proj -> curves[b][c] -> wsize[1]); gtk_window_get_size (GTK_WINDOW(this_proj -> curves[b][c] -> window), & this_proj -> curves[b][c] -> wsize[0], & y); this_proj -> curves[b][c] -> wsize[1] = y - curve_shift; #else this_proj -> curves[b][c] -> wsize[0] = gtk_widget_get_width (this_proj -> curves[b][c] -> plot); this_proj -> curves[b][c] -> wsize[1] = gtk_widget_get_height (this_proj -> curves[b][c] -> plot); #endif prep_plot (this_proj, b, c); #ifdef GTK4 if (event_x >= x_min && event_x <= x_max && event_y <= y_min+(double)curve_shift && event_y >= y_max) #else if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) #endif { width = event_x - x_min; tmp = this_proj -> curves[b][c] -> axmax[0] - this_proj -> curves[b][c] -> axmin[0]; xp = this_proj -> curves[b][c] -> axmin[0] + width * tmp / XDRAW; height = event_y - y_max; tmp = this_proj -> curves[b][c] -> axmax[1] - this_proj -> curves[b][c] -> axmin[1]; yp = this_proj -> curves[b][c] -> axmax[1] + height * tmp / YDRAW; str = g_strdup_printf ("(x= %f, y= %f)", xp, yp); } else { str = g_strdup_printf ("Not in plot"); } gtk_label_set_text (GTK_LABEL(this_proj -> curves[b][c] -> pos), str); g_free (str); } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_motion_notify_event (GtkWidget * widget, GdkEventMotion * event, gpointer data) \brief handle mouse motion event in the OpenGL window GTK3 \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_motion_notify_event (GtkWidget * widget, GdkEventMotion * event, gpointer data) { curve_zoom_in_out ((event -> state & GDK_BUTTON1_MASK) ? TRUE : FALSE, event -> x, event -> y, data); return TRUE; } #else /*! \fn static void on_curve_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) \brief handle mouse motion event in the curve window GTK4 \param motion The GtkEvenController sending the signal \param x x position \param y y position \param data the associated data pointer */ static void on_curve_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) { curve_zoom_in_out (((CurveState *)data) -> mouseState.MouseIsDown, x, y, data); } #endif #ifdef GTK4 /*! \fn void curve_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the curve window GTK4 \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void curve_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #else /*! \fn void curve_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the curve window GTK3 \param event the GdkEvent triggering the signal \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void curve_button_event (GdkEvent * event, double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) #endif { int x1, x2, y1, y2; double tmp; int a, b, c; CurveState * cstate = (CurveState *)data; a = activeg = cstate -> id -> a; b = activer = cstate -> id -> b; c = activec = cstate -> id -> c; project * this_proj = get_project_by_id(a); #ifdef GTK4 int curve_shift = get_curve_shift (this_proj, b, c); #endif if (event_type == GDK_BUTTON_PRESS) { if (event_button == 1) { #ifdef GTK3 /* The following is not working: gtk_widget_get_size_request (this_proj -> curves[b][c] -> plot, & this_proj -> curves[b][c] -> wsize[0], & this_proj -> curves[b][c] -> wsize[1]); */ gtk_window_get_size (GTK_WINDOW(this_proj -> curves[b][c] -> window), & this_proj -> curves[b][c] -> wsize[0], & y1); this_proj -> curves[b][c] -> wsize[1] = y1 - get_curve_shift (this_proj, b, c); #else this_proj -> curves[b][c] -> wsize[0] = gtk_widget_get_width (this_proj -> curves[b][c] -> plot); this_proj -> curves[b][c] -> wsize[1] = gtk_widget_get_height (this_proj -> curves[b][c] -> plot); #endif prep_plot (this_proj, b, c); #ifdef GTK4 if (event_x >= x_min && event_x <= x_max && event_y <= y_min+(double)curve_shift && event_y >= y_max) #else if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) #endif { cstate -> mouseState.start_x = event_x; cstate -> mouseState.start_y = event_y; cstate -> mouseState.time = event_time; cstate -> mouseState.MouseIsDown = TRUE; } } else if (event_button == 3) { #ifdef GTK4 pop_menu_at_pointer (curve_popup_menu(data), event_x, event_y); #else pop_menu_at_pointer (curve_popup_menu(data), event); #endif } } else if (event_type == GDK_BUTTON_RELEASE) { cstate -> mouseState.MouseIsDown = FALSE; if (event_button == 1) { etime = event_time - cstate -> mouseState.time; if (event_x >= x_min && event_x <= x_max && event_y <= y_min && event_y >= y_max) { if (event_x != cstate -> mouseState.start_x && event_y != cstate -> mouseState.start_y) { if (etime > 500 && etime < 50000) { x1 = cstate -> mouseState.start_x - x_min; y1 = cstate -> mouseState.start_y - y_max; x2 = event_x - x_min; y2 = event_y - y_max; #ifdef GTK4 y1 -= curve_shift; y2 -= curve_shift; #endif tmp = this_proj -> curves[b][c] -> axmax[0] - this_proj -> curves[b][c] -> axmin[0]; if (x2 > x1) { // zoom-in on X this_proj -> curves[b][c] -> axmax[0] = this_proj -> curves[b][c] -> axmin[0] + x2 * tmp / XDRAW; this_proj -> curves[b][c] -> axmin[0] = this_proj -> curves[b][c] -> axmin[0] + x1 * tmp / XDRAW; } else { // zoom-out on X this_proj -> curves[b][c] -> axmin[0] = this_proj -> curves[b][c] -> axmin[0] - (x1 - x2) * tmp / XDRAW; this_proj -> curves[b][c] -> axmax[0] = this_proj -> curves[b][c] -> axmax[0] + (x1 - x2) * tmp / XDRAW; } tmp = this_proj -> curves[b][c] -> axmax[1] - this_proj -> curves[b][c] -> axmin[1]; if (y1 > y2) { // zoom-in on Y this_proj -> curves[b][c] -> axmin[1] = this_proj -> curves[b][c] -> axmax[1] + y1 * tmp / YDRAW; this_proj -> curves[b][c] -> axmax[1] = this_proj -> curves[b][c] -> axmax[1] + y2 * tmp / YDRAW; } else { // zoom-out on Y this_proj -> curves[b][c] -> axmin[1] = this_proj -> curves[b][c] -> axmin[1] + (y2 - y1) * tmp / YDRAW; this_proj -> curves[b][c] -> axmax[1] = this_proj -> curves[b][c] -> axmax[1] - (y2 - y1) * tmp / YDRAW; } } } } tint id; id.a = a; id.b = b; id.c = c; update_curve ((gpointer)& id); } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_curve_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed signal on the curve window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_curve_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { curve_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_curve_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released signal on the curve window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_curve_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { curve_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #else /*! \fn G_MODULE_EXPORT gboolean on_curve_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) \brief mouse button event on the curve window \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_curve_button_event (GtkWidget * widget, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton *)event; curve_button_event (event, bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return TRUE; } #endif /*! \fn void curve_key_pressed (guint keyval, GdkModifierType state, gpointer data) \brief the keyboard shortcut actions for the curve window \param keyval the key pressed \param state the keyboard modifier \param data the associated data pointer */ void curve_key_pressed (guint keyval, GdkModifierType state, gpointer data) { if (state & GDK_CONTROL_MASK) { switch (keyval) { case GDK_KEY_a: autoscale (data); break; case GDK_KEY_c: hide_curve (data); break; case GDK_KEY_e: edit_curve (data); break; case GDK_KEY_i: save_image (data); break; case GDK_KEY_s: write_curve (data); break; } } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) \brief keyboard key press event for the curve window GTK3 \param widg the GtkWidget sending the signal \param event the GdkEventKey triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) { if (event -> type == GDK_KEY_PRESS) { //GdkModifierType accel_mask = gtk_accelerator_get_default_mod_mask (); // if ((event -> state & accel_mask) == GDK_CONTROL_MASK) curve_key_pressed (event -> keyval, event -> state, data); } return FALSE; } #else /*! \fn G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) \brief keyboard key press event for the curve window GTK4 \param self the GtkEventControllerKey sending the signal \param keyval number of times it was pressed \param keycode the key pressed \param state the keyboard modifier \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_curve_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) { curve_key_pressed (keyval, state, data); return TRUE; } #endif /*! \fn int get_curve_shift (project * this_proj, int b, int c) \brief get cruve window size shift \param this_proj the target project \param b the calculation id \param c the curve id */ int get_curve_shift (project * this_proj, int b, int c) { return gtk_widget_get_allocated_height (this_proj -> curves[b][c] -> window) - gtk_widget_get_allocated_height (this_proj -> curves[b][c] -> plot); } /*! \fn G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data) \brief curve window realize callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_curve_realize (GtkWidget * widg, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id(id -> a); resize_this_window (this_proj -> curves[id -> b][id -> c] -> window, this_proj -> curves[id -> b][id -> c] -> wsize[0], this_proj -> curves[id -> b][id -> c] -> wsize[1]+get_curve_shift (this_proj, id -> b, id -> c)); } /*! \fn GtkWidget * create_curve (tint * data) \brief create the curve data plot window \param data the associated data pointer */ GtkWidget * create_curve (tint * data) { GtkWidget * Curve, * vbox; activec = data -> c; project * this_proj = get_project_by_id(data -> a); gchar * str = g_strdup_printf ("%s - %s", prepare_for_title (this_proj -> name), this_proj -> curves[data -> b][data -> c] -> name); Curve = create_win (str, MainWindow, FALSE, TRUE); activer = data -> b; g_free (str); vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, Curve, vbox); this_proj -> curves[data -> b][data -> c] -> curve_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_proj -> curves[data -> b][data -> c] -> curve_vbox, FALSE, FALSE, 0); curve_action_id ++; this_proj -> curves[data -> b][data -> c] -> action_id = curve_action_id; this_proj -> curves[data -> b][data -> c] -> action_group = g_simple_action_group_new (); GSimpleAction * curve_action[4]; curve_action[0] = g_simple_action_new ("save.data", NULL); curve_action[1] = g_simple_action_new ("close.curve", NULL); curve_action[2] = g_simple_action_new ("edit.curve", NULL); curve_action[3] = g_simple_action_new ("save.image", NULL); int i; for (i=0; i<4; i++) { g_action_map_add_action (G_ACTION_MAP(this_proj -> curves[data -> b][data -> c] -> action_group), G_ACTION(curve_action[i])); g_signal_connect (curve_action[i], "activate", G_CALLBACK(curve_menu_bar_action), data); } str = g_strdup_printf ("c-%d", this_proj -> curves[data -> b][data -> c] -> action_id); gtk_widget_insert_action_group (Curve, str, G_ACTION_GROUP(this_proj -> curves[data -> b][data -> c] -> action_group)); g_free (str); curve_window_add_menu_bar (data); this_proj -> curves[data -> b][data -> c] -> datatree = NULL; this_proj -> curves[data -> b][data -> c] -> state.id = data; this_proj -> curves[data -> b][data -> c] -> plot = gtk_drawing_area_new (); gtk_widget_set_size_request (this_proj -> curves[data -> b][data -> c] -> plot, 100, 100); gtk_widget_set_hexpand (this_proj -> curves[data -> b][data -> c] -> plot, TRUE); gtk_widget_set_vexpand (this_proj -> curves[data -> b][data -> c] -> plot, TRUE); #ifdef GTK3 gtk_widget_add_events (GTK_WIDGET (this_proj -> curves[data -> b][data -> c] -> plot), GDK_EXPOSURE_MASK | GDK_SMOOTH_SCROLL_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); g_signal_connect (G_OBJECT(this_proj -> curves[data -> b][data -> c] -> plot), "motion_notify_event", G_CALLBACK(on_motion_notify_event), & this_proj -> curves[data -> b][data -> c] -> state); g_signal_connect (G_OBJECT(this_proj -> curves[data -> b][data -> c] -> plot), "button_press_event", G_CALLBACK(on_curve_button_event), & this_proj -> curves[data -> b][data -> c] -> state); g_signal_connect (G_OBJECT(this_proj -> curves[data -> b][data -> c] -> plot), "button_release_event", G_CALLBACK(on_curve_button_event),& this_proj -> curves[data -> b][data -> c] -> state); g_signal_connect (G_OBJECT(this_proj -> curves[data -> b][data -> c] -> plot), "popup-menu", G_CALLBACK(view_curve_popup), & this_proj -> curves[data -> b][data -> c] -> state); #else add_widget_gesture_and_key_action (Curve, "curve-button-pressed", G_CALLBACK(on_curve_button_pressed), & this_proj -> curves[data -> b][data -> c] -> state, "curve-button-released", G_CALLBACK(on_curve_button_released), & this_proj -> curves[data -> b][data -> c] -> state, "curve-key-pressed", G_CALLBACK(on_curve_key_pressed), data, "curve-pointer-motion", G_CALLBACK(on_curve_pointer_motion), & this_proj -> curves[data -> b][data -> c] -> state, NULL, NULL, NULL); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_proj -> curves[data -> b][data -> c] -> plot, FALSE, TRUE, 0); #ifdef GTK3 g_signal_connect (G_OBJECT(this_proj -> curves[data -> b][data -> c] -> plot), "draw", G_CALLBACK(show_curve), data); g_signal_connect (G_OBJECT(Curve), "key-press-event", G_CALLBACK(on_curve_key_pressed), data); #else gtk_drawing_area_set_draw_func (GTK_DRAWING_AREA(this_proj -> curves[data -> b][data -> c] -> plot), (GtkDrawingAreaDrawFunc)show_curve, data, NULL); #endif g_signal_connect (G_OBJECT(Curve), "realize", G_CALLBACK(on_curve_realize), data); add_gtk_close_event (Curve, G_CALLBACK(to_hide_curve), data); return Curve; } Atomes-GNU-1.1.14/src/curve/w_data.c000066400000000000000000000160121457665371200170130ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_data.c * @short Functions to export curve data * @author Sébastien Le Roux */ /* * This file: 'w_data.c' * * Contains: * - The functions to export curve data * * List of functions: void write_curve (gpointer idata); G_MODULE_EXPORT void run_write_curve (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_write_curve (GtkDialog * info, gint response_id, gpointer data); */ #include #include #include #include "global.h" #include "interface.h" #include "curve.h" void save_to_file_ (int *, char *, int *, double *, double *, int *, int *, int *, double *, int *, int *, int *, int *, char *); void prep_file_ (int *, char *, int *, int *, int *, double *, int *, int *); void append_to_file_ (int *, double *, double *, double *, int *, int *, int *, int *, int *, int *, int *, char *); GtkFileFilter * filter1, * filter2; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_write_curve (GtkNativeDialog * info, gint response_id, gpointer data) \brief save curve data - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_curve (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_write_curve (GtkDialog * info, gint response_id, gpointer data) \brief save curve data - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_curve (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int a, b, c, i, j, k, l, m, n, o, p, q; tint * cd = (tint *)data; a = cd -> a; b = cd -> b; c = cd -> c; if (response_id == GTK_RESPONSE_ACCEPT) { project * this_proj = get_project_by_id(a); this_proj -> curves[b][c] -> cfile = file_chooser_get_file_name (chooser); GtkFileFilter * tmp = gtk_file_chooser_get_filter (chooser); if (tmp == filter1) { l = 0; } else if (tmp == filter2) { l = 1; } k = strlen(this_proj -> curves[b][c] -> cfile); j = strlen (this_proj -> curves[b][c] -> title); if (this_proj -> curves[b][c] -> extrac -> extras == 0) { save_to_file_ (& k, this_proj -> curves[b][c] -> cfile, & this_proj -> curves[b][c] -> ndata, this_proj -> curves[b][c] -> data[0], this_proj -> curves[b][c] -> data[1], & this_proj -> curves[b][c] -> scale[0], & this_proj -> curves[b][c] -> scale[1], & this_proj -> curves[b][c] -> layout -> aspect, & this_proj -> delta[b], & b, & c, & l, & j, this_proj -> curves[b][c] -> title); } else { p = this_proj -> curves[b][c] -> extrac -> extras + 1; m = 0; prep_file_ (& k, this_proj -> curves[b][c] -> cfile, & l, & this_proj -> curves[b][c] -> scale[0], & this_proj -> curves[b][c] -> scale[1], & this_proj -> delta[b], & b, & c); append_to_file_ (& this_proj -> curves[b][c] -> ndata, this_proj -> curves[b][c] -> data[0], this_proj -> curves[b][c] -> data[1], & this_proj -> delta[b], & this_proj -> curves[b][c] -> layout -> aspect, & b, & c, & l, & m, & p, & j, this_proj -> curves[b][c] -> title); j = this_proj -> curves[b][c] -> extrac -> extras; CurveExtra * ctmp = this_proj -> curves[b][c] -> extrac -> first; for (i=0 ; i < j ; i++ ) { m = m + 1; q = ctmp -> id.a; o = ctmp -> id.b; n = ctmp -> id.c; this_proj = get_project_by_id(q); j = strlen (this_proj -> curves[o][n] -> title); append_to_file_ (& this_proj -> curves[o][n] -> ndata, this_proj -> curves[o][n] -> data[0], this_proj -> curves[o][n] -> data[1], & this_proj -> delta[o], & ctmp -> layout -> aspect, & o, & n, & l, & m, & p, & j, this_proj -> curves[o][n] -> title); if (ctmp -> next) ctmp = ctmp -> next; } } } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn void write_curve (gpointer idata) \brief save curve data - creating the dialog \param idata the associated data pointer */ void write_curve (gpointer idata) { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif tint * cd = (tint *)idata; int a, b, c; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); info = create_file_chooser ("Save Data", GTK_WINDOW(this_proj -> curves[b][c] -> window), GTK_FILE_CHOOSER_ACTION_SAVE, "Save"); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), "Xmgrace file (*.agr)"); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), "*.agr"); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), "x/y ASCII file (*.dat)"); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*.dat"); gtk_file_chooser_add_filter (chooser, filter2); if (this_proj -> curves[b][c] -> cfile != NULL) { if (! file_chooser_set_file_name (chooser, this_proj -> curves[b][c] -> cfile)) goto end; } else { file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, this_proj -> curves[b][c] -> name); } #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_write_curve), idata); #else run_this_gtk_dialog (info, G_CALLBACK(run_write_curve), idata); #endif end:; } Atomes-GNU-1.1.14/src/curve/w_img.c000066400000000000000000000271211457665371200166610ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_img.c * @short Functions to save screenshot from graph / curve(s) * @author Sébastien Le Roux */ /* * This file: 'w_img.c' * * Contains: * - The functions to save screenshot from graph / curve(s) * * List of functions: void write_image (gpointer curetow); void save_image (gpointer cdata); G_MODULE_EXPORT void set_size (GtkEntry * val, gpointer data); G_MODULE_EXPORT void set_background (GtkCheckButton * backb); G_MODULE_EXPORT void set_background (GtkToggleButton * backb); G_MODULE_EXPORT void choose_format (GtkComboBox * box, gpointer cid); G_MODULE_EXPORT void run_write_image (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_write_image (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_save_image (GtkDialog * save_img, gint response_id, gpointer data); */ #include #include #include "global.h" #include "interface.h" #include "curve.h" typedef struct { GtkWidget * a; GtkWidget * b; } dwidget; double back_alpha; dwidget thedata; int forme; /*! \fn G_MODULE_EXPORT void set_size (GtkEntry * val, gpointer data) \brief set image size entry callback \param val the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_size (GtkEntry * val, gpointer data) { const gchar * m; char * text[2]; int i, j; j = GPOINTER_TO_INT(data); text[0] = "X size must be > 0"; text[1] = "Y size must be > 0"; m = entry_get_text (val); i = atof(m); if (i > 0) { resol[j] = i; } else { show_warning (text[j], NULL); } update_entry_int (val, resol[j]); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_background (GtkCheckButton * backb, gpointer data) \brief show / hide image background toggle callback GTK4 \param backb the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_background (GtkCheckButton * backb, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_background (GtkToggleButton * backb, gpointer data) \brief show / hide image background toggle callback GTK3 \param backb the GtkTogglekButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_background (GtkToggleButton * backb, gpointer data) #endif { #ifdef GTK4 if (gtk_check_button_get_active (backb)) #else if (gtk_toggle_button_get_active (backb)) #endif { back_alpha = 0.0; } else { back_alpha = 1.0; } } /*! \fn G_MODULE_EXPORT void choose_format (GtkComboBox * box, gpointer cid) \brief change image format \param box the GtkComboBox sending the signal \param cid the associated data pointer */ G_MODULE_EXPORT void choose_format (GtkComboBox * box, gpointer cid) { forme = gtk_combo_box_get_active (box); if (forme != -1) { dwidget * imf = (dwidget *) cid; #ifdef GTK4 gtk_check_button_set_active (GTK_CHECK_BUTTON(imf -> a), 0); #else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(imf -> a), 0); #endif if (forme == 1 || forme == 3) { widget_set_sensitive(imf -> a, 0); } else { widget_set_sensitive(imf -> a, 1); } switch (forme) { case 0: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_PNG); break; case 1: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_PDF); break; case 2: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_SVG); break; case 3: gtk_image_set_from_file (GTK_IMAGE(imf -> b), PACKAGE_EPS); break; } } } gchar * i_title[4]={"Portable Network Graphics", "Portable Document File", "Scalable Vector Graphics", "Encapsulated Post-Script Image"}; gchar * i_pattern[4]={"*.png", "*.pdf", "*.svg", "*.eps"}; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_write_image (GtkNativeDialog * info, gint response_id, gpointer data) \brief write image - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_image (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_write_image (GtkDialog * info, gint response_id, gpointer data) \brief write image - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_write_image (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif tint * cd = (tint *)data; if (response_id == GTK_RESPONSE_ACCEPT) { curve_image_file = file_chooser_get_file_name (chooser); project * this_proj = get_project_by_id (cd -> a); this_proj -> curves[cd -> b][cd -> c] -> format = forme + 1; #ifdef GTK3 show_curve (NULL, NULL, data); #else GdkSurface * surf = gtk_native_get_surface ((GtkNative *)this_proj -> curves[cd -> b][cd -> c] -> plot); cairo_t * rec = (cairo_t *)gdk_cairo_context_cairo_create (gdk_surface_create_cairo_context (surf)); show_curve (NULL, rec, resol[0], resol[1], data); #endif } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn void write_image (gpointer curetow) \brief write image - creating the file chooser dialog \param curetow the associated data pointer */ void write_image (gpointer curetow) { int a, b, c; tint * cd = (tint *)curetow; a = cd -> a; b = cd -> b; c = cd -> c; gchar * i_filter[4]={"PNG file (*.png)", "PDF file (*.pdf)", "SVG file (*.svg)", "EPS file (*.eps)"}; GtkFileFilter * filter; project * this_proj = get_project_by_id(a); if (forme == -1) { show_warning ("To save an image please enter a file format", this_proj -> curves[b][c] -> window); } else if (resol[0] == 0 || resol[1] == 0) { show_warning ("You need to specify the size of the image", this_proj -> curves[b][c] -> window); } else { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser (i_title[forme], GTK_WINDOW(this_proj -> curves[b][c] -> window), GTK_FILE_CHOOSER_ACTION_SAVE, "Save"); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif filter = gtk_file_filter_new(); gtk_file_filter_set_name(GTK_FILE_FILTER(filter), i_filter[forme]); gtk_file_filter_add_pattern(GTK_FILE_FILTER(filter), i_pattern[forme]); gtk_file_chooser_add_filter (chooser, filter); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_write_image), curetow); #else run_this_gtk_dialog (info, G_CALLBACK(run_write_image), curetow); #endif } } /*! \fn G_MODULE_EXPORT void run_save_image (GtkDialog * save_img, gint response_id, gpointer data) \brief export curve window plot to image - running the dialog \param save_img the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_image (GtkDialog * save_img, gint response_id, gpointer data) { gboolean done = FALSE; while (! done) { switch (response_id) { case GTK_RESPONSE_APPLY: if (forme > -1) { write_image (data); done = TRUE; } else { done = FALSE; } break; default: done = TRUE; break; } } if (done) destroy_this_dialog (save_img); } /*! \fn void save_image (gpointer cdata) \brief export curve window plot to image - creating the dialog \param cdata the associated data pointer */ void save_image (gpointer cdata) { GtkWidget * save_img; GtkWidget * hbox; GtkWidget * comboformat; GtkWidget * x; GtkWidget * y; GtkWidget * background; GtkWidget * log; int xlgt, ylgt; int i; gchar * str; int a, b, c; tint * cd = (tint *)cdata; a = cd -> a; b = cd -> b; c = cd -> c; project * this_proj = get_project_by_id(a); save_img = dialog_cancel_apply ("Export image", this_proj -> curves[b][c] -> window, FALSE); gtk_window_set_resizable (GTK_WINDOW (save_img), FALSE); #ifndef GTK4 gtk_window_set_icon (GTK_WINDOW (save_img), THETD); #endif GtkWidget * vbox = dialog_get_content_area (save_img); gtk_box_set_spacing (GTK_BOX(vbox), 15); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ("Format: ", -1, 50, 0.0, 0.5), TRUE, TRUE, 0); GtkWidget * fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, TRUE, TRUE, 10); comboformat = create_combo (); for (i=0; i<4; i++) { str = g_strdup_printf ("%s - (%s)", i_title[i], i_pattern[i]); combo_text_append (comboformat, str); g_free (str); } gtk_fixed_put (GTK_FIXED(fixed), comboformat, -1, 10); gtk_widget_set_size_request (comboformat, -1, 30); log = gtk_image_new_from_file (PACKAGE_VOID); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, log, TRUE, TRUE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Size: ", 100, -1, 0.0, 0.5), FALSE, TRUE, 0); xlgt = gtk_widget_get_allocated_width (this_proj -> curves[b][c] -> plot); ylgt = gtk_widget_get_allocated_height (this_proj -> curves[b][c] -> plot); x = create_entry (G_CALLBACK(set_size), 50, 15, FALSE, GINT_TO_POINTER(0)); update_entry_int (GTK_ENTRY(x), xlgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, x, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new ("x"), TRUE, TRUE, 5); y = create_entry (G_CALLBACK(set_size), 50, 15, FALSE, GINT_TO_POINTER(1)); update_entry_int (GTK_ENTRY(y), ylgt); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, y, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new ("pixels"), TRUE, TRUE, 0); background = check_button ("Make background transparent", -1, -1, FALSE, G_CALLBACK(set_background), NULL); widget_set_sensitive (background, FALSE); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, background, TRUE, TRUE, 0); forme = -1; back_alpha = 1.0; thedata.a = background; thedata.b = log; g_signal_connect (G_OBJECT(comboformat), "changed", G_CALLBACK(choose_format), & thedata); run_this_gtk_dialog (save_img, G_CALLBACK(run_save_image), cdata); } Atomes-GNU-1.1.14/src/curve/xaxis.c000066400000000000000000000217061457665371200167160ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file xaxis.c * @short Functions to draw the x axis * @author Sébastien Le Roux */ /* * This file: 'xaxis.c' * * Contains: * - The functions to draw the x axis * * List of functions: void setup_xaxis_linear (cairo_t * cr, project * this_proj, int rid, int cid); void setup_xaxis_log (cairo_t * cr, project * this_proj, int rid, int cid, gboolean draw_it); */ #include #include #include "global.h" #include "curve.h" /*! \fn void setup_xaxis_linear (cairo_t * cr, project * this_proj, int rid, int cid) \brief setup x axis using a linear scale \param cr the cairo drawing context \param this_proj the target project \param rid the analysis id \param cid the curve id */ void setup_xaxis_linear (cairo_t * cr, project * this_proj, int rid, int cid) { int k; double u, v; k = cxy[0] / mticks; v = cxy[0] - k * mticks; if (k * mticks < cxy[0]) v = mticks - v; v = fabs(v); for ( u = 0.0 ; u < xmax; u = u + mticks ) { if (x_min + (u + v) * XDRAW / xmax <= x_max) { switch (labpos) { case 0: ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_min + y_shift; label (cr, cxy[0] + u + v, 0, 0, this_proj); break; case 1: ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_max - y_shift; label (cr, cxy[0] + u + v, 0, 1, this_proj); break; case 2: ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_min + y_shift; label (cr, cxy[0] + u + v, 0, 0, this_proj); ax = x_min - x_shift + (u + v) * XDRAW / xmax; ay = y_max - y_shift; label (cr, cxy[0] + u + v, 0, 1, this_proj); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amajt); break; case 1: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amajt); break; case 2: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amajt); cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amajt); break; } } } cairo_stroke (cr); for (u = v ; u > mticks / nticks ; u -= mticks / nticks); v = u; for ( u = 0.0 ; u < xmax ; u = u + mticks / nticks ) { if (x_min + (u + v) * XDRAW / xmax <= x_max) { if (dogrid) { cairo_stroke(cr); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_set_line_width (cr, GRIDSIZE); cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v)* XDRAW / xmax, y_max); cairo_stroke(cr); prep_frame (cr, this_proj -> curves[rid][cid] -> frame_dash, this_proj -> curves[rid][cid] -> frame_thickness, this_proj -> curves[rid][cid] -> frame_color); } if (fmod(u+v, mticks) != 0.0) { switch (tickpos) { case 0: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amint); break; case 1: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amint); break; case 2: cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_min); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_min + amint); cairo_move_to(cr, x_min + (u + v) * XDRAW / xmax, y_max); cairo_line_to(cr, x_min + (u + v) * XDRAW / xmax, y_max - amint); break; } } } cairo_stroke(cr); } } /*! \fn void setup_xaxis_log (cairo_t * cr, project * this_proj, int rid, int cid, gboolean draw_it) \brief setup x axis using a log scale \param cr the cairo drawing context \param this_proj the target project \param rid the analysis id \param cid the curve id \param draw_it 1/0 draw or not */ void setup_xaxis_log (cairo_t * cr, project * this_proj, int rid, int cid, gboolean draw_it) { int i, k, l; gboolean istrue; double v; istrue = TRUE; xlog = 1; if (cxy[0] != 0.0) { k = (xmax+cxy[0])/cxy[0]; } while (istrue) { k = k/10; if (k > 0) { xlog ++; } else { istrue = FALSE; } } istrue = TRUE; dxlog = 0; i = 100; while (istrue) { if (cxy[0] >= pow(10, i)) { istrue = FALSE; dxlog --; } else { dxlog ++; i=i-1; } } dxlog = dxlog - 100; if (draw_it) { for ( l = 0 ; l < xlog ; l = l + 1 ) { v = pow (10, l-dxlog); if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min + l * XDRAW / xlog, y_min); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_max); cairo_stroke(cr); prep_frame (cr, this_proj -> curves[rid][cid] -> frame_dash, this_proj -> curves[rid][cid] -> frame_thickness, this_proj -> curves[rid][cid] -> frame_color); } switch (labpos) { case 0: ax = x_min - x_shift + l * XDRAW / xlog; ay = y_min + y_shift; label (cr, v, 0, 0, this_proj); break; case 1: ax = x_min - x_shift + l * XDRAW / xlog; ay = y_max - y_shift; label (cr, v, 0, 1, this_proj); break; case 2: ax = x_min - x_shift + l * XDRAW / xlog; ay = y_min + y_shift; label (cr, v, 0, 0, this_proj); ax = x_min - x_shift + l * XDRAW / xlog; ay = y_max - y_shift; label (cr, v, 0, 1, this_proj); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min + l * XDRAW / xlog, y_min); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_min + amajt); break; case 1: cairo_move_to(cr, x_min + l * XDRAW / xlog, y_max); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_max - amajt); break; case 2: cairo_move_to(cr, x_min + l * XDRAW / xlog, y_min); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_min + amajt); cairo_move_to(cr, x_min + l * XDRAW / xlog, y_max); cairo_line_to(cr, x_min + l * XDRAW / xlog, y_max - amajt); break; } for ( k = 2 ; k < 10 ; k = k + 1 ) { if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max); cairo_stroke(cr); prep_frame (cr, this_proj -> curves[rid][cid] -> frame_dash, this_proj -> curves[rid][cid] -> frame_thickness, this_proj -> curves[rid][cid] -> frame_color); } switch (tickpos) { case 0: cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min + amint); break; case 1: cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max - amint); break; case 2: cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_min + amint); cairo_move_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max); cairo_line_to(cr, x_min + XDRAW * (l + log(k) / log(10.0)) / xlog, y_max - amint); break; } } } cairo_stroke (cr); } } Atomes-GNU-1.1.14/src/curve/yaxis.c000066400000000000000000000277421457665371200167250ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file yaxis.c * @short Functions to draw the y axis * @author Sébastien Le Roux */ /* * This file: 'yaxis.c' * * Contains: * - The functions to draw the y axis * * List of functions: void autoscale_axis (project * this_proj, int rid, int cid, int aid); void setup_yaxis_linear (cairo_t * cr, project * this_proj, int rid, int cid); void setup_yaxis_log (cairo_t * cr, project * this_proj, int rid, int cid, gboolean draw_it); */ #include #include #include "global.h" #include "curve.h" /*! \fn void autoscale_axis (project * this_proj, int rid, int cid, int aid) \brief autoscale axis \param this_proj the target project \param rid the analysis id \param cid the curve id \param aid the axis id */ void autoscale_axis (project * this_proj, int rid, int cid, int aid) { int i, j, k, l, m, n; if (! aid && (rid == RI ||rid == CH)) { i = cid / ((this_proj -> nspec+1) * 4); this_proj -> curves[rid][cid] -> axmax[aid] = (rid == RI) ? this_proj -> rsparam[i][1]: this_proj -> csparam[5]; this_proj -> curves[rid][cid] -> axmax[aid] += 1.0; this_proj -> curves[rid][cid] -> axmin[aid] = (rid == RI) ? 2 : 1; } else { n = (activer == SP && aid == 1) ? 1 : 0; this_proj -> curves[rid][cid] -> axmax[aid] = this_proj -> curves[rid][cid] -> data[aid][n]; this_proj -> curves[rid][cid] -> axmin[aid] = this_proj -> curves[rid][cid] -> data[aid][n]; for ( i=n ; i < this_proj -> curves[rid][cid] -> ndata ; i++ ) { this_proj -> curves[rid][cid] -> axmax[aid] = max(this_proj -> curves[rid][cid] -> axmax[aid], this_proj -> curves[rid][cid] -> data[aid][i]); this_proj -> curves[rid][cid] -> axmin[aid] = min(this_proj -> curves[rid][cid] -> axmin[aid], this_proj -> curves[rid][cid] -> data[aid][i]); } CurveExtra * ctmp = this_proj -> curves[rid][cid] -> extrac -> first; project * that_proj; for ( j=0 ; j < this_proj -> curves[rid][cid] -> extrac -> extras ; j++ ) { m = ctmp -> id.a; k = ctmp -> id.b; l = ctmp -> id.c; that_proj = get_project_by_id(m); for ( i=n ; i < that_proj -> curves[k][l] -> ndata ; i++ ) { this_proj -> curves[rid][cid] -> axmax[aid] = max(this_proj -> curves[rid][cid] -> axmax[aid], that_proj -> curves[k][l] -> data[aid][i]); this_proj -> curves[rid][cid] -> axmin[aid] = min(this_proj -> curves[rid][cid] -> axmin[aid], that_proj -> curves[k][l] -> data[aid][i]); } if (ctmp -> next != NULL) ctmp = ctmp -> next; } } if (aid == 1) { this_proj -> curves[rid][cid] -> cmin[aid] = this_proj -> curves[rid][cid] -> axmin[aid]; this_proj -> curves[rid][cid] -> cmax[aid] = this_proj -> curves[rid][cid] -> axmax[aid]; this_proj -> curves[rid][cid] -> axmin[aid] = this_proj -> curves[rid][cid] -> cmin[aid] - fabs(this_proj -> curves[rid][cid] -> cmin[aid]) / 10.0; this_proj -> curves[rid][cid] -> axmax[aid] = this_proj -> curves[rid][cid] -> cmax[aid] + fabs(this_proj -> curves[rid][cid] -> cmax[aid]) / 10.0; if (activer > GK && activer < MS) { this_proj -> curves[rid][cid] -> axmin[aid] = 0.0; } } } /*! \fn void setup_yaxis_linear (cairo_t * cr, project * this_proj, int rid, int cid) \brief setup y axis using a linear scale \param cr the cairo drawing context \param this_proj the target project \param rid the analysis id \param cid the curve id */ void setup_yaxis_linear (cairo_t * cr, project * this_proj, int rid, int cid) { int k, i; double u, v; k = cxy[1] / mticks; v = cxy[1] - k * mticks; if (k * mticks < cxy[1]) v = mticks - v; v = fabs(v); if (k * mticks > fabs(cxy[1])) v = mticks - v; i=0; for ( u = 0.0 ; u < ymax ; u = u + mticks ) { if (y_min + (u + v) * YDRAW / ymax >= y_max) { switch (labpos) { case 0: ax = x_min - x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label (cr, cxy[1] + v + u, 1, 0, this_proj); break; case 1: ax = x_max + x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label (cr, cxy[1] + v + u, 1, 1, this_proj); break; case 2: ax = x_min - x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label (cr, cxy[1] + v + u, 1, 0, this_proj); ax = x_max + x_shift; ay = y_min - y_shift + (u + v) * YDRAW / ymax; label (cr, cxy[1] + v + u, 1, 1, this_proj); break; } i++; switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amajt, y_min + (u + v) * YDRAW / ymax); break; case 1: cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amajt, y_min + (u + v) * YDRAW / ymax); break; case 2: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amajt, y_min + (u + v) * YDRAW / ymax); cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amajt, y_min + (u + v) * YDRAW / ymax); break; } } } cairo_stroke (cr); for (u = v ; u > mticks / nticks ; u -= mticks / nticks); v = u; for (u = 0.0 ; u < ymax ; u = u + mticks / nticks) { if (y_min + (u + v) * YDRAW / ymax >= y_max) { if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_stroke(cr); prep_frame (cr, this_proj -> curves[rid][cid] -> frame_dash, this_proj -> curves[rid][cid] -> frame_thickness, this_proj -> curves[rid][cid] -> frame_color); } if (fmod(u+v, mticks) != 0.0) { switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amint, y_min + (u + v) * YDRAW / ymax); break; case 1: cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amint, y_min + (u + v) * YDRAW / ymax); break; case 2: cairo_move_to(cr, x_min, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_min - amint, y_min + (u + v) * YDRAW / ymax); cairo_move_to(cr, x_max, y_min + (u + v) * YDRAW / ymax); cairo_line_to(cr, x_max + amint, y_min + (u + v) * YDRAW / ymax); break; } } } cairo_stroke (cr); } } /*! \fn void setup_yaxis_log (cairo_t * cr, project * this_proj, int rid, int cid, gboolean draw_it) \brief setup y axis using a log scale \param cr the cairo drawing context \param this_proj the target project \param rid the analysis id \param cid the curve id \param draw_it 1/0 draw or not */ void setup_yaxis_log (cairo_t * cr, project * this_proj, int rid, int cid, gboolean draw_it) { int i, k, l; gboolean istrue; double v; istrue = TRUE; ylog = 1; if (cxy[1] != 0.0) { k = (ymax+cxy[1])/cxy[1]; } while (istrue) { k = k/10; if (k > 0) { ylog ++; } else { ylog ++; istrue = FALSE; } } istrue = TRUE; dylog = 0; i = 100; while (istrue) { if (cxy[1] >= pow(10, i)) { istrue = FALSE; } else { dylog ++; i=i-1; } } dylog = dylog - 100; if (draw_it) { for ( l = 0 ; l < ylog ; l ++ ) { v = pow (10, l-dylog); if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_max, y_min + YDRAW * l / ylog); cairo_stroke(cr); prep_frame (cr, this_proj -> curves[rid][cid] -> frame_dash, this_proj -> curves[rid][cid] -> frame_thickness, this_proj -> curves[rid][cid] -> frame_color); } switch (labpos) { case 0: ax = x_min - x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label (cr, v, 1, 0, this_proj); break; case 1: ax = x_max + x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label (cr, v, 1, 1, this_proj); break; case 2: ax = x_min - x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label (cr, v, 1, 0, this_proj); ax = x_max + x_shift; ay = y_min - y_shift + YDRAW *l / ylog; label (cr, v, 1, 1, this_proj); break; } switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_min - amajt, y_min + YDRAW * l / ylog); break; case 1: cairo_move_to(cr, x_max, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_max - amajt, y_min + YDRAW * l / ylog); break; case 2: cairo_move_to(cr, x_min, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_min - amajt, y_min + YDRAW * l / ylog); cairo_move_to(cr, x_max, y_min + YDRAW * l / ylog); cairo_line_to(cr, x_max - amajt, y_min + YDRAW * l / ylog); break; } for ( k = 2 ; k < 10 ; k ++ ) { if (dogrid) { cairo_stroke(cr); cairo_set_line_width (cr, GRIDSIZE); cairo_set_dash (cr, pdashed, lenp, 0.0); cairo_move_to(cr, x_min, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_max, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_stroke(cr); prep_frame (cr, this_proj -> curves[rid][cid] -> frame_dash, this_proj -> curves[rid][cid] -> frame_thickness, this_proj -> curves[rid][cid] -> frame_color); } switch (tickpos) { case 0: cairo_move_to(cr, x_min, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_min - amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); break; case 1: cairo_move_to(cr, x_max, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_max + amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); break; case 2: cairo_move_to(cr, x_min, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_min - amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); cairo_move_to(cr, x_max, y_min + YDRAW * (l + log(k) / log(10.0)) / ylog); cairo_line_to(cr, x_max + amint, y_min + YDRAW *(l + log(k) / log(10.0)) / ylog); break; } } } cairo_stroke (cr); } } Atomes-GNU-1.1.14/src/fortran/000077500000000000000000000000001457665371200157375ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/fortran/allocbonds.F90000066400000000000000000000245031457665371200203430ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file allocbonds.F90 !! @short Memory allocation for bonding properties analysis !! @author Sébastien Le Roux LOGICAL FUNCTION ALLOCEDCO (alloc) ! ! Memory allocation for Edge and Corner sharing analysis ! USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(IN) :: alloc if (allocated(EDGETA)) deallocate(EDGETA) if (allocated(CORTA)) deallocate(CORTA) if (allocated(DEFTA)) deallocate(DEFTA) if (allocated(TDA)) deallocate(TDA) if (allocated(CORNERA)) deallocate(CORNERA) if (allocated(EDGEA)) deallocate(EDGEA) if (allocated(DEFA)) deallocate(DEFA) if (allocated(TDSA)) deallocate(TDSA) if (allocated(EABL)) deallocate(EABL) if (allocated(CABL)) deallocate(CABL) if (allocated(DABL)) deallocate(DABL) if (allocated(ETABL)) deallocate(ETABL) if (allocated(CTABL)) deallocate(CTABL) if (allocated(DTABL)) deallocate(DTABL) if (allocated(ECTABL)) deallocate(ECTABL) if (allocated(TDTABL)) deallocate(TDTABL) if (allocated(ETYPEA)) deallocate(ETYPEA) if (allocated(CTYPEA)) deallocate(CTYPEA) if (allocated(DETYPEA)) deallocate(DETYPEA) if (allocated(ETDA)) deallocate(ETDA) if (allocated(MTABL)) deallocate(MTABL) if (alloc) then allocate(EDGETA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EDGETA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(CORTA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CORTA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DEFTA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DEFTA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(TDA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: TDA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif do m=1, NSP do n=1, NSP EDGETA(n,m)=0 CORTA(n,m)=0 DEFTA(n,m)=0 TDA(n,m)=0 enddo enddo allocate(CORNERA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CORNERA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(EDGEA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EDGEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DEFA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DEFA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(TDSA(NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: TDSA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif do m=1, NSP do n=1, NSP do o=1, NS CORNERA(m,n,o)=0 EDGEA(m,n,o)=0 DEFA(m,n,o)=0 TDSA(m,n,o)=0 enddo enddo enddo allocate(EABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(CABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(ETABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: ETABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(CTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(DTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(ECTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: ECTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(TDTABL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: TDTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (ETYPEA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: ETYPEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (CTYPEA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: CTYPEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (DETYPEA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: DETYPEA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate (ETDA(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: EDTA"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif allocate(MTABL(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCEDCO"//CHAR(0), "Table: MTABL"//CHAR(0)) ALLOCEDCO=.false. goto 001 endif do i=1, NSP do j=1,NSP ETYPEA(j,i)=0.0d0 CTYPEA(j,i)=0.0d0 DETYPEA(j,i)=0.0d0 ETDA(j,i)=0.0d0 enddo enddo endif ALLOCEDCO=.true. 001 continue END FUNCTION LOGICAL FUNCTION ALLOCBONDS (alloc) ! ! Memory allocation for bond properties ! USE PARAMETERS !INTEGER, INTENT(IN) :: adv LOGICAL, INTENT(IN) :: alloc ! For neighbors and environments if (allocated(LA_COUNT)) deallocate(LA_COUNT) if (allocated(SA_COUNT)) deallocate(SA_COUNT) if (allocated(MA_COUNT)) deallocate(MA_COUNT) if (allocated(TOGL)) deallocate(TOGL) if (allocated(TIGL)) deallocate(TIGL) if (allocated(NUM_GSA)) deallocate(NUM_GSA) if (allocated(TOT_GSA)) deallocate(TOT_GSA) if (allocated(CABL)) deallocate(CABL) if (allocated(DABL)) deallocate(DABL) if (allocated(EABL)) deallocate(EABL) if (allocated(LGSA)) deallocate(LGSA) if (allocated(NGSA)) deallocate(NGSA) if (allocated(LP_GEOM)) deallocate(LP_GEOM) if (allocated(LT_GEOM)) deallocate(LT_GEOM) if (allocated(CMOY)) deallocate(CMOY) if (allocated(MAC)) deallocate(MAC) if (alloc) then allocate(LA_COUNT(NA,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: LA_COUNT"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(SA_COUNT(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: SA_COUNT"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(MA_COUNT(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: MA_COUNT"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif SA_COUNT(:)=0 MA_COUNT(:,:)=0 LA_COUNT(:,:,:)=0 allocate(TOGL(NS*NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: TOGL"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(TIGL(NS*NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: TIGL"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(NUM_GSA(NSP,NA*10), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: NUM_GSA"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(TOT_GSA(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: TOT_GSA"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif allocate(MAC(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCBONDS"//CHAR(0), "Table: MAC"//CHAR(0)) ALLOCBONDS=.false. goto 001 endif endif !if (adv .eq. 1) then ! ALLOCBONDS = ALLOCEDCO () !else ALLOCBONDS=.true. !endif 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/allochem.F90000066400000000000000000000070641457665371200200120ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file allochem.F90 !! @short Memory allocation for chemistry buffers !! @author Sébastien Le Roux INTEGER FUNCTION ALLOCHEM () USE PARAMETERS IMPLICIT NONE GRNUM=16+5*NSP*NSP SQNUM=8+4*NSP*NSP SKNUM=8+4*NSP*NSP GQNUM=GRNUM BDNUM=NSP*NSP ANNUM=NSP*NSP*NSP+NSP*NSP*NSP*NSP if (NSP .eq. 2) then GRNUM=GRNUM+6 SQNUM=SQNUM+8 SKNUM=SKNUM+8 GQNUM=GQNUM+6 endif RINUM=20*(NSP+1) CHNUM=NSP+1 SHNUM=NSP+1 MSNUM=0 if (NS .gt. 1) MSNUM=14*NSP+6 if (allocated(NBSPBS)) deallocate(NBSPBS) allocate(NBSPBS(NSP+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: NBSPBS"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(TL)) deallocate(TL) allocate(TL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: TL"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(MASS)) deallocate(MASS) allocate(MASS(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: MASS"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(RVDW)) deallocate(RVDW) allocate(RVDW(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: RVDW"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(ATOMID)) deallocate(ATOMID) allocate(ATOMID(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: ATOMID"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(Gr_CUT)) deallocate(Gr_CUT) allocate(Gr_CUT(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: Gr_CUT"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(Xi)) deallocate(Xi) allocate(Xi(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: Xi"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(NSCATTL)) deallocate(NSCATTL) allocate(NSCATTL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: NSCATTL"//CHAR(0)) ALLOCHEM = 0 goto 001 endif if (allocated(XSCATTL)) deallocate(XSCATTL) allocate(XSCATTL(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCHEM"//CHAR(0), "Table: XSCATTL"//CHAR(0)) ALLOCHEM = 0 goto 001 endif ALLOCHEM = 1 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/allocmsd.F90000066400000000000000000000064471457665371200200300ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file allocmsd.F90 !! @short Memory allocation for MSD analysis !! @author Sébastien Le Roux LOGICAL FUNCTION ALLOCMSD() USE PARAMETERS if (allocated(D2i)) deallocate(D2i) allocate(D2i(NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2i"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(D2iNAC)) deallocate(D2iNAC) allocate(D2iNAC(NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2iNAC"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(D2dir)) deallocate(D2dir) allocate(D2dir(NSP,6,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2dir"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(D2dirNAC)) deallocate(D2dirNAC) allocate(D2dirNAC(NSP,6,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: D2dir"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(Dcte)) deallocate(Dcte) allocate(Dcte(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: Dcte"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(COR)) deallocate(COR) allocate(COR(3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: COR"//CHAR(0)) ALLOCMSD = .false. goto 001 endif if (allocated(DRIFT)) deallocate(DRIFT) allocate(DRIFT(3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCMSD"//CHAR(0), "Table: DRIFT"//CHAR(0)) ALLOCMSD = .false. goto 001 endif D2i(:,:)=0.0d0 D2iNAC(:,:)=0.0d0 D2dir(:,:,:) =0.0d0 D2dirNAC(:,:,:) =0.0d0 Dcte(:)=0.0d0 COR(:,:)=0.0d0 DRIFT(:,:)=0.0d0 ALLOCMSD=.true. 001 continue END FUNCTION SUBROUTINE DEALLOCMSD ! ! Memory allocation for bond properties ! USE PARAMETERS if (allocated(D2i)) deallocate(D2i) if (allocated(D2iNAC)) deallocate(D2iNAC) if (allocated(D2dir)) deallocate(D2dir) if (allocated(D2dirNAC)) deallocate(D2dirNAC) if (allocated(Dcte)) deallocate(Dcte) if (allocated(COR)) deallocate(COR) if (allocated(DRIFT)) deallocate(DRIFT) END SUBROUTINE Atomes-GNU-1.1.14/src/fortran/angles.F90000066400000000000000000000247731457665371200175050ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file angles.F90 !! @short Distribution of bond angles and dihedrals !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION bond_angles(nda) BIND (C,NAME='bond_angles_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: nda INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE :: ANGLEA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SUM_ANGA DOUBLE PRECISION :: ANG DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ANGTAB #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE DOUBLE PRECISION FUNCTION ANGIJK (ATG1, ATG2, ATG3, ASTEP) INTEGER, INTENT(IN) :: ATG1, ATG2, ATG3, ASTEP END FUNCTION END INTERFACE if (allocated(ANGLEA)) deallocate(ANGLEA) allocate(ANGLEA(NSP,NSP,NSP,nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGLEA"//CHAR(0)) bond_angles=0 goto 001 endif ANGLEA(:,:,:,:)=0 DELTA_ANG=180.0/dble(nda) #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then do i=1, NS ! OpemMP on Atoms !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(j, k, l, m, n, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, i, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLEA, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (CONTJ(j,i) .gt. 1) then do k=1, CONTJ(j,i)-1 do l=k+1, CONTJ(j,i) m=VOISJ(k,j,i) n=VOISJ(l,j,i) ANG = ANGIJK (m, j, n, i) ANG_I=AnINT (ANG/DELTA_ANG) if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda !$OMP ATOMIC ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)=ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)+1 if (LOT(m) .ne. LOT(n)) then !$OMP ATOMIC ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)=ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)+1 endif enddo enddo endif enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLEA, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA if (CONTJ(j,i) .gt. 1) then do k=1, CONTJ(j,i)-1 do l=k+1, CONTJ(j,i) m=VOISJ(k,j,i) n=VOISJ(l,j,i) ANG = ANGIJK (m, j, n, i) ANG_I=AnINT (ANG/DELTA_ANG) if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda #ifdef OPENMP !$OMP ATOMIC #endif ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)=ANGLEA(LOT(m),LOT(j),LOT(n),ANG_I)+1 if (LOT(m) .ne. LOT(n)) then #ifdef OPENMP !$OMP ATOMIC #endif ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)=ANGLEA(LOT(n),LOT(j),LOT(m),ANG_I)+1 endif enddo enddo endif enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (allocated(SUM_ANGA)) deallocate(SUM_ANGA) allocate (SUM_ANGA(NSP,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: SUM_ANGA"//CHAR(0)) bond_angles=0 goto 001 endif do i=1, NSP do j=1, NSP do k=1, NSP SUM_ANGA(i,j,k) = 0 do l=1, nda SUM_ANGA(i,j,k) = SUM_ANGA(i,j,k) + ANGLEA(i,j,k,l) enddo enddo enddo enddo if (allocated(ANGTAB)) deallocate(ANGTAB) allocate(ANGTAB(nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGTAB"//CHAR(0)) bond_angles=0 goto 001 endif ANGTAB(:)=0.0 m=0 do i=1, NSP do j=1, NSP do k=1, NSP if (SUM_ANGA(i,j,k) .ne. 0) then do l=1, nda ANGTAB(l)=100.0*dble(ANGLEA(i,j,k,l))/dble(SUM_ANGA(i,j,k)) enddo call save_curve (nda, ANGTAB, m, IDAN) else call save_curve (0, ANGTAB, m, IDAN) endif m=m+1 enddo enddo enddo bond_angles=1 001 continue if (allocated(ANGLEA)) deallocate(ANGLEA) if (allocated(SUM_ANGA)) deallocate(SUM_ANGA) if (allocated(ANGTAB)) deallocate(ANGTAB) END FUNCTION bond_angles INTEGER (KIND=c_int) FUNCTION bond_diedrals(nda) BIND (C,NAME='bond_diedrals_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: nda INTEGER, DIMENSION(:,:,:,:,:), ALLOCATABLE :: ANGLED INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE :: SUM_ANGD DOUBLE PRECISION :: ANG DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ANGTAB #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE DOUBLE PRECISION FUNCTION DIEDRE (DG1, DG2, DG3, DG4, DSTEP) INTEGER, INTENT(IN) :: DG1, DG2, DG3, DG4, DSTEP END FUNCTION END INTERFACE if (allocated(ANGLED)) deallocate(ANGLED) allocate(ANGLED(NSP,NSP,NSP,NSP,nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGLED"//CHAR(0)) bond_diedrals=0 goto 001 endif ANGLED(:,:,:,:,:)=0 DELTA_ANG=180.0/dble(nda) #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA do i=1, NS ! OpemMP on Atoms !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(j, k, l, m, n, o, p, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, i, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLED, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA do k=1, CONTJ(j,i) m=VOISJ(k,j,i) if (CONTJ(m,i) .ge. 2) then do l=1, CONTJ(m,i) n=VOISJ(l,m,i) if (n .ne. j) then if (CONTJ(n,i) .ge. 2) then do o=1, CONTJ(n,i) p = VOISJ(o,n,i) if (p.ne.j .and. p.ne.m) then ANG=DIEDRE (j, m, n, p, i) ANG_I=AnINT (ANG/DELTA_ANG)+1 if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda !$OMP ATOMIC ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)=ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)+1 if (LOT(j).ne.LOT(m) .or. LOT(j).ne.LOT(n) .or. LOT(j).ne.LOT(p)) then !$OMP ATOMIC ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)=ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)+1 endif endif enddo endif endif enddo endif enddo enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, o, p, ANG, ANG_I) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, CONTJ, VOISJ, ANGLED, DELTA_ANG, nda) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA do k=1, CONTJ(j,i) m=VOISJ(k,j,i) if (CONTJ(m,i) .ge. 2) then do l=1, CONTJ(m,i) n=VOISJ(l,m,i) if (n .ne. j) then if (CONTJ(n,i) .ge. 2) then do o=1, CONTJ(n,i) p = VOISJ(o,n,i) if (p.ne.j .and. p.ne.m) then ANG=DIEDRE (j, m, n, p, i) ANG_I=AnINT (ANG/DELTA_ANG)+1 if (ANG_I.le.0) ANG_I=1 if (ANG_I.gt.nda) ANG_I=nda #ifdef OPENMP !$OMP ATOMIC #endif ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)=ANGLED(LOT(j),LOT(m),LOT(n),LOT(p),ANG_I)+1 if (LOT(j).ne.LOT(m) .or. LOT(j).ne.LOT(n) .or. LOT(j).ne.LOT(p)) then #ifdef OPENMP !$OMP ATOMIC #endif ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)=ANGLED(LOT(p),LOT(n),LOT(m),LOT(j),ANG_I)+1 endif endif enddo endif endif enddo endif enddo enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (allocated(SUM_ANGD)) deallocate(SUM_ANGD) allocate (SUM_ANGD(NSP,NSP,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: SUM_ANGD"//CHAR(0)) bond_diedrals=0 goto 001 endif SUM_ANGD(:,:,:,:) = 0 do i=1, NSP do j=1, NSP do k=1, NSP do l=1, NSP do m=1, nda SUM_ANGD(i,j,k,l) = SUM_ANGD(i,j,k,l) + ANGLED(i,j,k,l,m) enddo enddo enddo enddo enddo if (allocated(ANGTAB)) deallocate(ANGTAB) allocate(ANGTAB(nda), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bond_angles"//CHAR(0), "Table: ANGTAB"//CHAR(0)) bond_diedrals=0 goto 001 endif ANGTAB(:)=0.0 n=NSP*NSP*NSP do i=1, NSP do j=1, NSP do k=1, NSP do l=1, NSP if (SUM_ANGD(i,j,k,l) .ne. 0) then o=1 do m=1, nda ANGTAB(m)=100.0*dble(ANGLED(i,j,k,l,m))/dble(SUM_ANGD(i,j,k,l)) enddo call save_curve (nda, ANGTAB, n, IDAN) else call save_curve (0, ANGTAB, n, IDAN) endif n=n+1 enddo enddo enddo enddo bond_diedrals=1 001 continue if (allocated(ANGLED)) deallocate(ANGLED) if (allocated(SUM_ANGD)) deallocate(SUM_ANGD) if (allocated(ANGTAB)) deallocate(ANGTAB) END FUNCTION bond_diedrals Atomes-GNU-1.1.14/src/fortran/bonds.F90000066400000000000000000000365231457665371200173350ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file bonds.F90 !! @short Bonding properties !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION bonding (scf, sbf, adv, bdist, bmin, delt_ij, sfil) BIND (C,NAME='bonding_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: scf, sbf, adv, bdist REAL (KIND=c_double), INTENT(IN) :: bmin, delt_ij CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: sfil INTEGER, DIMENSION(:), ALLOCATABLE :: GESP CHARACTER (LEN=scf) :: sfile DOUBLE PRECISION :: DBD DOUBLE PRECISION, DIMENSION(3) :: RBD #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif TYPE GEOMETRY INTEGER :: INDICE INTEGER :: COORD INTEGER :: NCOORD INTEGER, DIMENSION(:), ALLOCATABLE :: GEO TYPE (GEOMETRY), POINTER :: FIRST TYPE (GEOMETRY), POINTER :: LAST TYPE (GEOMETRY), POINTER :: NEXT TYPE (GEOMETRY), POINTER :: PREV END TYPE GEOMETRY TYPE(GEOMETRY), DIMENSION(:), POINTER :: GEOT, GEOP TYPE(GEOMETRY), POINTER :: GA INTERFACE LOGICAL FUNCTION ALLOCBONDS (alloc) !INTEGER, INTENT(IN) :: adv LOGICAL, INTENT(IN) :: alloc END FUNCTION LOGICAL FUNCTION ALLOCEDCO (alloc) LOGICAL, INTENT(IN) :: alloc END FUNCTION DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION LOGICAL FUNCTION EESCS () END FUNCTION INTEGER FUNCTION MOLECULES() END FUNCTION END INTERFACE if (adv .eq. 1) then if (allocated(STATBD)) deallocate(STATBD) allocate(STATBD(NSP,NSP,0:bdist), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: STATBD"//CHAR(0)) bonding=0 goto 001 endif STATBD(:,:,:)=0 endif if (.not. ALLOCBONDS(.true.)) then bonding=0 goto 001 endif if (allocated(GESP)) deallocate(GESP) allocate(GESP(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: GESP"//CHAR(0)) bonding=0 goto 001 endif if (allocated(LT_GEOM)) deallocate(LT_GEOM) allocate(LT_GEOM(NSP,NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: LT_GEOM"//CHAR(0)) bonding=0 goto 001 endif LT_GEOM(:,:) = 0 allocate(GEOT(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Pointer: GEOT"//CHAR(0)) bonding=0 goto 001 endif allocate(GEOP(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Pointer: GEOP"//CHAR(0)) bonding=0 goto 001 endif allocate(GA, STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Pointer: GA"//CHAR(0)) bonding=0 goto 001 endif do i=1, NSP GEOT(i)%INDICE = 0 nullify(GEOT(i)%NEXT) nullify(GEOT(i)%PREV) nullify(GEOT(i)%FIRST) nullify(GEOT(i)%LAST) GEOP(i)%INDICE = 0 nullify(GEOP(i)%NEXT) nullify(GEOP(i)%PREV) nullify(GEOP(i)%FIRST) nullify(GEOP(i)%LAST) enddo ! Décompte des nombres de coordination ! Evaluation of the coordination numbers #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA do i=1, NS ! OpemMP on Atoms !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(j, l, k, m, n, o, p, DBD, RBD, GESP, GA) & !$OMP& SHARED(NUMTH, NS, i, NA, NCELLS, LOT, CONTJ, VOISJ, LA_COUNT, STATBD, adv, bmin, delt_ij) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA k = LOT(j) l = CONTJ(j,i) do m=1, l n = VOISJ(m,j,i) o = LOT(n) LA_COUNT(j,o,i)=LA_COUNT(j,o,i)+1 if (adv .eq. 1) then if (NCELLS .gt. 1) then DBD = CALCDIJ (RBD, j, n, i, i, i) else DBD = CALCDIJ (RBD, j, n, i, i, 1) endif DBD = sqrt(DBD) p =INT((DBD-bmin)/delt_ij) !$OMP ATOMIC STATBD(k,o,p)=STATBD(k,o,p) + 1 endif enddo enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, o, p, DBD, RBD, GESP, GA) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, CONTJ, VOISJ, LA_COUNT, STATBD, adv, bmin, delt_ij) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA k = LOT(j) l = CONTJ(j,i) do m=1, l n = VOISJ(m,j,i) o = LOT(n) LA_COUNT(j,o,i)=LA_COUNT(j,o,i)+1 if (adv .eq. 1) then if (NCELLS .gt. 1) then DBD = CALCDIJ (RBD, j, n, i, i, i) else DBD = CALCDIJ (RBD, j, n, i, i, 1) endif DBD = sqrt(DBD) p =INT((DBD-bmin)/delt_ij) !$OMP ATOMIC STATBD(k,o,p)=STATBD(k,o,p) + 1 endif enddo enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (sbf .eq. 1 .and. scf.gt.0) then do i=1, scf sfile(i:i) = sfil(i) enddo open(unit=100, file=sfile, action="write", status='unknown') do i=1, NS write (100, '("Configuration N°",i6)') i write (100, *) do j=1, NA write (100, '(A2,i6)') TL(LOT(j)), j write (100, '(4x,"Nc[tot]= ",i2)') CONTJ(j,i) do k=1, NSP write (100, '(5x,"Nc[",A2,"]= ",i2)') TL(k), LA_COUNT(j,k,i) do l=1, CONTJ(j,i) if (LOT(VOISJ(l,j,i)) .eq. l) then if (NCELLS .gt. 1) then DBD = CALCDIJ (RBD, j, VOISJ(l,j,i), i, i, i) else DBD = CALCDIJ (RBD, j, VOISJ(l,j,i), i, i, 1) endif write (100, '(10x,A2,1x,i6,1x,"at",1x,f7.5,1x,"Å")') TL(k), VOISJ(l,j,i), sqrt(DBD) endif enddo enddo enddo enddo close(100) endif do i=1, NS do j=1, NA k = LOT(j) l = 0 do m=1, NSP n = LA_COUNT(j,m,i) l = l + n GESP(m) = n MA_COUNT(k,m)=MA_COUNT(k,m)+n SA_COUNT(k)=SA_COUNT(k)+n enddo GA => GEOP(k) m = NEWCOORD(1, l, GA, NSP, GESP) GA => GEOT(k) n = NEWCOORD(0, l, GA, NSP, GESP) if (m > 0 .and. n > 0) then LT_GEOM(k,n) = 1 TOGL((i-1)*NA+j) = m TIGL((i-1)*NA+j) = n else bonding=0 goto 001 endif enddo enddo n=0 m=0 do i=1, NSP j = GEOP(i)%LAST%INDICE n = n + j GA => GEOP(i)%FIRST do k=1, j m = max(m, GA%COORD) if (k < j) GA => GA%NEXT enddo enddo call send_coord_opengl (1, NS*NA, 0, 0, n, TOGL) if (allocated(TOGL)) deallocate(TOGL) o = 0 n = 0 m = 20 do i=1, NSP j = GEOT(i)%LAST%INDICE o = o + j GA => GEOT(i)%FIRST do k=1, j n = max(n, GA%COORD) m = min(m, GA%COORD) if (k < j) GA => GA%NEXT enddo enddo call send_coord_opengl (0, NS*NA, m, n, o, TIGL) do i=1, NSP j = GEOT(i)%LAST%INDICE if (allocated(LGSA)) deallocate(LGSA) allocate(LGSA(j), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: LGSA"//CHAR(0)) bonding=0 goto 001 endif GA => GEOT(i)%FIRST do k=1, j LGSA(k) = GA%COORD if (k < j) GA => GA%NEXT enddo call init_menu_coordinations (0, i-1, j, LGSA) enddo if (allocated(LGSA)) deallocate(LGSA) if (allocated(TIGL)) deallocate(TIGL) do i=1, NSP SA_COUNT(i)=SA_COUNT(i)/NS/NBSPBS(i) do j=1, NSP MA_COUNT(i,j)=MA_COUNT(i,j)/NS/NBSPBS(i) enddo enddo do i=1, NSP do j=1, NSP MAC(j)=MA_COUNT(i,j) enddo call coordout (i-1, SA_COUNT(i), MAC, GEOP(i)%LAST%INDICE) enddo do i=1, NSP j = GEOP(i)%LAST%INDICE if (allocated(NGSA)) deallocate(NGSA) allocate(NGSA(j), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: NGSA"//CHAR(0)) bonding=0 goto 001 endif if (allocated(LGSA)) deallocate(LGSA) allocate(LGSA(j), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: LGSA"//CHAR(0)) bonding=0 goto 001 endif GA => GEOP(i)%FIRST call allocate_partial_geo (i-1, j) do k=1, j LGSA(k)=GA%COORD NGSA(k)=GA%NCOORD do l=1, NSP GESP(l) = GA%GEO(l) enddo call partial_geo_out (i-1, k-1, NSP, GESP) if (k .lt. j) GA => GA%NEXT enddo call envout (i-1, j, NGSA) call init_menu_coordinations (1, i-1, j, LGSA) if (allocated(NGSA)) deallocate(NGSA) if (allocated(LGSA)) deallocate(LGSA) enddo call CLEAN_GEOM () if (allocated(GESP)) deallocate(GESP) if (adv .eq. 1) then if (.not.EESCS()) then bonding=0 goto 001 endif do i=1, NSP do j=1, NSP EABL(j)=EDGETA(i,j) CABL(j)=CORTA(i,j) DABL(j)=DEFTA(i,j) ETABL(j)=ETYPEA(i,j) CTABL(j)=CTYPEA(i,j) DTABL(j)=DETYPEA(i,j) TDTABL(j)=TDA(i,j) ECTABL(j)=ETDA(i,j) enddo call tetraout (i-1, EABL, CABL, DABL, ETABL, CTABL, DTABL, TDTABL, ECTABL) enddo endif if (.not.ALLOCEDCO(.false.)) then bonding=0 goto 001 endif if (adv .eq. 1) then if (allocated(EABL)) deallocate(EABL) allocate(EABL(0:bdist), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: bonding"//CHAR(0), "Table: EABL"//CHAR(0)) bonding=0 goto 001 endif do k=0, bdist EABL(k) = 0.0 enddo l=0 do i=1, NSP do j=1, NSP m=0 do k=0, bdist m = m + STATBD(i,j,k) enddo if (m .ne. 0) then do k=0, bdist EABL(k) = 100.0*STATBD(i,j,k)/m enddo call save_curve (bdist+1, EABL, l, IDBD) else call save_curve (0, EABL, l, IDBD) endif l=l+1 enddo enddo if (allocated(STATBD)) deallocate(STATBD) endif if (.not.ALLOCBONDS(.false.)) then bonding=0 goto 001 endif bonding=1 001 continue CONTAINS INTEGER FUNCTION NEWCOORD (ID, GEO, GP, NP, GSP) INTEGER, INTENT(IN) :: ID, GEO, NP INTEGER, DIMENSION(NP), INTENT(IN) :: GSP TYPE(GEOMETRY), INTENT(INOUT), POINTER :: GP INTEGER :: AB, AC, AD LOGICAL :: NEWGEO=.false. TYPE(GEOMETRY), POINTER :: GM if (GP%INDICE .eq. 0) then GP%INDICE = 1 GP%COORD = GEO GP%NCOORD = 1 GP%LAST => GP GP%FIRST => GP NEWCOORD=GP%INDICE if (ID .eq. 1) then allocate(GP%GEO(NP)) do AB=1, NP GP%GEO(AB) = GSP(AB) enddo endif else GP => GP%FIRST AC = GP%LAST%INDICE NEWGEO=.true. if (ID .eq. 0) then do AB=1, AC if (GP%COORD .eq. GEO) then NEWGEO=.false. NEWCOORD = GP%INDICE exit endif if (AB .lt. AC) GP => GP%NEXT enddo else do AB=1, AC if (GP%COORD .eq. GEO) then NEWGEO=.false. do AD=1, NP if (GP%GEO(AD) .ne. GSP(AD)) then NEWGEO=.true. exit endif enddo if (.not.NEWGEO) exit endif if (AB .lt. AC) GP => GP%NEXT enddo endif if (NEWGEO) then allocate(GM, STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: NEWCOORD"//CHAR(0), "Pointer: GM"//CHAR(0)) NEWCOORD=0 goto 001 endif nullify(GM%FIRST) nullify(GM%NEXT) nullify(GM%LAST) nullify(GM%PREV) GM%FIRST => GP%FIRST GP%NEXT => GM GP%FIRST%LAST => GM GP%LAST => GM GM%LAST => GM GM%PREV => GP GM%INDICE = GP%INDICE+1 GM%COORD = GEO GM%NCOORD = 1 NEWCOORD = GM%INDICE if (ID .eq. 1) then allocate(GM%GEO(NP)) do AB=1, NP GM%GEO(AB) = GSP(AB) enddo endif GP => GM else NEWCOORD = GP%INDICE GP%NCOORD = GP%NCOORD+1 endif endif 001 continue END FUNCTION SUBROUTINE CLEAN_GEOM () INTEGER :: AB, AC, AD do AB=1, NSP GA => GEOT(AB)%LAST AC=GA%INDICE do AD=1, AC-1 GA => GA%PREV deallocate (GA%NEXT) enddo enddo deallocate(GEOT) do AB=1, NSP GA => GEOP(AB)%LAST AC=GA%INDICE do AD=1, AC-1 GA => GA%PREV deallocate (GA%NEXT) enddo enddo deallocate(GEOP) END SUBROUTINE END FUNCTION SUBROUTINE sendcuts (cspa, cspb, cutab) BIND (C,NAME='sendcuts_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: cspa, cspb REAL (KIND=c_double), INTENT(IN) :: cutab if (cspa .eq. NSP) then Gr_cutoff=cutab**2 else Gr_CUT(cspa+1,cspb+1) = cutab**2 endif END SUBROUTINE REAL (KIND=c_double) FUNCTION fdmax(use_pbc) BIND (C,NAME='fdmax_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: use_pbc if (use_pbc .eq. 0) then do l=1,3 pmin(l) = FULLPOS(1,l,1) pmax(l) = pmin(l) enddo do i=1, NS if (i .eq. 1) then k = 2 else k = 1 endif do j=k, NA do l=1,3 pmin(l) = min(pmin(l), FULLPOS(j,l,i)) pmax(l) = max(pmax(l), FULLPOS(j,l,i)) enddo enddo enddo fdmax = 0.0d0 do l=1,3 fdmax = fdmax + (pmax(l)-pmin(l))**2 enddo fdmax = sqrt(fdmax) else if (THE_BOX(1)%CUBIC) then fdmax = sqrt(2.0)*THE_BOX(1)%minv/2.0 else fdmax = THE_BOX(1)%minv/2.0 endif if (NCELLS .gt. 1) then do l=2, NCELLS if (THE_BOX(l)%CUBIC) then fdmax = min(fdmax,sqrt(2.0)*THE_BOX(l)%minv/2.0) else fdmax = min(fdmax, THE_BOX(l)%minv/2.0) endif enddo endif endif END FUNCTION REAL (KIND=c_double) FUNCTION fkmin(use_pbc) BIND (C,NAME='fkmin_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: use_pbc if (use_pbc .eq. 0) then fkmin = 0.0 else fkmin = 0.0 do l=1, NCELLS fkmin = fkmin + THE_BOX(l)%minr enddo fkmin = fkmin / NCELLS endif END FUNCTION REAL (KIND=c_double) FUNCTION oglmax() BIND (C,NAME='oglmax_') USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION :: dmax do l=1,3 pmin(l) = FULLPOS(1,l,1) pmax(l) = pmin(l) enddo do i=1, NS if (i .eq. 1) then k = 2 else k = 1 endif do j=k, NA do l=1,3 pmin(l) = min(pmin(l), FULLPOS(j,l,i)) pmax(l) = max(pmax(l), FULLPOS(j,l,i)) enddo enddo enddo allocate (NFULLPOS(2,3,1)) do l=1, 3 NFULLPOS(1,l,1) = pmin(l) NFULLPOS(2,l,1) = pmax(l) enddo call CALCRIJ (1, 2, -2, 1, 1) deallocate (NFULLPOS) if (PBC) then oglmax = sqrt(Dij) dmax = 0.0d0 do l=1, NCELLS dmax = max(dmax, THE_BOX(l)%maxv) enddo if (oglmax < dmax) oglmax = dmax*3.0; else oglmax=2.0*sqrt(Dij) endif if (oglmax .lt. 10.0) oglmax = 10.0 END FUNCTION Atomes-GNU-1.1.14/src/fortran/c3d.F90000066400000000000000000000070151457665371200166730ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file c3d.F90 !! @short Write Chem3D atomic coordinates !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_c3d (c3d_f, lc3d) BIND (C,NAME='read_c3d_') ! ! Lecture of atom types and coordinates - C3D files ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: lc3d CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: c3d_f CHARACTER (LEN=lc3d) :: c3d_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lc3d c3d_file(i:i) = c3d_f(i) enddo read_c3d=1 inquire (file=c3d_file, exist=isok) if (isok) then open (unit=20, file=c3d_file, action='read', status='old', err=001) NS=0 read (20, *, err=002) NA NS = TEST_LENGTH(20, NA+1) if (NS .eq. 1) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_c3d"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_c3d"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NS read (20, *, err=002) do j=1, NA read (20, *, err=002) TAB_OF_TYPE(j), k, FULLPOS(j,1,i), FULLPOS(j,2,i), FULLPOS(j,3,i) enddo enddo read_c3d=0 else read_c3d=2 endif 002 continue close (20) 001 continue endif END FUNCTION INTEGER (KIND=c_int) FUNCTION write_c3d (c3d_f, lc3d, fc3d, tc3d) BIND (C,NAME='write_c3d_') ! ! output of atom types and coordinates - Chem3D files ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: lc3d, fc3d, tc3d CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: c3d_f DOUBLE PRECISION, DIMENSION(3) :: savep CHARACTER (LEN=lc3d) :: c3d_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lc3d c3d_file(i:i) = c3d_f(i) enddo write_c3d=1 open (unit=20, file=c3d_file, action='write', status='unknown', err=001) do i=1, NS write (20, '(i10)') NA write (20, *) do j=1, NA if (fc3d .eq. 1) then if (NCELLS .gt. 1) then NBOX => THE_BOX(i) else NBOX => THE_BOX(1) endif savep = MATMUL(FULLPOS(j,:,i),NBOX%carttofrac) else savep = FULLPOS(j,:,i) if (tc3d .eq. 1) then savep(:) = savep(:)/ANGTOBOHR endif endif write (20, '(a2,3x,i2,3(3x,f15.10))', err=002) TL(LOT(j)), 0, savep enddo enddo write_c3d=0 002 continue close (20) 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/chains.F90000066400000000000000000000554761457665371200175050ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file chains.F90 !! @short Chain statistics !! @author Sébastien Le Roux SUBROUTINE SETUP_CPAT_VPAT_CHAIN (CONT, VOIS, STR, CPT, VPT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: STR INTEGER, DIMENSION(NA,NS), INTENT(IN):: CONT INTEGER, DIMENSION(MAXN,NA,NS), INTENT(IN) :: VOIS INTEGER, DIMENSION(NA), INTENT(INOUT):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(INOUT) :: VPT INTEGER :: RAB, RAC !do RAB=1, NAT ! write (6, '("At= ",i4," Neigh= ",i2)') RAB, CONTJ(RAB,STR) ! do RAC=1, CONTJ(RAB,STR) ! write (6, '(" i= ",i2," Vois= ",i4)') RAC, VOISJ(RAC,RAB,STR) ! enddo !enddo CPT(:) = 0 VPT(:,:) = 0 do RAB=1, NA CPT(RAB) = CONT(RAB,STR) do RAC=1, CONT(RAB,STR) VPT(RAB,RAC) = VOIS(RAC,RAB,STR) enddo enddo END SUBROUTINE INTEGER FUNCTION CHAINS() USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION RECHAINS () END FUNCTION END INTERFACE CHAINS = 0 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call CHAINS_SEARCH_ATOMS (NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call CHAINS_SEARCH_STEPS (NUMTH) endif #else call CHAINS_SEARCH_STEPS () #endif CHAINS = RECHAINS() END FUNCTION #ifdef OPENMP SUBROUTINE CHAINS_SEARCH_ATOMS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_CHAIN INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR INTEGER :: LORA, LORB, RES, ch INTERFACE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL END FUNCTION RECURSIVE SUBROUTINE INSIDE_CHAIN (THE_CHAIN, CID, TAE, LRA, LRB, NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(INOUT) :: THE_CHAIN INTEGER, INTENT(IN) :: CID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION CHAINS_TO_OGL (STEP, NRI, RSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(IN) :: RSAVED END FUNCTION INTEGER FUNCTION CHAINS_TO_OGL_MENU (NRI) USE PARAMETERS INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI END FUNCTION END INTERFACE ch = 0 if (allocated(NRING)) deallocate(NRING) allocate(NRING(TAILLC,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NRING" ALC=.true. goto 001 endif NRING(:,:) = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLC,NUMA,TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS SAVRING(:,:,:)=0 call SETUP_CPAT_VPAT_CHAIN (CONTJ, VOISJ, i, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THE_CHAIN, RPAT, RUNSEARCH, ERR, SAVR, TRING, INDTE, & !$OMP& j, k, l, m, n, o, LORA, LORB, RES, RES_LIST, TAILLE, SAUT) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, ISOLATED, CONTJ, VOISJ, CPAT, VPAT, & !$OMP& NUMA, MAXN, ACAC, AAAA, NOHP, TAILLC, TBR, ALC, ALC_TAB, NCELLS, PBC, SAVRING, NRING, ch) if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RAPT" ALC=.true. goto 003 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 003 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 003 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLC,NUMA,TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 003 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 003 endif if(allocated(THE_CHAIN)) deallocate(THE_CHAIN) allocate(THE_CHAIN(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_CHAIN" ALC=.true. goto 003 endif TRING(:)=0 SAVR(:,:,:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (TBR .or. ALC) goto 002 if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then if ((ISOLATED .and. CPAT(j).eq.1) .or. (.not.ISOLATED .and. (CPAT(j).gt.0 .and. CPAT(j).ne.2))) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (AAAA) then if (LORA .ne. LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif else if (ACAC) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else if (NOHP .and. LORA.eq.LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif if (RUNSEARCH) then RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo RPAT(j)=1 THE_CHAIN(1)%ATOM=j THE_CHAIN(1)%SPEC=LORA THE_CHAIN(1)%NEIGHBOR=1 THE_CHAIN(2)%ATOM=VPAT(j,l) THE_CHAIN(2)%SPEC=LORB THE_CHAIN(2)%NEIGHBOR=CPAT(VPAT(j,l)) RES_LIST(:) = 0 INDTE(:) = 0 TAILLE=0 RES = CHECK_CHAIN (THE_CHAIN, 2, TAILLE, SAVR, TRING, INDTE, RES_LIST) if (ALC) ALC_TAB="CHECK_CHAIN" if (TBR .or. ALC) goto 002 if (CPAT(VPAT(j,l)) .eq. 2) then call INSIDE_CHAIN (THE_CHAIN, 2, TAILLE, LORA, LORB, RPAT, SAVR, TRING, INDTE, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_CHAIN" endif if (TBR .or. ALC) goto 002 endif enddo endif endif 002 continue enddo !$OMP END DO NOWAIT if (TBR .or. ALC) goto 003 !$OMP CRITICAL do k=2, TAILLC if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (.not.SAUT) then SAUT=.true. do n=1, k if (SAVRING(k,m,k-n+1) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo endif if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 003 continue if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(THE_CHAIN)) deallocate (THE_CHAIN) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 !do j=2, TAILLC ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",SAVRING(j,k,1:j) ! enddo ! endif !enddo ch = ch + CHAINS_TO_OGL (i, NRING, SAVRING) enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: CHAINS_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (ch .eq. NS) ch = CHAINS_TO_OGL_MENU (NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE CHAINS_SEARCH_STEPS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH #else SUBROUTINE CHAINS_SEARCH_STEPS () USE PARAMETERS IMPLICIT NONE #endif TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_CHAIN INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING INTEGER :: RES, LORA, LORB, ch INTERFACE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL END FUNCTION RECURSIVE SUBROUTINE INSIDE_CHAIN (THE_CHAIN, CID, TAE, LRA, LRB, NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(INOUT) :: THE_CHAIN INTEGER, INTENT(IN) :: CID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION CHAINS_TO_OGL (STEP, NRI, RSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(IN) :: RSAVED END FUNCTION INTEGER FUNCTION CHAINS_TO_OGL_MENU (NRI) USE PARAMETERS INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI END FUNCTION END INTERFACE ch = 0 if (allocated(NRING)) deallocate(NRING) allocate(NRING(TAILLC,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NRING" ALC=.true. goto 001 endif NRING(:,:) = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THE_CHAIN, RPAT, RUNSEARCH, ERR, SAVRING, TRING, INDTE, & !$OMP& j, k, l, m, n, o, LORA, LORB, RES, RES_LIST, CPAT, VPAT, TAILLE) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, ISOLATED, CONTJ, VOISJ, & !$OMP& NUMA, MAXN, ACAC, AAAA, NOHP, TAILLC, TBR, ALC, ALC_TAB, NCELLS, PBC, NRING, ch) #endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLC,NUMA,TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 002 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 002 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 002 endif if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="REST_LIST" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(THE_CHAIN)) deallocate(THE_CHAIN) allocate(THE_CHAIN(TAILLC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_CHAIN" ALC=.true. goto 002 endif #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS if (TBR .or. ALC) goto 003 SAVRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_CHAIN (CONTJ, VOISJ, i, CPAT, VPAT) do j=1, NA if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then if ((ISOLATED .and. CPAT(j).eq.1) .or. (.not.ISOLATED .and. (CPAT(j).gt.0 .and. CPAT(j).ne.2))) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (AAAA) then if (LORA .ne. LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif else if (ACAC) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else if (NOHP .and. LORA.eq.LORB) then RUNSEARCH=.false. else RUNSEARCH=.true. endif if (RUNSEARCH) then RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo RPAT(j)=1 THE_CHAIN(1)%ATOM=j THE_CHAIN(1)%SPEC=LORA THE_CHAIN(1)%NEIGHBOR=1 THE_CHAIN(2)%ATOM=VPAT(j,l) THE_CHAIN(2)%SPEC=LORB THE_CHAIN(2)%NEIGHBOR=CPAT(VPAT(j,l)) RES_LIST(:) = 0 INDTE(:) = 0 TAILLE = 0 RES = CHECK_CHAIN (THE_CHAIN, 2, TAILLE, SAVRING, TRING, INDTE, RES_LIST) if (ALC) ALC_TAB="CHECK_CHAIN" if (TBR .or. ALC) goto 003 if (CPAT(VPAT(j,l)) .eq. 2) then call INSIDE_CHAIN (THE_CHAIN, 2, TAILLE, LORA, LORB, RPAT, SAVRING, TRING, INDTE, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_CHAIN" endif if (TBR .or. ALC) goto 003 endif enddo endif endif enddo do j=1, TAILLC NRING(j,i) = TRING(j) enddo !do j=2, TAILLC ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",SAVRING(j,k,1:j) ! enddo ! endif !enddo j = CHAINS_TO_OGL (i, NRING, SAVRING) #ifdef OPENMP !$OMP ATOMIC #endif ch = ch + j 003 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 002 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: CHAINS_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(THE_CHAIN)) deallocate (THE_CHAIN) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) #ifdef OPENMP !$OMP END PARALLEL #endif if (ch .eq. NS) ch = CHAINS_TO_OGL_MENU (NRING) 001 continue END SUBROUTINE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTERFACE SUBROUTINE SAVE_THIS_CHAIN (THE_CHAIN, TLES, RSAVED, TRING, INDT, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING END SUBROUTINE SUBROUTINE DEL_THIS_CHAIN (TLED, RSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING END END INTERFACE CHECK_CHAIN = 0 if (CHAINE .ge. TAE .and. CHAINE .le. TAILLC) then if (TAE .gt. 0) call DEL_THIS_CHAIN (TAE, RSAVED, TRING, RESL, INDE) TAE=CHAINE call SAVE_THIS_CHAIN (THE_CHAIN, TAE, RSAVED, TRING, INDE, RESL) if (TBR .or. ALC) CHECK_CHAIN = 1 endif END FUNCTION RECURSIVE SUBROUTINE INSIDE_CHAIN (THE_CHAIN, CID, TAE, LRA, LRB, & NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLC), INTENT(INOUT) :: THE_CHAIN INTEGER, INTENT(IN) :: CID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT INTEGER :: IND, RES LOGICAL :: ADDSP INTERFACE INTEGER FUNCTION CHECK_CHAIN (THE_CHAIN, CHAINE, TAE, RSAVED, TRING, INDE, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: CHAINE INTEGER, INTENT(INOUT) :: TAE INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL END FUNCTION END INTERFACE if (CID-1 .lt. TAILLC) then do while (THE_CHAIN(CID)%NEIGHBOR .ge. 1) IND = VPT(THE_CHAIN(CID)%ATOM, THE_CHAIN(CID)%NEIGHBOR) if (NRPAT(IND).eq.0 .and. CPT(IND).ge.1) then if (AAAA) then if (THE_CHAIN(CID)%SPEC .eq. LOT(IND)) then ADDSP=.true. else ADDSP=.false. endif else if (ACAC) then if (mod(CID,2).ne.0 .and. LOT(IND).eq.LRB) then ADDSP=.true. else if (mod(CID,2).eq.0 .and. LOT(IND).eq.LRA) then ADDSP=.true. else ADDSP=.false. endif else if (NOHP .and. THE_CHAIN(CID)%SPEC.eq.LOT(IND)) then ADDSP=.false. else ADDSP=.true. endif if (ADDSP .and. ((ISOLATED .and. CPT(IND).le.2) .or. .not.ISOLATED)) then THE_CHAIN(CID+1)%ATOM = IND THE_CHAIN(CID+1)%SPEC = LOT(IND) THE_CHAIN(CID+1)%NEIGHBOR = CPT(IND) NRPAT(IND)=1 RES = CHECK_CHAIN (THE_CHAIN, CID+1, TAE, RSAVED, TRING, INDE, RESL) if (TBR .or. ALC) goto 001 if (RES.eq.0 .and. CPT(IND).eq.2) then call INSIDE_CHAIN(THE_CHAIN, CID+1, TAE, LRA, LRB, NRPAT, RSAVED, TRING, INDE, RESL, CPT, VPT) if (TBR .or. ALC) goto 001 endif NRPAT(IND) = 0 endif endif THE_CHAIN(CID)%NEIGHBOR = THE_CHAIN(CID)%NEIGHBOR - 1 enddo endif 001 continue END SUBROUTINE INSIDE_CHAIN SUBROUTINE SAVE_THIS_CHAIN (THE_CHAIN, TLES, RSAVED, TRING, INDT, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLC), INTENT(IN) :: THE_CHAIN INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING INTEGER :: idx, idy LOGICAL :: NEWCHAIN INTEGER, DIMENSION(TLES) :: TOSAV ! A ring has been found, we need to check if it has already been found or not do idx=1, TLES ! Creation of two tab first for the numerical sorting of the list ! The other without sorting for output TOSAV(idx)=THE_CHAIN(idx)%ATOM enddo if (TRING(TLES) .ne. 0) then do idx=1, TRING(TLES) ! do-loop on existing rings to check if the new on has already been found NEWCHAIN=.false. do idy=1, TLES if (TOSAV(idy) .ne. RSAVED(TLES,idx,idy)) then NEWCHAIN=.true. exit endif enddo if (NEWCHAIN) then NEWCHAIN=.false. do idy=1, TLES if (TOSAV(TLES-idy+1) .ne. RSAVED(TLES,idx,idy)) then NEWCHAIN=.true. exit endif enddo endif if (.not.NEWCHAIN) then ! Already been found n-times, increment of the counter INDT(idx)=INDT(idx)+1 exit endif enddo else NEWCHAIN=.true. endif if (NEWCHAIN) then RESL(TLES)=RESL(TLES)+1 TRING(TLES)=TRING(TLES)+1 if (TRING(TLES) .gt. NUMA) then TBR=.true. goto 001 endif INDT(TRING(TLES))=INDT(TRING(TLES))+1 do idx=1, TLES RSAVED(TLES,TRING(TLES),idx)=TOSAV(idx) enddo endif 001 continue END SUBROUTINE SUBROUTINE DEL_THIS_CHAIN (TLED, RSAVED, TRING, RESL, INDT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(INOUT) :: RSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLC), INTENT(INOUT) :: RESL, TRING INTEGER :: xdel, did ! The max size of the ring possible for the triplet N1-At-N2 has down ! We have to delete the bigger rings already found for this triplet if (RESL(TLED) .ge. 1) then do xdel=0, RESL(TLED)-1 do did=1, TAILLC RSAVED(TLED,TRING(TLED)-xdel,did)=0 enddo INDT(:) = 0 enddo TRING(TLED)=TRING(TLED)-RESL(TLED) RESL(TLED)=0 endif END SUBROUTINE Atomes-GNU-1.1.14/src/fortran/chains_ogl.F90000066400000000000000000000107141457665371200203300ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file chains_ogl.F90 !! @short Send chain statistics data to C for OpenGL rendering !! @author Sébastien Le Roux INTEGER FUNCTION CHAINS_TO_OGL (STEP, NRI, RSAVED) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: STEP INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLC,NUMA,TAILLC), INTENT(IN) :: RSAVED INTEGER, DIMENSION(NUMA) :: CHAIN_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: CHAIN_ID INTEGER :: RAA, RAB, RAC, RAD, RAE RAB=0 do RAA=2, TAILLC if (NRI(RAA,STEP) > 0) then RAB=RAB+1 call allocate_all_chains (STEP-1, RAA, NRI(RAA,STEP)) endif enddo if (RAB.eq.0) write (6, *) "Chains RAB=0" do RAA=1, NA do RAB=2, TAILLC RAC = 0 do RAD=1, NUMA CHAIN_LIST(RAD) = 0 enddo do RAD=1, NRI(RAB,STEP) do RAE=1, RAB if (RSAVED(RAB,RAD,RAE) .eq. RAA) then RAC=RAC+1 CHAIN_LIST(RAC) = RAD goto 001 endif enddo 001 continue enddo if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) allocate(CHAIN_ID(RAC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL"//CHAR(0), "Table: CHAIN_ID (1)"//CHAR(0)) CHAINS_TO_OGL = 0 goto 002 endif do RAD=1, RAC CHAIN_ID(RAD) = CHAIN_LIST(RAD) enddo if (RAC > 0) call send_atom_chains_id_opengl (STEP-1, RAA-1, RAB, RAC, CHAIN_ID) enddo enddo do RAA=2, TAILLC if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) allocate(CHAIN_ID(RAA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL"//CHAR(0), "Table: CHAIN_ID (2)"//CHAR(0)) CHAINS_TO_OGL = 0 goto 002 endif if (NRI(RAA,STEP) > 0) then do RAB=1, NRI(RAA,STEP) do RAC=1, RAA CHAIN_ID(RAC) = RSAVED(RAA,RAB,RAC) enddo call send_chains_opengl (STEP-1, RAA, RAB-1, CHAIN_ID) enddo endif enddo CHAINS_TO_OGL = 1 if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) 002 continue END FUNCTION INTEGER FUNCTION CHAINS_TO_OGL_MENU (NRI) USE PARAMETERS IMPLICIT NONE INTEGER, DIMENSION(TAILLC, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(:), ALLOCATABLE :: CHAIN_ID, CHAIN_JD, CHAIN_KD if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) allocate(CHAIN_ID(TAILLC-1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL_MENU"//CHAR(0), "Table: CHAIN_ID "//CHAR(0)) CHAINS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=2, TAILLC CHAIN_ID(i-1) = 0 do j=1, NS CHAIN_ID(i-1) = CHAIN_ID(i-1) + NRI(i,j) enddo if (CHAIN_ID(i-1) > 0) then k = k + 1 endif enddo if (allocated(CHAIN_JD)) deallocate(CHAIN_JD) allocate(CHAIN_JD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL_MENU"//CHAR(0), "Table: CHAIN_JD "//CHAR(0)) CHAINS_TO_OGL_MENU = 0 goto 001 endif if (allocated(CHAIN_KD)) deallocate(CHAIN_KD) allocate(CHAIN_KD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: CHAINS_TO_OGL_MENU"//CHAR(0), "Table: CHAIN_KD "//CHAR(0)) CHAINS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=2, TAILLC if (CHAIN_ID(i-1) > 0) then k = k + 1 CHAIN_JD(k) = i CHAIN_KD(k) = CHAIN_ID(i-1) endif enddo if (k > 0) then call send_coord_opengl (9, 1, 0, 0, k, k) call init_menurings (9, 5, k, CHAIN_JD, CHAIN_KD) endif if (allocated(CHAIN_ID)) deallocate(CHAIN_ID) if (allocated(CHAIN_JD)) deallocate(CHAIN_JD) if (allocated(CHAIN_KD)) deallocate(CHAIN_KD) CHAINS_TO_OGL_MENU = 1 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/chemistry.F90000066400000000000000000000062051457665371200202310ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file chemistry.F90 !! @short Basic chemistry analysis !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION chemistry () BIND (C,NAME='chemistry_') ! ! Density, number density, concentrations, empirical formula ! USE PARAMETERS IMPLICIT NONE INTEGER :: REF1, REF2, REF3 INTEGER, DIMENSION(:), ALLOCATABLE :: INDEX_FORM ! Formula index INTEGER, DIMENSION(:), ALLOCATABLE :: REFP LOGICAL :: UNCLEAR, UNFRAC ! ! Determination of the empirical formula ! Détermination de la formule brute ! if (allocated(INDEX_FORM)) deallocate(INDEX_FORM) allocate(INDEX_FORM(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: chemistry"//CHAR(0), "Table: INDEX_FORM"//CHAR(0)) chemistry = 0 goto 001 endif if (allocated(REFP)) deallocate(REFP) allocate(REFP(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: chemistry"//CHAR(0), "Table: REFP"//CHAR(0)) chemistry = 0 goto 001 endif do i=1, NSP REFP(i)= NBSPBS(i) enddo do i=1, NSP if (i .eq. 1)then REF1=NBSPBS(i) REF2=i else REF3=REF1 REF1=min(NBSPBS(i),REF1) if (REF3 .ne. REF1) REF2=i endif enddo UNCLEAR=.true. UNFRAC=.false. l=1 do while (UNCLEAR) UNCLEAR=.false. do i=1, NSP if (i .ne. REF2) then if (.not.UNFRAC) then m=1 do while (mod(m*REFP(i),REF1).ne.0 .and. m.lt.REF1) m=m+1 enddo if (mod(m*REFP(i),REF1) .eq. 0) then INDEX_FORM(i)=m*REFP(i)/REF1 UNCLEAR=.true. else INDEX_FORM(i)=NBSPBS(i) UNCLEAR=.true. UNFRAC=.true. endif else INDEX_FORM(i)=NBSPBS(i) endif endif enddo if (UNFRAC) then INDEX_FORM(REF2)=NBSPBS(REF2) else INDEX_FORM(REF2)=REFP(REF2)/NBSPBS(REF2) endif if (UNCLEAR) then UNCLEAR=.false. do i=1, NSP-1 do j=i+1, NSP y=dble(INDEX_FORM(i))/dble(INDEX_FORM(j)) z=dble(NBSPBS(i))/dble(NBSPBS(j)) if (y .ne. z) UNCLEAR=.true. enddo enddo if (UNCLEAR) then REFP=REFP/l l=l+1 REFP=REFP*l endif endif enddo ! To send_chem_info_ call send_chem_info (INDEX_FORM) chemistry = 1 001 continue if (allocated(INDEX_FORM)) deallocate(INDEX_FORM) if (allocated(REFP)) deallocate(REFP) END FUNCTION Atomes-GNU-1.1.14/src/fortran/clean.F90000066400000000000000000000026451457665371200173100ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file clean.F90 !! @short Clean up Fortran90 data !! @author Sébastien Le Roux #if defined (HAVE_CONFIG_H) # include #endif #include "version.h" SUBROUTINE profree () BIND (C,NAME='profree_') USE PARAMETERS IMPLICIT NONE ! deallocation of possibly remaining data if (allocated(FULLPOS)) deallocate(FULLPOS) if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) if (allocated(LOT)) deallocate(LOT) if (allocated(NBSPBS)) deallocate(NBSPBS) if (allocated(TL)) deallocate(TL) if (allocated(ATOMID)) deallocate(ATOMID) if (allocated(MASS)) deallocate(MASS) if (allocated(RVDW)) deallocate(RVDW) if (allocated(Xi)) deallocate(Xi) END SUBROUTINE Atomes-GNU-1.1.14/src/fortran/cqvf.F90000066400000000000000000000167071457665371200171710ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file cqvf.F90 !! @short q vectors selection for the reciprocal calculation of the S(k) !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION cqvf (QMAX, QMIN, NQ, PROBA, LIMQ) BIND (C,NAME='cqvf_') ! ! Determines the q-vectors for which the q-dependent ! correlation functions are computed - general cell ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ REAL (KIND=c_double), INTENT(IN) :: PROBA, LIMQ REAL (KIND=c_double), INTENT(IN) :: QMAX, QMIN LOGICAL :: KPTS, KEEPKPTS INTEGER :: hkl, q_index, seed INTEGER :: klow, llow INTEGER, DIMENSION(3) :: NKPTS DOUBLE PRECISION, DIMENSION(3) :: qmrecip DOUBLE PRECISION :: QMAX2, QMIN2, LIMQ2 DOUBLE PRECISION :: kpx, kpy, kpz, keep INTERFACE DOUBLE PRECISION FUNCTION RAN3 (idnum) INTEGER, INTENT(IN) :: idnum END FUNCTION END INTERFACE qmrecip(:) = 0.0d0 do i=1, NCELLS do j=1, 3 qmrecip(j) = qmrecip(j)+THE_BOX(i)%modr(j) enddo enddo qmrecip(:) = qmrecip(:)/NCELLS do i=1, 3 NKPTS(i) = AnINT(QMAX/qmrecip(i))+1 enddo hkl=0 ! To simply the case of the calculation in the case of a simple cubic box if (OVERALL_CUBIC) then QMAX2=(QMAX/QMIN)**2 QMIN2=1.0d0 LIMQ2=(LIMQ/QMIN)**2 else QMAX2=QMAX**2 ! mod(q_max)**2 LIMQ2=LIMQ**2 QMIN2=QMIN**2 ! min module of the reciprocal lattice vectors - lattice.f90 endif q_index=0 qvmax=0.0d0 qvmin=50.0d0 do i=1, 2 ! The firt iteration to evaluate the number of k-points ! to be saved for the analysis, and the second to store them. if (i .eq. 2) then NUMBER_OF_QMOD=q_index if (allocated(qvectx)) deallocate(qvectx) allocate(qvectx(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: qvectx"//CHAR(0)) CQVF=0 goto 001 endif if (allocated(qvecty)) deallocate(qvecty) allocate(qvecty(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: qvecty"//CHAR(0)) CQVF=0 goto 001 endif if (allocated(qvectz)) deallocate(qvectz) allocate(qvectz(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: qvectz"//CHAR(0)) CQVF=0 goto 001 endif if (allocated(modq)) deallocate(modq) allocate(modq(NUMBER_OF_QMOD), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: modq"//CHAR(0)) CQVF=0 goto 001 endif q_index=0 endif do h=0, NKPTS(1) if (h .eq. 0) then klow=0 else klow=-NKPTS(2) endif do k=klow, NKPTS(2) if (k.eq.0 .and. h.eq.0) then llow=0 else llow=-NKPTS(3) endif do l=llow, NKPTS(3) if (OVERALL_CUBIC) then kpx= h kpy= k kpz= l else kpx= 2.0d0*PI*(h*THE_BOX(1)%lrecp(1,1) + k*THE_BOX(1)%lrecp(2,1) + l*THE_BOX(1)%lrecp(3,1)) kpy= 2.0d0*PI*(h*THE_BOX(1)%lrecp(1,2) + k*THE_BOX(1)%lrecp(2,2) + l*THE_BOX(1)%lrecp(3,2)) kpz= 2.0d0*PI*(h*THE_BOX(1)%lrecp(1,3) + k*THE_BOX(1)%lrecp(2,3) + l*THE_BOX(1)%lrecp(3,3)) endif qvmod= kpx**2 + kpy**2 + kpz**2 ! we want the maximum number of k-points in the FSDP part of the spectra ! therefore we choose to keep all qvectors with qmod in: ! minr < qmod < limq ! where 'minr' is minimum q modulus accessible considering the analysed ! lattice ie. the minimum modulus of the reciprocal cell vectors, ! limq is the limit to be fixed for the FSDP part of the spectra ! Thereafter: QMIN=minr**2 and LIMQ2=limq**2. ! The qvectors with a qmod > limq are accepted with a probability of PROBA if (qvmod .le. QMAX2 .and. qvmod .ge. QMIN2) then KPTS=.true. else KPTS=.false. endif if (i .eq. 1 .and. KPTS) then q_index=q_index+2 elseif (i .eq. 2 .and. KPTS) then if (qvmod .le. LIMQ2) then KEEPKPTS=.true. else seed=173932 keep = RAN3(seed+h**3+k**2+l**5) if (keep .le. PROBA) then KEEPKPTS=.true. else KEEPKPTS=.false. endif endif if (KEEPKPTS) then q_index=q_index+1 qvectx(q_index)=kpx qvecty(q_index)=kpy qvectz(q_index)=kpz modq(q_index)=sqrt(qvmod) qvmax=max(qvmax,modq(q_index)) qvmin=min(qvmin,modq(q_index)) if (h.ne.0 .or. k.ne.0 .or. l.ne.0) then q_index=q_index+1 qvectx(q_index)=-kpx qvecty(q_index)=-kpy qvectz(q_index)=-kpz modq(q_index)=sqrt(qvmod) endif endif endif enddo ! l enddo ! k enddo ! h enddo NUMBER_OF_QVECT=q_index ! NQ is given in input ! the value of each Q_POINT is find in the ! interval |qvmax - qvmin| and then we compute ! the degeneracy of each Q_POINT in q modulus. if (allocated(degeneracy)) deallocate(degeneracy) allocate(degeneracy(NQ+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: degeneracy"//CHAR(0)) CQVF=0 goto 001 endif degeneracy(:)=0 ! We do not sort the Q vectors by modulus, ! to save CPU time we discretize the distribution ! of the modulus, this approximation is perfect ! if the variable NQ given by the user ! in the input file is big enough (>= 1000). DELTA_Q=(qvmax-qvmin)/NQ do i=1, NUMBER_OF_QVECT hkl=AnINT((modq(i)-qvmin)/DELTA_Q)+1 degeneracy(hkl)=degeneracy(hkl)+1 enddo if (allocated(K_POINT)) deallocate(K_POINT) allocate(K_POINT(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: COMP_Q_VAL_FULL"//CHAR(0), "Table: K_POINT"//CHAR(0)) CQVF=0 goto 001 endif do i=1, NQ ! The next line to avoid NAN error when computing the normalisation factor of the S(q) if (degeneracy(i) .eq. 0) degeneracy(i)=1 K_POINT(i)=(i-1.0)*DELTA_Q+qvmin enddo if (OVERALL_CUBIC) then do i=1, NUMBER_OF_QVECT qvectx(i)=qvectx(i)*QMIN qvecty(i)=qvecty(i)*QMIN qvectz(i)=qvectz(i)*QMIN enddo do i=1, NQ K_POINT(i)=K_POINT(i)*QMIN enddo endif CQVF=1 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/dmtx.F90000066400000000000000000001344461457665371200172070ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file dmtx.F90 !! @short Distance matrix calculation !! @author Sébastien Le Roux SUBROUTINE PRINT_THIS_PIXEL (TPS, TPIX, PIXL, pix, atoms) USE PARAMETERS IMPLICIT NONE TYPE (PIXEL), DIMENSION(TPS), INTENT(IN) :: TPIX TYPE (PIXEL), INTENT(IN) :: PIXL LOGICAL, INTENT(IN) :: atoms INTEGER, INTENT(IN) :: TPS, pix INTEGER :: PA, PB write (6, '("Pixel= ",i4)') pix do PA=1, PIXL%NEIGHBOR PB = PIXL%IDNEIGH(PA) if (atoms) then write (6, '(" N(",i4,")= ",i10," contains: ",i4," atom(s)")') PA, PIXL%IDNEIGH(PA), TPIX(PB)%ATOMS else write (6, '(" N(",i4,")= ",i10)') PA, PIXL%IDNEIGH(PA) endif enddo write (6, *) if (atoms) then do PA=1, PIXL%ATOMS write (6, '(" At(",i4,")= ",i10)') PA, PIXL%ATOM_ID(PA) enddo write (6, *) endif END SUBROUTINE SUBROUTINE SET_SHIFT (shift, ai, bi, ci, npa, npb, npc) IMPLICIT NONE INTEGER, DIMENSION(3,3,3), INTENT(INOUT) :: shift INTEGER, INTENT(IN) :: ai, bi, ci INTEGER, INTENT(IN) :: npa, npb, npc INTEGER :: nab, abc nab = npa*npb abc = nab*npc ! Standard pixel positions: ! Lower level !shift(1,1,1) = nab+npa+1 !shift(1,1,2) = nab+npa !shift(1,1,3) = nab+npa-1 !shift(1,2,1) = nab+1 !shift(1,2,2) = nab !shift(1,2,3) = nab-1 !shift(1,3,1) = nab-npa+1 !shift(1,3,2) = nab-npa !shift(1,3,3) = nab-npa-1 ! Same level !shift(2,1,1) = npa+1 !shift(2,1,2) = npa !shift(2,1,3) = npa-1 !shift(2,2,1) = 1 !shift(2,2,2) = 0 !shift(2,2,3) = -1 !shift(2,3,1) = -npa+1 !shift(2,3,2) = -npa !shift(2,3,3) = -npa-1 ! Higher level !shift(3,1,1) = npa+1-nab !shift(3,1,2) = npa-nab !shift(3,1,3) = npa-1-nab !shift(3,2,1) = 1-nab !shift(3,2,2) = -nab !shift(3,2,3) = -1-nab !shift(3,3,1) = -npa+1-nab !shift(3,3,2) = -npa-nab !shift(3,3,3) = -npa-1-nab ! The shift is to compensate PBC if (ai .eq. 1) then shift (1,:,:) = npa else if (ai .eq. npa) then shift (3,:,:) = - npa endif if (bi .eq. 1) then shift (:,1,:) = shift (:,1,:) + nab else if (bi .eq. npb) then shift (:,3,:) = shift (:,3,:) - nab endif if (ci .eq. 1) then shift (:,:,1) = shift (:,:,1) + abc else if (ci .eq. npc) then shift (:,:,3) = shift (:,:,3) - abc endif END SUBROUTINE INTEGER FUNCTION GETNBX(NP, NPS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NP, NPS INTEGER :: PIA, PIB, PIC, PID INTEGER :: TPIXD, ADAPT_CUT DOUBLE PRECISION :: ICUT, INID DOUBLE PRECISION :: MPSIZE DOUBLE PRECISION :: NEW_MPSIZE DOUBLE PRECISION :: TARGETDP DOUBLE PRECISION :: RHONUM if (.not.PBC) then do PIA=1, 3 pmin(PIA)=FULLPOS(1,PIA,1) pmax(PIA)=pmin(PIA) enddo do PIA=1, NPS if (PIA.eq.1) then PID=2 else PID=1 endif do PIB=PID, NP do PIC=1, 3 pmin(PIC) = min(FULLPOS(PIB,PIC,PIA),pmin(PIC)) pmax(PIC) = max(FULLPOS(PIB,PIC,PIA),pmax(PIC)) enddo enddo enddo do PIA=1, 3 pmax(PIA) = pmax(PIA) - pmin(PIA) enddo else pmax(:) = 0.0d0 do PIB=1, NCELLS do PIA=1, 3 pmax(PIA) = max(pmax(PIA), THE_BOX(PIB)%modv(PIA)) enddo enddo do PIA=1, 3 pmin(PIA) = - pmax(PIA)/2.0 enddo endif #ifdef DEBUG write (6, '("pmin:: x= ",f15.10,", y= ",f15.10,", z= ",f15.10)') pmin(1), pmin(2), pmin(3) write (6, '("pmax:: x= ",f15.10,", y= ",f15.10,", z= ",f15.10)') pmax(1), pmax(2), pmax(3) #endif ICUT=0.0 do PIA=1, NSP do PIB=1, NSP ICUT=max(ICUT,Gr_TMP(PIA,PIB)) enddo enddo ICUT=sqrt(ICUT) ICUT = ICUT + 1.0d0 ! The pixel size must be larger than the cutoff ! If the system is large with a low density the pixel box can be too big in number of pixels, ! and it is not possible to allocate the required memory. ! Therefore it is required to increase the cutoff slightly to reduce the number of pixels. ! We need to look into the density of atoms per pixel, good target values range between 1.5 and 2.0. ! With PBC this works providing that you do not have a large box that contains an isolated molecule, ! That is an extremely low number density, thus we need to check that as well. TARGETDP=1.85d0 MPSIZE=1.0d0 ADAPT_CUT=2 if (PBC) then ! Number density RHONUM=NP do PIA=1, 3 RHONUM=RHONUM/(THE_BOX(1)%modv(PIA)) enddo if (RHONUM.lt.0.01) ADAPT_CUT=1 endif do TPIXD=1, ADAPT_CUT ! MPSIZE is the modifier CUTF=ICUT*MPSIZE CUTF=1.0d0/CUTF do PIA=1, 3 isize(PIA) = INT(abs(pmax(PIA))*CUTF) if (PBC) then if (isize(PIA) .lt. 3) isize(PIA) = 1 else if (isize(PIA) .eq. 0) isize(PIA) = 1 endif enddo GETNBX = 1 if (CALC_PRINGS .and. PBC) then GETNBX = 5 do PIA=1, 3 pmin(PIA) = GETNBX*pmin(PIA) pmax(PIA) = GETNBX*pmax(PIA) enddo do PIA=1, 3 isize(PIA) = INT(abs(pmax(PIA))*CUTF) if (isize(PIA) .lt. 3) isize(PIA) = 1 enddo endif if (TPIXD .eq. 1) then PIA = isize(1)*isize(2)*isize(3) INID = NP INID = INID/PIA NEW_MPSIZE = (TARGETDP/INID)**(1.0/3.0) if (NEW_MPSIZE .gt. MPSIZE) then ! Adpatation only if the cutoff increases ! Otherwise we add more pixels MPSIZE = NEW_MPSIZE endif endif enddo #ifdef DEBUG write (6, '("NBX= ",i10)') GETNBX write (6, '("isize:: x= ",I4,", y= ",I4,", z= ",I4)') isize(1), isize(2), isize(3) #endif END FUNCTION #ifdef DEBUG SUBROUTINE PRINT_PIXEL_GRID () USE PARAMETERS IMPLICIT NONE INTEGER :: pix, pid, cid, did, eid, ai, bi, ci INTEGER :: init_a, end_a INTEGER :: init_b, end_b INTEGER :: init_c, end_c INTEGER, DIMENSION(3) :: dim INTEGER, DIMENSION(3,3,3) :: shift LOGICAL :: dclo dim(1) = -1 dim(2) = 0 dim(3) = 1 call pix_info (isize(1), isize(2), isize(3)) allocate(THEPIX(abc)) pix=1 do ci=1, isize(3) do bi=1, isize(2) do ai=1, isize(1) shift(:,:,:) = 0 if (PBC .and. .not.CALC_PRINGS) then call SET_SHIFT (shift, ai, bi, ci, isize(1), isize(2), isize(3)) dclo=.false. else if (ai.eq.1 .or. ai.eq.isize(1)) dclo=.true. if (bi.eq.1 .or. bi.eq.isize(2)) dclo=.true. if (ci.eq.1 .or. ci.eq.isize(3)) dclo=.true. endif init_a = 1 end_a = 3 if (isize(1) .eq. 1) then init_a = 2 end_a = 2 endif init_b = 1 end_b = 3 if (isize(2) .eq. 1) then init_b = 2 end_b = 2 endif init_c = 1 end_c = 3 if (isize(3) .eq. 1) then init_c = 2 end_c = 2 endif pid = 0 do cid=init_a, end_a do did=init_b, end_b do eid=init_c, end_c pid = pid + 1 THEPIX(pix)%IDNEIGH(pid) = pix + dim(cid) + dim(did) * isize(1) + dim(eid) * isize(1) * isize(2) THEPIX(pix)%IDNEIGH(pid) = THEPIX(pix)%IDNEIGH(pid) + shift (cid,did,eid) if (dclo) then if (ai.eq.1 .and. cid.eq.1) then pid = pid - 1 else if (ai.eq.isize(1) .and. cid.eq.3) then pid = pid - 1 else if (bi.eq.1 .and. did.eq.1) then pid = pid - 1 else if (bi.eq.isize(2) .and. did.eq.3) then pid = pid - 1 else if (ci.eq.1 .and. eid.eq.1) then pid = pid - 1 else if (ci.eq.isize(3) .and. eid.eq.3) then pid = pid - 1 endif endif enddo enddo enddo THEPIX(pix)%NEIGHBOR = pid call send_pix_info (pix-1, THEPIX(pix)%IDNEIGH, pid) ! call PRINT_THIS_PIXEL (abc, THEPIX, THEPIX(pix), pix, .false.) pix = pix + 1 enddo enddo enddo END SUBROUTINE #endif LOGICAL FUNCTION DISTMTX(NAN, LAN, LOOKNGB, UPNGB) ! ! Compute the distance matrix - neighbors table ! USE PARAMETERS USE MENDELEIEV #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER, INTENT(IN) :: NAN INTEGER, DIMENSION(NAN), INTENT(IN) :: LAN LOGICAL, INTENT(IN) :: LOOKNGB, UPNGB INTEGER :: SAT INTEGER :: RA, RB, RC, RD, RF, RG, RH, RI, RJ, RK, RL, RM INTEGER :: RN, RO, RP, RQ, RS, RT, RU, RV, RW, RX, RY, RZ INTEGER :: A_START, A_END INTEGER :: pix DOUBLE PRECISION :: Dik DOUBLE PRECISION :: MAXBD, MINBD INTEGER, DIMENSION(:), ALLOCATABLE :: BA, BB INTEGER, DIMENSION(:), ALLOCATABLE :: CA, CB DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XC, YC, ZC LOGICAL :: CALCMAT=.false. ! Error message info ! LOGICAL :: TOOM=.false. INTEGER :: TOOI LOGICAL :: PIXR=.false. INTEGER :: POUT ! LOGICAL :: IS_CLONE, dclo INTEGER, DIMENSION(3) :: pixpos DOUBLE PRECISION, DIMENSION(3) :: XYZ INTEGER :: pid, cid, did, eid, fid, ai, bi, ci INTEGER :: init_a, end_a INTEGER :: init_b, end_b INTEGER :: init_c, end_c INTEGER, DIMENSION(3) :: dim = (/-1, 0, 1/) INTEGER, DIMENSION(3,3,3) :: shift #ifdef OPENMP INTEGER :: NUMTH INTEGER :: THREAD_NUM INTEGER :: ATOM_START, ATOM_END INTEGER, DIMENSION(:), ALLOCATABLE :: ATPIX LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION GETNBX (NP, NPS) INTEGER, INTENT(IN) :: NP, NPS END FUNCTION LOGICAL FUNCTION dvtbox (ST, NAS, NAT, NPOS) INTEGER, INTENT(IN) :: ST, NAS, NAT DOUBLE PRECISION, DIMENSION(NAT,3), INTENT(INOUT) :: NPOS END FUNCTION #ifdef OPENMP INTEGER FUNCTION GET_THREAD_START (NOBJ, NTHREADS, THREAD_ID) INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID END FUNCTION INTEGER FUNCTION GET_THREAD_END (NOBJ, NTHREADS, THREAD_ID) INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID END FUNCTION #endif DOUBLE PRECISION FUNCTION CALCDIJ (R12, AT1, AT2, STEP_1, STEP_2, SID) USE PARAMETERS DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION DOUBLE PRECISION FUNCTION SPHERES_CAPS_VOLUMES (DAB, RAP, RBP) DOUBLE PRECISION, INTENT(IN) :: DAB, RAP, RBP END FUNCTION END INTERFACE #ifdef DEBUG write (6, '("In DMTX:: LOOKNGB= ",L1, ", NOHOM= ",L1," PBC= ",L1,", CUBIC= ",L1)') LOOKNGB, NOHP, PBC, OVERALL_CUBIC #endif if (allocated(Gr_TMP)) deallocate(Gr_TMP) allocate(Gr_TMP(NSP,NSP), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VOISJ" ALC=.true. DISTMTX=.false. goto 001 endif do i=1, NSP do j=1, NSP if (Gr_CUT(i,j) .gt. Gr_cutoff) then Gr_TMP(i,j)=Gr_cutoff else Gr_TMP(i,j)=Gr_CUT(i,j) endif if (.not.LOOKNGB) Gr_TMP(i,j) = Gr_TMP(i,j) + 50.0 enddo enddo NBX = GETNBX (NAN, NS) if (PBC) then NNA=NBX**3*NAN else NNA = NAN endif if (LOOKNGB) then if (allocated(VOISJ)) deallocate(VOISJ) allocate(VOISJ(MAXN,NNA,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VOISJ" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(CONTJ)) deallocate(CONTJ) allocate(CONTJ(NNA,NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CONTJ" ALC=.true. DISTMTX=.false. goto 001 endif CONTJ(:,:)=0 VOISJ(:,:,:)=0 endif if (LOOKNGB) then MAXBD=0.0d0 MINBD=10.0d0 endif if (CALC_PRINGS) then A_START = 1 A_END = NNA else A_START = NAN *(NBX**3 - 1)/2 + 1 A_END = A_START + NAN - 1 endif ab = isize(1)*isize(2) abc = ab*isize(3) #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. TOOM=.false. #ifdef DEBUG call PRINT_PIXEL_GRID () #endif if (DOATOMS) then ! OpemMP on Atoms if (NAN.lt.NUMTH) NUMTH=NAN DISTMTX=.true. if (NBX.gt.1) then allocate(POA(NNA,3), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="POA" ALC=.true. DISTMTX=.false. goto 001 endif endif do SAT=1, NS if (NBX.gt.1) then if (.not.dvtbox(SAT, NA, NNA, POA)) then DISTMTX=.false. goto 001 endif endif RA = 0 RB = 0 !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THREAD_NUM, THEPIX, ATPIX, ATOM_START, ATOM_END, pix, shift, & !$OMP& RC, RD, RF, RG, RH, RI, RJ, RK, RL, RM, pixpos, XYZ, & !$OMP& RN, RO, RP, RQ, RS, RT, RU, RV, RW, RX, RY, RZ, ERR, ai, bi, ci, & !$OMP& IS_CLONE, CALCMAT, Dij, Rij, Dik, BA, BB, CA, CB, XC, YC, ZC, & !$OMP& pid, cid, did, eid, fid, init_a, end_a, init_b, end_b, init_c, end_c, dclo) & !$OMP& SHARED(NUMTH, SAT, NS, NA, NNA, NAN, LAN, NSP, LOOKNGB, UPNGB, DISTMTX, & !$OMP& NBX, PBC, THE_BOX, NCELLS, isize, pmin, pmax, abc, ab, A_START, A_END, NOHP, MAXN, CUTF, & !$OMP& POA, FULLPOS, Gr_TMP, CALC_PRINGS, MAXBD, MINBD, CONTJ, VOISJ, RA, RB, & !$OMP& LA_COUNT, CORTA, CORNERA, EDGETA, EDGEA, DEFTA, DEFA, & !$OMP& ALC, ALC_TAB, TOOM, TOOI, PIXR, POUT, dim) THREAD_NUM = OMP_GET_THREAD_NUM () ATOM_START = GET_THREAD_START (NNA, NUMTH, THREAD_NUM) ATOM_END = GET_THREAD_END (NNA, NUMTH, THREAD_NUM) if (allocated(THEPIX)) deallocate(THEPIX) allocate(THEPIX(abc), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX" ALC=.true. DISTMTX = .false. goto 002 endif if (allocated(ATPIX)) deallocate(ATPIX) allocate(ATPIX(ATOM_END-ATOM_START+1), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ATPIX" ALC=.true. DISTMTX = .false. goto 002 endif RC = INT(MAXN*2.5) ! 1) LOOK: "RA" is the number of atom(s) in one pixel ! with MAXN = 20, the '50' value seems high enough ! to ensure to catch every atom in the pixel ! this is ok providing that no funny cutoff is used ! 2) .not.LOOK: looking for tetrahedra, requires larger value: if (.not.LOOKNGB) RC = MAXN*10 if (.not.LOOKNGB .or. abc .le. 5) RC = min(RC*5, NNA) do RD=1, abc THEPIX(RD)%ATOMS=0 THEPIX(RD)%TOCHECK=.false. THEPIX(RD)%CHECKED=.false. allocate(THEPIX(RD)%ATOM_ID(RC), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX%ATOM_ID" ALC=.true. DISTMTX = .false. goto 002 endif THEPIX(RD)%IDNEIGH(:) = 0 THEPIX(RD)%ATOM_ID(:) = 0 enddo do RC=1, NNA if (.not. PBC) then do RD=1, 3 pixpos(RD) = INT((FULLPOS(RC,RD,SAT) - pmin(RD))*CUTF) if (pixpos(RD) .eq. isize(RD)) pixpos(RD) = pixpos(RD)-1 enddo else if (NBX .gt. 1) then if (NCELLS.gt.1) then XYZ = MATMUL(POA(RC,:), THE_BOX(SAT)%carttofrac/NBX) else XYZ = MATMUL(POA(RC,:), THE_BOX(1)%carttofrac/NBX) endif else if (NCELLS.gt.1) then XYZ = MATMUL(FULLPOS(RC,:,SAT), THE_BOX(SAT)%carttofrac) else XYZ = MATMUL(FULLPOS(RC,:,SAT), THE_BOX(1)%carttofrac) endif endif do RD=1, 3 pixpos(RD) = INT((XYZ(RD) - AnINT(XYZ(RD)) + 0.5d0)*isize(RD)) XYZ(RD) = XYZ(RD) - AnINT(XYZ(RD)) + 0.5d0 if (pixpos(RD) .eq. isize(RD)) pixpos(RD) = pixpos(RD)-1 enddo endif pix = pixpos(1) + pixpos(2)*isize(1) + pixpos(3)*ab + 1 if (pix.gt.abc .or. pix.le.0) then write (6, '("Thread(id)= ",i4,", MD step= ",i8)') THREAD_NUM, SAT if (NBX .gt. 1) then write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RC, POA(RC,:) else write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RC, FULLPOS(RC,:,SAT) endif if (PBC) then write (6, '("at= ",i7,", cor(x)= ",f15.10,", cor(y)= ",f15.10,", cor(z)= ",f15.10)') RC, XYZ endif write (6, '("at= ",i7,", pixpos(x)= ",i4,", pixpos(y)= ",i4,", pixpos(z)= ",i4)') RC, pixpos write (6, '("at= ",i7,", pixpos= ",i10)') RC, pix PIXR=.true. POUT=pix DISTMTX=.false. goto 002 else if ((PBC .and. RC.ge.A_START .and. RC.le.A_END) .or. .not.PBC) then if (.not.THEPIX(pix)%TOCHECK) then ai = pixpos(1) + 1 bi = pixpos(2) + 1 ci = pixpos(3) + 1 pid = 0 shift(:,:,:) = 0 if (PBC .and. .not.CALC_PRINGS) then call SET_SHIFT (shift, ai, bi, ci, isize(1), isize(2), isize(3)) dclo=.false. else if (ai.eq.1 .or. ai.eq.isize(1)) dclo=.true. if (bi.eq.1 .or. bi.eq.isize(2)) dclo=.true. if (ci.eq.1 .or. ci.eq.isize(3)) dclo=.true. endif init_a = 1 end_a = 3 if (isize(1) .eq. 1) then init_a = 2 end_a = 2 endif init_b = 1 end_b = 3 if (isize(2) .eq. 1) then init_b = 2 end_b = 2 endif init_c = 1 end_c = 3 if (isize(3) .eq. 1) then init_c = 2 end_c = 2 endif do cid=init_a, end_a do did=init_b, end_b do eid=init_c, end_c pid = pid + 1 THEPIX(pix)%IDNEIGH(pid) = pix + dim(cid) + dim(did) * isize(1) + dim(eid) * isize(1) * isize(2) THEPIX(pix)%IDNEIGH(pid) = THEPIX(pix)%IDNEIGH(pid) + shift (cid,did,eid) if (dclo) then if (ai.eq.1 .and. cid.eq.1) then pid = pid - 1 else if (ai.eq.isize(1) .and. cid.eq.3) then pid = pid - 1 else if (bi.eq.1 .and. did.eq.1) then pid = pid - 1 else if (bi.eq.isize(2) .and. did.eq.3) then pid = pid - 1 else if (ci.eq.1 .and. eid.eq.1) then pid = pid - 1 else if (ci.eq.isize(3) .and. eid.eq.3) then pid = pid - 1 endif endif enddo enddo enddo THEPIX(pix)%NEIGHBOR = pid endif THEPIX(pix)%TOCHECK=.true. endif THEPIX(pix)%ATOMS = THEPIX(pix)%ATOMS + 1 THEPIX(pix)%ATOM_ID(THEPIX(pix)%ATOMS) = RC endif if (RC.ge.ATOM_START .and. RC.le.ATOM_END) ATPIX(RC-ATOM_START+1) = pix enddo do RC=ATOM_START, ATOM_END RD = ATPIX(RC-ATOM_START+1) RF = RC - (RC/NAN)*NAN if (RF .eq. 0) RF=NAN RG = LAN(RF) do RH=1, THEPIX(RD)%NEIGHBOR RI = THEPIX(RD)%IDNEIGH(RH) RJ = THEPIX(RI)%ATOMS do RK=1, RJ RL = THEPIX(RI)%ATOM_ID(RK) if (RL .ne. RC) then if ((RC.ge.A_START .and. RC.le.A_END) .or. (RL.ge.A_START .and. RL.le.A_END)) then RM = RL - (RL/NAN)*NAN if (RM .eq. 0) RM=NAN RN = LAN(RM) if (LOOKNGB) then if (.not.PBC .or. NBX.gt.1) then if (((RC.ge.A_START .and. RC.le.A_END) .and. (RL.ge.A_START .and. RL.le.A_END)) .or. .not.PBC) then IS_CLONE=.false. else IS_CLONE=.true. endif else IS_CLONE=.false. endif if (RG.ne.RN .or. .not.NOHP) then CALCMAT=.true. else CALCMAT=.false. endif if (CALCMAT) then Dij=0.0d0 if (NBX.gt.1) then do RP=1,3 Rij(RP) = POA(RC,RP) - POA(RL,RP) Dij=Dij+Rij(RP)**2 enddo else Dik=0.0d0 do RP=1,3 Rij(RP) = FULLPOS(RF,RP,SAT) - FULLPOS(RM,RP,SAT) Dik=Dik+Rij(RP)**2 enddo if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,RF,RM,SAT,SAT,SAT) else Dij = CALCDIJ (Rij,RF,RM,SAT,SAT,1) endif if (Dik-Dij .gt.0.01d0) then IS_CLONE=.true. endif endif if (Dij .le. Gr_TMP(RG,RN)) then !$OMP ATOMIC MAXBD=max(Dij,MAXBD) !$OMP ATOMIC MINBD=min(Dij,MINBD) if (CALC_PRINGS) then RP = RC RQ = RL else RP = RF RQ = RM endif CONTJ(RP,SAT)=CONTJ(RP,SAT)+1 if (CONTJ(RP,SAT) .gt. MAXN) then TOOM=.true. TOOI=RP DISTMTX=.false. goto 002 endif VOISJ(CONTJ(RP,SAT),RP,SAT)=RQ if (.not.CALC_PRINGS .and. UPNGB) then if (IS_CLONE) then VOISJ(CONTJ(RP,SAT),RP,SAT)=-RQ !$OMP ATOMIC RB = RB + 1 else !$OMP ATOMIC RA = RA + 1 endif endif endif endif else if (RG .eq. RN) then do RO=1, NSP if (LA_COUNT(RF,RO,SAT).eq.4 .and. CONTJ(RF,SAT).eq.4) then if (LA_COUNT(RM,RO,SAT).eq.4 .and. CONTJ(RM,SAT).eq.4) then RP=0 do RQ=1, 4 RS = VOISJ(RQ,RF,SAT) do RT=1, CONTJ(RS,SAT) if (VOISJ(RT,RS,SAT) .eq. RM) RP=RP+1 enddo enddo if (RP.eq.1) then !$OMP ATOMIC CORTA(RG,RO)=CORTA(RG,RO)+1 if (NS .gt. 1) then !$OMP ATOMIC CORNERA(RG,RO,SAT)=CORNERA(RG,RO,SAT)+1 endif elseif (RP.eq.2) then !$OMP ATOMIC EDGETA(RG,RO)=EDGETA(RG,RO)+1 if (NS .gt. 1) then !$OMP ATOMIC EDGEA(RG,RO,SAT)=EDGEA(RG,RO,SAT)+1 endif elseif (RP.ge.3) then !$OMP ATOMIC CORTA(RG,RO)=CORTA(RG,RO)+1 !$OMP ATOMIC EDGETA(RG,RO)=EDGETA(RG,RO)+1 !$OMP ATOMIC DEFTA(RG,RO)=DEFTA(RG,RO)+1 if (NS .gt. 1) then CORNERA(RG,RO,SAT)=CORNERA(RG,RO,SAT)+1 !$OMP ATOMIC EDGEA(RG,RO,SAT)=EDGEA(RG,RO,SAT)+1 !$OMP ATOMIC DEFA(RG,RO,SAT)=DEFA(RG,RO,SAT)+1 endif endif endif endif enddo endif endif endif endif enddo enddo enddo 002 continue if (allocated(THEPIX)) deallocate(THEPIX) if (allocated(ATPIX)) deallocate(ATPIX) !$OMP END PARALLEL if (.not.DISTMTX) then goto 001 endif if (.not.LOOKNGB) then do RC=1, NSP do RD=1, NSP CORTA(RC,RD)=CORTA(RC,RD)/2 EDGETA(RC,RD)=EDGETA(RC,RD)/2 DEFTA(RC,RD)=DEFTA(RC,RD)/2 if (NS .gt. 1) then CORNERA(RC,RD,SAT)=CORNERA(RC,RD,SAT)/2 EDGEA(RC,RD,SAT)=EDGEA(RC,RD,SAT)/2 DEFA(RC,RD,SAT)=DEFA(RC,RD,SAT)/2 endif enddo enddo endif if (.not.CALC_PRINGS .and.UPNGB) then if (RA .gt. 0) then if (allocated(BA)) deallocate(BA) allocate(BA(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BA" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(BB)) deallocate(BB) allocate(BB(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BB" ALC=.true. DISTMTX=.false. goto 001 endif endif if (RB .gt. 0) then if (allocated(CA)) deallocate(CA) allocate(CA(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CA" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(CB)) deallocate(CB) allocate(CB(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CB" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(XC)) deallocate(XC) allocate(XC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="XC" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(YC)) deallocate(YC) allocate(YC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="YC" ALC=.true. DISTMTX=.false. goto 001 endif if (allocated(ZC)) deallocate(ZC) allocate(ZC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ZC" ALC=.true. DISTMTX=.false. goto 001 endif endif if (RA.gt.0 .or. RB.gt.0) then RA=0 RB=0 do RC=1, NNA do RD=1, CONTJ(RC,SAT) RF = VOISJ(RD,RC,SAT) if (RF .gt. 0) then if (RF.gt.RC) then RA=RA+1 BA(RA) = RC BB(RA) = RF endif else VOISJ(RD,RC,SAT) = -RF RF=-RF if (RF.gt.RC) then RB=RB+1 CA(RB) = RC CB(RB) = RF if (NCELLS .gt. 1) then call CALCRIJ (RC,RF,SAT,SAT,SAT) else call CALCRIJ (RC,RF,SAT,SAT,1) endif XC(RB) = Rij(1) YC(RB) = Rij(2) ZC(RB) = Rij(3) endif endif enddo enddo endif call update_bonds (0, SAT-1, RA, BA, BB, XC, YC, ZC) call update_bonds (1, SAT-1, RB, CA, CB, XC, YC, ZC) do RC=1, NNA call update_atom_neighbors (SAT-1, RC-1, CONTJ(RC,SAT)) do RD=1, CONTJ(RC,SAT) call update_this_neighbor (SAT-1, RC-1, RD-1, VOISJ(RD,RC,SAT)) enddo enddo endif enddo ! En MD steps loop else ! OpemMP on MD steps DISTMTX=.true. !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(THEPIX, SAT, pix, pixpos, XYZ, shift, ai, bi, ci, & !$OMP& RA, RB, RC, RD, RF, RG, RH, RI, RJ, RK, RL, RM, & !$OMP& RN, RO, RP, RQ, RS, RT, RU, RV, RW, RX, RY, RZ, ERR, & !$OMP& IS_CLONE, CALCMAT, Dij, Rij, Dik, BA, BB, CA, CB, XC, YC, ZC, POA, & !$OMP& pid, cid, did, eid, fid, init_a, end_a, init_b, end_b, init_c, end_c, dclo) & !$OMP& SHARED(NUMTH, NS, NA, NNA, NAN, LAN, NSP, LOOKNGB, UPNGB, DISTMTX, & !$OMP& NBX, PBC, THE_BOX, NCELLS, isize, pmin, pmax, abc, ab, A_START, A_END, NOHP, MAXN, CUTF, & !$OMP& FULLPOS, CONTJ, VOISJ, Gr_TMP, CALC_PRINGS, MAXBD, MINBD, & !$OMP& LA_COUNT, CORTA, CORNERA, EDGETA, EDGEA, DEFTA, DEFA, & !$OMP& ALC, ALC_TAB, TOOM, TOOI, PIXR, POUT, dim) #endif if (allocated(THEPIX)) deallocate(THEPIX) allocate(THEPIX(abc), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX" ALC=.true. DISTMTX = .false. #ifdef OPENMP goto 006 #else goto 001 #endif endif RA = INT(MAXN*2.5) ! 1) LOOK: "RA" is the number of atom(s) in one pixel ! with MAXN = 20, the '50' value seems high enough ! to ensure to catch every atom in the pixel ! this is ok providing that no funny cutoff is used ! 2) .not.LOOK: looking for tetrahedra, requires larger value: if (.not.LOOKNGB) RA = MAXN*10 if (.not.LOOKNGB .or. abc .le. 5) RA = min(RA*5, NNA) do RB=1, abc THEPIX(RB)%ATOMS=0 THEPIX(RB)%TOCHECK=.false. THEPIX(RB)%CHECKED=.false. allocate(THEPIX(RB)%ATOM_ID(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEPIX%ATOM_ID" ALC=.true. DISTMTX = .false. #ifdef OPENMP goto 006 #else goto 001 #endif endif THEPIX(RB)%IDNEIGH(:) = 0 THEPIX(RB)%ATOM_ID(:) = 0 enddo #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) do SAT=1, NS if (.not.DISTMTX) goto 007 #else if (allocated(POA)) deallocate (POA) allocate(POA(NNA,3), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="POA" ALC=.true. DISTMTX=.false. goto 001 endif do SAT=1, NS #endif if (NBX.gt.1) then #ifdef OPENMP if (allocated(POA)) deallocate (POA) allocate(POA(NNA,3), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="POA" ALC=.true. DISTMTX=.false. goto 007 endif #endif if (.not.dvtbox(SAT, NA, NNA, POA)) then DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif endif do RA=1, abc THEPIX(RA)%ATOMS=0 THEPIX(RA)%TOCHECK=.false. THEPIX(RA)%CHECKED=.false. THEPIX(RA)%IDNEIGH(:) = 0 THEPIX(RA)%ATOM_ID(:) = 0 enddo do RA=1, NNA if (.not. PBC) then do RB=1, 3 pixpos(RB) = INT((FULLPOS(RA,RB,SAT) - pmin(RB))*CUTF) if (pixpos(RB) .eq. isize(RB)) pixpos(RB) = pixpos(RB)-1 enddo else if (NBX .gt. 1) then if (NCELLS.gt.1) then XYZ = MATMUL(POA(RA,:), THE_BOX(SAT)%carttofrac/NBX) else XYZ = MATMUL(POA(RA,:), THE_BOX(1)%carttofrac/NBX) endif else if (NCELLS.gt.1) then XYZ = MATMUL(FULLPOS(RA,:,SAT), THE_BOX(SAT)%carttofrac) else XYZ = MATMUL(FULLPOS(RA,:,SAT), THE_BOX(1)%carttofrac) endif endif do RB=1, 3 pixpos(RB) = INT((XYZ(RB) - AnINT(XYZ(RB)) + 0.5d0)*isize(RB)) XYZ(RB) = XYZ(RB) - AnINT(XYZ(RB)) + 0.5d0 if (pixpos(RB) .eq. isize(RB)) pixpos(RB) = pixpos(RB)-1 enddo endif pix = pixpos(1) + pixpos(2)*isize(1) + pixpos(3)*ab + 1 if (pix.gt.abc .or. pix.le.0) then #ifdef OPENMP write (6, '("Thread(id)= ",i4,", MD step= ",i8)') OMP_GET_THREAD_NUM(), SAT #else write (6, '("MD step= ",i8)') SAT #endif if (NBX.gt.1) then write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RA, POA(RA,:) else write (6, '("at= ",i7,", pos(x)= ",f15.10,", pos(y)= ",f15.10,", pos(z)= ",f15.10)') RA, FULLPOS(RA,:,SAT) endif if (PBC) then write (6, '("at= ",i7,", cor(x)= ",f15.10,", cor(y)= ",f15.10,", cor(z)= ",f15.10)') RA, XYZ endif write (6, '("at= ",i7,", pixpos(x)= ",i4,", pixpos(y)= ",i4,", pixpos(z)= ",i4)') RA, pixpos write (6, '("at= ",i7,", pixpos= ",i10)') RA, pix PIXR=.true. POUT=pix DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif else if ((PBC .and. RA.ge.A_START .and. RA.le.A_END) .or. .not.PBC) then if (.not.THEPIX(pix)%TOCHECK) then dim(1) = -1 dim(2) = 0 dim(3) = 1 ai = pixpos(1) + 1 bi = pixpos(2) + 1 ci = pixpos(3) + 1 pid = 0 shift(:,:,:) = 0 if (PBC .and. .not.CALC_PRINGS) then call SET_SHIFT (shift, ai, bi, ci, isize(1), isize(2), isize(3)) dclo=.false. else if (ai.eq.1 .or. ai.eq.isize(1)) dclo=.true. if (bi.eq.1 .or. bi.eq.isize(2)) dclo=.true. if (ci.eq.1 .or. ci.eq.isize(3)) dclo=.true. endif init_a = 1 end_a = 3 if (isize(1) .eq. 1) then init_a = 2 end_a = 2 endif init_b = 1 end_b = 3 if (isize(2) .eq. 1) then init_b = 2 end_b = 2 endif init_c = 1 end_c = 3 if (isize(3) .eq. 1) then init_c = 2 end_c = 2 endif do cid=init_a, end_a do did=init_b, end_b do eid=init_c, end_c pid = pid+1 fid = dim(eid) * isize(1) * isize(2) THEPIX(pix)%IDNEIGH(pid) = pix + dim(cid) + dim(did) * isize(1) + fid + shift (cid,did,eid) if (dclo) then if (ai.eq.1 .and. cid.eq.1) then pid = pid - 1 else if (ai.eq.isize(1) .and. cid.eq.3) then pid = pid - 1 else if (bi.eq.1 .and. did.eq.1) then pid = pid - 1 else if (bi.eq.isize(2) .and. did.eq.3) then pid = pid - 1 else if (ci.eq.1 .and. eid.eq.1) then pid = pid - 1 else if (ci.eq.isize(3) .and. eid.eq.3) then pid = pid - 1 endif endif enddo enddo enddo THEPIX(pix)%NEIGHBOR = pid endif THEPIX(pix)%TOCHECK=.true. endif THEPIX(pix)%ATOMS = THEPIX(pix)%ATOMS + 1 THEPIX(pix)%ATOM_ID(THEPIX(pix)%ATOMS) = RA endif enddo RA = 0 RB = 0 do RC=1, abc if (THEPIX(RC)%TOCHECK) then RD = THEPIX(RC)%ATOMS if (RD .gt. 0) then do RF=1, THEPIX(RC)%NEIGHBOR RG = THEPIX(RC)%IDNEIGH(RF) if (.not.THEPIX(RG)%CHECKED) then RH = THEPIX(RG)%ATOMS if (RH .gt. 0) then if (RC .eq. RG) then RI=1 else RI=0 endif do RJ=1, RD-RI RK = THEPIX(RC)%ATOM_ID(RJ) do RM=RI*RJ+1, RH RN = THEPIX(RG)%ATOM_ID(RM) if ((RK.ge.A_START .and. RK.le.A_END) .or. (RN.ge.A_START .and. RN.le.A_END)) then RP=RK - (RK/NAN)*NAN RQ=RN - (RN/NAN)*NAN if (RP .eq. 0) RP=NAN if (RQ .eq. 0) RQ=NAN if (RP .ne. RQ) then RL=LAN(RP) RO=LAN(RQ) if (LOOKNGB) then if (.not.PBC .or. NBX.gt.1) then if (((RK.ge.A_START .and. RK.le.A_END) .and. (RN.ge.A_START .and. RN.le.A_END)) .or. .not.PBC) then IS_CLONE=.false. else IS_CLONE=.true. endif else IS_CLONE=.false. endif if (RL.ne.RO .or. .not.NOHP) then CALCMAT=.true. else CALCMAT=.false. endif if (CALCMAT) then Dij=0.0d0 if (NBX.gt.1) then do RS=1,3 Rij(RS) = POA(RK,RS) - POA(RN,RS) Dij=Dij+Rij(RS)**2 enddo else Dik=0.0d0 do RS=1,3 Rij(RS) = FULLPOS(RP,RS,SAT) - FULLPOS(RQ,RS,SAT) Dik=Dik+Rij(RS)**2 enddo if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,RP,RQ,SAT,SAT,SAT) else Dij = CALCDIJ (Rij,RP,RQ,SAT,SAT,1) endif if (Dik-Dij .gt.0.01d0) then IS_CLONE=.true. endif endif if (Dij .le. Gr_TMP(RL,RO)) then #ifdef OPENMP !$OMP ATOMIC #endif MAXBD=max(Dij,MAXBD) #ifdef OPENMP !$OMP ATOMIC #endif MINBD=min(Dij,MINBD) if (CALC_PRINGS) then RT = RK RU = RN else RT = RP RU = RQ endif CONTJ(RT,SAT)=CONTJ(RT,SAT)+1 if (CONTJ(RT,SAT) .gt. MAXN) then TOOM=.true. TOOI=RT DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif VOISJ(CONTJ(RT,SAT),RT,SAT)=RU CONTJ(RU,SAT)=CONTJ(RU,SAT)+1 if (CONTJ(RU,SAT) .gt. MAXN) then TOOM=.true. TOOI=RU DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif VOISJ(CONTJ(RU,SAT),RU,SAT)=RT if (.not.CALC_PRINGS .and. UPNGB) then if (IS_CLONE) then RB = RB + 1 VOISJ(CONTJ(RT,SAT),RT,SAT)=-RU VOISJ(CONTJ(RU,SAT),RU,SAT)=-RT else RA = RA + 1 endif endif endif endif else if (RL .eq. RO) then do RV=1, NSP if (LA_COUNT(RP,RV,SAT).eq.4 .and. CONTJ(RP,SAT).eq.4) then if (LA_COUNT(RQ,RV,SAT).eq.4 .and. CONTJ(RQ,SAT).eq.4) then RW=0 do RX=1, 4 RY = VOISJ(RX,RP,SAT) do RZ=1, CONTJ(RY,SAT) if (VOISJ(RZ,RY,SAT) .eq. RQ) RW=RW+1 enddo enddo if (RW.eq.1) then #ifdef OPENMP !$OMP ATOMIC #endif CORTA(RL,RV)=CORTA(RL,RV)+1 if (NS .gt. 1) CORNERA(RL,RV,SAT)=CORNERA(RL,RV,SAT)+1 elseif (RW.eq.2) then #ifdef OPENMP !$OMP ATOMIC #endif EDGETA(RL,RV)=EDGETA(RL,RV)+1 if (NS .gt. 1) EDGEA(RL,RV,SAT)=EDGEA(RL,RV,SAT)+1 elseif (RW.ge.3) then #ifdef OPENMP !$OMP ATOMIC #endif CORTA(RL,RV)=CORTA(RL,RV)+1 #ifdef OPENMP !$OMP ATOMIC #endif EDGETA(RL,RV)=EDGETA(RL,RV)+1 #ifdef OPENMP !$OMP ATOMIC #endif DEFTA(RL,RV)=DEFTA(RL,RV)+1 if (NS .gt. 1) then CORNERA(RL,RV,SAT)=CORNERA(RL,RV,SAT)+1 EDGEA(RL,RV,SAT)=EDGEA(RL,RV,SAT)+1 DEFA(RL,RV,SAT)=DEFA(RL,RV,SAT)+1 endif endif endif endif enddo endif endif endif endif enddo enddo endif endif enddo THEPIX(RC)%CHECKED=.true. endif endif enddo if (.not.CALC_PRINGS .and.UPNGB) then if (RA .gt. 0) then if (allocated(BA)) deallocate(BA) allocate(BA(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BA" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(BB)) deallocate(BB) allocate(BB(RA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="BB" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif endif if (RB .gt. 0) then if (allocated(CA)) deallocate(CA) allocate(CA(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CA" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(CB)) deallocate(CB) allocate(CB(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CB" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(XC)) deallocate(XC) allocate(XC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="XC" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(YC)) deallocate(YC) allocate(YC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="YC" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif if (allocated(ZC)) deallocate(ZC) allocate(ZC(RB), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ZC" ALC=.true. DISTMTX=.false. #ifdef OPENMP goto 007 #else goto 001 #endif endif endif if (RA.gt.0 .or. RB.gt.0) then RA=0 RB=0 do RC=1, NNA do RD=1, CONTJ(RC,SAT) RF = VOISJ(RD,RC,SAT) if (RF .gt. 0) then if (RF.gt.RC) then RA=RA+1 BA(RA) = RC BB(RA) = RF endif else VOISJ(RD,RC,SAT) = -RF RF=-RF if (RF.gt.RC) then RB=RB+1 CA(RB) = RC CB(RB) = RF if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,RC,RF,SAT,SAT,SAT) else Dij = CALCDIJ (Rij,RC,RF,SAT,SAT,1) endif XC(RB) = Rij(1) YC(RB) = Rij(2) ZC(RB) = Rij(3) endif endif enddo enddo endif call update_bonds (0, SAT-1, RA, BA, BB, XC, YC, ZC) call update_bonds (1, SAT-1, RB, CA, CB, XC, YC, ZC) do RC=1, NNA call update_atom_neighbors (SAT-1, RC-1, CONTJ(RC,SAT)) do RD=1, CONTJ(RC,SAT) call update_this_neighbor (SAT-1, RC-1, RD-1, VOISJ(RD,RC,SAT)) enddo enddo endif #ifdef OPENMP 007 continue #endif enddo ! En MD steps loop #ifdef OPENMP !$OMP END DO NOWAIT 006 continue if (allocated(THEPIX)) deallocate(THEPIX) !$OMP END PARALLEL if (.not.DISTMTX) goto 001 endif #endif if (UPNGB) then MAXBD = sqrt(MAXBD) MINBD = sqrt(MINBD) if (MAXBD-MINBD .lt. 0.1) then MINBD = MINBD - 0.5; MAXBD = MAXBD + 0.5; endif call recup_dmin_dmax (MINBD, MAXBD) endif DISTMTX=.true. 001 continue if (TOOM) call TOOMUCH(TOOI) if (ALC) then call show_error ("Impossible to allocate memory !"//CHAR(0), & "Function: DMTX"//CHAR(0), CHAR(9)//"Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (PIXR) call PIXOUT (POUT) if (allocated(THEPIX)) deallocate(THEPIX) if (allocated(POA)) deallocate(POA) if (allocated(BA)) deallocate(BA) if (allocated(BB)) deallocate(BB) if (allocated(CA)) deallocate(CA) if (allocated(CB)) deallocate(CB) if (allocated(XC)) deallocate(XC) if (allocated(YC)) deallocate(YC) if (allocated(ZC)) deallocate(ZC) CONTAINS END FUNCTION SUBROUTINE PIXOUT (PIX) IMPLICIT NONE INTEGER, INTENT(IN) :: PIX CHARACTER (LEN=15) :: IDPIX call CHARINT(IDPIX, PIX) call show_error ("Pixel size error !"//CHAR(0), & CHAR(9)//"Pixel out of bound(s): "//IDPIX(2:LEN_TRIM(IDPIX))//CHAR(0), & "Function: DMTX"//CHAR(0)) END SUBROUTINE SUBROUTINE TOOMUCH(ATI) IMPLICIT NONE INTEGER, INTENT(IN) :: ATI CHARACTER (LEN=15) :: IDATI call CHARINT(IDATI, ATI) call show_error ("Too much neighbors for atom "//IDATI(2:LEN_TRIM(IDATI))//" (>20)"//CHAR(0), & "Please check:"//ACHAR(10)//CHAR(9)//" - The lattice parameters"//ACHAR(10) & //CHAR(9)//" - The bond cutoff(s)"//ACHAR(10)//CHAR(9)//" - The atomic coordinates"//CHAR(0), & "Function: DMTX"//CHAR(0)) END SUBROUTINE INTEGER (KIND=c_int) FUNCTION rundmtx (PRINGS, VNOHP, VUP) BIND (C,NAME='rundmtx_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: PRINGS, VNOHP, VUP LOGICAL :: DMTXOK=.false. LOGICAL :: UPNG INTERFACE LOGICAL FUNCTION DISTMTX(NAN, LAN, LOOKNGB, UPNGB) INTEGER, INTENT(IN) :: NAN INTEGER, DIMENSION(NAN), INTENT(IN) :: LAN LOGICAL, INTENT(IN) :: LOOKNGB, UPNGB END FUNCTION END INTERFACE CALC_PRINGS=.false. if (PRINGS .eq. 1) CALC_PRINGS=.true. NOHP=.false. if (VNOHP .eq. 1) NOHP=.true. UPNG=.false. if (VUP .eq. 1) UPNG=.true. DMTXOK = DISTMTX(NA, LOT, .true., UPNG) CALC_PRINGS=.false. if (.not. DMTXOK) then if (allocated(VOISJ)) deallocate(VOISJ) if (allocated(CONTJ)) deallocate(CONTJ) rundmtx=0 goto 001 endif rundmtx=1 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/dvtb.F90000066400000000000000000000036371457665371200171670ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file dvtb.F90 !! @short Model expansion for algorithmic purposes !! @author Sébastien Le Roux LOGICAL FUNCTION dvtbox(ST, NAS, NAT, NPOS) ! ! Create a superlattice ! Size of the superlattice will be NBX*NBX*NBX with NBX >= 3 ! NBX is set in dmtx.f90 ! USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: ST, NAS, NAT DOUBLE PRECISION, DIMENSION(NAT,3), INTENT(INOUT) :: NPOS DOUBLE PRECISION, DIMENSION(3) :: DVT INTEGER :: iid, jid, kid, lid, mid, nid iid=0 do jid=-NBX+(NBX/2)+1, NBX-(NBX/2)-1, 1 do kid=-NBX+(NBX/2)+1, NBX-(NBX/2)-1, 1 do lid=-NBX+(NBX/2)+1, NBX-(NBX/2)-1, 1 if (NCELLS .gt. 1) then mid = ST else mid = 1 endif DVT(1)=jid*THE_BOX(mid)%lvect(1,1)+kid*THE_BOX(mid)%lvect(2,1)+lid*THE_BOX(mid)%lvect(3,1) DVT(2)=jid*THE_BOX(mid)%lvect(1,2)+kid*THE_BOX(mid)%lvect(2,2)+lid*THE_BOX(mid)%lvect(3,2) DVT(3)=jid*THE_BOX(mid)%lvect(1,3)+kid*THE_BOX(mid)%lvect(2,3)+lid*THE_BOX(mid)%lvect(3,3) do mid=1, NAS iid = iid + 1 do nid=1, 3 NPOS(iid,nid)=FULLPOS(mid,nid,ST)+DVT(nid) enddo enddo enddo enddo enddo dvtbox=.true. END FUNCTION Atomes-GNU-1.1.14/src/fortran/escs.F90000066400000000000000000000045341457665371200171620ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file escs.F90 !! @short Edge and Corner sharing tetrahedra analysis !! @author Sébastien Le Roux LOGICAL FUNCTION EESCS () USE PARAMETERS IMPLICIT NONE LOGICAL :: DMTXOK INTERFACE LOGICAL FUNCTION ALLOCEDCO (alloc) LOGICAL, INTENT(IN) :: alloc END FUNCTION LOGICAL FUNCTION DISTMTX(NAN, LAN, LOOKNGB, UPNGB, MOLVOL) INTEGER, INTENT(IN) :: NAN INTEGER, DIMENSION(NAN), INTENT(IN) :: LAN LOGICAL, INTENT(IN) :: LOOKNGB, UPNGB, MOLVOL END FUNCTION END INTERFACE if (.not. ALLOCEDCO (.true.)) then EESCS=.false. goto 001 endif CALC_PRINGS=.false. NOHP=.false. ! Modify DISTMX to evaluate ES/CS DMTXOK = DISTMTX(NA, LOT, .false., .false., .false.) if (.not. DMTXOK) then EESCS=.false. goto 001 endif do i=1, NS do j=1, NA do o=1, NSP if (CONTJ(j,i).eq.4 .and. (LA_COUNT(j,o,i) .eq. 4)) then if(NS .gt. 1) TDSA(LOT(j),o,i)=TDSA(LOT(j),o,i)+1 TDA(LOT(j),o) = TDA(LOT(j),o)+1 endif enddo enddo enddo do j=1, NSP do o=1, NSP do i=1, NS MTABL(i)=EDGEA(j,o,i) enddo z=0.0d0 call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, ETYPEA(j,o)) do i=1, NS MTABL(i)=CORNERA(j,o,i) enddo z=0.0d0 call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, CTYPEA(j,o)) do i=1, NS MTABL(i)=DEFA(j,o,i) enddo z=0.0d0 call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, DETYPEA(j,o)) do i=1, NS MTABL(i)=TDSA(j,o,i) enddo call MOYENNE(MTABL, NS, z) call ECT_TYPE(z, MTABL, NS, ETDA(j,o)) enddo enddo 001 continue EESCS=.true. END FUNCTION Atomes-GNU-1.1.14/src/fortran/fzbt.F90000066400000000000000000000077741457665371200172030ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file fzbt.F90 !! @short Partial structure factors: Faber-Ziman and Bathia-Thornton analysis !! @author Sébastien Le Roux LOGICAL FUNCTION FZBT (NDQ) ! ! Compute Faber-Ziman and Bathia-Thornton S(q) from Ashcroft S(q) ! USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NDQ DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Xr if (NSP .eq. 2) then if (allocated(BTij)) deallocate(BTij) allocate(BTij(NDQ,4), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: FZBT"//CHAR(0), "Table: BTij"//CHAR(0)) FZBT=.false. goto 001 endif BTij(:,:)=0.0d0 endif if (allocated(FZSij)) deallocate(FZSij) allocate(FZSij(NDQ,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: FZBT"//CHAR(0), "Table: FZSij"//CHAR(0)) FZBT=.false. goto 001 endif FZSij(:,:,:)=0.0d0 if (allocated(Xr)) deallocate(Xr) allocate(Xr(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: FZBT"//CHAR(0), "Table: Xr"//CHAR(0)) FZBT=.false. goto 001 endif do o=1, NSP Xr(o)=Xi(o) enddo do m=1, NDQ do n=1, NSP do o=1, NSP if (o .eq. n) then FZSij(m,n,o) = 1 + (Sij(m,n,o)-1)/Xr(n) if (NSP .eq. 2) then BTij(m,1) = BTij(m,1) + Xr(o)*Xr(o)*FZSij(m,n,o) BTij(m,3) = BTij(m,3) + FZSij(m,n,o) endif else FZSij(m,n,o) = Sij(m,n,o)/sqrt(Xr(n)*Xr(o)) + 1 if (NSP .eq. 2) then BTij(m,1) = BTij(m,1) + Xr(o)*Xr(n)*FZSij(m,n,o) BTij(m,3) = BTij(m,3) - FZSij(m,n,o) endif endif enddo enddo if (NSP .eq. 2) then if (NBSPBS(1) .le. NBSPBS(2)) then o=1 n=2 else o=2 n=1 endif BTij(m,2) = Xr(o)*FZSij(m,o,o) - Xr(n)*FZSij(m,n,n) BTij(m,2) = BTij(m,2)+FZSij(m,o,n)*(Xr(n)-Xr(o)) BTij(m,2) = BTij(m,2)*Xr(n)*Xr(o) BTij(m,3) = (BTij(m,3)*Xr(1)*Xr(2) +1)*Xr(1)*Xr(2) BTij(m,4) = BTij(m,3)/(Xr(1)*Xr(2)) endif enddo if (allocated(Xr)) deallocate(Xr) FZBT=.true. 001 continue END FUNCTION LOGICAL FUNCTION GRBT(GrToBT, NDTR) ! ! Compute Bathia-Thornton g(r) ! USE PARAMETERS INTEGER, INTENT(IN) :: NDTR DOUBLE PRECISION, DIMENSION(NDTR,NSP,NSP), INTENT(IN) :: GrToBT if (allocated(BTij)) deallocate(BTij) allocate(BTij(NDTR,3), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: GRBT"//CHAR(0), "Table: BTij"//CHAR(0)) GRBT=.false. goto 001 endif BTij(:,:)=0.0d0 do m=1, NDTR do n=1, NSP do o=1, NSP if (o .eq. n) then BTij(m,1) = BTij(m,1) + Xi(o)*Xi(o)*GrToBT(m,n,o) BTij(m,3) = BTij(m,3) + GrToBT(m,n,o) else BTij(m,1) = BTij(m,1) + Xi(o)*Xi(n)*GrToBT(m,n,o) BTij(m,3) = BTij(m,3) - GrToBT(m,n,o) endif enddo enddo if (NBSPBS(1) .le. NBSPBS(2)) then o=1 n=2 else o=2 n=1 endif BTij(m,2) = Xi(o)*GrToBT(m,o,o) - Xi(n)*GrToBT(m,n,n) BTij(m,2) = BTij(m,2)+GrToBT(m,o,n)*(Xi(n)-Xi(o)) BTij(m,3) = BTij(m,3)*Xi(1)*Xi(2) ! BTij(m,4) = BTij(m,3)/(Xi(1)*Xi(2)) ! BTij(m,5) = BTij(m,2)/(Xi(n)/ ) enddo GRBT=.true. 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/gr.F90000066400000000000000000000361771457665371200166450ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file gr.F90 !! @short g(r) analysis: direct real space calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION g_of_r (NDR, DTR, FCR) BIND (C,NAME='g_of_r_') ! Radial Pair Distribution function ! ! -2 V ! g(r)= rho < Sum Sum d(ri)d(rj-r) > = -- < Sum Sum d(r-rij) > ! i j!i N² i j!i ! ! ! ! ! 1 rho(b) rho(b) ! g (r)= ------------ Sum Sum ---------- = Sum Sum ------------------ ! ab 4*PI*Delat(r) a b!a d(ab)²*N(a) a b!a Vshell(d(ab))*N(a) ! USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NDR, FCR REAL (KIND=c_double), INTENT(IN) :: DTR DOUBLE PRECISION :: Hcap1, Hcap2, Vcap, Dgr DOUBLE PRECISION :: NORM_FACT, GRLIM DOUBLE PRECISION :: SUML, XSUML LOGICAL :: IS_CRYSTAL=.false. #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE LOGICAL FUNCTION ALLOCGR(NDR) INTEGER, INTENT(IN) :: NDR END FUNCTION LOGICAL FUNCTION GRBT(GrToBT, NDTR) USE PARAMETERS INTEGER, INTENT(IN) :: NDTR DOUBLE PRECISION, DIMENSION(NDTR,NSP,NSP), INTENT(IN) :: GrToBT END FUNCTION DOUBLE PRECISION FUNCTION CALCDIJ (R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION END INTERFACE if (.not. allocgr(NDR)) then g_of_r = 0 goto 001 endif do i=1, NDR+1 SHELL_VOL(i) = 0.0d0 SHELL_VOL(i) = 4.0d0*PI*(((i-1)*DTR+DTR)**3 - ((i-1)*DTR)**3)/3 ! To take into account the atoms between a/2 and a srqt(3)/2 ! We need the small volume they can be found in. if (OVERALL_CUBIC .and. i*DTR.gt.MBOX) then Hcap1=i*DTR-MBOX if ((i-1)*DTR .le. MBOX) then Hcap2=0.0d0 else Hcap2=(i-1)*DTR-MBOX endif Vcap=Hcap1**2*(3*i*DTR - Hcap1) - Hcap2**2*(3*(i-1)*DTR - Hcap2) Vcap=Vcap*PI*2 SHELL_VOL(i)=SHELL_VOL(i)-Vcap endif enddo GRLIM = NDR*DTR GRLIM = GRLIM*GRLIM #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. #endif if (IS_CRYSTAL) then ! To write the case of highly distoreded crystal else #ifdef OPENMP if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA ! OpemMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(Dgr, Dij, Rij, GR_INDEX, NORM_FACT, i, j, k, l, m, n) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, NBSPBS, SHELL_VOL, DTR, MEANVOL, GRLIM, Gij, Dn, NSP, NDR) !$OMP DO SCHEDULE(STATIC,NA-1/NUMTH) do i=1, NA-1 do k=1, NS do j=i+1, NA if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,i,j,k,k,k) else Dij = CALCDIJ (Rij,i,j,k,k,1) endif if (Dij <= GRLIM) then l=LOT(i) m=LOT(j) Dgr = sqrt(Dij) if (l .eq. m) then n = NBSPBS(l)-1 else n = NBSPBS(l) endif GR_INDEX = int(Dgr/DTR)+1 NORM_FACT = 1.0d0/(SHELL_VOL(GR_INDEX)*dble(n)) !$OMP ATOMIC Gij(GR_INDEX,l,m,k) = Gij(GR_INDEX,l,m,k) + NORM_FACT/(dble(NBSPBS(m))/MEANVOL) !$OMP ATOMIC Dn(GR_INDEX,l,m,k) = Dn(GR_INDEX,l,m,k) + 1.0d0 endif enddo enddo enddo !$OMP END DO NOWAIT !$OMP END PARALLEL else ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(Dgr, Dij, Rij, GR_INDEX, NORM_FACT, i, j, k, l, m, n) & !$OMP& SHARED(NUMTH, NS, NA, NCELLS, LOT, NBSPBS, SHELL_VOL, DTR, MEANVOL, GRLIM, Gij, Dn, NSP, NDR) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do k=1, NS do i=1, NA-1 do j=i+1, NA if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij,i,j,k,k,k) else Dij = CALCDIJ (Rij,i,j,k,k,1) endif if (Dij <= GRLIM) then l=LOT(i) m=LOT(j) Dgr = sqrt(Dij) if (l .eq. m) then n = NBSPBS(l)-1 else n = NBSPBS(l) endif GR_INDEX = int(Dgr/DTR)+1 NORM_FACT = 1.0d0/(SHELL_VOL(GR_INDEX)*dble(n)) #ifdef OPENMP !$OMP ATOMIC #endif Gij(GR_INDEX,l,m,k) = Gij(GR_INDEX,l,m,k) + NORM_FACT/(dble(NBSPBS(m))/MEANVOL) #ifdef OPENMP !$OMP ATOMIC #endif Dn(GR_INDEX,l,m,k) = Dn(GR_INDEX,l,m,k) + 1.0d0 endif enddo enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif endif do i=1, NDR do l=1, NS do j=1, NSP Dn(i,j,j,l) = 2.0d0*Dn(i,j,j,l)/dble(NBSPBS(j)-1) enddo do j=1, NSP-1 do k=j+1, NSP Dn(i,j,k,l) = Dn(i,j,k,l)+Dn(i,k,j,l) Dn(i,k,j,l) = Dn(i,j,k,l) Dn(i,j,k,l) = Dn(i,j,k,l)/dble(NBSPBS(j)) Dn(i,k,j,l) = Dn(i,k,j,l)/dble(NBSPBS(k)) enddo enddo enddo enddo do i=2, NDR do l=1, NS do j=1, NSP do k=1, NSP Dn(i,j,k,l) = Dn(i-1,j,k,l) + Dn(i,j,k,l) enddo enddo enddo enddo do i=1, NSP do j=1, NSP do k=1, NDR do l=1, NS Dn_ij(k,i,j) = Dn_ij(k,i,j) + Dn(k,i,j,l) Gr_ij(k,i,j) = Gr_ij(k,i,j) + Gij(k,i,j,l) enddo Gr_ij(k,i,j) = Gr_ij(k,i,j)/dble(NS) Dn_ij(k,i,j) = Dn_ij(k,i,j)/dble(NS) enddo enddo enddo do k=1, NDR do l=1, NSP Gr_ij(k,l,l) = 2.0d0*Gr_ij(k,l,l) enddo do j=1, NSP-1 do i=j+1, NSP Gr_ij(k,i,j) = Gr_ij(k,i,j) + Gr_ij(k,j,i) Gr_ij(k,j,i) = Gr_ij(k,i,j) enddo enddo enddo if (allocated(Dn)) deallocate(Dn) if (allocated(Gij)) deallocate(Gij) l = 16 do i=1, NSP do j=1, NSP do k=1, NDR GRTAB(k)=Gr_ij(k,i,j) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR Ggr_ij(k,i,j) = (Gr_ij(k,i,j)-1.0)*4.0*PI*(NA/MEANVOL)*(k-0.5)*DTR GRTAB(k) = Ggr_ij(k,i,j) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR GRTAB(k)=Dn_ij(k,i,j) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+1 enddo enddo if (NSP .eq. 2) then if (GRBT(Gr_ij, NDR)) then do k=1, NDR GRTAB(k)=BTij(k,1) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR GRTAB(k)=BTij(k,2) enddo call save_curve (NDR, GRTAB, l, IDGR) l = l+2 do k=1, NDR GRTAB(k)=BTij(k,3) enddo call save_curve (NDR, GRTAB, l, IDGR) endif if (allocated(BTij)) deallocate(BTij) endif SUML=0.0d0 XSUML=0.0d0 do k=1, NSP SUML=SUML+NSCATTL(k)*Xi(k) XSUML=XSUML+XSCATTL(k)*Xi(k) enddo SUML=SUML*SUML XSUML=XSUML*XSUML ! Attention bi(NSCATTL(i) dans le code) en fm et bi² en barn = fm*fm*1e-2 = 1e-24cm² do i=1, NDR do j=1, NSP do k=1, NSP GrTOT(i) = GrTOT(i) + Xi(j)*Xi(k)*NSCATTL(j)*NSCATTL(k)*Gr_ij(i,j,k) GgrTOT(i) = GgrTOT(i) + Xi(j)*Xi(k)*NSCATTL(j)*NSCATTL(k)*Ggr_ij(i,j,k) XGrTOT(i) = XGrTOT(i) + Xi(j)*Xi(k)*XSCATTL(j)*XSCATTL(k)*Gr_ij(i,j,k) XGgrTOT(i) = XGgrTOT(i) + Xi(j)*Xi(k)*XSCATTL(j)*XSCATTL(k)*Ggr_ij(i,j,k) enddo enddo GrTOT(i) = GrTOT(i)/SUML Drn(i) = GgrTOT(i) Trn(i) = Drn(i) + 4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR*SUML GgrTOT(i) = GgrTOT(i)/SUML XGrTOT(i) = XGrTOT(i)/XSUML Drx(i) = XGgrTOT(i) Trx(i) = Drx(i) + 4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR*XSUML XGgrTOT(i) = XGgrTOT(i)/XSUML enddo do i=1, NDR GRTAB(i) = GrTOT(i) enddo call save_curve (NDR, GRTAB, 0, IDGR) do i=1, NDR GRTAB(i) = GgrTOT(i) enddo call save_curve (NDR, GRTAB, 2, IDGR) do i=1, NDR GRTAB(i) = Drn(i) enddo call save_curve (NDR, GRTAB, 4, IDGR) do i=1, NDR GRTAB(i) = Trn(i) enddo call save_curve (NDR, GRTAB, 6, IDGR) do i=1, NDR GRTAB(i) = XGrTOT(i) enddo call save_curve (NDR, GRTAB, 8, IDGR) do i=1, NDR GRTAB(i) = XGgrTOT(i) enddo call save_curve (NDR, GRTAB, 10, IDGR) do i=1, NDR GRTAB(i) = Drx(i) enddo call save_curve (NDR, GRTAB, 12, IDGR) do i=1, NDR GRTAB(i) = Trx(i) enddo call save_curve (NDR, GRTAB, 14, IDGR) if (FCR .eq. 1) call FITCUTOFFS g_of_r=1 001 continue if (allocated(Dn)) deallocate (Dn) if (allocated(Gij)) deallocate (Gij) if (allocated(Dn_ij)) deallocate (Dn_ij) if (allocated(GRTAB)) deallocate (GRTAB) if (allocated(GgrTOT)) deallocate (GgrTOT) if (allocated(XGgrTOT)) deallocate (XGgrTOT) if (allocated(Trn)) deallocate (Trn) if (allocated(Trx)) deallocate (Trx) if (allocated(Drn)) deallocate (Drn) if (allocated(Drx)) deallocate (Drx) if (allocated(Ggr_ij)) deallocate (Ggr_ij) if (allocated(Gr_ij)) deallocate (Gr_ij) if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) CONTAINS SUBROUTINE FITCUTOFFS INTERFACE INTEGER FUNCTION CUTFIT (TABTOFIT, NPOINTS) INTEGER, INTENT(IN) :: NPOINTS DOUBLE PRECISION, DIMENSION(NPOINTS), INTENT(IN) :: TABTOFIT END FUNCTION END INTERFACE if (allocated(GFFT)) deallocate(GFFT) allocate(GFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: FITCUTOFFS"//CHAR(0), "Table: GFFT"//CHAR(0)) endif do l=1, NSP do j=1, NSP do k=1, NDR GFFT(k)=Gr_ij(k,l,j) enddo Gr_CUT(l,j) = (CUTFIT(GFFT, NDR) - 0.5) * DTR enddo enddo Gr_cutoff = (CUTFIT(GrTOT, NDR) - 0.5) * DTR call sendcutoffs(NSP, Gr_cutoff, Gr_CUT) if (allocated(GFFT)) deallocate(GFFT) END SUBROUTINE END FUNCTION INTEGER FUNCTION CUTFIT (TABTOFIT, NPOINTS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NPOINTS DOUBLE PRECISION, DIMENSION(NPOINTS), INTENT(IN) :: TABTOFIT o = 1 p = 0 do while (p .eq. 0) r=INT(o+1+ANint(5.0*dble(NPOINTS)/dble(100*NS))) if (o.eq.NPOINTS .or. r.gt.NPOINTS) exit if (TABTOFIT(o) .le. TABTOFIT(o+1)) then o=o+1 else if (TABTOFIT(o) .le. TABTOFIT(r)) then o=o+1 else if (TABTOFIT(o) .le. 0.05) then o=o+1 else p=1 endif enddo p = 0 do while (p .eq. 0) r=INT(o+1+ANint(5.0*dble(NPOINTS)/dble(100*NS))) if (o.eq.NPOINTS .or. r.gt.NPOINTS) exit if (TABTOFIT(o) .le. TABTOFIT(o+1)) then o=o+1 else if (TABTOFIT(o) .le. TABTOFIT(r)) then o=o+1 else p=1 endif enddo CUTFIT = o END FUNCTION LOGICAL FUNCTION ALLOCGR (NDR) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NDR ALLOCGR=.true. if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) allocate(SHELL_VOL(NDR+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: SHELL_VOL"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Gij)) deallocate(Gij) allocate(Gij(NDR+1,NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Gij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Dn)) deallocate(Dn) allocate(Dn(NDR+1,NSP,NSP,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Dn"//CHAR(0)) ALLOCGR=.false. goto 001 endif Gij(:,:,:,:)=0.0d0 Dn(:,:,:,:)=0.0d0 if (allocated(XGrTOT)) deallocate(XGrTOT) allocate(XGrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: XGrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(GrTOT)) deallocate(GrTOT) allocate(GrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: GrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Gr_ij)) deallocate(Gr_ij) allocate(Gr_ij(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Gr_ij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Dn_ij)) deallocate(Dn_ij) allocate(Dn_ij(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Dn_ij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(GRTAB)) deallocate(GRTAB) allocate(GRTAB(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: GRTAB"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Ggr_ij)) deallocate(Ggr_ij) allocate(Ggr_ij(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Ggr_ij"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(GgrTOT)) deallocate(GrTOT) allocate(GgrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: GgrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(XGgrTOT)) deallocate(XGgrTOT) allocate(XGgrTOT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: XGgrTOT"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Trn)) deallocate(Trn) allocate(Trn(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Trn"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Drn)) deallocate(Drn) allocate(Drn(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Drn"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Trx)) deallocate(Trx) allocate(Trx(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Trx"//CHAR(0)) ALLOCGR=.false. goto 001 endif if (allocated(Drx)) deallocate(Drx) allocate(Drx(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCGR"//CHAR(0), "Table: Drx"//CHAR(0)) ALLOCGR=.false. goto 001 endif GrTOT(:)=0.0d0 XGrTOT(:)=0.0d0 GRTAB(:)=0.0d0 GgrTOT(:)=0.0d0 XGgrTOT(:)=0.0d0 Trn(:)=0.0d0 Trx(:)=0.0d0 Drn(:)=0.0d0 Drx(:)=0.0d0 Gr_ij(:,:,:)=0.0d0 Dn_ij(:,:,:)=0.0d0 Ggr_ij(:,:,:)=0.0d0 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/grfft.F90000066400000000000000000000132501457665371200173300ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file grfft.F90 !! @short g(r) analysis: Fourier transform calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION g_of_r_fft (NDR, DTR, MMX) BIND (c,name='g_of_r_fft_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NDR REAL (KIND=c_double), INTENT(IN) :: DTR, MMX INTERFACE INTEGER FUNCTION recup_data (i, j) INTEGER, INTENT(IN) :: i, j END FUNCTION LOGICAL FUNCTION GRBT(GrToBT, NDTR) USE PARAMETERS INTEGER, INTENT(IN) :: NDTR DOUBLE PRECISION, DIMENSION(NDTR,NSP,NSP), INTENT(IN) :: GrToBT END FUNCTION END INTERFACE qvmax = MMX NUMBER_OF_I = NDR if (allocated(GFFT)) deallocate(GFFT) allocate(GFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: GFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif if (allocated(DFFT)) deallocate(DFFT) allocate(DFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: DFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif if (allocated(TDFFT)) deallocate(TDFFT) allocate(TDFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: TDFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif if (allocated(R_PFFT)) deallocate(R_PFFT) allocate(R_PFFT(NDR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: R_PFFT"//CHAR(0)) g_of_r_fft=0 goto 001 endif do i=1, NDR R_PFFT(i)= 0.0d0 R_PFFT(i)= 1.0 / (2.0*PI*PI*NA/MEANVOL*(i-0.5)*DTR) enddo j=0 l=0 if (recup_data (j, IDSK) .ne. 1) then g_of_r_fft=0 goto 001 endif j=4 if (recup_data (j, IDSK) .ne. 1) then g_of_r_fft=0 goto 001 endif if (NSP .eq. 2) then if (allocated(GQBT)) deallocate(GQBT) allocate(GQBT(NDR,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: g_of_r_fft"//CHAR(0), "Table: GQBT"//CHAR(0)) g_of_r_fft=0 goto 001 endif endif j=j+NSP*NSP*2+2 do n=1, NSP do m=1, NSP j=j+2 if (recup_data (j, IDSK) .ne. 1) then g_of_r_fft=0 goto 001 endif enddo enddo if (NSP .eq. 2) then if (GRBT (GQBT, NDR)) then do k=1, NDR GFFT(k)=BTij(k,1) enddo call save_curve (NDR, GFFT, l, IDGRFFT) l = l+2 do k=1, NDR GFFT(k)=BTij(k,2) enddo call save_curve (NDR, GFFT, l, IDGRFFT) l = l+2 do k=1, NDR GFFT(k)=BTij(k,3) enddo call save_curve (NDR, GFFT, l, IDGRFFT) endif if (allocated(BTij)) deallocate(BTij) endif g_of_r_fft=1 001 continue if (allocated(GFFT)) deallocate(GFFT) if (allocated(DFFT)) deallocate(DFFT) if (allocated(TDFFT)) deallocate(TDFFT) if (allocated(R_PFFT)) deallocate(R_PFFT) if (allocated(GQBT)) deallocate(GQBT) END FUNCTION INTEGER FUNCTION send_sq (IC, VAL, DTR, KDATA, SDATA) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: IC, VAL DOUBLE PRECISION, INTENT(IN) :: DTR DOUBLE PRECISION, DIMENSION(VAL), INTENT(IN) :: KDATA, SDATA DOUBLE PRECISION :: SUML j = IC call FFT_TO_GR (VAL, KDATA, SDATA, GFFT) call save_curve (NUMBER_OF_I, GFFT, l, IDGRFFT) l=l+2 if (j.gt.4) then if (nsp .eq. 2) then do i=1, NUMBER_OF_I GQBT(i,n,m) = GFFT(i) enddo endif do i=1, NUMBER_OF_I DFFT(i)= 4.0*PI*(((i-0.5)*DTR)**2)*DTR*GFFT(i)/MEANVOL if (i .gt. 1) DFFT(i)= DFFT(i) + DFFT(i-1) enddo if (n .eq. m) then k = (NBSPBS(n)-1) else k = NBSPBS(m) endif do i=1, NUMBER_OF_I DFFT(i)= DFFT(i)*k enddo do i=1, NUMBER_OF_I GFFT(i)=(GFFT(i)-1.0)*4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR enddo call save_curve (NUMBER_OF_I, GFFT, l, IDGRFFT) l=l+2 call save_curve (NUMBER_OF_I, DFFT, l, IDGRFFT) l=l+1 else SUML=0.0d0 do k=1, NSP if (j .eq. 0) then SUML=SUML+NSCATTL(k)*Xi(k) else SUML=SUML+XSCATTL(k)*Xi(k) endif enddo SUML=SUML*SUML do i=1, NUMBER_OF_I GFFT(i)=(GFFT(i)-1.0)*4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR enddo call save_curve (NUMBER_OF_I, GFFT, l, IDGRFFT) l=l+2 do i=1, NUMBER_OF_I TDFFT(i) = GFFT(i)*SUML enddo call save_curve (NUMBER_OF_I, TDFFT, l, IDGRFFT) l=l+2 do i=1, NUMBER_OF_I TDFFT(i) = TDFFT(i) + 4.0*PI*(NA/MEANVOL)*(i-0.5)*DTR*SUML enddo call save_curve (NUMBER_OF_I, TDFFT, l, IDGRFFT) l=l+2 endif send_sq = 1 CONTAINS SUBROUTINE FFT_TO_GR (LTAB, KTAB, TAB, RTAB) USE PARAMETERS INTEGER, INTENT(IN) :: LTAB DOUBLE PRECISION, DIMENSION(LTAB), INTENT(IN) :: KTAB, TAB DOUBLE PRECISION, DIMENSION(NUMBER_OF_I), INTENT(INOUT) :: RTAB do i=1, NUMBER_OF_I RTAB(i)= 0.0d0 do k=1, LTAB-1 Phi = KTAB(k)*(i-0.5)*DTR RTAB(i) = RTAB(i) + KTAB(k)*(TAB(k) - 1.0)*sin(Phi)*(KTAB(k+1) - KTAB(k)) enddo RTAB(i) = 1.0 + R_PFFT(i) * RTAB(i) enddo END SUBROUTINE END FUNCTION Atomes-GNU-1.1.14/src/fortran/initchains.F90000066400000000000000000000101331457665371200203460ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file initchains.F90 !! @short Initialize chain statistics !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION initchains (VTLT, VAAA, VACA, VHOMO, V121, VTAILLC, VNUMA) BIND (C,NAME='initchains_') ! ! Initialization of the chain statistics ! The key variable is NUMA see in the following lines ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: VTLT, VAAA, VACA, VHOMO, V121, VTAILLC, VNUMA INTERFACE INTEGER FUNCTION CHAINS() END FUNCTION END INTERFACE if (VTLT .eq. 0) then TLT=NSP+1 else TLT=VTLT endif NUMA=VNUMA NTLT=NBSPBS(TLT) TAILLC=VTAILLC AAAA=.false. ACAC=.false. NO_HOMO=.false. if (NSP.gt. 1) then if (VAAA == 1) AAAA=.true. if (VACA == 1) ACAC=.true. if (VHOMO == 1) NO_HOMO=.true. endif ISOLATED=.false. if (V121 == 1) ISOLATED=.true. #ifdef DEBUG write (6, '("CHAINS:: AAAA= ",l1,", ACAC= ",l1,", NO_HOMO= ",l1,", ISOLATED= ",l1)') AAAA, ACAC, NO_HOMO, ISOLATED #endif TBR=.false. ALC=.false. initchains = CHAINS() END FUNCTION INTEGER FUNCTION RECHAINS() USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION :: TAMP, ETAMP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: CTAB allocate(CTAB(TAILLC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: CTAB"//CHAR(0)) RECHAINS=0 goto 001 endif if (allocated(RED)) deallocate(RED) allocate(RED(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: RED"//CHAR(0)) RECHAINS=0 goto 001 endif if (allocated(MOYRED)) deallocate(MOYRED) allocate(MOYRED(TAILLC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: MOYRED"//CHAR(0)) RECHAINS=0 goto 001 endif if (allocated(ECTYPE)) deallocate(ECTYPE) allocate(ECTYPE(TAILLC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: ECTYPE"//CHAR(0)) RECHAINS=0 goto 001 endif RED(:)=0.0d0 do l=1, TAILLC do i=1, NS RED(i)=dble(NRING(l,i))/NTLT enddo if (NS .gt. 1) then MOYRED(l)=0.0d0 ECTYPE(l)=0.0d0 call MOYENNE(RED, NS, MOYRED(l)) call ECT_TYPE(MOYRED(l), RED, NS, ECTYPE(l)) else MOYRED(l)=RED(1) endif enddo TAMP=0.0 do i=1, TAILLC CTAB(i)=MOYRED(i) TAMP = TAMP + CTAB(i) enddo if (TAMP .eq. 0.0) then RECHAINS=1 goto 001 endif l=0 if (TLT .ne. NSP+1) l = l + TLT call save_curve (TAILLC, CTAB, l, IDCH) if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) allocate(TOTPSTEP(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECHAINS"//CHAR(0), "Table: TOTPSTEP"//CHAR(0)) RECHAINS=0 goto 001 endif do i=1, NS TOTPSTEP(i)=0 do j=1, TAILLC TOTPSTEP(i)=TOTPSTEP(i)+dble(NRING(j,i)) enddo enddo TAMP=0.0d0 ETAMP=0.0d0 call MOYENNE(TOTPSTEP, NS, TAMP) call ECT_TYPE(TAMP, TOTPSTEP, NS, ETAMP) call save_chains_data (TAILLC, ECTYPE, TAMP, ETAMP) RECHAINS=1 001 continue if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) if (allocated(MOYRED)) deallocate(MOYRED) if (allocated(RED)) deallocate(RED) if (allocated(CTAB)) deallocate(CTAB) END FUNCTION Atomes-GNU-1.1.14/src/fortran/initrings.F90000066400000000000000000000115171457665371200202320ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file initrings.F90 !! @short Initialize ring statistics !! @author Sébastien Le Roux LOGICAL FUNCTION ALLOCRINGS() ! ! Memory allocation for ring statistics ! USE PARAMETERS IMPLICIT NONE if(allocated(NRING)) deallocate(NRING) allocate(NRING(TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: NRING"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif if (allocated(PNA)) deallocate(PNA) allocate(PNA(TAILLR,TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: PNA"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif if (allocated(MAXPNA)) deallocate(MAXPNA) allocate(MAXPNA(TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: MAXPNA"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif if (allocated(MINPNA)) deallocate(MINPNA) allocate(MINPNA(TAILLR,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: MINPNA"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif !if (FACTATRING) then ! if (allocated(ATRING)) deallocate(ATRING) ! allocate(ATRING(TAILLD,NTLT,NS), STAT=ERR) ! if (ERR .ne. 0) then ! ! endif ! ATRING(:,:,:)=0 !endif if (DOAMPAT) then if (allocated(AMPAT)) deallocate(AMPAT) allocate(AMPAT(NTLT,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: ALLOCRINGS"//CHAR(0), "Table: AMPAT"//CHAR(0)) ALLOCRINGS=.false. goto 001 endif AMPAT(:,:)=0 endif !if (FACTATPNA) then ! if (allocated(ATPNA)) deallocate(ATPNA) ! allocate(ATPNA(TAILLD,NTLT,NS), STAT=ERR) ! if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ALLOCRINGS"//CHAR(0), "Table: ATPNA"//CHAR(0)) ! ALLOCRINGS=.false. ! goto 001 ! endif ! ATPNA(:,:,:)=0 !endif ! End of allocation / Initialisation MAXPNA(:,:)=0 MINPNA(:,:)=0 PNA(:,:,:)=0 NRING(:,:)=0 ALLOCRINGS=.true. 001 continue END FUNCTION INTEGER (KIND=c_int) FUNCTION initrings (VRINGS, VTAILLD, VTLT, VNUMA, VABAB, VHOMO) BIND (C,NAME='initrings_') ! ! Initialization of the ring statistics ! The key variable is NUMA see in the following lines ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: VRINGS, VTAILLD, VTLT, VNUMA, VABAB, VHOMO INTERFACE LOGICAL FUNCTION ALLOCRINGS() END FUNCTION INTEGER FUNCTION KING_RINGS() END FUNCTION INTEGER FUNCTION GUTTMAN_RINGS() END FUNCTION INTEGER FUNCTION PRIMITIVE_RINGS() END FUNCTION END INTERFACE if (VTLT .eq. 0) then TLT=NSP+1 else TLT=VTLT endif NUMA=VNUMA NTLT=NBSPBS(TLT) TAILLR=VTAILLD TAILLD=VTAILLD+1 ABAB=.false. NO_HOMO=.false. if (NSP .gt. 1) then if (VABAB .eq. 1) ABAB=.true. if (VHOMO .eq. 1) NO_HOMO=.true. endif #ifdef DEBUG write (6, '("RINGS:: ABAB= ",l1,", NO_HOMO= ",l1,", NUMA= ",i5,", TAILLR= ",i2)') ABAB, NO_HOMO, NUMA, TAILLR #endif TBR=.false. ALC=.false. ALLRINGS=.false. CALC_STRINGS=.false. ! In the following lines the NUMA variable ! gives the 'average' number of rings per size and per step ! this variable depends on the type of rings, of the system studied as well ! as of the search depth. ! NUMA is used as a reference to allocate almost all tabs during rings ! search and analysis. NUMA is a key variable - tweak with caution ! if (VRINGS.eq.1 .or. VRINGS.eq.2) then DOAMPAT=.true. else DOAMPAT=.false. endif if (.not.ALLOCRINGS()) then initrings=0 goto 001 endif if (VRINGS .eq. 0) ALLRINGS=.true. if (VRINGS .le. 1) then initrings=KING_RINGS() endif if (VRINGS .eq. 2) then initrings=GUTTMAN_RINGS() endif if (VRINGS > 2) then CALC_PRINGS=.true. if (.not.PBC) then NNA=NA NNP=0 else NNP=NA*(NBX**3 - 1)/2 endif if (VRINGS .eq. 4) CALC_STRINGS=.true. initrings=PRIMITIVE_RINGS() endif 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/lattice.F90000066400000000000000000000337151457665371200176550ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file lattice.F90 !! @short Lattice properties !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION add_cells (NP, NPS, sizec) BIND (C,NAME='add_cells_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NP, NPS INTEGER (KIND=c_int), INTENT(IN), DIMENSION(3) :: sizec INTEGER :: PIA, PIB, PIC, PID, PIE, PIF DOUBLE PRECISION, DIMENSION(3) :: lshift INTEGER, DIMENSION(:), ALLOCATABLE :: NEWLOT DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: NEWPOS INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION END INTERFACE PIA = (sizec(1)+1)*(sizec(2)+1)*(sizec(3)+1) PIB = NP * PIA if (allocated(NEWPOS)) deallocate(NEWPOS) allocate(NEWPOS(PIB,3,NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: add_cells"//CHAR(0), "Table: NEWPOS"//CHAR(0)) add_cells=0 goto 001 endif if (allocated(NEWLOT)) deallocate(NEWLOT) allocate(NEWLOT(PIB), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: add_cells"//CHAR(0), "Table: NEWLOT"//CHAR(0)) add_cells=0 goto 001 endif do PIA=1, NPS PIB=0 do PID=1, sizec(1)+1 do PIE=1, sizec(2)+1 do PIF=1, sizec(3)+1 lshift(1)=(PID-1)*THE_BOX(1)%lvect(1,1) + (PIE-1)*THE_BOX(1)%lvect(2,1) + (PIF-1)*THE_BOX(1)%lvect(3,1) lshift(2)=(PID-1)*THE_BOX(1)%lvect(1,2) + (PIE-1)*THE_BOX(1)%lvect(2,2) + (PIF-1)*THE_BOX(1)%lvect(3,2) lshift(3)=(PID-1)*THE_BOX(1)%lvect(1,3) + (PIE-1)*THE_BOX(1)%lvect(2,3) + (PIF-1)*THE_BOX(1)%lvect(3,3) do PIC=1, NP PIB=PIB+1 NEWPOS(PIB,:,PIA) = FULLPOS(PIC,:,PIA) + lshift(:) NEWLOT(PIB) = LOT(PIC) enddo enddo enddo enddo enddo add_cells=0 call init_data (PIB, NSP, NPS, 0) if (SEND_POS(PIB, NPS, NEWLOT, NEWPOS) .eq. 1) add_cells=1 001 continue if (allocated(NEWPOS)) deallocate(NEWPOS) if (allocated(NEWLOT)) deallocate(NEWLOT) END FUNCTION INTEGER (KIND=c_int) FUNCTION shift_box_center (NP, NPS, cshift, REF) BIND (C,NAME='shift_box_center_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NP, NPS, REF REAL (KIND=c_double), INTENT(IN), DIMENSION(3) :: cshift INTEGER :: PIB, PIC, PID DOUBLE PRECISION, DIMENSION(3,3) :: h_mat DOUBLE PRECISION, DIMENSION(3) :: TPO INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION END INTERFACE h_mat(:,1) = THE_BOX(1)%lvect(1,:) h_mat(:,2) = THE_BOX(1)%lvect(2,:) h_mat(:,3) = THE_BOX(1)%lvect(3,:) do PIC=1, NPS do PIB=1, NP do PID=1, 3 FULLPOS(PIB,PID,PIC) = FULLPOS(PIB,PID,PIC) + cshift(PID) enddo TPO=MATMUL(THE_BOX(1)%lrecp, FULLPOS(PIB,:,PIC)) TPO=TPO-NINT(TPO/0.5) FULLPOS(PIB,:,PIC) = MATMUL(h_mat,TPO) !FULLPOS(PIB,:,PIC) = FULLPOS(PIB,:,PIC) + cshift(2) !FULLPOS(PIB,:,PIC) = FULLPOS(PIB,:,PIC) + cshift(3) enddo enddo if (REF .eq. 1) then shift_box_center = SEND_POS (NP, NPS, LOT, FULLPOS) else shift_box_center = 1 endif END FUNCTION DOUBLE PRECISION FUNCTION f_dot_product (a, b) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b INTEGER :: DIM f_dot_product = 0.0d0 do DIM=1, 3 f_dot_product = f_dot_product + a(DIM)*b(DIM) enddo END FUNCTION SUBROUTINE f_cross_product (a, b, c) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: c c(:)=0.0d0 c(1) = a(2)*b(3) - a(3)*b(2) c(2) = a(3)*b(1) - a(1)*b(3) c(3) = a(1)*b(2) - a(2)*b(1) END SUBROUTINE INTEGER (KIND=c_int) FUNCTION lattice (totl, lid, vectors, vmod, angles, lat, cfrac, apbc) BIND (C,NAME='lattice_') ! ! Compute lattice angles from lattice vectors ! Lattice vector modules ! Lattice volume ! Reciprocal lattice parameters ! USE PARAMETERS IMPLICIT NONE REAL (KIND=c_double), INTENT(IN), DIMENSION(3,3) :: vectors REAL (KIND=c_double), INTENT(IN), DIMENSION(3) :: vmod REAL (KIND=c_double), INTENT(INOUT), DIMENSION(3) :: angles INTEGER (KIND=c_int), INTENT(IN) :: totl, lid, lat, cfrac, apbc DOUBLE PRECISION :: ALPHA, BETA, GAMA ! Lattice Angles DOUBLE PRECISION :: CALPHA, SALPHA, CBETA, SBETA, CGAMA, SGAMA ! Cosinus and Sinus DOUBLE PRECISION, DIMENSION(3) :: TMPLA INTERFACE DOUBLE PRECISION FUNCTION f_dot_product (a, b) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b END FUNCTION SUBROUTINE f_cross_product (a, b, c) DOUBLE PRECISION, DIMENSION(3), INTENT(IN) :: a, b DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: c END SUBROUTINE END INTERFACE ! Transition from C/Gtk to Fortran90 ! lattice = 0 if (lid .eq. 0) then if (allocated(THE_BOX)) deallocate(THE_BOX) allocate(THE_BOX(totl), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: lattice_"//CHAR(0), "Type: THE_BOX"//CHAR(0)) goto 001 endif NCELLS = totl endif NBOX => THE_BOX(lid+1) NBOX%GLASS=.false. NBOX%CUBIC=.false. if (lat .gt. 0) then do i=1, 3 do j=1, 3 NBOX%lvect(j,i) = vectors(i,j) enddo enddo NBOX%modv(1) = vmod(1) NBOX%modv(2) = vmod(2) NBOX%modv(3) = vmod(3) ALPHA = angles(1) BETA = angles(2) GAMA = angles(3) if (lat .eq. 1) then if (ALPHA.eq.90.0 .and. BETA.eq.90.0 .and. GAMA.eq.90.0) then NBOX%GLASS=.true. if (NBOX%modv(1).eq.NBOX%modv(2) .and. NBOX%modv(2).eq.NBOX%modv(3)) NBOX%CUBIC=.true. endif if (ALPHA.eq.90.0) then ALPHA = PI/2.0d0 SALPHA = 1.0d0 CALPHA = 0.0d0 else ALPHA = ALPHA*PI/180.0d0 SALPHA = sin(ALPHA) CALPHA = cos(ALPHA) endif if (BETA.eq.90.0) then BETA = PI/2.0d0 SBETA = 1.0d0 CBETA = 0.0d0 else BETA = BETA*PI/180.0d0 SBETA = sin(BETA) CBETA = cos(BETA) endif if (GAMA.eq.90.0) then GAMA = PI/2.0d0 SGAMA = 1.0d0 CGAMA = 0.0d0 else GAMA = GAMA*PI/180.0d0 SGAMA = sin(GAMA) CGAMA = cos(GAMA) endif NBOX%lvect(1,1) = NBOX%modv(1) NBOX%lvect(1,2) = 0.0d0 NBOX%lvect(1,3) = 0.0d0 NBOX%lvect(2,1) = NBOX%modv(2)*CGAMA NBOX%lvect(2,2) = NBOX%modv(2)*SGAMA NBOX%lvect(2,3) = 0.d0 NBOX%lvect(3,1) = NBOX%modv(3)*CBETA LTEMP = (CALPHA - CBETA*CGAMA)/SGAMA NBOX%lvect(3,2) = NBOX%modv(3)*LTEMP NBOX%lvect(3,3) = NBOX%modv(3)*sqrt(SBETA*SBETA - LTEMP*LTEMP) else NBOX%modv(1)=sqrt(NBOX%lvect(1,1)**2+NBOX%lvect(1,2)**2+NBOX%lvect(1,3)**2) NBOX%modv(2)=sqrt(NBOX%lvect(2,1)**2+NBOX%lvect(2,2)**2+NBOX%lvect(2,3)**2) NBOX%modv(3)=sqrt(NBOX%lvect(3,1)**2+NBOX%lvect(3,2)**2+NBOX%lvect(3,3)**2) ALPHA= (NBOX%lvect(3,1)*NBOX%lvect(2,1)+ & NBOX%lvect(3,2)*NBOX%lvect(2,2)+ & NBOX%lvect(3,3)*NBOX%lvect(2,3))/(NBOX%modv(2)*NBOX%modv(3)) BETA = (NBOX%lvect(1,1)*NBOX%lvect(3,1)+ & NBOX%lvect(1,2)*NBOX%lvect(3,2)+ & NBOX%lvect(1,3)*NBOX%lvect(3,3))/(NBOX%modv(1)*NBOX%modv(3)) GAMA = (NBOX%lvect(1,1)*NBOX%lvect(2,1)+ & NBOX%lvect(1,2)*NBOX%lvect(2,2)+ & NBOX%lvect(1,3)*NBOX%lvect(2,3))/(NBOX%modv(1)*NBOX%modv(2)) if (ALPHA.eq.0.0d0 .and. BETA.eq.0.0d0 .and. GAMA.eq.0.0d0) then NBOX%GLASS=.true. if (NBOX%modv(1).eq.NBOX%modv(2) .and. NBOX%modv(2).eq.NBOX%modv(3)) NBOX%CUBIC=.true. endif if (ALPHA.eq.0.0d0) then angles(1) = 90.0d0 ALPHA = PI/2.0d0 SALPHA = 1.0d0 CALPHA = 0.0d0 else ALPHA = acos(ALPHA) angles(1) = ALPHA*180.0d0/PI SALPHA = sin(ALPHA) CALPHA = cos(ALPHA) endif if (BETA.eq.0.0d0) then angles(2) = 90.0d0 BETA = PI/2.0d0 SBETA = 1.0d0 CBETA = 0.0d0 else BETA = acos(BETA) angles(2) = BETA*180.0d0/PI SBETA = sin(BETA) CBETA = cos(BETA) endif if (GAMA.eq.0.0d0) then angles(3) = 90.0d0 GAMA = PI/2.0d0 SGAMA = 1.0d0 CGAMA = 0.0d0 else GAMA = acos(GAMA) angles(3) = GAMA*180.0d0/PI SGAMA = sin(GAMA) CGAMA = cos(GAMA) endif endif if (ALPHA.eq.0.0d0 .and. BETA.eq.0.0d0 .and. GAMA.eq.0.0d0) then ! If some problems display a GTK error message. call show_error ("Problem with the simulation box parameters"//CHAR(0), & "Computed angles are equal to 0.0d0"//CHAR(0), "Function: lattice"//CHAR(0)) goto 001 endif ! write (*,*) NBOX%lvect(1,1), NBOX%lvect(1,2), NBOX%lvect(1,3) ! write (*,*) NBOX%lvect(2,1), NBOX%lvect(2,2), NBOX%lvect(2,3) ! write (*,*) NBOX%lvect(3,1), NBOX%lvect(3,2), NBOX%lvect(3,3) ! write (*,*) NBOX%modv(1), NBOX%modv(2), NBOX%modv(3) ! write (*,*) ALPHA*180/PI, BETA*180/PI, GAMA*180/PI NBOX%minv=min(NBOX%modv(1),NBOX%modv(2)) NBOX%minv=min(NBOX%minv,NBOX%modv(3)) NBOX%maxv=max(NBOX%modv(1),NBOX%modv(2)) NBOX%maxv=max(NBOX%maxv,NBOX%modv(3)) NBOX%VOLUME=(NBOX%lvect(1,2)*NBOX%lvect(2,3)-NBOX%lvect(1,3)*NBOX%lvect(2,2))*NBOX%lvect(3,1) & +(NBOX%lvect(1,3)*NBOX%lvect(2,1)-NBOX%lvect(1,1)*NBOX%lvect(2,3))*NBOX%lvect(3,2) & +(NBOX%lvect(1,1)*NBOX%lvect(2,2)-NBOX%lvect(1,2)*NBOX%lvect(2,1))*NBOX%lvect(3,3) NBOX%VOLUME = abs(NBOX%VOLUME) ! Reciprocal lattice parameters ! call f_cross_product (NBOX%lvect(2,:), NBOX%lvect(3,:), TMPLA) NBOX%lrecp(1,:) = TMPLA / f_dot_product(NBOX%lvect(1,:), TMPLA) call f_cross_product (NBOX%lvect(3,:), NBOX%lvect(1,:), TMPLA) NBOX%lrecp(2,:) = TMPLA / f_dot_product(NBOX%lvect(2,:), TMPLA) call f_cross_product (NBOX%lvect(1,:), NBOX%lvect(2,:), TMPLA) NBOX%lrecp(3,:) = TMPLA / f_dot_product(NBOX%lvect(3,:), TMPLA) ! modules of the reciprocal lattice vectors NBOX%modr(1)=sqrt(NBOX%lrecp(1,1)**2+NBOX%lrecp(1,2)**2+NBOX%lrecp(1,3)**2) NBOX%modr(2)=sqrt(NBOX%lrecp(2,1)**2+NBOX%lrecp(2,2)**2+NBOX%lrecp(2,3)**2) NBOX%modr(3)=sqrt(NBOX%lrecp(3,1)**2+NBOX%lrecp(3,2)**2+NBOX%lrecp(3,3)**2) NBOX%modr(:) = 2.0d0*PI*NBOX%modr(:) NBOX%minr=min(NBOX%modr(1),NBOX%modr(2)) NBOX%minr=min(NBOX%minr,NBOX%modr(3)) NBOX%maxr=max(NBOX%modr(1),NBOX%modr(2)) NBOX%maxr=max(NBOX%maxr,NBOX%modr(3)) ! Creation of the matrix to convert fractional to cartesian coordinates z=sqrt(abs(1 - CALPHA*CALPHA & - CBETA*CBETA & - CGAMA*CGAMA & + 2*CALPHA*CBETA*CGAMA)) z=z/SGAMA i = 0 if (cfrac > 0) i = cfrac - 1 NBOX%fractocart(1,1)=NBOX%modv(1)/(2.0**(i)) NBOX%fractocart(1,2)=0.0d0 NBOX%fractocart(1,3)=0.0d0 NBOX%fractocart(2,1)=NBOX%modv(2)*CGAMA/(2.0**(i)) NBOX%fractocart(2,2)=NBOX%modv(2)*SGAMA/(2.0**(i)) NBOX%fractocart(2,3)=0.0d0 NBOX%fractocart(3,1)=NBOX%modv(3)*CBETA/(2.0**(i)) NBOX%fractocart(3,2)=NBOX%modv(3)*((CALPHA-CBETA*CGAMA)/SGAMA)/(2.0**(i)) NBOX%fractocart(3,3)=NBOX%modv(3)*z/(2.0**(i)) !write (6, *) !write (6, '("Frac to cart matrix in lattice:")') !write (6, '(f15.10,4x,f15.10,4x,f15.10)') NBOX%fractocart(1,1), NBOX%fractocart(1,2), NBOX%fractocart(1,3) !write (6, '(f15.10,4x,f15.10,4x,f15.10)') NBOX%fractocart(2,1), NBOX%fractocart(2,2), NBOX%fractocart(2,3) !write (6, '(f15.10,4x,f15.10,4x,f15.10)') NBOX%fractocart(3,1), NBOX%fractocart(3,2), NBOX%fractocart(3,3) !write (6, *) ! Creation of the matrix to convert cartesian to fractional coordinates NBOX%carttofrac(1,1)=1.0d0/NBOX%fractocart(1,1) NBOX%carttofrac(1,2)=0.0d0 NBOX%carttofrac(1,3)=0.0d0 NBOX%carttofrac(2,1)=-CGAMA/(SGAMA*(NBOX%modv(1)/(2.0**(i)))) NBOX%carttofrac(2,2)=1.0d0/NBOX%fractocart(2,2) NBOX%carttofrac(2,3)=0.0d0 NBOX%carttofrac(3,1)=((NBOX%modv(2)/(2.0**(i)))*(NBOX%modv(3)/(2.0**(i))))/NBOX%VOLUME NBOX%carttofrac(3,1)=NBOX%carttofrac(3,1) * (CALPHA*CGAMA - CBETA)/SALPHA NBOX%carttofrac(3,2)=((NBOX%modv(1)/(2.0**(i)))*(NBOX%modv(3)/(2.0**(i))))/NBOX%VOLUME NBOX%carttofrac(3,2)=NBOX%carttofrac(3,2) * (CBETA*CGAMA - CALPHA)/SGAMA NBOX%carttofrac(3,3)=1.0d0/NBOX%fractocart(3,3) if (apbc .eq. 1) then PBC=.true. else PBC=.false. NBOX%GLASS=.false. NBOX%CUBIC=.false. endif else NBOX%VOLUME=0.0d0 NBOX%minr=0.0d0 NBOX%modv(:)=0.0d0 NBOX%modr(:)=0.0d0 NBOX%lvect(:,:)=0.0d0 NBOX%lrecp(:,:)=0.0d0 NBOX%fractocart(:,:)=0.0d0 NBOX%GLASS=.false. NBOX%CUBIC=.false. PBC=.false. endif REAL_DENSITY=0.0d0 TOTAL_DENSITY=0.0d0 if (NBOX%VOLUME.ne.0.0) then do i=1, NSP REAL_DENSITY=REAL_DENSITY+NBSPBS(i)*MASS(i) enddo TOTAL_DENSITY = dble(NA)/NBOX%VOLUME REAL_DENSITY=REAL_DENSITY/AVOGADRO REAL_DENSITY=REAL_DENSITY/NBOX%VOLUME REAL_DENSITY=REAL_DENSITY*10.0d0 endif ! To lattice_info_ call lattice_info (lid, NBOX%VOLUME, REAL_DENSITY, & NBOX%lvect, NBOX%lrecp, NBOX%modv, angles, & NBOX%fractocart, NBOX%carttofrac) if (lid .eq. totl-1) then MBOX = 0.0d0 MEANVOL = 0.0d0 OVERALL_CUBIC = .true. do i=1, NCELLS MBOX = MBOX + THE_BOX(i)%minv MEANVOL = MEANVOL + THE_BOX(i)%VOLUME if (OVERALL_CUBIC .and. THE_BOX(i)%CUBIC) then OVERALL_CUBIC = .true. else OVERALL_CUBIC = .false. endif enddo MEANVOL = MEANVOL / NCELLS MBOX = MBOX / (2.0d0*NCELLS) endif lattice = 1 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/mendeleiev.F90000066400000000000000000000566101457665371200203440ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file mendeleiev.F90 !! @short Periodic table and diffraction data !! @author Sébastien Le Roux MODULE MENDELEIEV INTEGER :: MAXE=118 CHARACTER (LEN=2), DIMENSION(118), PARAMETER :: ATSYM=(/ & 'H ', 'He', 'Li', 'Be', 'B ', 'C ', 'N ', 'O ', 'F ', & 'Ne', 'Na', 'Mg', 'Al', 'Si', 'P ', 'S ', 'Cl', 'Ar', & 'K ', 'Ca', 'Sc', 'Ti', 'V ', 'Cr', 'Mn', 'Fe', 'Co', & 'Ni', 'Cu', 'Zn', 'Ga', 'Ge', 'As', 'Se', 'Br', 'Kr', & 'Rb', 'Sr', 'Y ', 'Zr', 'Nb', 'Mo', 'Tc', 'Ru', 'Rh', & 'Pd', 'Ag', 'Cd', 'In', 'Sn', 'Sb', 'Te', 'I ', 'Xe', & 'Cs', 'Ba', 'La', 'Ce', 'Pr', 'Nd', 'Pm', 'Sm', 'Eu', & 'Gd', 'Tb', 'Dy', 'Ho', 'Er', 'Tm', 'Yb', 'Lu', 'Hf', & 'Ta', 'W ', 'Re', 'Os', 'Ir', 'Pt', 'Au', 'Hg', 'Tl', & 'Pb', 'Bi', 'Po', 'At', 'Rn', 'Fr', 'Ra', 'Ac', 'Th', & 'Pa', 'U ', 'Np', 'Pu', 'Am', 'Cm', 'Bk', 'Cf', 'Es', & 'Fm', 'Md', 'No', 'Lr', 'Rf', 'Db', 'Sg', 'Bh', 'Hs', & 'Mt', 'Ds', 'Rg', 'Cn', 'Nh', 'Fl', 'Mc', 'Lv', 'Ts', 'Og' /) CHARACTER (LEN=14), DIMENSION(118), PARAMETER :: ELEMENT=(/ & 'Hydrogen ', 'Helium ', 'Lithium ', 'Beryllium ', & 'Boron ', 'Carbon ', 'Nitrogen ', 'Oxygen ', & 'Fluorine ', 'Neon ', 'Sodium ', 'Magnesium ', & 'Aluminum ', 'Silicon ', 'Phosphorus ', 'Sulfur ', & 'Chlorine ', 'Argon ', 'Potassium ', 'Calcium ', & 'Scandium ', 'Titanium ', 'Vanadium ', 'Chromium ', & 'Manganese ', 'Iron ', 'Cobalt ', 'Nickel ', & 'Copper ', 'Zinc ', 'Gallium ', 'Germanium ', & 'Arsenic ', 'Selenium ', 'Bromine ', 'Krypton ', & 'Rubidium ', 'Strontium ', 'Yttrium ', 'Zirconium ', & 'Niobium ', 'Molybdenum ', 'Technetium ', 'Ruthenium ', & 'Rhodium ', 'Palladium ', 'Silver ', 'Cadmium ', & 'Indium ', 'Tin ', 'Antimony ', 'Tellurium ', & 'Iodine ', 'Xenon ', 'Caesium ', 'Barium ', & 'Lanthanum ', 'Cerium ', 'Praseodymium ', 'Neodymium ', & 'Promethium ', 'Samarium ', 'Europium ', 'Gadolinium ', & 'Terbium ', 'Dysprosium ', 'Holmium ', 'Erbium ', & 'Thulium ', 'Ytterbium ', 'Lutetium ', 'Hafnium ', & 'Tantalum ', 'Tungsten ', 'Rhenium ', 'Osmium ', & 'Iridium ', 'Platinum ', 'Gold ', 'Mercury ', & 'Thallium ', 'Lead ', 'Bismuth ', 'Polonium ', & 'Astatine ', 'Radon ', 'Francium ', 'Radium ', & 'Actinium ', 'Thorium ', 'Protactinium ', 'Uranium ', & 'Neptunium ', 'Plutonium ', 'Americium ', 'Curium ', & 'Berkelium ', 'Californium ', 'Einsteinium ', 'Fermium ', & 'Mendelevium ', 'Nobelium ', 'Lawrencium ', 'Rutherfordium ', & 'Dubnium ', 'Seaborgium ', 'Bohrium ', 'Hassium ', & 'Meitnerium ', 'Darmstadtium ', 'Roentgenium ', 'Copernicium ', & 'Nihonium ', 'Flerovium ', 'Moscovium ', 'Livermorium ', & 'Tennessine ', 'Oganesson ' /) DOUBLE PRECISION, DIMENSION(118), PARAMETER :: AMASS=(/ & 1.008, 4.003, 6.94, 9.012, 10.81, 12.011, 14.007, 15.99, & 18.998, 20.18, 22.99, 24.305, 26.982, 28.085, 30.974, & 32.06, 35.45, 39.948, 39.098, 40.078, 44.956, 47.867, & 50.942, 51.996, 54.938, 55.845, 58.933, 58.693, 63.546, & 65.38, 69.723, 72.63, 74.922, 78.971, 79.904, 83.798, & 85.468, 87.62, 88.906, 91.224, 92.906, 95.95, 98.00, & 101.07, 102.906, 106.42, 107.868, 112.414, 114.818, & 118.71, 121.76, 127.60, 126.904, 131.293, 132.905, & 137.327, 138.905, 140.116, 140.908, 144.242, 145.00, & 150.36, 151.964, 157.25, 158.925, 162.50, 164.93, & 167.259, 168.934, 173.045, 174.967, 178.49, 180.948, & 183.84, 186.207, 190.23, 192.217, 195.084, 196.967, & 200.592, 204.38, 207.20, 208.98, 209.00, 210.00, & 222.00, 223.00, 226.00, 227.00, 232.038, 231.036, & 238.029, 237.00, 244.00, 243.00, 247.00, 247.00, & 251.00, 252.00, 257.00, 258.00, 258.00, 262.00, 267.00, & 268.00, 269.00, 270.00, 271.00, 278.00, 281.00, 282.00, & 285.00, 286.00, 289.00, 289.00, 293.00, 294.00, 294.00 /) ! Source: Beatriz Cordero and al. ! in "Covalent radii revisited", ! Dalton Trans., 2008, [DOI: 10.1039/b801115j]. DOUBLE PRECISION, DIMENSION(105), PARAMETER :: ARCOV=(/ & 0.31, 0.28, 1.28, 0.96, 0.84, 0.76, 0.71, 0.66, 0.57, & 0.58, 1.66, 1.41, 1.21, 1.11, 1.07, 1.05, 1.02, 1.06, & 2.03, 1.76, 1.70, 1.60, 1.53, 1.39, 1.39, 1.32, 1.26, & 1.24, 1.32, 1.22, 1.22, 1.20, 1.19, 1.20, 1.20, 1.16, & 2.20, 1.95, 1.90, 1.75, 1.64, 1.54, 1.47, 1.46, 1.42, & 1.39, 1.45, 1.44, 1.42, 1.39, 1.39, 1.38, 1.39, 1.40, & 2.44, 2.15, 2.07, 2.04, 2.03, 2.01, 1.99, 1.98, 1.98, & 1.96, 1.94, 1.92, 1.92, 1.89, 1.90, 1.87, 1.87, 1.75, & 1.70, 1.62, 1.51, 1.44, 1.41, 1.36, 1.36, 1.32, 1.45, & 1.46, 1.48, 1.40, 1.50, 1.50, 2.60, 2.21, 2.15, 2.06, & 2.00, 1.96, 1.90, 1.87, 1.80, 1.69, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: Slater, Journal of Chemical Physics, 41, 3199 (1964). DOUBLE PRECISION, DIMENSION(105), PARAMETER :: ARION=(/ & -0.24, 0.000, 0.900, 0.590, 0.250, 0.300, 1.320, 1.260, & 1.190, 0.000, 1.160, 0.860, 0.675, 0.400, 0.310, 1.700, & 1.670, 0.000, 1.520, 1.140, 0.885, 0.745, 0.680, 0.755, & 0.670, 0.690, 0.790, 0.830, 0.870, 0.880, 0.760, 0.670, & 0.720, 1.840, 1.820, 0.000, 1.660, 1.320, 1.040, 0.860, & 0.780, 0.730, 0.700, 0.705, 0.690, 0.755, 1.290, 1.090, & 0.940, 0.830, 0.740, 2.070, 2.060, 0.000, 1.810, 1.490, & 1.172, 1.010, 1.130, 1.123, 1.110, 1.098, 1.087, 1.078, & 1.063, 1.052, 1.041, 1.030, 1.020, 1.008, 1.001, 0.850, & 0.780, 0.650, 0.670, 0.530, 0.710, 0.710, 0.710, 1.160, & 1.025, 1.330, 1.170, 0.810, 0.760, 0.000, 1.940, 1.620, & 1.260, 0.000, 0.920, 1.030, 0.850, 0.850, 1.350, 0.990, & 0.970, 0.961, 0.000, 0.000, 0.000, 1.240, 0.000, 0.000, & 0.000 /) ! Source: A. Bondi, J. Phys. Chem., 68, 441 (1964). DOUBLE PRECISION, DIMENSION(105), PARAMETER :: ARVDW=(/ & 1.20, 1.40, 1.82, 0.00, 0.00, 1.70, 1.55, 1.52, 1.47, & 1.54, 2.27, 1.73, 0.00, 2.10, 1.80, 1.80, 1.75, 1.88, & 2.75, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 1.63, 1.40, 1.39, 1.87, 0.00, 1.85, 1.90, 1.85, 2.02, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 1.63, 1.72, 1.58, 1.93, 2.17, 0.00, 2.06, 1.98, 2.16, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 1.75, 1.66, 1.55, 1.96, & 2.02, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 1.86, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: ! R D Shannon and C T Prewitt (1969) Acta Cryst. B25:925-946 ! R D Shannon (1976) Acta Cryst. A23:751-76A. DOUBLE PRECISION, DIMENSION(105), PARAMETER :: ARCRY=(/ & 0.10, 0.00, 0.90, 0.41, 0.25, 0.29, 0.30, 1.21, 1.19, & 0.00, 1.16, 0.86, 0.53, 0.40, 0.31, 0.43, 1.67, 0.00, & 1.52, 1.14, 0.89, 0.75, 0.68, 0.76, 0.81, 0.69, 0.54, & 0.70, 0.71, 0.74, 0.76, 0.53, 0.72, 0.56, 1.82, 0.00, & 1.66, 1.32, 1.04, 0.86, 0.78, 0.79, 0.79, 0.82, 0.81, & 0.78, 1.29, 0.92, 0.94, 0.69, 0.90, 1.11, 2.06, 0.62, & 1.81, 1.49, 1.36, 1.15, 1.32, 1.30, 1.28, 1.10, 1.31, & 1.08, 1.18, 1.05, 1.04, 1.03, 1.02, 1.13, 1.00, 0.85, & 0.78, 0.74, 0.77, 0.77, 0.77, 0.74, 1.51, 0.83, 1.03, & 1.49, 1.17, 1.08, 0.76, 0.00, 1.94, 1.62, 1.26, 1.19, & 1.09, 0.87, 0.00, 1.00, 1.12, 1.11, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: http://www.ncnr.nist.gov/resources/n-lengths/ ! Neutron News - Sears, Varley F. ! "Neutron scattering lengths and cross sections" ! 1992 - Vol 3, Issue 3, p26-37 ! http://www.informaworld.com/10.1080/10448639208218770 DOUBLE PRECISION, DIMENSION(105), PARAMETER :: COHEB=(/ & -3.739, 3.26, -1.90, 7.79, 5.304, 6.646, 9.36, & 5.803, 5.654, 4.566, 3.580, 5.375, 3.349, 4.1491, & 5.131, 2.847, 9.577, 1.909, 3.67, 4.70, 12.29, & -3.438, -0.3824, 3.635, -3.73, 9.45, 2.49, 10.3, & 7.718, 5.680, 7.288, 8.185, 6.58, 7.970, 6.795, & 7.81, 7.09, 7.02, 7.75, 7.16, 7.054, 6.715, 6.8, & 7.03, 5.88, 5.91, 5.922, 4.87, 4.065, 6.225, 5.57, & 5.80, 5.28, 4.92, 5.42, 5.07, 8.24, 4.84, 4.58, & 7.69, 12.6, 0.80, 7.22, 6.5, 7.38, 16.9, 8.01, & 7.79, 7.07 , 12.43, 7.21, 7.7, 6.91, 4.86, 9.2, & 10.7, 10.6, 9.6, 7.63, 12.692, 8.776, 9.405, 8.532, & 0.00, 0.00, 0.00, 0.00, 10.0, 0.00, 10.31, 9.1, & 8.417, 10.55, 0.00, 8.3, 0.00, 0.00, 0.00, 0.00, & 0.00, 0.00, 0.00, 0.00, 0.00, 0.00 /) ! Source: Acta Cryst. (1968). A24, 321 ! X-ray scattering factors computed from numerical Hartree-Fock wave functions ! By DON T. CROMER and JOSEPH B. MANN, University of California DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a1 = (/ & 0.413048, 0.732354, 0.974637, 1.533712, 2.085185, & 2.657506, 11.893780, 2.960427, 3.511943, 4.183749, 4.910127, & 4.708971, 4.730796, 5.275329, 1.950541, 6.372157, 1.446071, & 7.188004, 8.163991, 8.593655, 1.476566, 9.818524, 10.473575, & 11.007069, 11.709542, 12.311098, 12.914510, 13.521865, 14.014192, & 14.741002, 15.758946, 16.540613, 17.025642, 17.354071, 17.550570, & 17.655279, 8.123134, 17.730219, 17.792040, 17.859772, 17.958399, & 6.236218, 17.840963, 6.271624, 6.216648, 6.121511, 6.073874, & 6.080986, 6.196477, 19.325171, 5.394956, 6.660302, 19.884502, & 19.978920, 17.418674, 19.747343, 19.966019, 17.355122, 21.551311, & 17.331244, 17.286388, 23.700363, 17.186195, 24.898117, 25.910013, & 26.671785, 27.150190, 28.174887, 28.925894, 29.676760, 30.122866, & 30.617033, 31.066359, 31.507900, 31.888456, 32.210297, 32.004436, & 31.273891, 16.777390, 16.839890, 16.630795, 16.419567, 16.282274, & 16.289164, 16.011461, 16.070229, 16.007385, 32.563690, 15.914053, & 15.784024, 32.740208, 15.679275, 32.999901, 33.281178, 33.435162, & 15.804837, 15.889072, 33.7 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b1 = (/ & 15.569946, 11.553918, 4.334946, 42.662079, 23.494068, & 14.780758, 0.000158, 14.182259, 10.687859, 8.175457, 3.281434, & 4.875207, 3.628931, 2.631338, 0.908139, 1.514347, 0.052357, & 0.956221, 12.816323, 10.460644, 53.131023, 8.001879, 7.081940, & 6.366281, 5.597120, 5.009415, 4.507138, 4.077277, 3.738280, & 3.388232, 3.121754, 2.866618, 2.597739, 2.349787, 2.119226, & 1.908231, 15.142385, 1.563060, 1.429691, 1.310692, 1.211590, & 0.090780, 1.005729, 0.077040, 0.070789, 0.062549, 0.055333, & 0.048990, 0.042072, 6.118104, 33.326523, 33.031654, 4.628591, & 4.143356, 0.399828, 3.481823, 3.197408, 0.328369, 2.995675, & 0.300269, 0.286620, 2.689539, 0.261678, 2.435028, 2.373912, & 2.282593, 2.169660, 2.120995, 2.046203, 1.977630, 1.883090, & 1.795613, 1.708732, 1.629485, 1.549238, 1.473531, 1.353767, & 1.316992, 0.122737, 0.115905, 0.110704, 0.105499, 0.101180, & 0.098121, 0.092639, 0.090437, 0.087031, 0.801980, 0.080511, & 0.077067, 0.709545, 0.071206, 0.657086, 0.634999, 0.612785, & 0.058619, 0.055503, 0.550447 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a2 = (/ & 0.294953, 0.753896, 0.158472, 0.638283, 1.064580, & 1.078079, 3.277479, 2.508818, 2.772244, 2.905726, 3.081783, & 1.194814, 2.313951, 3.191038, 4.146930, 5.154568, 6.870609, & 6.638454, 7.146945, 1.477324, 1.487278, 1.522646, 1.547881, & 1.555477, 1.733414, 1.876623, 2.481908, 6.947285, 4.784577, & 6.907748, 6.841123, 1.567900, 4.503441, 4.653248, 5.411882, & 6.848105, 2.138042, 9.795867, 10.253252, 10.911038, 12.063054, & 17.987711, 3.428236, 17.906738, 17.919739, 4.784063, 17.155437, & 18.019468, 18.816183, 6.281571, 6.549570, 6.940756, 6.736593, & 11.774945, 8.314444, 17.368477, 27.329655, 43.988499, 17.161730, & 62.783924, 51.560162, 23.072214, 37.156837, 17.104952, 32.344139, & 88.687576, 16.999819, 82.493271, 76.173798, 65.624069, 15.099346, & 15.145351, 15.341823, 15.682498, 16.117104, 16.678440, 1.975454, & 18.445440, 19.317156, 20.023823, 19.386616, 32.738590, 32.725136, & 32.807171, 32.615547, 32.641106, 32.663830, 21.396671, 32.535042, & 32.454899, 21.973675, 32.824306, 22.638077, 23.148544, 23.657259, & 33.480801, 33.625286, 25.467693 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b2 = (/ & 32.398468, 4.595831, 0.342451, 0.595420, 1.137894, & 0.776775, 10.232723, 5.936858, 4.380466, 3.252536, 9.119178, & 108.506081, 43.051167, 33.730728, 27.044952, 22.092527, 1.193165, & 15.339877, 0.808945, 0.041891, 0.035325, 0.029763, 0.026040, & 0.023987, 0.017800, 0.014461, 0.009126, 0.286763, 0.003744, & 0.243315, 0.226057, 0.012198, 0.003012, 0.002550, 16.557184, & 16.606236, 33.542667, 14.310868, 13.132816, 12.319285, 12.246687, & 1.108310, 41.901382, 0.928222, 0.856121, 0.784031, 7.896512, & 7.273646, 6.695665, 0.036915, 0.030974, 0.025750, 0.027754, & 0.010142, 0.016872, 0.371224, 0.003446, 0.002047, 0.312491, & 0.001320, 0.001550, 0.003491, 0.001995, 0.246961, 0.002034, & 0.000665, 0.215414, 0.000640, 0.000656, 0.000720, 10.342764, & 9.934469, 9.618455, 9.446448, 9.233474, 9.049695, 81.014175, & 8.797154, 8.621570, 8.256927, 7.181401, 1.055049, 1.002287, & 0.966265, 0.904416, 0.876409, 0.840187, 4.590666, 0.770669, & 0.735137, 4.050881, 0.681177, 3.854918, 3.856168, 3.792942, & 0.590160, 0.569571, 3.581973 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a3 = (/ & 0.187491, 0.283819, 0.811855, 0.601052, 1.062788, & 1.490909, 1.858092, 0.637853, 0.678385, 0.520513, 1.262067, & 1.558157, 1.541980, 1.511514, 1.494560, 1.473732, 6.151801, & 0.454180, 1.070140, 1.436254, 1.600187, 1.703101, 1.986381, & 2.985293, 2.673141, 3.066177, 3.466894, 3.866028, 5.056806, & 4.642337, 4.121016, 3.727829, 3.715904, 4.259489, 3.937180, & 4.171004, 6.761702, 6.099763, 5.714949, 5.821115, 5.007015, & 12.973127, 1.373012, 14.123269, 3.854252, 16.631683, 4.173344, & 4.018197, 4.050479, 4.498866, 19.650681, 19.847015, 8.110516, & 9.332182, 10.323193, 10.465718, 11.018425, 20.546650, 11.903859, & 12.160097, 12.478557, 12.777782, 13.103387, 13.222581, 13.765117, & 14.065445, 14.059334, 14.624002, 14.904704, 15.160854, 56.314899, & 54.933548, 49.278297, 37.960129, 42.390297, 48.559906, 17.070105, & 17.063745, 32.979683, 28.428564, 32.808571, 6.530247, 6.678302, & 21.095163, 8.113899, 21.489658, 21.594351, 11.298093, 21.553976, & 21.849222, 12.957398, 13.660459, 14.219973, 15.153755, 15.576339, & 24.150198, 24.710381, 16.048487 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b3 = (/ & 5.711404, 1.546299, 97.102966, 99.106499, 61.238976, & 42.086842, 30.344690, 0.112726, 0.093982, 0.063295, 0.102763, & 0.111516, 0.095960, 0.081119, 0.071280, 0.061373, 18.343416, & 15.339862, 210.327011, 81.390381, 137.319489, 39.885422, 31.909672, & 23.244839, 21.788420, 18.743040, 16.438129, 14.622634, 13.034982, & 11.903689, 12.482196, 13.432163, 14.272119, 15.579460, 0.002481, & 0.001598, 0.129372, 0.120574, 0.112173, 0.104353, 0.098615, & 11.468720, 119.320541, 9.555345, 33.889484, 8.751391, 28.443739, & 29.119284, 31.009790, 32.529045, 5.564929, 5.065547, 31.849096, & 28.796200, 25.605827, 21.226641, 19.955492, 3.088196, 17.716705, & 17.026001, 16.223755, 15.495437, 14.787360, 13.996325, 13.481969, & 12.920230, 12.213148, 11.915256, 11.465375, 11.044622, 0.000780, & 0.000739, 0.000760, 0.000898, 0.000689, 0.000519, 0.128093, & 0.124741, 1.256902, 1.195250, 1.119730, 25.025890, 25.714146, & 6.046622, 26.543257, 5.239687, 4.954467, 22.758972, 4.352206, & 4.097976, 19.231543, 18.236156, 17.435474, 16.849735, 16.195778, & 3.674720, 3.615472, 14.357388 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a4 = (/ & 0.080701, 0.190003, 0.262416, 0.106139, 0.140515, & -4.241070, 0.858927, 0.722838, 0.915159, 1.135641, 1.098938, & 1.170413, 1.117564, 1.356849, 1.522042, 1.635073, 1.750347, & 1.929593, 0.877316, 1.182839, 9.177463, 1.768774, 1.865616, & 1.347855, 2.023368, 2.070451, 2.106351, 2.135900, 1.457971, & 2.191766, 2.714681, 3.345098, 3.937200, 4.136455, 3.880645, & 3.446760, 1.156051, 2.620025, 3.170516, 3.512513, 3.287667, & 3.451426, 12.947364, 3.746008, 0.840326, 4.318258, 0.852238, & 1.303510, 1.638929, 1.856934, 1.827820, 1.557175, 1.170953, & 1.244749, 1.383834, 2.592602, 3.086696, 3.130670, 2.679103, & 2.663483, 2.675515, 2.684217, 2.707246, 3.266152, 2.751404, & 2.768497, 3.386979, 2.802756, 2.814812, 2.830288, 3.540980, & 4.096253, 4.577665, 4.885509, 5.211669, 5.455839, 15.939454, & 5.555933, 5.595453, 5.881564, 1.747191, 2.342742, 2.694750, & 2.505901, 2.884082, 2.299218, 1.598497, 2.834688, 11.433394, & 4.239077, 3.683832, 3.687261, 3.672950, 3.031492, 3.027023, & 3.655563, 3.707139, 3.657525 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b4 = (/ & 61.889874, 26.463964, 201.363831, 0.151340, 0.114886, & -0.000294, 0.656065, 34.958481, 27.255203, 21.813910, 132.013947, & 48.292408, 108.932388, 86.288643, 67.520187, 55.445175, 46.398396, & 39.043823, 39.597652, 169.847839, 9.098031, 120.157997, 108.022842, & 105.774498, 89.517914, 82.767876, 76.987320, 71.966080, 72.554794, & 63.312130, 66.203621, 58.866047, 50.437996, 45.181202, 42.164009, & 39.917473, 224.132507, 135.771317, 108.197029, 91.777542, 75.011948, & 66.684151, 9.781542, 35.860680, 121.686691, 34.489983, 110.376106, & 95.831207, 103.284348, 95.037186, 87.130966, 84.101616, 84.406387, & 75.280685, 233.339676, 173.834274, 141.381973, 134.907654, 152.192825, & 148.748993, 143.984512, 139.862473, 134.816299, 110.863091, 125.836510, & 121.937187, 100.506783, 114.529938, 111.411980, 108.139153, 89.559250, & 76.189705, 66.346199, 59.980675, 54.516373, 50.210201, 7.661196, & 40.177994, 38.008820, 39.247227, 90.660263, 80.906593, 77.057549, & 76.598068, 68.372963, 69.188477, 199.805801, 160.404388, 21.381622, & 109.464111, 117.255005, 112.500038, 109.464485, 121.292038, 117.757004, & 100.736191, 97.694786, 96.064972 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: a5 = (/ & 0.023736, 0.039139, 0.790108, 1.118414, 0.641784, & 0.713791, 0.912985, 1.142756, 1.089261, 1.228065, 0.560991, & 3.239403, 3.154754, 2.519114, 5.729711, 1.209372, 0.634168, & 1.523654, 1.486434, 7.113258, 7.099750, 7.082555, 7.056250, & 7.034779, 7.003180, 6.975185, 6.960892, 4.284731, 6.932996, & 38.424042, 2.395246, 6.785079, 6.790175, 6.749163, 6.707793, & 6.685200, 17.679546, 0.600053, 0.918251, 0.746965, 1.531019, & 0.210899, 6.335469, 0.908235, 15.173498, 13.246773, 17.988686, & 17.974669, 17.962912, 17.917318, 17.867832, 17.802427, 17.548716, & 17.737501, 19.876251, 11.003653, 17.335455, 11.353665, 9.564197, & 22.239950, 22.960947, 17.204367, 24.419271, 48.995213, 17.064405, & 17.067781, 46.546471, 17.018515, 16.998117, 16.997850, 16.943729, & 16.896156, 16.828321, 16.792112, 16.767591, 16.735533, 5.990003, & 1.575270, 10.576854, 4.714706, 6.356862, 19.916475, 20.576559, & 7.254589, 21.377867, 9.480184, 11.121192, 15.914965, 3.612409, & 11.736191, 15.744058, 22.279434, 15.683245, 15.704215, 15.746100, & 15.499866, 15.839268, 16.008982 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: b5 = (/ & 1.334118, 0.377523, 1.409234, 1.843093, 0.399036, & 0.239535, 0.217287, 0.390240, 0.313066, 0.224952, 0.405878, & 1.928171, 1.555918, 1.170087, 1.981173, 0.646925, 0.401005, & 0.062409, 0.052821, 0.688098, 0.602102, 0.532405, 0.474882, & 0.429369, 0.383054, 0.346506, 0.314418, 0.004437, 0.265666, & 0.000397, 0.007238, 0.210974, 0.193015, 0.177432, 0.162121, & 0.146896, 1.713368, 0.120574, 0.112173, 0.104353, 0.098615, & 0.090780, 0.083391, 123.552246, 9.029517, 0.784031, 0.716809, & 0.661231, 0.610714, 0.565651, 0.523992, 0.487660, 0.463550, & 0.413616, 3.826915, 0.010719, 0.341817, 18.832960, 0.010468, & 2.910268, 2.796480, 0.274536, 2.581883, 0.001383, 0.236916, & 0.225531, 0.001211, 0.207519, 0.199376, 0.192110, 0.183849, & 0.175914, 0.168002, 0.160798, 0.152815, 0.145771, 26.659403, & 1.316997, 0.000601, 1.195250, 26.014978, 6.664449, 6.291882, & 28.096128, 5.499512, 27.632641, 26.905106, 0.083544, 130.500748, & 20.512138, 0.074040, 3.930325, 0.068033, 0.064857, 0.061755, & 15.408296, 14.754303, 0.052450 /) DOUBLE PRECISION, DIMENSION(98), PARAMETER :: c = (/ & 0.000049, 0.000487, 0.002542, 0.002511, 0.003823, & 4.297983, -11.804902, 0.027014, 0.032557, 0.025576, 0.079712, & 0.126842, 0.139509, 0.145073, 0.155233, 0.154722, 0.146773, & 0.265954, 0.253614, 0.196255, 0.157765, 0.102473, 0.067744, & 0.065510, -0.147293, -0.304931, -0.936572, -2.762697, -3.254477, & -36.915829, -0.847395, 0.018726, -2.984117, -3.160982, -2.492088, & -2.810592, 1.139548, 1.140251, 1.131787, 1.124859, 1.123452, & 1.108770, 1.074784, 1.043992, 0.995452, 0.883099, 0.756603, & 0.603504, 0.333097, 0.119024, -0.290506, -0.806668, -0.448811, & -6.065902, -2.322802, -5.183497, -21.745489, -38.386017, -3.871068, & -57.189842, -45.973682, -17.452166, -31.586687, -43.505684, -26.851971, & -83.279831, -41.165253, -77.135223, -70.839813, -60.313812, -51.049416, & -49.719837, -44.119026, -32.864574, -37.412682, -43.677956, 4.018893, & 4.050394, -6.279078, 4.076478, 4.066939, 4.049824, 4.040914, & 4.046556, 3.995684, 4.020977, 4.003472, 3.981773, 3.939212, & 3.922533, 3.886066, 3.854444, 3.769391, 3.664200, 3.541160, & 3.390840, 3.213169, 3.005326 /) END MODULE Atomes-GNU-1.1.14/src/fortran/molecules.F90000066400000000000000000000254041457665371200202140ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file molecules.F90 !! @short Fragment(s) and molecule(s) analysis !! @author Sébastien Le Roux LOGICAL FUNCTION ADD_MOL(this_mol, MOL_ID, STEP_ID) USE PARAMETERS IMPLICIT NONE TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: MOL_ID, STEP_ID INTEGER :: AAA TYPE (MOL), POINTER :: NEW allocate(NEW, STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ADD_MOL"//CHAR(0), "Pointer: NEW"//CHAR(0)) ADD_MOL = .false. goto 001 endif NEW%MID = MOL_ID NEW%STEP = STEP_ID NEW%ATOMES = 0 allocate(NEW%BSP(NSP), STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ADD_MOL"//CHAR(0), "TABLE: NEW%BSP"//CHAR(0)) ADD_MOL = .false. goto 001 endif nullify(NEW%FIRST_AT) do AAA=1, NSP NEW%BSP(AAA) = 0 enddo nullify(NEW%NEXT) NEW%PREV => this_mol this_mol%NEXT => NEW this_mol => NEW ADD_MOL = .true. 001 continue END FUNCTION LOGICAL FUNCTION ADD_ATO(this_mol, ATOM_ID) USE PARAMETERS IMPLICIT NONE TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: ATOM_ID TYPE (AT), POINTER :: NEW allocate(NEW, STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: ADD_ATO"//CHAR(0), "POINTER: NEW"//CHAR(0)) ADD_ATO = .false. goto 001 endif NEW%IND = ATOM_ID NEW%PREV => this_mol%ATOM this_mol%ATOM%NEXT => NEW this_mol%ATOM => NEW ADD_ATO=.true. 001 continue END FUNCTION RECURSIVE SUBROUTINE SETMOL (this_mol, toglin, stmb, molcount, the_step, the_atom, the_id) USE PARAMETERS IMPLICIT NONE TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(INOUT) :: molcount, stmb INTEGER, INTENT(IN) :: the_step, the_atom, the_id INTEGER, DIMENSION(NA), INTENT(INOUT) :: toglin INTEGER :: MC, MD INTERFACE LOGICAL FUNCTION ADD_ATO(this_mol, ATOM_ID) USE PARAMETERS TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: ATOM_ID END FUNCTION END INTERFACE molcount=molcount+1 toglin(the_atom) = the_id this_mol%ATOMES = this_mol%ATOMES + 1 this_mol%BSP(LOT(the_atom)) = this_mol%BSP(LOT(the_atom)) + 1 stmb = stmb + 1 if (this_mol%ATOMES > 1) then if (.not. ADD_ATO (this_mol, the_atom)) then molcount=-1 goto 001 endif else allocate(this_mol%FIRST_AT, STAT=ERR) if (ERR .ne. 0) then !call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: SETMOL"//CHAR(0), "POINTER: this_mol%FIRST_AT"//CHAR(0)) molcount=-1 goto 001 endif !write (6, '("Adding first atom:: Mol= ",i4,", At= ",i4)') this_mol%MID, the_atom this_mol%FIRST_AT%IND = the_atom this_mol%ATOM => this_mol%FIRST_AT endif if (stmb .eq. NA) goto 002 if (molcount.eq.10000) goto 001 if (molcount.eq.-1) goto 001 do MC=1, CONTJ(the_atom, the_step) MD = VOISJ(MC,the_atom,the_step) if (toglin(MD).eq.0 .and. molcount.lt.10000) then call SETMOL (this_mol, toglin, stmb, molcount, the_step, VOISJ(MC,the_atom,the_step), the_id) endif if (stmb .eq. NA) goto 002 if (molcount.eq.10000) goto 001 if (molcount.eq.-1) goto 001 enddo 002 continue molcount=molcount-1 001 continue END SUBROUTINE SETMOL INTEGER (KIND=c_int) FUNCTION molecules (frag_and_mol, allbonds) BIND (C,NAME='molecules_') USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: frag_and_mol, allbonds INTEGER :: TOTMOL, MOLPS, MAXMOL INTEGER, DIMENSION(:), ALLOCATABLE :: ATMOL INTEGER, DIMENSION(:), ALLOCATABLE :: ATVS, MTMBS #ifdef OPENMP INTEGER :: NUMTH #endif INTERFACE LOGICAL FUNCTION ADD_MOL(this_mol, MOL_ID, STEP_ID) USE PARAMETERS TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(IN) :: MOL_ID, STEP_ID END FUNCTION RECURSIVE SUBROUTINE SETMOL (this_mol, toglin, stmb, molcount, the_step, the_atom, the_id) USE PARAMETERS TYPE (MOL), POINTER, INTENT(INOUT) :: this_mol INTEGER, INTENT(INOUT) :: molcount, stmb INTEGER, INTENT(IN) :: the_step, the_atom, the_id INTEGER, DIMENSION(NA), INTENT(INOUT) :: toglin END SUBROUTINE END INTERFACE TYPE (AT), POINTER :: TMPAT TYPE (MOL), ALLOCATABLE, TARGET :: THEMOL TYPE (MOL), POINTER :: TMPMOL if (allocated(FULLPOS)) deallocate(FULLPOS) k = 0 do i=1, NS do j=1, NA if (CONTJ(j,i) .eq. 0) k = k + 1 enddo enddo MAXMOL = k + allbonds/2; if (allocated(THEMOL)) deallocate(THEMOL) allocate(THEMOL, STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEMOL" ALC=.true. molecules = 0 goto 001 endif if (allocated(MTMBS)) deallocate(MTMBS) allocate(MTMBS(NS), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="MTMBS" ALC=.true. molecules = 0 goto 001 endif if (frag_and_mol .eq. 1) then call allocate_mol_data () endif molecules = 1 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () if (NS.lt.NUMTH) NUMTH=NS !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(i, j, k, l, m, n, o, ERR, TOGL, THEMOL, TMPMOL, & !$OMP& TOTMOL, MOLCOUNTER, TMBS, ATMOL, TMPAT, ATVS) & !$OMP& SHARED(NUMTH, frag_and_mol, NS, NA, NSP, LOT, MTMBS, CONTJ, VOISJ, ALC, ALC_TAB) #endif if (allocated(TOGL)) deallocate(TOGL) allocate(TOGL(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TOGL" ALC=.true. molecules = 0 #ifdef OPENMP goto 005 #else goto 001 #endif endif nullify(TMPAT) #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS #ifdef OPENMP if (molecules .eq.0) goto 004 #endif TOGL(:)=0 THEMOL%MID = 1 THEMOL%STEP = i THEMOL%ATOMES = 0 nullify(THEMOL%FIRST_AT) allocate(THEMOL%BSP(NSP), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THEMOL%BSP" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif do j=1, NSP THEMOL%BSP(j) = 0 enddo nullify(THEMOL%NEXT) nullify(THEMOL%PREV) TMBS=0 TOTMOL = 0 MTMBS(i)=0 MOLCOUNTER=0 TMPMOL => THEMOL n = 1 002 continue do j=n, NA if (MOLCOUNTER.eq.0 .and. TOGL(j).eq.0) then TOTMOL = TOTMOL + 1 if (TOTMOL > 1) then if (.not.ADD_MOL(TMPMOL, MTMBS(i)+1, i)) then ALC_TAB="ADD_MOL" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif endif MTMBS(i) = MTMBS(i) + 1 call SETMOL (TMPMOL, TOGL, TMBS, MOLCOUNTER, i, j, TOTMOL) if (MOLCOUNTER .lt. 0) then ALC_TAB="SETMOL" ALC=.true. #ifdef OPENMP goto 004 #else goto 001 #endif endif if (TMBS.eq.NA) goto 003 ! The 10000 iterations break required because of F90 limitations if (MOLCOUNTER.eq.10000) goto 002 MOLCOUNTER = 0 n = j goto 002 else if (MOLCOUNTER.gt.0 .and.TOGL(j).eq.TOTMOL) then do l=1, CONTJ(j,i) m = VOISJ(l,j,i) if (TOGL(m).eq.0) then MOLCOUNTER = 0 call SETMOL (TMPMOL, TOGL, TMBS, MOLCOUNTER, i, VOISJ(l,j,i), TOTMOL) if (MOLCOUNTER .lt. 0) then ALC_TAB="SETMOL" ALC=.true. #ifdef OPENMP goto 004 #else goto 001 #endif endif if (TMBS.eq.NA) goto 003 if (MOLCOUNTER.eq.10000) goto 002 MOLCOUNTER = 1 endif enddo endif enddo if (TMBS .lt. NA) then MOLCOUNTER = 0 goto 002 endif 003 continue if (frag_and_mol .eq. 1) then TMPMOL => THEMOL call allocate_mol_for_step (i, MTMBS(i)) do j=1, MTMBS(i) if (allocated(ATMOL)) deallocate(ATMOL) allocate(ATMOL(TMPMOL%ATOMES), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ATMOL" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif if (associated(TMPAT)) deallocate (TMPAT) allocate(TMPAT, STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TMPAT" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif TMPAT = TMPMOL%FIRST_AT do k=1, TMPMOL%ATOMES ATMOL(k) = TMPAT%IND if (k < TMPMOL%ATOMES) then TMPAT => TMPAT%NEXT deallocate (TMPAT%PREV) else deallocate (TMPAT) endif enddo call send_mol_details (TMPMOL%STEP, TMPMOL%MID, TMPMOL%ATOMES, NSP, TMPMOL%BSP, ATMOL) if (TMPMOL%ATOMES .gt. 1) then do l=1, TMPMOL%ATOMES m = ATMOL(l) n = CONTJ(m,TMPMOL%STEP) if (allocated(ATVS)) deallocate(ATVS) allocate(ATVS(n), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ATVS" ALC=.true. molecules = 0 #ifdef OPENMP goto 004 #else goto 001 #endif endif do o=1, n ATVS(o)= VOISJ(o,m,TMPMOL%STEP) enddo call send_mol_neighbors (TMPMOL%STEP, TMPMOL%MID, m, n, ATVS) enddo endif if (allocated(ATVS)) deallocate(ATVS) if (allocated(ATMOL)) deallocate(ATMOL) if (allocated(TMPMOL%BSP)) deallocate (TMPMOL%BSP) if (j .lt. MTMBS(i)) TMPMOL => TMPMOL%NEXT enddo call setup_molecules (i) endif call setup_fragments (i, TOGL) do while (TMPMOL%MID .gt. 1) TMPMOL => TMPMOL%PREV deallocate (TMPMOL%NEXT) enddo #ifdef OPENMP 004 continue #endif enddo #ifdef OPENMP !$OMP END DO NOWAIT 005 continue if (allocated(TOGL)) deallocate (TOGL) if (allocated(THEMOL)) deallocate(THEMOL) if (allocated(ATMOL)) deallocate(ATMOL) if (allocated(ATVS)) deallocate(ATVS) !$OMP END PARALLEL #else if (allocated(TOGL)) deallocate (TOGL) if (allocated(THEMOL)) deallocate(THEMOL) if (allocated(ATVS)) deallocate(ATVS) if (allocated(ATMOL)) deallocate(ATMOL) #endif MOLPS = 0 j = 0 do i=1, NS MOLPS = MOLPS + MTMBS(i) j = max(MTMBS(i), j) enddo call send_coord_opengl (2, 1, 0, 0, j, 1) call init_menu_fragmol (2) if (frag_and_mol .eq. 1) then call setup_menu_molecules () endif molecules=1 001 continue if (ALC) then call show_error ("Impossible to allocate memory !"//CHAR(0), & "Function: molecules"//CHAR(0), CHAR(9)//"Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(MTMBS)) deallocate(MTMBS) END FUNCTION MOLECULES Atomes-GNU-1.1.14/src/fortran/msd.F90000066400000000000000000000166411457665371200170120ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file msd.F90 !! @short MSD analysis !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION MSD (DLT, NDTS) BIND (C,NAME='msd_') ! ! Mean Square Displacement ! USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NDTS REAL (KIND=c_double), INTENT(IN) :: DLT DOUBLE PRECISION :: MASSTOT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MSDTAB #ifdef OPENMP INTEGER :: NUMTH #endif INTERFACE LOGICAL FUNCTION ALLOCMSD() END FUNCTION END INTERFACE ! Calcul du déplacement carré moyen if(.not.TRANSPO()) then MSD=0 goto 001 endif if (.not. ALLOCMSD()) then MSD=0 goto 001 endif MASSTOT=0.0d0 do j=1, NSP MASSTOT=MASSTOT+NBSPBS(j)*MASS(j) enddo #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () if (NS.lt.NUMTH) NUMTH=NS ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(RCm, RCm2, R2Cor, Dij, Rij, i, j, k, l, m, n, o, p, Vij) & !$OMP& SHARED(NUMTH, NS, NA, D2i, D2dir, DRIFT, LOT, MASS, MASSTOT, NDTS, DLT, NFULLPOS) !$OMP DO SCHEDULE(STATIC,NS-1/NUMTH) #endif do j=1, NS-1 do m=1, 3 RCm(m)=0.0d0 enddo do i=1, NA k=LOT(i) do m=1, 3 RCm(m)=RCm(m)+MASS(k)*NFULLPOS(i,m,j) enddo enddo do m=1, 3 RCm(m)=RCm(m)/MASSTOT enddo do k=j+1, NS do m=1, 3 RCm2(m)=0.0d0 enddo do i=1, NA n=LOT(i) do m=1, 3 RCm2(m)=RCm2(m)+MASS(n)*NFULLPOS(i,m,k) enddo enddo do m=1, 3 RCm2(m)=RCm2(m)/MASSTOT enddo do i=1, NA o=LOT(i) Dij=0.0d0 do m=1,3 Rij(m)=NFULLPOS(i,m,k)-NFULLPOS(i,m,j) R2Cor(m) = RCm2(m) - RCm(m) Vij = (Rij(m)-R2Cor(m))**2 #ifdef OPENMP !$OMP ATOMIC #endif D2dir(o,m,k-j)=D2dir(o,m,k-j)+Vij Dij=Dij+Vij enddo #ifdef OPENMP !$OMP ATOMIC #endif D2i(o,k-j)=D2i(o,k-j)+Dij #ifdef OPENMP !$OMP CRITICAL #endif p=4 do m=1, 2 do n=m+1, 3 D2dir(o,p,k-j)=D2dir(o,m,k-j)+D2dir(o,n,k-j) p=p+1 enddo enddo #ifdef OPENMP !$OMP END CRITICAL #endif enddo if (k .eq. j+1) then do i=1, NA o=LOT(i) do m=1,3 DRIFT(m,k)=DRIFT(m,k)+1e5*(NFULLPOS(i,m,k)-NFULLPOS(i,m,j))*MASS(o)/(NDTS*DLT) enddo enddo do m=1,3 DRIFT(m,k)=DRIFT(m,k)/MASSTOT enddo endif enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL #endif do k=1, NS-1 l=k+1 do m=1,3 RCm(m)=0.0d0 RCm2(m)=0.0d0 enddo do i=1, NA o=LOT(i) do m=1, 3 RCm(m)=RCm(m)+ MASS(o)*NFULLPOS(i,m,k) RCm2(m)=RCm2(m)+ MASS(o)*NFULLPOS(i,m,l) enddo enddo do m=1, 3 RCm(m)=RCm(m)/MASSTOT RCm2(m)=RCm2(m)/MASSTOT enddo do i=1, NA o=LOT(i) Dij=0.0d0 do m=1,3 R2Cor(m) = RCm2(m) - RCm(m) Rij(m)=NFULLPOS(i,m,l)-NFULLPOS(i,m,k) D2dirNAC(o,m,k)=(Rij(m)-R2Cor(m))**2 Dij=Dij+(Rij(m)-R2Cor(m))**2 COR(m,k)=COR(m,k)+R2Cor(m) enddo p=4 do m=1, 2 do n=m+1, 3 D2dirNAC(o,p,k)=D2dirNAC(o,m,k)+D2dirNAC(o,n,k) p=p+1 enddo enddo D2iNAC(o,k)=D2iNAC(o,k)+Dij enddo enddo do k=1, NS-1 do i=1, 6 do l=1, NSP D2dir(l,i,k)=D2dir(l,i,k)/(NS-k)/NBSPBS(l) D2dirNAC(l,i,k)=D2dirNAC(l,i,k)/NBSPBS(l) enddo enddo enddo do k=1, NS-1 do i=1, NSP D2i(i,k)=D2i(i,k)/(NS-k)/NBSPBS(i) D2iNAC(i,k)=D2iNAC(i,k)/NBSPBS(i) enddo enddo ! Evaluation of the diffusion constant D ! A minimum of dynamic time is needed for a 'physical' meaning of D ! so if the simulation time is big enough we compute D ! Here arbitrary we choose 30ps as time limit (30000 fs) ! We also decide to evaluate only if there is more than 1000 MD steps if (NS*NDTS*DLT .gt. 30000 .and. NS.gt.1000) then ! then take car to cut the first 1 ps of the simulation ! not to be anymore in the ballistic regime ! afterwards take care to cut the last 1 ps of the calculation ! usually the correlations are unclear in this zone of the MSD z=NS*NDTS*DLT z=z-1.0 k=INT(z/(NDTS*DLT)) l=INT(1.0/(NDTS*DLT)) do i=1, NSP Dcte(i)=(D2i(i,k)-D2i(i,l))/((k-l)*NDTS*DLT) enddo else do i=1, NSP Dcte(i)=0.d0 enddo endif allocate(MSDTAB(NS-1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: MSD"//CHAR(0), "Table: MSDTAB"//CHAR(0)) MSD=0 goto 001 endif k=0 do i=1, NSP do j=1, NS-1 MSDTAB(j)=D2i(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 do j=1, NS-1 MSDTAB(j)=D2iNAC(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo do i=1, NSP do l=1, 6 do j=1, NS-1 MSDTAB(j)=D2dir(i,l,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo enddo do i=1, NSP do l=1, 6 do j=1, NS-1 MSDTAB(j)=D2dirNAC(i,l,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo enddo do i=1, 3 do j=1, NS-1 MSDTAB(j)=COR(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo do i=1, 3 do j=1, NS-1 MSDTAB(j)=DRIFT(i,j) enddo call save_curve (NS-1, MSDTAB, k, IDMSD) k=k+1 enddo MSD=1 001 continue if (allocated(NFULLPOS)) deallocate(NFULLPOS) call DEALLOCMSD CONTAINS LOGICAL FUNCTION TRANSPO() USE PARAMETERS if (allocated(NFULLPOS)) deallocate(NFULLPOS) allocate(NFULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: TRANSPO"//CHAR(0), "Table: NFULLPOS"//CHAR(0)) TRANSPO=.false. goto 001 endif if (allocated(POA)) deallocate(POA) allocate(POA(NA,3), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: TRANSPO"//CHAR(0), "Table: POA"//CHAR(0)) TRANSPO=.false. goto 001 endif if (allocated(POB)) deallocate(POB) allocate(POB(NA,3), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: TRANSPO"//CHAR(0), "Table: POB"//CHAR(0)) TRANSPO=.false. goto 001 endif do NOA=1, NS do NOB=1, NA do NOC=1, 3 NFULLPOS(NOB,NOC,NOA) = FULLPOS(NOB,NOC,NOA) enddo enddo enddo do NOA=1, NA do NOB=1, 3 POA(NOA,NOB)=NFULLPOS(NOA,NOB,1) enddo enddo do NOC=2, NS do NOA=1, NA do NOB=1, 3 POB(NOA,NOB)=NFULLPOS(NOA,NOB,NOC) enddo if (NCELLS .gt. 1) then call CALCRIJ(NOA, NOA, -1, -1, NOC-1) else call CALCRIJ(NOA, NOA, -1, -1, 1) endif do NOB=1, 3 POA(NOA,NOB)=POA(NOA,NOB)+Rij(NOB) NFULLPOS(NOA,NOB,NOC)=POA(NOA,NOB) enddo enddo enddo TRANSPO = .true. 001 continue if (allocated(POA)) deallocate(POA) if (allocated(POB)) deallocate(POB) END FUNCTION END FUNCTION Atomes-GNU-1.1.14/src/fortran/parameters.F90000066400000000000000000000624621457665371200203740ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file parameters.F90 !! @short Global variable declarations !! @author Sébastien Le Roux !################################################################ ! This is the atomes code main include file which contains: ! - Variables ! - Structures ! used all along the code and classified as follow: ! ! - LOGICAL type variables ! - LOGICAL (:) type variables ! - LOGICAL (:,:) type variables ! ! - INTEGER type variables ! - INTEGER(:) type variables ! - INTEGER(:,:) type variables ! - INTEGER(:,:,:) type variables ! - INTEGER(:,:,:,:) type variables ! - INTEGER(:,:,:,:,:) type variables ! ! - CHARACTER type variables ! - CHARACTER(:) type variables ! - CHARACTER(:,:) type variables ! - CHARACTER(:,:,:) type variables ! ! - DOUBLE PRECISION type variables ! ! - DOUBLE PRECISION type variables ! - DOUBLE PRECISION(:) type variables ! - DOUBLE PRECISION(:,:) type variables ! - DOUBLE PRECISION(:,:,:) type variables ! - DOUBLE PRECISION(:,:,:,:) type variables ! ! - STRUCTURES definitions ! ! - MPI // Only variables ! ! furthermore inside this first selection variables ! have been sorted by routines when necessary/possible !################################################################ MODULE PARAMETERS USE, INTRINSIC :: iso_c_binding IMPLICIT NONE !#################################### LOGICAL VARIABLES ####################################! LOGICAL :: PBC=.false. ! 1/0 Enable or disable periodic boundary conditions LOGICAL :: FRAC=.false. ! 1/0 Lattice relatives or DOUBLE PRECISIONs positions for atoms LOGICAL :: NOHP=.false. ! 1/0 Enable/disable homopolar bonds in connectivty LOGICAL :: ABAB=.false. ! 1/0 Enable or disable only ABAB rings if more than 3 chemical species LOGICAL :: AAAA=.false. ! 1/0 Enable or disable only AAAA chains LOGICAL :: ACAC=.false. ! 1/0 Enable or disable only ABAB chains LOGICAL :: ISOLATED=.false. ! 1/0 1-2-2-1 chains or N-2-2-N N=1,3 ... chains LOGICAL :: TOMO=.false. ! 1/0 Homopolar or no homopolar bonds in the rings LOGICAL :: CALC_RINGS=.false. ! 1/0 Compute ring statistics LOGICAL :: CALC_R0=.false. ! 1/0 Find all existing rings in the box LOGICAL :: CALC_R1=.false. ! 1/0 Shortest Path analysis LOGICAL :: CALC_R2=.false. ! 1/0 King's analysis LOGICAL :: CALC_R3=.false. ! 1/0 SP + Homo LOGICAL :: CALC_R4=.false. ! 1/0 King's + Homo LOGICAL :: CALC_PRINGS=.false. ! 1/0 Compute primitive ring statistics LOGICAL :: CALC_STRINGS=.false. ! 1/0 Compute strongs ring statistics LOGICAL :: RING_P1=.false. ! 1/0 Compute first part of detailed ring properties LOGICAL :: RING_P2=.false. ! 1/0 Compute second part of detailed ring properties LOGICAL :: RING_P3=.false. ! 1/0 Compute third part of detailed ring properties LOGICAL :: RING_P4=.false. ! 1/0 Compute fourth part of detailed ring properties LOGICAL :: RING_P5=.false. ! 1/0 Compute fifth part of detailed ring properties LOGICAL :: OVERALL_CUBIC=.false. ! 1/0 Cubic a=b=c, 90.0, 90.0, 90.0 #ifdef OPENMP LOGICAL :: ALL_ATOMS=.false. ! 1/0 Force OpenMP on ATOMS #endif ! *rings*.f90 ! LOGICAL :: FACTATRING=.false. ! 1/0 Calculate atomic ring factor using the RN variable (thesis S. LE ROUX) LOGICAL :: FACTATPNA=.false. ! 1/0 Calculate atomic ring factor using the PN variable (thesis S. LE ROUX) LOGICAL :: FACTATRMAX=.false. ! 1/0 Calculate atomic ring factor using the Pmax var (thesis S. LE ROUX) LOGICAL :: FACTATRMIN=.false. ! 1/0 Calculate atomic ring factor using the Pmin var (thesis S. LE ROUX) LOGICAL :: RUNSEARCH ! 1/0 Run ring statistics in the case of 3 or more species LOGICAL :: ADDSPEC ! 1/0 Add to chain in the ring case of 3 or more species LOGICAL :: DOAMPAT=.false. ! 1/0 if CALC_R1,R2,R3 or R4 to known if there are paths > TAILLD LOGICAL :: SAUT, SSAUT LOGICAL :: FOUND LOGICAL :: PATHOUT LOGICAL :: FIRR, PIRR LOGICAL :: HOMO LOGICAL :: DOSEARCH LOGICAL :: TBR=.false. LOGICAL :: ALC=.false. LOGICAL :: NO_HOMO=.false. LOGICAL :: ALLRINGS=.false. !##########################################################################################! !###################################### INTEGER VARIABLES #####################################! !***************************************** Misc *******************************************! INTEGER :: h=0, i=0, j=0, k=0, l=0, m=0, n=0, o=0, p=0, r=0, t=0, u=0, v=0 INTEGER :: NOA, NOB, NOC, NOD, NOE INTEGER :: COUNTER, RATE_COUNT, MAX_COUNT INTEGER :: NSUB, NTSUB, TSUB, ERR INTEGER :: NL, NC, NSI, NSJ INTEGER :: NUMBER_OF_I INTEGER :: DTV INTEGER :: NBONDS, ANBONDS INTEGER :: NDX, NBX, IDR INTEGER :: GR_INDEX INTEGER :: SUM_INDEX INTEGER :: ANG_I INTEGER :: FINISH, INDEXMSF INTEGER :: Id1, Id2, Id, GtBsize INTEGER :: SPIRR INTEGER :: L_TOT, LA_TOT INTEGER :: NUMA, SC INTEGER :: PATH, NNP, NNA INTEGER :: LOA, LOB, LOC INTEGER :: MAXAT, MINAT INTEGER :: MAXST, MINST INTEGER :: GRNUM, SQNUM, SKNUM, GQNUM, BDNUM, ANNUM, RINUM, CHNUM, SHNUM, MSNUM INTEGER :: ab, abc !*************************************** Defined ******************************************! INTEGER :: NA, NUMBER_OF_A ! Number of atom in the box INTEGER :: NSP, NSP_BY_STEP ! Number of species INTEGER :: NS, NOS, NSTP ! Number of DM steps = Number of configurations INTEGER :: NSBG ! Number of step between each geomerty INTEGER :: TAILLR, TAILLD ! Depth for rings hunt INTEGER :: TAILLE, TAILLH, TAILLT ! Depth for rings hunt INTEGER :: TAILLC ! Depth for chains hunt INTEGER :: TLT, NTLT INTEGER :: NUMBER_OF_QMOD ! Number of Qvect modulus INTEGER :: NUMBER_OF_QVECT ! Number of Qvectors INTEGER :: LTLT ! Ring's hunt species INTEGER :: NCELLS ! Number of lattice 1 or MD steps if NPT calculation INTEGER :: IDGR=0 INTEGER :: IDSQ=1 INTEGER :: IDSK=2 INTEGER :: IDGRFFT=3 INTEGER :: IDBD=4 INTEGER :: IDAN=5 INTEGER :: IDRI=6 INTEGER :: IDCH=7 INTEGER :: IDSP=8 INTEGER :: IDMSD=9 INTEGER :: MAXN=20 ! The maximun number of neighbors an atom can have ! *rings*.f90 ! INTEGER :: MOLATS INTEGER :: MOLSTEP INTEGER :: MOLCOUNTER INTEGER :: TMBS !##########################################################################################! !#################################### INTEGER(:) VARIABLES #####################################! !************************************* defined ********************************************! INTEGER, DIMENSION(:), ALLOCATABLE :: LOT INTEGER, DIMENSION(:), ALLOCATABLE :: NBSPBS ! Number of atom of species=index_1 ! prepdata.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: ATOMID ! dmtx.f90 ! INTEGER, DIMENSION(3) :: isize ! sk.f90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: degeneracy ! molecuels.f90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: MIBS ! bonds.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: TOT_GSA INTEGER, DIMENSION(:), ALLOCATABLE :: NTETRA INTEGER, DIMENSION(:), ALLOCATABLE :: LP_GEOM INTEGER, DIMENSION(:), ALLOCATABLE :: TOGL, TIGL INTEGER, DIMENSION(:), ALLOCATABLE :: LGSA, NGSA ! *rings*.f90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: RPAT, CPAT INTEGER, DIMENSION(:), ALLOCATABLE :: MOL_ATOMS ! alloc*rings.F90 - rings.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: RES_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: APNA, SPNA INTEGER, DIMENSION(:), ALLOCATABLE :: VALID ! primrings.F90 ! INTEGER, DIMENSION(:), ALLOCATABLE :: QUEUE, RINGSTAT INTEGER, DIMENSION(:), ALLOCATABLE :: NPRING, MATDIST !#################################### INTEGER (:,:) VARIABLES ###################################! ! bonds.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: LT_GEOM INTEGER, DIMENSION(:,:), ALLOCATABLE :: GEOM_LA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TOT_GEOMSA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TETRA ! molecules.f90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: TIIDA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TISP ! dmtx.f90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: CONTJ ! escs.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: CORT INTEGER, DIMENSION(:,:), ALLOCATABLE :: EDGET INTEGER, DIMENSION(:,:), ALLOCATABLE :: DEFT INTEGER, DIMENSION(:,:), ALLOCATABLE :: CORTA INTEGER, DIMENSION(:,:), ALLOCATABLE :: EDGETA INTEGER, DIMENSION(:,:), ALLOCATABLE :: DEFTA INTEGER, DIMENSION(:,:), ALLOCATABLE :: TDA ! alloc*rings.F90 - rings.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE, TARGET :: INDR INTEGER, DIMENSION(:,:), ALLOCATABLE, TARGET :: NRING INTEGER, DIMENSION(:,:), ALLOCATABLE :: VPAT INTEGER, DIMENSION(:,:), ALLOCATABLE :: INDRAT, NIRRAT, NIRR INTEGER, DIMENSION(:,:), ALLOCATABLE :: ATRMSX, ATRMSN INTEGER, DIMENSION(:,:), ALLOCATABLE :: AMPAT, ATRMAX, ATRMIN INTEGER, DIMENSION(:,:), ALLOCATABLE :: MAXPNA, MINPNA ! primrings.F90 ! INTEGER, DIMENSION(:,:), ALLOCATABLE :: PRING INTEGER, DIMENSION(:,:), ALLOCATABLE :: QUERNG, VREF INTEGER, DIMENSION(:,:), ALLOCATABLE :: PRINGORD !##########################################################################################! !#################################### INTEGER VARIABLES #################################! ! bonds.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: LA_COUNT ! escs.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: CORNER INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: EDGE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: DEF INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: CORNERA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: EDGEA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: DEFA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: TDSA ! dmtx.f90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: VOISJ ! bonds.f90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: STATBD ! allocrings.F90 - rings.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: INDRING, INDSRING, LIRR INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: ATRING, ATPNA, MATPNA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: STPNA INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: PNA, SNA INTEGER, DIMENSION(:,:,:), ALLOCATABLE, TARGET :: RINGSAVED ! primrings.F90 ! INTEGER, DIMENSION(:,:,:), ALLOCATABLE, TARGET :: SRINGSAVED !##########################################################################################! !################################## INTEGER(:,:,:,:) VARIABLES #################################! ! angles.f90 ! ! allocrings.F90 - rings.F90 ! INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: RINGORD ! allocprims.f90 - primrings.F90 ! INTEGER, DIMENSION(:,:,:,:), ALLOCATABLE, TARGET :: SRINGORD !##########################################################################################! !###################################### CHARACTER VARIABLES ####################################! ! Misc ! CHARACTER (LEN=15) :: sdate, stime, szone ! Starting date and time CHARACTER (LEN=15) :: edate, etime, ezone ! Ending date and time CHARACTER (LEN=9) :: PROGNAME="ATOMES" ! misc ! CHARACTER (LEN=2) :: CHOOSE CHARACTER (LEN=2) :: A1, A2 CHARACTER (LEN=2) :: ATOT CHARACTER (LEN=20) :: NOM_TMP CHARACTER (LEN=15) :: NTMP, NTMP2, NTMP3, Nstep, Nomx, Nomy CHARACTER (LEN=15) :: Nom, Nom1, Nom2, Nom3, Nom4 CHARACTER (LEN=40) :: NomSys, NomS CHARACTER (LEN=16) :: SPIND CHARACTER (LEN=20) :: ALC_TAB !##########################################################################################! !##################################### CHARACTER (:) VARIABLES ###################################! ! Misc ! CHARACTER (LEN=2), DIMENSION(:), ALLOCATABLE :: TL, FTAB ! Label of species=index_1 CHARACTER (LEN=2), DIMENSION(:), ALLOCATABLE :: TAB_OF_TYPE ! List of atom by name(species)=indx_1, by DM step=indx_2 CHARACTER (LEN=2), DIMENSION(:), ALLOCATABLE :: LABEL ! Label of species=index in input ! prepdata.F90 ! CHARACTER (LEN=15), DIMENSION(:), ALLOCATABLE :: ELEMID !##########################################################################################! !#################################### CHARACTER (:,:) VARIABLES ##################################! CHARACTER (LEN=12), DIMENSION(:,:), ALLOCATABLE :: LISTE_GEOMS !##########################################################################################! !################################### CHARACTER (:,:,:) VARIABLES #################################! ! CHARACTER (LEN=12), DIMENSION(:,:,:), ALLOCATABLE :: LGEO CHARACTER (LEN=12), DIMENSION(:,:,:), ALLOCATABLE :: LGEO !##########################################################################################! !###################################### DOUBLE PRECISION VARIABLES ####################################! DOUBLE PRECISION :: LTEMP !##########################################################################################! !###################################### DOUBLE PRECISION VARIABLES ##################################! ! Misc ! DOUBLE PRECISION :: w=0.0d0, x=0.0d0, y=0.0d0, z=0.0d0 DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) DOUBLE PRECISION, PARAMETER :: AVOGADRO=6.02214179d0 DOUBLE PRECISION, PARAMETER :: ANGTOBOHR=0.52917721 DOUBLE PRECISION :: p1, p2, p3 DOUBLE PRECISION :: TIME_TOT, tstat DOUBLE PRECISION :: MBOX DOUBLE PRECISION :: BOXS2 DOUBLE PRECISION :: BASE DOUBLE PRECISION :: TETA DOUBLE PRECISION :: DC DOUBLE PRECISION :: DELTA_ANG DOUBLE PRECISION :: MEANVOL DOUBLE PRECISION :: TOTAL_DENSITY, REAL_DENSITY DOUBLE PRECISION :: FREEVOL, ECFREEV DOUBLE PRECISION :: Dij, Dil, Vij DOUBLE PRECISION :: Gr_cutoff DOUBLE PRECISION :: CUTF !DOUBLE PRECISION :: A2A, B2B, C2C, AAA, BBB, CCC ! sq.f90 ! DOUBLE PRECISION :: Phi, Sinus_phi ! sk.f90 ! DOUBLE PRECISION :: NORM_TOT, DELTA_Q DOUBLE PRECISION :: Rmax, Sinus_Fact_Rmax, Fact_Rmax DOUBLE PRECISION :: SIGMA_LISS DOUBLE PRECISION :: qvmod, qvmax, qvmin !##########################################################################################! !#################################### DOUBLE PRECISION (:) VARIABLES ##################################! ! Misc ! DOUBLE PRECISION, DIMENSION(3) :: Rij, Ril, Rim, Dab, VAR ! Position vector DOUBLE PRECISION, DIMENSION(3) :: R2ij, R2Cor, RCm, RCm2 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: S_LENGTH DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MASS, M_SS DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RVDW, R_DW DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Dcte ! Diffusion Cte DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: DIST_IJ, DIST_JI DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: CMOY, Xi DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MTABL ! dmtx.f90 ! DOUBLE PRECISION, DIMENSION(3) :: CUTFV DOUBLE PRECISION, DIMENSION(3) :: pmin, pmax ! bonds.F90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MAC DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: SA_COUNT ! escs.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: EABL, CABL, DABL DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ETABL, CTABL, DTABL DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ECTABL, TDTABL ! gr.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: R_POINT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: GRTAB DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: GrTOT, GgrTOT ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Drn, Trn ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XGrTOT, XGgrTOT ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Drx, Trx ! Total RDF DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: SHELL_VOL ! Shell volume as a function of d=(index-0.5)DELTA ! sq.f90 ! DOUBLE PRECISION, DIMENSION(2) :: Gd, Gn, Go, C_Box DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: NSCATTL ! Neutron Scattering Length of species=index DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XSCATTL ! X-ray Scattering Length of species=index DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: S, XS ! Total structure factor \\ Go=f(G(r)) DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Gr_T DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: Q_POINT, K_POINT ! sk.f90 - utils.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: FNBSPBS DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: modq DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: qvectx, qvecty, qvectz DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: cij, sik ! grfft.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: GFFT, DFFT, R_PFFT, TDFFT ! resrings.f90 ! DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MOYPUR, MOYRED DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MOYPAT, MOYRAT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: ECTYPE, ECTYP, ECTYPAT, ECTAT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: IRRED, RED DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: REDAT, IRRAT DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: TOTPSTEP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RNAMAX, RNAMIN DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: EVMAX, EVMIN !##########################################################################################! !################################## DOUBLE PRECISION (:,:) VARIABLES ##################################! ! Misc ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: EPNA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: POA, POB ! Atm=indx_1, coord=indx_2(1=x, 2=y, 3=z) ! bonds.F90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: MA_COUNT DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: NUM_GSA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: Gr_CUT, Gr_TMP ! fzbt.f90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: BTij ! Bathia-Thornton Partial g(r)/s(q) ! escs.F90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ETYPE DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: CTYPE DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: DETYPE DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ETYPEA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: CTYPEA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: DETYPEA DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ETDA ! sk.f90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: qvect ! msd.f90 ! DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: DRIFT, COR DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: D2i, D2iNAC !##########################################################################################! !################################# DOUBLE PRECISION (:,:,:) VARIABLES #################################! ! Misc ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: FULLPOS DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: FULLVEL DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: NFULLPOS, NFPOS DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: ECART_TYPE ! gr.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Gr_ij ! Average of the RDF on all the MD run DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Ggr_ij ! Average of the RDF on all the MD run DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Dn_ij ! Average of the Dn on all the MD run ! grfft.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: GQBT ! sq.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Sij, Spij ! Partial structure factor DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: Ss_ij ! Partial structure factor ! fzbt.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: FZSij ! msd.f90 ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: D2ij, D2ijNAC, D2dir, D2dirNAC DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: CORNAC !##########################################################################################! !################################ DOUBLE PRECISION (:,:,:,:) VARIABLES ################################! ! gr.F90 ! DOUBLE PRECISION, DIMENSION(:,:,:,:), ALLOCATABLE :: Gij ! RDF distance=index_1, atom_a=index_2, atom_b=index_3, step=index_4 DOUBLE PRECISION, DIMENSION(:,:,:,:), ALLOCATABLE :: Dn ! Dn distance=index_1, atom_a=index_2, atom_b=index_3, step=index_4 !##########################################################################################! !################################ STRUCTURES VARIABLES Definition ###############################! !TYPE ATOM ! ! INTEGER :: INDICE ! ! INTEGER :: ELEMENT ! ! INTEGER :: NEIGHBOR ! Atom structure definition ! DOUBLE PRECISION :: X, Y, Z ! ! TYPE (ATOM), POINTER :: PAST ! ! TYPE (ATOM), POINTER :: NEXT ! !END TYPE ATOM ! !TYPE MOLECULE ! ! INTEGER :: INDICE ! ! INTEGER :: ATOMS ! ! TYPE (ATOM), POINTER :: FIRST_ATOM ! ! TYPE (ATOM), POINTER :: LAST_ATOM ! Molecule structure definition ! TYPE (MOLECULE), POINTER :: NEXT_MOL ! ! TYPE (MOLECULE), POINTER :: PAST_MOL ! !END TYPE MOLECULE !TYPE MODEL ! ! INTEGER :: ATOMS ! ! INTEGER :: MOLECULES ! Model structure definition ! TYPE (MOLECULE), POINTER :: FIRST_MOL ! ! TYPE (MOLECULE), POINTER :: LAST_MOL ! !END TYPE MODEL ! !TYPE (ATOM), POINTER :: AT ! !TYPE (MOLECULE), POINTER :: MOL ! !TYPE (MODEL), POINTER :: MODL ! TYPE AT INTEGER :: IND TYPE (AT), POINTER :: NEXT TYPE (AT), POINTER :: PREV END TYPE AT TYPE MOL INTEGER :: MID INTEGER :: STEP INTEGER :: ATOMES INTEGER, DIMENSION(:), ALLOCATABLE :: BSP TYPE (AT), POINTER :: FIRST_AT TYPE (AT), POINTER :: ATOM TYPE (MOL), POINTER :: NEXT TYPE (MOL), POINTER :: PREV END TYPE MOL TYPE RING ! INTEGER :: ATOM ! INTEGER :: NEIGHBOR ! Ring structure definition INTEGER :: SPEC ! TYPE (RING), POINTER :: PAST ! used in the ring search subroutines TYPE (RING), POINTER :: NEXT ! END TYPE RING ! TYPE PIXEL ! INTEGER :: NEIGHBOR ! Pixel structure definition INTEGER :: ATOMS ! INTEGER, DIMENSION(:), ALLOCATABLE :: ATOM_ID ! Note: MAXN*10 vs. ALL for Angles LOGICAL :: TOCHECK ! LOGICAL :: CHECKED ! INTEGER, DIMENSION(27) :: IDNEIGH ! END TYPE PIXEL TYPE (PIXEL), DIMENSION(:), ALLOCATABLE :: THEPIX, TESTPIX TYPE LATTICE LOGICAL :: GLASS=.false. ! 1/0 if the structure is 'cubic like' (90/90/90) LOGICAL :: CUBIC=.false. ! 1/0 if the structure is 'cubic' (90/90/90, a=b=c) DOUBLE PRECISION :: VOLUME DOUBLE PRECISION, DIMENSION(3) :: modv ! Lattice parameters DOUBLE PRECISION :: minv, maxv ! Min, max a,b, c DOUBLE PRECISION, DIMENSION(3) :: modr ! Reciprocal lattice parameters DOUBLE PRECISION :: minr, maxr ! Min, max, ra, rb, rc DOUBLE PRECISION, DIMENSION(3,3) :: lvect ! Lattice vectors DOUBLE PRECISION, DIMENSION(3,3) :: lrecp ! Reciprocal lattice vectors DOUBLE PRECISION, DIMENSION(3,3) :: fractocart, carttofrac ! Conversion matrix END TYPE LATTICE TYPE (LATTICE), DIMENSION(:), ALLOCATABLE, TARGET :: THE_BOX TYPE (LATTICE), POINTER :: NBOX !##########################################################################################! !##########################################################################################! END MODULE PARAMETERS ! ######################################## EOF ###########################################! Atomes-GNU-1.1.14/src/fortran/pdb.F90000066400000000000000000000204101457665371200167610ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file pdb.F90 !! @short Unused: read atomic coordinates in PDB format - old version !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_pdb (pdb_f, lpdb) BIND (C,NAME='read_pdb_') ! ! Lecture of atom types and coordinates - pdb files ! USE PARAMETERS USE MENDELEIEV IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: lpdb INTEGER, DIMENSION(:), ALLOCATABLE :: LINEA LOGICAL :: with_cell = .false. CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: pdb_f CHARACTER (LEN=lpdb) :: pdb_file CHARACTER (LEN=4) :: ANAME CHARACTER (LEN=6) :: RID INTEGER :: ASI CHARACTER (LEN=1) :: ALB CHARACTER (LEN=3) :: ACC CHARACTER (LEN=1) :: CIC INTEGER :: RSN CHARACTER (LEN=1) :: IC DOUBLE PRECISION :: OCA DOUBLE PRECISION THF CHARACTER (LEN=2) :: SYM CHARACTER (LEN=2) :: CHA REAL, DIMENSION(6) :: CELL CHARACTER (LEN=11) :: SPG INTEGER :: ZVAL do i=1, lpdb pdb_file(i:i) = pdb_f(i) enddo CELL(:) = 0.0 inquire (file=pdb_file, exist=isok) if (isok) then open (unit=20, file=pdb_file, action='read', status='old') NS=1 NA=0 l = 0 do while (.true.) read (20, '(A6)', end=999) RID l = l+1 if (RID.eq.'HETATM' .or. RID.eq.'ATOM ') NA=NA+1 if (RID.eq. 'CRYST1') with_cell = .true. enddo 999 continue if (NA .ne. 0) then rewind(20) if (allocated(LINEA)) deallocate(LINEA) allocate (LINEA(l), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_pdb"//CHAR(0), "Table: LINEA"//CHAR(0)) endif l=0 do while (.true.) read (20, '(A6)', end=888) RID l = l+1 LINEA(l)=0 if (RID.eq.'HETATM' .or. RID.eq.'ATOM ') LINEA(l) = 1 if (RID.eq.'CRYST1') LINEA(l) = 2 enddo 888 continue rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_pdb"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_pdb"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NS m = 0 do j=1, l-1 if (LINEA(j) .eq. 1) then m = m+1 read (20, 001) RID, & ASI, & ANAME, & ALB, & ACC, & CIC, & RSN, & IC, & FULLPOS(m,1,i), & FULLPOS(m,2,i), & FULLPOS(m,3,i), & OCA, & THF, & SYM, & CHA ! write (6, '("m= ",i4," x= ",f15.10,", y= ",f15.10,", z= ",f15.10)') m, FULLPOS(m,1,i),FULLPOS(m,2,i),FULLPOS(m,3,i) TAB_OF_TYPE(m)=ATOMPDB(j, SYM) else if (LINEA(j) .eq. 2) then read (20, 002) RID, & CELL(1), & CELL(2), & CELL(3), & CELL(4), & CELL(5), & CELL(6), & SPG, & ZVAL else read (20, *) endif enddo enddo if (allocated(LINEA)) deallocate(LINEA) if (with_cell) then call cell_data_from_pdb (CELL(1), CELL(2), CELL(3), CELL(4), CELL(5), CELL(6)) endif read_pdb=0 else read_pdb=2 endif close(20) else read_pdb=1 endif 001 FORMAT (A6,I5,1X,A4,A1,A3,1X,A1,I4,A1,3X,F8.3,F8.3,F8.3,F6.2,F6.2,10X,A2,A2) 002 FORMAT (A6,F9.3,F9.3,F9.3,F7.2,F7.2,F7.2,1X,A11,I4) ! ! PDB format v3.30 ! ! HETATM / ATOM keyword ! !--------------------------------------------------------------------------- !Field | Column | FORTRAN | ! No. | range | format | Description !--------------------------------------------------------------------------- ! 1. | 1 - 6 | A6 | "ATOM " or "HETATM" ! 2. | 7 - 11 | I5 | Atom serial number ! - | 12 - 12 | 1X | Blank ! 3. | 13 - 16 | A4 | Atom name ! 4. | 17 - 17 | A1 | Alternative location code (if any) ! 5. | 18 - 20 | A3 | Standard 3-letter amino acid code for residue ! - | 21 - 21 | 1X | Blank ! 6. | 22 - 22 | A1 | Chain identifier code ! 7. | 23 - 26 | I4 | Residue sequence number ! 8. | 27 - 27 | A1 | Insertion code (if any) ! - | 28 - 30 | 3X | Blank ! 9. | 31 - 38 | F8.3 | Atom's x-coordinate ! 10. | 39 - 46 | F8.3 | Atom's y-coordinate ! 11. | 47 - 54 | F8.3 | Atom's z-coordinate ! 12. | 55 - 60 | F6.2 | Occupancy value for atom ! 13. | 61 - 66 | F6.2 | B-value (thermal factor) ! - | 67 - 76 | 10X | Blank ! 14. | 77 - 78 | A2 | Element symbol ! 15. | 79 - 80 | A2 | Charge !--------------------------------------------------------------------------- ! CRYST1 keyword ! !--------------------------------------------------------------------------- !Field | Column | FORTRAN | ! No. | range | format | Description !--------------------------------------------------------------------------- ! 1. | 1 - 6 | A6 | "CRYST1" ! 2. | 7 - 15 | F9.3 | a ! 3. | 16 - 24 | F9.3 | b ! 4. | 25 - 33 | F9.3 | c ! 5. | 34 - 40 | F7.2 | alpha ! 6. | 41 - 47 | F7.2 | beta ! 7. | 48 - 54 | F7.2 | gamma ! - | 55 - 55 | 1X | Blank ! 8. | 56 - 66 | A11 | Space group ! 9. | 67 - 70 | I4 | z !--------------------------------------------------------------------------- CONTAINS CHARACTER (LEN=2) FUNCTION ATOMPDB(LIN, PDBSTR) INTEGER :: PA, PB CHARACTER (LEN=2), INTENT(IN) :: PDBSTR INTEGER, INTENT(IN) :: LIN ATOMPDB=' ' PB=0 do PA=1, 2 if (PDBSTR(PA:PA) .ne. ' ') then PB= PB+1 ATOMPDB(PB:PB)=PDBSTR(PA:PA) endif enddo if (PB .eq. 2) then if (ATOMPDB(2:2).eq.'A') ATOMPDB(2:2)='a' if (ATOMPDB(2:2).eq.'B') ATOMPDB(2:2)='b' if (ATOMPDB(2:2).eq.'C') ATOMPDB(2:2)='c' if (ATOMPDB(2:2).eq.'D') ATOMPDB(2:2)='d' if (ATOMPDB(2:2).eq.'E') ATOMPDB(2:2)='e' if (ATOMPDB(2:2).eq.'F') ATOMPDB(2:2)='f' if (ATOMPDB(2:2).eq.'G') ATOMPDB(2:2)='g' if (ATOMPDB(2:2).eq.'H') ATOMPDB(2:2)='h' if (ATOMPDB(2:2).eq.'I') ATOMPDB(2:2)='i' if (ATOMPDB(2:2).eq.'J') ATOMPDB(2:2)='j' if (ATOMPDB(2:2).eq.'K') ATOMPDB(2:2)='k' if (ATOMPDB(2:2).eq.'L') ATOMPDB(2:2)='l' if (ATOMPDB(2:2).eq.'M') ATOMPDB(2:2)='m' if (ATOMPDB(2:2).eq.'N') ATOMPDB(2:2)='n' if (ATOMPDB(2:2).eq.'O') ATOMPDB(2:2)='o' if (ATOMPDB(2:2).eq.'P') ATOMPDB(2:2)='p' if (ATOMPDB(2:2).eq.'Q') ATOMPDB(2:2)='q' if (ATOMPDB(2:2).eq.'R') ATOMPDB(2:2)='r' if (ATOMPDB(2:2).eq.'S') ATOMPDB(2:2)='s' if (ATOMPDB(2:2).eq.'T') ATOMPDB(2:2)='t' if (ATOMPDB(2:2).eq.'U') ATOMPDB(2:2)='u' if (ATOMPDB(2:2).eq.'V') ATOMPDB(2:2)='v' if (ATOMPDB(2:2).eq.'W') ATOMPDB(2:2)='w' if (ATOMPDB(2:2).eq.'X') ATOMPDB(2:2)='x' if (ATOMPDB(2:2).eq.'Y') ATOMPDB(2:2)='y' if (ATOMPDB(2:2).eq.'Z') ATOMPDB(2:2)='z' endif PB=0 do PA=1, MAXE if (ATSYM(PA) .eq. ATOMPDB) then PB=1 endif enddo if (PB .eq. 0) then write (6, '("Warning reading PDB file: atom symbol not found line: ",i10)') LIN endif END FUNCTION END FUNCTION Atomes-GNU-1.1.14/src/fortran/prepdata.F90000066400000000000000000000252071457665371200200250ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file prepdata.F90 !! @short First level analysis of atomic coordinates !! @author Sébastien Le Roux #if defined (HAVE_CONFIG_H) # include #endif INTEGER (KIND=c_int) FUNCTION alloc_data (N1, N2, N3) BIND (C,NAME='alloc_data_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: N1, N2, N3 INTERFACE INTEGER FUNCTION ALLOCHEM() END FUNCTION END INTERFACE NA=N1 NSP=N2 NS=N3 if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: alloc_data"//CHAR(0), "Table: FULLPOS"//CHAR(0)) alloc_data = 0 goto 001 endif if (allocated(LOT)) deallocate(LOT) allocate(LOT(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: alloc_data"//CHAR(0), "Table: LOT"//CHAR(0)) alloc_data = 0 goto 001 endif alloc_data = ALLOCHEM () 001 continue END FUNCTION SUBROUTINE prep_spec (idatoms, nsps, open_apf) BIND (C,NAME='prep_spec_') USE PARAMETERS USE MENDELEIEV IMPLICIT NONE INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: nsps REAL (KIND=c_double), DIMENSION(NSP), INTENT(IN) :: idatoms INTEGER (KIND=c_int), INTENT(IN) :: open_apf CHARACTER (LEN=14) :: ELEM ! Now we are calling the GTK+ routines do i=1, NSP NBSPBS(i) = nsps(i) j = int(idatoms(i)) ATOMID(i) = j if (open_apf .eq. 1) then if (j .gt. 0) then TL(i) = ATSYM(j) ELEM = ELEMENT(j) else TL(i) = "X " ELEM = "Unknown" endif ! In C all string must be terminated by a CHAR(0) ! To spec_data_ call spec_data (0, i-1, ATOMID(i), NBSPBS(i), & TL(i)//CHAR(0), ELEM//CHAR(0), & 0.0d0, 0.0d0, 0.0d0, 0.0d0) endif enddo NBSPBS(NSP+1) = NA END SUBROUTINE SUBROUTINE read_chem (PMASS, PRAD, PNSCATT, PXSCATT) BIND (C,NAME='read_chem_') USE PARAMETERS IMPLICIT NONE REAL (KIND=c_double), DIMENSION(NSP) :: PMASS, PRAD, PNSCATT, PXSCATT do i=1, NSP MASS(i) = PMASS(i) RVDW(i) = PRAD(i) NSCATTL(i) = PNSCATT(i) XSCATTL(i) = PXSCATT(i) enddo END SUBROUTINE SUBROUTINE read_data (PLOT, PBS) BIND (C,NAME='read_data_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), DIMENSION(NA), INTENT(IN) :: PLOT INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: PBS do i=1, NA LOT(i)=PLOT(i)+1 enddo do i=1, NSP NBSPBS(i) = PBS(i) Xi(i) = dble(NBSPBS(i)) / dble(NA) enddo NBSPBS(NSP+1) = NA END SUBROUTINE SUBROUTINE read_pos (PCX, PCY, PCZ) BIND (C,NAME='read_pos_') USE PARAMETERS REAL (KIND=c_double), DIMENSION(NA*NS), INTENT(IN) :: PCX, PCY, PCZ k=0 do i=1, NS do j=1, NA k=k+1 FULLPOS(j,1,i)=PCX(k) FULLPOS(j,2,i)=PCY(k) FULLPOS(j,3,i)=PCZ(k) enddo enddo END SUBROUTINE INTEGER FUNCTION SEND_POS (NPA, NPS, NLOT, POSTAB) INTEGER :: i, j, k, ERR INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: XPOS, YPOS, ZPOS if (allocated(XPOS)) deallocate(XPOS) allocate(XPOS(NPA*NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SEND_POS"//CHAR(0), "Table: XPOS"//CHAR(0)) SEND_POS = 0 goto 001 endif if (allocated(YPOS)) deallocate(YPOS) allocate(YPOS(NPA*NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SEND_POS"//CHAR(0), "Table: YPOS"//CHAR(0)) SEND_POS = 0 goto 001 endif if (allocated(ZPOS)) deallocate(ZPOS) allocate(ZPOS(NPA*NPS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SEND_POS"//CHAR(0), "Table: ZPOS"//CHAR(0)) SEND_POS = 0 goto 001 endif k=0 do i=1, NPS do j=1, NPA k=k+1 XPOS(k)=POSTAB(j,1,i) YPOS(k)=POSTAB(j,2,i) ZPOS(k)=POSTAB(j,3,i) enddo enddo ! To 'save_pos_' call save_pos (NPA, NLOT, k, XPOS, YPOS, ZPOS) SEND_POS = 1 001 continue if (allocated(XPOS)) deallocate (XPOS) if (allocated(YPOS)) deallocate (YPOS) if (allocated(ZPOS)) deallocate (ZPOS) END FUNCTION INTEGER (KIND=c_int) FUNCTION prep_data () BIND (C,NAME='prep_data_') ! ! Data initialization ! USE PARAMETERS USE MENDELEIEV IMPLICIT NONE CHARACTER (LEN=2), DIMENSION(MAXE) :: TTYPE INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION INTEGER FUNCTION ALLOCHEM() END FUNCTION INTEGER FUNCTION FINDID(NAMEAT) CHARACTER (LEN=2), INTENT(IN) :: NAMEAT END FUNCTION INTEGER FUNCTION chemistry () END FUNCTION END INTERFACE prep_data = 0 if (allocated(LOT)) deallocate(LOT) allocate(LOT(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: prep_data"//CHAR(0), "Table: LOT"//CHAR(0)) goto 001 endif LOT(:)=0 ! Initialisation du tableau NOC=1 do NOA=1, NA if (NOA .eq. 1) then LOT(NOA)=NOC TTYPE(NOC)=TAB_OF_TYPE(NOA) else if (LOT(NOA) .eq. 0) then do NOB=1, NOC if (TAB_OF_TYPE(NOA) .eq. TTYPE(NOB)) then LOT(NOA)= NOB endif enddo if (LOT(NOA) .eq. 0) then NOC=NOC+1 LOT(NOA)=NOC TTYPE(NOC)=TAB_OF_TYPE(NOA) endif endif enddo NSP=NOC if (ALLOCHEM () == 0) then prep_data = 0 goto 001 endif if (allocated(ELEMID)) deallocate(ELEMID) allocate(ELEMID(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: prep_data"//CHAR(0), "Table: ELEMID"//CHAR(0)) goto 001 endif NBSPBS(:) = 0 do NOA=1, NA NOB=LOT(NOA) NBSPBS(NOB)=NBSPBS(NOB)+1 enddo NBSPBS(NSP+1)=NA ! ! Link between index and label ! Correspondance entre indice de type et label ! do NOB=1, NSP TL(NOB)=TTYPE(NOB) enddo do NOA=1, NSP ATOMID(NOA) = FINDID(TL(NOA)) select case (ATOMID(NOA)) case (-1) prep_data = 0 goto 001 case (0) ELEMID(NOA) = "Dummy "//TL(NOA) MASS(NOA) = 1.0 RVDW(NOA) = 0.5 NSCATTL(NOA) = 0.0 XSCATTL(NOA) = 0.0 case default ELEMID(NOA) = ELEMENT(ATOMID(NOA)) MASS(NOA) = AMASS(ATOMID(NOA)) XSCATTL(NOA) = ATOMID(NOA) if(ATOMID(NOA) < 105) then NSCATTL(NOA) = COHEB(ATOMID(NOA)) ! Covalent radius are the defaut values RVDW(NOA) = ARCOV(ATOMID(NOA)) ! To use ionic radius uncomment the following line ! RVDW(NOA) = ARION(ATOMID(NOA)) ! To use Wander Waals radius uncomment the following line ! RVDW(NOA) = ARVDW(ATOMID(NOA)) else NSCATTL(NOA) = 0.0d0 RVDW(NOA) = 0.0d0 endif end select if (NSCATTL(NOA) .eq. 0.00) then call show_warning ("Element "//TL(NOA)//" does not have neutron scattering length "//CHAR(0), & "If this is a bug please report it to"//CHAR(0), PACKAGE_BUGREPORT//CHAR(0)) endif enddo ! Now we are calling the GTK+ routines ! To init_data_ call init_data (NA, NSP, NS, 1) do i=1, NSP ! In C all string must be terminated by a CHAR(0) ! To spec_data_ call spec_data (1, i-1, ATOMID(i), NBSPBS(i), & TL(i)//CHAR(0), ELEMID(i)//CHAR(0), & MASS(i), RVDW(i), NSCATTL(i), XSCATTL(i)) enddo if (chemistry () .eq. 1) then prep_data = SEND_POS (NA, NS, LOT, FULLPOS) endif 001 continue if (allocated(ELEMID)) deallocate(ELEMID) END FUNCTION INTEGER FUNCTION FINDID(NAMEAT) USE PARAMETERS USE MENDELEIEV INTEGER (KIND=c_int), EXTERNAL :: dummy_ask INTEGER :: ELEMT CHARACTER (LEN=2), INTENT(IN) :: NAMEAT FINDID=0 do ELEMT=1, MAXE if (ATSYM(ELEMT) .eq. NAMEAT) then FINDID=ELEMT exit endif enddo if (FINDID .eq. 0) then call show_warning ("Problem with the atomic coordinates"//CHAR(0), & "Element "//NAMEAT//" does not exist "//CHAR(0), " "//CHAR(0)) FINDID = dummy_ask ("Do you want to use dummy atom(s) for unknown species "//NAMEAT//" ?"//CHAR(0)); endif END FUNCTION REAL (KIND=c_double) FUNCTION set_mass (SW) BIND (C,NAME='set_mass_') USE MENDELEIEV USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: SW set_mass = AMASS(SW) END FUNCTION REAL (KIND=c_double) FUNCTION set_radius (SW, RD) BIND (C,NAME='set_radius_') USE MENDELEIEV USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: SW, RD DOUBLE PRECISION :: RAD if (SW .lt. 108) then if (RD .eq. 0) then RAD = ARCOV(SW) else if (RD .eq. 1) then RAD = ARION(SW) else if (RD .eq. 2) then RAD = ARVDW(SW) else if (RD .eq. 3) then RAD = ARCRY(SW) endif else RAD = 0.0 endif set_radius = RAD END FUNCTION REAL (KIND=c_double) FUNCTION set_neutron (SW) BIND (C,NAME='set_neutron_') USE MENDELEIEV USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: SW if (SW .lt. 105) then set_neutron = COHEB(SW) else set_neutron = 0.0 endif END FUNCTION !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! Reconstruction des trajectoires réelles !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SUBROUTINE prep_pos (PINFO, FINFO) BIND (C,NAME='prep_pos_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: PINFO, FINFO INTERFACE INTEGER FUNCTION SEND_POS(NPA, NPS, NLOT, POSTAB) INTEGER, INTENT(IN) :: NPA, NPS INTEGER, DIMENSION(:), INTENT(IN) :: NLOT DOUBLE PRECISION, DIMENSION(:,:,:), INTENT(IN) :: POSTAB END FUNCTION END INTERFACE PBC=.false. if (PINFO .eq. 1) then PBC=.true. endif FRAC=.false. if (FINFO > 0) FRAC=.true. if (FRAC) then do NOC=1, NS do NOA=1, NA if (NCELLS .gt. 1) then FULLPOS(NOA,:,NOC) = MATMUL(FULLPOS(NOA,:,NOC),THE_BOX(NOC)%fractocart) else FULLPOS(NOA,:,NOC) = MATMUL(FULLPOS(NOA,:,NOC),THE_BOX(1)%fractocart) endif enddo enddo endif NOA = SEND_POS (NA, NS, LOT, FULLPOS) END SUBROUTINE Atomes-GNU-1.1.14/src/fortran/resrings.F90000066400000000000000000000242451457665371200200620ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file resrings.F90 !! @short Export results of ring and chain statistics to C !! @author Sébastien Le Roux INTEGER FUNCTION RECRINGS(VID) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: VID DOUBLE PRECISION :: MAMP, EAMP DOUBLE PRECISION :: TAMP, ETAMP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: AMP DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RINGSPNA, ECTRPNA DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: EMIN, EMAX DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: MPNA DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RTAB if (TBR) then RECRINGS=2 goto 001 else if (ALC) then RECRINGS=0 goto 001 endif if (allocated(RTAB)) deallocate(RTAB) allocate(RTAB(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RTAB"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(MOYRED)) deallocate(MOYRED) allocate(MOYRED(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: MOYRED"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RED)) deallocate(RED) allocate(RED(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RED"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(ECTYPE)) deallocate(ECTYPE) allocate(ECTYPE(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: ECTYPE"//CHAR(0)) RECRINGS=0 goto 001 endif !if (allocated(MOYPUR)) deallocate(MOYPUR) !allocate(MOYPUR(TAILLR), STAT=ERR) !if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: RECRINGS"//CHAR(0), "Table: MOYPUR"//CHAR(0)) ! RECRINGS=0 ! goto 001 !endif !if (allocated(IRRED)) deallocate(IRRED) !allocate(IRRED(NS), STAT=ERR) !if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: RECRINGS"//CHAR(0), "Table: IRRED"//CHAR(0)) ! RECRINGS=0 ! goto 001 !endif !if (allocated(ECTYP)) deallocate(ECTYP) !allocate(ECTYP(TAILLR), STAT=ERR) !if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: RECRINGS"//CHAR(0), "Table: ECTYP"//CHAR(0)) ! RECRINGS=0 ! goto 001 !endif ECTYPE(:)=0.0d0 !ECTYP(:)=0.0d0 do l=3, TAILLR do i=1, NS RED(i)=dble(NRING(l,i))/NTLT ! IRRED(i)=dble(NIRR(l,i))/NTLT enddo if (NS .gt. 1) then MOYRED(l)=0.0d0 ! MOYPUR(l)=0.0d0 ECTYPE(l)=0.0d0 ! ECTYP(l)=0.0d0 call MOYENNE(RED, NS, MOYRED(l)) ! call MOYENNE(IRRED, NS, MOYPUR(l)) call ECT_TYPE(MOYRED(l), RED, NS, ECTYPE(l)) ! call ECT_TYPE(MOYPUR(l), IRRED, NS, ECTYP(l)) else MOYRED(l)=RED(1) ! MOYPUR(l)=IRRED(1) endif enddo TAMP=0.0 do i=3, TAILLR RTAB(i)=MOYRED(i) TAMP = TAMP + RTAB(i) enddo if (TAMP .eq. 0.0) then RECRINGS=1 goto 001 endif l=(NSP+1)*4*VID if (TLT .ne. NSP+1) l = l + 4*TLT call save_curve (TAILLR, RTAB, l, IDRI) if (allocated(MPNA)) deallocate(MPNA) allocate(MPNA(TAILLR,TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: MPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(EPNA)) deallocate(EPNA) allocate(EPNA(TAILLR,TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: EPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RINGSPNA)) deallocate(RINGSPNA) allocate(RINGSPNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RINGSPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(ECTRPNA)) deallocate(ECTRPNA) allocate(ECTRPNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: ECTPNA"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RNAMAX)) deallocate(RNAMAX) allocate(RNAMAX(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RNAMAX"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(RNAMIN)) deallocate(RNAMIN) allocate(RNAMIN(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: RNAMIN"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(EMAX)) deallocate(EMAX) allocate(EMAX(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: EMAX"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(EMIN)) deallocate(EMIN) allocate(EMIN(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: EMIN"//CHAR(0)) RECRINGS=0 goto 001 endif if (allocated(MTABL)) deallocate(MTABL) allocate(MTABL(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: MTABL"//CHAR(0)) RECRINGS=0 goto 001 endif RINGSPNA(:)=0.0d0 ECTRPNA(:)=0.0d0 RNAMAX(:)=0.0d0 RNAMIN(:)=0.0d0 EMAX(:)=0.0d0 EMIN(:)=0.0d0 MPNA(:,:)=0.0d0 EPNA(:,:)=0.0d0 do i=3, TAILLR do j=3, TAILLR if (NS .gt. 1) then do k=1, NS MTABL(k)=PNA(i,j,k) enddo call MOYENNE(MTABL, NS, MPNA(i,j)) call ECT_TYPE(MPNA(i,j), MTABL, NS, EPNA(i,j)) if (i.eq.j) then RINGSPNA(i)=MPNA(i,j)/NTLT ECTRPNA(i)=EPNA(i,j)/NTLT endif else MPNA(i,j)=dble(PNA(i,j,1))/NTLT if (i.eq.j) RINGSPNA(i)=MPNA(i,j) endif enddo enddo do i=1, TAILLR RTAB(i)=RINGSPNA(i) enddo l=l+1 call save_curve (TAILLR, RTAB, l, IDRI) do i=1, TAILLR if (NS .gt. 1) then m=0 do j=1, NS if (PNA(i,i,j) .eq. 0) then MTABL(j)=0.0d0 else m=m+1 MTABL(j)=dble(MAXPNA(i,j))/dble(PNA(i,i,j)) endif enddo if (m.gt.1) then call MOYENNE(MTABL, NS, RNAMAX(i)) RNAMAX(i)=RNAMAX(i)*NS/m call ECT_TYPE_RINGS(RNAMAX(i), MTABL, NS, m, EMAX(i)) elseif (m.eq.1) then RNAMAX(i)=RNAMAX(i)*NS EMAX(i)=0.0d0 else RNAMAX(i)=0.0d0 EMAX(i)=0.0d0 endif m=0 do j=1, NS if (PNA(i,i,j) .eq. 0) then MTABL(j)=0.0d0 else m=m+1 MTABL(j)=dble(MINPNA(i,j))/dble(PNA(i,i,j)) endif enddo if (m.gt.1) then call MOYENNE(MTABL, NS, RNAMIN(i)) RNAMIN(i)=RNAMIN(i)*NS/m call ECT_TYPE_RINGS(RNAMIN(i), MTABL, NS, m, EMIN(i)) elseif (m.eq.1) then RNAMIN(i)=RNAMIN(i)*NS EMIN(i)=0.0d0 else RNAMIN(i)=0.0d0 EMIN(i)=0.0d0 endif else if (PNA(i,i,1).eq.0.0) then RNAMAX(i)=0.0d0 EMAX(i)=0.0d0 RNAMIN(i)=0.0d0 EMIN(i)=0.0d0 else RNAMAX(i)=dble(MAXPNA(i,1))/PNA(i,i,1) EMAX(i)=0.0d0 RNAMIN(i)=dble(MINPNA(i,1))/PNA(i,i,1) EMIN(i)=0.0d0 endif endif enddo do i=1, TAILLR RTAB(i)=RNAMAX(i) enddo l=l+1 call save_curve (TAILLR, RTAB, l, IDRI) do i=1, TAILLR RTAB(i)=RNAMIN(i) enddo l=l+1 call save_curve (TAILLR, RTAB, l, IDRI) if (allocated(AMP)) deallocate(AMP) allocate(AMP(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: AMP"//CHAR(0)) RECRINGS=0 goto 001 endif do i=1, NS AMP(i)=0.0d0 if (DOAMPAT) then do j=1, NTLT AMP(i)=AMP(i)+dble(AMPAT(j,i)) enddo endif enddo MAMP=0.0d0 EAMP=0.0d0 if (DOAMPAT) then if (NS .gt. 1) then call MOYENNE(AMP, NS, MAMP) call ECT_TYPE(MAMP, AMP, NS, EAMP) else MAMP=AMP(1) endif endif if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) allocate(TOTPSTEP(NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RECRINGS"//CHAR(0), "Table: TOTPSTEP"//CHAR(0)) RECRINGS=0 goto 001 endif do i=1, NS TOTPSTEP(i)=0 do j=3, TAILLR TOTPSTEP(i)=TOTPSTEP(i)+dble(NRING(j,i)) enddo enddo TAMP=0.0d0 ETAMP=0.0d0 call MOYENNE(TOTPSTEP, NS, TAMP) call ECT_TYPE(TAMP, TOTPSTEP, NS, ETAMP) call save_rings_data (TAILLR, ECTYPE, ECTRPNA, EMAX, EMIN, TAMP, ETAMP, MAMP, EAMP) RECRINGS=1 001 continue if (allocated(RTAB)) deallocate(RTAB) if (allocated(AMPAT)) deallocate(AMPAT) if (allocated(AMP)) deallocate(AMP) if (allocated(TOTPSTEP)) deallocate(TOTPSTEP) if (allocated(MOYRED)) deallocate(MOYRED) if (allocated(RED)) deallocate(RED) if (allocated(ECTYPE)) deallocate(ECTYPE) !if (allocated(MOYPUR)) deallocate(MOYPUR) !if (allocated(IRRED)) deallocate(IRRED) !if (allocated(ECTYP)) deallocate(ECTYP) if (allocated(MPNA)) deallocate(MPNA) if (allocated(EPNA)) deallocate(EPNA) if (allocated(RINGSPNA)) deallocate(RINGSPNA) if (allocated(ECTRPNA)) deallocate(ECTRPNA) if (allocated(RNAMAX)) deallocate(RNAMAX) if (allocated(RNAMIN)) deallocate(RNAMIN) if (allocated(EMAX)) deallocate(EMAX) if (allocated(EMIN)) deallocate(EMIN) if (allocated(MTABL)) deallocate(MTABL) if (allocated(NRING)) deallocate(NRING) END FUNCTION Atomes-GNU-1.1.14/src/fortran/rings-guttman.F90000066400000000000000000000456271457665371200210340ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file rings-guttman.F90 !! @short Guttman ring statistics !! @author Sébastien Le Roux INTEGER FUNCTION GUTTMAN_RINGS() USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION RECRINGS(VID) INTEGER, INTENT(IN) :: VID END FUNCTION END INTERFACE GUTTMAN_RINGS = 0 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call GUTTMAN_RING_SEARCH_ATOMS (NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call GUTTMAN_RING_SEARCH_STEPS (NUMTH) endif #else call GUTTMAN_RING_SEARCH_STEPS () #endif GUTTMAN_RINGS = RECRINGS(2) END FUNCTION #ifdef OPENMP SUBROUTINE GUTTMAN_RING_SEARCH_ATOMS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR, ORDR INTEGER :: LORA, LORB, LORC, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS p=0 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(MAXAT, MINAT, RPAT, APNA, SAUT, RUNSEARCH, & !$OMP& j, k, l, m, n, o, LORA, LORB, LORC, TAILLE, TAILLH, THE_RING, RES_LIST, & !$OMP& FOUND, ERR, SAVR, ORDR, TRING, INDTE, INDTH) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, CPAT, VPAT, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, PBC, MAXN, SAVRING, ORDRING, NRING, INDRING, PNA, ri) if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 002 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 002 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 002 endif if(allocated(ORDR)) deallocate(ORDR) allocate(ORDR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDR" ALC=.true. goto 002 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 002 endif TRING(:)=0 SAVR(:,:,:)=0 ORDR(:,:,:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (TBR .or. ALC) goto 003 if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then !$OMP CRITICAL p = p+1 o = p !$OMP END CRITICAL APNA(:) = 0 MINAT=TAILLD MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (ABAB) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 THE_RING(1)%ATOM=j THE_RING(1)%SPEC=LORA THE_RING(1)%NEIGHBOR=1 m = VPAT(j,l) RPAT(m)=1 THE_RING(2)%ATOM=m THE_RING(2)%SPEC=LORB THE_RING(2)%NEIGHBOR=CPAT(m) TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 call INSIDE_RING (THE_RING, FOUND, i, m, 2, TAILLE, TAILLH, LORA, LORB, & RPAT, SAVR, ORDR, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 003 if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif elseif (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVR, ORDR, TRING, RES_LIST, INDTH) else if (CONTJ(j,i) .ge. 2 .and. CONTJ(m,i) .ge. 2) then !$OMP ATOMIC AMPAT(o,i)=AMPAT(o,i)+1 endif endif endif enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then !$OMP ATOMIC PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo !$OMP ATOMIC MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 !$OMP ATOMIC MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif !$OMP CRITICAL do k=3, TAILLR if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) ORDRING(k,NRING(k,i)+o,m) = ORDR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) ORDRING(k,l,m) = ORDR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 003 continue enddo !$OMP END DO NOWAIT 002 continue if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(ORDR)) deallocate (ORDR) if (allocated(THE_RING)) deallocate (THE_RING) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo ri = ri + RINGS_TO_OGL (i, 2, NRING, SAVRING, ORDRING) enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: GUTTMAN_RING_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (2, NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE GUTTMAN_RING_SEARCH_STEPS (NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH #else SUBROUTINE GUTTMAN_RING_SEARCH_STEPS () USE PARAMETERS IMPLICIT NONE #endif TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER :: LORA, LORB, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(TAILLE, TAILLH, MAXAT, MINAT, SAUT, RUNSEARCH, & !$OMP& i, j, k, l, m, n, o, LORA, LORB, THE_RING, RES_LIST, INDTE, INDTH, APNA, & !$OMP& FOUND, ERR, TRING, SAVRING, ORDRING, RPAT, CPAT, VPAT) & !$OMP& SHARED(p, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) #endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 001 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 001 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 001 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 001 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 001 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 001 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 001 endif #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS if (TBR .or. ALC) goto 002 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) o=0 do j=1, NA if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then o=o+1 APNA(:) = 0 MINAT=TAILLR MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) if (ABAB) then if (LORA .ne. LORB) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 THE_RING(1)%ATOM=j THE_RING(1)%SPEC=LORA THE_RING(1)%NEIGHBOR=1 m = VPAT(j,l) RPAT(m)=1 THE_RING(2)%ATOM=m THE_RING(2)%SPEC=LORB THE_RING(2)%NEIGHBOR=CPAT(m) TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 call INSIDE_RING (THE_RING, FOUND, i, m, 2, TAILLE, TAILLH, LORA, LORB, & RPAT, SAVRING, ORDRING, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 002 if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif elseif (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVRING, ORDRING, TRING, RES_LIST, INDTH) else if (CONTJ(j,i) .ge. 2 .and. CONTJ(m,i) .ge. 2) AMPAT(o,i)=AMPAT(o,i)+1 endif endif enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif enddo do j=3, TAILLR NRING(j,i) = TRING(j) enddo !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo j = RINGS_TO_OGL (i, 2, NRING, SAVRING, ORDRING) #ifdef OPENMP !$OMP ATOMIC #endif ri = ri + j 002 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: GUTTMAN_RING_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(THE_RING)) deallocate (THE_RING) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) #ifdef OPENMP !$OMP END PARALLEL #endif if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (2, NRING) END SUBROUTINE Atomes-GNU-1.1.14/src/fortran/rings-king.F90000066400000000000000000000752761457665371200203100ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file rings-king.F90 !! @short King ring statistics !! @author Sébastien Le Roux SUBROUTINE SETUP_CPAT_VPAT_RING (NAT, STR, CONT, VOIS, CPT, VPT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NAT, STR INTEGER, DIMENSION(NAT,NS), INTENT(IN):: CONT INTEGER, DIMENSION(MAXN,NAT,NS), INTENT(IN) :: VOIS INTEGER, DIMENSION(NAT), INTENT(INOUT):: CPT INTEGER, DIMENSION(NAT,MAXN), INTENT(INOUT) :: VPT INTEGER :: RAB, RAC, RAD !do RAB=1, NAT ! write (6, '("At= ",i4," Neigh= ",i2)') RAB, CONTJ(RAB,STR) ! do RAC=1, CONTJ(RAB,STR) ! write (6, '(" i= ",i2," Vois= ",i4)') RAC, VOISJ(RAC,RAB,STR) ! enddo !enddo CPT(:) = 0 VPT(:,:) = 0 do RAB=1, NAT if (CONT(RAB,STR) .gt. 1) then RAC = 0 do RAD=1, CONT(RAB,STR) if (CONT(VOIS(RAD,RAB,STR),STR) .gt. 1) then RAC=RAC+1 VPT(RAB,RAC) = VOIS(RAD,RAB,STR) endif enddo if (RAC .ge. 2) then CPT(RAB) = RAC endif endif enddo END SUBROUTINE SUBROUTINE SETUP_CPAT_VPAT (STR, NAT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: STR, NAT INTEGER :: RAB, RAC, RAD !do RAB=1, NAT ! write (6, '("At= ",i4," Neigh= ",i2)') RAB, CONTJ(RAB,STR) ! do RAC=1, CONTJ(RAB,STR) ! write (6, '(" i= ",i2," Vois= ",i4)') RAC, VOISJ(RAC,RAB,STR) ! enddo !enddo do RAB=1, NAT CPAT(RAB) = 0 if (CONTJ(RAB,STR) .gt. 1) then RAC = 0 do RAD=1, CONTJ(RAB,STR) if (CONTJ(VOISJ(RAD,RAB,STR),STR) .gt. 1) then RAC=RAC+1 VPAT(RAB,RAC) = VOISJ(RAD,RAB,STR) endif enddo if (RAC .ge. 2) then CPAT(RAB) = RAC endif endif enddo END SUBROUTINE INTEGER FUNCTION KING_RINGS() USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER :: ar #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE INTEGER FUNCTION RECRINGS(VID) INTEGER, INTENT(IN) :: VID END FUNCTION END INTERFACE KING_RINGS = 0 ar = 0 if (.not.ALLRINGS) ar=1 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call KING_RING_SEARCH_ATOMS (ar, NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call KING_RING_SEARCH_STEPS (ar, NUMTH) endif #else call KING_RING_SEARCH_STEPS (ar) #endif KING_RINGS = RECRINGS(ar) END FUNCTION #ifdef OPENMP SUBROUTINE KING_RING_SEARCH_ATOMS (ARI, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: ARI, NUMTH TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR, ORDR INTEGER :: LORA, LORB, LORC, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID, LRA, LRB INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT INTEGER, DIMENSION(NA), INTENT(IN):: CPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS p=0 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(MAXAT, MINAT, RPAT, APNA, SAUT, RUNSEARCH, & !$OMP& j, k, l, m, n, o, LORA, LORB, LORC, TAILLE, TAILLH, THE_RING, RES_LIST, & !$OMP& FOUND, ERR, SAVR, ORDR, TRING, INDTE, INDTH) & !$OMP& SHARED(i, p, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, CPAT, VPAT, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, DOAMPAT, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, PBC, MAXN, SAVRING, ORDRING, NRING, INDRING, PNA, ri) if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 002 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 002 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 002 endif if(allocated(ORDR)) deallocate(ORDR) allocate(ORDR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDR" ALC=.true. goto 002 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 002 endif TRING(:)=0 SAVR(:,:,:)=0 ORDR(:,:,:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (TBR .or. ALC) goto 003 if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then !$OMP CRITICAL p = p+1 o = p !$OMP END CRITICAL APNA(:) = 0 MINAT=TAILLD MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j)-1 do m=l+1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) LORC=LOT(VPAT(j,m)) if (ABAB) then if ((LORB .ne. LORA) .and. (LORC .ne. LORA) .and. (LORB .eq. LORC)) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo RPAT(VPAT(j,l)) = 0 THE_RING(1)%ATOM=VPAT(j,l) THE_RING(1)%SPEC=LORB THE_RING(1)%NEIGHBOR=1 THE_RING(2)%ATOM=j THE_RING(2)%SPEC=LORA THE_RING(2)%NEIGHBOR=1 RPAT(j)=1 TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 THE_RING(3)%ATOM=VPAT(j,m) THE_RING(3)%SPEC=LORC THE_RING(3)%NEIGHBOR=CPAT(VPAT(j,m)) call INSIDE_RING (THE_RING, FOUND, i, VPAT(j,m), 3, TAILLE, TAILLH, LORA, LORB, & RPAT, SAVR, ORDR, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_LIST" if (TBR .or. ALC) goto 003 if (ALLRINGS) then do k=3, TAILLR do n=1, TRING(k) if (INDTE(n).ne.0 .and. APNA(k).eq.0) then APNA(k)=1 MINAT=min(MINAT,k) MAXAT=max(MAXAT,k) ! if (FACTATPNA) ATPNA(k,o,i)=1 SAUT=.false. endif enddo enddo else if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif else if (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVR, ORDR, TRING, RES_LIST, INDTH) else if (DOAMPAT) then if (CONTJ(VPAT(j,l),i) .ge. 2 .and. CONTJ(VPAT(j,m),i) .ge. 2) then !$OMP ATOMIC AMPAT(o,i)=AMPAT(o,i)+1 endif endif endif enddo enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then !$OMP ATOMIC PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo !$OMP ATOMIC MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 !$OMP ATOMIC MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif 003 continue enddo !$OMP END DO NOWAIT if (TBR .or. ALC) goto 002 !$OMP CRITICAL do k=3, TAILLR if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) ORDRING(k,NRING(k,i)+o,m) = ORDR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) ORDRING(k,l,m) = ORDR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 002 continue if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(ORDR)) deallocate (ORDR) if (allocated(THE_RING)) deallocate (THE_RING) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i2)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo ri = ri + RINGS_TO_OGL (i, ARI, NRING, SAVRING, ORDRING) enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: KING_RING_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (ARI, NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE KING_RING_SEARCH_STEPS (ARI, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: ARI, NUMTH #else SUBROUTINE KING_RING_SEARCH_STEPS (ARI) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: ARI #endif TYPE (RING), DIMENSION(:), ALLOCATABLE :: THE_RING INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE, INDTH INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER :: LORA, LORB, LORC, ri INTERFACE RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT END SUBROUTINE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE ri = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(TAILLE, TAILLH, MAXAT, MINAT, SAUT, RUNSEARCH, & !$OMP& i, j, k, l, m, n, o, p, LORA, LORB, LORC, THE_RING, RES_LIST, INDTE, INDTH, APNA, & !$OMP& FOUND, ERR, TRING, SAVRING, ORDRING, RPAT, CPAT, VPAT) & !$OMP& SHARED(ARI, NUMTH, NS, NA, TLT, NSP, LOT, TAILLR, TAILLD, CONTJ, VOISJ, & !$OMP& NUMA, FACTATRING, ATRING, MAXPNA, MINPNA, DOAMPAT, AMPAT, ABAB, NO_HOMO, ALLRINGS, & !$OMP& TBR, ALC, ALC_TAB, NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) #endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif if (allocated(RPAT)) deallocate(RPAT) allocate(RPAT(NA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RPAT" ALC=.true. goto 001 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 001 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 001 endif if(allocated(INDTH)) deallocate(INDTH) allocate(INDTH(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTH" goto 001 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 001 endif if(allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 001 endif if(allocated(THE_RING)) deallocate(THE_RING) allocate(THE_RING(TAILLD), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="THE_RING" ALC=.true. goto 001 endif #ifdef OPENMP !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS if (TBR .or. ALC) goto 002 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_RING (NA, i, CONTJ, VOISJ, CPAT, VPAT) o=0 do j=1, NA if (TLT .eq. NSP+1 .or. LOT(j) .eq. TLT) then o=o+1 APNA(:) = 0 MINAT=TAILLR MAXAT=1 SAUT=.true. if (CPAT(j).ge.2) then do l=1, CPAT(j)-1 do m=l+1, CPAT(j) LORA=LOT(j) LORB=LOT(VPAT(j,l)) LORC=LOT(VPAT(j,m)) if (ABAB) then if ((LORB .ne. LORA) .and. (LORC .ne. LORA) .and. (LORB .eq. LORC)) then RUNSEARCH=.true. else RUNSEARCH=.false. endif else RUNSEARCH=.true. endif if (RUNSEARCH) then FOUND=.false. RPAT(:) = 0 do k=1, CPAT(j) RPAT(VPAT(j,k)) = 1 enddo p = VPAT(j,l) RPAT(p) = 0 RPAT(j)=1 THE_RING(1)%ATOM=p THE_RING(1)%SPEC=LORB THE_RING(1)%NEIGHBOR=1 THE_RING(2)%ATOM=j THE_RING(2)%SPEC=LORA THE_RING(2)%NEIGHBOR=1 THE_RING(3)%ATOM=VPAT(j,m) THE_RING(3)%SPEC=LORC THE_RING(3)%NEIGHBOR=CPAT(VPAT(j,m)) TAILLE=TAILLR TAILLH=TAILLR RES_LIST(:) = 0 INDTE(:) = 0 INDTH(:) = 0 call INSIDE_RING (THE_RING, FOUND, i, VPAT(j,m), 3, TAILLE, TAILLH, LORA, LORB, & RPAT, SAVRING, ORDRING, TRING, INDTE, INDTH, RES_LIST, CPAT, VPAT) if (ALC) ALC_TAB="INSIDE_RING" if (TBR .or. ALC) goto 002 if (ALLRINGS) then do k=3, TAILLR do n=1, TRING(k) if (INDTE(n).ne.0 .and. APNA(k).eq.0) then APNA(k)=1 MINAT=min(MINAT,k) MAXAT=max(MAXAT,k) ! if (FACTATPNA) ATPNA(k,o,i)=1 SAUT=.false. endif enddo enddo else if (FOUND) then if (APNA(TAILLE) .eq. 0) then APNA(TAILLE)=1 MINAT=min(MINAT,TAILLE) MAXAT=max(MAXAT,TAILLE) ! if (FACTATPNA) ATPNA(TAILLE,o,i)=1 SAUT=.false. endif else if (NO_HOMO .and. RES_LIST(TAILLH) .ne. 0) then ! Some shortest ring with HP bonds and < TAILLR were found ! delete these rings now call DEL_THIS_RING (TAILLH, SAVRING, ORDRING, TRING, RES_LIST, INDTH) else if (DOAMPAT) then if (CONTJ(VPAT(j,l),i) .ge. 2 .and. CONTJ(VPAT(j,m),i) .ge. 2) AMPAT(o,i)=AMPAT(o,i)+1 endif endif enddo enddo endif if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif enddo do j=3, TAILLR NRING(j,i) = TRING(j) enddo !do j=3, TAILLR ! write (6, '("s= ",i4,", j= ",i2,", nr(",i2,",",i4,")= ",i3)') i,j,j,i, NRING(j,i) ! if (NRING(j,i) .gt. 0) then ! do k=1, NRING(j,i) ! write (6, *) " k= ",k,", R(o)= ",ORDRING(j,k,1:j) ! enddo ! endif !enddo j = RINGS_TO_OGL (i, ARI, NRING, SAVRING, ORDRING) #ifdef OPENMP !$OMP ATOMIC #endif ri = ri + j 002 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: KING_RING_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(THE_RING)) deallocate (THE_RING) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(RPAT)) deallocate (RPAT) if (allocated(RES_LIST)) deallocate (RES_LIST) if (allocated(INDTE)) deallocate (INDTE) if (allocated(INDTH)) deallocate (INDTH) if (allocated(APNA)) deallocate (APNA) #ifdef OPENMP !$OMP END PARALLEL #endif if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (ARI, NRING) END SUBROUTINE INTEGER FUNCTION CHECK_RING (THE_RING, FND, S_CR, RID, TAE, TAH, RSAVED, OSAVED, TRING, INDE, INDH, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLD), INTENT(IN) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_CR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER :: ix, iy, CHAINE LOGICAL :: IS_RING LOGICAL :: HOMOP DOUBLE PRECISION :: DUV DOUBLE PRECISION, DIMENSION(3) :: RAB, VAB INTERFACE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION SUBROUTINE SAVE_THIS_RING (THE_RING, TLES, RSAVED, OSAVED, TRING, INDT, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLR), INTENT(IN) :: THE_RING INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING END SUBROUTINE END INTERFACE IS_RING=.true. HOMOP=.false. if (THE_RING(RID)%ATOM.eq.THE_RING(1)%ATOM .and. RID.ge.4) then IS_RING=.true. HOMOP=.false. if (NSP .gt. 1) then do ix=1, RID-1 if (THE_RING(ix)%SPEC .eq. THE_RING(ix+1)%SPEC) then HOMOP=.true. exit endif enddo endif if (PBC) then VAB(:)=0.0d0 do ix=1, RID-1 if (NCELLS .gt. 1) then DUV = CALCDIJ (RAB,THE_RING(ix)%ATOM,THE_RING(ix+1)%ATOM,S_CR,S_CR,S_CR) else DUV = CALCDIJ (RAB,THE_RING(ix)%ATOM,THE_RING(ix+1)%ATOM,S_CR,S_CR,1) endif do iy=1,3 VAB(iy)=VAB(iy)+RAB(iy) enddo enddo if (abs(VAB(1)) .ge. 0.01 .or. abs(VAB(2)) .ge. 0.01 .or. abs(VAB(3)) .ge. 0.01) then IS_RING=.false. endif endif if (IS_RING) then CHAINE = RID-1 if (ALLRINGS) then if (.not.NO_HOMO .or. .not.HOMOP) then FND=.true. call SAVE_THIS_RING (THE_RING, CHAINE, RSAVED, OSAVED, TRING, INDE, RESL) endif else if (NO_HOMO) then if (CHAINE .le. TAH) then if (CHAINE.lt.TAH .or. .not.HOMOP) call DEL_THIS_RING (TAH, RSAVED, OSAVED, TRING, RESL, INDH) if (CHAINE.lt.TAE) call DEL_THIS_RING (TAE, RSAVED, OSAVED, TRING, RESL, INDE) if (.not.HOMOP .and. CHAINE.le.TAE) then FND=.true. TAE=CHAINE call SAVE_THIS_RING (THE_RING, TAE, RSAVED, OSAVED, TRING, INDE, RESL) else if (HOMOP) then if (CHAINE .lt. TAE) then FND=.false. TAH=CHAINE call SAVE_THIS_RING (THE_RING, TAH, RSAVED, OSAVED, TRING, INDH, RESL) endif endif endif else if (CHAINE .le. TAE) then if (CHAINE.lt.TAE) call DEL_THIS_RING (TAE, RSAVED, OSAVED, TRING, RESL, INDE) FND=.true. TAE=CHAINE call SAVE_THIS_RING (THE_RING, TAE, RSAVED, OSAVED, TRING, INDE, RESL) endif endif endif CHECK_RING = 1 else CHECK_RING = 2 endif else CHECK_RING = 0 endif END FUNCTION RECURSIVE SUBROUTINE INSIDE_RING (THE_RING, FND, S_IR, AI_IR, RID, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLD), INTENT(INOUT) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_IR, AI_IR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, INTENT(IN) :: LRA, LRB INTEGER, DIMENSION(NA), INTENT(INOUT) :: NRPAT INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL INTEGER, DIMENSION(NA), INTENT(IN):: CPT INTEGER, DIMENSION(NA,MAXN), INTENT(IN) :: VPT INTEGER :: IND, RES LOGICAL :: ADDSP INTERFACE INTEGER FUNCTION CHECK_RING (THE_RING, FND, S_CR, RID, TAE, TAH, RSAVED, OSAVED, TRING, INDE, INDH, RESL) USE PARAMETERS TYPE (RING), DIMENSION(TAILLR), INTENT(IN) :: THE_RING LOGICAL, INTENT(INOUT) :: FND INTEGER, INTENT(IN) :: S_CR, RID INTEGER, INTENT(INOUT) :: TAE, TAH INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDE, INDH INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL END FUNCTION END INTERFACE if (RID-1 .lt. TAE) then do while (THE_RING(RID)%NEIGHBOR .ge. 1) IND = VPT(AI_IR, THE_RING(RID)%NEIGHBOR) if (NRPAT(IND).eq.0) then if (ABAB) then if (mod(RID,2).eq.0 .and. LOT(IND).eq.LRB) then ADDSP=.true. elseif (mod(RID,2).ne.0 .and. LOT(IND).eq.LRA) then ADDSP=.true. else ADDSP=.false. endif else ADDSP=.true. endif if (ADDSP) then THE_RING(RID+1)%ATOM = IND THE_RING(RID+1)%SPEC = LOT(IND) THE_RING(RID+1)%NEIGHBOR = CPT(IND) NRPAT(IND)=1 RES = CHECK_RING (THE_RING, FND, S_IR, RID+1, TAE, TAH, RSAVED, OSAVED, TRING, INDE, INDH, RESL) if (TBR .or. ALC) goto 001 if (RES .eq. 0) then call INSIDE_RING (THE_RING, FND, S_IR, IND, RID+1, TAE, TAH, LRA, LRB, & NRPAT, RSAVED, OSAVED, TRING, INDE, INDH, RESL, CPT, VPT) if (TBR .or. ALC) goto 001 endif NRPAT(IND) = 0 endif endif THE_RING(RID)%NEIGHBOR = THE_RING(RID)%NEIGHBOR - 1 enddo endif 001 continue END SUBROUTINE INSIDE_RING SUBROUTINE SAVE_THIS_RING (THE_RING, TLES, RSAVED, OSAVED, TRING, INDT, RESL) USE PARAMETERS IMPLICIT NONE TYPE (RING), DIMENSION(TAILLD), INTENT(IN) :: THE_RING INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER :: idx, idy LOGICAL :: NEWRING INTEGER, DIMENSION(TLES) :: TOTRI, TOSAV ! A ring has been found, we need to check if it has already been found or not do idx=1, TLES ! Creation of two tab first for the numerical sorting of the list ! The other without sorting for output TOTRI(idx)=THE_RING(idx)%ATOM TOSAV(idx)=THE_RING(idx)%ATOM enddo call TRI(TOTRI, TLES) if (TRING(TLES) .ne. 0) then do idx=1, TRING(TLES) ! do-loop on existing rings to check if the new on has already been found NEWRING=.false. do idy=1, TLES if (TOTRI(idy) .ne. RSAVED(TLES,idx,idy)) then NEWRING=.true. exit endif enddo if (.not.NEWRING) then ! Already been found n-times, increment of the counter INDT(idx)=INDT(idx)+1 exit endif enddo else NEWRING=.true. endif if (NEWRING) then ! A new ring has been found ! We save the data RESL(TLES)=RESL(TLES)+1 TRING(TLES)=TRING(TLES)+1 if (TRING(TLES) .gt. NUMA) then TBR=.true. goto 001 endif INDT(TRING(TLES))=INDT(TRING(TLES))+1 do idx=1, TLES RSAVED(TLES,TRING(TLES),idx)=TOTRI(idx) OSAVED(TLES,TRING(TLES),idx)=TOSAV(idx) enddo endif 001 continue END SUBROUTINE SUBROUTINE DEL_THIS_RING (TLED, RSAVED, OSAVED, TRING, RESL, INDT) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: TLED INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER :: xdel, did ! The max size of the ring possible for the triplet N1-At-N2 has down ! We have to delete the bigger rings already found for this triplet if (RESL(TLED) .ge. 1) then do xdel=0, RESL(TLED)-1 do did=1, TAILLR RSAVED(TLED,TRING(TLED)-xdel,did)=0 OSAVED(TLED,TRING(TLED)-xdel,did)=0 enddo do did=1, NUMA INDT(did)=0 enddo enddo TRING(TLED)=TRING(TLED)-RESL(TLED) RESL(TLED)=0 endif END SUBROUTINE Atomes-GNU-1.1.14/src/fortran/rings-primitive.F90000066400000000000000000001257471457665371200213670ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file rings-primitive.F90 !! @short Primitive and strong ring statistics !! @author Sébastien Le Roux INTEGER FUNCTION PRIMITIVE_RINGS () ! ! Primitive and strong ring statistics ! #ifdef OPENMP !$ USE OMP_LIB #endif USE PARAMETERS IMPLICIT NONE INTEGER :: RID #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS=.false. #endif INTERFACE INTEGER FUNCTION RECRINGS(VID) INTEGER, INTENT(IN) :: VID END FUNCTION END INTERFACE PRIMITIVE_RINGS=0 ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine RID = 3 if (CALC_STRINGS) RID = 4 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. ! Dynamic allocation of pointers and tables used in the "RINGS" subroutine if (NS.ge.1 .and. NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif call PRIMITIVE_RING_SEARCH_ATOMS (RID, NUMTH) else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif call PRIMITIVE_RING_SEARCH_STEPS (RID, NUMTH) endif #else call PRIMITIVE_RING_SEARCH_STEPS (RID) #endif PRIMITIVE_RINGS = RECRINGS(RID) END FUNCTION #ifdef OPENMP SUBROUTINE PRIMITIVE_RING_SEARCH_ATOMS (RID, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH INTEGER, INTENT(IN) :: RID INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVR, ORDR INTEGER :: ri LOGICAL, DIMENSION(2) :: FNDTAB INTERFACE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION END INTERFACE ri = 0 if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NNA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif do i=1, NS SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 call SETUP_CPAT_VPAT_RING (NNA, i, CONTJ, VOISJ, CPAT, VPAT) ! OpenMP on atoms only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(FNDTAB, MAXAT, MINAT, SAUT, PATH, PATHOUT, & !$OMP& h, j, k, l, m, n, o, p, INDTE, APNA, RES_LIST, & !$OMP& ERR, TRING, SAVR, ORDR, PRINGORD, NPRING, MATDIST, QUEUE, QUERNG) & !$OMP& SHARED(NUMTH, i, RID, CALC_STRINGS, NS, NA, NNA, NNP, TLT, NSP, LOT, TAILLR, CONTJ, VOISJ, & !$OMP& NUMA, MAXPNA, MINPNA, ABAB, NO_HOMO, TBR, ALC, ALC_TAB, SAVRING, ORDRING, CPAT, VPAT, & !$OMP& NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) if(allocated(MATDIST)) deallocate(MATDIST) allocate(MATDIST(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="MATDIST" ALC=.true. goto 002 endif if(allocated(QUEUE)) deallocate(QUEUE) allocate(QUEUE(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUEUE" ALC=.true. goto 002 endif if (allocated(PRINGORD)) deallocate(PRINGORD) allocate(PRINGORD(NUMA*10,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="PRINGORD" ALC=.false. goto 002 endif if (allocated(NPRING)) deallocate(NPRING) allocate(NPRING(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NPRING" ALC=.false. goto 002 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 002 endif if(allocated(SAVR)) deallocate(SAVR) allocate(SAVR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVR" ALC=.true. goto 002 endif if(allocated(ORDR)) deallocate(ORDR) allocate(ORDR(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDR" ALC=.true. goto 002 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 002 endif if (allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 002 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 002 endif SAVR(:,:,:)=0 ORDR(:,:,:)=0 TRING(:)=0 !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=NNP+1, NNP+NA ! atoms-loop if (TBR .or. ALC) goto 003 if (TLT .eq. NSP+1 .or. LOT(j-NNP) .eq. TLT) then APNA(:)=0 MINAT=TAILLR MAXAT=1 SAUT=.true. call DIJKSTRA (j, CPAT, VPAT, QUEUE, MATDIST) if (TBR .or. ALC) goto 003 do k=1, TAILLR/2 + mod(TAILLR,2) ! ring-sizes-loop INDTE(:)=0 RES_LIST(:)=0 PATH=0 do l=1, NNA if (MATDIST(l) .eq. k) then call SPATH_REC (PATH,l,k,k,MATDIST,CPAT,VPAT,NPRING,PRINGORD) endif enddo h = PATH*(PATH-1)/2 if (allocated(QUERNG)) deallocate(QUERNG) allocate(QUERNG(h,2), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUERNG" ALC=.true. goto 003 endif l=0 do m=1, PATH-1 do n=m+1, PATH l=l+1 QUERNG(l,1)=m QUERNG(l,2)=n ! Paths which share atoms ... so with overlap ... are deleted PATHOUT=.false. do o=1, k-1 do p=1, k-1 if (PRINGORD(m,o) .eq. PRINGORD(n,p)) then PATHOUT=.true. exit endif enddo if (PATHOUT) exit enddo if (PATHOUT) then QUERNG(l,1)=0 QUERNG(l,2)=0 l=l-1 endif enddo enddo FNDTAB(:)=.false. call PRIM_RING (FNDTAB, j, l, k, h, CPAT, VPAT, QUERNG, PRINGORD, MATDIST, & SAVR, ORDR, TRING, INDTE, RES_LIST) if (TBR .or. ALC) goto 003 m = 2*k if (FNDTAB(1)) then if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (FNDTAB(2)) then m = m + 1 if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (allocated(QUERNG)) deallocate(QUERNG) enddo ! end ring-sizes-loop if (.not. SAUT) then do k=3, TAILLR do l=3, TAILLR if (APNA(k).eq.1 .and. APNA(l).eq.1) then !$OMP ATOMIC PNA(k,l,i)=PNA(k,l,i)+1 endif enddo enddo !$OMP ATOMIC MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 !$OMP ATOMIC MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif 003 continue enddo ! end atoms-loop !$OMP END DO NOWAIT if (TBR .or. ALC) goto 002 !$OMP CRITICAL do k=3, TAILLR if (TRING(k).gt.0) then if (NRING(k,i).gt.0) then o = 0 do l=1, TRING(k) do m=1, NRING(k,i) SAUT=.true. do n=1, k if (SAVRING(k,m,n) .ne. SAVR(k,l,n)) then SAUT=.false. exit endif enddo if (SAUT) exit enddo if (.not.SAUT) then o = o + 1 if (NRING(k,i)+o .gt. NUMA) then TBR=.true. goto 004 endif do m=1, k SAVRING(k,NRING(k,i)+o,m) = SAVR(k,l,m) ORDRING(k,NRING(k,i)+o,m) = ORDR(k,l,m) enddo endif enddo NRING(k,i)=NRING(k,i)+o else do l=1, TRING(k) do m=1, k SAVRING(k,l,m) = SAVR(k,l,m) ORDRING(k,l,m) = ORDR(k,l,m) enddo enddo NRING(k,i) = TRING(k) endif endif enddo 004 continue !$OMP END CRITICAL 002 continue if (allocated(INDTE)) deallocate (INDTE) if (allocated(APNA)) deallocate (APNA) if (allocated(TRING)) deallocate (TRING) if (allocated(SAVR)) deallocate (SAVR) if (allocated(ORDR)) deallocate (ORDR) if (allocated(MATDIST)) deallocate(MATDIST) if (allocated(QUEUE)) deallocate(QUEUE) if (allocated(PRINGORD)) deallocate(PRINGORD) !$OMP END PARALLEL if (ALC .or. TBR) goto 001 ri = ri + RINGS_TO_OGL (i, RID, NRING, SAVRING, ORDRING) do k=3, TAILLR if (NRING(k,i) .ne. 0) then ! do j=1, NRING(k,i) !! The algorithm implies that you may have a problem for !! the biggest size of ring therefore lets put this size out of the proof checking. !! Furthermore we check results only if all atoms are used to initiate the search. ! if (mod(INDRING(k,j,i), k).ne.0 .and. k.lt.TAILLR .and. LTLT.eq.0) then ! write (6, 003) i, k, j, INDRING(k,j,i) ! write (6, 007) ! do l=1, k ! write (6, '(i4,2x)', advance='no') RINGORD(k,j,l,i) ! enddo ! write (6, *) ! write (6, 004) ! if (ABAB) then ! write (6, 008) ! else ! write (6, 005) ! endif ! write (6, *) ! endif ! enddo endif enddo enddo 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: PRIMITIVE_RING_SEARCH_ATOMS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (RID, NRING) END SUBROUTINE #endif #ifdef OPENMP SUBROUTINE PRIMITIVE_RING_SEARCH_STEPS (RID, NUMTH) USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER, INTENT(IN) :: NUMTH #else SUBROUTINE PRIMITIVE_RING_SEARCH_STEPS (RID) USE PARAMETERS IMPLICIT NONE #endif INTEGER, INTENT(IN) :: RID INTEGER, DIMENSION(:), ALLOCATABLE :: TRING, INDTE INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: SAVRING, ORDRING INTEGER :: ri LOGICAL, DIMENSION(2) :: FNDTAB INTERFACE INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI END FUNCTION INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR,NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED END FUNCTION END INTERFACE ri = 0 #ifdef OPENMP ! OpenMP on steps only !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(FNDTAB, MAXAT, MINAT, SAUT, PATH, PATHOUT, & !$OMP& h, i, j, k, l, m, n, o, p, INDTE, APNA, RES_LIST, & !$OMP& ERR, TRING, SAVRING, ORDRING, CPAT, VPAT, & !$OMP& PRINGORD, NPRING, MATDIST, QUEUE, QUERNG) & !$OMP& SHARED(NUMTH, RID, CALC_STRINGS, NS, NA, NNA, NNP, TLT, NSP, LOT, TAILLR, CONTJ, VOISJ, & !$OMP& NUMA, MAXPNA, MINPNA, ABAB, NO_HOMO, TBR, ALC, ALC_TAB, & !$OMP& NCELLS, THE_BOX, FULLPOS, PBC, MAXN, NRING, INDRING, PNA, ri) #endif if(allocated(MATDIST)) deallocate(MATDIST) allocate(MATDIST(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="MATDIST" ALC=.true. goto 001 endif if(allocated(QUEUE)) deallocate(QUEUE) allocate(QUEUE(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUEUE" ALC=.true. goto 001 endif if (allocated(PRINGORD)) deallocate(PRINGORD) allocate(PRINGORD(NUMA*10,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="PRINGORD" ALC=.false. goto 001 endif if (allocated(NPRING)) deallocate(NPRING) allocate(NPRING(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NPRING" ALC=.false. goto 001 endif if(allocated(CPAT)) deallocate(CPAT) allocate(CPAT(NNA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CPAT" ALC=.true. goto 001 endif if(allocated(VPAT)) deallocate(VPAT) allocate(VPAT(NNA,MAXN), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="VPAT" ALC=.true. goto 001 endif if(allocated(RES_LIST)) deallocate(RES_LIST) allocate(RES_LIST(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="RES_LIST" ALC=.true. goto 001 endif if(allocated(SAVRING)) deallocate(SAVRING) allocate(SAVRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="SAVRING" ALC=.true. goto 001 endif if(allocated(ORDRING)) deallocate(ORDRING) allocate(ORDRING(TAILLR,NUMA,TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="ORDRING" ALC=.true. goto 001 endif if(allocated(INDTE)) deallocate(INDTE) allocate(INDTE(NUMA), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="INDTE" goto 001 endif if (allocated(TRING)) deallocate(TRING) allocate(TRING(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TRING" ALC=.true. goto 001 endif if(allocated(APNA)) deallocate(APNA) allocate(APNA(TAILLR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="APNA" ALC=.true. goto 001 endif !$OMP DO SCHEDULE(STATIC,NS/NUMTH) do i=1, NS if (TBR .or. ALC) goto 002 SAVRING(:,:,:)=0 ORDRING(:,:,:)=0 TRING(:)=0 call SETUP_CPAT_VPAT_RING (NNA, i, CONTJ, VOISJ, CPAT, VPAT) do j=NNP+1, NNP+NA ! atoms-loop if (TLT .eq. NSP+1 .or. LOT(j-NNP) .eq. TLT) then APNA(:)=0 MINAT=TAILLR MAXAT=1 SAUT=.true. call DIJKSTRA(j, CPAT, VPAT, QUEUE, MATDIST) if (TBR .or. ALC) goto 002 do k=1, TAILLR/2 + mod(TAILLR,2) ! ring-sizes-loop INDTE(:)=0 RES_LIST(:)=0 PATH=0 do l=1, NNA if (MATDIST(l) .eq. k) then call SPATH_REC (PATH,l,k,k,MATDIST,CPAT,VPAT,NPRING,PRINGORD) endif enddo h = PATH*(PATH-1)/2 if (allocated(QUERNG)) deallocate(QUERNG) allocate(QUERNG(h,2), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="QUERNG" ALC=.true. goto 002 endif l=0 do m=1, PATH-1 do n=m+1, PATH l=l+1 QUERNG(l,1)=m QUERNG(l,2)=n ! Paths which share atoms ... so with overlap ... are deleted PATHOUT=.false. do o=1, k-1 do p=1, k-1 if (PRINGORD(m,o) .eq. PRINGORD(n,p)) then PATHOUT=.true. exit endif enddo if (PATHOUT) exit enddo if (PATHOUT) then QUERNG(l,1)=0 QUERNG(l,2)=0 l=l-1 endif enddo enddo FNDTAB(:)=.false. call PRIM_RING (FNDTAB, j, l, k, h, CPAT, VPAT, QUERNG, PRINGORD, MATDIST, & SAVRING, ORDRING, TRING, INDTE, RES_LIST) if (TBR .or. ALC) goto 002 m = 2*k if (FNDTAB(1)) then if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (FNDTAB(2)) then m = m + 1 if (APNA(m).eq.0) then APNA(m)=1 MINAT=min(MINAT,m) MAXAT=max(MAXAT,m) SAUT=.false. endif endif if (allocated(QUERNG)) deallocate(QUERNG) enddo ! end ring-sizes-loop if (.not. SAUT) then do k=3, TAILLR do m=3, TAILLR if (APNA(k).eq.1 .and. APNA(m).eq.1) then PNA(k,m,i)=PNA(k,m,i)+1 endif enddo enddo MAXPNA(MAXAT,i)=MAXPNA(MAXAT,i)+1 MINPNA(MINAT,i)=MINPNA(MINAT,i)+1 endif endif enddo ! end atoms-loop do j=3, TAILLR NRING(j,i) = TRING(j) enddo k = RINGS_TO_OGL (i, RID, NRING, SAVRING, ORDRING) !$OMP ATOMIC ri = ri + k do k=3, TAILLR if (NRING(k,i) .ne. 0) then ! do j=1, NRING(k,i) !! The algorithm implies that you may have a problem for !! the biggest size of ring therefore lets put this size out of the proof checking. !! Furthermore we check results only if all atoms are used to initiate the search. ! if (mod(INDRING(k,j,i), k).ne.0 .and. k.lt.TAILLR .and. LTLT.eq.0) then ! write (6, 003) i, k, j, INDRING(k,j,i) ! write (6, 007) ! do l=1, k ! write (6, '(i4,2x)', advance='no') RINGORD(k,j,l,i) ! enddo ! write (6, *) ! write (6, 004) ! if (ABAB) then ! write (6, 008) ! else ! write (6, 005) ! endif ! write (6, *) ! endif ! enddo endif enddo 002 continue enddo #ifdef OPENMP !$OMP END DO NOWAIT #endif 001 continue if (ALC) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: PRIMITIVE_RING_SEARCH_STEPS"//CHAR(0), "Table: "//ALC_TAB(1:LEN_TRIM(ALC_TAB))//CHAR(0)) endif if (allocated(TRING)) deallocate (TRING) if (allocated(SAVRING)) deallocate (SAVRING) if (allocated(ORDRING)) deallocate (ORDRING) if (allocated(CPAT)) deallocate (CPAT) if (allocated(VPAT)) deallocate (VPAT) if (allocated(INDTE)) deallocate (INDTE) if (allocated(APNA)) deallocate (APNA) if(allocated(MATDIST)) deallocate(MATDIST) if(allocated(QUEUE)) deallocate(QUEUE) if (allocated(PRINGORD)) deallocate(PRINGORD) #ifdef OPENMP !$OMP END PARALLEL #endif if (ri .eq. NS) ri = RINGS_TO_OGL_MENU (RID, NRING) END SUBROUTINE SUBROUTINE DIJKSTRA(NODE, CPT, VPT, QUE, MATDIS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: NODE INTEGER, DIMENSION(NNA), INTENT(INOUT) :: QUE, MATDIS INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER :: QBEGIN, QEND, QID, AT1, AT2, DAT1 QUE(:)=0 MATDIS(:)=NNA+2 QUE(1)=NODE MATDIS(NODE)=0 QBEGIN=0 QEND=1 ! Trouver les plus cours chemin reliant un atome aux autres ! Find the shortest paths between atoms do while (QBEGIN < QEND) QBEGIN=QBEGIN+1 AT1=QUE(QBEGIN) DAT1=MATDIS(AT1)+1 do QID=1, CPT(AT1) AT2=VPT(AT1,QID) if (MATDIS(AT2) .gt. DAT1) then MATDIS(AT2) = DAT1 if (DAT1 < NNA) then QEND=QEND+1 QUE(QEND)= AT2 endif endif enddo enddo END SUBROUTINE RECURSIVE SUBROUTINE SPATH_REC (PTH, NODE, LENGTH, LNGTH, MATDIS, CPT, VPT, NPRI, PORDR) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(INOUT) :: PTH INTEGER, INTENT(IN) :: NODE, LENGTH, LNGTH INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT, MATDIS INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER, DIMENSION(NNA), INTENT(INOUT) :: NPRI INTEGER, DIMENSION(NUMA*10,TAILLR), INTENT(INOUT) :: PORDR INTEGER :: DISTNN, IDV, VDI, IDT NPRI(LENGTH) = NODE do IDV=1, CPT(NODE) ! Boucle sur tous les voisins du noeud "NODE" ! Loop on all the neighbors of node "NODE" VDI=VPT(NODE,IDV) ! Selection du voisin - neighbor selection DISTNN=MATDIS(VDI) ! Distance to starting atom = VDI in the node distance table if (DISTNN .eq. 0) then PTH=PTH+1 do IDT=1, LNGTH PORDR(PTH,IDT)=NPRI(IDT) enddo elseif (DISTNN .eq. LENGTH-1) then call SPATH_REC (PTH, VDI, DISTNN, LNGTH, MATDIS, CPT, VPT, NPRI, PORDR) endif enddo END SUBROUTINE INTEGER FUNCTION REAL_ATOM_ID (IND, NATS) IMPLICIT NONE INTEGER, INTENT(IN) :: IND, NATS REAL_ATOM_ID= IND - (IND/NATS)*NATS if (REAL_ATOM_ID .eq. 0) REAL_ATOM_ID=NATS END FUNCTION SUBROUTINE PRIM_RING (FNDTAB, NODE, PTH, LGTH, NPT, CPT, VPT, QRNG, PORD, MATDIS, & RSAVED, OSAVED, TRIN, INDP, RESLP) USE PARAMETERS IMPLICIT NONE LOGICAL, DIMENSION(2), INTENT(INOUT) :: FNDTAB INTEGER, INTENT(IN) :: NODE, PTH, LGTH, NPT INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT, MATDIS INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRIN INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER, DIMENSION(NPT,2), INTENT(IN) :: QRNG INTEGER, DIMENSION(NUMA*10,TAILLR), INTENT(INOUT) :: PORD INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDP INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESLP INTEGER :: RM, RN, PR, PTH1, PTH2, IRS, IRX INTEGER :: ATB, ATA, ATC, ATD, ATE, MAXD, MIND INTEGER :: PROBE INTEGER, DIMENSION(TAILLR) :: TOPRIM, PRIMTO LOGICAL:: GOAL, TOSAVE LOGICAL, DIMENSION(NNA) :: CHK INTERFACE INTEGER FUNCTION REAL_ATOM_ID (IND, NATS) INTEGER, INTENT(IN) :: IND, NATS END FUNCTION END INTERFACE GOAL=.false. do PR=1, PTH ! Premier chemin i->j - First path i->j PTH1= QRNG(PR,1) ! Second chemin i->k - second path i->k PTH2= QRNG(PR,2) PROBE=0 ATA= PORD(PTH1,LGTH) ATB= PORD(PTH2,LGTH) do RM=1, CPT(ATA) ATE=VPT(ATA,RM) if (ATE .eq. ATB) PROBE=1 enddo if (ATA .eq. ATB .or. PROBE .eq. 1) then do RM=1, LGTH-1 do RN=RM, LGTH-1+PROBE ATC= PORD(PTH1,RM) ATD= PORD(PTH2,RN) MAXD=MATDIS(ATC)+MATDIS(ATD) MIND=2*LGTH+PROBE-MAXD CHK(:)=.false. call PAIR_SEARCH (GOAL, ATC, ATD, 1, MAXD, MIND, CPT, VPT, CHK) if (GOAL) then GOAL= .false. goto 001 endif enddo enddo do RN=1, LGTH-1 do RM=RN, LGTH-1+PROBE ATC= PORD(PTH1,RM) ATD= PORD(PTH2,RN) MAXD=MATDIS(ATC)+MATDIS(ATD) MIND=2*LGTH+PROBE-MAXD CHK(:)=.false. call PAIR_SEARCH (GOAL, ATC, ATD, 1, MAXD, MIND, CPT, VPT, CHK) if (GOAL) then GOAL= .false. goto 001 endif enddo enddo if ((PROBE.eq.0 .and. 2*LGTH.le.TAILLR) .or. (PROBE.eq.1 .and. 2*LGTH.lt.TAILLR)) then TOPRIM(:)=0 PRIMTO(:)=0 do IRX=1, LGTH TOPRIM(IRX)=PORD(PTH1,IRX) enddo if (PROBE .eq. 1) TOPRIM(LGTH+1)=PORD(PTH2,LGTH) IRS=LGTH+PROBE do IRX=LGTH-1, 1, -1 IRS=IRS+1 TOPRIM(IRS)=PORD(PTH2,IRX) enddo TOPRIM(IRS+1)=NODE ! To find atom id in the primitive unit cell do IRX=1, 2*LGTH+PROBE PRIMTO(IRX)=REAL_ATOM_ID(TOPRIM(IRX),NA) enddo TOSAVE=.true. if (ABAB) then if (PROBE .eq. 0) then call TESTABAB (TOSAVE,LGTH,PRIMTO) else TOSAVE=.false. endif endif if (NO_HOMO) then call TESTHOMO(TOSAVE,LGTH,PRIMTO) endif if (TOSAVE .and. LGTH*2+PROBE.le.TAILLR) then if (CALC_STRINGS) then call STRONG_RINGS (FNDTAB, LGTH, PROBE, TOPRIM, PRIMTO, RSAVED, OSAVED, TRIN, INDP, RESLP, CPT, VPT) else call SAVE_DIJKSTRA_RING (PRIMTO, LGTH*2+PROBE, RSAVED, OSAVED, TRIN, INDP, RESLP) FNDTAB(1+PROBE)=.true. endif if (TBR .or. ALC) goto 002 endif endif endif 001 continue enddo 002 continue END RECURSIVE SUBROUTINE PAIR_SEARCH (GOAL, AT1, AT2, LG, MAXM, MINM, CPT, VPT, CHK) USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(INOUT) :: GOAL INTEGER, INTENT(IN) :: AT1, AT2, LG, MAXM, MINM INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHK INTEGER :: PSC, AT3 CHK(AT1)=.true. if (AT1 .eq. AT2) then GOAL=.true. else do PSC=1, CPT(AT1) AT3=VPT(AT1,PSC) if (.not.CHK(AT3)) then if (AT3.eq.AT2) then GOAL=.true. goto 001 elseif (LG.lt.MAXM-1 .and. LG.lt.MINM-1) then call PAIR_SEARCH (GOAL, AT3, AT2, LG+1, MAXM, MINM, CPT, VPT, CHK) if (GOAL) then goto 001 endif endif endif enddo endif 001 continue CHK(AT1)=.false. END SUBROUTINE SUBROUTINE STRONG_RINGS (FNDTAB, RLGTH, RPROBE, TOPRIM, PRIMTO, ASRING, OSRING, TRNG, INDT, RESL, CPT, VPT) USE PARAMETERS IMPLICIT NONE LOGICAL, DIMENSION(2), INTENT(INOUT) :: FNDTAB INTEGER, INTENT(IN) :: RLGTH, RPROBE INTEGER, DIMENSION(TAILLR), INTENT(IN) :: TOPRIM, PRIMTO INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: ASRING, OSRING INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: TRNG, RESL INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT INTEGER :: RM, RN, STLGT LOGICAL, DIMENSION(NNA) :: CHKS LOGICAL :: DVSTR LOGICAL :: SGOAL=.false. LOGICAL :: FGOAL=.false. STLGT=2*RLGTH+RPROBE CHKS(:)=.false. do RM=1, STLGT-1 do RN=RM+1, STLGT DVSTR=.false. call SEARCH_STRONG_RINGS (DVSTR, RM, RN, STLGT, STLGT, SGOAL, FGOAL, TOPRIM, CPT, VPT, CHKS) if (TBR .or. ALC) goto 002 if (FGOAL) goto 001 if (SGOAL) goto 002 enddo enddo 001 continue call SAVE_DIJKSTRA_RING (PRIMTO, RLGTH*2+RPROBE, ASRING, OSRING, TRNG, INDT, RESL) FNDTAB(1+RPROBE)=.true. if (TBR .or. ALC) goto 002 002 continue END SUBROUTINE RECURSIVE SUBROUTINE SEARCH_STRONG_RINGS (DLOW, IDX, IDY, DLGTR, LGTR, SRGOAL, FRGOAL, TOTER, CPT, VPT, CHKS) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: DLGTR, LGTR, IDX, IDY LOGICAL, INTENT(INOUT) :: DLOW, SRGOAL, FRGOAL INTEGER, DIMENSION(DLGTR), INTENT(IN) :: TOTER INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHKS INTEGER :: DXY, DYX, DTEST, DMIN INTEGER :: RG, RF, RH, RJ, RL, RO, RP, RQ, RR INTEGER :: NBPATH, IDZ INTEGER, DIMENSION(:), ALLOCATABLE :: STRST, NEWTER INTEGER, DIMENSION(:,:), ALLOCATABLE :: TOTPATH LOGICAL, DIMENSION(:), ALLOCATABLE :: CUTRING LOGICAL, DIMENSION(NNA) :: CHK TYPE(RING), TARGET :: ST_RING TYPE(RING), POINTER :: SRING, TMP_RI INTERFACE RECURSIVE SUBROUTINE PATH_SEARCH (AT0,AT1,AT2,IDT1,IDT2,DMAX,DMED,DARING,NPATH,DLPATH, & STPATH,ACRING,TPATH,CUTPATH,CPT,VPT,CHK,CHKS,SRING) USE PARAMETERS INTEGER, INTENT(IN) :: AT0, AT1, AT2, IDT1, IDT2, DMAX, DMED, DARING INTEGER, INTENT(INOUT) :: NPATH LOGICAL, INTENT(INOUT) :: DLPATH INTEGER, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: STPATH INTEGER, DIMENSION(DMAX*DMAX,DMAX), INTENT(INOUT) :: TPATH INTEGER, DIMENSION(DMED), INTENT(IN) :: ACRING INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: CUTPATH LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHK, CHKS TYPE (RING), POINTER, INTENT(INOUT) :: SRING END SUBROUTINE SHORTCUT_RING (IDA, IDB, IDC, DLT, TABAB, SRING) USE PARAMETERS INTEGER, INTENT(IN) :: IDA, IDB, IDC, DLT INTEGER, DIMENSION(DLT), INTENT(IN) :: TABAB TYPE(RING), POINTER, INTENT(INOUT) :: SRING END SUBROUTINE CREAT_RING (RING_INIT, ELEM_CR) USE PARAMETERS TYPE (RING), INTENT(INOUT) :: RING_INIT INTEGER, INTENT(IN) :: ELEM_CR END SUBROUTINE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING INTEGER, INTENT(IN) :: ELEM_DO END SUBROUTINE END INTERFACE do RG=1, DLGTR CHKS(TOTER(RG))=.true. enddo DXY=abs(IDY-IDX) DYX=DLGTR-DXY DMIN=min(DXY,DYX) DTEST=LGTR-1-DMIN ! First we find find a ring starting from an atom i and enclosing ! all tested atoms, then this ring will be tested and so on ! if the size of the enclosing ring became smaller than ! DLGTR then the initial ring is not strong if (DTEST.ge.2) then do RJ=2, DTEST if (allocated(TOTPATH)) deallocate(TOTPATH) allocate(TOTPATH(RJ*RJ,RJ), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="TOTPATH" ALC=.true. goto 001 endif if (allocated(CUTRING)) deallocate(CUTRING) allocate(CUTRING(RJ*RJ), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="CUTRING" ALC=.true. goto 001 endif if (allocated(STRST)) deallocate(STRST) allocate(STRST(RJ*RJ), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="STRST" ALC=.true. goto 001 endif NBPATH=0 STRST(:)=0 CUTRING(:)=.false. TOTPATH(:,:)=0 CHK(:)=.false. RR=1 call CREAT_RING (ST_RING, TOTER(IDX)) SRING => ST_RING ! On recherche tous les chemins de taille RJ entre les atomes TOTER(IDX) et TOTER(IDY) ! On stock ces NBPATH chemins dans le tableau TOTPATH ! We are looking for all path of size RJ between atoms TOTER(IDX) and TOTER(IDY) ! Then these NBPATH are saved in the tab TOTPATH call PATH_SEARCH (TOTER(IDX),TOTER(IDX),TOTER(IDY),IDX,IDY,RJ,DLGTR,LGTR,NBPATH,DLOW, & STRST,TOTER,TOTPATH,CUTRING,CPT,VPT,CHK,CHKS,SRING) if (ALC) goto 001 if (NBPATH .ne. 0) then do RH=1, NBPATH IDZ=0 if (CUTRING(RH)) then do RG=1, DLGTR if (TOTER(RG) .eq. STRST(RH)) then IDZ=RG exit endif enddo endif if(IDZ.eq.0)then if (.not.CUTRING(RH)) then call CREAT_RING (ST_RING, TOTER(IDX)) SRING => ST_RING do RG=1, RJ RR=RR+1 call DO_RING (SRING, TOTPATH(RH,RG)) if (ALC) goto 001 enddo if (DXY .le. DYX) then do RG=IDY+1, DLGTR call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo do RG=1, IDX call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo else do RG=IDY-1, IDX, -1 call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo endif else call CREAT_RING (ST_RING, TOTER(1)) SRING => ST_RING do RG=2, DLGTR call DO_RING (SRING, TOTER(RG)) if (ALC) goto 001 enddo CHKS(TOTPATH(RH,1))=.true. endif else call CREAT_RING (ST_RING, TOTPATH(RH,1)) SRING => ST_RING call SHORTCUT_RING (IDX, IDY, IDZ, DLGTR, TOTER, SRING) if (ALC) goto 001 endif ! A new path as been found, so a new rings as been built according ! to the new list of atoms. ! The size of this new ring has to be tested if (SRING%SPEC+1 .lt. LGTR) then TMP_RI => SRING do RF=1, SRING%SPEC TMP_RI => TMP_RI%PAST deallocate (TMP_RI%NEXT) enddo SRGOAL=.true. goto 001 else ! If all the atoms are CHK and ring is bigger than the initial ring ! the initial ring is strong .. we have to check this RF=0 do RG=1, NNA if (CHKS(RG)) RF=RF+1 enddo if (RF .eq. NNA) then TMP_RI => SRING do RG=1, SRING%SPEC TMP_RI => TMP_RI%PAST deallocate (TMP_RI%NEXT) enddo FRGOAL=.true. goto 001 else ! Else the new ring has to be tested RR = SRING%SPEC+1 if (allocated(NEWTER)) deallocate(NEWTER) allocate(NEWTER(RR), STAT=ERR) if (ERR .ne. 0) then ALC_TAB="NEWTER" ALC=.true. goto 001 endif SRGOAL=.false. TMP_RI => SRING do RG=1, RR NEWTER(RR-RG+1)=TMP_RI%ATOM if (RG .lt. RR) then TMP_RI => TMP_RI%PAST deallocate (TMP_RI%NEXT) endif enddo DLOW=.false. SRING => ST_RING if (IDZ.eq.0) then if (DMIN .eq. 1) then RO=2 RP=RJ DLOW=.true. else RO=1 RP=RR-1 endif else RO=1 RP=RR-1 endif do RG=RO, RP if (IDZ.eq.0) then if (DMIN .eq. 1) then DLOW=.true. RQ=RJ+2 else RQ=RG+1 endif else RQ=RG+1 endif do RF=RQ, RR call SEARCH_STRONG_RINGS (DLOW, RG, RF, RR, LGTR, SRGOAL, FRGOAL, NEWTER, CPT, VPT, CHKS) if (TBR .or. ALC) goto 001 if (SRGOAL .or. FRGOAL) goto 001 do RL=1, DLGTR CHKS(TOTER(RL))=.true. enddo if (IDZ.eq.0 .and. CUTRING(RH)) CHKS(TOTPATH(RH,1))=.true. enddo enddo if (allocated(NEWTER)) deallocate(NEWTER) endif endif if (IDZ.eq.0 .and. CUTRING(RH)) CHKS(TOTPATH(RH,1))=.false. enddo else SRGOAL=.false. endif if (allocated(TOTPATH)) deallocate(TOTPATH) if (allocated(CUTRING)) deallocate(CUTRING) if (allocated(STRST)) deallocate(STRST) enddo endif 001 continue if (allocated(TOTPATH)) deallocate(TOTPATH) if (allocated(CUTRING)) deallocate(CUTRING) if (allocated(STRST)) deallocate(STRST) if (allocated(NEWTER)) deallocate(NEWTER) do RG=1, DLGTR CHKS(TOTER(RG))=.false. enddo END SUBROUTINE RECURSIVE SUBROUTINE PATH_SEARCH (AT0,AT1,AT2,IDT1,IDT2,DMAX,DMED,DARING,NPATH,DLPATH, & STPATH,ACRING,TPATH,CUTPATH,CPT,VPT,CHK,CHKS,SRING) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: AT0, AT1, AT2, IDT1, IDT2, DMAX, DMED, DARING INTEGER, INTENT(INOUT) :: NPATH LOGICAL, INTENT(INOUT) :: DLPATH INTEGER, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: STPATH INTEGER, DIMENSION(DMAX*DMAX,DMAX), INTENT(INOUT) :: TPATH INTEGER, DIMENSION(DMED), INTENT(IN) :: ACRING INTEGER, DIMENSION(NNA), INTENT(IN) :: CPT INTEGER, DIMENSION(NNA,MAXN), INTENT(IN) :: VPT LOGICAL, DIMENSION(DMAX*DMAX), INTENT(INOUT) :: CUTPATH LOGICAL, DIMENSION(NNA), INTENT(INOUT) :: CHK, CHKS TYPE (RING), POINTER, INTENT(INOUT) :: SRING INTEGER :: AT3, AT4, AT5, AT6, AT7 INTEGER :: DUV, DUW, DVW LOGICAL :: VAL1, VAL2 LOGICAL :: TOUCH TYPE (RING), POINTER :: TMPR INTERFACE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING INTEGER, INTENT(IN) :: ELEM_DO END SUBROUTINE END INTERFACE CHK(AT1)=.true. if (AT1.eq.AT2 .and. SRING%SPEC.eq.DMAX) then NPATH=NPATH+1 TMPR => SRING do AT3=1, DMAX TPATH(NPATH,DMAX-AT3+1)=TMPR%ATOM if (AT3 .lt. DMAX) TMPR => TMPR%PAST enddo else do AT4=1, CPT(AT1) AT3=VPT(AT1,AT4) if (.not.CHK(AT3)) then call DO_RING (SRING, AT3) if (ALC) goto 001 if (AT3 .eq. AT2 .and. SRING%SPEC.eq.DMAX) then NPATH=NPATH+1 TMPR => SRING do AT5=1, DMAX TPATH(NPATH,DMAX-AT5+1)=TMPR%ATOM if (AT5 .lt. DMAX) TMPR => TMPR%PAST enddo elseif (SRING%SPEC.lt.DMAX .and. .not.CHKS(AT3)) then TOUCH=.false. AT7=0 VAL1=.false. VAL2=.false. do AT5=1, CPT(AT3) AT6=VPT(AT3,AT5) if (AT6 .eq. AT0) VAL1=.true. if (AT6 .eq. AT2) VAL2=.true. if (CHKS(AT6)) then AT7=AT7+1 if (AT6.ne.AT0 .and. AT6.ne.AT2) STPATH(NPATH+1)=AT6 endif enddo AT6=0 do AT5=1, DMED if (ACRING(AT5) .eq. STPATH(NPATH+1)) then AT6=AT5 exit endif enddo if (AT7 .eq. 0) then TOUCH=.false. elseif (AT7.eq.1 .and. VAL1 .and. .not.VAL2) then TOUCH=.false. elseif (AT7.eq.1 .and. VAL2 .and. .not.VAL1) then TOUCH=.false. elseif (AT7.eq.1 .and. .not.VAL1 .and. .not.VAL2) then TOUCH=.true. elseif (AT7.eq.2 .and. VAL1 .and. VAL2 .and. DMAX.eq.2) then TOUCH=.false. elseif (AT7.gt.2 .and. VAL1 .and. VAL2 .and. DMAX.eq.2) then if (DLPATH) then TOUCH=.true. else if (AT6 .ne. 0) then if (AT6 .lt. IDT1) then DUV=IDT1-AT6 DVW=IDT2-IDT1 DUW=DMED-(IDT2-AT6) elseif(AT6 .lt. IDT2) then DUV=AT6-IDT1 DVW=DMED-(AT2-AT1) DUW=IDT2-AT6 elseif(AT6 .gt. IDT2) then DUV=DMED-(AT6-IDT1) DVW=IDT2-IDT1 DUW=AT6-IDT2 endif if (DUV.lt.DARING-1 .and. DUW.lt.DARING-1) then CUTPATH(NPATH+1)=.true. TOUCH=.false. elseif (DVW.lt.DARING-1 .and. DUW.lt.DARING-1) then CUTPATH(NPATH+1)=.true. TOUCH=.false. elseif (DUV.lt.DARING-1 .and. DVW.lt.DARING-1) then CUTPATH(NPATH+1)=.true. TOUCH=.false. else TOUCH=.true. endif else CUTPATH(NPATH+1)=.true. TOUCH=.false. endif endif else TOUCH=.true. endif if (.not.TOUCH) then call PATH_SEARCH (AT0,AT3,AT2,IDT1,IDT2,DMAX,DMED,DARING,NPATH,DLPATH, & STPATH,ACRING,TPATH,CUTPATH,CPT,VPT,CHK,CHKS,SRING) if (ALC) goto 001 endif endif SRING => SRING%PAST deallocate (SRING%NEXT) endif enddo endif CHK(AT1)=.false. 001 continue END SUBROUTINE SUBROUTINE SHORTCUT_RING (IDA, IDB, IDC, DLT, TABAB, SRING) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: IDA, IDB, IDC, DLT INTEGER, DIMENSION(DLT), INTENT(IN) :: TABAB TYPE(RING), POINTER, INTENT(INOUT) :: SRING INTEGER :: IDD INTEGER :: LXY, LXZ, LYZ INTERFACE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING INTEGER, INTENT(IN) :: ELEM_DO END SUBROUTINE END INTERFACE if (IDA .gt. IDC) then ! IDB > IDA > IDC LXZ=IDA-IDC LXY=IDB-IDA LYZ=DLT-(IDB-IDC) if (LXY .gt. LYZ) then if (LXY .gt. LXZ) then do IDD=IDA, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDC, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif else if (LXZ .gt. LYZ) then do IDD=IDC, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDB, DLT call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo do IDD=1, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif endif else ! IDB > IDA .and. IDC .gt. IDA if (IDC .gt. IDB) then ! IDB > IDA .and. IDC .gt. IDA .and. IDC .gt. IDB ! => IDC > IDB > IDA LXY=IDB-IDA LYZ=IDC-IDB LXZ=DLT-(IDC-IDA) if (LXY .gt. LYZ) then if (LXY .gt. LXZ) then do IDD=IDA, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDC, DLT call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo do IDD=1, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif else if (LYZ .ge. LXZ) then do IDD=IDB, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDA, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif endif else ! IDB > IDA .and. IDC .gt. IDA .and. IDB .gt. IDC ! => IDB > IDC > IDA LXY=DLT-(IDB-IDA) LYZ=IDB-IDC LXZ=IDC-IDA if (LXY .gt. LYZ) then if (LXY .gt. LXZ) then do IDD=IDB, DLT call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo do IDD=1, IDA call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDA, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif else if (LYZ .gt. LXZ) then do IDD=IDC, IDB call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo else do IDD=IDA, IDC call DO_RING (SRING, TABAB(IDD)) if (ALC) goto 001 enddo endif endif endif endif 001 continue END SUBROUTINE SUBROUTINE TESTABAB(VALTEST, LGTEST, PRIMT) USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(INOUT) :: VALTEST INTEGER, INTENT(IN) :: LGTEST INTEGER, DIMENSION(TAILLR), INTENT(IN) :: PRIMT INTEGER :: LTA, LTB, LTC, LTD LTA=LOT(PRIMT(1)) LTB=LOT(PRIMT(2)) VALTEST=.true. if (LTA .ne. LTB) then do LTD=3, 2*LGTEST LTC=LOT(PRIMT(LTD)) if (mod(LTD,2).eq.0 .and. LTC.ne.LTB) then VALTEST=.false. exit elseif (mod(LTD,2).ne.0 .and. LTC.ne.LTA) then VALTEST=.false. exit endif enddo else VALTEST=.false. endif END SUBROUTINE SUBROUTINE TESTHOMO(VALTEST, LGTEST, PRIMT) USE PARAMETERS IMPLICIT NONE LOGICAL, INTENT(INOUT) :: VALTEST INTEGER, INTENT(IN) :: LGTEST INTEGER, DIMENSION(TAILLR), INTENT(IN) :: PRIMT INTEGER :: LTA, LTB VALTEST=.true. do LTA=1, 2*LGTEST LTB=LTA+1 if (LTA .eq. 2*LGTEST) LTB=1 if (LOT(PRIMT(LTA)) .eq. LOT(PRIMT(LTB))) then VALTEST=.false. exit endif enddo END SUBROUTINE SUBROUTINE SAVE_DIJKSTRA_RING (TAB, TLES, RSAVED, OSAVED, TRING, INDT, RESL) USE PARAMETERS IMPLICIT NONE INTEGER, DIMENSION(TAILLR), INTENT(IN) :: TAB INTEGER, INTENT(IN) :: TLES INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(INOUT) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA), INTENT(INOUT) :: INDT INTEGER, DIMENSION(TAILLR), INTENT(INOUT) :: RESL, TRING INTEGER :: idx, idy LOGICAL :: NEWRING INTEGER, DIMENSION(TLES) :: TOTRI, TOSAV ! A ring has been found, we need to check if it has already been found or not do idx=1, TLES ! Creation of two tab first for the numerical sorting of the list ! The other without sorting for output TOTRI(idx)= TAB(idx) TOSAV(idx)= TAB(idx) enddo call TRI(TOTRI, TLES) if (TRING(TLES) .ne. 0) then do idx=1, TRING(TLES) ! do-loop on existing rings to check if the new on has already been found NEWRING=.false. do idy=1, TLES if (TOTRI(idy) .ne. RSAVED(TLES,idx,idy)) then NEWRING=.true. exit endif enddo if (.not.NEWRING) then ! Already been found n-times, increment of the counter INDT(idx)=INDT(idx)+1 exit endif enddo else NEWRING=.true. endif if (NEWRING) then ! A new ring has been found ! We save the data RESL(TLES)=RESL(TLES)+1 TRING(TLES)=TRING(TLES)+1 if (TRING(TLES) .gt. NUMA) then TBR=.true. goto 001 endif INDT(TRING(TLES))=INDT(TRING(TLES))+1 do idx=1, TLES RSAVED(TLES,TRING(TLES),idx)=TOTRI(idx) OSAVED(TLES,TRING(TLES),idx)=TOSAV(idx) enddo endif 001 continue END SUBROUTINE Atomes-GNU-1.1.14/src/fortran/rings_ogl.F90000066400000000000000000000164711457665371200202130ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file rings_ogl.F90 !! @short Send ring statistics data to C for OpenGL rendering !! @author Sébastien Le Roux INTEGER FUNCTION RINGS_TO_OGL (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA) :: RING_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID INTEGER :: RAA, RAB, RAC, RAD, RAE RAB=0 do RAA=3, TAILLR if (NRI(RAA,STEP) > 0) then RAB=RAB+1 call allocate_all_rings (IDSEARCH, STEP-1, RAA, NRI(RAA,STEP)) endif enddo do RAA=1, NA do RAB=3, TAILLR RAC = 0 do RAD=1, NUMA RING_LIST(RAD) = 0 enddo do RAD=1, NRI(RAB,STEP) do RAE=1, RAB if (RSAVED(RAB,RAD,RAE) .eq. RAA) then RAC=RAC+1 RING_LIST(RAC) = RAD goto 001 endif enddo 001 continue enddo if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL"//CHAR(0), "Table: RING_ID (1)"//CHAR(0)) RINGS_TO_OGL = 0 goto 002 endif do RAD=1, RAC RING_ID(RAD) = RING_LIST(RAD) enddo !write (6, '("Sending atom/rings data:: step= ",i1,", at= ",i4," ring= ",i2,", size= ",i2,", num= ",i4)') STEP-1, RAA-1, IDSEARCH, RAB, RAC if (RAC > 0) call send_atom_rings_id_opengl (STEP-1, RAA-1, IDSEARCH, RAB-1, RAC, RING_ID) enddo enddo do RAA=3, TAILLR if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL"//CHAR(0), "Table: RING_ID (2)"//CHAR(0)) RINGS_TO_OGL = 0 goto 002 endif do RAB=1, NRI(RAA,STEP) do RAC=1, RAA RING_ID(RAC) = OSAVED(RAA,RAB,RAC) enddo call send_rings_opengl (IDSEARCH, STEP-1, RAA-1, RAB-1, RING_ID) enddo enddo RINGS_TO_OGL = 1 if (allocated(RING_ID)) deallocate(RING_ID) 002 continue END FUNCTION INTEGER FUNCTION RINGS_TO_OGL_BIS (STEP, IDSEARCH, NRI, RSAVED, OSAVED) USE PARAMETERS INTEGER, INTENT(IN) :: STEP, IDSEARCH INTEGER, DIMENSION(TAILLR), INTENT(IN) :: NRI INTEGER, DIMENSION(TAILLR,NUMA,TAILLR), INTENT(IN) :: RSAVED, OSAVED INTEGER, DIMENSION(NUMA) :: RING_LIST INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID INTEGER :: RAA, RAB, RAC, RAD, RAE do RAA=3, TAILLR if (NRI(RAA) > 0) call allocate_all_rings (IDSEARCH, STEP-1, RAA, NRI(RAA)) enddo do RAA=1, NA do RAB=3, TAILLR RAC = 0 do RAD=1, NUMA RING_LIST(RAD) = 0 enddo do RAD=1, NRI(RAB) do RAE=1, RAB if (RSAVED(RAB,RAD,RAE) .eq. RAA) then RAC=RAC+1 RING_LIST(RAC) = RAD goto 001 endif enddo 001 continue enddo if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAC), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_BIS"//CHAR(0), "Table: RING_ID (1)"//CHAR(0)) RINGS_TO_OGL_BIS = 0 goto 002 endif do RAD=1, RAC RING_ID(RAD) = RING_LIST(RAD) enddo !write (6, '("Sending atom/rings data:: step= ",i1,", at= ",i4," ring= ",i2,", size= ",i2,", num= ",i4)') STEP-1, RAA-1, IDSEARCH, RAB, RAC if (RAC > 0) call send_atom_rings_id_opengl (STEP-1, RAA-1, IDSEARCH, RAB, RAC, RING_ID) enddo enddo do RAA=3, TAILLR if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(RAA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_BIS"//CHAR(0), "Table: RING_ID (2)"//CHAR(0)) RINGS_TO_OGL_BIS = 0 goto 002 endif do RAB=1, NRI(RAA) do RAC=1, RAA RING_ID(RAC) = OSAVED(RAA,RAB,RAC) enddo call send_rings_opengl (IDSEARCH, STEP-1, RAA, RAB-1, RING_ID) enddo enddo RINGS_TO_OGL_BIS = 1 if (allocated(RING_ID)) deallocate(RING_ID) 002 continue END FUNCTION INTEGER FUNCTION RINGS_TO_OGL_MENU (IDSEARCH, NRI) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(TAILLR, NS), INTENT(IN) :: NRI INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID, RING_JD if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_ID "//CHAR(0)) RINGS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=1, TAILLR RING_ID(i) = 0 do j=1, NS RING_ID(i) = RING_ID(i) + NRI(i,j) enddo if (RING_ID(i) > 0) then k = k + 1 endif enddo if (allocated(RING_JD)) deallocate(RING_JD) allocate(RING_JD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_JD "//CHAR(0)) RINGS_TO_OGL_MENU = 0 goto 001 endif k = 0 do i=1, TAILLR if (RING_ID(i) > 0) then k = k + 1 RING_JD(k) = i endif enddo call send_coord_opengl (4+IDSEARCH, 1, 0, 0, k, k) call init_menurings (4+IDSEARCH, IDSEARCH, k, RING_JD, 1) if (allocated(RING_ID)) deallocate(RING_ID) if (allocated(RING_JD)) deallocate(RING_JD) RINGS_TO_OGL_MENU = 1 001 continue END FUNCTION INTEGER FUNCTION RINGS_TO_OGL_M (IDSEARCH) USE PARAMETERS INTEGER, INTENT(IN) :: IDSEARCH INTEGER, DIMENSION(:), ALLOCATABLE :: RING_ID, RING_JD if (allocated(RING_ID)) deallocate(RING_ID) allocate(RING_ID(TAILLR), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_ID "//CHAR(0)) RINGS_TO_OGL_M = 0 goto 001 endif k = 0 do i=1, TAILLR RING_ID(i) = 0 do j=1, NS RING_ID(i) = RING_ID(i) + NRING(i,j) enddo if (RING_ID(i) > 0) then k = k + 1 endif enddo write (6, *) "k= ",k if (allocated(RING_JD)) deallocate(RING_JD) allocate(RING_JD(k), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: RINGS_TO_OGL_MENU"//CHAR(0), "Table: RING_JD "//CHAR(0)) RINGS_TO_OGL_M = 0 goto 001 endif k = 0 do i=1, TAILLR if (RING_ID(i) > 0) then k = k + 1 RING_JD(k) = i endif enddo call send_coord_opengl (4+IDSEARCH, 1, 0, 0, k, k) call init_menurings (4+IDSEARCH, IDSEARCH, k, RING_JD, 1) if (allocated(RING_ID)) deallocate(RING_ID) if (allocated(RING_JD)) deallocate(RING_JD) RINGS_TO_OGL_M = 1 001 continue END FUNCTION Atomes-GNU-1.1.14/src/fortran/sk.F90000066400000000000000000000264431457665371200166450ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file sk.F90 !! @short S(k) analysis: direct reciprocal space calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION s_of_k (NQ, XA) BIND (C,NAME='s_of_k_') ! Total structure factor ! Partial structure factors from k-points USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ, XA DOUBLE PRECISION :: factor, xfactor if(allocated(Sij)) deallocate(Sij) allocate(Sij(NQ,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: Sij"//CHAR(0)) s_of_k = 0 goto 001 endif Sij(:,:,:)=0.0d0 if(allocated(cij)) deallocate(cij) allocate(cij(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: cij"//CHAR(0)) s_of_k = 0 goto 001 endif if(allocated(sik)) deallocate(sik) allocate(sik(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: sik"//CHAR(0)) s_of_k = 0 goto 001 endif #ifdef OPENMP !t0 = OMP_GET_WTIME () call FOURIER_TRANS_QVECT () !t1 = OMP_GET_WTIME () !write (*,*) "temps d’excecution QVT 2:", t1-t0 #else call FOURIER_TRANS_STEPS () #endif if (allocated(cij)) deallocate(cij) if (allocated(sik)) deallocate(sik) if (allocated(qvectx)) deallocate(qvectx) if (allocated(qvecty))deallocate(qvecty) if (allocated(qvectz)) deallocate(qvectz) if (allocated(modq)) deallocate(modq) if(allocated(S)) deallocate(S) allocate(S(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: S"//CHAR(0)) s_of_k = 0 goto 001 endif if(allocated(XS)) deallocate(XS) allocate(XS(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_k"//CHAR(0), "Table: XS"//CHAR(0)) s_of_k = 0 goto 001 endif factor=0.0d0 do i=1, NSP factor=factor + NBSPBS(i)*NSCATTL(i)**2 enddo factor=factor*NS if (XA .eq. 1) then xfactor=0.0d0 do i=1, NSP xfactor=xfactor + NBSPBS(i)*XSCATTL(i)**2 enddo xfactor=xfactor*NS endif S(:)=0.0d0 XS(:)=0.0d0 do i=1, NQ do k=1, NSP do j=1, NSP S(i)=S(i)+Sij(i,k,j)*NSCATTL(k)*NSCATTL(j) if (XA .eq. 1) then XS(i)=XS(i)+Sij(i,k,j)*XSCATTL(k)*XSCATTL(j) else XS(i)=XS(i)+Sij(i,k,j)*FQX(INT(XSCATTL(k)),K_POINT(i))*FQX(INT(XSCATTL(j)),K_POINT(i)) endif enddo enddo S(i)=S(i)/(factor*degeneracy(i)) if (XA .eq. 1) then XS(i)=XS(i)/(xfactor*degeneracy(i)) else xfactor=0.0d0 do k=1, NSP xfactor=xfactor + NBSPBS(k)*FQX(INT(XSCATTL(k)),K_POINT(i))**2 enddo XS(i)=XS(i)/(xfactor*degeneracy(i)*NS) endif do j=1, NSP do k=1, NSP Sij(i,j,k)=Sij(i,j,k)/(degeneracy(i)*sqrt(dble(NBSPBS(k)*NBSPBS(j)))*NS) enddo enddo enddo if (allocated(degeneracy)) deallocate(degeneracy) if (allocated(cij)) deallocate(cij) if (allocated(sik)) deallocate(sik) if (allocated(qvectx)) deallocate(qvectx) if (allocated(qvecty)) deallocate(qvecty) if (allocated(qvectz)) deallocate(qvectz) if (allocated(modq)) deallocate(modq) s_of_k = SK_SAVE () 001 continue if (allocated(K_POINT)) deallocate(K_POINT) if (allocated(Sij)) deallocate(Sij) if (allocated(S)) deallocate(S) if (allocated(XS)) deallocate(XS) CONTAINS !************************************************************ ! ! this subroutine computes the sine and cosine sums from the ! configuration for all q-vectors needed ! #ifdef OPENMP SUBROUTINE FOURIER_TRANS_STEPS (NUMTH) #else SUBROUTINE FOURIER_TRANS_STEPS () #endif USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION :: qx, qy, qz, qtr, sini, cosi #ifdef OPENMP INTEGER, INTENT(IN) :: NUMTH ! // on Steps, Qvect or Atoms ? ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(qx, qy, qz, cij, sik, qtr, sini, cosi, i, j, k, l, m, n) & !$OMP& SHARED(NUMTH, qvectx, qvecty, qvectz, FULLPOS, NS, NSP, NA, LOT, DELTA_Q, NUMBER_OF_QVECT, NQ, modq, qvmin, Sij) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do k=1, NS do j=1, NUMBER_OF_QVECT l=AnINT((modq(j)-qvmin)/DELTA_Q)+1 if (l .le. NQ) then qx=qvectx(j) qy=qvecty(j) qz=qvectz(j) do i=1, NSP cij(i)=0.d0 sik(i)=0.d0 enddo do i=1, NA qtr = qx*FULLPOS(i,1,k)+qy*FULLPOS(i,2,k)+qz*FULLPOS(i,3,k) sini = sin(qtr) cosi = cos(qtr) sik(LOT(i)) = sik(LOT(i)) + sini cij(LOT(i)) = cij(LOT(i)) + cosi enddo do i=1, NSP do m=1, NSP #ifdef OPENMP !$OMP ATOMIC #endif Sij(l,i,m) = Sij(l,i,m) + cij(i)*cij(m) + sik(i)*sik(m) enddo enddo endif enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL #endif END SUBROUTINE #ifdef OPENMP !************************************************************ ! ! this subroutine computes the sine and cosine sums from the ! configuration for all q-vectors needed ! OpenMP // on Qvect ! SUBROUTINE FOURIER_TRANS_QVECT () USE PARAMETERS !$ USE OMP_LIB IMPLICIT NONE INTEGER :: NUMTH DOUBLE PRECISION :: qx, qy, qz, qtr, sini, cosi NUMTH = OMP_GET_MAX_THREADS () if (NUMBER_OF_QVECT.lt.NUMTH) NUMTH=NUMBER_OF_QVECT ! OpemMP on Qvect !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(qx, qy, qz, cij, sik, qtr, sini, cosi, i, j, k, l, m) & !$OMP& SHARED(NUMTH, qvectx, qvecty, qvectz, & !$OMP& FULLPOS, NS, NSP, NA, LOT, DELTA_Q, NUMBER_OF_QVECT, NQ, modq, qvmin, Sij) !$OMP DO SCHEDULE(STATIC,NUMBER_OF_QVECT/NUMTH) do j=1, NUMBER_OF_QVECT l=AnINT((modq(j)-qvmin)/DELTA_Q)+1 if (l .le. NQ) then qx=qvectx(j) qy=qvecty(j) qz=qvectz(j) do k=1, NS do i=1, NSP cij(i)=0.d0 sik(i)=0.d0 enddo do i=1, NA qtr = qx*FULLPOS(i,1,k)+qy*FULLPOS(i,2,k)+qz*FULLPOS(i,3,k) sini = sin(qtr) cosi = cos(qtr) sik(LOT(i)) = sik(LOT(i)) + sini cij(LOT(i)) = cij(LOT(i)) + cosi enddo do i=1, NSP do m=1, NSP !$OMP ATOMIC Sij(l,i,m) = Sij(l,i,m) + cij(i)*cij(m) + sik(i)*sik(m) enddo enddo enddo endif enddo !$OMP END DO NOWAIT !$OMP END PARALLEL END SUBROUTINE #endif DOUBLE PRECISION FUNCTION FQX(TA, Q) USE MENDELEIEV INTEGER, INTENT(IN) :: TA DOUBLE PRECISION, INTENT(IN) :: Q DOUBLE PRECISION :: SINLA DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) ! ! Acta Cryst. (1968). A24, 321 ! ! SINLA = ((sin(THETA)/LAMBDA)**2 ! and 2 d Sin(THETA) = LAMBDA ! so 2 d = LAMBDA / Sin(THETA) ! with d = 2 PI / Q we get: ! 4.0 PI / Q = LAMBDA / Sin(THETA) SINLA=(Q/(4.0*PI))**2 FQX = a1(TA)*exp(-b1(TA)*SINLA) & + a2(TA)*exp(-b2(TA)*SINLA) & + a3(TA)*exp(-b3(TA)*SINLA) & + a4(TA)*exp(-b4(TA)*SINLA) + c(TA) END FUNCTION INTEGER FUNCTION SK_SAVE() USE PARAMETERS INTEGER :: NSQ DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE LOGICAL FUNCTION FZBT (NDQ) INTEGER, INTENT(IN) :: NDQ END FUNCTION END INTERFACE i=0 do j=1, NQ if (S(j) .ne. 0.0) i=i+1 enddo NSQ=i if (NSQ .gt. 0) then ! If wave vectors exist if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NSQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SK_SAVE"//CHAR(0), "Table: SQTAB"//CHAR(0)) SK_SAVE = 0 goto 001 endif i = 0; do k=1, NQ if (k.eq.1 .or. S(k).ne.0.0) then i=i+1 SQTAB(i)= K_POINT(k) endif enddo call save_xsk (NSQ, SQTAB) i=0 do k=1, NQ if (k.eq.1 .or. S(k).ne.0.0) then i=i+1 SQTAB(i)= S(k) endif enddo call save_curve (NSQ, SQTAB, 0, IDSK) i=0 do k=1, NQ if (k.eq.1 .or. S(k).ne.0.0) then i=i+1 SQTAB(i)= (S(k)-1.0)*K_POINT(k) endif enddo call save_curve (NSQ, SQTAB, 2, IDSK) i=0 do k=1, NQ if (k.eq.1 .or. S(k).ne.0.0) then i=i+1 SQTAB(i)= XS(k) endif enddo call save_curve (NSQ, SQTAB, 4, IDSK) i=0 do k=1, NQ if (k.eq.1 .or. S(k).ne.0.0) then i=i+1 SQTAB(i)= (XS(k)-1.0)*K_POINT(k) endif enddo call save_curve (NSQ, SQTAB, 6, IDSK) l = 8 do i=1, NSP do j=1, NSP m=0 do k=1, NQ if (k.eq.1 .or. S(k).ne.0.0) then m=m+1 SQTAB(m)=Sij(k,i,j) endif enddo call save_curve (NSQ, SQTAB, l, IDSK) l=l+2 enddo enddo ! To compute FZ and BT partials if (.not.FZBT (NQ)) then SK_SAVE = 0 goto 001 endif do i=1, NSP do j=1, NSP m=0 do k=1, NQ if (k.eq.1 .or. S(k).ne.0.0) then m=m+1 SQTAB(m)= FZSij(k,i,j) endif enddo call save_curve (NSQ, SQTAB, l, IDSK) l=l+2 enddo enddo if (NSP .eq. 2) then do i=1, 4 k=0 do j=1, NQ if (j.eq.1 .or. S(j).ne.0.0) then k=k+1 SQTAB(k)= BTij(j,i) endif enddo call save_curve (NSQ, SQTAB, l, IDSK) l=l+2 enddo endif SK_SAVE=1 endif ! If wave vectors exist 001 continue if (allocated(FZSij)) deallocate(FZSij) if (NSP.eq.2 .and. allocated(BTij)) deallocate(BTij) if (allocated(SQTAB)) deallocate(SQTAB) END FUNCTION END FUNCTION s_of_k INTEGER (KIND=c_int) FUNCTION smooth_and_save (DPOINT, CTS, SFC, IDC, NQPTS, DATS) BIND (C,NAME='smooth_and_save_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: IDC, NQPTS, DATS REAL (KIND=c_double), DIMENSION(NQPTS), INTENT(IN) :: DPOINT, CTS REAL (KIND=c_double), INTENT(IN) :: SFC DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE LOGICAL FUNCTION SMOOTH (TABTOLISS, GTOLISS, DIMTOLISS, SIGMALISS) INTEGER, INTENT(IN) :: DIMTOLISS DOUBLE PRECISION, INTENT(IN) :: SIGMALISS DOUBLE PRECISION, INTENT(IN), DIMENSION(DIMTOLISS) :: GTOLISS DOUBLE PRECISION, INTENT(INOUT), DIMENSION(DIMTOLISS) :: TABTOLISS END FUNCTION END INTERFACE if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NQPTS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: smooth_and_save"//CHAR(0), "Table: SQTAB"//CHAR(0)) smooth_and_save=0 goto 001 endif do k=1, NQPTS SQTAB(k)=CTS(k) enddo if (.not.SMOOTH (SQTAB, DPOINT, NQPTS, SFC)) then smooth_and_save=0 goto 001 endif call save_curve (NQPTS, SQTAB, IDC, DATS) smooth_and_save=1 001 continue if (allocated(SQTAB)) deallocate(SQTAB) END FUNCTION Atomes-GNU-1.1.14/src/fortran/spherical.F90000066400000000000000000000235421457665371200201770ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file spherical.F90 !! @short Spherical harmonics analysis !! @author Sébastien Le Roux ! Bond order parameter from spherical harmonics INTEGER (KIND=c_int) FUNCTION sphericals (MAXL, SPC, GEO, IDC, COOSPH) USE PARAMETERS #ifdef OPENMP !$ USE OMP_LIB #endif IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: MAXL, SPC, GEO, IDC INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: COOSPH INTEGER :: NSPSH INTEGER, DIMENSION(:), ALLOCATABLE :: NEIGH LOGICAL :: SPHRUN DOUBLE PRECISION :: XC, YC, ZC DOUBLE PRECISION :: SR, ST, SP DOUBLE PRECISION, DIMENSION(0:MAXL,-MAXL:MAXL) :: HSP ! DOUBLE PRECISION, DIMENSION(:,:,:), ALLOCATABLE :: THSP DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: ATHSP DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: SPTSHP DOUBLE PRECISION, DIMENSION(0:MAXL) :: SPHA #ifdef OPENMP INTEGER :: NUMTH LOGICAL :: DOATOMS #endif INTERFACE DOUBLE PRECISION FUNCTION PLEGENDRE (l, m, x) INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION DOUBLE PRECISION FUNCTION CALCDIJ (R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION END INTERFACE if (allocated(NEIGH)) deallocate(NEIGH) allocate(NEIGH(NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: sphericals"//CHAR(0), "Table: NEIGH"//CHAR(0)) sphericals=0 goto 001 endif ! if (allocated(THSP)) deallocate(THSP) ! allocate(THSP(NBONDS,0:MAXL,-MAXL:MAXL), STAT=ERR) ! if (ERR .ne. 0) then ! call show_error ("Impossible to allocate memory"//CHAR(0), & ! "Function: sphericals"//CHAR(0), "Table: THSP"//CHAR(0)) ! sphericals=0 ! goto 001 ! endif if (allocated(ATHSP)) deallocate(ATHSP) allocate(ATHSP(0:MAXL,-MAXL:MAXL), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: sphericals"//CHAR(0), "Table: ATHSP"//CHAR(0)) sphericals=0 goto 001 endif if (allocated(SPTSHP)) deallocate(SPTSHP) allocate(SPTSHP(0:MAXL,-MAXL:MAXL), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: sphericals"//CHAR(0), "Table: SPTSHP"//CHAR(0)) sphericals=0 goto 001 endif ATHSP(:,:)=0.0d0 SPTSHP(:,:)=0.0d0 ANBONDS=0 NSPSH=0 #ifdef OPENMP NUMTH = OMP_GET_MAX_THREADS () DOATOMS=.false. if (NS.lt.NUMTH) then if (NUMTH .ge. 2*(NS-1)) then DOATOMS=.true. else NUMTH=NS endif endif if (ALL_ATOMS) DOATOMS=.true. if (DOATOMS) then if (NA.lt.NUMTH) NUMTH=NA #ifdef DEBUG write (6, *) "OpenMP on atoms, NUMTH= ",NUMTH #endif ! OpemMP on atoms do i=1, NS !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(SPHRUN, NEIGH, Dij, Rij, j, k, l, m, XC, YC, ZC, SR, ST, SP, HSP) & !$OMP& SHARED(NUMTH, i, NA, NSP, NCELLS, LOT, SPC, CONTJ, VOISJ, NSPSH, ATHSP, SPTSHP, ANBONDS, COOSPH, MAXL) !$OMP DO SCHEDULE(STATIC,NA/NUMTH) do j=1, NA if (LOT(j) .eq. SPC+1) then SPHRUN=.true. NEIGH(:)=0 do k=1, CONTJ(j,i) NEIGH(LOT(VOISJ(k,j,i)))=NEIGH(LOT(VOISJ(k,j,i)))+1 enddo !$OMP ATOMIC NSPSH=NSPSH+CONTJ(j,i) do k=1, NSP if (NEIGH(k) .ne. COOSPH(k)) then SPHRUN=.false. exit endif enddo if (SPHRUN) then !$OMP ATOMIC ANBONDS=ANBONDS+CONTJ(j,i) endif do k=1, CONTJ(j,i) if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, i) else Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, 1) endif XC=Rij(1) YC=Rij(2) ZC=Rij(3) ! NBONDS=NBONDS+1 call CART2SPHER(XC, YC, ZC, SR, ST, SP) do l=0, MAXL do m=0, l HSP(l,m) = 0.0d0 HSP(l,m) = PLEGENDRE (l, m, ST) * cos(SP * m) if (m .ne. 0) HSP(l,-m) = (-1)**m*HSP(l,m) enddo do m=-l, l ! THSP(NBONDS,l,m)=HSP(l,m) !$OMP ATOMIC SPTSHP(l,m)=SPTSHP(l,m)+HSP(l,m) if (SPHRUN) then !$OMP ATOMIC ATHSP(l,m)=ATHSP(l,m)+HSP(l,m) endif enddo enddo enddo endif enddo !$OMP END DO NOWAIT !$OMP END PARALLEL enddo else #ifdef DEBUG write (6, *) "OpenMP on MD steps, NUMTH= ",NUMTH #endif ! OpemMP on MD steps !$OMP PARALLEL NUM_THREADS(NUMTH) DEFAULT (NONE) & !$OMP& PRIVATE(SPHRUN, NEIGH, Dij, Rij, i, j, k, l, m, XC, YC, ZC, SR, ST, SP, HSP) & !$OMP& SHARED(NUMTH, NS, NA, NSP, NCELLS, LOT, SPC, CONTJ, VOISJ, NSPSH, ATHSP, SPTSHP, ANBONDS, COOSPH, MAXL) !$OMP DO SCHEDULE(STATIC,NS/NUMTH) #endif do i=1, NS do j=1, NA if (LOT(j) .eq. SPC+1) then SPHRUN=.true. NEIGH(:)=0 do k=1, CONTJ(j,i) NEIGH(LOT(VOISJ(k,j,i)))=NEIGH(LOT(VOISJ(k,j,i)))+1 enddo #ifdef OPENMP !$OMP ATOMIC #endif NSPSH=NSPSH+CONTJ(j,i) do k=1, NSP if (NEIGH(k) .ne. COOSPH(k)) then SPHRUN=.false. exit endif enddo if (SPHRUN) then #ifdef OPENMP !$OMP ATOMIC #endif ANBONDS=ANBONDS+CONTJ(j,i) endif do k=1, CONTJ(j,i) if (NCELLS .gt. 1) then Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, i) else Dij = CALCDIJ (Rij, j, VOISJ(k,j,i), i, i, 1) endif XC=Rij(1) YC=Rij(2) ZC=Rij(3) ! NBONDS=NBONDS+1 call CART2SPHER(XC, YC, ZC, SR, ST, SP) do l=0, MAXL do m=0, l HSP(l,m) = 0.0d0 HSP(l,m) = PLEGENDRE (l, m, ST) * cos(SP * m) if (m .ne. 0) HSP(l,-m) = (-1)**m*HSP(l,m) enddo do m=-l, l ! THSP(NBONDS,l,m)=HSP(l,m) #ifdef OPENMP !$OMP ATOMIC #endif SPTSHP(l,m)=SPTSHP(l,m)+HSP(l,m) if (SPHRUN) then #ifdef OPENMP !$OMP ATOMIC #endif ATHSP(l,m)=ATHSP(l,m)+HSP(l,m) endif enddo enddo enddo endif enddo enddo #ifdef OPENMP !$OMP END DO NOWAIT !$OMP END PARALLEL endif #endif if (GEO .eq. 0) then SPHA(:)=0.0d0 if (NSPSH .gt. 0) then do l=0, MAXL do m=-l, l SPHA(l)=SPHA(l)+(SPTSHP(l,m)/NSPSH)**2 enddo SPHA(l)=sqrt(4*PI*SPHA(l)/(2*l+1)) enddo endif call save_curve (MAXL+1, SPHA, IDC-1, IDSP) endif SPHA(:)=0.0d0 if (ANBONDS .gt. 0) then do l=0, MAXL do m=-l, l SPHA(l)=SPHA(l)+(ATHSP(l,m)/ANBONDS)**2 enddo SPHA(l)=sqrt(4*PI*SPHA(l)/(2*l+1)) enddo endif call save_curve (MAXL+1, SPHA, IDC, IDSP) sphericals = 1 001 continue ! if (allocated(THSP)) deallocate(THSP) if (allocated(ATHSP)) deallocate(ATHSP) if (allocated(SPTSHP)) deallocate(SPTSHP) if (allocated(NEIGH)) deallocate(NEIGH) END FUNCTION SUBROUTINE CART2SPHER(XC, YC, ZC, RS, TS, PS) DOUBLE PRECISION, INTENT(IN) :: XC, YC, ZC DOUBLE PRECISION, INTENT(OUT) :: RS, TS, PS RS=0.0d0 TS=0.0d0 PS=0.0d0 RS= sqrt(XC**2 + YC**2 + ZC**2) TS= acos(ZC/RS) PS= atan2(XC, YC) END SUBROUTINE ! Adapted from Numercial Recipies ! DOUBLE PRECISION FUNCTION PLEGENDRE (l, m, x) DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x DOUBLE PRECISION :: y INTEGER :: i, ll DOUBLE PRECISION :: fact, oldfact, pll, pmm, pmmp1, omx2 y=cos(x) pmm=1.0 if (m > 0) then omx2=(1.0-y)*(1.0+y) fact=1.0 i = 1 do while (i.le.m) pmm = pmm * (omx2*fact/(fact+1.0)) fact = fact + 2.0 i = i+1 enddo endif pmm=sqrt((2*m+1)*pmm/(4.0*PI)) if (mod(m,2) .eq. 1) pmm=-pmm if (l .eq. m) then PLEGENDRE=pmm else pmmp1=y*sqrt(2.0*m+3.0)*pmm if (l .eq. (m+1)) then PLEGENDRE=pmmp1 else oldfact=sqrt(2.0*m+3.0) ll=m+2 do while (ll.le.l) fact=sqrt((4.0*ll*ll-1.0)/(ll*ll-m*m)) pll=(y*pmmp1-pmm/oldfact)*fact oldfact=fact pmm=pmmp1 pmmp1=pll ll=ll+1 enddo PLEGENDRE=pll endif endif END FUNCTION DOUBLE PRECISION FUNCTION PLGNDR(l, m, x) DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) INTEGER :: j INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x DOUBLE PRECISION :: prod INTERFACE DOUBLE PRECISION FUNCTION PLEGENDRE(l, m, x) INTEGER, INTENT(IN) :: l, m DOUBLE PRECISION, INTENT(IN) :: x END FUNCTION END INTERFACE prod=1.0d0 j=l-m+1 do while (j.le.l+m) prod = prod*j j=j+1 enddo PLGNDR=sqrt(4.0*PI*prod/(2*l+1))*PLEGENDRE(l,m,x) END FUNCTION Atomes-GNU-1.1.14/src/fortran/sq.F90000066400000000000000000000166031457665371200166500ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file sq.F90 !! @short S(q) analysis: Fourier transform calculation !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION s_of_q (QMAX, QMIN, NQ) BIND (C,NAME='s_of_q_') ! Total structure factor ! Partials structure factors ! Total structure factor: ! ! 00 sin (q*r) ! S(q)= 1 + 4*PI*rho* / dr r² ------------ (g(r) - 1) ! 0 (q*r) ! ! or: ! 1 Rmax sin (q*r) sin (PI*r/Rmax) ! S(q)= 1 + 4*PI*rho* / dr r² (g(r) -1) ----------- * --------------- ! 0 (q*r) PI*r/Rmax ! ! Partials structure factors: ! ! Rmax ! S (q)= delta(a,b) + sqrt(x * x ) *4*PI*rho* / dr r² (g (r) - 1) ! ab a b 0 ab ! ! ! or: ! Rmax sin (q*r) sin (PI*r/Rmax) ! S (q)= delta(a,b) + sqrt(x * x ) *4*PI*rho* / dr r² (g (r) - go ) ----------- * --------------- ! ab a b 0 ab ab (q*r) PI*r/Rmax ! ! with x = Nbre(a)/Nbre(tot) ! a USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: NQ REAL (KIND=c_double), INTENT(IN) :: QMAX , QMIN DOUBLE PRECISION :: DQ DOUBLE PRECISION, DIMENSION (:), ALLOCATABLE :: SQTAB INTERFACE INTEGER FUNCTION recup_data (i, j) INTEGER, INTENT(IN) :: i, j END FUNCTION LOGICAL FUNCTION FZBT (NDQ) INTEGER, INTENT(IN) :: NDQ END FUNCTION END INTERFACE NUMBER_OF_QMOD = NQ TOTAL_DENSITY = dble(NA)/MEANVOL if (allocated(Q_POINT)) deallocate(Q_POINT) allocate(Q_POINT(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: Q_POINT"//CHAR(0)) s_of_q = 0 goto 001 endif if (allocated(S)) deallocate(S) allocate(S(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: S"//CHAR(0)) s_of_q = 0 goto 001 endif if (allocated(XS)) deallocate(XS) allocate(XS(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: XS"//CHAR(0)) s_of_q = 0 goto 001 endif if (allocated(Sij)) deallocate(Sij) allocate(Sij(NQ,NSP,NSP), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: Sij"//CHAR(0)) s_of_q = 0 goto 001 endif ! 'QMIN' is minimum q modulus accessible considering the analysed ! lattice ie. the minimum modulus of the reciprocal cell vectors, DQ=((QMAX-QMIN)/dble(NQ)) S(:)=0.0d0 XS(:)=0.0d0 Q_POINT(:)=0.0d0 do i=1, NQ Q_POINT(i)= dble(i-1)*DQ+QMIN enddo Sij(:,:,:)=0.0d0 j=0 if (recup_data (j, IDGR) .ne. 1) then s_of_q = 0 goto 001 endif j=j+8 if (recup_data (j, IDGR) .ne. 1) then s_of_q = 0 goto 001 endif j=j+8 do o=1, NSP do p=1, NSP if (recup_data (j, IDGR) .ne. 1) then s_of_q = 0 goto 001 endif j=j+5 enddo enddo if (.not. FZBT (NQ)) then s_of_q = 0 goto 001 endif if (allocated(SQTAB)) deallocate(SQTAB) allocate(SQTAB(NQ), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: s_of_q"//CHAR(0), "Table: SQTAB"//CHAR(0)) s_of_q = 0 goto 001 endif l=0 do k=1, NQ SQTAB(k)= S(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do k=1, NQ SQTAB(k)= (S(k)-1.0)*Q_POINT(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do k=1, NQ SQTAB(k)= XS(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do k=1, NQ SQTAB(k)= (XS(k)-1.0)*Q_POINT(k) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 do i=1, NSP do j=1, NSP do k=1, NQ SQTAB(k)= Sij(k,i,j) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 enddo enddo do i=1, NSP do j=1, NSP do k=1, NQ SQTAB(k)= FZSij(k,i,j) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 enddo enddo if (NSP .eq. 2) then do i=1, 4 do j=1, NQ SQTAB(j)= BTij(j,i) enddo call save_curve (NQ, SQTAB, l, IDSQ) l=l+2 enddo endif s_of_q = 1 001 continue if (allocated(SQTAB)) deallocate(SQTAB) if (allocated(Q_POINT)) deallocate(Q_POINT) if (allocated(Sij)) deallocate(Sij) if (allocated(S)) deallocate(S) if (allocated(XS)) deallocate(XS) if (allocated(FZSij)) deallocate(FZSij) if (allocated(BTij)) deallocate(BTij) END FUNCTION INTEGER (KIND=c_int) FUNCTION send_gr (IC, VAL, DR, RDATA, GDATA) BIND (C,NAME='send_gr_') USE PARAMETERS INTEGER (KIND=c_int), INTENT(IN) :: IC, VAL REAL (KIND=c_double), INTENT(IN) :: DR REAL (KIND=c_double), DIMENSION(VAL), INTENT(IN) :: RDATA, GDATA DOUBLE PRECISION :: Hcap1, Hcap2, Vcap INTEGER :: rinit if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) allocate(SHELL_VOL(VAL+1), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: send_gr"//CHAR(0), "Table: SHELL_VOL"//CHAR(0)) send_gr = 0 goto 001 endif do i=1, VAL SHELL_VOL(i) = 0.0d0 SHELL_VOL(i) = 4.0d0*PI*((RDATA(i)+DR)**3 - (RDATA(i)**3))/3 ! To take into account the atoms between a/2 and a srqt(3)/2 ! We need the small volume they can be found in. if (OVERALL_CUBIC .and. RDATA(i)+DR.gt.MBOX) then Hcap1=RDATA(i)+DR-MBOX if (RDATA(i) .le. MBOX) then Hcap2=0.0d0 else Hcap2=RDATA(i)-MBOX endif Vcap=Hcap1**2*(3*RDATA(i) - Hcap1) - Hcap2**2*(3*RDATA(i) - Hcap2) Vcap=Vcap*PI*2 SHELL_VOL(i)=SHELL_VOL(i)-Vcap endif enddo j=IC if (j > 8) then m=j-16 m=m/5 k=m/NSP+1 l=m-(k-1)*NSP+1 endif rinit = 1 if (RDATA(1) .eq. 0.0) rinit = 2 Rmax = RDATA(VAL) do i=1, NUMBER_OF_QMOD do n=rinit, VAL Phi = Q_POINT(i)*RDATA(n) Fact_Rmax = PI*RDATA(n)/Rmax ! Sinus_Fact_Rmax = sin(Fact_Rmax)/Fact_Rmax Sinus_phi = sin(Phi)/Phi if (j .eq. 0) then S(i) = S(i) + SHELL_VOL(n)*(GDATA(n) - 1)*Sinus_phi!*Sinus_Fact_Rmax else if (j .eq. 8) then XS(i) = XS(i) + SHELL_VOL(n)*(GDATA(n) - 1)*Sinus_phi else Sij(i,k,l) = Sij(i,k,l) + SHELL_VOL(n)*(GDATA(n) - 1)*Sinus_phi!*Sinus_Fact_Rmax endif enddo if (j .eq. 0) then S(i) = 1.0d0 + S(i)*TOTAL_DENSITY else if (j .eq. 8) then XS(i) = 1.0d0 + XS(i)*TOTAL_DENSITY else if (l .eq. k) then Sij(i,k,l) = 1.0d0 + Xi(l)*Sij(i,k,l)*TOTAL_DENSITY else Sij(i,k,l) = sqrt(Xi(k)*Xi(l))*Sij(i,k,l)*TOTAL_DENSITY endif endif enddo send_gr = 1 001 continue if (allocated(SHELL_VOL)) deallocate(SHELL_VOL) END FUNCTION Atomes-GNU-1.1.14/src/fortran/threads.F90000066400000000000000000000027171457665371200176600ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file threads.F90 !! @short OpenMP utility functions !! @author Sébastien Le Roux INTEGER FUNCTION GET_THREAD_START (NOBJ, NTHREADS, THREAD_ID) IMPLICIT NONE INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID INTEGER :: TMP REAL :: VA, VB VA = NOBJ VB = NTHREADS TMP = INT (VA/VB) GET_THREAD_START = TMP * THREAD_ID + 1 END FUNCTION INTEGER FUNCTION GET_THREAD_END (NOBJ, NTHREADS, THREAD_ID) IMPLICIT NONE INTEGER, INTENT(IN) :: NOBJ, NTHREADS, THREAD_ID INTEGER :: TMP REAL :: VA, VB VA = NOBJ VB = NTHREADS TMP = INT (VA/VB) if (THREAD_ID .eq. NTHREADS-1) then GET_THREAD_END = NOBJ else GET_THREAD_END = TMP * (THREAD_ID+1) endif END FUNCTION Atomes-GNU-1.1.14/src/fortran/trj.F90000066400000000000000000000054761457665371200170320ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file trj.F90 !! @short Unused: read atomic coordinates in CPMD trajectory format - old version !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_trj (trj_f, ltrj, natrj, nbstrj, is_npt) BIND (C,NAME='read_trj_') ! ! Lecture of atom types and coordinates - CPMD trajectory ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: ltrj, natrj, is_npt INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: nbstrj CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: trj_f CHARACTER (LEN=ltrj) :: trj_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, ltrj trj_file(i:i) = trj_f(i) enddo read_trj = 1 inquire (file=trj_file, exist=isok) if (isok) then open (unit=20, file=trj_file, action='read', status='old', err=001) NS=0 NA=natrj NS=TEST_LENGTH(20, NA) if (NS .ge. 1) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_trj"//CHAR(0), "Table: FULLPOS"//CHAR(0)) read_trj=3 goto 001 endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_trj"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) read_trj=3 goto 001 endif do i=1, NS l=1 do j=1, NSP do k=1, nbstrj(j) read (20, *, err=002) z, FULLPOS(l,1,i), FULLPOS(l,2,i), FULLPOS(l,3,i) ! CPMD trajectory is in atomic units do m=1, 3 FULLPOS(l,m,i)=ANGTOBOHR*FULLPOS(l,m,i) enddo TAB_OF_TYPE(l)= LABEL(j) l=l+1 enddo enddo enddo if (is_npt .eq. 1) call send_steps (NS) read_trj=0 else read_trj=2 endif 002 continue close (20) 001 continue endif END FUNCTION Atomes-GNU-1.1.14/src/fortran/utils.F90000066400000000000000000000455331457665371200173710ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file utils.F90 !! @short Global function declarations !! @author Sébastien Le Roux ! ! This file contains various tools ! !******************************************************************** ! ! Transformer un entier en chaine de charactères ! Transform an integer into character ! SUBROUTINE CHARINT(Word, Num) IMPLICIT NONE INTEGER :: lc INTEGER, INTENT(IN) :: Num CHARACTER (LEN=16) :: Pseudo CHARACTER (LEN=15), INTENT(INOUT) :: Word Word=' ' write (Word, *) Num lc=1 do while (Word(1:lc) .eq. ' ') lc= lc+1 enddo Pseudo=Word Word=' ' write (Word, *) Pseudo(lc:LEN_TRIM(Pseudo)) END SUBROUTINE SUBROUTINE CREAT_RING (RING_INIT, ELEM_CR) USE PARAMETERS IMPLICIT NONE TYPE (RING), INTENT(INOUT) :: RING_INIT INTEGER, INTENT(IN) :: ELEM_CR RING_INIT%SPEC = 0 RING_INIT%ATOM = ELEM_CR nullify(RING_INIT%PAST) nullify(RING_INIT%NEXT) END SUBROUTINE SUBROUTINE DO_RING (THE_RING, ELEM_DO) USE PARAMETERS IMPLICIT NONE TYPE (RING), POINTER, INTENT(INOUT) :: THE_RING !INTEGER, DIMENSION(NA), INTENT(INOUT) :: RPT INTEGER, INTENT(IN) :: ELEM_DO TYPE (RING), POINTER :: NEW allocate(NEW, STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Subroutine: DO_RING"//CHAR(0), "Pointer: NEW"//CHAR(0)) ALC=.true. goto 001 endif nullify(NEW%NEXT) nullify(NEW%PAST) THE_RING%NEXT => NEW NEW%PAST => THE_RING NEW%ATOM = ELEM_DO NEW%SPEC = THE_RING%SPEC+1 THE_RING => NEW !if (RPT(THE_RING%ATOM) .eq. 0) then ! RPT(THE_RING%ATOM) = 1 !endif 001 continue END SUBROUTINE !******************************************************************** ! ! Calculer une distance ! Compute a distance including PBC ! SUBROUTINE CALCRIJ(AT1, AT2, STEP_1, STEP_2, SID) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID INTEGER :: R1 DOUBLE PRECISION, DIMENSION(3) :: COORDA, COORDB DOUBLE PRECISION, DIMENSION(3) :: Aij, Bij, Nij if (STEP_1 .eq. -2) then do R1=1, 3 COORDA(R1) = NFULLPOS(AT1,R1,STEP_2) COORDB(R1) = NFULLPOS(AT2,R1,STEP_2) enddo elseif (STEP_1 .eq. -1) then ! Prepos for MSD do R1=1, 3 COORDA(R1) = POB(AT2,R1) COORDB(R1) = POA(AT1,R1) enddo else ! Standard inter-atomic distance do R1=1, 3 COORDA(R1) = FULLPOS(AT1,R1,STEP_1) COORDB(R1) = FULLPOS(AT2,R1,STEP_2) enddo endif do R1=1, 3 Rij(R1) = COORDA(R1) - COORDB(R1) enddo if (.not.PBC) goto 001 ! Test if the simulation box is cubic-like symmetric ! For that we check the lattice angles if (THE_BOX(SID)%GLASS) then do R1=1, 3 Rij(R1)=Rij(R1) - ANint(Rij(R1)/(THE_BOX(SID)%modv(R1)))*(THE_BOX(SID)%modv(R1)) enddo else Aij = MATMUL(COORDA,THE_BOX(SID)%carttofrac) Bij = MATMUL(COORDB,THE_BOX(SID)%carttofrac) do R1=1,3 Nij(R1) = Aij(R1) - Bij(R1) Nij(R1) = Nij(R1) - AnINT(Nij(R1)) enddo Rij = MATMUL(Nij,THE_BOX(SID)%fractocart) endif 001 continue Dij=0.0d0 do R1=1, 3 Dij=Dij+Rij(R1)**2 enddo END SUBROUTINE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) USE PARAMETERS IMPLICIT NONE DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID INTEGER :: R1 DOUBLE PRECISION, DIMENSION(3) :: COORDA, COORDB DOUBLE PRECISION, DIMENSION(3) :: Aij, Bij, Nij if (STEP_1 .eq. -2) then do R1=1, 3 COORDA(R1) = NFULLPOS(AT1,R1,STEP_2) COORDB(R1) = NFULLPOS(AT2,R1,STEP_2) enddo elseif (STEP_1 .eq. -1) then ! Prepos for MSD do R1=1, 3 COORDA(R1) = POB(AT2,R1) COORDB(R1) = POA(AT1,R1) enddo else ! Standard inter-atomic distance do R1=1, 3 COORDA(R1) = FULLPOS(AT1,R1,STEP_1) COORDB(R1) = FULLPOS(AT2,R1,STEP_2) enddo endif do R1=1, 3 R12(R1) = COORDA(R1) - COORDB(R1) enddo if (.not.PBC) goto 001 ! Test if the simulation box is cubic-like symetric ! For that we check the lattice angles if (THE_BOX(SID)%GLASS) then do R1=1, 3 R12(R1)=R12(R1) - ANint(R12(R1)/(THE_BOX(SID)%modv(R1)))*(THE_BOX(SID)%modv(R1)) enddo else Aij = MATMUL(COORDA,THE_BOX(SID)%carttofrac) Bij = MATMUL(COORDB,THE_BOX(SID)%carttofrac) do R1=1,3 Nij(R1) = Aij(R1) - Bij(R1) Nij(R1) = Nij(R1) - AnINT(Nij(R1)) enddo R12 = MATMUL(Nij,THE_BOX(SID)%fractocart) endif 001 continue CALCDIJ = 0.0d0 do R1=1, 3 CALCDIJ = CALCDIJ + R12(R1)**2 enddo END FUNCTION !******************************************************************** ! ! Home made arcosine calculation ! DOUBLE PRECISION FUNCTION SACOS (ANG) USE PARAMETERS DOUBLE PRECISION, INTENT(IN) :: ANG DOUBLE PRECISION :: SCOS if (ANG .lt. -1.0d0) then SCOS = -2.0d0 - ANG else if (ANG .gt. 1.0d0) then SCOS = 2.0d0 - ANG else SCOS = ANG endif SACOS = DACOS(SCOS)*180.d0/PI END FUNCTION !******************************************************************** ! ! Calculer un angle direct ! Compute a direct angle ! DOUBLE PRECISION FUNCTION ANGIJK(ATG1, ATG2, ATG3, ASTEP) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: ATG1, ATG2, ATG3, ASTEP INTEGER :: AG1, AG2 DOUBLE PRECISION :: DAA, DBB, VANG DOUBLE PRECISION, DIMENSION(3) :: RAA, RBB INTERFACE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION DOUBLE PRECISION FUNCTION SACOS (ANG) DOUBLE PRECISION, INTENT(IN) :: ANG END FUNCTION END INTERFACE if (NCELLS .gt. 1) then AG2 = ASTEP else AG2 = 1 endif DAA = CALCDIJ(RAA, ATG2,ATG1,ASTEP,ASTEP,AG2) DAA=sqrt(DAA) DBB = CALCDIJ(RBB, ATG2,ATG3,ASTEP,ASTEP,AG2) VANG=0.0d0 do AG1=1, 3 VANG=VANG+RAA(AG1)*RBB(AG1) enddo DBB=sqrt(DBB) ANGIJK = SACOS(VANG/(DAA*DBB)) END FUNCTION !******************************************************************** ! ! Calculer un angle dièdre ! Compute a dihedral angle ! DOUBLE PRECISION FUNCTION DIEDRE(DG1, DG2, DG3, DG4, DSTEP) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: DG1, DG2, DG3, DG4, DSTEP INTEGER :: AG, AH DOUBLE PRECISION :: DH1, DH2, DH3, VDI DOUBLE PRECISION, DIMENSION(3) :: D12, D23, D34 DOUBLE PRECISION, DIMENSION(3) :: VH1, VH2 INTERFACE DOUBLE PRECISION FUNCTION CALCDIJ(R12, AT1, AT2, STEP_1, STEP_2, SID) DOUBLE PRECISION, DIMENSION(3), INTENT(INOUT) :: R12 INTEGER, INTENT(IN) :: AT1, AT2, STEP_1, STEP_2, SID END FUNCTION DOUBLE PRECISION FUNCTION SACOS (ANG) DOUBLE PRECISION, INTENT(IN) :: ANG END FUNCTION END INTERFACE if (NCELLS .gt. 1) then AH = DSTEP else AH = 1 endif DH1 = CALCDIJ(D12,DG1,DG2,DSTEP,DSTEP,AH) DH2 = CALCDIJ(D23,DG2,DG3,DSTEP,DSTEP,AH) DH3 = CALCDIJ(D34,DG3,DG4,DSTEP,DSTEP,AH) VH1(1) = D12(2)*D23(3) - D12(3)*D23(2) VH1(2) = D12(3)*D23(1) - D12(1)*D23(3) VH1(3) = D12(1)*D23(2) - D12(2)*D23(1) VH2(1) = D23(2)*D34(3) - D23(3)*D34(2) VH2(2) = D23(3)*D34(1) - D23(1)*D34(3) VH2(3) = D23(1)*D34(2) - D23(2)*D34(1) DH1=0.0d0 DH2=0.0d0 do AG=1, 3 DH1 = DH1 + VH1(AG)*VH1(AG) DH2 = DH2 + VH2(AG)*VH2(AG) enddo DH1=sqrt(DH1) DH2=sqrt(DH2) if (DH1.eq.0.0d0 .or. DH2.eq.0.0d0) then DIEDRE = 0.0d0 else VDI = 0.0d0 do AG=1, 3 VDI=VDI+VH1(AG)*VH2(AG) enddo VDI = VDI/(DH1*DH2) DIEDRE = SACOS (VDI) endif END FUNCTION ! Cas particulier lors des statistiques d'anneaux SUBROUTINE ECT_TYPE_RINGS(MOYENNE, TABLEAU, LONGTE, LREPRES, EC_TYPE) INTEGER :: pose INTEGER, INTENT(IN) :: LONGTE, LREPRES DOUBLE PRECISION, INTENT(IN) :: MOYENNE DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTE) :: TABLEAU DOUBLE PRECISION, INTENT(INOUT) :: EC_TYPE EC_TYPE=0.0d0 do pose=1, LONGTE if (TABLEAU(pose) .ne. 0.0) EC_TYPE= EC_TYPE + (TABLEAU(pose) - MOYENNE)**2 enddo EC_TYPE=sqrt(EC_TYPE/dble(LREPRES-1)) END SUBROUTINE !******************************************************************** ! ! Générateur de nombre aléatoire ! Numerical recipes random number generator 3 ! DOUBLE PRECISION FUNCTION RAN3 (idnum) INTEGER, INTENT(IN) :: idnum INTEGER :: idum INTEGER :: MBIG,MSEED,MZ INTEGER :: iii,iff,ii,inext,inextp,k INTEGER :: mj,mk,ma(55) DOUBLE PRECISION :: FAC PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1./MBIG) SAVE iff,inext,inextp,ma DATA iff /0/ idum = idnum if(idum.lt.0 .or. iff.eq.0)then iff=1 mj=MSEED-iabs(idum) mj=mod(mj,MBIG) ma(55)=mj mk=1 do 11 iii=1,54 ii=mod(21*iii,55) ma(ii)=mk mk=mj-mk if(mk.lt.MZ)mk=mk+MBIG mj=ma(ii) 11 continue do 13 k=1,4 do 12 iii=1,55 ma(iii)=ma(iii)-ma(1+mod(iii+30,55)) if(ma(iii).lt.MZ)ma(iii)=ma(iii)+MBIG 12 continue 13 continue inext=0 inextp=31 idum=1 endif inext=inext+1 if(inext.eq.56)inext=1 inextp=inextp+1 if(inextp.eq.56)inextp=1 mj=ma(inext)-ma(inextp) if(mj.lt.MZ)mj=mj+MBIG ma(inext)=mj RAN3=mj*FAC END FUNCTION REAL (KIND=c_double) FUNCTION random3(seed) BIND (C,NAME='random3_') USE, INTRINSIC :: iso_c_binding INTEGER (KIND=c_int), INTENT(IN) :: seed INTERFACE DOUBLE PRECISION FUNCTION RAN3 (idnum) INTEGER, INTENT(IN) :: idnum END FUNCTION END INTERFACE random3 = RAN3(seed) END FUNCTION !******************************************************************** ! ! Calculer la somme d'une série de valeurs ! Compute sum of a list of values ! SUBROUTINE SOMME(TABS, LONGTS, SOMTAB) INTEGER :: posm INTEGER, INTENT(IN) :: LONGTS DOUBLE PRECISION, INTENT(INOUT) :: SOMTAB DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTS) :: TABS SOMTAB=0.0d0 do posm=1, LONGTS SOMTAB=SOMTAB+TABS(posm) enddo END SUBROUTINE !******************************************************************** ! ! Calculer la moyenne d'une série de valeurs ! Compute the average of list of values ! SUBROUTINE MOYENNE(TABLEAU, LONGTM, MOYTAB) INTEGER :: posm INTEGER, INTENT(IN) :: LONGTM DOUBLE PRECISION, INTENT(INOUT) :: MOYTAB DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTM) :: TABLEAU MOYTAB=0.0d0 do posm=1, LONGTM MOYTAB=MOYTAB+TABLEAU(posm) enddo MOYTAB=MOYTAB/dble(LONGTM) END SUBROUTINE !******************************************************************** ! ! Calculer l'écart type sur une série de valeurs ! Compute the standard error on a list of values ! SUBROUTINE ECT_TYPE(MOYENNE, TABLEAU, LONGTE, EC_TYPE) INTEGER :: pose INTEGER, INTENT(IN) :: LONGTE DOUBLE PRECISION, INTENT(IN) :: MOYENNE DOUBLE PRECISION, INTENT(IN), DIMENSION(LONGTE) :: TABLEAU DOUBLE PRECISION, INTENT(INOUT) :: EC_TYPE EC_TYPE=0.0d0 do pose=1, LONGTE EC_TYPE= EC_TYPE + (TABLEAU(pose) - MOYENNE)**2 enddo EC_TYPE=sqrt(EC_TYPE/dble(LONGTE-1)) END SUBROUTINE !******************************************************************** ! ! Trier une liste d'entiers ! Sort a list of integers ! This is the most simple sort ! For an improved routine (huge data to sort) see SORT3 in this file ! SUBROUTINE TRI(TAB, DIMTAB) IMPLICIT NONE INTEGER, INTENT(IN) :: DIMTAB INTEGER, DIMENSION(DIMTAB), INTENT(INOUT) :: TAB INTEGER :: SORTX, SORTY, VALUE do SORTX=2, DIMTAB VALUE=TAB(SORTX) do SORTY=SORTX-1, 1, -1 if (TAB(SORTY) .le. VALUE) exit TAB(SORTY+1)=TAB(SORTY) enddo TAB(SORTY+1)=VALUE enddo END SUBROUTINE !******************************************************************** ! ! Lisser une courbe / To smooth a curve ! LOGICAL FUNCTION SMOOTH (TABTOLISS, GTOLISS, DIMTOLISS, SIGMALISS) ! Lissage selon une gaussienne ! Gaussian smoothing - zero based curve IMPLICIT NONE INTEGER, INTENT(IN) :: DIMTOLISS DOUBLE PRECISION, INTENT(IN) :: SIGMALISS DOUBLE PRECISION, INTENT(IN), DIMENSION(DIMTOLISS) :: GTOLISS DOUBLE PRECISION, INTENT(INOUT), DIMENSION(DIMTOLISS) :: TABTOLISS INTEGER :: INDA, INDB, ERR DOUBLE PRECISION, PARAMETER :: PI=acos(-1.0) DOUBLE PRECISION :: DQ, DQ2 DOUBLE PRECISION :: FACTLISS DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: NEWTAB allocate(NEWTAB(DIMTOLISS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: SMOOTH"//CHAR(0), "Table: NEWTAB"//CHAR(0)) SMOOTH=.false. goto 001 endif do INDA=1, DIMTOLISS NEWTAB(INDA)=0.0d0 enddo FACTLISS=1.0d0/(SIGMALISS*sqrt(2.0d0*PI)) do INDA=1, DIMTOLISS do INDB=1, DIMTOLISS if(INDB .eq. 1)then DQ= GTOLISS(2)-GTOLISS(1) elseif (INDB .eq. DIMTOLISS) then DQ = GTOLISS(DIMTOLISS)- GTOLISS(DIMTOLISS-1) else DQ = (GTOLISS(INDB+1)- GTOLISS(INDB-1))*0.5 endif DQ2=(GTOLISS(INDA)-GTOLISS(INDB))*(GTOLISS(INDA)-GTOLISS(INDB)) NEWTAB(INDA) = NEWTAB(INDA) + exp(-DQ2/(2.0d0*SIGMALISS*SIGMALISS))*TABTOLISS(INDB)*DQ enddo NEWTAB(INDA)=FACTLISS*NEWTAB(INDA) enddo do INDA=1, DIMTOLISS TABTOLISS(INDA)=NEWTAB(INDA) enddo SMOOTH=.true. 001 continue if (allocated(NEWTAB)) deallocate(NEWTAB) END FUNCTION !******************************************************************** ! ! Sort routine adapted from: ! Numerical sort array 3 - Quicksort INTEGER ! SUBROUTINE SORT3(arr, ndum) INTEGER, INTENT(IN) :: ndum INTEGER, DIMENSION(ndum) :: index INTEGER, DIMENSION(ndum), INTENT(INOUT) :: arr call indexx_i(arr, index, ndum) arr=arr(index) END SUBROUTINE SUBROUTINE indexx_i(arr, index, n) IMPLICIT NONE INTEGER, PARAMETER :: NPAR_ARTH=16,NPAR2_ARTH=8 INTEGER, DIMENSION(n), INTENT(INOUT) :: index INTEGER, PARAMETER :: NN=15, NSTACK=50 INTEGER, INTENT(IN) :: n INTEGER :: k,i,j,indext,jstack,l,r INTEGER, DIMENSION(NSTACK) :: istack INTEGER :: a INTEGER, DIMENSION(n), INTENT(IN) :: arr call arth(1,1,n,index) jstack=0 l=1 r=n do if (r-l < NN) then do j=l+1,r indext=index(j) a=arr(indext) do i=j-1,l,-1 if (arr(index(i)) <= a) exit index(i+1)=index(i) end do index(i+1)=indext end do if (jstack .eq. 0) RETURN r=istack(jstack) l=istack(jstack-1) jstack=jstack-2 else k=(l+r)/2 call swap(index(k),index(l+1)) call icomp_xchg(index(l),index(r)) call icomp_xchg(index(l+1),index(r)) call icomp_xchg(index(l),index(l+1)) i=l+1 j=r indext=index(l+1) a=arr(indext) do do i=i+1 if (arr(index(i)) >= a) exit end do do j=j-1 if (arr(index(j)) <= a) exit end do if (j < i) exit call swap(index(i),index(j)) end do index(l+1)=index(j) index(j)=indext jstack=jstack+2 if (jstack > NSTACK) write (6, *) 'Sort3 error: indexx: NSTACK too small' if (r-i+1 >= j-l) then istack(jstack)=r istack(jstack-1)=i r=j-1 else istack(jstack)=j-1 istack(jstack-1)=l l=i end if end if end do CONTAINS !BL SUBROUTINE icomp_xchg(i, j) INTEGER, INTENT(INOUT) :: i,j INTEGER :: swp if (arr(j) < arr(i)) then swp=i i=j j=swp end if END SUBROUTINE icomp_xchg SUBROUTINE arth(first, increment, m, arth_i) INTEGER, INTENT(IN) :: first,increment,m INTEGER, DIMENSION(m) :: arth_i INTEGER :: k,k2,temp if (m > 0) arth_i(1)=first if (m <= NPAR_ARTH) then do k=2,m arth_i(k)=arth_i(k-1)+increment end do else do k=2,NPAR2_ARTH arth_i(k)=arth_i(k-1)+increment end do temp=increment*NPAR2_ARTH k=NPAR2_ARTH do if (k >= m) exit k2=k+k arth_i(k+1:min(k2,m))=temp+arth_i(1:min(k,m-k)) temp=temp+temp k=k2 end do end if END SUBROUTINE SUBROUTINE swap(a,b) INTEGER, INTENT(INOUT) :: a,b INTEGER :: dum dum=a a=b b=dum END SUBROUTINE swap END SUBROUTINE indexx_i !******************************************************************** !******************************************************************** ! ! Sort routine adapted from: ! Numerical sort array 3 - Quicksort DOUBLE PRECISION ! SUBROUTINE SORT3_DP (arr, ndum) INTEGER, INTENT(IN) :: ndum INTEGER, DIMENSION(ndum) :: index DOUBLE PRECISION, DIMENSION(ndum), INTENT(INOUT) :: arr call indexx_dp (arr, index, ndum) arr=arr(index) END SUBROUTINE SUBROUTINE indexx_dp (arr, index, n) IMPLICIT NONE INTEGER, PARAMETER :: NPAR_ARTH=16,NPAR2_ARTH=8 INTEGER, DIMENSION(n), INTENT(INOUT) :: index INTEGER, PARAMETER :: NN=15, NSTACK=50 INTEGER, INTENT(IN) :: n INTEGER :: k,i,j,indext,jstack,l,r INTEGER, DIMENSION(NSTACK) :: istack DOUBLE PRECISION :: a DOUBLE PRECISION, DIMENSION(n), INTENT(IN) :: arr call arth(1,1,n,index) jstack=0 l=1 r=n do if (r-l < NN) then do j=l+1,r indext=index(j) a=arr(indext) do i=j-1,l,-1 if (arr(index(i)) <= a) exit index(i+1)=index(i) end do index(i+1)=indext end do if (jstack .eq. 0) RETURN r=istack(jstack) l=istack(jstack-1) jstack=jstack-2 else k=(l+r)/2 call swap(index(k),index(l+1)) call icomp_xchg(index(l),index(r)) call icomp_xchg(index(l+1),index(r)) call icomp_xchg(index(l),index(l+1)) i=l+1 j=r indext=index(l+1) a=arr(indext) do do i=i+1 if (arr(index(i)) >= a) exit end do do j=j-1 if (arr(index(j)) <= a) exit end do if (j < i) exit call swap(index(i),index(j)) end do index(l+1)=index(j) index(j)=indext jstack=jstack+2 if (jstack > NSTACK) write (6, *) 'Sort3 error: indexx: NSTACK too small' if (r-i+1 >= j-l) then istack(jstack)=r istack(jstack-1)=i r=j-1 else istack(jstack)=j-1 istack(jstack-1)=l l=i end if end if end do CONTAINS !BL SUBROUTINE icomp_xchg(i, j) INTEGER, INTENT(INOUT) :: i,j INTEGER :: swp if (arr(j) < arr(i)) then swp=i i=j j=swp end if END SUBROUTINE icomp_xchg SUBROUTINE arth(first, increment, m, arth_i) INTEGER, INTENT(IN) :: first,increment,m INTEGER, DIMENSION(m) :: arth_i INTEGER :: k,k2,temp if (m > 0) arth_i(1)=first if (m <= NPAR_ARTH) then do k=2,m arth_i(k)=arth_i(k-1)+increment end do else do k=2,NPAR2_ARTH arth_i(k)=arth_i(k-1)+increment end do temp=increment*NPAR2_ARTH k=NPAR2_ARTH do if (k >= m) exit k2=k+k arth_i(k+1:min(k2,m))=temp+arth_i(1:min(k,m-k)) temp=temp+temp k=k2 end do end if END SUBROUTINE SUBROUTINE swap(a,b) INTEGER, INTENT(INOUT) :: a,b INTEGER :: dum dum=a a=b b=dum END SUBROUTINE swap END SUBROUTINE indexx_dp !******************************************************************** Atomes-GNU-1.1.14/src/fortran/vas.F90000066400000000000000000000062151457665371200170140ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file vas.F90 !! @short Unused: read atomic coordinates in VASP trajectory format - old version !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_vas(vas_f, lvas, navas, nbsvas, is_npt) BIND (C,NAME='read_vas_') ! ! Lecture of atom types and coordinates - VASP trajectory ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER :: NVAS INTEGER (KIND=c_int), INTENT(IN) :: lvas, navas, is_npt INTEGER (KIND=c_int), DIMENSION(NSP), INTENT(IN) :: nbsvas CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: vas_f CHARACTER (LEN=lvas) :: vas_file do i=1, lvas vas_file(i:i) = vas_f(i) enddo read_vas=1 inquire (file=vas_file, exist=isok) if (isok) then open (unit=20, file=vas_file, action='read', status='old', err=001) NS=0 NA=navas NVAS=TEST_VAS(20, NA) if (NVAS.ge.1) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_vas"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_vas"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NVAS read (20, *, err=002) enddo do i=1, NS ! Read the 'Konfig' line read (20, *, err=002) l=1 do j=1, NSP do k=1, nbsvas(j) read (20, *, err=002) FULLPOS(l,1,i), FULLPOS(l,2,i), FULLPOS(l,3,i) TAB_OF_TYPE(l)= LABEL(j) l=l+1 enddo enddo enddo if (is_npt .eq. 1) call send_steps (NS) read_vas=0 else read_vas=2 endif 002 continue close (20) 001 continue endif CONTAINS INTEGER FUNCTION TEST_VAS(UNITFILE, NATL) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: UNITFILE, NATL INTEGER :: LENF INTEGER :: EOF rewind(UNITFILE) EOF=0 LENF=0 do while (EOF .eq. 0) read (UNITFILE, *, iostat=EOF) LENF=LENF+1 enddo LENF=LENF-1 if (mod(LENF-7,NATL+1) .eq. 0) then NS=(LENF-7)/(NATL+1) TEST_VAS=7 else if (mod(LENF-6,NATL+1) .eq. 0) then NS=(LENF-6)/(NATL+1) TEST_VAS=6 else if (mod(LENF-5,NATL+1) .eq. 0) then NS=(LENF-5)/(NATL+1) TEST_VAS=5 else TEST_VAS=0 endif END FUNCTION END FUNCTION Atomes-GNU-1.1.14/src/fortran/writedata.F90000066400000000000000000000713241457665371200202120ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file writedata.F90 !! @short Export curve data using data received from C !! @author Sébastien Le Roux CHARACTER (LEN=35) FUNCTION ylegend (job, nleg, idl) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: job, nleg, idl INTEGER :: DAL, DBL, DCL, DDL, DEL LOGICAL :: done ylegend = '' if (job.eq.IDGR .or. job.eq.IDGRFFT) then if (nleg < GRNUM) then DEL=nleg else DEL=nleg-(GRNUM+SQNUM+SKNUM) endif if (DEL .eq. 0) then if (idl .eq. 0) then ylegend = """g(r)[tot] Neutrons""" else ylegend = "g(r)[tot] Neutrons" endif elseif (DEL .eq. 1) then if (idl .eq. 0) then ylegend = """g(r)[tot] Neutrons - smoothed""" else ylegend = "g(r)[tot] Neutrons - smoothed" endif elseif (DEL .eq. 2) then if (idl .eq. 0) then ylegend = """G(r)[tot] Neutrons""" else ylegend = "G(r)[tot] Neutrons" endif elseif (DEL .eq. 3) then if (idl .eq. 0) then ylegend = """G(r)[tot] Neutrons - smoothed""" else ylegend = "G(r)[tot] Neutrons - smoothed" endif elseif (DEL .eq. 4) then if (idl .eq. 0) then ylegend = """g(r)[tot] X-rays""" else ylegend = "g(r)[tot] X-rays" endif elseif (DEL .eq. 5) then if (idl .eq. 0) then ylegend = """g(r)[tot] X-rays - smoothed""" else ylegend = "g(r)[tot] X-rays - smoothed" endif elseif (DEL .eq. 6) then if (idl .eq. 0) then ylegend = """G(r)[tot] X-rays""" else ylegend = "G(r)[tot] X-rays" endif elseif (DEL .eq. 7) then if (idl .eq. 0) then ylegend = """G(r)[tot] X-rays - smoothed""" else ylegend = "G(r)[tot] X-rays - smoothed" endif elseif (DEL .ge. 8) then DCL=7 done=.false. do DAL=1, NSP do DBL=1, NSP DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""g\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="g(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""g\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="g(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""G\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="G(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""G\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="G(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""dn\sij\N(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="dn(r)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif enddo if(done) exit enddo if (NSP .eq. 2) then DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""BT\sNN\N(r)""" else ylegend="BT[NN](r)" endif endif DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""BT\sNN\N(r) - smoothed""" else ylegend="BT[NN](r) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""BT\sNC\N(r)""" else ylegend="BT[NC](r)" endif endif DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""BT\sNC\N(r) - smoothed""" else ylegend="BT[NC](r) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""BT\sCC\N(r)""" else ylegend="BT[CC](r)" endif endif DCL=DCL+1 if (DCL.eq.DEL) then if (idl .eq. 0) then ylegend="""BT\sCC\N(r) - smoothed""" else ylegend="BT[CC](r) - smoothed" endif endif endif endif else if (job.eq.IDSQ .or. job.eq.IDSK) then if (nleg - (GRNUM+SQNUM) < 0) then DDL = nleg - GRNUM else DDL = nleg - GRNUM-SQNUM endif if (DDL .eq. 0) then if (idl .eq. 0) then ylegend = """S(q)[total] Neutrons""" else ylegend = "S(q)[total] Neutrons" endif elseif (DDL .eq. 1) then if (idl .eq. 0) then ylegend = """S(q) Neutrons - smoothed""" else ylegend = "S(q) Neutrons - smoothed" endif elseif (DDL .eq. 2) then if (idl .eq. 0) then ylegend = """Q(q)[total] Neutrons""" else ylegend = "Q(q)[total] Neutrons" endif elseif (DDL .eq. 3) then if (idl .eq. 0) then ylegend = """Q(q)[total] Neutrons - smoothed""" else ylegend = "Q(q)[total] Neutrons - smoothed" endif elseif (DDL .eq. 4) then if (idl .eq. 0) then ylegend = """S(q)[total] X-rays""" else ylegend = "S(q)[total] X-rays" endif elseif (DDL .eq. 5) then if (idl .eq. 0) then ylegend = """S(q) X-rays - smoothed""" else ylegend = "S(q) X-rays - smoothed" endif elseif (DDL .eq. 6) then if (idl .eq. 0) then ylegend = """Q(q)[total] X-rays""" else ylegend = "Q(q)[total] X-rays" endif elseif (DDL .eq. 7) then if (idl .eq. 0) then ylegend = """Q(q)[total] X-rays - smoothed""" else ylegend = "Q(q)[total] X-rays - smoothed" endif elseif (DDL .ge. 8) then DCL=7 done=.false. do DAL=1, NSP do DBL=1, NSP DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""AL\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="AL (q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""AL\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="AL (q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif enddo if(done) exit enddo do DAL=1, NSP do DBL=1, NSP DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""FZ\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" else ylegend="FZ N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" endif done=.true. exit endif DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""FZ\sij\N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed""" else ylegend="FZ N(q)["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//","//TL(DBL)(1:LEN_TRIM(TL(DBL)))//"] - smoothed" endif done=.true. exit endif enddo if(done) exit enddo if (NSP .eq. 2) then DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""BT\sNN\N(q)""" else ylegend="BT[NN](q)" endif endif DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""BT\sNN\N(q) - smoothed""" else ylegend="BT[NN](q) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""BT\sNC\N(q)""" else ylegend="BT[NC](q)" endif endif DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""BT\sNC\N(q) - smoothed""" else ylegend="BT[NC](q) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""BT\sCC\N(q)""" else ylegend="BT[CC](q)" endif endif DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""BT\sCC\N(q) - smoothed""" else ylegend="BT[CC](q) - smoothed" endif endif DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""BT\sZZ\N(q)""" else ylegend="BT[ZZ](q)" endif endif DCL=DCL+1 if (DCL.eq.DDL) then if (idl .eq. 0) then ylegend="""BT\sZZ\N(q) - smoothed""" else ylegend="BT[ZZ](q) - smoothed" endif endif endif endif else if (job .eq. IDBD) then DDL = GRNUM+GQNUM+SQNUM+SKNUM do DAL=1, NSP do DBL=1, NSP if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend = """% Dij ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]""" done=.true. exit else ylegend = "% Dij ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"]" done=.true. exit endif endif DDL=DDL+1 enddo enddo else if (job .eq. IDAN) then DDL = GRNUM+GQNUM+SQNUM+SKNUM+BDNUM do DAL=1, NSP do DBL=1, NSP do DCL=1, NSP if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend = """% Angle ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"]""" else ylegend = "% Angle ["//TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-" & //TL(DBL)(1:LEN_TRIM(TL(DBL)))//"-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"]" endif endif DDL=DDL+1 enddo enddo enddo do DAL=1, NSP do DBL=1, NSP do DCL=1, NSP do DEL=1, NSP if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend = """% Diedral ["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-"//TL(DBL)(1:LEN_TRIM(TL(DBL)))// & "-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"-"//TL(DEL)(1:LEN_TRIM(TL(DEL)))//"]""" else ylegend = "% Diedral ["// & TL(DAL)(1:LEN_TRIM(TL(DAL)))//"-"//TL(DBL)(1:LEN_TRIM(TL(DBL)))// & "-"//TL(DCL)(1:LEN_TRIM(TL(DCL)))//"-"//TL(DEL)(1:LEN_TRIM(TL(DEL)))//"]" endif endif DDL=DDL+1 enddo enddo enddo enddo else if (job .eq. IDRI) then DDL = nleg-(GRNUM+GQNUM+SQNUM+SKNUM+BDNUM+ANNUM) if (DDL.eq.0 .or. DDL.eq.4 .or. DDL.eq.8 .or. DDL.eq.12 .or. DDL.eq.16) then if (idl .eq. 0) then ylegend= """R\sc\N(\f{Times-Italic}n\f{})""" else ylegend= "Rc(n)" endif elseif (DDL.eq.1 .or. DDL.eq.5 .or. DDL.eq.9 .or. DDL.eq.13 .or. DDL.eq.17) then if (idl .eq. 0) then ylegend= """P\sn\N(\f{Times-Italic}n\f{})""" else ylegend= "Pn(n)" endif elseif (DDL.eq.2 .or. DDL.eq.6 .or. DDL.eq.10 .or. DDL.eq.14 .or. DDL.eq.18) then if (idl .eq. 0) then ylegend= """P\smax\N(\f{Times-Italic}n\f{})""" else ylegend= "Pmax(n)" endif elseif (DDL.eq.3 .or. DDL.eq.7 .or. DDL.eq.11 .or. DDL.eq.15 .or. DDL.eq.19) then if (idl .eq. 0) then ylegend= """P\smin\N(\f{Times-Italic}n\f{})""" else ylegend= "Pmin(n)" endif endif elseif (job .eq. IDCH) then elseif (job .eq. IDSP) then DDL = nleg-(GRNUM+GQNUM+SQNUM+SKNUM+BDNUM+ANNUM+RINUM+CHNUM) ! if (DDL .eq. 0) then ! if (idl .eq. 0) then ! ylegend= """Q\sl\N [average]""" ! else ! ylegend= "Ql [average]" ! endif if (DDL.le.NSP-1) then do DEL=1, NSP if (idl .eq. 0) then ylegend= """Q\sl\N ["//TL(DEL)(1:LEN_TRIM(TL(DEL)))//" atoms]""" else ylegend= "Ql ["//TL(DEL)(1:LEN_TRIM(TL(DEL)))//" atoms]" endif enddo else if (idl .eq. 0) then ylegend= """Q\sl\N specific environment""" else ylegend= "Ql specific environment" endif endif else DDL = GRNUM+GQNUM+SQNUM+SKNUM+BDNUM+ANNUM+RINUM+CHNUM+SHNUM do DAL=1, NSP if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD nac ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD nac ("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 enddo do DAL=1, NSP if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [x]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [x]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [y]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [y]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [z]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [z]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xy]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xy]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [yz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [yz]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 enddo do DAL=1, NSP if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [x/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [x/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [y/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [y/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [z/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [z/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xy/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xy/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [xz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [xz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """MSD [yz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [\cE\C\S2\N]""" else ylegend= "MSD [yz/nac]("//TL(DAL)(1:LEN_TRIM(TL(DAL)))//") [Ų]" endif endif DDL=DDL+1 enddo if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Correction (x) [\cE\C\S2\N]""" else ylegend= "Correction (x) [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Correction (y) [\cE\C\S2\N]""" else ylegend= "Correction (y) [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Correction (z) [\cE\C\S2\N]""" else ylegend= "Correction (z) [Ų]" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Drift (x) [ms\S-1\N]""" else ylegend= "Drift (x) m/s" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Drift (y) [ms\S-1\N]""" else ylegend= "Drift (y) (m/s)" endif endif DDL=DDL+1 if (nleg .eq. DDL) then if (idl .eq. 0) then ylegend= """Drift (z) [ms\S-1\N]""" else ylegend= "Drift (z) (m/s)" endif endif endif END FUNCTION CHARACTER (LEN=65) FUNCTION xlegend (job, nleg, idl, cdc) USE PARAMETERS IMPLICIT NONE INTEGER, INTENT(IN) :: job, nleg, idl DOUBLE PRECISION, INTENT(IN) :: cdc INTEGER :: il CHARACTER (LEN=6), DIMENSION(5) :: tpsunit = (/'t [fs]', 't [ps]', 't [ns]', 't [us]', 't [ms]' /) INTERFACE CHARACTER (LEN=7) FUNCTION getunit() END FUNCTION END INTERFACE xlegend = '' if (idl .eq. 0) then if (job.eq.IDGR .or. job.eq.IDGRFFT) then xlegend = "r[\cE\C]""" elseif (job.eq.IDSQ .or. job.eq.IDSK) then xlegend = "q[\cE\C\S-1\N]""" elseif (job .eq. IDBD) then xlegend = "Dij[\cE\C\]""" elseif (job .eq. IDAN) then if ( nleg .lt. GRNUM+GQNUM+SQNUM+SKNUM+BDNUM+NSP*NSP*NSP ) then xlegend = "Angles[\c:\C]""" else xlegend = "Dihedrals[\c:\C]""" endif elseif (job .eq. IDRI) then xlegend = "Size \f{Times-Italic}n\f{} of the ring [total number of nodes]""" elseif (job .eq. IDCH) then xlegend = "Size \f{Times-Italic}n\f{} of the chain [total number of nodes]""" elseif (job .eq. IDSP) then xlegend = "Q\sl\N""" else il = AnINT(cdc) if (il .eq. 4) then xlegend = "\f{12}m\f{}""" else xlegend = tpsunit(il)//"""" endif endif else if (job.eq.IDGR .or. job.eq.IDGRFFT) then xlegend = "r[Å]" elseif (job.eq.IDSQ .or. job.eq.IDSK) then xlegend = "q[Å-1]" elseif (job .eq. IDBD) then xlegend = "Dij[Å]" elseif (job .eq. IDAN) then if ( nleg .lt. GRNUM+GQNUM+SQNUM+SKNUM+BDNUM+NSP*NSP*NSP ) then xlegend = "Angles[°]" else xlegend = "Dihedrals[°]" endif elseif (job .eq. IDRI) then xlegend = "Size n of the ring [total number of nodes]" elseif (job .eq. IDCH) then xlegend = "Size n of the chain [total number of nodes]" elseif (job .eq. IDSP) then xlegend = "Ql" else il = AnINT(cdc) xlegend = tpsunit(il) endif endif END FUNCTION SUBROUTINE prep_file (scf, sfi, tfile, & scalex, scaley, mdc, rdc, idc) BIND (C,NAME='prep_file_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: scf, rdc, idc, tfile INTEGER (KIND=c_int), INTENT(IN) :: scalex, scaley CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: sfi CHARACTER (LEN=scf) :: sfile REAL (KIND=c_double), INTENT(IN) :: mdc CHARACTER (LEN=5) :: xaxis="xaxis", yaxis="yaxis" CHARACTER (LEN=65) :: xlabel INTERFACE CHARACTER(LEN=65) FUNCTION xlegend (job, nleg, idl, cdc) INTEGER, INTENT(IN) :: job, nleg, idl DOUBLE PRECISION, INTENT(IN) :: cdc END FUNCTION END INTERFACE xlabel = xlegend(rdc, idc, tfile, mdc) do i=1, scf sfile(i:i) = sfi(i) enddo open(unit=200, file=sfile, action="write", status='unknown') if (tfile .eq. 0) then write (200, 001) write (200, 002) xaxis, xlabel write (200, 003) xaxis if (scalex .eq. 1) write (200, 016) write (200, 004) xaxis, 1.0 write (200, 005) xaxis, 0.5 write (200, 007) xaxis write (200, 008) xaxis write (200, 003) yaxis if (scaley .eq. 1) write (200, 017) write (200, 004) yaxis, 1.0 write (200, 005) yaxis, 0.5 write (200, 007) yaxis write (200, 008) yaxis write (200, 009) write (200, 010) endif 001 FORMAT ("@with g0") 002 FORMAT ("@ ",A5," label """,A65) 003 FORMAT ("@ ",A5," tick on") 004 FORMAT ("@ ",A5," tick major size ",f8.6) 005 FORMAT ("@ ",A5," tick minor size ",f8.6) 007 FORMAT ("@ ",A5," ticklabel on") 008 FORMAT ("@ ",A5," ticklabel char size 0.800000") 009 FORMAT ("@ legend on") 010 FORMAT ("@ legend box linestyle 0") 016 FORMAT ("@ xaxes scale Logarithmic") 017 FORMAT ("@ yaxes scale Logarithmic") END SUBROUTINE SUBROUTINE append_to_file (ndata, xdata, ydata, & mdc, tdata, rdc, idc, & tfile, nfile, afile, lcname, cstring) BIND (C,NAME='append_to_file_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: rdc, idc INTEGER (KIND=c_int), INTENT(IN) :: ndata INTEGER (KIND=c_int), INTENT(IN) :: tfile, tdata INTEGER (KIND=c_int), INTENT(IN) :: nfile, afile, lcname CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: cstring CHARACTER (LEN=lcname) :: cname INTEGER :: WA INTEGER :: start, step REAL (KIND=c_double), INTENT(IN) :: mdc REAL (KIND=c_double), DIMENSION(ndata), INTENT(IN) :: xdata, ydata CHARACTER (LEN=65) :: xlabel INTERFACE CHARACTER(LEN=65) FUNCTION xlegend (job, nleg, idl, cdc) INTEGER, INTENT(IN) :: job, nleg, idl DOUBLE PRECISION, INTENT(IN) :: cdc END FUNCTION CHARACTER (LEN=35) FUNCTION ylegend (job, nleg, idl) INTEGER, INTENT(IN) :: job, nleg, idl END FUNCTION END INTERFACE do i=1, lcname cname(i:i) = cstring(i) enddo ! ylabel = ylegend(rdc, idc, tfile) xlabel = xlegend(rdc, idc, tfile, mdc) step=1 start=1 if (rdc .eq. IDRI) start=3 if (rdc .eq. IDCH) start=2 if (rdc .eq. IDSP) then start=2 step=1 endif if (tfile .eq. 0) then call CHARINT(Nom, nfile) write (200, *) "@target G0.S",Nom(2:LEN_TRIM(Nom)) write (200, *) "@s",Nom(2:LEN_TRIM(Nom))," legend """, cname, """" if (tdata .eq. 1) then write (200, *) "@s",Nom(2:LEN_TRIM(Nom))," line linestyle 0" write (200, 019) else write (200, 013) endif else write (200, 015) xlabel, cname endif do WA=start, ndata, step write (200, 014) xdata(WA), ydata(WA) enddo write (200, *) if (nfile .eq. afile-1) close(200) 013 FORMAT ("@type xy") 014 FORMAT (f20.10,3x,f20.10) 015 FORMAT ("# ",A65," ",A35) 019 FORMAT ("@type bar") END SUBROUTINE SUBROUTINE save_to_file (scf, sfi, & ndata, xdata, ydata, & scalex, scaley, tdata, & mdc, rdc, idc, tfile, lcname, cstring) BIND (C,NAME='save_to_file_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: scf, rdc, idc, tfile INTEGER (KIND=c_int), INTENT(IN) :: ndata, scalex, scaley, tdata, lcname CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: cstring CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: sfi CHARACTER (LEN=scf) :: sfile CHARACTER (LEN=lcname) :: cname INTEGER :: step, start REAL (KIND=c_double), INTENT(IN) :: mdc REAL (KIND=c_double), DIMENSION(ndata), INTENT(IN) :: xdata, ydata INTEGER :: WA, WB CHARACTER (LEN=5) :: xaxis="xaxis", yaxis="yaxis" CHARACTER (LEN=65) :: xlabel INTERFACE CHARACTER(LEN=65) FUNCTION xlegend (job, nleg, idl, cdc) INTEGER, INTENT(IN) :: job, nleg, idl DOUBLE PRECISION, INTENT(IN) :: cdc END FUNCTION CHARACTER (LEN=35) FUNCTION ylegend (job, nleg, idl) INTEGER, INTENT(IN) :: job, nleg, idl END FUNCTION END INTERFACE !ylabel = ylegend(rdc, idc, tfile) do i=1, lcname cname(i:i) = cstring(i) enddo xlabel = xlegend(rdc, idc, tfile, mdc) start=1 step=1 if (rdc .eq. IDRI) start=3 if (rdc .eq. IDCH) start=2 if (rdc .eq. IDSP) then start=2 step=1 endif do i=1, scf sfile(i:i) = sfi(i) enddo open(unit=100, file=sfile, action="write", status='unknown') if (tfile .eq. 0) then write (100, 001) write (100, 002) xaxis, xlabel write (100, 003) xaxis if (scalex .eq. 1) write (100, 016) write (100, 004) xaxis, 1.0 write (100, 005) xaxis, 0.5 write (100, 007) xaxis write (100, 008) xaxis write (100, 006) yaxis, cname write (100, 003) yaxis if (scaley .eq. 1) write (100, 017) write (100, 004) yaxis, 1.0 write (100, 005) yaxis, 0.5 write (100, 007) yaxis write (100, 008) yaxis write (100, 009) write (100, 010) if (rdc.eq.IDRI .or. rdc.eq.IDCH) then if (tdata .eq. 1) then WB=0 do WA=start, ndata if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) call CHARINT(Nom2, WA) write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," legend ""t",Nom2(2:LEN_TRIM(Nom2)),"""" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," line linestyle 0" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," symbol fill pattern 14" WB=WB+1 endif enddo WB=0 do WA=start, ndata if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) write (100, *) "@target G0.S",Nom(2:LEN_TRIM(Nom)) write (100, 019) write (100, 018) WA, ydata(WA) WB=WB+1 endif enddo else write (100, 011) cname write (100, 012) write (100, 013) do WA=start, ndata if (ydata(WA) .ne. 0.0) write (100, 018) WA, ydata(WA) enddo endif elseif (rdc .eq. IDSP) then if (tdata .eq. 1) then WB=0 do WA=start, ndata, step if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) call CHARINT(Nom2, WA-1) write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," legend ""t",Nom2(2:LEN_TRIM(Nom2)),"""" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," line linestyle 0" write (100, *) "@ s",Nom(2:LEN_TRIM(Nom))," symbol fill pattern 14" WB=WB+1 endif enddo WB=0 do WA=start, ndata, step if (ydata(WA) .ne. 0) then call CHARINT(Nom, WB) write (100, *) "@target G0.S",Nom(2:LEN_TRIM(Nom)) write (100, 019) write (100, 018) WA, ydata(WA) WB=WB+1 endif enddo else write (100, 011) cname write (100, 012) write (100, 013) ! Check this do WA=start, ndata, 2 write (100, 018) WA, ydata(WA) enddo endif elseif (rdc.eq.IDSQ .or. rdc.eq.IDSK) then write (100, 011) cname write (100, 012) write (100, 013) do WA=start, ndata write (100, 014) xdata(WA), ydata(WA) enddo else if (tdata .eq. 0) then write (100, 011) cname write (100, 012) write (100, 013) else write (100, 011) cname write (100, 012) write (100, 019) endif do WA=start, ndata write (100, 014) xdata(WA), ydata(WA) enddo endif else write (100, 015) xlabel, cname do WA=start, ndata, step write (100, 014) xdata(WA), ydata(WA) enddo endif close(100) 001 FORMAT ("@with g0") 002 FORMAT ("@ ",A5," label """,A65) 003 FORMAT ("@ ",A5," tick on") 004 FORMAT ("@ ",A5," tick major size ",f8.6) 005 FORMAT ("@ ",A5," tick minor size ",f8.6) 006 FORMAT ("@ ",A5," label ",A35) 007 FORMAT ("@ ",A5," ticklabel on") 008 FORMAT ("@ ",A5," ticklabel char size 0.800000") 009 FORMAT ("@ legend on") 010 FORMAT ("@ legend box linestyle 0") 011 FORMAT ("@ s0 legend """,A50,"""") 012 FORMAT ("@target G0.S0") 013 FORMAT ("@type xy") 014 FORMAT (f20.10,3x,f20.10) 015 FORMAT ("# ",A65," ",A35) 016 FORMAT ("@ xaxes scale Logarithmic") 017 FORMAT ("@ yaxes scale Logarithmic") 018 FORMAT (i4,5x,f20.10) 019 FORMAT ("@type bar") END SUBROUTINE Atomes-GNU-1.1.14/src/fortran/xyz.F90000066400000000000000000000104631457665371200170550ustar00rootroot00000000000000! This file is part of the 'atomes' software. ! ! 'atomes' is free software: you can redistribute it and/or modify it under the terms ! of the GNU Affero General Public License as published by the Free Software Foundation, ! either version 3 of the License, or (at your option) any later version. ! ! 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; ! without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ! See the GNU General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License along with 'atomes'. ! If not, see ! ! Copyright (C) 2022-2024 by CNRS and University of Strasbourg ! !> !! @file xyz.F90 !! @short Write XYZ atomic coordinates !! @author Sébastien Le Roux INTEGER (KIND=c_int) FUNCTION read_xyz (xyz_f, lxyz, is_npt) BIND (C,NAME='read_xyz_') !INTEGER FUNCTION read_xyz (xyz_file, lxyz) ! ! Lecture of atom types and coordinates - XYZ files ! USE PARAMETERS IMPLICIT NONE LOGICAL :: isok INTEGER (KIND=c_int), INTENT(IN) :: lxyz, is_npt CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: xyz_f CHARACTER (LEN=lxyz) :: xyz_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lxyz xyz_file(i:i) = xyz_f(i) enddo read_xyz=1 inquire (file=xyz_file, exist=isok) if (isok) then open (unit=20, file=xyz_file, action='read', status='old', err=001) NS=0 read (20, *, err=002) NA NS = TEST_LENGTH(20, NA+2) if (NS .gt. 0) then rewind(20) if (allocated(FULLPOS)) deallocate(FULLPOS) allocate (FULLPOS(NA,3,NS), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_xyz"//CHAR(0), "Table: FULLPOS"//CHAR(0)) endif if (allocated(TAB_OF_TYPE)) deallocate(TAB_OF_TYPE) allocate (TAB_OF_TYPE(NA), STAT=ERR) if (ERR .ne. 0) then call show_error ("Impossible to allocate memory"//CHAR(0), & "Function: read_xyz"//CHAR(0), "Table: TAB_OF_TYPE"//CHAR(0)) endif do i=1, NS read (20, *, err=002) read (20, *, err=002) do j=1, NA read (20, *, err=002) TAB_OF_TYPE(j), FULLPOS(j,1,i), FULLPOS(j,2,i), FULLPOS(j,3,i) enddo enddo if (is_npt .eq. 1) call send_steps (NS) read_xyz=0 else read_xyz=2 endif 002 continue close (20) 001 continue endif END FUNCTION INTEGER FUNCTION TEST_LENGTH (UNITFILE, NATL) IMPLICIT NONE INTEGER, INTENT(IN) :: UNITFILE, NATL INTEGER :: LENF INTEGER :: EOF rewind(UNITFILE) EOF=0 LENF=0 do while (EOF .eq. 0) read (UNITFILE, *, iostat=EOF) LENF=LENF+1 enddo LENF=LENF-1 TEST_LENGTH=mod(LENF,NATL) if (TEST_LENGTH .eq. 0) then TEST_LENGTH=LENF/NATL else TEST_LENGTH=0 endif END FUNCTION SUBROUTINE send_label (sp_id, sp_ln, spec_label) BIND (C,NAME='send_label_') USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: sp_id, sp_ln CHARACTER (KIND=c_char), DIMENSION(sp_ln), INTENT(IN) :: spec_label TL(sp_id)=" " do i=1, sp_ln TL(sp_id)(i:i) = spec_label(i) enddo END SUBROUTINE INTEGER (KIND=c_int) FUNCTION write_xyz (xyz_f, lxyz, fxyz, txyz) BIND (C,NAME='write_xyz_') ! ! output of atom types and coordinates - Multiple XYZ files ! USE PARAMETERS IMPLICIT NONE INTEGER (KIND=c_int), INTENT(IN) :: lxyz, fxyz, txyz CHARACTER (KIND=c_char), DIMENSION(*), INTENT(IN) :: xyz_f DOUBLE PRECISION, DIMENSION(3) :: savep CHARACTER (LEN=lxyz) :: xyz_file INTERFACE INTEGER FUNCTION TEST_LENGTH(UNITFILE, NATL) INTEGER, INTENT(IN) :: UNITFILE, NATL END FUNCTION END INTERFACE do i=1, lxyz xyz_file(i:i) = xyz_f(i) enddo write_xyz=1 open (unit=20, file=xyz_file, action='write', status='unknown', err=001) do i=1, NS write (20, '(i10)') NA write (20, *) do j=1, NA if (fxyz .eq. 1) then if (NCELLS .gt. 1) then NBOX => THE_BOX(i) else NBOX => THE_BOX(1) endif savep = MATMUL(FULLPOS(j,:,i),NBOX%carttofrac) else savep = FULLPOS(j,:,i) if (txyz .eq. 1) then savep(:) = savep(:)/ANGTOBOHR endif endif write (20, '(a2,3(3x,f15.10))', err=002) TL(LOT(j)), savep enddo enddo write_xyz=0 002 continue close (20) 001 continue END FUNCTION Atomes-GNU-1.1.14/src/global.c000066400000000000000000000401251457665371200156720ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file global.c * @short Global variables declaration \n Global convenience function implementations * @author Sébastien Le Roux */ /* * This file: 'global.c' * * Contains: * - global variables declarations - global convenience functions implementation * * List of functions: int * allocint (int val); int ** allocdint (int xal, int yal); int *** alloctint (int xal, int yal, int zal); int **** allocqint (int wal, int xal, int yal, int zal); int * duplicate_int (int num, int * old_val); float * allocfloat (int val); float ** allocdfloat (int xal, int yal); float *** alloctfloat (int xal, int yal, int zal); float * duplicate_float (int num, float * old_val); double * allocdouble (int val); double ** allocddouble (int xal, int yal); double *** alloctdouble (int xal, int yal, int zal); double **** allocqdouble (int wal, int xal, int yal, int zal); double * duplicate_double (int num, double * old_val); double get_calc_time (struct timespec start, struct timespec stop); gboolean * allocbool (int val); gboolean ** allocdbool (int xal, int yal); gboolean *** alloctbool (int xal, int yal, int zal); gboolean * duplicate_bool (int num, gboolean * old_val); gchar ** duplicate_strings (int num, gchar ** old_val); gchar * calculation_time (gboolean modelv, double ctime); */ #include #include #include #include #include #include #define BILLION 1000000000L; #ifdef G_OS_WIN32 gchar * PACKAGE_PREFIX = NULL; gchar * PACKAGE_LIB_DIR = NULL; gchar * PACKAGE_DATA_DIR = NULL; gchar * PACKAGE_LOCALE_DIR = NULL; gchar * PACKAGE_IMP = NULL; gchar * PACKAGE_CON = NULL; gchar * PACKAGE_IMG = NULL; gchar * PACKAGE_PDF = NULL; gchar * PACKAGE_SVG = NULL; gchar * PACKAGE_EPS = NULL; gchar * PACKAGE_PNG = NULL; gchar * PACKAGE_JPG = NULL; gchar * PACKAGE_BMP = NULL; gchar * PACKAGE_TIFF = NULL; gchar * PACKAGE_VOID = NULL; gchar * PACKAGE_GR = NULL; gchar * PACKAGE_SQ = NULL; gchar * PACKAGE_BD = NULL; gchar * PACKAGE_AN = NULL; gchar * PACKAGE_RI = NULL; gchar * PACKAGE_CH = NULL; gchar * PACKAGE_SP = NULL; gchar * PACKAGE_MS = NULL; gchar * PACKAGE_TD = NULL; gchar * PACKAGE_MOL = NULL; gchar * PACKAGE_OGL = NULL; gchar * PACKAGE_OGLM = NULL; gchar * PACKAGE_OGLC = NULL; gchar * PACKAGE_PRO = NULL; gchar * PACKAGE_SET = NULL; gchar * PACKAGE_LOGO = NULL; gchar * PACKAGE_LAGPL = NULL; gchar * PACKAGE_LABOUT = NULL; gchar * PACKAGE_DOTA = NULL; gchar * PACKAGE_DOTB = NULL; gchar * PACKAGE_DOTC = NULL; gchar * PACKAGE_DOTD = NULL; gchar * PACKAGE_DOTE = NULL; gchar * PACKAGE_DOTF = NULL; gchar * PACKAGE_DOTG = NULL; gchar * PACKAGE_DOTH = NULL; gchar * PACKAGE_DFBD = NULL; gchar * PACKAGE_DFAN = NULL; gchar * PACKAGE_DFDI = NULL; gchar * PACKAGE_DFTD = NULL; gchar * PACKAGE_DFIN = NULL; gchar * PACKAGE_SGCP = NULL; gchar * PACKAGE_SGCI = NULL; gchar * PACKAGE_SGCF = NULL; gchar * PACKAGE_SGHP = NULL; gchar * PACKAGE_SGTR = NULL; gchar * PACKAGE_SGTI = NULL; gchar * PACKAGE_SGTP = NULL; gchar * PACKAGE_SGOP = NULL; gchar * PACKAGE_SGOI = NULL; gchar * PACKAGE_SGOC = NULL; gchar * PACKAGE_SGOF = NULL; gchar * PACKAGE_SGMP = NULL; gchar * PACKAGE_SGMI = NULL; gchar * PACKAGE_SGTC = NULL; #endif gchar * ATOMES_CONFIG = NULL; gchar * ATOMES_URL = "https://atomes.ipcms.fr"; gchar * mode_name[2]={"Analysis", "Edition"}; gchar * bravais_img[14]; gchar * ifield[8]; gchar * projfile = NULL; char * ifbug="\nIf this is a bug please report it to:"; char * rings_type[5] = {"All (No rules)", "King's", "Guttman's", "Primitive", "Strong"}; char * untime[6] = {"fs", "ps", "ns", "µs", "ms", " "}; gchar * workspacefile = NULL; int nprojects = 0; int activep = 0; int activev = 0; int activef = 0; int inactep = 0; int activew = 0; int statusval; int atomes_visual = 1; // OpenGL visual: 1 = GTK default, 0 = X11 default (GTK3 + GtkGLArea only), -1 = no OpenGL // Loop Id for the dialogs int dialog_id = -1; int bonds_update = 0; int frag_update = 0; int mol_update = 0; int tmp_pixels[2]; int * pasted_todo = NULL; double * xsk = NULL; GMainLoop * Event_loop[5]; gboolean in_movie_encoding = FALSE; gboolean newspace = TRUE; gboolean reading_input; gboolean tmp_adv_bonding[2]; gboolean column_label = FALSE; gboolean check_label = TRUE; gboolean object_motion = FALSE; gboolean selected_status = FALSE; gboolean silent_input = FALSE; gboolean cif_use_symmetry_positions = FALSE; struct timespec start_time; struct timespec stop_time; double opac = 0.75; double pi = 3.141592653589793238462643383279502884197; gchar * edition_action_names[3] = {"edit.chemistry", "edit.periodicity", "edit.cutoffs"}; gchar * analyze_action_names[9] = {"analyze.gr", "analyze.sq", "analyze.sk", "analyze.gk", "analyze.bonds", "analyze.rings", "analyze.chains", "analyze.sp", "analyze.msd"}; GSimpleAction * edition_actions[3]; GSimpleAction * analyze_actions[9]; GtkApplication * AtomesApp = NULL; GtkWidget * MainWindow = NULL; GtkWidget * MainView = NULL; GtkWidget * MainFrame[2]; GtkWidget * pop = NULL; GtkWidget * curvetoolbox = NULL; GtkWidget * progressbar = NULL; GtkWidget * MainScrol[2]; GtkWidget * atomes_logo = NULL; GtkWidget * calc_dialog = NULL; GtkWidget * register_button = NULL; GtkTextTag * tag = NULL; GtkStatusbar * statusbar; GdkPixbuf * THETD = NULL; GdkPixbuf * THEMO = NULL; GdkPixbuf * THEBD = NULL; GdkPixbuf * SETTING = NULL; GdkPixbuf * SETTINGS = NULL; GdkPixbuf * OGL = NULL; GdkPixbuf * OGLM = NULL; GdkPixbuf * OGLC = NULL; GdkPixbuf * RUN = NULL; // Basic utility functions /*! \fn int StringLength (char * str) \brief return the length of a string \param str string to measure * / int StringLength (char * str) { int na, nb; char c; for (na = 0; (c = * str) != '\0'; ++ str, na ++); -- str; for (nb = na; (c = * str) == ' '; -- str, nb --); return nb; } */ /*! \fn gboolean * allocbool (int val) \brief allocate a gboolean * pointer \param val size of the pointer to allocate */ gboolean * allocbool (int val) { gboolean * var = NULL; var = g_malloc0 (val*sizeof*var); return var; } /*! \fn gboolean ** allocdbool (int xal, int yal) \brief allocate a gboolean ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ gboolean ** allocdbool (int xal, int yal) { gboolean ** var = NULL; int i; var = g_malloc (xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocbool(yal); } return var; } /*! \fn gboolean *** alloctbool (int xal, int yal, int zal) \brief allocate a gboolean *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ gboolean *** alloctbool (int xal, int yal, int zal) { gboolean *** var = NULL; int i; var = g_malloc (xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdbool(yal, zal); } return var; } /*! \fn int * allocint (int val) \brief allocate an int * pointer \param val size of the pointer to allocate */ int * allocint (int val) { int * var = NULL; var = g_malloc0 (val*sizeof*var); return var; } /*! \fn int ** allocdint (int xal, int yal) \brief allocate an int ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ int ** allocdint (int xal, int yal) { int ** var = NULL; int i; var = g_malloc (xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocint(yal); } return var; } /*! \fn int *** alloctint (int xal, int yal, int zal) \brief allocate an int *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ int *** alloctint (int xal, int yal, int zal) { int *** var = NULL; int i; var = g_malloc (xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdint(yal, zal); } return var; } /*! \fn int **** allocqint (int wal, int xal, int yal, int zal) \brief allocate an int **** pointer \param wal 1st dimension size of the pointer to allocate \param xal 2nd dimension size of the pointer to allocate \param yal 3rd dimension size of the pointer to allocate \param zal 4th dimension size of the pointer to allocate */ int **** allocqint (int wal, int xal, int yal, int zal) { int **** var = NULL; int i; var = g_malloc (wal*sizeof*var); for ( i = 0 ; i < wal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = alloctint(xal, yal, zal); } return var; } /*! \fn float * allocfloat (int val) \brief allocate a float * pointer \param val size of the pointer to allocate */ float * allocfloat (int val) { float * var = NULL; var = g_malloc0 (val*sizeof*var); return var; } /*! \fn float ** allocdfloat (int xal, int yal) \brief allocate a float ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ float ** allocdfloat (int xal, int yal) { float ** var = NULL; int i; var = g_malloc (xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocfloat(yal); } return var; } /*! \fn float *** alloctfloat (int xal, int yal, int zal) \brief allocate a float *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ float *** alloctfloat (int xal, int yal, int zal) { float *** var = NULL; int i; var = g_malloc (xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdfloat (yal, zal); } return var; } /*! \fn double * allocdouble (int val) \brief allocate a double * pointer \param val size of the pointer to allocate */ double * allocdouble (int val) { double * var = NULL; var = g_malloc0 (val*sizeof*var); return var; } /*! \fn double ** allocddouble (int xal, int yal) \brief allocate a double ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ double ** allocddouble (int xal, int yal) { double ** var = NULL; int i; var = g_malloc (xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocdouble (yal); } return var; } /*! \fn double *** alloctdouble (int xal, int yal, int zal) \brief allocate a double *** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate \param zal 3rd dimension size of the pointer to allocate */ double *** alloctdouble (int xal, int yal, int zal) { double *** var = NULL; int i; var = g_malloc (xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocddouble (yal, zal); } return var; } /*! \fn double **** allocqdouble (int wal, int xal, int yal, int zal) \brief allocate a double **** pointer \param wal 1st dimension size of the pointer to allocate \param xal 2nd dimension size of the pointer to allocate \param yal 3rd dimension size of the pointer to allocate \param zal 4th dimension size of the pointer to allocate */ double **** allocqdouble (int wal, int xal, int yal, int zal) { double **** var = NULL; int i; var = g_malloc (wal*sizeof*var); for ( i = 0 ; i < wal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = alloctdouble (xal, yal, zal); } return var; } /*! \fn gchar ** duplicate_strings (int num, gchar ** old_val) \brief copy a list of strings \param num number of elements in the list \param old_val the list to copy */ gchar ** duplicate_strings (int num, gchar ** old_val) { gchar ** new_val = g_malloc0 (num*sizeof*new_val); int i; for (i=0; i Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file global.h * @short Global variable declarations \n Global convenience function declarations \n Global data structure definitions * @author Sébastien Le Roux */ /* * This header file: 'global.h' * * Contains: - Global variable declarations - Global convenience function declarations - Global data structure definitions */ #ifdef HAVE_CONFIG_H # include #endif #define GDK_SYNCHRONIZE #ifndef GLOBAL_H_ #define GLOBAL_H_ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef MAC_INTEGRATION # include #endif #ifdef G_OS_WIN32 # include # include # define WIN32_LEAN_AND_MEAN 1 # include # include #else # define max(a,b) (a>=b?a:b) # define min(a,b) (a<=b?a:b) # include # ifdef __APPLE__ # include # else # include # include # endif #endif #include "math_3d.h" // dint, tint and qint structures are used for pointer purposes. // dint, tint, qint, ColRGBA and coord_info structures must be defined before including 'glwin.h' typedef struct dint dint; struct dint { int a; int b; }; typedef struct tint tint; struct tint { int a; int b; int c; }; typedef struct qint qint; struct qint { int a; int b; int c; int d; }; typedef struct ColRGBA ColRGBA; struct ColRGBA { float red; float green; float blue; float alpha; }; /*! \typedef coord_info \brief Data structure to store coordination information */ typedef struct coord_info coord_info; struct coord_info { int species; /*!< The number of chemical species */ // 0 = tot // 1 = partial // 2 = fragments // 3 = molecules // > 3 = rings // 9 = chains int totcoord[10]; /*!< The total number of objects: \n 0 = total coordination(s), \n 1 = partial coordination(s), \n 2 = fragment(s), \n 3 = molecule(s), \n 4 to 8 = ring statistics, \n 9 = chain statistics */ int * ntg[10]; /*!< The number of objects by chemical species */ int ** geolist[10]; /*!< The corresponding list of geometries */ int *** partial_geo; /*!< The list of partial geometries */ int cmin; /*!< The minimum coordination number */ int cmax; /*!< The Maximum coordination number */ }; #include "glwin.h" #ifndef GTK4 # include #endif #define MEDIA_NEXT "media-skip-forward" #define MEDIA_PREV "media-skip-backward" #define MEDIA_LAST "go-last" #define MEDIA_FIRST "go-first" #define MEDIA_GOTO "go-jump" #define MEDIA_PLAY "media-playback-start" #define MEDIA_STOP "media-playback-stop" #define MEDIA_LOOP "view-refresh" #define MEDIA_ULOOP "edit-cut" #define MEDIA_SLOW "view-sort-ascending" #define MEDIA_FAST "view-sort-descending" #define GO_RIGHT "go-next" #define GO_LEFT "go-previous" #define GO_UP "go-up" #define GO_DOWN "go-down" #define PAGE_SETUP "document-page-setup" #define FULLSCREEN "view-fullscreen" #define FITBEST "zoom-fit-best" #define RECORD "media-record" #define YES "gtk-yes" #define EDITA "edit-find-replace" #define EDITC "edit-copy" #define EDITF "edit-find" #define ECUT "edit-cut" #define DPROPERTIES "document-properties" #define FNEW "document-new" #define FOPEN "document-open" #define FSAVE "document-save" #define FSAVEAS "document-save-as" #define FCLOSE "window-close" #define FEXIT "application-exit" #define LIST_ADD "list-add" #define LIST_REM "list-remove" #define CANCEL "process-stop" #define EXECUTE "system-run" #ifdef GTK4 #define APPLY "emblem-default" #else #define APPLY "gtk-apply" #endif #define DELETEB "edit-delete" #define DIAL_ERROR "dialog-error" #define AFILE "text-x-generic" #define ABOUT "help-about" #ifdef GTK4 /*! \enum ReliefStyle */ enum ReliefStyle { GTK_RELIEF_NORMAL = 0, /*!< 0 */ GTK_RELIEF_HALF = 1, /*!< 1 */ GTK_RELIEF_NONE = 2 /*!< 2 */ }; /*! \enum ShadowStyle */ enum ShadowStyle { GTK_SHADOW_NONE = 0, /*!< 0 */ GTK_SHADOW_IN = 1, /*!< 1 */ GTK_SHADOW_OUT = 2, /*!< 2 */ GTK_SHADOW_ETCHED_IN = 3, /*!< 3 */ GTK_SHADOW_ETCHED_OUT = 4 /*!< 4 */ }; #define BSEP 3 #else #define BSEP 0 #endif /*! \enum ContainerType */ enum ContainerType { CONTAINER_WIN = 0, /*!< 0 */ CONTAINER_SCR = 1, /*!< 1 */ CONTAINER_VIE = 2, /*!< 2 */ CONTAINER_BUT = 3, /*!< 3 */ CONTAINER_FRA = 4, /*!< 4 */ CONTAINER_EXP = 5 /*!< 5 */ }; /*! \enum ImageFormats */ enum ImageFormats { IMG_NONE = 0, /*!< 0 */ IMG_PIXBUF = 1, /*!< 1 */ IMG_SURFACE = 2, /*!< 2 */ IMG_FILE = 3, /*!< 3 */ IMG_STOCK = 4 /*!< 4 */ }; #define IODEBUG FALSE /*! \def ATOM_LIMIT \brief Atom number limit to compute fragment(s) and molecule(s) analysis automatically */ #define ATOM_LIMIT 100000 /*!< \def STEP_LIMIT \brief MD step number limit to compute fragment(s) and molecule(s) analysis automatically */ #define STEP_LIMIT 10000 #define OK 0 #define ERROR_RW 1 #define ERROR_PROJECT 2 #define ERROR_CURVE 3 #define ERROR_IMAGE 4 #define ERROR_ATOM_A 5 #define ERROR_ATOM_B 6 #define ERROR_UPDATE 7 #define ERROR_NO_WAY 8 #define ERROR_COORD 9 #define ERROR_RINGS 10 #define ERROR_CHAINS 11 #define ERROR_MOL 12 /*!< \def CHEM_PARAMS \brief Number of chemical parameters */ #define CHEM_PARAMS 5 #define CHEM_Z 0 #define CHEM_M 1 #define CHEM_R 2 #define CHEM_N 3 #define CHEM_X 4 #define NDOTS 8 /*!< \def NCALCS \brief Number of analysis */ #define NCALCS 12 /*!< \def NGRAPHS \brief Number of analysis with results in curve window(s) */ #define NGRAPHS 10 /*!< \def NCFORMATS \brief Number atomic coordinates file formats */ #define NCFORMATS 12 #define NITEMS 16 #define OT 4 #define GR 0 #define SQ 1 #define SK 2 #define GK 3 #define BD 4 #define AN 5 #define RI 6 #define CH 7 #define SP 8 #define MS 9 #define BV 10 #define FF 12 #define DEFAULT_FONT_SIZE 8 #define DEFAULT_ALPHA 0.75 #define MINCUT 1.85 #ifdef G_OS_WIN32 extern gchar * PACKAGE_PREFIX; extern gchar * PACKAGE_LIB_DIR; extern gchar * PACKAGE_DATA_DIR; extern gchar * PACKAGE_LOCALE_DIR; extern gchar * PACKAGE_IMP; extern gchar * PACKAGE_CON; extern gchar * PACKAGE_IMG; extern gchar * PACKAGE_PDF; extern gchar * PACKAGE_SVG; extern gchar * PACKAGE_EPS; extern gchar * PACKAGE_PNG; extern gchar * PACKAGE_JPG; extern gchar * PACKAGE_BMP; extern gchar * PACKAGE_TIFF; extern gchar * PACKAGE_VOID; extern gchar * PACKAGE_GR; extern gchar * PACKAGE_SQ; extern gchar * PACKAGE_BD; extern gchar * PACKAGE_AN; extern gchar * PACKAGE_RI; extern gchar * PACKAGE_CH; extern gchar * PACKAGE_SP; extern gchar * PACKAGE_MS; extern gchar * PACKAGE_TD; extern gchar * PACKAGE_MOL; extern gchar * PACKAGE_OGL; extern gchar * PACKAGE_OGLM; extern gchar * PACKAGE_OGLC; extern gchar * PACKAGE_PRO; extern gchar * PACKAGE_SET; extern gchar * PACKAGE_LOGO; extern gchar * PACKAGE_LAGPL; extern gchar * PACKAGE_LABOUT; extern gchar * PACKAGE_DOTA; extern gchar * PACKAGE_DOTB; extern gchar * PACKAGE_DOTC; extern gchar * PACKAGE_DOTD; extern gchar * PACKAGE_DOTE; extern gchar * PACKAGE_DOTF; extern gchar * PACKAGE_DOTG; extern gchar * PACKAGE_DOTH; extern gchar * PACKAGE_DFBD; extern gchar * PACKAGE_DFAN; extern gchar * PACKAGE_DFDI; extern gchar * PACKAGE_DFTD; extern gchar * PACKAGE_DFIN; extern gchar * PACKAGE_SGCP; extern gchar * PACKAGE_SGCI; extern gchar * PACKAGE_SGCF; extern gchar * PACKAGE_SGHP; extern gchar * PACKAGE_SGTR; extern gchar * PACKAGE_SGTI; extern gchar * PACKAGE_SGTP; extern gchar * PACKAGE_SGOP; extern gchar * PACKAGE_SGOI; extern gchar * PACKAGE_SGOC; extern gchar * PACKAGE_SGOF; extern gchar * PACKAGE_SGMP; extern gchar * PACKAGE_SGMI; extern gchar * PACKAGE_SGTC; #endif extern gchar * ATOMES_CONFIG; extern gchar * ATOMES_URL; extern gchar * mode_name[2]; extern gchar * graph_img[NGRAPHS]; extern gchar * dots[NDOTS]; extern gchar * bravais_img[14]; extern gchar * ifield[8]; extern gchar * projfile; extern char * ifbug; extern char * coord_files[NCFORMATS+1]; extern char * coord_files_ext[NCFORMATS+1]; extern char * calc_name[NCALCS-2]; extern char * graph_name[NGRAPHS] ; extern char * rings_type[5]; extern char * untime[6]; extern gchar * workspacefile; extern int nprojects; extern int activep; extern int activev; extern int activef; extern int inactep; extern int activew; extern int statusval; extern int atomes_visual; extern int dialog_id; extern int bonds_update; extern int frag_update; extern int mol_update; extern int tmp_pixels[2]; extern int * pasted_todo; extern atomic_object * copied_object; extern GMainLoop * Event_loop[5]; extern gboolean in_movie_encoding; extern gboolean newspace; extern gboolean reading_input; extern gboolean tmp_adv_bonding[2]; extern gboolean column_label; extern gboolean check_label; extern gboolean object_motion; extern gboolean selected_status; extern gboolean silent_input; extern gboolean cif_use_symmetry_positions; extern struct timespec start_time; extern struct timespec stop_time; extern double opac; extern double pi; extern GtkWidget * MainWindow; extern GtkWidget * MainView; extern GtkWidget * MainFrame[2]; extern GtkWidget * pop; extern GtkWidget * curvetoolbox; extern GtkWidget * progressbar; extern GtkWidget * MainScrol[2]; extern GtkWidget * atomes_logo; extern GtkWidget * calc_dialog; extern GtkWidget * register_button; extern GtkTextTag * tag; extern GtkStatusbar * statusbar; extern ColRGBA std[6]; extern GdkPixbuf * THETD; extern GdkPixbuf * THEMO; extern GdkPixbuf * THEBD; extern GdkPixbuf * SETTING; extern GdkPixbuf * SETTINGS; extern GdkPixbuf * OGL; extern GdkPixbuf * OGLM; extern GdkPixbuf * OGLC; extern GdkPixbuf * RUN; extern tint cut_sel; extern tint cut_lab; // Data structures #define LINE_SIZE 160 /*! \typedef line_node */ typedef struct line_node line_node; struct line_node { gchar * line; /*!< Size max = LINE_SIZE */ struct line_node * next; struct line_node * prev; }; /*! \typedef coord_file \brief Atomic coordinates file, data container */ typedef struct coord_file coord_file; struct coord_file { int natomes; /*!< Number of atom(s) */ int steps; /*!< Number of MD step(s) */ int nspec; /*!< Number of chemical species */ double * z; /*!< List of atomic numbers */ int * nsps; /*!< Number of atoms by species */ double ** coord; /*!< Atomic coordinates */ gboolean cartesian; /*!< Cartesian (1) or Fractional coordinates (0) */ int * lot; /*!< Chemical species by atom */ int ndummy; /*!< Number of dummy atom(s), if any */ gchar ** dummy; /*!< List of dummy atom(s), if any */ cell_info lattice; /*!< Description of the periodicity */ int mid; /*!< Message type (0 = error, 1 = warning), if any */ gchar * info; /*!< Information message, if required */ gchar ** label; /*!< VAS or TRJ: list of chemical labels, \n CIF: Label list of mis-labelled object(s) */ // The following line is only used for DL_POLY history files: int traj; /*!< */ // The following lines are only used for CIF files: int num_sym_pos; /*!< Number of symmetry positions, if any */ gchar *** sym_pos; /*!< The symmetry positions, if any */ int setting; /*!< Space group setting */ int * wyckoff; /*!< Wyckoff positions */ double * occupancy; /*!< Site(s) occupancy */ int ** occupied; /*!< Occupancy status */ int * multi; /*!< Multiplicity */ int atom_unlabelled; /*!< Number of atom(s) unlabelled */ int * u_atom_list; /*!< List of unlabelled atom(s) */ int object_to_insert; /*!< Number of object(s) to label */ int * object_list; /*!< List of object to insert by atom(s) */ }; /*! \typedef MouseState \brief Data structure used for zoom in / out on curve widget */ typedef struct MouseState MouseState; struct MouseState { gint start_x; /*!< Initial x position */ gint start_y; /*!< Initial y position */ gint time; /*!< Time */ gboolean MouseIsDown; /*!< Is the mouse button up (0) or down (1) */ }; /*! \typedef CurveState \brief Data structure used for zoom in / out on curve widget */ typedef struct CurveState CurveState; struct CurveState { MouseState mouseState; /*!< Mouse status information */ tint * id; /*!< Curve data pointer */ }; /*! \typedef DataLayout \brief Cruve layout information */ typedef struct DataLayout DataLayout; struct DataLayout { ColRGBA datacolor; /*!< Data color */ double thickness; /*!< Data line thickness */ int dash; /*!< Data line style */ int glyph; /*!< Data glyph type */ double gsize; /*!< Data glyph size */ int gfreq; /*!< Data glyph frequency */ int aspect; /*!< X/Y or histogram */ double hwidth; /*!< Histogram width */ double hopac; /*!< Histogram color opacity */ int hpos; /*!< Histogram is transparent ? */ }; /*! \typedef CurveExtra \brief Extra curve(s) data information */ typedef struct CurveExtra CurveExtra; struct CurveExtra { tint id; /*!< Curve data pointer */ DataLayout * layout; /*!< Curve layout information */ CurveExtra * prev; CurveExtra * next; }; /*! \typedef ExtraSets \brief List of extra data sets for a curve */ typedef struct ExtraSets ExtraSets; struct ExtraSets { int extras; /*!< Number of extra data sets, if any */ CurveExtra * first; /*!< First data set of the list, if any */ CurveExtra * last; /*!< Last data set of the list, if any */ }; /*! \typedef Curve \brief The curve data structure */ typedef struct Curve Curve; struct Curve { int cid; /*!< Curve id */ int ndata; /*!< number of data points */ double * data[2]; /*!< X and Y data */ double * err; /*!< Error bar on Y if any. */ double cmin[2]; /*!< Min of the data on X and Y */ double cmax[2]; /*!< Max of the data on X and Y */ GtkWidget * plot; /*!< Drawing area */ GtkWidget * button; /*!< Interaction button for 'Toolboxes' */ GtkWidget * curve_vbox; /*!< Curve top boxes for the menu bar */ GtkWidget * curve_hbox; GtkWidget * window; /*!< Widget for the window */ GtkWidget * pos; /*!< Mouse cursor position in graph */ int wsize[2]; /*!< Curve window size */ GtkWidget * datatree; /*!< Widget for the selection tree */ qint idcol[2]; /*!< For navigation in the list view */ ColRGBA backcolor; /*!< Background color */ int format; /*!< Format of output (screen, png, pdf, ...) */ char * name; /*!< Name of the curve */ // Axis double axmin[2]; /*!< Min for the axis X and Y */ double axmax[2]; /*!< Max for the axis X and Y */ gboolean axis_defaut_title[2]; /*!< Use axis default title */ char * axis_title[2]; /*!< Title of axis */ int axis_title_x[2]; /*!< Position of the x axis title */ int axis_title_y[2]; /*!< Position of the y axis title */ gchar * axis_title_font[2]; /*!< Axis title font */ int scale[2]; /*!< Axis scale (linear or log) */ gboolean autoscale[2]; /*!< Autoscale */ gboolean show_grid[2]; /*!< Show/Hide axis grid */ gboolean show_axis[2]; /*!< Show/Hide axis bar */ double majt[2]; /*!< Value for major ticks */ int mint[2]; /*!< Number of minor ticks */ int ticks_io[2]; /*!< Ticks in or out / axis bar */ int ticks_pos[2]; /*!< Ticks position: normal, opposite, both */ int majt_size[2]; /*!< Majors ticks size (pixels) */ int mint_size[2]; /*!< Minors ticks size (pixels) */ int labels_pos[2]; /*!< Ticks label position: normal, opposite, both */ int labels_digit[2]; /*!< Significant digits for tick labels */ gchar * labels_font[2]; /*!< Ticks label font */ double labels_angle[2]; /*!< Ticks label angle */ int labels_shift_x[2]; /*!< Ticks position shift from x axis */ int labels_shift_y[2]; /*!< Ticks position shift from y axis */ // Legend gboolean show_legend; /*!< Show (1) /Hide (0) legend */ double legend_pos[2]; /*!< Position of the legend */ gchar * legend_font; /*!< Legend font */ ColRGBA legend_color; /*!< Legend color */ gboolean show_legend_box; /*!< Display legend box */ int legend_box_dash; /*!< Legend box line style */ ColRGBA legend_box_color; /*!< Legend box color */ double legend_box_thickness; /*!< Legend box line thickness */ // Title char * title; /*!< Title to display */ gboolean show_title; /*!< Show/Hide title */ gboolean default_title; /*!< Use default title */ double title_pos[2]; /*!< Position of the title */ gchar * title_font; /*!< Title font */ ColRGBA title_color; /*!< Title color */ // Frame gboolean show_frame; /*!< Show/Hide frame */ int frame_type; /*!< Frame type */ int frame_dash; /*!< Frame line style */ double frame_thickness; /*!< Frame line thickness */ ColRGBA frame_color; /*!< Frame color */ double frame_pos[2][2]; /*!< Frame 0 = x, 1 = y, 0 = min and 1 = max */ DataLayout * layout; /*!< The curve layout */ ExtraSets * extrac; /*!< Extra data set(s) added to graph */ cairo_surface_t * surface; /*!< The rendering surface */ int draw_id; /*!< Curve drawing order */ int bshift; /*!< Curve x shift for bar diagram */ gboolean displayed; char * cfile; gchar * path; /*!< Path for the toolbox tree */ int action_id; /*!< Unique Id to identify actions */ CurveState state; /*!< Curve state */ GSimpleActionGroup * action_group; }; /*! \def MAXDATC \brief Number of tabs for the description of the classical calculation */ #define MAXDATC 8 /*! \def MAXDATA \brief Number of tabs for the description of the classical force field */ #define MAXDATA 21 typedef struct classical_field classical_field; struct classical_field { gboolean prepare_file[2]; // Field and Config files gboolean afp[MAXDATC+MAXDATA]; int type; int energy_unit; int atom_init; int molecules; struct field_molecule * first_molecule; int nbody[5]; struct field_nth_body * first_body[5]; // Tersoff potential cross terms double *** cross; /*!< Tersoff potential cross termms */ int extern_fields; struct field_external * first_external; // Control file double * sys_opts; double * io_opts; double * ana_opts; double * elec_opts; double * vdw_opts; double * met_opts; double * equi_opts; int ensemble; int thermostat; double * thermo_opts; double * md_opts; double * out_opts; }; typedef struct thermostat thermostat; struct thermostat { int id; // For CPMD: 0 = none, 2 = controlled, 3 = nose // For CP2K: 0 = none, 2 = langevin, 3 = csvr, 4 = gle, 5 = nose int type; // For CPMD: 0 = global, 1 = local // For CP2K: 0 = global, 1 = local, 2 = molecule int sys; gboolean show; double params[4]; int natoms; int * list; thermostat * next; thermostat * prev; }; typedef struct dummy_atom dummy_atom; struct dummy_atom { // 0 = type1, 1 = type2, ... int id; int type; int pick[2]; gboolean show; double xyz[3]; int coord[4]; int natoms; int * list; int numv; int * vois; dummy_atom * next; dummy_atom * prev; }; typedef struct cpmd cpmd; struct cpmd { int calc_type; int restart[10]; int thermostats; thermostat * ions_thermostat; thermostat * elec_thermostat; int fixat; int * fixlist; int ** fixcoord; int dummies; dummy_atom * dummy; double default_opts[17]; double calc_opts[24]; int ** pp; gchar * info; }; typedef struct cp2k cp2k; struct cp2k { int input_type; double opts[42]; double extra_opts[3][4]; int thermostats; thermostat * ions_thermostat; int fixat[2]; int * fixlist[2]; int ** fixcoord[2]; gchar * files[5]; gchar *** spec_files; int ** spec_data; gchar * info; }; /*! \typedef molecule */ typedef struct molecule molecule; struct molecule { int id; /*!< Molecule id number */ int md; /*!< MD step */ int multiplicity; /*!< Multiplicity */ int * fragments; /*!< Fragments list */ int natoms; /*!< Number of atoms */ int nspec; /*!< Number of chemical species */ int * species; /*!< Number of atom by species */ }; /*! \typedef model \brief Data stucture to describe the topology */ typedef struct model model; struct model { int * mol_by_step; /*!< Num of mol by steps */ molecule ** mols; /*!< List of molecules by steps */ }; /*! \typedef element_data \brief element description used for the periodic table defined in 'w_periodic.c' */ typedef struct element_data element_data; struct element_data { gchar * lab; /*!< Label */ gchar * name; /*!< Name */ int Z; /*!< Atomic number */ float M; /*!< Atomic mass */ }; typedef struct chemical_data chemical_data; struct chemical_data { // 0 = Z, 1 = Mass, 2 = Radius, 3 = Neutrons, 4 = X-rays double ** chem_prop; /*!< chemical properties: \n 0 = Z, \n 1 = Mass, \n 2 = Radius, \n 3 = Neutrons, \n 4 = X-rays */ int * nsps; /*!< Number of atom(s) by chemical species */ int * formula; /*!< Chemical formula */ char ** label; /*!< Element label(s) */ char ** element; /*!< Element name(s) */ double ** cutoffs; /*!< partial cutoff(s) */ double grtotcutoff; /*!< Total cutoff */ }; /*! \typedef insertion_menu \brief Data structure for the insertion pop-up menu */ typedef struct insertion_menu insertion_menu; struct insertion_menu { gchar * type; gchar * object; double Z; int ats; }; /*! \typedef atom \brief The data structure for an atom */ typedef struct atom atom; struct atom { int id; /*!< The atom's id in the model */ // The id in the model int sp; /*!< The chemical species */ // The chemical species // The coordinates double x; /*!< x coordinate */ double y; /*!< y coordinate */ double z; /*!< z coordinate */ int numv; /*!< The number of neighbors */ // The number of neighbors int * vois; /*!< The list of neighbors */ // The list of neighbors // 0 = Total coordination // 1 = Partial coordination // 2 = Fragment // 3 = Molecule // 4 = Field object id int coord[5]; /*!< Coordination information: \n 0 = Total coordination, \n 1 = Partial coordination, \n 2 = Fragment, \n 3 = Molecule, \n 4 = Field object id */ // Coordination information // 0 = All // 1 = King's // 2 = Guttman's // 3 = Primitive // 4 = Strong int ** rings[5]; /*!< Ring statistics information: \n 0 = All, \n 1 = King's, \n 2 = Guttman, \n 3 = Primitive, \n 4 = Strong */ // Rings statistics information int ** chain; /*!< Chain statistics information */ int fid; /*!< Force field id */ int faid; /*!< Force field id in fragment */ gboolean show[2]; /*!< Show / Hide (0 = atom, 1 = clone) */ gboolean label[2]; /*!< Label / Unlabel (0 = atom, 1 = clone) */ gboolean pick[2]; /*!< Selected / Unselected (0 = atom, 1 = clone) */ gboolean cloned; /*!< Clone(s) ? (0 = no, 1 = yes) */ int style; /*!< Rendering style if not global */ atom * prev; atom * next; }; /*! \typedef project \brief The data structure for the 'atomes' project */ typedef struct project project; struct project { /* General parameters */ int id; /*!< Project ID */ char * name; /*!< Project name */ char * projfile; /*!< Name of the project file, if any */ char * coordfile; /*!< Name of atomic coordinates file, if any */ char * bondfile; /*!< Name of the file to ouput bonding information, if any */ gboolean newproj; /*!< New project ? yes / no */ gboolean run; /*!< Run this project ? yes / no */ gboolean dmtx; /*!< Trigger the calculation of the distance matrix ? yes / no */ int tfile; /*!< File format for the atomic coordinates, when imported */ int nspec; /*!< Number of chemical species */ int natomes; /*!< Number of atoms */ int dummies; /*!< Number of atoms including extra cells */ int steps; /*!< Number of MD steps */ int tunit; /*!< Time unit between steps, if MD */ chemical_data * chemistry; /*!< Chemical data */ coord_info * coord; /*!< Coordination(s) data */ cell_info cell; /*!< Periodicity data */ atom ** atoms; /*!< Atom list: atoms[steps][natomes] */ /* Analysis related parameters */ gboolean runok[NGRAPHS]; /*!< Analysis calculation availability */ gboolean initok[NGRAPHS]; /*!< Curves initizalization */ gboolean visok[NGRAPHS]; /*!< Analysis calculation confirmation */ int xcor; /*!< S(q) X-rays type of calculation: f(q) (1) or approximated (0) */ gboolean runc[3]; /*!< Trigger to run bonds, angles and molecules analysis */ // gr, sq, sk, gftt, bd, an, frag-mol, ch, sp, msd int numc[NGRAPHS]; /*!< Number of curves: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = frag-mol, \n 7 = ch, \n 8 = sp, \n 9 = msd */ int num_delta[NGRAPHS]; /*!< Number of x points: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = frag-mol, \n 7 = ch, \n 8 = sp, \n 9 = msd */ double calc_time[NGRAPHS]; /*!< Calculation time: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = frag-mol, \n 7 = ch, \n 8 = sp, \n 9 = msd */ double delta[NGRAPHS]; /*!< Discretization: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = frag-mol, \n 7 = ch, \n 8 = sp, \n 9 = msd */ double min[NGRAPHS]; /*!< Minimum x value: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = frag-mol, \n 7 = ch, \n 8 = sp, \n 9 = msd */ double max[NGRAPHS]; /*!< Maximum x value: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt, \n 4 = bd, \n 5 = an, \n 6 = frag-mol, \n 7 = ch, \n 8 = sp, \n 9 = msd */ // 0 = Search type, 1 = NUMA int rsearch[2]; /*!< Ring statistics parameters: 0 = Search type, 1 = Ring's allocation parameter NUMA */ // First col : search type (up to chains stat). Second col: search info // 0 = Initnode, 1 = RMAX, 2 = ABAB, 3 = Homo, 4 = Homo in DMTX, 5 = Done + Rings int rsparam[5][6]; /*!< Ring statistics parameters (first column the type of rings): \n 0 = Initial node(s) for the search: selected chemical species or all atoms, \n 1 = Maximum size of ring for the search Rmax, \n 2 = Search only for ABAB rings or not, \n 3 = Include Homopolar bond(s) in the analysis or not, \n 4 = Include homopolar bond(s) when calculating the distance matrix, \n 5 = Analysis completed and rings were found (yes / no) */ double rsdata[5][5]; /*!< Results for the ring statistics (first column the type of rings): \n 0 = Total number of ring(s) per MD step: RpS, \n 1 = Standard deviation for RpS, \n 2 = Number of ring(s) with size > Rmax that potentially exist per MD step: RpE, \n 3 = Standard deviation for RpE, \n 4 = calculation time for the analysis */ int csearch; /*!< Chain statistics allocation parameter: CNUMA */ // 0 = Initnode, 1 = AAAA, 2 = ABAB, 3 = Homo, 4 = 1221, 5 = RMAX, 6 = Done + Chains int csparam[7]; /*!< Chain statistics parameters: \n 0 = Initial node(s) for the search: selected chemical species or all atoms, \n 1 = Search only for AAAA chains or not, \n 2 = Search only for ABAB chains or not, \n 3 = Include Homopolar bond(s) in the analysis or not, \n 4 = Search only for 1-(2)n-1 chains, \n 5 = Maximum size of chain for the search Rmax 6 = Analysis completed and chains were found (yes / no) */ double csdata[2]; /*!< Results for the chain statistics: \n 0 = Total number of chains) per MD step: CpS, \n 1 = Standard deviation for CpS */ double fact[4]; /*!< Gaussian smoothing factors: \n 0 = gr, \n 1 = sq, \n 2 = sk, \n 3 = gftt */ double sk_advanced[2]; /*!< */ GtkTextBuffer * text_buffer[NITEMS]; /*!< The text buffer for the results of the calculations */ tint * idcc[NGRAPHS]; /*!< Pointers for the curves */ int numwid; /*!< total number of curves for this project */ Curve ** curves[NGRAPHS]; /*!< The curves, graph for the results of the calculations */ /* OpenGL related parameters */ gboolean initgl; /*!< Was OpenGL rendering initialized ? yes / no */ int tmp_pixels[2]; /*!< Saved size of the OpenGL window */ glwin * modelgl; /*!< The OpenGL widget */ /* Molecular dynamics related parameters */ model * modelfc; /*!< Description of the topology */ // MD input files classical_field * force_field[2]; /*!< Classical MD input files: \n 0 = DL_POLY, \n 1 = LAMMPS */ cpmd * cpmd_input[2]; /*!< CPMD input files: \n 0 = Ab-initio, \n 1= QM-MM */ cp2k * cp2k_input[2]; /*!< CP2K input files: \n 0 = Ab-initio, \n 1= QM-MM */ #ifdef DEBUG GtkWidget * pix_tab[3]; /*!< Not used anymore see 'cell_pixel.c' */ GtkWidget * pix_box; /*!< Not used anymore see 'cell_pixel.c' */ int pix[3]; /*!< Not used anymore see 'cell_pixel.c' */ int ** pixels; /*!< Not used anymore see 'cell_pixel.c' */ int actif_pix; /*!< Not used anymore see 'cell_pixel.c' */ #endif project * next; project * prev; }; typedef struct workspace workspace; struct workspace { project * first; project * last; }; extern gchar * edition_action_names[3]; extern gchar * analyze_action_names[9]; extern GSimpleAction * edition_actions[3]; extern GSimpleAction * analyze_actions[9]; extern void add_action (GSimpleAction * action); extern void remove_action (gchar * action_name); extern void remove_edition_actions (); extern void remove_edition_and_analyze_actions (); extern GtkApplication * AtomesApp; extern workspace workzone; extern project * proj; extern chemical_data * active_chem; extern coord_info * active_coord; extern cell_info * active_cell; extern box_info * active_box; extern image * active_image; extern glwin * active_glwin; extern project * active_project; extern project * opengl_project; extern element_data periodic_table_info[]; extern project * get_project_by_id (int p); extern void opengl_project_changed (int id); extern gboolean in_md_shaders (project * this_proj, int id); extern void recreate_all_shaders (glwin * view); extern gboolean is_atom_win_active (glwin * view); // extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data); extern void update_rings_menus (glwin * view); extern void clean_rings_data (int rid, glwin * view); extern void clean_chains_data (glwin * view); extern void clean_volumes_data (glwin * view); extern void initcutoffs (chemical_data * chem, int species); extern void cutoffsend (); extern void update_entry_int (GtkEntry * entry, int intval); extern void update_entry_double (GtkEntry * entry, double doubleval); extern void update_entry_long_double (GtkEntry * entry, double doubleval); extern void update_entry_text (GtkEntry * entry, gchar * text); extern double * xsk; extern gboolean * allocbool (int val); extern gboolean ** allocdbool (int xal, int yal); extern gboolean *** alloctbool (int xal, int yal, int zal); extern int * allocint (int val); extern int ** allocdint (int xal, int yal); extern int *** alloctint (int xal, int yal, int zal); extern int **** allocqint (int wal, int xal, int yal, int zal); extern float * allocfloat (int val); extern float ** allocdfloat (int xal, int yal); extern float *** alloctfloat (int xal, int yal, int zal); extern double * allocdouble (int val); extern double ** allocddouble (int xal, int yal); extern double *** alloctdouble (int xal, int yal, int zal); extern double **** allocqdouble (int wal, int xal, int yal, int zal); extern GLuint * allocgluint (int val); extern GLuint ** allocdgluint (int xal, int yal); extern GLfloat ** allocdGLfloat (int xal, int yal); extern gchar ** duplicate_strings (int num, gchar ** old_val); extern int * duplicate_int (int num, int * old_val); extern gboolean * duplicate_bool (int num, gboolean * old_val); extern float * duplicate_float (int num, float * old_val); extern double * duplicate_double (int num, double * old_val); extern ColRGBA * duplicate_color (int num, ColRGBA * col); extern void combo_text_append (GtkWidget * combo, gchar * text); extern void combo_text_prepend (GtkWidget * combo, gchar * text); extern GtkWidget * create_combo (); extern GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text); extern GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text); extern GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf); extern void text_view_set_monospace (GtkWidget * view); extern void gtk_label_align (GtkWidget * lab, float ax, float ay); extern gchar * prepare_for_title (gchar * init); extern void show_the_widgets (GtkWidget * widg); extern gboolean is_the_widget_visible (GtkWidget * widg); extern void widget_set_sensitive (GtkWidget * widg, gboolean sensitive); extern GtkWidget * new_gtk_window (); extern GtkWidget * dialogmodal (gchar * str, GtkWindow * parent); extern GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent); extern GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz); extern void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data); extern void resize_this_window (GtkWidget * window, int x, int y); extern GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); extern GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); extern void add_container_child (int type, GtkWidget * widg, GtkWidget * child); extern void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); extern void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); extern GtkWidget * create_vbox (int spacing); extern GtkWidget * create_hbox (int spacing); extern GtkWidget * dialog_get_content_area (GtkWidget * widg); extern void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos); extern GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y); extern GtkWidget * create_layout (int x, int y); #ifdef GTK4 extern void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data); extern G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data); extern void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data); extern G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data); extern G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data); extern GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); extern void pop_menu_at_pointer (GtkWidget * pop, double x, double y); GListModel * file_chooser_get_file_names (GtkFileChooser * chooser); extern void update_menu_bar (glwin * view); #else extern void update_chains_menus (glwin * view); extern G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data); extern GtkWidget * create_menu_item (gboolean add_mnemo, gchar * action); extern GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status); extern GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu); extern void add_menu_separator (GtkWidget * menu); extern G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data); extern G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data); extern GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); extern void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event); GSList * file_chooser_get_file_names (GtkFileChooser * chooser); #endif extern const gchar * entry_get_text (GtkEntry * entry); extern GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data); extern GtkWidget * stock_image (const gchar * stock_id); extern void set_image_from_icon_name (GtkWidget * widg, gchar * icon); extern GtkWidget * create_image_from_data (int format, gpointer item_image); extern GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status); extern GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod); extern GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay); extern GtkWidget * color_button (ColRGBA col, gboolean alpha, int dimx, int dimy, GCallback handler, gpointer data); extern GtkWidget * font_button (gchar * font, int dimx, int dimy, GCallback handler, gpointer data); extern GtkWidget * spin_button (GCallback handler, double value, double start, double end, double step, int digits, int dim, gpointer data); extern GtkWidget * check_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); extern GtkWidget * radio_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); extern GtkWidget * create_button (gchar * text, int image_format, gchar * image, int dimx, int dimy, int relief, GCallback handler, gpointer data); extern ColRGBA gdkrgba_to_rgba (GdkRGBA colgdk); extern GdkRGBA colrgba_togtkrgba (ColRGBA col); extern ColRGBA get_button_color (GtkColorChooser * colob); extern ColRGBA get_window_color (GtkWidget * color_win); extern void set_color_chooser_color (GtkWidget * color_win, ColRGBA col); extern void set_renderer_color (int tocol, GtkCellRenderer * renderer, ColRGBA col); extern void button_set_image (GtkButton * but, gchar * text, int format, gpointer image); extern GtkWidget * abox (GtkWidget * box, char * lab, int vspace); extern GtkWidget * bbox (GtkWidget * box, char * lab); extern GtkWidget * cbox (GtkWidget * box, char * lab); extern GtkWidget * fbox (GtkWidget * box, char * lab); extern GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow); extern GtkWidget * create_expander (gchar * name, gchar * file_img); extern GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz); extern void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, const gchar * stat); extern void append_menu_item (GMenu * menu, const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus); extern void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu); extern GtkWidget * destroy_this_widget (GtkWidget * widg); extern void destroy_this_dialog (GtkDialog * dialog); extern void destroy_this_native_dialog (GtkNativeDialog * dialog); extern G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data); extern void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data); extern gchar * file_chooser_get_file_name (GtkFileChooser * chooser); extern gchar * file_chooser_get_current_folder (GtkFileChooser * chooser); extern gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename); extern void file_chooser_set_current_folder (GtkFileChooser * chooser); extern GtkWidget * get_top_level (GtkWidget * widg); extern void provide_gtk_css (gchar * css); extern double get_calc_time (struct timespec start, struct timespec stop); extern gchar * calculation_time (gboolean modelv, double ctime); typedef struct { GCallback handler; gpointer data; } focus_data; #endif // GLOBAL_H_ Atomes-GNU-1.1.14/src/gui/000077500000000000000000000000001457665371200150505ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/gui/bdcall.c000066400000000000000000001165641457665371200164520ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file bdcall.c * @short Callbacks for the bond properties calculation dialog * @author Sébastien Le Roux */ /* * This file: 'bdcall.c' * * Contains: * - The callbacks for the bond properties calculation dialog * * List of functions: int * save_color_map (glwin * view); gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); void restore_color_map (glwin * view, int * colm); void recup_dmin_dmax_ (double * min, double * max); void initbd (); void initang (); void initcutoffs (chemical_data * chem, int species); void cutoffsend (); void prep_ogl_bonds (); void update_ang_view (project * this_proj); void update_glwin_after_bonds (int bonding, int * colm); void coordination_info (int sp, double sac, double ssac[active_project -> nspec]); void coordout_ (int * sid, double * sac, double ssac[active_project -> nspec], int * totgsa); void env_info (int sp, int totgsa, int numgsa[totgsa]); void update_angle_view (project * this_proj); void envout_ (int * sid, int * totgsa, int numgsa[* totgsa]); G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "dlp_field.h" #include "glview.h" #include "initcoord.h" extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); extern void clean_coord_window (project * this_proj); extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); /*! \fn int * save_color_map (glwin * view) \brief save atoms and polyhedra color maps \param view the target glwin */ int * save_color_map (glwin * view) { int i; int * colm = allocint(2); for (i=0; i<2; i++) colm[i] = view -> anim -> last -> img -> color_map[i]; return colm; } /*! \fn void restore_color_map (glwin * view, int * colm) \brief restore saved color maps \param view the target glwin \param colm the saved color map values */ void restore_color_map (glwin * view, int * colm) { #ifdef GTK3 // GTK3 Menu Action To Check int i, j; gboolean was_input = reading_input; reading_input = TRUE; for (i=0; i<2; i++) { if ((i == 3 || i == 4) && ! view -> adv_bonding[i-3]) { j = i*ATOM_MAPS; } else { j = i*ATOM_MAPS + colm[i]; } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); set_color_map (view -> color_styles[j], & view -> colorp[j][0]); } reading_input = was_input; #endif } /*! \fn void recup_dmin_dmax_ (double * min, double * max) \brief retrieve min and max inter-atomic distances from Fortran \param min the smallest inter-atomic distance \param max the highest inter-atomic distance */ void recup_dmin_dmax_ (double * min, double * max) { active_project -> min[BD] = * min; active_project -> max[BD] = * max; } /*! \fn void initbd () \brief initialize the curve widgets for the bond distribution */ void initbd () { int i, j, k; k = 0; for ( i = 0 ; i < active_project -> nspec ; i++ ) { for ( j = 0 ; j < active_project -> nspec ; j++ ) { active_project -> curves[BD][k] -> name = g_strdup_printf("Dij [%s-%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; } } addcurwidgets (activep, BD, 0); active_project -> initok[BD] = TRUE; } /*! \fn void initang () \brief initialize the curve widgets for the angle distribution */ void initang () { int h, i, j, k, l; h=0; for ( i = 0 ; i < active_project -> nspec ; i++ ) { for ( j = 0 ; j < active_project -> nspec ; j++ ) { for ( k = 0 ; k < active_project -> nspec ; k++ ) { active_project -> curves[AN][h] -> name = g_strdup_printf("Angles [%s-%s-%s]", active_chem -> label[i], active_chem -> label[j], active_chem -> label[k]); h=h+1; } } } for ( i = 0 ; i < active_project -> nspec ; i++ ) { for ( j = 0 ; j < active_project -> nspec ; j++ ) { for ( k = 0 ; k < active_project -> nspec ; k++ ) { for ( l = 0 ; l < active_project -> nspec ; l++ ) { active_project -> curves[AN][h] -> name = g_strdup_printf("Dihedral [%s-%s-%s-%s]", active_chem -> label[i], active_chem -> label[j], active_chem -> label[k], active_chem -> label[l]); h=h+1; } } } } addcurwidgets (activep, AN, 0); active_project -> initok[AN] = TRUE; } /*! \fn void initcutoffs (chemical_data * chem, int species) \brief initialize bond cutoffs \param chem the target chemical data \param species the number of chemical species */ void initcutoffs (chemical_data * chem, int species) { int i, j; for (i = 0; i < species; i++) { for (j = 0; j < species; j++) { if (chem -> cutoffs[i][j] == 0.0) { chem -> cutoffs[i][j] = chem -> chem_prop[CHEM_R][i] + chem -> chem_prop[CHEM_R][j]; chem -> cutoffs[i][j] = max(MINCUT, chem -> cutoffs[i][j]); if (chem -> chem_prop[CHEM_Z][i] == 1.0 && chem -> chem_prop[CHEM_Z][j] == 6.0) chem -> cutoffs[i][j] = 1.2; if (chem -> chem_prop[CHEM_Z][j] == 1.0 && chem -> chem_prop[CHEM_Z][i] == 6.0) chem -> cutoffs[j][i] = 1.2; if (chem -> chem_prop[CHEM_Z][i] == 1.0 && chem -> chem_prop[CHEM_Z][j] == 8.0) chem -> cutoffs[i][j] = 1.2; if (chem -> chem_prop[CHEM_Z][j] == 1.0 && chem -> chem_prop[CHEM_Z][i] == 8.0) chem -> cutoffs[j][i] = 1.2; } } if (chem -> chem_prop[CHEM_Z][i] == 1.0) chem -> cutoffs[i][i] = 0.5; } if (chem -> grtotcutoff == 0.0) { for (i = 0; i < species; i++) { chem -> grtotcutoff += chem -> chem_prop[CHEM_R][i]; } chem -> grtotcutoff *= 2.0; chem -> grtotcutoff /= species; chem -> grtotcutoff = max(MINCUT, chem -> grtotcutoff); } } /*! \fn void cutoffsend () \brief send cutoffs to Fortran90 */ void cutoffsend () { int i, j; if (active_chem -> cutoffs == NULL) { // g_debug ("alloc cuttofs !!!"); active_chem -> cutoffs = allocddouble (active_project -> nspec, active_project -> nspec); } for ( i=0; i < active_project -> nspec; i++) { for (j=0; j < active_project -> nspec; j++) { // g_debug ("cut[%d,%d]= %f", i+1, j+1, active_chem -> cutoffs[i][j]); sendcuts_ (& i, & j, & active_chem -> cutoffs[i][j]); } } i = active_project -> nspec; // g_debug ("totcut= %f", active_chem -> grtotcutoff); sendcuts_ (& i, & i, & active_chem -> grtotcutoff); } /*! \fn void prep_ogl_bonds () \brief initialize bond pointers */ void prep_ogl_bonds () { int i; active_glwin -> bonding = FALSE; #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i color_styles[i], 0); } for (i=1; i ogl_coord[i], 0); } #endif active_image -> color_map[0] = 0; active_image -> color_map[1] = 0; for (i=0; i<4; i++) { if (active_glwin -> gcid[i]) g_free (active_glwin -> gcid[i]); active_glwin -> gcid[i] = NULL; active_coord -> totcoord[i] = 0; } if (! active_project -> dmtx) { active_glwin -> allbonds[0] = 0; active_glwin -> allbonds[1] = 0; } for (i=0; i<2; i++) active_glwin -> adv_bonding[i] = FALSE; } /*! \fn gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb) \brief compute distance matrix \param widg the GtkWidget sending the signal, if any \param calc the calculation that requires the analysis \param up_ngb update neighbors information (0 = no, 1 = yes) */ gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb) { int i, j, k; gboolean res; if (up_ngb) { for (i=0; i < active_project -> steps; i++) { for (j=0; j < active_project -> natomes; j++) { active_project -> atoms[i][j].cloned = FALSE; if (active_project -> atoms[i][j].numv) { active_project -> atoms[i][j].numv = 0; if (active_project -> atoms[i][j].vois) { g_free (active_project -> atoms[i][j].vois); active_project -> atoms[i][j].vois = NULL; } } } } } prepostcalc (widg, FALSE, -1, (active_project -> steps > 1) ? 1 : 0, opac); i = j = 0; k = up_ngb;; if (calc > 3 && calc < 6) i = 1; if (calc > 0 && calc < 6) { j = active_project -> rsparam[calc-1][4]; } else if (calc == 6) { j = active_project -> csparam[3]; } #ifdef DEBUG g_debug ("Run dmtx Prim= %d, NOHP= %d, UPDATE= %d", i, j, k); #endif clock_gettime (CLOCK_MONOTONIC, & start_time); res = rundmtx_ (& i, & j, & k); prepostcalc (widg, TRUE, -1, 0, 1.0); clock_gettime (CLOCK_MONOTONIC, & stop_time); g_print ("Time to calculate distance matrix: %s\n", calculation_time(FALSE, get_calc_time (start_time, stop_time))); return res; } /*! \fn void update_ang_view (project * this_proj) \brief update angle calculation text buffer \param this_proj the target project */ void update_ang_view (project * this_proj) { gchar * str; if (this_proj -> text_buffer[AN+OT] == NULL) this_proj -> text_buffer[AN+OT] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[AN+OT]); print_info ("\n\nAngles and diherdrals distribution(s)\n\n", "heading", this_proj -> text_buffer[AN+OT]); print_info ("Calculation details:\n\n", NULL, this_proj -> text_buffer[AN+OT]); print_info ("\tAngular space discretization:\n\n", NULL, this_proj -> text_buffer[AN+OT]); print_info ("\t - Number of δ° steps: ", "bold", this_proj -> text_buffer[AN+OT]); str = g_strdup_printf ("%d", this_proj -> num_delta[AN]); print_info (str, "bold_blue", this_proj -> text_buffer[AN+OT]); g_free (str); print_info ("\n\n\t between 0.0 and 180.0", NULL, this_proj -> text_buffer[AN+OT]); print_info (" °\n\n\t - δ° = ", "bold", this_proj -> text_buffer[AN+OT]); str = g_strdup_printf ("%f", this_proj -> delta[AN]); print_info (str, "bold_blue", this_proj -> text_buffer[AN+OT]); g_free (str); print_info (" °\n", "bold", this_proj -> text_buffer[AN+OT]); print_info (calculation_time(TRUE, this_proj -> calc_time[AN]), NULL, this_proj -> text_buffer[AN+OT]); } /*! \fn void update_glwin_after_bonds (int bonding, int * colm) \brief update glwin menus after bond calculation \param bonding calculation result (0 = failure, 1 = success) \param colm saved color map to restore */ void update_glwin_after_bonds (int bonding, int * colm) { active_glwin -> bonding = bonding; #ifdef GTK3 // GTK3 Menu Action To Check if (active_glwin -> init) { prep_all_coord_menus (active_glwin); set_advanced_bonding_menus (active_glwin); widget_set_sensitive (active_glwin -> ogl_clones[0], active_glwin -> allbonds[1]); } #endif int shaders[5] = {ATOMS, BONDS, POLYS, RINGS, SELEC}; re_create_md_shaders (5, shaders, active_project); active_glwin -> create_shaders[MEASU] = TRUE; active_glwin -> create_shaders[PICKS] = TRUE; clean_coord_window (active_project); if (active_glwin -> init) { restore_color_map (active_glwin, colm); g_free (colm); } int i, j; for (i=2; i<7; i++) { if (i != 5) { if (active_glwin -> search_widg[i]) { if (active_glwin -> search_widg[i] -> filter_box) { if (GTK_IS_WIDGET(active_glwin -> search_widg[i] -> filter_box)) { if (active_glwin -> atom_win -> adv_bonding[1] && ! active_glwin -> adv_bonding[1]) { gtk_combo_box_text_remove ((GtkComboBoxText *) active_glwin -> search_widg[i] -> filter_box, 4); } else if (! active_glwin -> atom_win -> adv_bonding[0] && active_glwin -> adv_bonding[0]) { combo_text_append (active_glwin -> search_widg[i] -> filter_box, "Fragment"); } if (active_glwin -> atom_win -> adv_bonding[0] && ! active_glwin -> adv_bonding[0]) { gtk_combo_box_text_remove ((GtkComboBoxText *) active_glwin -> search_widg[i] -> filter_box, 3); } else if (! active_glwin -> atom_win -> adv_bonding[1] && active_glwin -> adv_bonding[1]) { combo_text_append (active_glwin -> search_widg[i] -> filter_box, "Molecule"); } j = active_glwin -> search_widg[i] -> object + active_glwin -> search_widg[i] -> filter; if (j == 4) { set_filter_changed (GTK_COMBO_BOX(active_glwin -> search_widg[i] -> filter_box), active_glwin -> search_widg[i]); } } } } } } if (active_glwin -> atom_win) { for (i=0; i<2; i++) active_glwin -> atom_win -> adv_bonding[i] = active_glwin -> adv_bonding[i]; } clean_volumes_data (active_glwin); #ifdef GTK4 update_menu_bar (active_glwin); #endif update (active_glwin); } /*! \fn G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data) \brief compute bonding properties \param widg the GtkWidget sending the signal, if any \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data) { int j, k, l, m; int statusb = 0; int bonding = 0; int * colm = NULL; gboolean vis_bd = active_project -> visok[BD]; if (widg) bonds_update = 1; bonding = (active_project -> runc[0]) ? 1 : 0; if (! bonds_update && active_project -> runc[0]) bonding = 0; if (active_glwin) { if (active_glwin -> init) colm = save_color_map (active_glwin); prep_ogl_bonds (); } cutoffsend (); if (! active_project -> dmtx) active_project -> dmtx = run_distance_matrix (widg, 0, 1); if (active_project -> dmtx) { //if (bonding && active_project -> steps > 1) statusb = 1; if (bonds_update || active_project -> runc[0] || active_project -> runc[2]) { if (! active_project -> initok[BD] && bonding) initbd (); if (active_project -> runc[0]) clean_curves_data (BD, 0, active_project -> numc[BD]); prepostcalc (widg, FALSE, BD, statusb, opac); l = 0; m = 1; if (active_project -> bondfile != NULL) { l = 1; m = strlen (active_project -> bondfile); } // debug_chemical_information (active_project); active_project -> delta[BD] = (active_project -> max[BD]-active_project -> min[BD]) / active_project -> num_delta[BD]; clock_gettime (CLOCK_MONOTONIC, & start_time); j = bonding_ (& m, & l, & bonding, & active_project -> num_delta[BD], & active_project -> min[BD], & active_project -> delta[BD], active_project -> bondfile); clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> calc_time[BD] = get_calc_time (start_time, stop_time); active_project -> runok[SP] = j; prepostcalc (widg, bonding, BD, (bonding) ? j : vis_bd, 1.0); if (! j) { show_error ("Unexpected error when calculating bond properties", 0, (widg) ? widg : MainWindow); } else { if (active_glwin -> init) print_info (calculation_time(TRUE, active_project -> calc_time[BD]), NULL, active_project -> text_buffer[BD+OT]); bonding = 1; if (frag_update) { prepostcalc (widg, FALSE, -1, statusb, opac); k = active_glwin -> allbonds[0] + active_glwin -> allbonds[1]; clock_gettime (CLOCK_MONOTONIC, & start_time); if (! molecules_ (& mol_update, & k)) { show_error ("Unexpected error when looking for isolated fragment(s) and molecule(s)", 0, (widg) ? widg : MainWindow); if (active_glwin) { for (k=0; k<2; k++) { active_glwin -> adv_bonding[k] = FALSE; if (k) { for (l=0; l<2; l++) { if (active_project -> force_field[l]) { g_free (active_project -> force_field[l]); active_project -> force_field[l] = NULL; } } } active_coord -> totcoord[k+2] = 0; } } } else { if (active_glwin) { active_glwin -> adv_bonding[0] = frag_update; active_glwin -> adv_bonding[1] = mol_update; } } clock_gettime (CLOCK_MONOTONIC, & stop_time); // Using the RI slot to store Frag-mol calc time. active_project -> calc_time[RI] = get_calc_time (start_time, stop_time); active_project_changed (activep); prepostcalc (widg, TRUE, -1, statusb, 1.0); if (widg != NULL) gtk_widget_show (curvetoolbox); } else { active_glwin -> adv_bonding[0] = frag_update; active_glwin -> adv_bonding[1] = mol_update; } } } if (active_project -> runc[1]) { if (! active_project -> initok[AN]) initang (); clean_curves_data (AN, 0, active_project -> numc[AN]); prepostcalc (widg, FALSE, AN, statusb, opac); active_project -> delta[AN] = 180.0 / active_project -> num_delta[AN]; clock_gettime (CLOCK_MONOTONIC, & start_time); j = bond_angles_ (& active_project -> num_delta[AN]); if (! j) { show_error ("Unexpected error when calculating the bond angles distribution", 0, (widg) ? widg : MainWindow); } else { j = bond_diedrals_ (& active_project -> num_delta[AN]); clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> calc_time[AN] = get_calc_time (start_time, stop_time); if (! j) { show_error ("Unexpected error when calculating the dihedral angles distribution", 0, (widg) ? widg : MainWindow); } else { if (widg != NULL) gtk_widget_show (curvetoolbox); if (! active_project -> runc[0]) update_ang_view (active_project); } } prepostcalc (widg, TRUE, AN, j, 1.0); } } else { show_error ("The nearest neighbors table calculation has failed", 0, (widg) ? widg : MainWindow); bonding = 0; active_glwin -> adv_bonding[0] = 0; active_glwin -> adv_bonding[1] = 0; } if (active_glwin && bonds_update) update_glwin_after_bonds (bonding, colm); fill_tool_model (); if (widg) { gtk_widget_show (curvetoolbox); } else { for (j=0; j<3; j++) active_project -> runc[j] = FALSE; } bonds_update = frag_update = mol_update = 0; } double bdtc; /*! \fn void coordination_info (int sp, double sac, double ssac[active_project->nspec]) \brief print out coordination information \param sp the target chemical species \param sac total coordination number for the target species \param ssac partial coordination number(s) for the target species */ void coordination_info (int sp, double sac, double ssac[active_project -> nspec]) { int j; gchar * str; gchar * spr; if (active_project -> text_buffer[BD+OT] == NULL) active_project -> text_buffer[BD+OT] = add_buffer (NULL, NULL, NULL); view_buffer (active_project -> text_buffer[BD+OT]); if (sp == 0) { print_info ("\n\nBond properties\n\n", "heading", active_project -> text_buffer[BD+OT]); print_info ("Existence of a bond between two atoms i (α) and j (β)\n" "if the two following conditions are verified:\n\n" "\t1) D", "italic", active_project -> text_buffer[BD+OT]); print_info ("ij", "sub_italic", active_project -> text_buffer[BD+OT]); str = g_strdup_printf (" < first minimum of the total RDF (%9.5f Å )\n\t2) D", active_chem -> grtotcutoff); print_info (str, "italic", active_project -> text_buffer[BD+OT]); g_free (str); print_info ("ij", "sub_italic", active_project -> text_buffer[BD+OT]); print_info (" < r", "italic", active_project -> text_buffer[BD+OT]); print_info ("cut", "sub_italic", active_project -> text_buffer[BD+OT]); print_info ("(α,β)\n", "italic", active_project -> text_buffer[BD+OT]); bdtc = sac * active_chem -> nsps[sp]; } else { bdtc += sac * active_chem -> nsps[sp]; } print_info ("\nCoordination numbers: ", "italic", active_project -> text_buffer[BD+OT]); spr = g_strdup_printf("%s", textcolor(sp)); print_info (active_chem -> element[sp], spr, active_project -> text_buffer[BD+OT]); str = g_strdup_printf ("\n\n\t%s", exact_name(active_chem -> label[sp])); print_info (str, spr, active_project -> text_buffer[BD+OT]); g_free (str); print_info (" (total)=\t", "italic", active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%9.5lf\n", sac); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); for ( j=0 ; j < active_project -> nspec ; j++ ) { str = g_strdup_printf ("\t%s(", active_chem -> label[sp]); print_info (str, spr, active_project -> text_buffer[BD+OT]); g_free (str); str = g_strdup_printf("%s", textcolor(j)); print_info (active_chem -> label[j], str, active_project -> text_buffer[BD+OT]); print_info (")", spr, active_project -> text_buffer[BD+OT]); print_info ("[r", NULL, active_project -> text_buffer[BD+OT]); print_info ("cut", "sub", active_project -> text_buffer[BD+OT]); print_info ("(", NULL, active_project -> text_buffer[BD+OT]); print_info (active_chem -> label[sp], spr, active_project -> text_buffer[BD+OT]); print_info (",", NULL, active_project -> text_buffer[BD+OT]); print_info (active_chem -> label[j], str, active_project -> text_buffer[BD+OT]); g_free (str); print_info (")= ", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf ("%9.5lf Å", active_chem -> cutoffs[sp][j]); print_info (str, NULL, active_project -> text_buffer[BD+OT]); g_free (str); print_info ("] = ", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf ("%9.5lf", ssac[j]); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); print_info ("\t or \t", NULL, active_project -> text_buffer[BD+OT]); if (sac != 0.0) { str = g_strdup_printf ("%7.3lf", ssac[j]*100.0/(sac)); } else { str = g_strdup_printf ("%7.3lf", 0.0); } print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); print_info (" %\n", NULL, active_project -> text_buffer[BD+OT]); } g_free (spr); if (sp == active_project -> nspec-1) { print_info ("\nAverage coordination number: ", "italic", active_project -> text_buffer[BD+OT]); str = g_strdup_printf ("%9.5lf\n", bdtc / active_project -> natomes); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } } /*! \fn void coordout_ (int * sid, double * sac, double ssac[active_project->nspec], int * totgsa) \brief retrieve partial geometry information from Fortran90 \param sid the target chemical species \param sac total coordination number for the target species \param ssac partial coordination number(s) for the target species \param totgsa the total number of partial coordination for the target chemical species */ void coordout_ (int * sid, double * sac, double ssac[active_project -> nspec], int * totgsa) { active_coord -> ntg[1][* sid] = * totgsa; if (bonds_update) coordination_info (* sid, * sac, ssac); } /*void wccp_out_ (double cp[5]) { double x, y, z; gchar * str; print_info ("Warren-Cowley chemical order parameters:\n\n", "italic", active_project -> text_buffer[BD+OT]); print_info ("\tα", NULL, active_project -> text_buffer[BD+OT]); print_info ("w", "sub", active_project -> text_buffer[BD+OT]); print_info ("=\t", NULL, active_project -> text_buffer[BD+OT]); x = 0.0; x += (cp[1] * active_chem -> nsps[0])/active_project -> natomes; x += (cp[0] * active_chem -> nsps[1])/active_project -> natomes; y = 1.0 - cp[2] / (cp[3] * x); str = g_strdup_printf ("%f\n", y); print_info (str, "bold", active_project -> text_buffer[BD+OT]); if ((cp[0] * active_chem -> nsps[0])/active_project -> natomes > (cp[1] * active_chem -> nsps[1])/active_project -> natomes) { z = 1.0 - cp[0] / (active_chem -> nsps[1] /(active_project -> natomes * y)); } else { z = 1.0 - cp[1] / (active_chem -> nsps[0] /(active_project -> natomes * y)); } print_info ("\tα", NULL, active_project -> text_buffer[BD+OT]); print_info ("w", "sub", active_project -> text_buffer[BD+OT]); print_info ("0", "sup", active_project -> text_buffer[BD+OT]); print_info ("=\t", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf ("%f\n", y/z); print_info (str, "bold", active_project -> text_buffer[BD+OT]); print_info ("Cargill-Spaepen chemical order parameters:\n\n", "italic", active_project -> text_buffer[BD+OT]); // ρ print_info ("\tη=\t", NULL, active_project -> text_buffer[BD+OT]); x = cp[2] * cp[4] / (active_chem -> nsps[0]/active_project -> natomes * cp[0] * cp[1]) - 1.0; str = g_strdup_printf ("%f\n", x); print_info (str, "bold", active_project -> text_buffer[BD+OT]); if ((cp[0] * active_chem -> nsps[0])/active_project -> natomes > (cp[1] * active_chem -> nsps[1])/active_project -> natomes) { z = ; } else { z = ; } print_info ("\tη", NULL, active_project -> text_buffer[BD+OT]); print_info ("0", "sup", active_project -> text_buffer[BD+OT]); print_info ("=\t", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf ("%f\n", y/z); print_info (str, "bold", active_project -> text_buffer[BD+OT]); }*/ /*! \fn void env_info (int sp, int totgsa, int numgsa[totgsa]) \brief output environment information for target chemical species in text buffer \param sp the target chemcial species \param totgsa the total number of partial coordination(s) \param numgsa the number of coordination(s) by coordination type */ void env_info (int sp, int totgsa, int numgsa[totgsa]) { int i, j, k; int natpg[totgsa]; gchar * str, * spr, * snr; int tgsa; print_info ("\nEnvironments for ", "italic", active_project -> text_buffer[BD+OT]); spr = g_strdup_printf ("%s", textcolor(sp)); str = g_strdup_printf ("%s", exact_name(active_chem -> label[sp])); print_info (str, spr, active_project -> text_buffer[BD+OT]); g_free (spr); g_free (str); print_info (" atoms:\n\n", "italic", active_project -> text_buffer[BD+OT]); print_info ("\t \tN(tot)", NULL, active_project -> text_buffer[BD+OT]); for ( j=0 ; j < active_project -> nspec ; j++ ) { snr = g_strdup_printf ("%s", exact_name(active_chem -> label[j])); i = 6 - strlen (snr); for (k=0; k text_buffer[BD+OT]); str = g_strdup_printf ("N(%s)", snr); spr = g_strdup_printf ("%s", textcolor(j)); print_info (str, spr, active_project -> text_buffer[BD+OT]); g_free (spr); g_free (str); g_free (snr); } print_info ("\tNumber\t\t or \tPercent\n\n", NULL, active_project -> text_buffer[BD+OT]); tgsa = 0; for ( i=0 ; i < totgsa; i++ ) { tgsa += numgsa[i]; } for ( i=0 ; i < totgsa; i++ ) { natpg[i] = 0; for ( j=0 ; j < active_project -> nspec ; j++ ) { k = active_coord -> partial_geo[sp][i][j]; natpg[i] += k; } print_info ("\t", NULL, active_project -> text_buffer[BD+OT]); spr = g_strdup_printf ("%s", env_name (active_project, i, sp, 1, active_project -> text_buffer[BD+OT])); g_free (spr); spr = g_strdup_printf ("%s", exact_name(env_name (active_project, i, sp, 0, NULL))); k = 12 - strlen (spr); g_free (spr); for (j=0; j text_buffer[BD+OT]); print_info ("\t", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf ("%3d ", natpg[i]); print_info (str, NULL, active_project -> text_buffer[BD+OT]); for ( j=0 ; j < active_project -> nspec ; j++ ) { k = active_coord -> partial_geo[sp][i][j]; str = g_strdup_printf(" %7d", k); spr = g_strdup_printf ("%s", textcolor(j)); print_info (str, spr, active_project -> text_buffer[BD+OT]); g_free (str); g_free (spr); } str = g_strdup_printf(" %16.5lf", (1.0*numgsa[i])/active_project -> steps); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); print_info ("\t or \t", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf ("%7.3lf ", 100.0*numgsa[i]/tgsa); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); print_info ("%\n", "bold", active_project -> text_buffer[BD+OT]); } } /*! \fn void update_angle_view (project * this_proj) \brief update angle calculation information text buffer \param this_proj the target project */ void update_angle_view (project * this_proj) { gchar * str; if (this_proj -> text_buffer[AN+OT] == NULL) this_proj -> text_buffer[AN+OT] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[AN+OT]); print_info ("\n\nAngle distribution function(s)\n\n", "heading", this_proj -> text_buffer[AN+OT]); print_info ("\tAngle space discretization:\n\n", NULL, this_proj -> text_buffer[AN+OT]); print_info ("\t - Number of δ° steps: ", "bold", this_proj -> text_buffer[AN+OT]); str = g_strdup_printf ("%d", this_proj -> num_delta[AN]); print_info (str, "bold_blue", this_proj -> text_buffer[AN+OT]); g_free (str); print_info ("\n\n\t between 0.0 and 180.0°\n", NULL, this_proj -> text_buffer[AN+OT]); } /*! \fn void envout_ (int * sid, int * totgsa, int numgsa[*totgsa]) \brief retrieve environment information for target chemical species from Fortran \param sid the target chemical speceis \param totgsa the total number of partial coordination(s) \param numgsa the number of coordination(s) by coordination type */ void envout_ (int * sid, int * totgsa, int numgsa[* totgsa]) { /* Send info for OpenGL */ if (bonds_update) env_info (* sid, * totgsa, numgsa); } void tetraout_ (int * sid, double eda[active_project -> nspec], double cda[active_project -> nspec], double dda[active_project -> nspec], double tepa[active_project -> nspec], double tcpa[active_project -> nspec], double tdda[active_project -> nspec], double atd[active_project -> nspec], double etd[active_project -> nspec]) { int i; gboolean print; gchar * str; print=FALSE; for ( i=0 ; i < active_project -> nspec ; i++) { if (eda[i] != 0.0 || cda[i] != 0.0) print=TRUE; } if (print && bonds_update) { print_info ("\nNumber and proportion of tetrahedra links for ", "italic", active_project -> text_buffer[BD+OT]); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> text_buffer[BD+OT]); print_info (" atoms:\n\n", "italic", active_project -> text_buffer[BD+OT]); for ( i=0 ; i < active_project -> nspec ; i++ ) { if (eda[i] != 0.0 || cda[i] != 0.0) { print_info ("\t- ", NULL, active_project -> text_buffer[BD+OT]); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> text_buffer[BD+OT]); print_info ("(", NULL, active_project -> text_buffer[BD+OT]); print_info (exact_name(active_chem -> label[i]), textcolor(i), active_project -> text_buffer[BD+OT]); print_info (")", NULL, active_project -> text_buffer[BD+OT]); print_info ("4", "sub", active_project -> text_buffer[BD+OT]); print_info (" tetrahedra:\n", NULL, active_project -> text_buffer[BD+OT]); if (eda[i] != 0.0) { print_info ("\t\t Edge-sharing: ", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%11.5lf", eda[i]/active_project -> steps); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", tepa[i]); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info ("\t or \t", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%7.3lf", 100*eda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 100*tepa[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info (" %\n", "bold", active_project -> text_buffer[BD+OT]); } if (cda[i] != 0.0) { print_info ("\t\t Corner-sharing: ", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%11.5lf", cda[i]/active_project -> steps); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", tcpa[i]); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info ("\t or \t", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%7.3lf", 100*cda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 100*tcpa[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info (" %\n", "bold", active_project -> text_buffer[BD+OT]); } if (dda[i] != 0.0) { print_info ("\t\t with the following bond defects: ", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%11.5lf", dda[i]/active_project -> steps); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", tdda[i]); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info ("\t or \t", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%7.3lf", 100*dda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 100*tdda[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info (" %\n", "bold", active_project -> text_buffer[BD+OT]); } } } print_info ("\nNumber and proportion of tetrahedra units for ", "italic", active_project -> text_buffer[BD+OT]); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> text_buffer[BD+OT]); print_info (" atoms:\n\n", "italic", active_project -> text_buffer[BD+OT]); for ( i=0 ; i < active_project -> nspec ; i++ ) { if (atd[i] != 0.0) { print_info ("\t- ", NULL, active_project -> text_buffer[BD+OT]); print_info (exact_name(active_chem -> label[* sid]), textcolor(* sid), active_project -> text_buffer[BD+OT]); print_info ("(", NULL, active_project -> text_buffer[BD+OT]); print_info (exact_name(active_chem -> label[i]), textcolor(i), active_project -> text_buffer[BD+OT]); print_info (")", NULL, active_project -> text_buffer[BD+OT]); print_info ("4", "sub", active_project -> text_buffer[BD+OT]); print_info (" tetrahedra:\n", NULL, active_project -> text_buffer[BD+OT]); print_info ("\t\t Total number of tetrahedra:", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%11.5lf", atd[i]/active_project -> steps); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", etd[i]); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info ("\n", "bold", active_project -> text_buffer[BD+OT]); if (eda[i] != 0.0 ) { print_info ("\t\t Edge-sharing: ", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%11.5lf", 2.0*eda[i]/active_project -> steps); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", 2.0*tepa[i]); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info ("\t or \t", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%7.3lf", 2.0*100*eda[i]/(eda[i]+cda[i])); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 2.0*100*tepa[i]*active_project -> steps/(eda[i]+cda[i])); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info (" %\n", "bold", active_project -> text_buffer[BD+OT]); } if (cda[i] != 0.0 ) { print_info ("\t\t Corner-sharing: ", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%11.5lf", (atd[i]-2*eda[i])/active_project -> steps); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %8.5lf", 2.0*tepa[i]); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info ("\t or \t", NULL, active_project -> text_buffer[BD+OT]); str = g_strdup_printf("%7.3lf", 100.0*(atd[i]-2.0*eda[i])/atd[i]); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); if (active_project -> steps > 1) { str = g_strdup_printf(" +/- %7.3lf", 2.0*100.0*tepa[i]*active_project -> steps/atd[i]); print_info (str, "bold", active_project -> text_buffer[BD+OT]); g_free (str); } print_info (" %\n", "bold", active_project -> text_buffer[BD+OT]); } } } } } Atomes-GNU-1.1.14/src/gui/calc_menu.c000066400000000000000000001373101457665371200171470ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file calc_menu.c * @short Creation of the calculation dialogs * @author Sébastien Le Roux */ /* * This file: 'calc_menu.c' * * Contains: * - The creation of the calculation dialogs * * List of functions: gboolean test_gr (int gr); gboolean test_sq (int sq); gboolean test_bonds (); gboolean test_rings (); gboolean test_msd (); gboolean test_sph (); void calc_sph (GtkWidget * vbox); void calc_msd (GtkWidget * vbox); void calc_rings (GtkWidget * vbox); void calc_bonds (GtkWidget * vbox); void calc_gr_sq (GtkWidget * box, int id); G_MODULE_EXPORT void set_max (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_delta (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void combox_tunit_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_numa (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void combox_rings_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_rings (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_toggle_bond (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_toggle_bond (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_bond (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void expand_opt (GtkWidget * exp, gpointer data); G_MODULE_EXPORT void set_advanced_sq (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_sfact (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_smoother_released (GtkButton * button, gpointer data); G_MODULE_EXPORT void run_on_calc_activate (GtkDialog * dial, gint response_id, gpointer data); G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data); GtkWidget * calc_window (int i); GtkWidget * combox_rings (gchar * str, int num, gchar * list_item[num], int id); GtkWidget * hbox_note (int i, double val); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "bind.h" #include "project.h" #include "workspace.h" extern G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data); extern gboolean toggled_rings; extern G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data); extern gchar * calc_img[NCALCS-2]; GtkWidget * calc_win = NULL; GtkWidget * ba_entry[2]; int search_type; /*! \fn GtkWidget * calc_window (int i) \brief create a calculation window \param i the calculation id */ GtkWidget * calc_window (int i) { calc_dialog = dialog_cancel_apply (calc_name[i], MainWindow, FALSE); #ifndef GTK4 /* GtkWidget * apply_button = button_set_image (GTK_BUTTON(apply_button), calc_name[i], IMG_FILE, (gpointer)calc_img[i]); gtk_widget_show (apply_button); */ #endif return calc_dialog; } /*! \fn G_MODULE_EXPORT void set_max (GtkEntry * entry, gpointer data) \brief set a maximum value \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max (GtkEntry * entry, gpointer data) { int c = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (entry); double v = atof(m); if (v > 0) { if (active_project -> max[c] != v) { active_project -> max[c] = v; // Max has changed do something !? } } update_entry_double (entry, active_project -> max[c]); } GtkWidget * rings_box[2]; /*! \fn G_MODULE_EXPORT void set_delta (GtkEntry * entry, gpointer data) \brief set the number of delta between data points \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_delta (GtkEntry * entry, gpointer data) { int c = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (entry); double v = atof(m); int i, j, k; i = (int)v; if (c == RI) { j = gtk_combo_box_get_active(GTK_COMBO_BOX(rings_box[0])); k = active_project -> rsparam[j][1]; } else if (c == CH) { k = active_project -> csparam[5]; } else if (c > -1) { k = active_project -> num_delta[c]; } if (c < 0) { if (v > 0.0) { if (active_project -> delta[-c] != v) { active_project -> delta[-c] = v; } } } else if (i > 0) { if (c == RI) { if (active_project -> rsparam[j][1] != i) { active_project -> rsparam[j][1] = i; } k = active_project -> rsparam[j][1] = i; } else if (c == CH) { if (active_project -> csparam[5] != i) { active_project -> csparam[5] = i; } k = active_project -> csparam[5] = i; } else { if (active_project -> num_delta[c] != i) { active_project -> num_delta[c] = i; } k = active_project -> num_delta[c]; } } if (c < 0) { update_entry_double (entry, active_project -> delta[-c]); } else { update_entry_int (entry, k); } } /*! \fn G_MODULE_EXPORT void combox_tunit_changed (GtkComboBox * box, gpointer data) \brief change time units \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void combox_tunit_changed (GtkComboBox * box, gpointer data) { active_project -> tunit = gtk_combo_box_get_active(box); } /*! \fn void calc_sph (GtkWidget * vbox) \brief creation of the spherical harmonics calculation widgets \param vbox GtkWidget that will receive the data */ void calc_sph (GtkWidget * vbox) { GtkWidget * hbox; GtkWidget * entry; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); gchar * str = "Maximum l, lmax in [2-40]"; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 0); entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, (gpointer)GINT_TO_POINTER(SP)); update_entry_int (GTK_ENTRY(entry), active_project -> num_delta[SP]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); } /*! \fn void calc_msd (GtkWidget * vbox) \brief creation of the MSD calculation widgets \param vbox GtkWidget that will receive the data */ void calc_msd (GtkWidget * vbox) { int i, j; gchar * val_b[3]={"Number of configurations:", "\tTime step δt used during the dynamics:", "\tNumber of step(s) between each configuration:"}; GtkWidget * hbox; GtkWidget * entry; hbox = create_hbox (15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (val_b[0]), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (g_strdup_printf ("%d",active_project -> steps), -1, 50, 0.5, 0.5), FALSE, FALSE, 0); for (i=1; i<3; i++) { hbox = create_hbox (15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (val_b[i], 350, -1, 0.0, 0.5), FALSE, FALSE, 0); if (i == 1) { entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, (gpointer)GINT_TO_POINTER(-MS)); update_entry_double (GTK_ENTRY(entry), active_project -> delta[MS]); } else { entry = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, (gpointer)GINT_TO_POINTER(MS)); update_entry_int (GTK_ENTRY(entry), active_project -> num_delta[MS]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); if (i == 1) { GtkWidget * tcombo = create_combo (); for (j=0; j<6 ; j++) combo_text_append (tcombo, untime[j]); gtk_combo_box_set_active (GTK_COMBO_BOX(tcombo), active_project -> tunit); g_signal_connect(G_OBJECT(tcombo), "changed", G_CALLBACK(combox_tunit_changed), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, tcombo, FALSE, FALSE, 0); } } } /*! \fn G_MODULE_EXPORT void set_numa (GtkEntry * entry, gpointer data) \brief set the rings/chains statistics parameter NUMA \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_numa (GtkEntry * entry, gpointer data) { const gchar * m = entry_get_text (entry); double v = atof(m); int i, j; i = (int)v; if (i > 0) { if (! search_type) { if (active_project -> rsearch[1] != i) active_project -> rsearch[1] = i; j = active_project -> rsearch[1]; } else { if (active_project -> csearch != i) active_project -> csearch = i; j = active_project -> csearch; } } else { j = (search_type) ? active_project -> csearch : active_project -> rsearch[1]; } update_entry_int (entry, j); } /*! \fn GtkWidget * combox_rings (gchar * str, int num, gchar * list_item[num], int id) \brief create a combo box for the rings statistics calculation \param str label of the combo box \param num number of values to insert in the combo box \param list_item text data to insert in the combo boc \param id id of the box to create */ GtkWidget * combox_rings (gchar * str, int num, gchar * list_item[num], int id) { int i; GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, -1, 40, 0.0, 0.5), FALSE, FALSE, 0); GtkWidget * fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 0); rings_box[id] = create_combo (); for (i=0; i rsearch[0] = gtk_combo_box_get_active(box); widget_set_sensitive (rings_box[1], (active_project -> rsearch[0]<0) ? 0 : 1); gtk_combo_box_set_active(GTK_COMBO_BOX(rings_box[1]), active_project -> rsparam[active_project -> rsearch[0]][0]); for (i=0; i<2; i++) widget_set_sensitive (rings_entry[i], (active_project -> rsearch[0]<0) ? 0 : 1); for (i=0; i<3; i++) widget_set_sensitive (rings_check[i], (active_project -> rsearch[0]<0) ? 0 : 1); update_entry_int (GTK_ENTRY(rings_entry[0]), active_project -> rsparam[active_project -> rsearch[0]][1]); i = gtk_combo_box_get_active(GTK_COMBO_BOX(rings_box[0])); for (j=0; j<3; j++) { #ifdef GTK4 gtk_check_button_set_active (GTK_CHECK_BUTTON(rings_check[j]), active_project -> rsparam[i][j+2]); #else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rings_check[j]), active_project -> rsparam[i][j+2]); #endif } } else { if (search_type) { active_project -> csparam[0] = gtk_combo_box_get_active(box); } else { i = gtk_combo_box_get_active(GTK_COMBO_BOX(rings_box[0])); active_project -> rsparam[i][0] = gtk_combo_box_get_active(box); } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data) \brief toggle a rings statistics calculation parameter \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_rings (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_rings (GtkToggleButton * but, gpointer data) \brief toggle a rings statistics calculation parameter \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_rings (GtkToggleButton * but, gpointer data) #endif { int oid = GPOINTER_TO_INT(data); int i; gboolean status; #ifdef GTK4 status = gtk_check_button_get_active (but); #else status = gtk_toggle_button_get_active (but); #endif toggled_rings = TRUE; switch (search_type) { case 0: i = gtk_combo_box_get_active(GTK_COMBO_BOX(rings_box[0])); active_project -> rsparam[i][oid+2] = status; break; case 1: active_project -> csparam[oid+1] = status; if (oid == 0 && status) { #ifdef GTK4 gtk_check_button_set_active (GTK_CHECK_BUTTON(rings_check[1]), ! status); gtk_check_button_set_active (GTK_CHECK_BUTTON(rings_check[2]), ! status); gtk_check_button_set_active (GTK_CHECK_BUTTON(rings_check[3]), ! status); #else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rings_check[1]), ! status); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rings_check[2]), ! status); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rings_check[3]), ! status); #endif } else if (oid == 1 && status) { #ifdef GTK4 gtk_check_button_set_active (GTK_CHECK_BUTTON(rings_check[0]), ! status); #else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rings_check[0]), ! status); #endif } else if (oid == 2 && status) { #ifdef GTK4 gtk_check_button_set_active (GTK_CHECK_BUTTON(rings_check[1]), ! status); #else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(rings_check[1]), ! status); #endif } break; } } /*! \fn void calc_rings (GtkWidget * vbox) \brief creation of the rings statistics calculation widgets \param vbox GtkWidget that will receive the data */ void calc_rings (GtkWidget * vbox) { gchar * defs[6]={"All rings (No rules)", "King's [1, 3]", "Guttman's [2]", "Primitives [4, 5, 6]", "Strongs [4, 5]"}; gchar * val_a[2]={"Definition of ring to be used: ", "Atom(s) to initiate the search from: "}; gchar * val_b[2][2]={{"nmax = maximum size for a ring *", "Maximum number of rings of size n per MD step **"}, {"nmax = maximum size for a chain *", "Maximum number of chains of size n per MD step **"}}; gchar * val_c[2][4]={{"Only search for ABAB rings", "No homopolar bonds in the rings (A-A, B-B ...) ***", "No homopolar bonds in the connectivity matrix", " "}, {"Only search for AAAA chains", "Only search for ABAB chains", "No homopolar bonds in the chains (A-A, B-B ...) ***", "Only search for 1-(2)n-1 coordinated atom chains, ie. isolated chains."}}; gchar * val_d={"\n*\tnmax in total number of nodes (or atoms)\n" "**\tvalue used for memory allocation = f(nmax, system studied)\n" "***\tBut homopolar bonds can shorten the rings"}; gchar * val_e={"\n[1] S. V. King. Nature, 213:1112 (1967).\n" "[2] L. Guttman. J. Non-Cryst. Solids., 116:145-147 (1990).\n" "[3] D. S. Franzblau. Phys. Rev. B, 44(10):4925-4930 (1991).\n" "[4] K. Goetzke and H. J. Klein. J. Non-Cryst. Solids., 127:215-220 (1991).\n" "[5] X. Yuan and A. N. Cormack. Comp. Mat. Sci., 24:343-360 (2002).\n" "[6] F. Wooten. Acta Cryst. A, 58(4):346-351 (2002)."}; gchar * list_node[active_project -> nspec+1]; int i, j, k; toggled_rings = FALSE; if (! search_type) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, combox_rings (val_a[0], 5, defs, 0), FALSE, FALSE, 0); list_node[0] = g_strdup_printf ("All"); for (i=0; i nspec; i++) list_node[i+1] = g_strdup_printf ("%s", active_chem -> label[i]); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, combox_rings (val_a[1], active_project -> nspec+1, list_node, 1), FALSE, FALSE, 0); j = active_project -> rsearch[0]; k = RI + search_type; GtkWidget * hbox; for (i=0; i<2; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (val_b[search_type][i], 400, -1, 0.0, 0.5), FALSE, FALSE, 0); if (i == 0) { rings_entry[i] = create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, GINT_TO_POINTER(k)); update_entry_int (GTK_ENTRY(rings_entry[i]), (search_type) ? active_project -> csparam[5] : active_project -> rsparam[j][1]); } else { rings_entry[i] = create_entry (G_CALLBACK(set_numa), 100, 15, FALSE, NULL); update_entry_int (GTK_ENTRY(rings_entry[i]), (search_type) ? active_project -> csearch : active_project -> rsearch[1]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rings_entry[i], FALSE, FALSE, 0); if (! search_type && j < 0) widget_set_sensitive (rings_entry[i], 0); } gboolean status; for (i=0; i<3+search_type; i++) { status = (j < 0) ? 0 : (search_type) ? active_project -> csparam[i+1] : active_project -> rsparam[j][i+2]; rings_check[i] = check_button (val_c[search_type][i], -1, 40, status, G_CALLBACK(toggle_rings), GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, rings_check[i], FALSE, FALSE, 0); if (active_project -> nspec == 1) widget_set_sensitive (rings_check[i], 0); if (! search_type && j < 0) widget_set_sensitive (rings_check[i], 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (val_d, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); if (! search_type) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (val_e, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); i = 0; g_signal_connect(G_OBJECT(rings_box[0]), "changed", G_CALLBACK(combox_rings_changed), GINT_TO_POINTER(0)); gtk_combo_box_set_active(GTK_COMBO_BOX(rings_box[0]), active_project -> rsearch[0]); widget_set_sensitive (rings_box[1], (active_project -> rsearch[0]<0) ? 0 : 1); } i = 1; g_signal_connect(G_OBJECT(rings_box[1]), "changed", G_CALLBACK(combox_rings_changed), GINT_TO_POINTER(i)); gtk_combo_box_set_active(GTK_COMBO_BOX(rings_box[1]), (search_type) ? active_project -> csparam[0] : active_project -> rsparam[j][0]); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_toggle_bond (GtkNativeDialog * info, gint response_id, gpointer data) \brief bond properties detailed saving: run the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_toggle_bond (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_toggle_bond (GtkDialog * info, gint response_id, gpointer data) \brief bond properties detailed saving: run the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_toggle_bond (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { active_project -> bondfile = file_chooser_get_file_name (chooser); } else { #ifdef GTK4 gtk_check_button_set_active ((GtkCheckButton *)data, FALSE); #else gtk_toggle_button_set_active ((GtkToggleButton *)data, FALSE); #endif } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data) \brief bond properties detailed saving and prepare the dialog \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_bond (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_bond (GtkToggleButton * Button, gpointer data) \brief activate bond properties detailed saving and prepare the dialog \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_bond (GtkToggleButton * Button, gpointer data) #endif { int i = GPOINTER_TO_INT (data); gboolean status; #ifdef GTK4 status = gtk_check_button_get_active (Button); #else status = gtk_toggle_button_get_active (Button); #endif if (i < 3) { active_project -> runc[i] = status; if (i < 2) widget_set_sensitive (ba_entry[i], status); if (i == 2) frag_update = mol_update = status; } else { if (status) { // To add = do not annoy me with that again ! show_info ("Activate this option and the result of the nearest neighbors\n" "analysis will be saved during the search in a file that you may\n" "use afterwards.\n", 0, MainWindow); #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser ("Save neighbors analysis in file", GTK_WINDOW(MainWindow), GTK_FILE_CHOOSER_ACTION_SAVE, "Save"); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, "neighbors.dat"); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_toggle_bond), Button); #else run_this_gtk_dialog (info, G_CALLBACK(run_toggle_bond), Button); #endif } else { active_project -> bondfile = NULL; } } } /*! \fn gboolean test_gr (int gr) \brief is it safe to compute g(r) ? \param gr type of g(r): real space (GR) or FFT (GK) */ gboolean test_gr (int gr) { if (active_project -> num_delta[gr] < 2) { show_warning ("You must specify a number of δr >= 2\n" "to discretize the real space between 0.0 and Dmax\n", calc_win); return FALSE; } else if (gr == GK && (active_project -> max[gr] > active_project -> max[SK] || active_project -> max[gr] <= active_project -> min[SK])) { show_warning ("You must specify a maximum wave vector Qmax[FFT]\n" "for the FFT, with Qmin < Qmax[FFT] <= Qmax", calc_win); return FALSE; } else { return TRUE; } } /*! \fn gboolean test_sq (int sq) \brief is it safe to compute s(q) ? \param sq type of s(q): FFT (1) or direct (SK) */ gboolean test_sq (int sq) { if (active_project -> max[sq] <= active_project -> min[sq]) { show_warning ("You must specify a maximum wave vector Qmax\n" "note that Qmax must be > Qmin", calc_win); return FALSE; } else if (active_project -> num_delta[sq] < 2) { show_warning ("You must specify a number of δq >= 2\n" "to discretize the reciprocal space between 0.0 and Qmax\n", calc_win); return FALSE; } else { return TRUE; } } /*! \fn gboolean test_bonds () \brief is it safe to compute bond properties ? */ gboolean test_bonds () { if (active_project -> runc[0] && active_project -> num_delta[BD] < 2) { show_warning ("You must specify a number of δr >= 2\n" "to discretize the real space between\n" "the shortest and the highest inter-atomic distances", calc_win); return FALSE; } else if (active_project -> runc[1] && active_project -> num_delta[AN] < 2) { show_warning ("You must specify a number of δ° >= 2\n" "to discretize the angular space between 0 and 180°", calc_win); return FALSE; } else { return TRUE; } } /*! \fn gboolean test_rings () \brief is it safe to compute ring statistics ? */ gboolean test_rings () { int i, j; i = (search_type) ? active_project -> csparam[5] : active_project -> rsparam[active_project -> rsearch[0]][1]; j = (search_type) ? active_project -> csearch : active_project -> rsearch[1]; gchar * sobj[2]={"ring", "chain"}; gchar * str; if (i == 0) { str = g_strdup_printf ("You must specify a maximum %s size > 1 for the search", sobj[search_type]); show_warning (str, calc_win); g_free (str); return FALSE; } if (j == 0) { str = g_strdup_printf ("You must specify a number of %ss per size 'n' and per node\n" "this value is used when allocating the memory to store the results\n" "and depends on both the maximum %s size used in the search\n" "and the system studied.\n" "We recommend a value at least equal to 100.\n" "If it appears that the value given is not big enough\n" "(ex: more than 100 different %ss of size 'n' for a single node)\n" "then the search will failed but the program will propose\n" "you to initiate a new search using a higher value", sobj[search_type], sobj[search_type], sobj[search_type]); show_warning (str, calc_win); g_free (str); return FALSE; } return TRUE; } /*! \fn gboolean test_msd () \brief is it safe to compute MSD ? */ gboolean test_msd () { if(active_project -> steps > 1) { if (active_project -> delta[MS] == 0.0) { show_warning ("You must specify the time step δt\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n", calc_win); return FALSE; } if (active_project -> tunit < 0) { show_warning ("You must specify the time unit\n" "used to integrate the Newton's equations\n" "of motion during the molecular dynamics\n", calc_win); return FALSE; } else { return TRUE; } } else { if (active_project -> num_delta[MS] < 1) { show_warning ("You must specify the number of steps\n" "between each of the %d configurations\n" "found for the molecular dynamics\n", calc_win); return FALSE; } else { return TRUE; } } } /*! \fn gboolean test_sph () \brief is it safe to compute spherical harmonics ? */ gboolean test_sph () { if (active_project -> num_delta[SP] < 2 || active_project -> num_delta[SP] > 40) { show_warning ("You must specify a number lmax in [2-40]", calc_win); return FALSE; } else { return TRUE; } } /*! \fn void calc_bonds (GtkWidget * vbox) \brief creation of the bond calculation widgets \param vbox GtkWidget that will receive the data */ void calc_bonds (GtkWidget * vbox) { gchar * val_a[2]={"Number of δr [Dijmin-Dijmax]", "Number of δθ [0-180°]"}; gchar * val_b[4]={"First coordination sphere properties", "Bond and dihedral angles distribution", "Search for molecules and isolated fragments", "Output detailed results in text file"}; GtkWidget * hbox; int i; for (i=0; i<3; i++) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (val_b[i], -1, 40, active_project -> runc[i], G_CALLBACK(toggle_bond), (gpointer)GINT_TO_POINTER(i)), FALSE, FALSE, 0); if (i < 2) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (val_a[i], 200, -1, 0.0, 0.5), FALSE, FALSE, 0); ba_entry[i] = create_entry (G_CALLBACK(set_delta), 150, 15, FALSE, (gpointer)GINT_TO_POINTER(BD+i)); update_entry_int (GTK_ENTRY(ba_entry[i]), active_project -> num_delta[BD+i]); widget_set_sensitive (ba_entry[i], active_project -> runc[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ba_entry[i], FALSE, FALSE, 0); } } GtkWidget * checkbd = check_button (val_b[i], -1, 40, FALSE, G_CALLBACK(toggle_bond), (gpointer)GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, checkbd, FALSE, FALSE, 0); widget_set_sensitive (checkbd, 1); } /*! \fn GtkWidget * hbox_note (int i, double val) \brief foot note message box with some parameters \param i message id \param val value to display */ GtkWidget * hbox_note (int i, double val) { gchar * note[3] = {"Dmax = ", "Qmin = ", "Qmax = "}; gchar * unit[3] = {" Å", " Å-1", " Å-1"}; gchar * str; GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (note[i], 50, -1, 0.0, 0.5), FALSE, FALSE, 0); str = g_strdup_printf ("%f", val); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (unit[i], 50, -1, 0.0, 0.5), FALSE, FALSE, 0); return hbox; } GtkWidget * avbox; GtkWidget * smbox; int avsize; /*! \fn G_MODULE_EXPORT void expand_opt (GtkWidget * exp, gpointer data) \brief open expander actions \param exp the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void expand_opt (GtkWidget * exp, gpointer data) { int i; i = GPOINTER_TO_INT(data); GtkExpander * expander = GTK_EXPANDER (exp); GtkWidget * wind = get_top_level (exp); gtk_window_set_resizable (GTK_WINDOW (wind), TRUE); if (gtk_expander_get_expanded (expander)) { if (i == 1) { gtk_widget_hide (avbox); } else { gtk_widget_hide (smbox); } } else { if (i == 1) { gtk_widget_show (avbox); } else { gtk_widget_show (smbox); } } gtk_widget_set_size_request (exp, -1, -1); gtk_window_set_resizable (GTK_WINDOW (wind), FALSE); } /*! \fn G_MODULE_EXPORT void set_advanced_sq (GtkEntry * entry, gpointer data) \brief set a s(k) calculation parameter \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_advanced_sq (GtkEntry * entry, gpointer data) { int c = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (entry); double v = atof(m); if (v != active_project -> sk_advanced[c]) { if (c == 0 && (v < 0.0 || v > 1.0)) { show_warning ("You must specify a probability between 0.0 and 1.0", calc_win); } else if (c == 1 && (v < active_project -> min[SK] || v > active_project -> max[SK])) { show_warning ("Qlim must be ≥ Qmin and ≤ Qmax", calc_win); } else { active_project -> sk_advanced[c] = v; } } update_entry_double (entry, active_project -> sk_advanced[c]); } /*! \fn G_MODULE_EXPORT void set_sfact (GtkEntry * entry, gpointer data) \brief set the Gaussian smoothing factor \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sfact (GtkEntry * entry, gpointer data) { const gchar * m; int i = GPOINTER_TO_INT(data); m = entry_get_text (entry); double v = atof(m); if (v <= 0.0 || v >= 1.0) { show_warning ("The smoothing factor must be between 0.0 and 1.0", calc_win); } else { active_project -> fact[i] = v; } update_entry_double (entry, active_project -> fact[i]); } /*! \fn G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data) \brief show the curve toolboxes \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data) { if (! is_the_widget_visible (curvetoolbox)) { gtk_widget_show (curvetoolbox); } else { gtk_widget_hide (curvetoolbox); } } /*! \fn G_MODULE_EXPORT void on_smoother_released (GtkButton * button, gpointer data) \brief smooth g(r), s(q), s(k) or g(k) \param button the button sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_smoother_released (GtkButton * button, gpointer data) { int i, k, l, m; l = GPOINTER_TO_INT(data); if (active_project -> visok[l]) { i = 1; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); if (l == 0 || l == 3) { i = i+2; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); i = i+2; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); } for (k=0 ; k nspec ; k++) { for (m=0 ; m nspec ; m++) { i = i+2; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); if (l == 0 || l == 3) { i = i+2; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); i = i+1; } } } if (l == 1 || l == 2) { for (k=0 ; k nspec ; k++) { for (m=0 ; m nspec ; m++) { i = i+2; smooth_and_save_ (active_project -> curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); } } } if (active_project -> nspec == 2) { m = 3; if (l == 1 || l == 2) m = m+1; for (k=0 ; k curves[l][i-1] -> data[0], active_project -> curves[l][i-1] -> data[1], & active_project -> fact[l], & i, & active_project -> curves[l][i-1] -> ndata, & l); } } fill_tool_model (); gtk_widget_show (curvetoolbox); if (l == 0 || l == 3) { for (i=0; i<4; i=i+3) update_after_calc (i); } else { for (i=1; i<3; i++) update_after_calc (i); } } else { show_error ("No data set(s) to be smoothed\n", 0, calc_win); } } /*! \fn void calc_gr_sq (GtkWidget * box, int id) \brief creation of the g(r) / s(q) / s(k) / g(k) calculation widgets \param box GtkWidget that will receive the data \param id the calculation id */ void calc_gr_sq (GtkWidget * box, int id) { gchar * val_a[4]={"Number of δr steps", "Number of δq steps", "Number of δq steps", "Number of δr steps"}; gchar * val_b[3]={"Qmax-1]", "Qmax-1]", "Qmax for the FFT [Å-1]"}; GtkWidget * vbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (val_a[id], 150, -1, 0.0, 0.5), FALSE, FALSE, 10); GtkWidget * entry= create_entry (G_CALLBACK(set_delta), 100, 15, FALSE, GINT_TO_POINTER(id)); update_entry_int (GTK_ENTRY(entry), active_project -> num_delta[id]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); if (id > GR) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (val_b[id-1], 150, -1, 0.0, 0.5), FALSE, FALSE, 10); GtkWidget * entry= create_entry (G_CALLBACK(set_max), 100, 15, FALSE, GINT_TO_POINTER(id)); update_entry_double (GTK_ENTRY(entry), active_project -> max[id]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 10); } if (id == GR || id == GK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (0, active_project -> max[GR]), FALSE, FALSE, 0); } if (id == SQ) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (1, active_project -> min[SQ]), FALSE, FALSE, 0); } if (id == SK|| id == GK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (1, active_project -> min[SK]), FALSE, FALSE, 0); } if (id == GK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox_note (2, active_project -> max[SK]), FALSE, FALSE, 0); } if (id == GR || id == GK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label ("Dmax is the maximum inter-atomic distance in the model", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } if (id > 0) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label ("Qmin is the minimum wave vector for the model", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } if (id == GK) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label ("Qmax is the maximum wave vector to compute S(q)", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); GtkWidget * aentry; if (id == SK) { gchar * adv_name[2]={"Probability to keep wave\nvector q > Qlim [0.0-1.0]", "Qlim-1] in [Qmin-Qmax]"}; GtkWidget * advanced_options = create_expander (" Advanced options", NULL); gtk_widget_set_size_request (advanced_options, -1, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, advanced_options, FALSE, TRUE, 10); avbox = create_vbox (5); GtkWidget * ahbox; GtkWidget * fixed; int i; for (i=0; i<2; i++) { ahbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, avbox, ahbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, markup_label (adv_name[i], 175, -1, 0.0, 0.5), FALSE, FALSE, 5); aentry = create_entry (G_CALLBACK(set_advanced_sq), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(aentry), active_project -> sk_advanced[i]); fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(fixed), aentry, 0.0, 0.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ahbox, fixed, FALSE, FALSE, 10); } g_signal_connect (G_OBJECT(advanced_options), "activate", G_CALLBACK(expand_opt), GINT_TO_POINTER(1)); add_container_child (CONTAINER_EXP, advanced_options, avbox); show_the_widgets (advanced_options); widget_set_sensitive (advanced_options, 1); } GtkWidget * smooth_options = create_expander (" Gaussian data smoothing", NULL); gtk_widget_set_size_request (smooth_options, -1, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, smooth_options, FALSE, TRUE, 10); avbox = create_vbox (5); smbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, smbox, gtk_label_new("Factor [0.0-1.0]"), FALSE, FALSE, 0); aentry = create_entry (G_CALLBACK(set_sfact), 100, 15, FALSE, GINT_TO_POINTER(id)); update_entry_double (GTK_ENTRY(aentry), active_project -> fact[id]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, smbox, aentry, FALSE, TRUE, 10); GtkWidget * smooth = create_button ("Smooth", IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(on_smoother_released), GINT_TO_POINTER(id)); g_signal_connect (G_OBJECT(smooth_options), "activate", G_CALLBACK(expand_opt), GINT_TO_POINTER(0)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, smbox, smooth, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, avbox, smbox, FALSE, FALSE, 5); add_container_child (CONTAINER_EXP, smooth_options, avbox); show_the_widgets (smooth_options); widget_set_sensitive (smooth_options, 1); } /*! \fn G_MODULE_EXPORT void run_on_calc_activate (GtkDialog * dial, gint response_id, gpointer data) \brief create a calculation dialog: run the dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_calc_activate (GtkDialog * dial, gint response_id, gpointer data) { int i; int id = GPOINTER_TO_INT(data); switch (response_id) { case GTK_RESPONSE_APPLY: switch (id) { case GR: if (test_gr (GR)) on_calc_gr_released (calc_win, NULL); break; case SQ: if (test_sq (SQ)) on_calc_sq_released (calc_win, NULL); break; case SK: if (test_sq (SK)) on_calc_sk_released (calc_win, NULL); break; case GK: if (test_gr (GK)) on_calc_gq_released (calc_win, NULL); break; case BD: if (test_bonds ()) on_calc_bonds_released (calc_win, NULL); break; case RI-1: if (test_rings ()) { //gtk_widget_show (spinner); //gtk_spinner_start (GTK_SPINNER(spinner)); on_calc_rings_released (calc_win, NULL); toggled_rings = FALSE; //gtk_spinner_stop (GTK_SPINNER(spinner)); //gtk_widget_hide (spinner); } break; case CH-1: if (test_rings ()) { //gtk_widget_show (spinner); //gtk_spinner_start (GTK_SPINNER(spinner)); on_calc_chains_released (calc_win, NULL); //gtk_spinner_stop (GTK_SPINNER(spinner)); //gtk_widget_hide (spinner); } break; case SP-1: if (test_sph ()) on_calc_sph_released (calc_win, NULL); break; case MS-1: if (test_msd ()) on_calc_msd_released (calc_win, NULL); break; default: break; } break; default: frag_update = mol_update = 0; for (i=0; i<3; i++) active_project -> runc[i] = FALSE; destroy_this_dialog (dial); calc_win = destroy_this_widget (calc_win); avbox = NULL; } } /*! \fn G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data) \brief create a calculation dialog - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data) { int id = GPOINTER_TO_INT(data); calc_win = calc_window(id); GtkWidget * box = dialog_get_content_area (calc_win); gtk_box_set_homogeneous (GTK_BOX(box), FALSE); switch (id) { case BD: calc_bonds (box); break; case RI-1: search_type = 0; calc_rings (box); break; case CH-1: search_type = 1; calc_rings (box); break; case SP-1: calc_sph (box); break; case MS-1: calc_msd (box); break; case 9: // calc_valence (box); break; default: calc_gr_sq (box, id); break; } #ifndef GTK4 gtk_window_set_icon (GTK_WINDOW (calc_win), gdk_pixbuf_new_from_file(calc_img[id], NULL)); #endif GtkWidget * vbox = create_vbox (BSEP); gtk_widget_set_size_request (vbox, -1, 30); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, vbox, FALSE, FALSE, 0); /*GtkWidget * spinner = gtk_spinner_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, spinner, FALSE, FALSE, 0); gtk_widget_set_size_request (spinner, -1, 30); gtk_widget_hide (spinner);*/ run_this_gtk_dialog (calc_win, G_CALLBACK(run_on_calc_activate), data); } Atomes-GNU-1.1.14/src/gui/callbacks.c000066400000000000000000001425261457665371200171450ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file callbacks.c * @short General callbacks \n Functions to open and close files * @author Sébastien Le Roux */ /* * This file: 'callbacks.c' * * Contains: * - General callbacks - The functions to open and close files * * List of functions: int open_save (FILE * fp, int i, int pid, int aid, int npi, gchar * pfile); int open_save_workspace (FILE * fp, int act); int prep_chem_data (); int to_read_trj_or_vas (int ff); int read_npt_data (); int open_coordinate_file (int id); void quit_gtk (); void open_this_proj (gpointer data, gpointer user_data); void run_project (); void apply_project (gboolean showtools); void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible); void to_read_pos (); void check_read_sa (); void update_sa_info (int sid); void prepare_sp_box (); void cell_data_from_pdb_ (float * a, float * b, float * c, float * alp, float * bet, float * gam); void open_this_coordinate_file (int format, gchar * proj_name); G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_on_open_save_active (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_open_save_active (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_on_isaacs_port (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_isaacs_port (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void update_sa (GtkEntry * res, gpointer data); G_MODULE_EXPORT void changed_spec_combo (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_at_sp (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_to_read_trj_or_vas (GtkDialog * dialog, gint response_id, gpointer data); G_MODULE_EXPORT void run_read_npt_data (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_read_npt_data (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_coord_port (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_on_coord_port (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "callbacks.h" #include "bind.h" #include "project.h" #include "workspace.h" #include "glwindow.h" #include "glview.h" #include "atom_edit.h" #include "cell_edit.h" #include "readers.h" char * coord_files[NCFORMATS+1] = {"XYZ file", "XYZ file - NPT", "Chem3D file", "CPMD trajectory", "CPMD trajectory - NPT", "VASP trajectory", "VASP trajectory - NPT", "Protein Data Bank file", "Protein Data Bank file", "Crystallographic information (crystal build)", "Crystallographic information (symmetry positions)", "DL-POLY HISTORY file", "ISAACS Project File"}; char * coord_files_ext[NCFORMATS+1]={"xyz", "xyz", "c3d", "trj", "trj", "xdatcar", "xdatcar", "pdb", "ent", "cif", "cif", "hist", "ipf"}; char ** las; void initcwidgets (); extern G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern const gchar * dfi[2]; extern int open_cif_file (gchar * filename); extern int open_coord_file (gchar * filename, int fti); extern int open_history_file (gchar * filename); extern int open_cell_file (int format, gchar * filename); extern double get_z_from_periodic_table (gchar * lab); /*! \fn void quit_gtk () \brief Leave the application */ void quit_gtk () { profree_ (); g_application_quit (G_APPLICATION(AtomesApp)); } /*! \fn G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data) \brief close the active workspace \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data) { int i, j; gboolean close = FALSE; j = GPOINTER_TO_INT (data); if (j == 1) { close = ask_yes_no ("Close workspace ?", "Are you sure ?", GTK_MESSAGE_QUESTION, MainWindow); } else { close = TRUE; } if (close) { j = nprojects-1; for (i=j; i>-1; i--) { #ifdef DEBUG g_debug ("CLOSING:: %d", i); #endif on_close_activate (NULL, GINT_TO_POINTER(i)); } } } gboolean save = TRUE; /*! \fn int open_save (FILE * fp, int i, int pid, int aid, int npi, gchar * pfile) \brief open or save project file \param fp the file pointer \param i 0 = read, 1 = write \param pid the project id \param aid the active project id \param npi total number of projects \param pfile the file name */ int open_save (FILE * fp, int i, int pid, int aid, int npi, gchar * pfile) { int j; gchar * err; if (i == 0) { reading_input = TRUE; j = open_project (fp, npi); reading_input = FALSE; if (j != 0) { // error at read if (pfile != NULL) { err = g_strdup_printf ("Impossible to open project file: \n%s\nError code: %d\n", pfile, j); show_error (err, 0, MainWindow); g_free (err); } to_close_this_project (aid, active_project); } else { #ifdef DEBUG g_debug ("pid= %d, pfile= %s", pid, pfile); #endif get_project_by_id (pid) -> projfile = g_strdup_printf ("%s", pfile); add_project_to_workspace (); prep_calc_actions (); } } else { j = save_project (fp, get_project_by_id(pid), npi); if (j != 0) { // error at write if (pfile != NULL) { err = g_strdup_printf ("Impossible to save project file:\n%s\nError code: %d\n", pfile, j); show_error (err, 0, MainWindow); g_free (err); } } else { if (pfile != NULL) get_project_by_id(pid) -> projfile = g_strdup_printf ("%s", pfile); } } return j; } /*! \fn int open_save_workspace (FILE * fp, int act) \brief open or save the active workspace \param fp the file to read or write \param act the action (0 = read, 1 = write) */ int open_save_workspace (FILE * fp, int act) { int i, j, k, l, m; gchar * ver; /*PangoFontDescription * font_desc; GtkTextBuffer * buffer; GtkTextIter bStart; GtkTextIter bEnd;*/ // First 2 lines for compatibility issues if (act == 0) { if (fread (& i, sizeof(int), 1, fp) != 1) return 1; ver = g_malloc0 (i*sizeof*ver); if (fread (ver, sizeof(char), i, fp) != i) return 1; // test on ver for version g_free (ver); if (fread (& i, sizeof(int), 1, fp) != 1) return 1; } else { i = 1; ver = g_strdup_printf ("%%\n%% Workspace file v-%1d.0\n%%\n", i); i = strlen (ver); if (fwrite (& i, sizeof(int), 1, fp) != 1) return 1; if (fwrite (ver, sizeof(char), i, fp) != i) return 1; g_free (ver); i = 0; for (j=0; j natomes) i++; if (fwrite (& i, sizeof(int), 1, fp) != 1) return 1; l = i; i = nprojects; } if (i > 0) { for (j=0; j natomes) { m = open_save (fp, act, j, k, l, NULL); if (m != 0) return m; } } return 0; } else { return -1; } } /*! \fn void open_this_proj (gpointer data, gpointer user_data) \brief Open many projects, one at a time \param data \param user_data */ void open_this_proj (gpointer data, gpointer user_data) { FILE * fp = fopen (data, dfi[0]); int pactive = activep; init_project (FALSE); open_save (fp, 0, activew, pactive, 0, data); fclose (fp); activew = activep; } tint osp; gboolean run_os; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_open_save_active (GtkNativeDialog * info, gint response_id, gpointer data) \brief open or save an atomes file - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_open_save_active (GtkNativeDialog * info, gint response_id, gpointer data) { GListModel * projlist; GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_open_save_active (GtkDialog * info, gint response_id, gpointer data) \brief open or save an atomes file - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_open_save_active (GtkDialog * info, gint response_id, gpointer data) { GSList * projlist = NULL; GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif FILE * fp = NULL; gchar * err; gboolean io = FALSE; const gchar * mess[2]={"reading","saving "}; if (response_id == GTK_RESPONSE_ACCEPT) { if (osp.a == 0) { projlist = file_chooser_get_file_names (chooser); } else { projfile = file_chooser_get_file_name (chooser); } if (osp.a > 1) { workspacefile = g_strdup_printf ("%s", projfile); } io = TRUE; } if (run_os) { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } if (io) { if (osp.a > 0) { fp = fopen (projfile, dfi[osp.b]); } if (osp.a == 0) { #ifdef GTK3 g_slist_foreach (projlist, open_this_proj, NULL); g_slist_free (projlist); #else int i; for (i=0; i 0) { fclose (fp); g_free (projfile); } } } /*! \fn G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data) \brief open or save an atomes file - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data) { int i, j, k; gint action; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileChooser * chooser; GtkFileFilter * filter1, * filter2; const gchar * str[4]={"Open Project File(s)", "Save Project File", "Open Workspace", "Save Workspace"}; const gchar * res[2]={"Open", "Save"}; const gchar * file_name[2]={"Project file (*.apf)", "Workspace file (*.awf)"}; const gchar * file_ext[2]={"*.apf", "*.awf"}; GtkFileChooserAction act[2]={GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; project * this_proj = get_project_by_id (activew); int pactive = activep; i = GPOINTER_TO_INT (data); run_os = FALSE; if (i == 1 || i == 3) { j = 1; } else { j = 0; } action = 0; if (i == 2 && ! newspace) { show_info ("A workspace is already open !", 0, MainWindow); } else if (i == 3 && newspace) { show_warning ("Empty workspace ... nothing to be saved\n", MainWindow); } else if (i == 3) { for (k=0; k natomes) action = 1; if (! action) { show_warning ("Workspace contains only empty projects ... nothing to be saved\n", MainWindow); } } else if (i == 1 && nprojects == 0) { show_warning ("No project open ... nothing to be saved\n", MainWindow); } else if (i == 1 && ! this_proj -> natomes) { show_warning ("Empty project ... nothing to be saved\n", MainWindow); } else { action = 1; } if (action) { if (nprojects == 0) { run_os = TRUE; } else { if (i == 1) { if (g_strcmp0(this_proj -> projfile, "(null)") == 0) this_proj -> projfile = NULL; if (save && this_proj -> projfile != NULL) { run_os = FALSE; projfile = g_strdup_printf ("%s", this_proj -> projfile); } else { run_os = TRUE; projfile = NULL; } } else if (i == 3) { if (g_strcmp0(workspacefile, "(null)") == 0) workspacefile = NULL; if (save && workspacefile != NULL) { run_os = FALSE; projfile = g_strdup_printf ("%s", workspacefile); } else { run_os = TRUE; } } else { run_os = TRUE; } } gchar * tmp_str; if (i == 0) { tmp_str = g_strdup_printf ("%s - New project", str[i]); } else if (i == 1) { tmp_str = g_strdup_printf ("%s - %s", str[i], prepare_for_title(this_proj -> name)); } else { tmp_str = g_strdup_printf ("%s", str[i]); } info = create_file_chooser (tmp_str, GTK_WINDOW(MainWindow), act[j], res[j]); chooser = GTK_FILE_CHOOSER (info); g_free (tmp_str); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif if (i == 1 || i == 3) gtk_file_chooser_set_create_folders (chooser, TRUE); if (nprojects == 0 || i == 0) { file_chooser_set_current_folder (chooser); if (i == 0) { gtk_file_chooser_set_select_multiple (chooser, TRUE); } } else { if (i == 1) { if (projfile != NULL) { file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, projfile); } else { if (! file_chooser_set_file_name (chooser, g_strdup_printf ("%s.apf", prepare_for_title(this_proj -> name)))) goto end; } } else if (i == 3) { if (workspacefile != NULL) { file_chooser_set_current_folder (chooser); gtk_file_chooser_set_current_name (chooser, g_strdup_printf ("%s", workspacefile)); } else { if (! file_chooser_set_file_name (chooser, "New-Workspace.awf")) goto end; } } } filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), file_name[i/2]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), file_ext[i/2]); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), "All files (*)"); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*"); gtk_file_chooser_add_filter (chooser, filter2); osp.a = i; osp.b = j; osp.c = pactive; if (run_os) { #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_on_open_save_active), this_proj); #else run_this_gtk_dialog (info, G_CALLBACK(run_on_open_save_active), this_proj); #endif } else { #ifdef GTK4 run_on_open_save_active ((GtkNativeDialog *)info, GTK_RESPONSE_ACCEPT, this_proj); #else run_on_open_save_active ((GtkDialog *)info, GTK_RESPONSE_ACCEPT, this_proj); #endif } } activew = activep; update_insert_combos (); end:; } /*! \fn G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data) \brief open or save, choosing a file name \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data) { save = FALSE; on_open_save_activate (widg, data); save = TRUE; } /*! \fn void run_project () \brief send project data to Fortran90 */ void run_project () { if (! active_project -> run) { int i, j; j = (active_cell -> npt) ? active_project -> steps : 1; for (i=0; i box[i].vect, active_cell -> box[i].param[0], active_cell -> box[i].param[1], & active_cell -> ltype, & active_cell -> frac, & active_cell -> pbc); } to_read_pos (); prep_pos_ (& active_cell -> pbc, & active_cell -> frac); if (active_project -> numwid < 0) initcwidgets (); active_project -> dmtx = FALSE; active_project -> run = 1; } if (active_cell -> frac) active_cell -> frac = 0; } /*! \fn void apply_project (gboolean showtools) \brief get project ready for calculation and initialize the OpenGL window \param showtools */ void apply_project (gboolean showtools) { if (active_project -> natomes) { run_project (); initcutoffs (active_chem, active_project -> nspec); } prep_model (active_project -> id); if (showtools) gtk_widget_show (curvetoolbox); } /*! \fn void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible) \brief open an ISAACS XML file \param profile the XML file name \param ptoc the previous active project \param visible read from the command line (FALSE), from the gui (TRUE) */ void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible) { if (! open_xml (profile)) { active_project -> name = substitute_string (g_path_get_basename (profile), ".ipf", NULL); on_edit_activate (NULL, GINT_TO_POINTER(3)); on_edit_activate (NULL, GINT_TO_POINTER(5)); active_project_changed (activep); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; apply_project (TRUE); active_project_changed (activep); add_project_to_workspace (); if (visible) show_info ("ISAACS project file (XML) successfully opened", 0, MainWindow); } else { to_close_this_project (ptoc, active_project); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_isaacs_port (GtkNativeDialog * info, gint response_id, gpointer data) \brief open or write ISAACS XML file - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_isaacs_port (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_isaacs_port (GtkDialog * info, gint response_id, gpointer data) \brief open or write ISAACS XML file - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_isaacs_port (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { if (osp.a == 0 || nprojects == 0) init_project (TRUE); projfile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif if (osp.a == 0) { open_this_isaacs_xml_file (projfile, osp.b, TRUE); } else if (osp.a == 1) { active_project_changed (activew); if (write_xml (projfile) == 0) { show_error ("Impossible to write the IPF file\n", 0, MainWindow); } active_project_changed (osp.b); } g_free (projfile); } else { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif if (osp.a == 0) to_close_this_project (osp.b, active_project); } } /*! \fn G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data) \brief open or write ISAACS XML file - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer (int *) open = 0, save = 1 */ G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data) { int i, j; gboolean action; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileChooser * chooser; GtkFileFilter * filter[2]; const gchar * file_ext[2]={"*.ipf", "*"}; const gchar * file_type[2]={"IPF file (*.ipf)", "All files (*)"}; const gchar * str[2]={"Import ISAACS Project File", "Export ISAACS Project File"}; const gchar * res[2]={"Open", "Save"}; GtkFileChooserAction act[2]={GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; int pactive = activep; i = GPOINTER_TO_INT (data); action = (i && ! nprojects) ? ask_yes_no ("Save an empty project ?", "Do you want to save an empty project ?", GTK_MESSAGE_QUESTION, MainWindow) : TRUE; if (action) { info = create_file_chooser (str[i], GTK_WINDOW(MainWindow), act[i], res[i]); chooser = GTK_FILE_CHOOSER (info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif if (i) gtk_file_chooser_set_create_folders (chooser, TRUE); for (j=0; j<2; j++) { filter[j] = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter[j]), file_type[j]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter[j]), file_ext[j]); gtk_file_chooser_add_filter (chooser, filter[j]); } file_chooser_set_current_folder (chooser); osp.a = i; osp.b = pactive; #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_on_isaacs_port), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_on_isaacs_port), NULL); #endif } activew = activep; update_insert_combos (); } /*! \fn void to_read_pos () \brief send atomic coordinates to Fortran90 */ void to_read_pos () { int i, j, k; double * x, * y, * z; double lat[3]; x = allocdouble(active_project -> steps*active_project -> natomes); y = allocdouble(active_project -> steps*active_project -> natomes); z = allocdouble(active_project -> steps*active_project -> natomes); k = 0; lat[0] = lat[1] = lat[2] = 0.0; if (active_cell -> crystal) { for (i=0; i<3; i++) { for (j=0; j<3; j++) lat[i] -= active_box -> vect[j][i]/2.0; } } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { x[k] = active_project -> atoms[i][j].x + lat[0]; y[k] = active_project -> atoms[i][j].y + lat[1]; z[k] = active_project -> atoms[i][j].z + lat[2]; k ++; } } read_pos_ (x, y, z); g_free (x); x = NULL; g_free (y); y = NULL; g_free (z); z = NULL; } GtkWidget * read_box; GtkWidget * all_sp_box; GtkWidget * sa_lab[2]; GtkWidget * sa_entry[2]; GtkWidget * read_this; int read_spec; /*! \fn void check_read_sa () \brief reading CPMD/VASP trajectory, testing parameters to active the read capabilty */ void check_read_sa () { int i, j, k; i = j = 0; for (k=0; k nspec; k++) { i += this_reader -> nsps[k]; j += (this_reader -> label[k]) ? 1: 0; } if (i == this_reader -> natomes && j == this_reader -> nspec) { widget_set_sensitive (read_this, 1); } else { widget_set_sensitive (read_this, 0); } } /*! \fn void update_sa_info (int sid) \brief reading CPMD/VASP trajectory, update chemical species info \param sid the species id */ void update_sa_info (int sid) { gchar * str = g_strdup_printf ("Label of atomic spec. N° %d:", sid+1); gtk_label_set_text (GTK_LABEL(sa_lab[0]), str); g_free (str); if (this_reader -> label[sid]) { update_entry_text (GTK_ENTRY(sa_entry[0]), this_reader -> label[sid]); str = g_strdup_printf ("Number of %s atom(s):", this_reader -> label[sid]); } else { update_entry_text (GTK_ENTRY(sa_entry[0]), ""); str = g_strdup_printf ("Number of atom(s) for spec. N° %d:", sid+1); } gtk_label_set_text (GTK_LABEL(sa_lab[1]), str); g_free (str); if (this_reader -> nsps[sid]) { update_entry_int (GTK_ENTRY(sa_entry[1]), this_reader -> nsps[sid]); } else { update_entry_text (GTK_ENTRY(sa_entry[1]), ""); } read_spec = sid; } /*! \fn G_MODULE_EXPORT void update_sa (GtkEntry * res, gpointer data) \brief reading CPMD/VASP trajectory, set the number of chemical species \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_sa (GtkEntry * res, gpointer data) { int i, v; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); if (i == 0) { if (this_reader -> label[read_spec]) g_free (this_reader -> label[read_spec]); this_reader -> label[read_spec] = NULL; this_reader -> label[read_spec] = g_strdup_printf ("%s", m); update_sa_info (read_spec); } else { v= (int)atof(m); if (v > 0) { this_reader -> nsps[read_spec] = v; } update_entry_int (res, this_reader -> nsps[read_spec]); } check_read_sa (); } /*! \fn G_MODULE_EXPORT void changed_spec_combo (GtkComboBox * box, gpointer data) \brief reading CPMD/VASP trajectory, change the active species \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void changed_spec_combo (GtkComboBox * box, gpointer data) { update_sa_info (gtk_combo_box_get_active (box)); } /*! \fn void prepare_sp_box () \brief eading CPMD/VASP trajectory, prepare the species combo box */ void prepare_sp_box () { int i; if (all_sp_box) { for (i=0; i<2; i++) { sa_lab[i] = destroy_this_widget(sa_lab[i]); sa_entry[i] = destroy_this_widget(sa_entry[i]); } all_sp_box = destroy_this_widget(all_sp_box); } widget_set_sensitive (read_this, 0); all_sp_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, read_box, all_sp_box, FALSE, FALSE, 20); GtkWidget * hbox; add_box_child_start (GTK_ORIENTATION_VERTICAL, all_sp_box, markup_label("Chemical species info:", 200, -1, 0.5, 0.5), FALSE, FALSE, 0); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_sp_box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Species: ", 100, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * combo; combo = create_combo (); gchar * str; for (i=0; i nspec; i++) { str = g_strdup_printf ("N°%d", i+1); gtk_combo_box_text_append_text ((GtkComboBoxText *)combo, str); g_free (str); } gtk_combo_box_set_active (GTK_COMBO_BOX(combo), 0); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(changed_spec_combo), NULL); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, combo, FALSE, FALSE, 5); for (i=0; i<2; i++) { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, all_sp_box, hbox, FALSE, FALSE, 5); sa_lab[i] = markup_label("", 250, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sa_lab[i], FALSE, FALSE, 5); sa_entry[i] = create_entry (G_CALLBACK(update_sa), 100, 15, FALSE, GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, sa_entry[i], FALSE, FALSE, 0); } show_the_widgets (read_box); update_sa_info (0); } /*! \fn G_MODULE_EXPORT void update_at_sp (GtkEntry * res, gpointer data) \brief reading CPMD/VASP trajectory, changing number of atomes or species \param res the GtkEntry sending the signal \param data the associated data pointer (int *) 0 = atomes, 1 = species */ G_MODULE_EXPORT void update_at_sp (GtkEntry * res, gpointer data) { int i, v; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); gboolean up = FALSE; v = (int)atof(m); if (i == 0) { this_reader -> natomes = (v > 0) ? v : 0; update_entry_int (res, this_reader -> natomes); } else { if (v != this_reader -> nspec) { this_reader -> nspec = (v > 0) ? v : 0; if (this_reader -> nspec) { if (this_reader -> nsps) g_free (this_reader -> nsps); this_reader -> nsps = allocint (v); if (this_reader -> z) g_free (this_reader -> z); this_reader -> z = allocdouble (v); if (this_reader -> label) g_free (this_reader -> label); this_reader -> label = g_malloc0 (v*sizeof*this_reader -> label); } up = TRUE; } update_entry_int (res, this_reader -> nspec); } if (up) prepare_sp_box(); } int reading_vas_trj; /*! \fn int prep_chem_data () \brief prepare chemical data to read CPMD/VASP file */ int prep_chem_data () { int i; double z; for (i=0; i nspec; i++) { z = get_z_from_periodic_table (this_reader -> label[i]); if (! z) return 0; this_reader -> z[i] = z; } return 1; } /*! \fn G_MODULE_EXPORT void run_to_read_trj_or_vas (GtkDialog * dialog, gint response_id, gpointer data) \brief reading CPMD/VASP trajectory: run the dialog \param dialog the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_to_read_trj_or_vas (GtkDialog * dialog, gint response_id, gpointer data) { int id = GPOINTER_TO_INT(data); switch (response_id) { case GTK_RESPONSE_APPLY: if (prep_chem_data()) { reading_vas_trj = open_coord_file (active_project -> coordfile, id); } else { reading_vas_trj = 3; } break; default: reading_vas_trj = 3; break; } destroy_this_dialog (dialog); } /*! \fn int to_read_trj_or_vas (int ff) \brief reading CPMD/VASP trajectory - prepare the dialog \param ff file type */ int to_read_trj_or_vas (int ff) { int i; gchar * rlabel[2]={"Total number of atom(s):", "Number of chemical species:"}; GtkWidget * dialog = dialogmodal ("Data to read CPMD / VASP trajectory", GTK_WINDOW(MainWindow)); read_this = gtk_dialog_add_button (GTK_DIALOG (dialog), "Apply", GTK_RESPONSE_APPLY); GtkWidget * vbox = dialog_get_content_area (dialog); widget_set_sensitive (read_this, 0); GtkWidget * rentry; GtkWidget * hbox; for (i=0; i<2; i++) { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(rlabel[i], 200, -1, 0.0, 0.5), FALSE, FALSE, 5); rentry = create_entry (G_CALLBACK(update_at_sp), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_text (GTK_ENTRY(rentry), ""); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rentry, FALSE, FALSE, 5); } read_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, read_box, FALSE, FALSE, 5); run_this_gtk_dialog (dialog, G_CALLBACK(run_to_read_trj_or_vas), GINT_TO_POINTER(ff)); return reading_vas_trj; } /*! \fn void cell_data_from_pdb_ (float * a, float * b, float * c, float * alp, float * bet, float * gam) \brief update cell parameters from the data in the PDB file \param a a \param b b \param c c \param alp alpha \param bet beta \param gam gamma */ void cell_data_from_pdb_ (float * a, float * b, float * c, float * alp, float * bet, float * gam) { active_box -> param[0][0] = * a; active_box -> param[0][1] = * b; active_box -> param[0][2] = * c; active_box -> param[1][0] = * alp; active_box -> param[1][1] = * bet; active_box -> param[1][2] = * gam; // In a PDB file it is required to turn off PBC // The box usually barely encompass the molecule active_cell -> pbc = 0; active_cell -> ltype = 1; } int npt_selection; gchar * npt_file; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_read_npt_data (GtkNativeDialog * info, gint response_id, gpointer data) \brief read NPT data associated with atomic coordinates: run the dialog GTK4 callback \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_read_npt_data (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_read_npt_data (GtkDialog * info, gint response_id, gpointer data) \brief read NPT data associated with atomic coordinates: run the dialog GTK3 callback \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_read_npt_data (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { npt_file = file_chooser_get_file_name (chooser); npt_selection = iask ("Please select the file format of the NPT cell data", "Select format :", 3, MainWindow); } else { npt_selection = -1; } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } /*! \fn int read_npt_data () \brief read NPT data associated with atomic coordinates: setup the dialog */ int read_npt_data () { GtkFileFilter * filter[2]; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser ("Read cell data for NPT molecular dynamics", GTK_WINDOW(MainWindow), GTK_FILE_CHOOSER_ACTION_OPEN, "Open"); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); filter[0] = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter[0]), "DAT files (*.dat)"); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter[0]), "*.dat"); gtk_file_chooser_add_filter (chooser, filter[0]); filter[1] = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter[1]), "All files (*)"); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter[1]), "*"); gtk_file_chooser_add_filter (chooser, filter[1]); npt_file = NULL; #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_read_npt_data), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_read_npt_data), NULL); #endif return (npt_selection < 0) ? 0 : open_cell_file (npt_selection, npt_file); } /*! \fn int open_coordinate_file (int id) \brief try to open coordinate file, type is based of id \param id file type to open */ int open_coordinate_file (int id) { struct timespec sta_time; struct timespec sto_time; int result; int length = strlen(active_project -> coordfile); clock_gettime (CLOCK_MONOTONIC, & sta_time); this_reader = g_malloc0(sizeof*this_reader); // Set default message type to warning this_reader -> mid = 1; switch (id) { case 0: // XYZ file result = open_coord_file (active_project -> coordfile, id); // result = read_xyz_ (active_project -> coordfile, & length, & npt); break; case 1: // XYZ file NPT result = open_coord_file (active_project -> coordfile, id); // result = read_xyz_ (active_project -> coordfile, & length, & npt); if (! result) result = read_npt_data (); break; case 2: // Chem3D file result = open_coord_file (active_project -> coordfile, id); // result = read_c3d_ (active_project -> coordfile, & length); break; case 3: // CPMD TRJ file result = to_read_trj_or_vas (id); break; case 4: // CPMD TRJ file NPT result = to_read_trj_or_vas (id); if (! result) result = read_npt_data (); break; case 5: // VASP XDATCAR file result = to_read_trj_or_vas (id); break; case 6: // VASP XDATCAR file NPT result = to_read_trj_or_vas (id); if (! result) result = read_npt_data (); break; case 7: // PDB file // result = open_coord_file (active_project -> coordfile, id); result = read_pdb_ (active_project -> coordfile, & length); break; case 8: // PDB file // result = open_coord_file (active_project -> coordfile, id); result = read_pdb_ (active_project -> coordfile, & length); break; case 9: // CIF file building the crystal result = open_coord_file (active_project -> coordfile, 9); break; case 10: // CIF file using symmetry positions result = open_coord_file (active_project -> coordfile, 10); break; case 11: // DL-POLY file result = open_coord_file (active_project -> coordfile, 11); break; default: result = 2; break; } clock_gettime (CLOCK_MONOTONIC, & sto_time); g_print ("Time to read atomic coordinates: %s\n", calculation_time(FALSE, get_calc_time (sta_time, sto_time))); if (this_reader) { if (this_reader -> info && (! silent_input || cif_use_symmetry_positions)) { switch (this_reader -> mid) { case 0: show_error (this_reader -> info, 0, MainWindow); break; case 1: show_warning (this_reader -> info, MainWindow); break; } } if (this_reader) { if (this_reader -> info) g_free (this_reader -> info); if (this_reader -> z) g_free (this_reader -> z); if (this_reader -> nsps) g_free (this_reader -> nsps); if (this_reader -> label) g_free (this_reader -> label); if (this_reader -> object_list) g_free (this_reader -> object_list); if (this_reader -> u_atom_list) g_free (this_reader -> u_atom_list); if (this_reader -> coord) g_free (this_reader -> coord); if (this_reader -> lot) g_free (this_reader -> lot); if (this_reader -> sym_pos) g_free (this_reader -> sym_pos); if (this_reader -> wyckoff) g_free (this_reader -> wyckoff); if (this_reader -> occupancy) g_free (this_reader -> occupancy); if (this_reader -> multi) g_free (this_reader -> multi); if (this_reader -> lattice.sp_group) g_free (this_reader -> lattice.sp_group); if (this_reader -> lattice.box) g_free (this_reader -> lattice.box); g_free (this_reader); this_reader = NULL; } } switch (result) { case 1: show_error ("Error loading atomic coordinates:\nfile does not exist", 0, MainWindow); break; case 2: show_error ("Error loading coordinates file: format not supported", 0, MainWindow); break; case 3: show_error ("Error at input: impossible to process input file data", 0, MainWindow); break; default: if (id > 6 && id < 9) { clock_gettime (CLOCK_MONOTONIC, & sta_time); if (! prep_data_ ()) { show_error ("Error while parsing the chemical information\n" "please check carefully the coordinates file", 0, MainWindow); result = 4; } clock_gettime (CLOCK_MONOTONIC, & sto_time); g_print ("Time to prepare data: %s\n", calculation_time(FALSE, get_calc_time (sta_time, sto_time))); } break; } return result; } GtkFileFilter * filter[NCFORMATS+1]; int pactive; /*! \fn void open_this_coordinate_file (int format, gchar * proj_name) \brief open coordinate file format, if successful add to workspace \param format the format of the file that contains the atomic coordinates \param proj_name the project name to use, if any */ void open_this_coordinate_file (int format, gchar * proj_name) { active_project -> newproj = FALSE; clock_gettime (CLOCK_MONOTONIC, & start_time); if (open_coordinate_file (format) == 0) { clock_gettime (CLOCK_MONOTONIC, & stop_time); g_print ("Time to open coordinate file: %s\n", calculation_time(FALSE, get_calc_time (start_time, stop_time))); active_project -> tfile = format; if (proj_name) { active_project -> name = g_strdup_printf ("%s", proj_name); } else { gchar * str = g_path_get_basename (active_project -> coordfile); active_project -> name = g_strdup_printf ("%s", substitute_string (str, g_strdup_printf (".%s", coord_files_ext[format]), NULL)); g_free (str); } on_edit_activate (NULL, GINT_TO_POINTER(0)); if (format != 1 && format != 4 && format != 6 && format != 9 && format != 10 && format != 11) on_edit_activate (NULL, GINT_TO_POINTER(4)); initcutoffs (active_chem, active_project -> nspec); on_edit_activate (NULL, GINT_TO_POINTER(2)); active_project_changed (activep); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; chemistry_ (); apply_project (TRUE); active_project_changed (activep); if ((format == 9 || format == 10) && active_cell -> has_a_box) { #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_rep[0], TRUE); set_rep (active_glwin -> ogl_rep[0], & active_glwin -> colorp[0][0]); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_clones[0], TRUE); widget_set_sensitive (active_glwin -> ogl_clones[0], active_glwin -> allbonds[1]); show_hide_clones (active_glwin -> ogl_clones[0], active_glwin); #endif shift_it (vec3 (0.0, 0.0, 0.0), 1, activep); active_glwin -> wrapped = TRUE; } add_project_to_workspace (); if (format == 9 && cif_use_symmetry_positions) { gchar * file_name = g_strdup_printf ("%s", active_project -> coordfile); gchar * proj_name = g_strdup_printf ("%s - symmetry position(s)", active_project -> name); init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s", file_name); g_free (file_name); open_this_coordinate_file (10, proj_name); g_free (proj_name); } } else { to_close_this_project (pactive, active_project); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_on_coord_port (GtkNativeDialog * info, gint response_id, gpointer data) \brief export or import atomic coordinates: run dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_coord_port (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_on_coord_port (GtkDialog * info, gint response_id, gpointer data) \brief export or import atomic coordinates: run dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_coord_port (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif int i, j, k, l, m; GtkFileFilter * tmp; int format; int car_to_au; i = GPOINTER_TO_INT(data); gchar * tmp_str; switch (response_id) { case GTK_RESPONSE_ACCEPT: tmp = gtk_file_chooser_get_filter (chooser); active_project -> coordfile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif j = 0; while (tmp != filter[j]) j++; if (i == 0) { if (j == NCFORMATS) { j = iask ("Please select the file format of the atomic coordinates", "Select format :", 2, MainWindow); } open_this_coordinate_file (j, NULL); } else { if (j < 2) { format = iask ("Please select the format of the atomic coordinates", "Select format :", 1, MainWindow); } else { format = 0; } active_cell -> frac = (format < 2) ? 0 : format - 1; car_to_au = (format == 1) ? 1 : 0; if (j < 2) { m = (active_cell -> npt) ? active_project -> steps : 1; for (l=0; l box[l].vect, active_cell -> box[l].param[0], active_cell -> box[l].param[1], & active_cell -> ltype, & active_cell -> frac, & active_cell -> pbc); } to_read_pos (); } int length = strlen (active_project -> coordfile); for (l=1; l nspec+1; l++) { m = strlen(active_chem -> label[l-1]); send_label_ (& l, & m, active_chem -> label[l-1]); } switch (j) { case 0: k = write_xyz_ (active_project -> coordfile, & length, & active_cell -> frac, & car_to_au); break; case 1: k = write_c3d_ (active_project -> coordfile, & length, & active_cell -> frac, & car_to_au); break; } if (k) { tmp_str = g_strdup_printf ("Impossible to export the atomic coordinates\nError code: %d", k); show_error (tmp_str, 0, MainWindow); g_free (tmp_str); } active_project_changed (pactive); } break; default: if (i == 0) { to_close_this_project (pactive, active_project); } #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif break; } } /*! \fn G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data) \brief export or import atomic coordinates: prepare dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data) { int i, j; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif GtkFileChooser * chooser; gchar * tmp_str; int num_files[2]={NCFORMATS, 2}; const gchar * str[2]={"Import atomic coordinates", "Export atomic coordinates"}; const gchar * res[2]={"Open", "Save"}; char * out_files[2] = {"XYZ file", "Chem3D file"}; char * out_ext[2]={"xyz", "c3d"}; GtkFileChooserAction act[2]={GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; pactive = activep; i = GPOINTER_TO_INT (data); if ((nprojects > 0 && get_project_by_id(activew) -> natomes) || i == 0) { if (i == 0) { init_project (TRUE); } else { active_project_changed (activew); } tmp_str = g_strdup_printf ("%s - %s", prepare_for_title(active_project -> name), str[i]); info = create_file_chooser (tmp_str, GTK_WINDOW(MainWindow), act[i], res[i]); g_free (tmp_str); chooser = GTK_FILE_CHOOSER(info); if (i) gtk_file_chooser_set_create_folders (chooser, TRUE); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif for (j=0; j%s is empty ... nothing to be saved\n", get_project_by_id(activew) -> name); show_warning (tmp_str, MainWindow); g_free (tmp_str); } } activew = activep; update_insert_combos (); } Atomes-GNU-1.1.14/src/gui/callbacks.h000066400000000000000000000042761457665371200171510ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file callbacks.h * @short Callback declarations for main window * @author Sébastien Le Roux */ /* * This header file: 'callbacks.h' * * Contains: - Callback declarations for main window */ #ifndef CALLBACKS_H_ #define CALLBACKS_H_ extern void fill_tool_model (); void free_data (); void quit_gtk (); void show_Help (); G_MODULE_EXPORT int open_save_workspace (FILE * fp, int act); G_MODULE_EXPORT int open_save (FILE * fp, int i, int pid, int aid, int np, gchar * pfile); G_MODULE_EXPORT void on_close_workspace (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_open_save_activate (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_save_as_activate (GtkWidget * widg, gpointer data); extern void open_this_isaacs_xml_file (gchar * profile, int ptoc, gboolean visible); G_MODULE_EXPORT void on_isaacs_port (GtkWidget * widg, gpointer data); extern void open_this_coordinate_file (int format, gchar * proj_name); G_MODULE_EXPORT void on_coord_port (GtkWidget * widg, gpointer data); void to_read_pos (); void display_distances (); void run_project (); void apply_project (gboolean showtools); G_MODULE_EXPORT void on_Bonds_activate (); G_MODULE_EXPORT void on_Help_released (GtkButton * but, gpointer data); G_MODULE_EXPORT void on_check_toggled (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void expanding (GtkExpander * expander, gpointer data); G_MODULE_EXPORT void on_show_curve_toolbox (GtkWidget * widg, gpointer data); #endif Atomes-GNU-1.1.14/src/gui/chainscall.c000066400000000000000000000305361457665371200173240ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file chainscall.c * @short Callbacks for the chains statistics calculation dialog * @author Sébastien Le Roux */ /* * This file: 'chainscall.c' * * Contains: * - The callbacks for the chains statistics calculation dialog * * List of functions: void initchn (); void update_chains_menus (glwin * view); void update_chains_view (project * this_proj); void clean_chains_data (glwin * view); G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "initcoord.h" #include "submenus.h" extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern void clean_coord_window (project * this_proj); /*! \fn void initchn () \brief initialize the curve widgets for the chains statistics calculation */ void initchn () { int i; active_project -> curves[CH][0] -> name = g_strdup_printf ("Chains - Cc(n)[All]"); for (i=0 ; i nspec ; i++) { active_project -> curves[CH][i+1] -> name = g_strdup_printf ("Chains - Cc(n)[%s]", active_chem -> label[i]); } addcurwidgets (activep, CH, 0); active_project -> initok[CH] = TRUE; } #ifdef GTK3 /*! \fn void update_chains_menus (glwin * view) \brief update the chains statistics menus \param view the gliwn to update the menu from */ void update_chains_menus (glwin * view) { GtkWidget * menu; view -> ogl_chains[0] = destroy_this_widget (view -> ogl_chains[0]); view -> ogl_chains[0] = menu_item_new_with_submenu ("Chain(s)", view -> chains, add_menu_coord (view, 0, 9)); menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (view -> ogl_coord[0])); if (GTK_IS_WIDGET(menu)) { gtk_menu_shell_insert (GTK_MENU_SHELL(menu), view -> ogl_chains[0], 3); show_the_widgets (view -> ogl_chains[0]); } } #endif /*! \fn void update_chains_view (project * this_proj) \brief update the chains statistics text view after the calculation \param this_proj the target project */ void update_chains_view (project * this_proj) { int i, j, k, l; gchar * nelt; gchar * col; gchar * tab; gchar * cid; gchar * str; if (this_proj -> text_buffer[CH+OT] == NULL) this_proj -> text_buffer[CH+OT] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[CH+OT]); j = this_proj -> csparam[0]; if (! j) { nelt = g_strdup_printf ("All"); col = NULL; } else { nelt = g_strdup_printf ("%s", this_proj -> chemistry -> label[j-1]); col = textcolor(j-1); } print_info ("\n\nChain statistics\n\n", "heading", this_proj -> text_buffer[CH+OT]); if (this_proj -> csparam[1]) { print_info (" * only AAAA chains have been considered\n", "italic", this_proj -> text_buffer[CH+OT]); } if (this_proj -> csparam[2]) { print_info (" * only ABAB chains have been considered\n", "italic", this_proj -> text_buffer[CH+OT]); } if (this_proj -> csparam[3]) { print_info (" * homopolar bonds can not shorten the chains\n", "italic", this_proj -> text_buffer[CH+OT]); } if (this_proj -> csparam[4]) { print_info (" * only 1-(2)", "italic", this_proj -> text_buffer[CH+OT]); print_info ("n", "sub_italic", this_proj -> text_buffer[CH+OT]); print_info ("-1 chains have been considered, ie. isolated chains\n", "italic", this_proj -> text_buffer[CH+OT]); } print_info ("\n Atom(s) used to start the search: ", NULL, this_proj -> text_buffer[CH+OT]); print_info (nelt, col, this_proj -> text_buffer[CH+OT]); if (j != 0) print_info (" atom(s) only", NULL, this_proj -> text_buffer[CH+OT]); if (this_proj -> steps > 1) { print_info ("\n Average number of chains per configuration: ", NULL, this_proj -> text_buffer[CH+OT]); str = g_strdup_printf ("%f", this_proj -> csdata[0]); print_info (str, "bold", this_proj -> text_buffer[CH+OT]); g_free (str); str = g_strdup_printf (" +/- %f\n", this_proj -> csdata[1]); print_info (str, "bold", this_proj -> text_buffer[CH+OT]); g_free (str); } else { print_info ("\n Total number of chains: ", NULL, this_proj -> text_buffer[CH+OT]); str = g_strdup_printf ("%f\n", this_proj -> csdata[0]); print_info (str, "bold", this_proj -> text_buffer[CH+OT]); g_free (str); } if (this_proj -> steps > 1) { print_info ("\n\t n Av. by step \tCc(n)[", "bold", this_proj -> text_buffer[CH+OT]); print_info (nelt, col, this_proj -> text_buffer[CH+OT]); if (j == this_proj -> nspec) { print_info ("]\t +/-\n", "bold", this_proj -> text_buffer[CH+OT]); } else { print_info ("]\t +/-\n", "bold", this_proj -> text_buffer[CH+OT]); } } else { print_info ("\n\t n\tNumber\t\tCc(n)[", "bold", this_proj -> text_buffer[CH+OT]); print_info (nelt, col, this_proj -> text_buffer[CH+OT]); print_info ("]\n", NULL, this_proj -> text_buffer[CH+OT]); } tab = NULL; cid = NULL; k = this_proj -> csparam[0]; l = (! k) ? this_proj -> natomes : this_proj -> chemistry -> nsps[k-1]; j = 1; for ( i=1 ; i < this_proj -> csparam[5] ; i++ ) { if (this_proj -> curves[CH][k] -> data[1][i] != 0.0) { j ++; if (j - 2*(j/2) == 0) { tab = g_strdup_printf ("grey_back"); cid = g_strdup_printf ("bold_grey_back"); } else { tab = NULL; cid = g_strdup_printf ("bold"); } print_info ("\t", NULL, this_proj -> text_buffer[CH+OT]); if (i < 9) { print_info (" ",cid, this_proj -> text_buffer[CH+OT]); } str = g_strdup_printf("%d", i+1); print_info (str, cid, this_proj -> text_buffer[CH+OT]); g_free (str); str = g_strdup_printf("\t%f\t", l*this_proj -> curves[CH][k] -> data[1][i]); print_info (str, tab, this_proj -> text_buffer[CH+OT]); g_free (str); str = g_strdup_printf("%f\t", this_proj -> curves[CH][k] -> data[1][i]); print_info (str, tab, this_proj -> text_buffer[CH+OT]); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> curves[CH][k] -> err[i]); print_info (str, tab, this_proj -> text_buffer[CH+OT]); g_free (str); } print_info ("\n", NULL, this_proj -> text_buffer[CH+OT]); if (tab != NULL) { g_free (tab); } if (cid != NULL) { g_free (cid); } } } print_info (calculation_time(TRUE, this_proj -> calc_time[CH]), NULL, this_proj -> text_buffer[CH+OT]); g_free (nelt); if (col != NULL) { g_free (col); } } /*! \fn void clean_chains_data (glwin * view) \brief cleaning the OpenGL data related to chain statistics \param view the gliwn to clean the data from */ void clean_chains_data (glwin * view) { project * this_proj = get_project_by_id(view -> proj); if (this_proj -> coord -> totcoord[9]) { if (this_proj -> coord -> ntg[9]) g_free (this_proj -> coord -> ntg[9]); this_proj -> coord -> ntg[9] = NULL; if (this_proj -> coord -> geolist[9][0]) g_free (this_proj -> coord -> geolist[9][0]); this_proj -> coord -> geolist[9][0] = NULL; this_proj -> coord -> totcoord[9] = 0; } if (view -> all_chains) g_free (view -> all_chains); view -> all_chains = NULL; if (view -> num_chains) g_free (view -> num_chains); view -> num_chains = NULL; if (view -> gcid[9]) g_free (view -> gcid[9]); view -> gcid[9] = NULL; view -> chains = FALSE; view -> chain_max = 0; int i, j; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (this_proj -> atoms[i][j].chain) { g_free (this_proj -> atoms[i][j].chain); this_proj -> atoms[i][j].chain = NULL; } } } } /*! \fn G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data) \brief compute chains statistics \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_chains_released (GtkWidget * widg, gpointer data) { int j, k; cutoffsend (); //if (active_project -> steps > 1) statusb = 1; if (! active_project -> initok[CH]) initchn (); active_project -> csparam[6] = 0; if (! active_project -> dmtx) active_project -> dmtx = run_distance_matrix (widg, 6, 0); if (active_project -> dmtx) { clean_curves_data (CH, 0, active_project -> numc[CH]); clean_chains_data (active_glwin); active_glwin -> all_chains = g_malloc0 (active_project -> steps*sizeof*active_glwin -> all_chains); active_glwin -> num_chains = g_malloc0 (active_project -> steps*sizeof*active_glwin -> num_chains); for (j=0; j steps; j++) { active_glwin -> all_chains[j] = g_malloc0 (active_project -> csparam[5]*sizeof*active_glwin -> all_chains[j]); active_glwin -> num_chains[j] = allocint (active_project -> csparam[5]); for (k=0; k < active_project -> natomes; k++) { if (active_project -> atoms[j][k].chain) g_free (active_project -> atoms[j][k].chain); active_project -> atoms[j][k].chain = NULL; active_project -> atoms[j][k].chain = g_malloc0 (active_project -> csparam[5]*sizeof*active_project -> atoms[j][k].chain); } } k = 1; prepostcalc (widg, FALSE, CH, 0, opac); clock_gettime (CLOCK_MONOTONIC, & start_time); j = initchains_ (& active_project -> csparam[0], & active_project -> csparam[1], & active_project -> csparam[2], & active_project -> csparam[3], & active_project -> csparam[4], & active_project -> csparam[5], & active_project -> csearch); clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> calc_time[CH] = get_calc_time (start_time, stop_time); if (j == 0) { show_error ("The chain statistics calculation has failed", 0, widg); } else if (j == 2) { gchar * str = g_strdup_printf ("\tThe chain statistics have failed !\n\n" "The number of chain per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !", active_project -> csearch); show_error (str, 0, widg); g_free (str); j = 0; } prepostcalc (widg, TRUE, CH, j, 1.0); } else { show_error ("The nearest neighbors table calculation has failed", 0, widg); } if (active_coord -> totcoord[9]) { active_project -> csparam[6] = 1; active_glwin -> chains = TRUE; active_glwin -> chain_max = active_project -> csparam[5]; update_chains_view (active_project); } gtk_widget_show (curvetoolbox); clean_coord_window (active_project); fill_tool_model (); #ifdef GTK3 update_chains_menus (active_glwin); #endif } /*! \fn void save_chains_data_ (int * taille, double ectrc[*taille], double * rpstep, double * ectrpst) \brief get chains statistics results form Fortran90 \param taille number of data points \param ectrc standard deviation per MD step \param rpstep chains per MD step \param ectrpst standard deviation */ void save_chains_data_ (int * taille, double ectrc[* taille], double * rpstep, double * ectrpst) { int i; active_project -> csdata[0] = * rpstep; active_project -> csdata[1] = * ectrpst; i = active_project -> csparam[0]; active_project -> curves[CH][i] -> err = duplicate_double (* taille, ectrc); } Atomes-GNU-1.1.14/src/gui/edit_menu.c000066400000000000000000000623371457665371200172000ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file edit_menu.c * @short Creation of the edition dialogs * @author Sébastien Le Roux */ /* * This file: 'edit_menu.c' * * Contains: * - The creation of the edition dialogs * * List of functions: gboolean test_vol (double box[2][3], double vect[3][3]); gboolean test_pbc (int pbc, int frac, double box[2][3], double vect[3][3]); gboolean has_box_changed (); gboolean have_vectors_changed (); gboolean test_cutoffs (); void edit_box (GtkWidget * vbox); void edit_chem (GtkWidget * vbox); void init_box_calc (); void prep_box (int id); void test_chem (); void edit_bonds (GtkWidget * vbox); G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_pbc (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_frac (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void run_vectors (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void on_vectors_clicked (GtkButton * but, gpointer data); G_MODULE_EXPORT void update_chemistry (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void on_spec_changed (GtkComboBox * combo, gpointer data); G_MODULE_EXPORT void on_rad_changed (GtkComboBox * combo, gpointer data); G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_xcor (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_on_edit_activate (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glwindow.h" char * box_p[2]={"Edges [Å]", "Angles [°]"}; char * box_prop[2][3]={{"a", "b", "c"}, {"alpha - α", "beta - β", "gamma - ɣ"}}; char * chem_lab[CHEM_PARAMS+2]={"Atom:", "Element:", "Atomic number", "Atomic mass:", "Radius", "Neutrons scattering length:", "X-rays scattering length:"}; char * chem_rad[4]={"Covalent", "Ionic", "van Der Waals", "In crystal"}; char * chem_unit[4]={" g/mol", " Å", " fm", " e.u"}; char * edit_prop[4]={"Chemistry and physics", "Box and periodicity", "Bond cutoffs", "Lattice vectors"}; char * vect_name[3]={"a", "b", "c"}; char * vect_comp[3]={"x", "y", "z"}; GtkWidget * frac_box; GtkWidget * spec_box; GtkWidget * rad_box; GtkWidget * chem_spec[2]; GtkWidget * chem_entry[CHEM_PARAMS-1]; GtkWidget * vect_entry[9]; double * tmp_chem[CHEM_PARAMS]; double tmp_box[2][3]; double tmp_vect[3][3]; int tmp_pbc, tmp_frac; int tmp_xcor, tmp_lat; dint t_box[9]; extern double * tmpcut; extern void update_cutoffs (project * this_proj); extern void cut_box (project * this_proj, GtkWidget * vbox); /*! \fn G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data) \brief update lattice parameters \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data) { dint * id = (dint *)data; const gchar * m = entry_get_text (entry); double v = atof(m); if (v >= 0.0) { tmp_box[id -> a][id -> b] = v; } update_entry_double (entry, v); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data) \brief use PBC ? \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_pbc (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_pbc (GtkToggleButton * Button, gpointer data) \brief use PBC ? \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_pbc (GtkToggleButton * Button, gpointer data) #endif { #ifdef GTK4 tmp_pbc = gtk_check_button_get_active (Button); #else tmp_pbc = gtk_toggle_button_get_active (Button); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data) \brief use fractional coordinates \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_frac (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_frac (GtkToggleButton * Button, gpointer data) \brief use fractional coordinates \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_frac (GtkToggleButton * Button, gpointer data) #endif { #ifdef GTK4 tmp_frac = gtk_check_button_get_active (Button); #else tmp_frac = gtk_toggle_button_get_active (Button); #endif /*if (gtk_toggle_button_get_active (Button)) { widget_set_sensitive (frac_box, 1); gtk_combo_box_set_active (GTK_COMBO_BOX(frac_box), 0); } else { gtk_combo_box_set_active (GTK_COMBO_BOX(frac_box), -1); widget_set_sensitive (frac_box, 0); }*/ } /*! \fn G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data) \brief update lattice vector component \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data) { const gchar * m = entry_get_text (entry); double v = atof(m); update_entry_double (entry, v); } /*! \fn G_MODULE_EXPORT void run_vectors (GtkDialog * win, gint response_id, gpointer data) \brief lattice vectors: run the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_vectors (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { int i, j, k; const gchar * m; double v; i = 0; for (j=0; j<3; j++) { for (k=0; k<3; k++) { m = entry_get_text (GTK_ENTRY(vect_entry[i])); v = atof(m); tmp_vect[j][k] = v; i ++; } } } destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void on_vectors_clicked (GtkButton * but, gpointer data) \brief lattice vectors - prepare the dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_vectors_clicked (GtkButton * but, gpointer data) { int i, j, k; GtkWidget * win = dialog_cancel_apply (edit_prop[3], MainWindow, FALSE); GtkWidget * table = gtk_grid_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_get_content_area (win), table, FALSE, FALSE, 5); k = 0; for (i=0; i<4; i++) { if (i > 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_name[i-1], 30, -1, 0.5, 0.5), 0, i, 1, 1); } for (j=0; j<4; j++) { if (j > 0) { if (i == 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_comp[j-1], -1, 30, 0.5, 0.5), j, 0, 1, 1); } else { vect_entry[k] = create_entry (G_CALLBACK(update_vect), 100, 15, FALSE, NULL); update_entry_double (GTK_ENTRY(vect_entry[k]), tmp_vect[i-1][j-1]); gtk_grid_attach (GTK_GRID (table), vect_entry[k], j, i, 1, 1); k ++; } } } } run_this_gtk_dialog (win, G_CALLBACK(run_vectors), NULL); } /*! \fn void edit_box (GtkWidget * vbox) \brief creation of the edit cell widgets \param vbox GtkWidget that will receive the data */ void edit_box (GtkWidget * vbox) { int i, j, k; GtkWidget * entry; GtkWidget * hbox; tmp_pbc = active_cell -> pbc; tmp_frac = active_cell -> frac; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button ("Apply Periodic Boundary Conditions", -1, 40, tmp_pbc, G_CALLBACK(toggle_pbc), NULL), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button ("Fractional coordinates", -1, 40, tmp_frac, G_CALLBACK(toggle_frac), NULL), FALSE, FALSE, 0); GtkWidget * table = gtk_grid_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, table, FALSE, FALSE, 0); k = 0; for (i=0; i<3; i++) { for (j=0; j<3; j++, k++) { if (i < 2) tmp_box[i][j] = active_box -> param[i][j]; tmp_vect[i][j] = active_box -> vect[i][j]; t_box[k].a = i; t_box[k].b = j; } } tmp_lat = active_cell -> ltype; k = 0; for (i=0; i<2; i++) { gtk_grid_attach (GTK_GRID (table), markup_label(box_p[i], -1, 50, 0.5, 0.5), 1, i+2*i, 1, 1); for (j=0; j<3; j++, k++) { gtk_grid_attach (GTK_GRID (table), markup_label(box_prop[i][j], -1, -1, 0.5, 0.5), j, i+2*i+1, 1, 1); entry = create_entry (G_CALLBACK(update_box), 100, 15, FALSE, (gpointer)& t_box[k]); update_entry_double (GTK_ENTRY(entry), tmp_box[i][j]); gtk_grid_attach (GTK_GRID (table), entry, j, i+2*i+2, 1, 1); } } GtkWidget * but = create_button ("Lattice Vectors", IMG_NONE, NULL, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(on_vectors_clicked), NULL); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 145); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 15); } /*! \fn G_MODULE_EXPORT void update_chemistry (GtkEntry * entry, gpointer data) \brief update chemical property \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_chemistry (GtkEntry * entry, gpointer data) { int i = gtk_combo_box_get_active (GTK_COMBO_BOX(spec_box)); int j = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (entry); double v = atof(m); tmp_chem[j][i] = v; update_entry_double (entry, v); } /*! \fn G_MODULE_EXPORT void on_spec_changed (GtkComboBox * combo, gpointer data) \brief change the chemical species \param combo the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_spec_changed (GtkComboBox * combo, gpointer data) { int i, j; i = gtk_combo_box_get_active (combo); gtk_label_set_text (GTK_LABEL(chem_spec[0]), active_chem -> element[i]); gtk_label_set_text (GTK_LABEL(chem_spec[1]), g_strdup_printf("%d", (int)active_chem -> chem_prop[CHEM_Z][i])); for (j=0; j chem_prop[CHEM_Z][j]; tmp_chem[1][j] = set_radius_ (& k, & i); update_entry_double (GTK_ENTRY(chem_entry[1]), tmp_chem[1][j]); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data) \brief use X ray diffraction q coorection \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_xcor (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_xcor (GtkToggleButton * but, gpointer data) \brief use X ray diffraction q coorection \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_xcor (GtkToggleButton * but, gpointer data) #endif { #ifdef GTK4 tmp_xcor = gtk_check_button_get_active (but); #else tmp_xcor = gtk_toggle_button_get_active (but); #endif widget_set_sensitive (chem_entry[CHEM_PARAMS-2], ! tmp_xcor); } /*! \fn void edit_chem (GtkWidget * vbox) \brief creation of the edit chemical properties widgets \param vbox GtkWidget that will receive the data */ void edit_chem (GtkWidget * vbox) { int i, j; spec_box = create_combo(); widget_set_sensitive(spec_box, 1); g_signal_connect(G_OBJECT(spec_box), "changed", G_CALLBACK(on_spec_changed), NULL); GtkWidget * table = gtk_grid_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, table, FALSE, FALSE, 5); GtkWidget * chem_fixed = gtk_fixed_new (); gtk_grid_attach (GTK_GRID (table), chem_fixed, 1, 0, 1, 1); for (i=0; i nspec; j++) { combo_text_append (spec_box, active_chem -> label[j]); } } else { if (i > 0 && i < 3) { chem_spec[i-1] = markup_label ("", -1, -1, 0.5, 0.5); gtk_grid_attach (GTK_GRID (table), chem_spec[i-1], 1, i+2, 1, 1); } else { if (i==5) { rad_box = create_combo (); gtk_widget_set_size_request (rad_box, -1, 30); for (j=0; j<4; j++) { combo_text_append (rad_box, chem_rad[j]); } gtk_combo_box_set_active (GTK_COMBO_BOX(rad_box), -1); g_signal_connect(G_OBJECT(rad_box), "changed", G_CALLBACK(on_rad_changed), NULL); gtk_grid_attach (GTK_GRID (table), rad_box, 1, i+1, 1, 1); } tmp_chem[i-3] = g_malloc (active_project -> nspec*sizeof*tmp_chem[i-3]); for (j=0; j nspec; j++) { tmp_chem[i-3][j] = active_chem -> chem_prop[i-2][j]; } chem_entry[i-3] = create_entry (G_CALLBACK(update_chemistry), 120, 15, FALSE, (gpointer)GINT_TO_POINTER(i-3)); update_entry_double (GTK_ENTRY(chem_entry[i-3]), tmp_chem[i-3][0]); gtk_grid_attach (GTK_GRID (table), chem_entry[i-3], 2, i+2, 1, 1); if (i==CHEM_PARAMS+1) { tmp_xcor = active_project -> xcor; GtkWidget * chem_xcor = check_button ("= f(Q)", -1, 30, tmp_xcor, G_CALLBACK(toggle_xcor), NULL); widget_set_sensitive (chem_entry[i-3], ! tmp_xcor); gtk_grid_attach (GTK_GRID (table), chem_xcor, 1, i+2, 1, 1); } gtk_grid_attach (GTK_GRID (table), markup_label(chem_unit[i-3], -1, -1, 0.0, 0.5), 3, i+2, 1, 1); } } } gtk_combo_box_set_active (GTK_COMBO_BOX(spec_box), 0); gtk_fixed_put (GTK_FIXED (chem_fixed), spec_box, -1, -1); } /*! \fn gboolean test_vol (double box[2][3], double vect[3][3]) \brief is the cell properly described to use PBC ? \param box lattice parameters \param vect lattice vectors */ gboolean test_vol (double box[2][3], double vect[3][3]) { int i, j; gboolean val = TRUE; tmp_lat = 0; for (i=0; i<2; i++) { for (j=0; j<3; j++) { if (box[i][j] == 0.0) val = FALSE; } } if (val) tmp_lat = 1; val = TRUE; for (i=0; i<3; i++) { if (vect[i][0] == 0.0 && vect[i][1] == 0.0 && vect[i][2] == 0.0) { val = FALSE; } } if (val) tmp_lat = 2; return (tmp_lat) ? TRUE : FALSE; } /*! \fn gboolean test_pbc (int pbc, int frac, double box[2][3], double vect[3][3]) \brief is the cell properly described ? \param pbc \param frac fractional coordinates \param box lattice parameters \param vect lattice vectors */ gboolean test_pbc (int pbc, int frac, double box[2][3], double vect[3][3]) { if (! pbc && ! frac) { if (! test_vol (box, vect)) tmp_lat = active_cell -> ltype; return TRUE; } else { return test_vol (box, vect); } } /*! \fn void init_box_calc () \brief initialize calculation possibilities based the periodicity */ void init_box_calc () { int i; active_cell -> has_a_box = test_vol (active_box -> param, active_box -> vect); if (! active_cell -> has_a_box) { for (i=0; i<4; i++) active_project -> runok[i] = FALSE; } else { for (i=0; i<3; i=i+2) { active_project -> runok[i] = TRUE; active_project -> runok[i+1] = active_project -> visok[i]; } } prep_calc_actions (); } gboolean has_box_changed () { int i, j; gboolean changed = FALSE; for (i=0; i<2; i++) { for (j=0; j<3; j++) { if (tmp_box[i][j] != active_box -> param[i][j]) { active_box -> param[i][j] = tmp_box[i][j]; changed = TRUE; } } } return changed; } gboolean have_vectors_changed () { int i, j; gboolean changed = FALSE; for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (tmp_vect[i][j] != active_box -> vect[i][j]) { active_box -> vect[i][j] = tmp_vect[i][j]; changed = TRUE; } } } return changed; } /*! \fn void prep_box (int id) \brief prepare the project depending on the changes to the MD box \param id */ void prep_box (int id) { int i; // active_project -> run = 1; if (tmp_pbc != active_cell -> pbc) active_project -> run = 0; active_cell -> pbc = tmp_pbc; if (tmp_lat < 2 && tmp_lat != active_cell -> ltype) active_project -> run = 0; if (tmp_lat > 0) { if (tmp_lat == 1 && has_box_changed()) { active_project -> run = 0; } else if (tmp_lat == 2 && have_vectors_changed()) { active_project -> run = 0; } } active_cell -> ltype = tmp_lat; init_box_calc (); if (tmp_frac != active_cell -> frac) active_project -> run = 0; active_cell -> frac = tmp_frac; if (id > 1) active_project -> run = 0; if (! active_project -> run) { if (active_project -> modelgl) { for (i=0; i<3; i++) active_project -> modelgl -> cshift[i] = 0.0; } } } /*! \fn void test_chem () \brief were chemical properties modified ? */ void test_chem () { int i, j; // gboolean res = FALSE; for (i=1; i nspec; j++) { if (tmp_chem[i-1][j] != active_chem -> chem_prop[i][j]) { active_chem -> chem_prop[i][j] = tmp_chem[i-1][j]; // res = TRUE; } } g_free (tmp_chem[i-1]); tmp_chem[i-1] = NULL; } if (tmp_xcor != active_project -> xcor) { active_project -> xcor = tmp_xcor; // res = TRUE; } // return res; } /*! \fn gboolean test_cutoffs () \brief are all cutoffs described ? */ gboolean test_cutoffs () { int i, j, k; k = 0; for (i=0; i nspec; i++, k++) { if (tmpcut[k] == 0.0 || (active_project -> run && tmpcut[k] > active_project -> max[GR])) return FALSE; } for (i=0; i nspec-1; i++) { for (j=i+1; j nspec; j++, k++) { if (tmpcut[k] == 0.0 || (active_project -> run && tmpcut[k] > active_project -> max[GR])) return FALSE; } } if (tmpcut[k] == 0.0 || (active_project -> run && tmpcut[k] > active_project -> max[GR])) return FALSE; return TRUE; } /*! \fn void edit_bonds (GtkWidget * vbox) \brief creation of the edit bond cutoff widgets \param vbox GtkWidget that will receive the data */ void edit_bonds (GtkWidget * vbox) { gchar * mess = "To define the existence of a bond between two atoms i (α) and j (β)." "\n\tA bond exits if the two following conditions are verified:\n" "\n\t\t1) Dij < first minimum of the total g(r) - rcut (Tot.)" "\n\t\t2) Dij < first minimum of the partial grα,β(r) - rcut (α,β)\n" "\n\t0.0 < rcut ≤ Dmax"; gchar * fin = "\n\tDmax is the maximum inter-atomic distance in the model\n"; gchar * str; if (active_project -> max[0] != 0.0) { str = g_strdup_printf ("%s\twith\tDmax = %f Å%s", mess, active_project -> max[0], fin); } else { str = g_strdup_printf ("%s%s", mess, fin); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * boxv = create_vbox (BSEP); cut_box (active_project, boxv); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, boxv, FALSE, FALSE, 50); } /*! \fn G_MODULE_EXPORT void run_on_edit_activate (GtkDialog * win, gint response_id, gpointer data) \brief create an edition dialog: run the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_on_edit_activate (GtkDialog * win, gint response_id, gpointer data) { int id = GPOINTER_TO_INT(data); int i = (id < 2) ? id : (id > 2 && id < 5) ? 1 : 2; gboolean done = FALSE; char * errpbc ="To apply PBC or use fractional coordinates\n" "describe properly the simulation box parameters"; switch (response_id) { case GTK_RESPONSE_APPLY: if (i== 0) { test_chem (); done = TRUE; } else if (i == 1) { done = test_pbc (tmp_pbc, tmp_frac, tmp_box, tmp_vect); if (done) { prep_box (i); if (id == 1) { if (! active_project -> run) { run_project (); if (active_glwin) active_glwin -> create_shaders[MDBOX] = TRUE; bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); } } } else { show_warning (errpbc, GTK_WIDGET(win)); } } else { gboolean upc; if (active_project -> modelgl) { if (active_project -> modelgl -> rings || active_project -> modelgl -> chains) { upc = ask_yes_no ("Data can be lost !", "You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?", GTK_MESSAGE_WARNING, GTK_WIDGET(win)); } else { upc = TRUE; } } else { upc = TRUE; } if (upc) update_cutoffs (active_project); done = TRUE; } break; default: if (i == 0) { test_chem (); done = TRUE; } else if (i == 1) { done = test_pbc (active_cell -> pbc, active_cell -> frac, active_box -> param, active_box -> vect); } else { done = TRUE; } break; } if (done) destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data) \brief create an edition dialog - prepare the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data) { int i; gboolean skip = FALSE; int id = GPOINTER_TO_INT(data); i = (id < 2) ? id : (id > 2 && id < 5) ? 1 : 2; GtkWidget * win = dialog_cancel_apply (edit_prop[i], MainWindow, FALSE); GtkWidget * box = dialog_get_content_area (win); gtk_box_set_homogeneous (GTK_BOX(box), FALSE); if (i == 0) { edit_chem(box); } else if (i == 1) { edit_box (box); if (id == 3) { skip = test_pbc (tmp_pbc, tmp_frac, tmp_box, tmp_vect); if (skip) { active_cell -> ltype = tmp_lat; init_box_calc (); } active_project -> run = 0; } } else { opengl_project_changed (activep); edit_bonds (box); if (id == 5) skip = test_cutoffs (); } if (! skip && ! silent_input) { run_this_gtk_dialog (win, G_CALLBACK(run_on_edit_activate), data); } #ifdef GTK3 // GTK3 Menu Action To Check int j, k; if (active_glwin != NULL) { if (active_glwin -> init) { for (i=0; i<2; i++) { if (active_glwin -> ogl_box[i] != NULL) { widget_set_sensitive (active_glwin -> ogl_box[i], active_cell -> ltype); if (i) { j = (active_cell -> ltype && active_project -> steps == 1) ? 1 : 0; for (k=5; k<8; k++) widget_set_sensitive (active_glwin -> ogl_box[k], j); } } } } } #endif if (tmpcut) { g_free (tmpcut); tmpcut = NULL; } } Atomes-GNU-1.1.14/src/gui/grcall.c000066400000000000000000000306351457665371200164670ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file grcall.c * @short Callbacks for the g(r)/g(k) calculation dialog * @author Sébastien Le Roux */ /* * This file: 'grcall.c' * * Contains: * - The callbacks for the g(r)/g(k) calculation dialog * * List of functions: int recup_data_ (int * cd, int * rd); void initgr (int r); void update_rdf_view (project * this_proj, int rdf); void sendcutoffs_ (int * nc, double * totc, double partc[* nc][* nc]); G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_cutcheck_toggled (GtkToggleButton * Button); G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "curve.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" int fitc = 0; /*! \fn void initgr (int r) \brief initialize the curve widgets for the g(r)/g(k) \param r GR = real space, GK = FFT */ void initgr (int r) { int i, j, k; active_project -> curves[r][0] -> name = g_strdup_printf ("g(r) neutrons"); active_project -> curves[r][1] -> name = g_strdup_printf ("g(r) neutrons - smoothed"); active_project -> curves[r][2] -> name = g_strdup_printf ("G(r) neutrons"); active_project -> curves[r][3] -> name = g_strdup_printf ("G(r) neutrons - smoothed"); active_project -> curves[r][4] -> name = g_strdup_printf ("D(r) neutrons"); active_project -> curves[r][5] -> name = g_strdup_printf ("D(r) neutrons - smoothed"); active_project -> curves[r][6] -> name = g_strdup_printf ("T(r) neutrons"); active_project -> curves[r][7] -> name = g_strdup_printf ("T(r) neutrons - smoothed"); active_project -> curves[r][8] -> name = g_strdup_printf ("g(r) X-rays"); active_project -> curves[r][9] -> name = g_strdup_printf ("g(r) X-rays - smoothed"); active_project -> curves[r][10] -> name = g_strdup_printf ("G(r) X-rays"); active_project -> curves[r][11] -> name = g_strdup_printf ("G(r) X-rays - smoothed"); active_project -> curves[r][12] -> name = g_strdup_printf ("D(r) X-rays"); active_project -> curves[r][13] -> name = g_strdup_printf ("D(r) X-rays - smoothed"); active_project -> curves[r][14] -> name = g_strdup_printf ("T(r) X-rays"); active_project -> curves[r][15] -> name = g_strdup_printf ("T(r) X-rays - smoothed"); k = 16; for ( i = 0 ; i < active_project -> nspec ; i++ ) { for ( j = 0 ; j < active_project -> nspec ; j++ ) { active_project -> curves[r][k] -> name = g_strdup_printf ("g(r)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("g(r)[%s,%s] - smoothed", active_chem -> label[i], active_chem -> label[j]); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("G(r)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("G(r)[%s,%s] - smoothed", active_chem -> label[i], active_chem -> label[j]); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("dn(r)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; } } if ( active_project -> nspec == 2 ) { active_project -> curves[r][k] -> name = g_strdup_printf("BT(r)[NN]"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf("BT(r)[NN] - smoothed"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf("BT(r)[NC]"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf("BT(r)[NC] - smoothed"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf("BT(r)[CC]"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf("BT(r)[CC] - smoothed"); } addcurwidgets (activep, r, 0); active_project -> initok[r] = TRUE; } /*! \fn void update_rdf_view (project * this_proj, int rdf) \brief update the project text view for the g(r)/g(k) calculation \param this_proj the target project \param rdf the calculation GR / GK */ void update_rdf_view (project * this_proj, int rdf) { gchar * str; if (this_proj -> text_buffer[rdf+OT] == NULL) this_proj -> text_buffer[rdf+OT] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[rdf+OT]); print_info ("\n\nRadial distribution function(s)", "heading", this_proj -> text_buffer[rdf+OT]); if (rdf == GR) { print_info (" - real space calculation\n\n", "heading", this_proj -> text_buffer[rdf+OT]); } else { print_info (" - FFT[S(q)]\n\n", "heading", this_proj -> text_buffer[rdf+OT]); } print_info ("Calculation details:\n\n", NULL, this_proj -> text_buffer[rdf+OT]); if (rdf == GK) { print_info ("\tReciprocal space data:\n\n", NULL, this_proj -> text_buffer[rdf+OT]); print_info ("\t - Minimum vector Q", "bold", this_proj -> text_buffer[rdf+OT]); print_info ("min", "sub_bold", this_proj -> text_buffer[rdf+OT]); print_info (": ", "bold", this_proj -> text_buffer[rdf+OT]); str = g_strdup_printf ("%f", this_proj -> min[SK]); print_info (str, "bold_red", this_proj -> text_buffer[rdf+OT]); g_free (str); print_info (" Å", "bold", this_proj -> text_buffer[rdf+OT]); print_info ("-1", "sup_bold", this_proj -> text_buffer[rdf+OT]); print_info ("\n\t - Maximum vector Q", "bold", this_proj -> text_buffer[rdf+OT]); print_info ("max", "sub_bold", this_proj -> text_buffer[rdf+OT]); print_info (" for the FFT: ", "bold", this_proj -> text_buffer[rdf+OT]); str = g_strdup_printf ("%f", this_proj -> max[GK]); print_info (str, "bold_red", this_proj -> text_buffer[rdf+OT]); g_free (str); print_info (" Å", "bold", this_proj -> text_buffer[rdf+OT]); print_info ("-1", "sup_bold", this_proj -> text_buffer[rdf+OT]); print_info ("\n\n", NULL, this_proj -> text_buffer[rdf+OT]); } print_info ("\tReal space discretization:\n\n", NULL, this_proj -> text_buffer[rdf+OT]); print_info ("\t - Number of δr steps: ", "bold", this_proj -> text_buffer[rdf+OT]); str = g_strdup_printf ("%d", this_proj -> num_delta[rdf]); print_info (str, "bold_blue", this_proj -> text_buffer[rdf+OT]); g_free (str); print_info ("\n\n\t between 0.0 and ", NULL, this_proj -> text_buffer[rdf+OT]); print_info ("D", "bold", this_proj -> text_buffer[rdf+OT]); print_info ("max", "sub_bold", this_proj -> text_buffer[rdf+OT]); print_info ("\n\t where ", NULL, this_proj -> text_buffer[rdf+OT]); print_info ("D", "bold", this_proj -> text_buffer[rdf+OT]); print_info ("max", "sub_bold", this_proj -> text_buffer[rdf+OT]); print_info (" is the maximum distance in real space, ", NULL, this_proj -> text_buffer[rdf+OT]); print_info ("D", "bold", this_proj -> text_buffer[rdf+OT]); print_info ("max", "sub_bold", this_proj -> text_buffer[rdf+OT]); print_info (" = ", NULL, this_proj -> text_buffer[rdf+OT]); str = g_strdup_printf ("%f", this_proj -> max[GR]); print_info (str, "bold_blue", this_proj -> text_buffer[rdf+OT]); g_free (str); print_info (" Å\n\n\t - δr = ", "bold", this_proj -> text_buffer[rdf+OT]); str = g_strdup_printf ("%f", this_proj -> delta[rdf]); print_info (str, "bold_blue", this_proj -> text_buffer[rdf+OT]); g_free (str); print_info (" Å\n", "bold", this_proj -> text_buffer[rdf+OT]); print_info (calculation_time(TRUE, this_proj -> calc_time[rdf]), NULL, this_proj -> text_buffer[rdf+OT]); } /*! \fn G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data) \brief compute g(r) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_gr_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> initok[GR]) initgr (GR); clean_curves_data (GR, 0, active_project -> numc[GR]); active_project -> delta[GR] = active_project -> max[GR] / active_project -> num_delta[GR]; prepostcalc (widg, FALSE, GR, 0, opac); clock_gettime (CLOCK_MONOTONIC, & start_time); i = g_of_r_ (& active_project -> num_delta[GR], & active_project -> delta[GR], & fitc); clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> calc_time[GR] = get_calc_time (start_time, stop_time); prepostcalc (widg, TRUE, GR, i, 1.0); if (! i) { remove_action (analyze_action_names[SQ]); show_error ("The RDF's calculation has failed", 0, widg); } else { add_action (analyze_actions[SQ]); update_rdf_view (active_project, GR); gtk_widget_show (curvetoolbox); } fill_tool_model (); for (i=0; i<4; i=i+3) update_after_calc (i); } /*! \fn void sendcutoffs_ (int * nc, double * totc, double partc[*nc][*nc]) \brief bond cutoff from Fortran90 \param nc number of species \param totc total cutoff \param partc partials cutoff */ void sendcutoffs_ (int * nc, double * totc, double partc[* nc][* nc]) { int i, j; active_chem -> grtotcutoff = * totc; for ( i=0; i< active_project -> nspec; i++) { for (j=0; j nspec; j++) { active_chem -> cutoffs[i][j]=partc[j][i]; } } active_project -> dmtx = FALSE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_cutcheck_toggled (GtkCheckButton * but, gpointer data) \brief Fitting bond cutoff or data ? \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cutcheck_toggled (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void on_cutcheck_toggled (GtkToggleButton * Button) \brief Fitting bond cutoff or data ? \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cutcheck_toggled (GtkToggleButton * but, gpointer data) #endif { gboolean status; #ifdef GTK4 status = gtk_check_button_get_active (but); #else status = gtk_toggle_button_get_active (but); #endif if (status) { fitc = 1; } else { fitc = 0; } } /*! \fn int recup_data_ (int * cd, int * rd) \brief Sending data back to Fortran90 \param cd the curve id \param rd the analysis id */ int recup_data_ (int * cd, int * rd) { if (* rd == 0) { return send_gr_ (cd, & active_project -> curves[GR][* cd] -> ndata, & active_project -> delta[GR], active_project -> curves[GR][* cd] -> data[0], active_project -> curves[GR][* cd] -> data[1]); } else { return send_sq_ (cd, & active_project -> curves[SK][* cd] -> ndata, & active_project -> delta[GK], active_project -> curves[SK][* cd] -> data[0], active_project -> curves[SK][* cd] -> data[1]); } } /*! \fn G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data) \brief compute g(k) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_gq_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> initok[GK]) initgr (GK); clean_curves_data (GK, 0, active_project -> numc[GK]); active_project -> delta[GK] = active_project -> max[GR] / active_project -> num_delta[GK]; prepostcalc (widg, FALSE, GK, 0, opac); clock_gettime (CLOCK_MONOTONIC, & start_time); i = g_of_r_fft_ (& active_project -> num_delta[GK], & active_project -> delta[GK], & active_project -> max[GK]); clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> calc_time[GK] = get_calc_time (start_time, stop_time); prepostcalc (widg, TRUE, GK, i, 1.0); if (! i) { show_error ("The RDF's from FFT[S(k)] calculation has failed", 0, widg); } else { update_rdf_view (active_project, GK); gtk_widget_show (curvetoolbox); } fill_tool_model (); for (i=0; i<4; i=i+3) update_after_calc (i); } Atomes-GNU-1.1.14/src/gui/gtk-misc.c000066400000000000000000002302531457665371200167370ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file gtk-misc.c * @short GTK3/GTK4 utility subroutines, instead of having pre-processor flags everywhere in the code. \n Whenever I need to use a GTK function that changed between v3 and v4, \n I created an home made function declared in this file, and deal then here with the potential GTK versions issues. * @author Sébastien Le Roux */ /* * This file: 'gtk-misc.c' * * Contains: * - GTK3/GTK4 utility subroutines, instead of having pre-processor flags everywhere in the code Whenever I need to use a GTK function that changed between v3 and v4, I created an home made function declared in this file, and deal then here with the potential GTK versions issues. * * List of functions: gboolean is_the_widget_visible (GtkWidget * widg); gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename); G_MODULE_EXPORT gboolean to_activate_entry (GtkWidget * widg, GdkEventFocus * event, gpointer data); G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data); G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data); G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data); gchar * file_chooser_get_file_name (GtkFileChooser * chooser); gchar * file_chooser_get_current_folder (GtkFileChooser * chooser); const gchar * entry_get_text (GtkEntry * entry); void show_the_widgets (GtkWidget * widg); void widget_set_sensitive (GtkWidget * widg, gboolean sensitive); void add_container_child (int type, GtkWidget * widg, GtkWidget * child); void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding); void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data); void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data); void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data); void resize_this_window (GtkWidget * window, int x, int y); void update_entry_int (GtkEntry * entry, int intval); void update_entry_double (GtkEntry * entry, double doubleval); void update_entry_long_double (GtkEntry * entry, double doubleval); void update_entry_text (GtkEntry * entry, gchar * text); void text_view_set_monospace (GtkWidget * view); void gtk_label_align (GtkWidget * lab, float ax, float ay); void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos); void combo_text_append (GtkWidget * combo, gchar * text); void combo_text_prepend (GtkWidget * combo, gchar * text); void setup_text_tags (GtkTextBuffer * buffer); void add_menu_separator (GtkWidget * menu); void set_renderer_color (int tocol, GtkCellRenderer * renderer, ColRGBA col); void button_set_image (GtkButton * but, gchar * text, int format, gpointer image); void adjust_label (GtkWidget * lab, int dimx, int dimy, float ax, float ay); void set_image_from_icon_name (GtkWidget * widg, gchar * icon); void provide_gtk_css (gchar * css); void destroy_this_dialog (GtkDialog * dialog); void destroy_this_native_dialog (GtkNativeDialog * dialog); void file_chooser_set_current_folder (GtkFileChooser * chooser); void set_color_chooser_color (GtkWidget * color_win, ColRGBA col); void pop_menu_at_pointer (GtkWidget * pop, double x, double y); void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event); void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data); static void convert_alpha (cairo_surface_t * surf, GdkPixbuf * pix, int src_x, int src_y, int width, int height); G_MODULE_EXPORT void to_activate_entry (GtkEventControllerFocus * focus, gpointer data); G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data); GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu); GtkWidget * new_gtk_window (); GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz); GtkWidget * dialogmodal (gchar * str, GtkWindow * parent); GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent); GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz); GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data); GtkWidget * create_vbox (int spacing); GtkWidget * create_hbox (int spacing); GtkWidget * dialog_get_content_area (GtkWidget * widg); GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y); GtkWidget * create_layout (int x, int y); GtkWidget * create_combo (); GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text); GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data); GtkWidget * stock_image (const gchar * stock_id); GtkWidget * create_menu_item (gboolean add_mnemo, gchar * name); GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status); GtkWidget * create_image_from_data (int format, gpointer item_image); GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status); GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod); GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay); GtkWidget * color_button (ColRGBA col, gboolean alpha, int dimx, int dimy, GCallback handler, gpointer data); GtkWidget * font_button (gchar * font, int dimx, int dimy, GCallback handler, gpointer data); GtkWidget * spin_button (GCallback handler, double value, double start, double end, double step, int digits, int dim, gpointer data); GtkWidget * check_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); GtkWidget * radio_button (gchar * text, int dimx, int dimy, gboolean state, GCallback handler, gpointer data); GtkWidget * create_button (gchar * text, int image_format, gchar * image, int dimx, int dimy, int relief, GCallback handler, gpointer data); GtkWidget * abox (GtkWidget * box, char * lab, int vspace); GtkWidget * bbox (GtkWidget * box, char * lab); GtkWidget * cbox (GtkWidget * box, char * lab); GtkWidget * fbox (GtkWidget * box, char * lab); GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow); GtkWidget * create_expander (gchar * name, gchar * file_img); GtkWidget * destroy_this_widget (GtkWidget * widg); GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); GtkWidget * get_top_level (GtkWidget * widg); GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text); GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name); GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf); GMenuItem * create_menu_item (gboolean add_mnemo, gchar * name, gchar * action); GListModel * file_chooser_get_file_names (GtkFileChooser * chooser); ColRGBA * duplicate_color (int num, ColRGBA * col); ColRGBA gdkrgba_to_rgba (GdkRGBA colgdk); ColRGBA get_button_color (GtkColorChooser * colob); ColRGBA get_window_color (GtkWidget * color_win); GdkRGBA colrgba_togtkrgba (ColRGBA col); */ #include "global.h" #include "interface.h" /*! \fn void show_the_widgets (GtkWidget * widg) \brief show GtkWidget \param widg the GtkWidget to show */ void show_the_widgets (GtkWidget * widg) { #ifdef GTK4 gtk_widget_show (widg); #else gtk_widget_show_all (widg); #endif } /*! \fn void widget_set_sensitive (GtkWidget * widg, gboolean sensitive) \brief Set sensitivity for a GtkWidget, ensuring it is a GtkWidget \param widg the GtkWidget \param sensitive Sensitivity */ void widget_set_sensitive (GtkWidget * widg, gboolean sensitive) { if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { gtk_widget_set_sensitive (widg, sensitive); } } } /*! \fn void add_container_child (int type, GtkWidget * widg, GtkWidget * child) \brief Add a GtkWidget into another GtkWidget \param type GTK4 only: the type of container \param widg the container Gtkwidget \param child the child GtkWidget */ void add_container_child (int type, GtkWidget * widg, GtkWidget * child) { #ifdef GTK3 gtk_container_add (GTK_CONTAINER(widg), child); #else switch (type) { case CONTAINER_WIN: // gtk_window_set_child ((GtkWindow *)widg, NULL); gtk_window_set_child ((GtkWindow *)widg, child); break; case CONTAINER_SCR: // Bug in the management of scrolled window child /* Frequently getting warning messages at this point with GTK4 (atomes:?????): GLib-GObject-CRITICAL **: ??:??:??.???: g_object_set: assertion 'G_IS_OBJECT (object)' failed (atomes:?????): Gtk-CRITICAL **: ??:??:??.???: gtk_widget_unparent: assertion 'GTK_IS_WIDGET (widget)' failed */ gtk_scrolled_window_set_child ((GtkScrolledWindow *)widg, NULL); gtk_scrolled_window_set_child ((GtkScrolledWindow *)widg, child); break; case CONTAINER_VIE: // gtk_viewport_set_child ((GtkViewport *)widg, NULL); gtk_viewport_set_child ((GtkViewport *)widg, child); break; case CONTAINER_BUT: // gtk_button_set_child ((GtkButton *)widg, NULL); gtk_button_set_child ((GtkButton *)widg, child); break; case CONTAINER_FRA: // gtk_frame_set_child ((GtkFrame *)widg, NULL); gtk_frame_set_child ((GtkFrame *)widg, child); break; case CONTAINER_EXP: // gtk_expander_set_child ((GtkExpander *)widg, NULL); gtk_expander_set_child ((GtkExpander *)widg, child); break; } #endif } /*! \fn void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) \brief Add a GtkWidget in a GtkBox at the end position \param widg the GtkBox \param child the GtkWidget to add \param expand GTK3 only: expandable \param fill GTK3 only: fill \param padding GTK3 only: box padding */ void add_box_child_end (GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) { #ifdef GTK4 // gtk_widget_set_hexpand (child, TRUE); gtk_box_append (GTK_BOX(widg), child); #else gtk_box_pack_end (GTK_BOX(widg), child, expand, fill, padding); #endif } /*! \fn void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) \brief Add a GtkWidget in a GtkBox at the initial position \param orientation horizontal or vertical \param widg the GtkBox \param child the GtkWidget to add \param expand GTK3 only: expandable \param fill GTK3 only: fill \param padding GTK3 only: box padding */ void add_box_child_start (int orientation, GtkWidget * widg, GtkWidget * child, gboolean expand, gboolean fill, int padding) { #ifdef GTK4 if (orientation == GTK_ORIENTATION_HORIZONTAL && padding) { gtk_box_append (GTK_BOX(widg), markup_label (" ", padding, -1, 0.0, 0.0)); } else if (orientation == GTK_ORIENTATION_VERTICAL && padding > 10) { gtk_box_append (GTK_BOX(widg), markup_label (" ", -1, padding/2, 0.0, 0.0)); } gtk_box_append (GTK_BOX(widg), child); if (orientation == GTK_ORIENTATION_HORIZONTAL && padding) { gtk_box_append (GTK_BOX(widg), markup_label (" ", padding, -1, 0.0, 0.0)); } else if (orientation == GTK_ORIENTATION_VERTICAL && padding > 10) { gtk_box_append (GTK_BOX(widg), markup_label (" ", -1, padding/2, 0.0, 0.0)); } #else gtk_box_pack_start (GTK_BOX(widg), child, expand, fill, padding); #endif } #ifdef GTK3 /*! \fn GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu) \brief Adding a GtkMenuItem with a submenu and setting the sensitivity \param name Name of the menu item \param active Sensitivity \param sub_menu the GtkWidget submenu */ GtkWidget * menu_item_new_with_submenu (gchar * name, gboolean active, GtkWidget * sub_menu) { GtkWidget * item = create_menu_item (FALSE, name); gtk_menu_item_set_submenu ((GtkMenuItem *)item, sub_menu); widget_set_sensitive (item, active); return item; } #endif /*! \fn GtkWidget * new_gtk_window () \brief create a new GtkWindow */ GtkWidget * new_gtk_window () { #ifdef GTK4 return gtk_window_new (); #else return gtk_window_new (GTK_WINDOW_TOPLEVEL); #endif } #ifdef GTK4 /*! \fn void add_widget_gesture_and_key_action (GtkWidget * widget, * gchar * cp_name, GCallback cp_handler, gpointer cp_data, * gchar * cr_name, GCallback cr_handler, gpointer cr_data, * gchar * kp_name, GCallback kp_handler, gpointer kp_data, * gchar * mo_name, GCallback mo_handler, gpointer mo_data, * gchar * sc_name, GCallback sc_handler, gpointer sc_data) \brief Adding GTK4 mouse, and keyboard events to a GtkWidget \param widget the GtkWidget \param cp_name Name of the click pressed event \param cp_handler Click pressed callback \param cp_data Click pressed data pointer \param cr_name Name of the click released event \param cr_handler Click released callback \param cr_data Click released data pointer \param kp_name Name of the key pressed event \param kp_handler Key pressed callback \param kp_data Key pressed data pointer \param mo_name Name of the mouse motion event \param mo_handler Mouse motion callback \param mo_data Mouse motion data pointer \param sc_name Name of the mouse scroll event \param sc_handler Mouse scroll callback \param sc_data Mouse scroll data pointer */ void add_widget_gesture_and_key_action (GtkWidget * widget, gchar * cp_name, GCallback cp_handler, gpointer cp_data, gchar * cr_name, GCallback cr_handler, gpointer cr_data, gchar * kp_name, GCallback kp_handler, gpointer kp_data, gchar * mo_name, GCallback mo_handler, gpointer mo_data, gchar * sc_name, GCallback sc_handler, gpointer sc_data) { GtkGesture * gesture; GtkEventController * key; GtkEventController * motion; if (cp_name) { gesture = gtk_gesture_click_new (); gtk_event_controller_set_name (GTK_EVENT_CONTROLLER (gesture), cp_name); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), 0); if (cp_handler) g_signal_connect (gesture, "pressed", cp_handler, cp_data); gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture)); } if (cr_name) { gesture = gtk_gesture_click_new (); gtk_event_controller_set_name (GTK_EVENT_CONTROLLER (gesture), cr_name); gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (gesture), 0); if (cr_handler) g_signal_connect (gesture, "released", cr_handler, cr_data); gtk_widget_add_controller (widget, GTK_EVENT_CONTROLLER (gesture)); } if (kp_name) { key = gtk_event_controller_key_new (); gtk_event_controller_set_name (key, kp_name); if (kp_handler) g_signal_connect (key, "key-pressed", kp_handler, kp_data); gtk_widget_add_controller (widget, key); } if (mo_name) { motion = gtk_event_controller_motion_new (); gtk_event_controller_set_name (motion, mo_name); if (mo_handler) g_signal_connect (motion, "motion", mo_handler, mo_data); gtk_widget_add_controller (widget, motion); } if (sc_name) { motion = gtk_event_controller_scroll_new (GTK_EVENT_CONTROLLER_SCROLL_VERTICAL); gtk_event_controller_set_name (motion, sc_name); if (sc_handler) g_signal_connect (motion, "scroll", sc_handler, sc_data); gtk_widget_add_controller (widget, motion); } } #endif /*! \fn GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz) \brief create a new GtkWindow \param str Title \param parent Parent GtkWidget (if any) \param modal Modal (TRUE/FALSE) \param resiz Can be re-sized (TRUE/FALSE) */ GtkWidget * create_win (gchar * str, GtkWidget * parent, gboolean modal, gboolean resiz) { GtkWidget * win; win = new_gtk_window (); gtk_window_set_title (GTK_WINDOW(win), prepare_for_title(str)); gtk_window_set_resizable (GTK_WINDOW (win), TRUE); #ifdef GTK3 gtk_window_set_attached_to (GTK_WINDOW (win), parent); gtk_window_set_icon (GTK_WINDOW (win), THETD); #endif // gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW (parent)); gtk_window_set_modal (GTK_WINDOW(win), modal); gtk_window_set_resizable (GTK_WINDOW(win), resiz); gtk_window_set_destroy_with_parent (GTK_WINDOW (win), TRUE); return win; } #ifdef GTK4 /*! \fn void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data) \brief run a GTK4 GtkNativeDialog (used to read files) \param dial the GtkNativeDialog \param handler the callback \param data the associated data pointer */ void run_this_gtk_native_dialog (GtkNativeDialog * dial, GCallback handler, gpointer data) { gtk_native_dialog_set_modal (dial, TRUE); if (handler) g_signal_connect (G_OBJECT(dial), "response", handler, data); gtk_native_dialog_show (dial); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } #endif /*! \fn void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data) \brief run a GTK (3 and 4) basic GtkDialog \param dial the GtkDialog \param handler the callback \param data the associated data pointer */ void run_this_gtk_dialog (GtkWidget * dial, GCallback handler, gpointer data) { gtk_window_set_modal (GTK_WINDOW(dial), TRUE); if (handler) g_signal_connect (G_OBJECT(dial), "response", handler, data); show_the_widgets (dial); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); } /*! \fn GtkWidget * dialogmodal (gchar * str, GtkWindow * parent) \brief Create a new dialog modal window \param str Title \param parent Parent GtkWindow, if any */ GtkWidget * dialogmodal (gchar * str, GtkWindow * parent) { GtkWidget * win = gtk_dialog_new_with_buttons (str, parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, _("_Close"), GTK_RESPONSE_CLOSE, NULL); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); #ifdef GTK3 gtk_window_set_icon (GTK_WINDOW (win), THETD); #endif return win; } /*! \fn GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent) \brief create a modal (cannot be ignored) message window \param message the message \param title the title \param mtype the message type \param buttons the type of closing button to add \param parent the parent window, if any */ GtkWidget * message_dialogmodal (gchar * message, gchar * title, GtkMessageType mtype, GtkButtonsType buttons, GtkWidget * parent) { GtkWidget * win; if (parent) { win = gtk_message_dialog_new (GTK_WINDOW(parent), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, mtype, buttons, NULL); } else { win = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, mtype, buttons, NULL); } gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (win), message); gtk_window_set_title (GTK_WINDOW(win), title); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); #ifdef GTK3 gtk_window_set_icon (GTK_WINDOW (win), THETD); #endif show_the_widgets (win); return win; } /*! \fn GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz) \brief create a dialog modal offering a choice to apply something or not \param title the message \param parent the parent window, if any \param resiz Is the new window re-sizable ? */ GtkWidget * dialog_cancel_apply (gchar * title, GtkWidget * parent, gboolean resiz) { GtkWidget * dca = gtk_dialog_new_with_buttons (title, GTK_WINDOW(parent), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, "Cancel", GTK_RESPONSE_CANCEL, "Apply", GTK_RESPONSE_APPLY, NULL); gtk_window_set_resizable (GTK_WINDOW(dca), resiz); #ifdef GTK3 gtk_window_set_icon (GTK_WINDOW (dca), THETD); #endif return dca; } /*! \fn void resize_this_window (GtkWidget * window, int x, int y) \brief resize this GtkWindow \param window the GtkWidget to resize \param x the x size \param y the y size */ void resize_this_window (GtkWidget * window, int x, int y) { #ifdef GTK3 gtk_window_resize (GTK_WINDOW(window), x, y); #else gtk_window_set_default_size (GTK_WINDOW(window), x, y); #endif } /*! \fn const gchar * entry_get_text (GtkEntry * entry) \brief get the text in a GtkEntry \param entry the GtkEntry */ const gchar * entry_get_text (GtkEntry * entry) { #ifdef GTK4 return gtk_editable_get_text (GTK_EDITABLE(entry)); #else return gtk_entry_get_text (entry); #endif } /*! \fn void update_entry_int (GtkEntry * entry, int intval) \brief update the content of a GtkEntry as int \param entry the GtkEntry \param intval the new int value to display */ void update_entry_int (GtkEntry * entry, int intval) { gchar * value = g_strdup_printf("%d", intval); #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)value); #else gtk_entry_set_text (entry, (const gchar *)value); #endif g_free (value); } /*! \fn void update_entry_double (GtkEntry * entry, double doubleval) \brief update the content of a GtkEntry as double \param entry the GtkEntry \param doubleval the new double value to display */ void update_entry_double (GtkEntry * entry, double doubleval) { gchar * value = g_strdup_printf("%f", doubleval); #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)value); #else gtk_entry_set_text (entry, (const gchar *)value); #endif g_free (value); } /*! \fn void update_entry_long_double (GtkEntry * entry, double doubleval) \brief update the content of a GtkEntry as long double \param entry the GtkEntry \param doubleval the new long double value to display */ void update_entry_long_double (GtkEntry * entry, double doubleval) { gchar * value = g_strdup_printf("%15.10lf", doubleval); #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)value); #else gtk_entry_set_text (entry, (const gchar *)value); g_free (value); #endif } /*! \fn void update_entry_text (GtkEntry * entry, gchar * text) \brief update the content of a GtkEntry as string \param entry the GtkEntry \param text the new string to display */ void update_entry_text (GtkEntry * entry, gchar * text) { #ifdef GTK4 gtk_editable_set_text (GTK_EDITABLE(entry), (const gchar *)text); #else gtk_entry_set_text (entry, (const gchar *)text); #endif } /*! \fn void text_view_set_monospace (GtkWidget * view) \brief set the font of a GtkTextView as monospace \param view the GtkTextView */ void text_view_set_monospace (GtkWidget * view) { gtk_text_view_set_monospace (GTK_TEXT_VIEW(view), TRUE); } /*! \fn void gtk_label_align (GtkWidget * lab, float ax, float ay) \brief set text alignment in a GtkLabel \param lab the GtkLabel \param ax the x alignment \param ay the Y alignment */ void gtk_label_align (GtkWidget * lab, float ax, float ay) { gtk_label_set_xalign (GTK_LABEL (lab), ax); gtk_label_set_yalign (GTK_LABEL (lab), ay); } /*! \fn gboolean is_the_widget_visible (GtkWidget * widg) \brief test if a GtkWidget exist, then return if it is visible or not \param widg the GtkWidget */ gboolean is_the_widget_visible (GtkWidget * widg) { if (GTK_IS_WIDGET(widg)) { return gtk_widget_is_visible (widg); } else { return FALSE; } } /*! \fn GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) \brief create an horizontal scale GtkWidget \param min Min value for the h scale \param max Max value for the h scale \param delta the step on the h scale \param val the value to position to set on the h scale \param pos the location where the value is on display \param round the rounding digit for the value on display \param size the x size of the GtkWdiget \param handler the callback to move the h scale \param scroll_handler the callback on mouse scroll \param data the associated data pointer */ GtkWidget * create_hscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) { GtkWidget * hscale; hscale = gtk_scale_new_with_range (GTK_ORIENTATION_HORIZONTAL, min, max, delta); gtk_scale_set_draw_value (GTK_SCALE(hscale), TRUE); gtk_widget_set_size_request (hscale, size, -1); gtk_scale_set_value_pos (GTK_SCALE(hscale), pos); gtk_range_set_value (GTK_RANGE(hscale), val); gtk_range_set_round_digits (GTK_RANGE(hscale), round); if (handler != NULL) g_signal_connect (G_OBJECT(hscale), "value-changed", handler, data); if (scroll_handler != NULL) g_signal_connect (G_OBJECT(hscale), "change-value", scroll_handler, data); return hscale; } /*! \fn GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) \brief create an vertical scale GtkWidget \param min Min value for the v scale \param max Max value for the v scale \param delta the step on the v scale \param val the value to position to set on the h scale \param pos the location where the value is on display \param round the rounding digit for the value on display \param size the x size of the GtkWdiget \param handler the callback to move the v scale \param scroll_handler the callback on mouse scroll \param data the associated data pointer */ GtkWidget * create_vscale (float min, float max, float delta, float val, int pos, int round, int size, GCallback handler, GCallback scroll_handler, gpointer data) { GtkWidget * vscale; vscale = gtk_scale_new_with_range (GTK_ORIENTATION_VERTICAL, min, max, delta); gtk_scale_set_draw_value (GTK_SCALE(vscale), TRUE); gtk_scale_set_value_pos (GTK_SCALE(vscale), pos); gtk_widget_set_size_request (vscale, size, size); gtk_range_set_value (GTK_RANGE(vscale), val); gtk_range_set_round_digits (GTK_RANGE(vscale), round); if (handler != NULL) g_signal_connect (G_OBJECT(vscale), "value-changed", handler, data); if (scroll_handler != NULL) g_signal_connect (G_OBJECT(vscale), "change-value", scroll_handler, data); return vscale; } /*! \fn GtkWidget * create_vbox (int spacing) \brief create a GtkBox with vertical orientation \param spacing spacing between elements */ GtkWidget * create_vbox (int spacing) { return gtk_box_new (GTK_ORIENTATION_VERTICAL, spacing); } /*! \fn GtkWidget * create_hbox (int spacing) \brief create a GtkBox with horizontal orientation \param spacing spacing between elements */ GtkWidget * create_hbox (int spacing) { return gtk_box_new (GTK_ORIENTATION_HORIZONTAL, spacing); } /*! \fn GtkWidget * dialog_get_content_area (GtkWidget * widg) \brief prepare GtkWidget to insert content in a GtkDialog window \param widg the GtkDialog window */ GtkWidget * dialog_get_content_area (GtkWidget * widg) { #ifdef GTK3 return gtk_dialog_get_content_area (GTK_DIALOG(widg)); #else GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, gtk_dialog_get_content_area (GTK_DIALOG(widg)), vbox, TRUE, TRUE, 0); return vbox; #endif } /*! \fn void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos) \brief Add a GtkWidget in a GtkLayout \param layout the GtkLayout \param child the GtkWidget to insert \param x_pos the x position to insert at \param y_pos the y position to insert at */ void layout_add_widget (GtkWidget * layout, GtkWidget * child, int x_pos, int y_pos) { #ifdef GTK3 gtk_layout_put (GTK_LAYOUT(layout), child, x_pos, y_pos); #else gtk_fixed_put (GTK_FIXED(layout), child, x_pos, y_pos); #endif } /*! \fn GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y) \brief Insert a vertical GtkBox in a GtkLatout then send back the GtkBox \param layout the GtkLayout \param size_x the x size of the box \param size_y the y size of the box */ GtkWidget * add_vbox_to_layout (GtkWidget * layout, int size_x, int size_y) { GtkWidget * vbox = create_vbox (BSEP); gtk_widget_set_size_request (vbox, size_x, size_y); layout_add_widget (layout, vbox, 0, 5); return vbox; } /*! \fn GtkWidget * create_layout (int x, int y) \brief create a GtkLayout / GtkFixed widget \param x the x size of the widget \param y the y size of the widget */ GtkWidget * create_layout (int x, int y) { GtkWidget * layout; #ifdef GTK3 layout = gtk_layout_new (NULL, NULL); #else layout = gtk_fixed_new (); #endif gtk_widget_set_size_request (layout, x, y); return layout; } /*! \fn void combo_text_append (GtkWidget * combo, gchar * text) \brief append text in GtkComboBox widget \param combo the GtkWidget \param text the text to append */ void combo_text_append (GtkWidget * combo, gchar * text) { gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT(combo), text); } /*! \fn void combo_text_prepend (GtkWidget * combo, gchar * text) \brief prepend text in GtkComboBox widget \param combo the GtkWidget \param text the text to prepend */ void combo_text_prepend (GtkWidget * combo, gchar * text) { gtk_combo_box_text_prepend_text (GTK_COMBO_BOX_TEXT(combo), text); } /*! \fn GtkWidget * create_combo () \brief create a GtkCombox widget, note deprecated in GTK4 */ GtkWidget * create_combo () { return gtk_combo_box_text_new (); } /*! \fn void setup_text_tags (GtkTextBuffer * buffer) \brief prepare the avialable text tags for the GtkTextBuffer \param buffer the GtkTextBuffer */ void setup_text_tags (GtkTextBuffer * buffer) { GtkTextTagTable * textags = gtk_text_buffer_get_tag_table(buffer); /* Sans font */ tag = gtk_text_tag_new ("sans"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "family", "sans", NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* Monospace font */ tag = gtk_text_tag_new ("monospace"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "family", "monospace", NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* Default Font size */ tag = gtk_text_tag_new ("default-size"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* */ tag = gtk_text_tag_new ("underline"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "underline", PANGO_UNDERLINE_SINGLE, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* */ tag = gtk_text_tag_new ("underline_double"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "underline", PANGO_UNDERLINE_DOUBLE, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* italic */ tag = gtk_text_tag_new ("italic"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "style", PANGO_STYLE_ITALIC, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold */ tag = gtk_text_tag_new ("bold"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold italic */ tag = gtk_text_tag_new ("bold_italic"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "style", PANGO_STYLE_ITALIC, "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* superscript */ tag = gtk_text_tag_new ("sup"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "scale", .6, "rise", 6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* subscript */ tag = gtk_text_tag_new ("sub"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "scale", .6, "rise", -6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* justify-left */ tag = gtk_text_tag_new("justify-left"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "justification", GTK_JUSTIFY_LEFT, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref(tag); /* justify-center */ tag = gtk_text_tag_new("justify-center"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "justification", GTK_JUSTIFY_CENTER, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref(tag); /* justify-right */ tag = gtk_text_tag_new("justify-right"); g_object_set(tag, "justification", GTK_JUSTIFY_RIGHT, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* heading */ tag = gtk_text_tag_new("heading"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, "scale", 1.5, "justification", GTK_JUSTIFY_CENTER, "underline", PANGO_UNDERLINE_DOUBLE, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* red font */ tag = gtk_text_tag_new("red"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "red", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* orange font */ tag = gtk_text_tag_new("orange"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "orange", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* yellow font */ tag = gtk_text_tag_new("yellow"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "yellow2", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* green font */ tag = gtk_text_tag_new("green"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "green", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* light green font */ tag = gtk_text_tag_new("light_green"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "light green", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* cyan font */ tag = gtk_text_tag_new("cyan"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "cyan", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* blue font */ tag = gtk_text_tag_new("blue"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "blue", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* pink font */ tag = gtk_text_tag_new("pink"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "pink", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* violet font */ tag = gtk_text_tag_new("violet"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "dark violet", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* grey background */ tag = gtk_text_tag_new("grey_back"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "background", "lightgrey", NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* bold grey background */ tag = gtk_text_tag_new("bold_grey_back"); g_object_set(tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "background", "lightgrey", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add(textags, tag); g_object_unref (tag); /* bold red font */ tag = gtk_text_tag_new ("bold_red"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "red", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold blue font */ tag = gtk_text_tag_new ("bold_blue"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "blue", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold green font */ tag = gtk_text_tag_new ("bold_green"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "green", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold orange font */ tag = gtk_text_tag_new ("bold_orange"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "orange", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* bold pink font */ tag = gtk_text_tag_new ("bold_pink"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "foreground", "pink", "weight", PANGO_WEIGHT_BOLD, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* subscript italic*/ tag = gtk_text_tag_new ("sub_italic"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "style", PANGO_STYLE_ITALIC, "scale", .6, "rise", -6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* subscript bold */ tag = gtk_text_tag_new ("sub_bold"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, "scale", .6, "rise", -6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); /* superscript bold */ tag = gtk_text_tag_new ("sup_bold"); g_object_set (tag, "size", DEFAULT_FONT_SIZE * PANGO_SCALE, "weight", PANGO_WEIGHT_BOLD, "scale", .6, "rise", 6000, NULL); gtk_text_tag_table_add (textags, tag); g_object_unref (tag); } /*! \fn GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text) \brief create a GtkTextBuffer \param handler the callback on buffer changed \param data the associated data pointer \param text the text to display */ GtkTextBuffer * add_buffer (GCallback handler, gpointer data, gchar * text) { GtkTextBuffer * buffer; GtkTextIter bStart; GtkTextIter bEnd; buffer = gtk_text_buffer_new (NULL); setup_text_tags (buffer); gtk_text_buffer_get_start_iter (buffer, &bStart); gtk_text_buffer_get_end_iter (buffer, &bEnd); gtk_text_buffer_delete (buffer, &bStart, &bEnd); if (text != NULL) gtk_text_buffer_set_text (buffer, text, -1); if (handler != NULL) g_signal_connect (G_OBJECT (buffer), "changed", handler, data); return buffer; } /*! \fn GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text) \brief create a GtkTextView and display some text \param dimx the x size of the GtkTextView \param dimy the y size of the GtkTextView \param edit Is the text view editable (1/0) \param mono Use monospace font (1/0) \param handler the callback on buffer changed \param data the associated data pointer \param text the text to display */ GtkWidget * create_text_view (int dimx, int dimy, int edit, int mono, GCallback handler, gpointer data, gchar * text) { GtkWidget * tview = gtk_text_view_new (); gtk_text_view_set_buffer (GTK_TEXT_VIEW(tview), add_buffer(handler, data, text)); gtk_widget_set_size_request (tview, dimx, dimy); gtk_text_view_set_editable (GTK_TEXT_VIEW(tview), edit); if (mono) text_view_set_monospace (tview); return tview; } /*! \fn static void convert_alpha (cairo_surface_t * surf, GdkPixbuf * pix, int src_x, int src_y, int width, int height) \brief convert a cairo surface to pixbuf \param surf the cairo surface to convert \param pix the resulting GdkPixBuf \param src_x Shift on x, if any \param src_y Shift on y, if any \param width Image width \param height Image height */ static void convert_alpha (cairo_surface_t * surf, GdkPixbuf * pix, int src_x, int src_y, int width, int height) { int x, y; guchar * src_data = cairo_image_surface_get_data (surf); int src_stride = cairo_image_surface_get_stride (surf); guchar * dest_data = gdk_pixbuf_get_pixels (pix); int dest_stride = gdk_pixbuf_get_rowstride (pix); src_data += src_stride * src_y + src_x * 4; for (y = 0; y < height; y++) { guint32 *src = (guint32 *) src_data; for (x = 0; x < width; x++) { guint alpha = src[x] >> 24; if (alpha == 0) { dest_data[x * 4 + 0] = 0; dest_data[x * 4 + 1] = 0; dest_data[x * 4 + 2] = 0; } else { dest_data[x * 4 + 0] = (((src[x] & 0xff0000) >> 16) * 255 + alpha / 2) / alpha; dest_data[x * 4 + 1] = (((src[x] & 0x00ff00) >> 8) * 255 + alpha / 2) / alpha; dest_data[x * 4 + 2] = (((src[x] & 0x0000ff) >> 0) * 255 + alpha / 2) / alpha; } dest_data[x * 4 + 3] = alpha; } src_data += src_stride; dest_data += dest_stride; } } /*! \fn GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf) \brief convert cairo surface to GdkPixbuf \param surf the cairo sufrace to convert */ GdkPixbuf * convert_to_pixbuf (cairo_surface_t * surf) { int width = cairo_image_surface_get_width (surf); int height = cairo_image_surface_get_height (surf); GdkPixbuf * pix = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width , height); convert_alpha (surf, pix, 0, 0, width, height); return pix; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean to_activate_entry (GtkWidget * widg, GdkEventFocus * event, gpointer data) \brief GtkEntry activate signal managment \param widg the GtkWidget sending the signal \param event the associated focus event \param data the associated data pointer */ G_MODULE_EXPORT gboolean to_activate_entry (GtkWidget * widg, GdkEventFocus * event, gpointer data) { g_signal_emit_by_name (G_OBJECT(widg), "activate", data); return FALSE; } #else /*! \fn G_MODULE_EXPORT void to_activate_entry (GtkEventControllerFocus * focus, gpointer data) \brief GtkEntry activate signal managment \param focus Focus event controller \param data the associated data pointer */ G_MODULE_EXPORT void to_activate_entry (GtkEventControllerFocus * focus, gpointer data) { g_signal_emit_by_name (G_OBJECT(gtk_event_controller_get_widget((GtkEventController *)focus)), "activate", data); } #endif /*! \fn GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data) \brief Create a GtkEntry \param handler the callback \param dim the x size \param cdim the maximum number of character to display \param key_release Use release event (1/0) \param data the data pointer for the callback */ GtkWidget * create_entry (GCallback handler, int dim, int cdim, gboolean key_release, gpointer data) { GtkWidget * entry = gtk_entry_new (); gtk_widget_set_size_request (entry, dim, -1); #ifdef GTK4 gtk_editable_set_width_chars (GTK_EDITABLE(entry), 0); gtk_editable_set_max_width_chars (GTK_EDITABLE(entry), cdim); #else gtk_entry_set_width_chars (GTK_ENTRY(entry), 0); gtk_entry_set_max_width_chars (GTK_ENTRY(entry), cdim); #endif gtk_entry_set_alignment (GTK_ENTRY(entry), 1.0); if (handler != NULL) { g_signal_connect (G_OBJECT (entry), "activate", handler, data); #ifdef GTK3 g_signal_connect (G_OBJECT (entry), "focus-out-event", G_CALLBACK(to_activate_entry), data); #else /* Pour ajouter une icone dans l'entry: gtk_entry_set_icon_from_icon_name (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY, "edit-find-symbolic"); // Set up the search icon gtk_entry_set_icon_activatable (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY, TRUE); gtk_entry_set_icon_sensitive (GTK_ENTRY (entry), GTK_ENTRY_ICON_PRIMARY, TRUE); // Then the press can have action see gtk4 demo g_signal_connect (entry, "icon-press", G_CALLBACK(icon_press_cb), NULL); */ GtkEventController * focus = gtk_event_controller_focus_new (); gtk_event_controller_set_name (focus, "focus-out"); g_signal_connect (G_OBJECT(focus), "leave", G_CALLBACK(to_activate_entry), data); gtk_widget_add_controller (entry, focus); #endif } if (key_release) { #ifdef GTK3 g_signal_connect (G_OBJECT (entry), "key-release-event", G_CALLBACK(to_activate_entry), data); #else // Key press controler #endif } return entry; } /*! \fn GtkWidget * stock_image (const gchar * stock_id) \brief create a GtkImage for the Gtk database \param stock_id */ GtkWidget * stock_image (const gchar * stock_id) { #ifdef GTK4 return gtk_image_new_from_icon_name (stock_id); #else return gtk_image_new_from_icon_name (stock_id, GTK_ICON_SIZE_MENU); #endif } #ifdef GTK3 /*! \fn GtkWidget * create_menu_item (gboolean add_mnemo, gchar * name) \brief create a GtkMenuItem and set mnemonic \param add_mnemo Use mnemonic (1/0) \param name the name of the menu item */ GtkWidget * create_menu_item (gboolean add_mnemo, gchar * name) { return (add_mnemo) ? gtk_menu_item_new_with_mnemonic (name) : gtk_menu_item_new_with_label (name); } /*! \fn GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status) \brief create a GtkMenuItem using a GtkWidget as label \param widg the GtkWidget to use \param check Create a check menu item (1/0) \param radio Create a radio menu item (1/0) \param status If check or radio status (1/0) */ GtkWidget * create_menu_item_from_widget (GtkWidget * widg, gboolean check, gboolean radio, gboolean status) { GtkWidget * item; if (check) { item = gtk_check_menu_item_new (); if (radio) gtk_check_menu_item_set_draw_as_radio (GTK_CHECK_MENU_ITEM(item), TRUE); gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM(item), status); } else { item = gtk_menu_item_new (); } gtk_container_add (GTK_CONTAINER(item), widg); return item; } #endif /* GIcon* g_icon_new_for_string ( const gchar* str, GError** error ) void g_menu_item_set_icon ( GMenuItem* menu_item, GIcon* icon ) void g_menu_item_set_attribute ( GMenuItem* menu_item, const gchar* attribute, const gchar* format_string, ... ) */ /*! \fn GtkWidget * create_image_from_data (int format, gpointer item_image) \brief create Gtk image for data \param format Image format \param item_image the data to create the image */ GtkWidget * create_image_from_data (int format, gpointer item_image) { GtkWidget * icon = NULL; switch (format) { case IMG_PIXBUF: icon = gtk_image_new_from_pixbuf ((GdkPixbuf*)item_image); break; case IMG_SURFACE: #ifdef GTK4 icon = gtk_image_new_from_pixbuf (convert_to_pixbuf ((cairo_surface_t *)item_image)); #else icon = gtk_image_new_from_surface ((cairo_surface_t *)item_image); #endif break; case IMG_FILE: icon = gtk_image_new_from_file ((const gchar *)item_image); break; case IMG_STOCK: icon = stock_image ((const gchar *)item_image); break; } return icon; } #ifdef GTK3 /*! \fn GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, * int icon_format, gpointer item_icon, * GCallback handler, gpointer data, * gboolean accel, guint key, GdkModifierType mod, * gboolean check, gboolean radio, gboolean status) \brief create a GT3 menu item, and insert it in a menu, if any \param menu the menu to insert the menu item in \param name the name of the menu item \param icon_format the image format of the icon for the menu item \param item_icon the data for the image of the icon \param handler the callback for the menu item \param data the associated data pointer \param accel Keyboard short cut -1/0) \param key the key to press \param mod the modifier in any (Ctrl, Alt ...) \param check Create a check menu item (1/0) \param radio Create a radio menu item (1/0) \param status If check or radio status (1/0) */ GtkWidget * gtk3_menu_item (GtkWidget * menu, gchar * name, int icon_format, gpointer item_icon, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod, gboolean check, gboolean radio, gboolean status) { GtkWidget * item; GtkWidget * icon = NULL; GtkWidget * lab = NULL; if (name) { if (accel) { lab = gtk_accel_label_new (name); gtk_label_align (lab, 0.0, 0.5); gtk_widget_set_size_request (lab, -1, -1); gtk_label_set_use_markup (GTK_LABEL(lab), TRUE); gtk_accel_label_set_accel ((GtkAccelLabel *)lab, key, mod); } else { lab = markup_label(name, -1, -1, 0.0, 0.5); } } if (icon_format != IMG_NONE) icon = create_image_from_data (icon_format, item_icon); if (name) { #ifdef MENU_ICONS if (icon) { GtkWidget * box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, icon, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, lab, FALSE, FALSE, (icon_format == IMG_SURFACE) ? 0 : 6); item = create_menu_item_from_widget (box, check, radio, status); } else { item = create_menu_item_from_widget (lab, check, radio, status); } #else item = create_menu_item_from_widget (lab, check, radio, status); #endif } else if (icon) { item = create_menu_item_from_widget (icon, check, radio, status); } if (handler != NULL) g_signal_connect (G_OBJECT(item), "activate", handler, data); if (menu != NULL) gtk_menu_shell_append ((GtkMenuShell *)menu, item); return item; } /*! \fn GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod) \brief short cut to create and insert a menu item with the "Advanced" text and a stock icon \param menu the menu to insert the menu item \param handler the callback for the menu item \param data the associated data pointer \param accel Keyboard short cut -1/0) \param key the key to press \param mod the modifier in any (Ctrl, Alt ...) */ GtkWidget * add_advanced_item (GtkWidget * menu, GCallback handler, gpointer data, gboolean accel, guint key, GdkModifierType mod) { return gtk3_menu_item (menu, "Advanced", IMG_STOCK, (gpointer)DPROPERTIES, handler, data, accel, key, mod, FALSE, FALSE, FALSE); } /*! \fn void add_menu_separator (GtkWidget * menu) \brief add sepator in a menu \param menu the GtkMenu */ void add_menu_separator (GtkWidget * menu) { gtk_menu_shell_append ((GtkMenuShell *)menu, gtk_separator_menu_item_new ()); } #endif /* * GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay) \brief create a GtkLabel with pango markup \param text Message to display \param dimx y size for the widget \param dimy y size for the widget \param ax x alignment \param ay y alignment */ GtkWidget * markup_label (gchar * text, int dimx, int dimy, float ax, float ay) { GtkWidget * lab = gtk_label_new (text); gtk_label_align (lab, ax, ay); gtk_widget_set_size_request (lab, dimx, dimy); gtk_label_set_use_markup (GTK_LABEL(lab), TRUE); return lab; } /*! \fn ColRGBA * duplicate_color (int num, ColRGBA * col) \brief duplicate a ColRGBA pointer \param num Size of the pointer \param col ColRGBA pointer to duplicate */ ColRGBA * duplicate_color (int num, ColRGBA * col) { ColRGBA * new_col = g_malloc0 (num*sizeof*new_col); int i; for (i=0; i.", 5, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, 150, 30, 0.0, 0.5), FALSE, FALSE, 0); return hbox; } GtkWidget * bbox (GtkWidget * box, char * lab) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 2); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(lab, 150, 30, 0.0, 0.5), FALSE, FALSE, 0); return hhbox; } GtkWidget * cbox (GtkWidget * box, char * lab) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, TRUE, TRUE, 2); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, TRUE, TRUE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(lab, -1, 30, 0.0, 0.5), TRUE, TRUE, 40); return hhbox; } GtkWidget * fbox (GtkWidget * box, char * lab) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(".", 5, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, 350, 30, 0.0, 0.5), FALSE, FALSE, 0); return hbox; } /*! \fn GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow) \brief create a scroll window \param box the box to insert the scroll window in, if any \param dimx the x size of the widget \param dimy the x size of the widget \param shadow Add shadow (1/0) */ GtkWidget * create_scroll (GtkWidget * box, int dimx, int dimy, int shadow) { GtkWidget * scroll; #ifdef GTK4 scroll = gtk_scrolled_window_new (); #else scroll = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(scroll), shadow); #endif gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW(scroll), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_size_request (scroll, dimx, dimy); // To check all create_scroll ! if (box != NULL) add_box_child_start (GTK_ORIENTATION_VERTICAL, box, scroll, TRUE, TRUE, 0); return scroll; } /*! \fn GtkWidget * create_expander (gchar * name, gchar * file_img) \brief create GtkExpander \param name Name of the expander tab \param file_img image file to add if required */ GtkWidget * create_expander (gchar * name, gchar * file_img) { GtkWidget * expand = gtk_expander_new (name); GtkWidget * hbox = create_hbox (0); if (file_img != NULL) { GtkWidget * img = gtk_image_new_from_file (file_img); gtk_widget_set_size_request (img, 20, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img, TRUE, TRUE, 10); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(name, 200, 20, 0.0, 0.5), FALSE, TRUE, 0); gtk_expander_set_label_widget (GTK_EXPANDER(expand), hbox); return expand; } /*! \fn void provide_gtk_css (gchar * css) \brief create a css provider based on the css data \param css the css data, use the name of the variable to use the css */ void provide_gtk_css (gchar * css) { GtkCssProvider * provider = gtk_css_provider_new (); #ifdef GTK4 gtk_css_provider_load_from_data (provider, css, -1); gtk_style_context_add_provider_for_display (gdk_display_get_default (), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); #else gtk_css_provider_load_from_data (provider, css, -1, NULL); gtk_style_context_add_provider_for_screen (gdk_screen_get_default (), GTK_STYLE_PROVIDER(provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); #endif g_object_unref (provider); } /*! \fn GtkWidget * destroy_this_widget (GtkWidget * widg) \brief destroy a GtkWidget \param widg the GtkWidget to destroy */ GtkWidget * destroy_this_widget (GtkWidget * widg) { if (widg != NULL) { if (GTK_IS_WIDGET(widg)) { if (is_the_widget_visible(widg)) gtk_widget_hide (widg); #ifdef GTK3 gtk_widget_destroy (widg); #else GtkWidget * wid = gtk_widget_get_parent (widg); if (wid != NULL) { if (GTK_IS_WIDGET(wid)) { gtk_widget_unparent (widg); } } #endif } } return NULL; } /*! \fn void destroy_this_dialog (GtkDialog * dialog) \brief destroy a GtkDialog \param dialog the GtkDialog to destroy */ void destroy_this_dialog (GtkDialog * dialog) { #ifdef GTK4 gtk_window_destroy (GTK_WINDOW(dialog)); #else destroy_this_widget (GTK_WIDGET(dialog)); #endif g_main_loop_quit (Event_loop[dialog_id]); g_main_loop_unref (Event_loop[dialog_id]); dialog_id --; } /*! \fn void destroy_this_native_dialog (GtkNativeDialog * dialog) \brief destroy a GtkNativeDialog \param dialog the GtkNativeDialog to destroy */ void destroy_this_native_dialog (GtkNativeDialog * dialog) { gtk_native_dialog_destroy (dialog); g_object_unref (dialog); g_main_loop_quit (Event_loop[dialog_id]); g_main_loop_unref (Event_loop[dialog_id]); dialog_id --; } /*! \fn G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data) \brief to destroy a GtkDialog when the dialog emit the closing signal \param dialog the GtkDialog to destroy \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_destroy_dialog (GtkDialog * dialog, gint response_id, gpointer data) { destroy_this_dialog (dialog); } #ifdef GTK4 /*! \fn GListModel * file_chooser_get_file_names (GtkFileChooser * chooser) \brief create a file list from files selected using a GtkFileChooser */ GListModel * file_chooser_get_file_names (GtkFileChooser * chooser) { return gtk_file_chooser_get_files (chooser); } #else /*! \fn GList * file_chooser_get_file_names (GtkFileChooser * chooser) \brief create a file list from files selected using a GtkFileChooser */ GSList * file_chooser_get_file_names (GtkFileChooser * chooser) { return gtk_file_chooser_get_filenames (chooser); } #endif /*! \fn gchar * file_chooser_get_file_name (GtkFileChooser * chooser) \brief get a file name from a GtkFileChooser (single file selected) \param chooser the GtkFilechooser */ gchar * file_chooser_get_file_name (GtkFileChooser * chooser) { #ifdef GTK4 return g_file_get_parse_name (gtk_file_chooser_get_file (chooser)); #else return gtk_file_chooser_get_filename (chooser); #endif } /*! \fn gchar * file_chooser_get_current_folder (GtkFileChooser * chooser) \brief get the current folder for a GtkFileChooser \param chooser the GtkFilechooser */ gchar * file_chooser_get_current_folder (GtkFileChooser * chooser) { #ifdef GTK4 return g_file_get_parse_name (gtk_file_chooser_get_current_folder (chooser)); #else return gtk_file_chooser_get_current_folder (chooser); #endif } /*! \fn gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename) \brief set file name in a GtkFilechooser \param chooser the GtkFilechooser \param filename the file name to appear in the GtkFilechooser */ gboolean file_chooser_set_file_name (GtkFileChooser * chooser, gchar * filename) { GFile * default_file_for_saving = g_file_new_for_path (filename); gboolean res = gtk_file_chooser_set_file (chooser, default_file_for_saving, NULL); if (! res) { gchar * str = g_strdup_printf ("Impossible to locate file: %s", filename); show_error (str, 0, (GtkWidget *)chooser); } return res; } /*! \fn void file_chooser_set_current_folder (GtkFileChooser * chooser) \brief set current folder in a GtkFilechooser \param chooser the GtkFilechooser */ void file_chooser_set_current_folder (GtkFileChooser * chooser) { #ifdef GTK4 gtk_file_chooser_set_current_folder (chooser, g_file_new_for_path ("./"), NULL); #else gtk_file_chooser_set_current_folder (chooser, ""); #endif } #ifdef GTK4 /*! \fn GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) \brief create a GtkFileChooser, utility to select file(s) \param title the title of the window \param parent the parent window, if any \param act the action to perform (read or write) \param act_name the action name to display */ GtkFileChooserNative * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) { return gtk_file_chooser_native_new (title, parent, act, act_name, "Cancel"); } #else /*! \fn GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) \brief create a GtkFileChooser, utility to select file(s) \param title the title of the window \param parent the parent window, if any \param act the action to perform (read or write) \param act_name the action name to display */ GtkWidget * create_file_chooser (const gchar * title, GtkWindow * parent, GtkFileChooserAction act, const gchar * act_name) { return gtk_file_chooser_dialog_new (title, parent, act, "Cancel", GTK_RESPONSE_CANCEL, act_name, GTK_RESPONSE_ACCEPT, NULL); } #endif /*! \fn ColRGBA get_button_color (GtkColorChooser * colob) \brief get the ColRGBA color from a GtkColorChooser button \param colob the GtkColorChooser button */ ColRGBA get_button_color (GtkColorChooser * colob) { GdkRGBA col; gtk_color_chooser_get_rgba (colob, & col); return gdkrgba_to_rgba (col); } /*! \fn ColRGBA get_window_color (GtkWidget * color_win) \brief get the ColRGBA color from a color selection window \param color_win the color selection window */ ColRGBA get_window_color (GtkWidget * color_win) { GdkRGBA col; gtk_color_chooser_get_rgba (GTK_COLOR_CHOOSER(color_win), & col); return gdkrgba_to_rgba (col); } /*! \fn void set_color_chooser_color (GtkWidget * color_win, ColRGBA col) \brief set the color of a color selection window \param color_win the color selection window \param col the color to use */ void set_color_chooser_color (GtkWidget * color_win, ColRGBA col) { GdkRGBA colo = colrgba_togtkrgba(col); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(color_win), & colo); } #ifdef GTK4 /*! \fn void pop_menu_at_pointer (GtkWidget * pop, double x, double y) \brief popup a popover menu at pointer location \param pop the menu to popup \param x x position \param y y position */ void pop_menu_at_pointer (GtkWidget * pop, double x, double y) { GdkRectangle rect; rect.x = x; rect.y = y; rect.width = 1; rect.height = 1; gtk_popover_set_has_arrow (GTK_POPOVER(pop), FALSE); gtk_popover_set_pointing_to (GTK_POPOVER(pop), & rect); gtk_popover_popup (GTK_POPOVER(pop)); } #else /*! \fn void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event) \brief popup a menu at pointer location \param widg the menu to popup \param event the GdkEvent triggering the signal */ void pop_menu_at_pointer (GtkWidget * widg, GdkEvent * event) { show_the_widgets (widg); gtk_menu_popup_at_pointer (GTK_MENU (widg), event); } #endif /*! \fn GtkWidget * get_top_level (GtkWidget * widg) \brief get the top level container, window, of a widget \param widg the GtkWidget */ GtkWidget * get_top_level (GtkWidget * widg) { #ifdef GTK4 return (GtkWidget *)gtk_widget_get_root (widg); #else return gtk_widget_get_toplevel (widg); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data) \brief destroy a GtkWindow \param win the GtkWindow to destroy \param data the associated data pointer */ G_MODULE_EXPORT gboolean destroy_this_window (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data) \brief destroy a GtkWindow \param win the GtkWindow to destroy \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean destroy_this_window (GtkWidget * win, GdkEvent * event, gpointer data) #endif { destroy_this_widget (GTK_WIDGET(win)); return TRUE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data) \brief hide a GtkWindow \param win the GtkWindow to hide \param data the associated data pointer */ G_MODULE_EXPORT gboolean hide_this_window (GtkWindow * win, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data) \brief hide a GtkWindow \param win the GtkWindow to hide \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean hide_this_window (GtkWidget * win, GdkEvent * event, gpointer data) #endif { gtk_widget_hide (GTK_WIDGET(win)); return TRUE; } /*! \fn void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data) \brief add a close event signal and callback to a GtkWidget \param widg the GtkWidget \param handler the callback for the close event \param data the associated data pointer */ void add_gtk_close_event (GtkWidget * widg, GCallback handler, gpointer data) { #ifdef GTK4 g_signal_connect (G_OBJECT (widg), "close-request", handler, data); #else g_signal_connect (G_OBJECT (widg), "delete-event", handler, data); #endif } Atomes-GNU-1.1.14/src/gui/gui.c000066400000000000000000001215071457665371200160060ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file gui.c * @short GUI of the main window \n Menu elements of the workspace menu \n Creation of menu items, actions, used in the entire atomes software * @author Sébastien Le Roux */ /* * This file: 'gui.c' * * Contains: * - The GUI of the main window - The menu elements of the workspace menu - Creation of menu items, actions, of menu items, actions, used in the entire atomes software * * List of functions: G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data); G_MODULE_EXPORT gboolean on_atomes_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data); void clean_view (); void view_buffer (GtkTextBuffer * buffer); void atomes_key_pressed (guint keyval, GdkModifierType state); void add_action (GSimpleAction * action); void remove_action (gchar * action_name); void remove_edition_actions (); void remove_edition_and_analyze_actions (); void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, const gchar * stat); void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu); void append_menu_item (GMenu * menu, const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus); G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data); GtkWidget * create_main_window (GApplication * atomes); GMenuItem * create_gmenu_item (const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus); GMenu * workspace_section (gchar * act, int pop); GMenu * port_section (gchar * act, int pop, int port); GMenu * project_section (gchar * act, int pop_up, int proj, int calc); GMenu * import_section (gchar * act); GMenu * quit_section (gchar * act); GMenu * workspace_title (); GMenu * project_title (int pop_up, int proj); GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc); GMenu * create_edit_menu (); GMenu * tool_box_section (); GMenu * create_analyze_menu (); GMenu * create_help_menu (); GMenu * atomes_menu_bar (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" extern int objects[3]; extern int * object_was_selected[3]; extern int ** tmp_object_id[3]; extern GtkWidget * curvetbox (); extern GtkWidget * work_menu (int p, int c); extern G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data); extern int get_atom_id_from_periodic_table (atom_search * asearch); extern G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_edit_activate (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data); #ifdef GTK3 GtkWidget * MainEvent; #endif gchar * dots[NDOTS]; gchar * calc_img[NCALCS-2]; gchar * graph_img[NGRAPHS]; char * calc_name[NCALCS-2] = {"g(r)/G(r)", "S(q) from FFT[g(r)]", "S(q) from Debye equation", "g(r)/G(r) from FFT[S(q)]", "Bonds and angles", "Ring statistics", "Chain statistics", "Spherical harmonics", "Mean Squared Displacement", "Bond valence"}; char * graph_name[NGRAPHS] = {"g(r)/G(r)", "S(q) from FFT[g(r)]", "S(q) from Debye equation", "g(r)/G(r) from FFT[S(q)]", "Bonds properties", "Angle distributions", "Ring statistics", "Chain statistics", "Spherical harmonics", "Mean Squared Displacement"}; tint cut_sel; tint cut_lab; dint davect[9]; ColRGBA std[6]; #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief popup a menu at an event position \param widget the GtkWidget sending the signal \param event the associated event \param data the associated pointer data */ G_MODULE_EXPORT gboolean pop_menu (GtkWidget * widget, GdkEventButton * event, gpointer data) { if (event -> button == 3) { pop_menu_at_pointer (work_menu (-1, -1), (GdkEvent *)event); } return FALSE; } #endif /*! \fn void clean_view () \brief clean the main window */ void clean_view () { MainView = destroy_this_widget (MainView); atomes_logo = destroy_this_widget (atomes_logo); #ifdef GTK4 atomes_logo = gtk_picture_new_for_filename (PACKAGE_LOGO); gtk_widget_set_size_request (atomes_logo, 550, -1); add_container_child (CONTAINER_SCR, MainScrol[1], atomes_logo); #else atomes_logo = gtk_image_new_from_file (PACKAGE_LOGO); MainScrol[1] = destroy_this_widget (MainScrol[1]); gtk_container_add (GTK_CONTAINER(MainEvent), atomes_logo); show_the_widgets (MainEvent); #endif } /*! \fn void view_buffer (GtkTextBuffer * buffer) \brief set a text buffer in the main window or an image \param buffer the GtkTextBuffer to display */ void view_buffer (GtkTextBuffer * buffer) { if (atomes_logo) { #ifdef GTK4 add_container_child (CONTAINER_SCR, MainScrol[1], NULL); #endif atomes_logo = destroy_this_widget (atomes_logo); } gboolean add = FALSE; if (! MainView) { MainView = gtk_text_view_new (); gtk_text_view_set_editable (GTK_TEXT_VIEW(MainView), 0); text_view_set_monospace (MainView); add = TRUE; } gtk_text_view_set_buffer (GTK_TEXT_VIEW(MainView), buffer); #ifdef GTK3 if (! MainScrol[1]) { MainScrol[1] = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN); gtk_container_add (GTK_CONTAINER(MainEvent), MainScrol[1]); add = TRUE; } if (add) gtk_container_add (GTK_CONTAINER(MainScrol[1]), MainView); #else if (add) { add_container_child (CONTAINER_SCR, MainScrol[1], MainView); } #endif show_the_widgets (MainScrol[1]); } /*! \fn void atomes_key_pressed (guint keyval, GdkModifierType state) \brief main window key actions callbacks \param keyval key id \param state modifier (Ctrl, Alt ...) */ void atomes_key_pressed (guint keyval, GdkModifierType state) { if (state & GDK_CONTROL_MASK) { switch (keyval) { case GDK_KEY_a: create_about_dialog (NULL, NULL); break; case GDK_KEY_c: on_close_workspace (NULL, GINT_TO_POINTER(1)); break; case GDK_KEY_n: on_create_new_project (NULL, NULL); break; case GDK_KEY_o: on_open_save_activate (NULL, GINT_TO_POINTER(0)); break; case GDK_KEY_p: get_atom_id_from_periodic_table (NULL); break; case GDK_KEY_q: #ifdef GTK4 leaving_question (NULL, NULL); #else leaving_question (NULL, NULL, NULL); #endif break; case GDK_KEY_s: on_save_as_activate (NULL, GINT_TO_POINTER(3)); break; case GDK_KEY_t: on_show_curve_toolbox (NULL, NULL); break; case GDK_KEY_w: on_open_save_activate (NULL, GINT_TO_POINTER(2)); break; } } } #ifdef GTK3 /* gboolean on_atomes_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) { if (event -> type == GDK_KEY_PRESS) { atomes_key_pressed (event-> keyval, event -> state); } return FALSE; } */ #endif /*! \fn void add_action (GSimpleAction * action) \brief add action to the main window action map \param action the GAction sending the signal the action to add */ void add_action (GSimpleAction * action) { g_action_map_add_action (G_ACTION_MAP(AtomesApp), G_ACTION(action)); } /*! \fn void remove_action (gchar * action_name) \brief add action from the main window action map \param action_name the action to remove */ void remove_action (gchar * action_name) { g_action_map_remove_action (G_ACTION_MAP(AtomesApp), (const gchar *)action_name); } /*! \fn void remove_edition_actions () \brief remove all edition actions */ void remove_edition_actions () { int i; for (i=0; i<3; i++) remove_action (edition_action_names[i]); } /*! \fn void remove_edition_and_analyze_actions () \brief remove all edition and analysis action */ void remove_edition_and_analyze_actions () { remove_edition_actions (); int i; for (i=0; i<9; i++) remove_action (analyze_action_names[i]); } /*! \fn G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data) \brief show the periodic table of the elements \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_periodic_table (GtkWidget * widg, gpointer data) { get_atom_id_from_periodic_table (NULL); } /*! \fn G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) \brief atomes menu bar actions \param action the GAction sending the signal the GSimpleAction sending the signal \param parameter GVariant parameter of the GAction the parameter of the action, if any \param data the associated data pointer */ G_MODULE_EXPORT void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data) { gchar * name = g_strdup_printf ("%s", g_action_get_name(G_ACTION(action))); if (g_strcmp0 (name, "workspace.open") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "workspace.save") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "workspace.save-as") == 0) { on_save_as_activate (NULL, data); } else if (g_strcmp0 (name, "workspace.close") == 0) { on_close_workspace (NULL, data); } else if (g_strcmp0 (name, "project.new") == 0) { on_create_new_project (NULL, data); } else if (g_strcmp0 (name, "project.edit") == 0) { change_project_name (NULL, data); } else if (g_strcmp0 (name, "project.active") == 0) { activate_project (NULL, data); } else if (g_strcmp0 (name, "project.compute") == 0) { compute_this_prop (NULL, data); } else if (g_strcmp0 (name, "project.open") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "project.save") == 0) { on_open_save_activate (NULL, data); } else if (g_strcmp0 (name, "project.save-as") == 0) { on_save_as_activate (NULL, data); } else if (g_strcmp0 (name, "project.close") == 0) { on_close_activate (NULL, data); } else if (g_strcmp0 (name, "export.isaacs") == 0) { on_isaacs_port (NULL, data); } else if (g_strcmp0 (name, "export.coordinates") == 0) { on_coord_port (NULL, data); } else if (g_strcmp0 (name, "import.isaacs") == 0) { on_isaacs_port (NULL, data); } else if (g_strcmp0 (name, "import.coordinates") == 0) { on_coord_port (NULL, data); } else if (g_strcmp0 (name, "program.quit") == 0) { leaving_from_menu (NULL, data); } else if (g_strcmp0 (name, "edit.chemistry") == 0) { on_edit_activate (NULL, data); } else if (g_strcmp0 (name, "edit.periodicity") == 0) { on_edit_activate (NULL, data); } else if (g_strcmp0 (name, "edit.cutoffs") == 0) { on_edit_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.gr") == 0) { on_calc_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.sq") == 0) { on_calc_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.sk") == 0) { on_calc_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.gk") == 0) { on_calc_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.bonds") == 0) { on_calc_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.rings") == 0) { on_calc_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.chains") == 0) { on_calc_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.sp") == 0) { on_calc_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.msd") == 0) { on_calc_activate (NULL, data); } else if (g_strcmp0 (name, "analyze.tool-box") == 0) { on_show_curve_toolbox (NULL, data); } else if (g_strcmp0 (name, "help.periodic") == 0) { show_periodic_table (NULL, data); } else if (g_strcmp0 (name, "help.about") == 0) { create_about_dialog (NULL, data); } /*else if (g_strcmp0 (name, "help.register") == 0) { register_atomes (NULL, data); }*/ g_free (name); } GIcon * get_gicon_from_data (int format, const gchar * icon) { switch (format) { case IMG_FILE: return g_file_icon_new (g_file_new_for_path (icon)); break; case IMG_STOCK: return g_themed_icon_new (icon); break; default: return NULL; break; } } /*! \fn void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data, * gboolean check, gboolean status, gboolean radio, const gchar * stat) \brief add an action to an action group \param action_group the action group to add an action to \param act the name of the action to add \param handler the associated callback \param data the associated data pointer \param check is the action a check (1/0) \param status if check or radio, status of the action (1/0) \param radio is the action a radio (1/0) \param stat if radio variant parameter of the action */ void widget_add_action (GSimpleActionGroup * action_group, const gchar * act, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, const gchar * stat) { GSimpleAction * action; GVariant * action_state; if (radio) { action_state = g_variant_new_string (stat); action = g_simple_action_new_stateful (act, G_VARIANT_TYPE_STRING, action_state); } else if (check) { action_state = g_variant_new_boolean (status); action = g_simple_action_new_stateful (act, NULL, action_state); } else { action = g_simple_action_new (act, NULL); } g_signal_connect (action, "activate", handler, data); g_action_map_add_action (G_ACTION_MAP(action_group), G_ACTION(action)); } /*! \fn GMenuItem * create_gmenu_item (const gchar * label, const gchar * action, const gchar * accel, * const gchar * custom, int format, const gchar * icon, * gboolean check, gboolean status, gboolean radio, const gchar * rstatus) \brief create menu item \param label Label of the menu item \param action Action of the menu item \param accel Keyboard accelerator, if any \param custom Custom menu item ? NULL otherwise \param format Image format if not IMG_NONE \param icon Image data if not NULL \param check Check menu item ? \param status If check then status \param radio Radio menu item ? \param rstatus If radio then variant parameter */ GMenuItem * create_gmenu_item (const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus) { GMenuItem * item; item = g_menu_item_new (label, action); /* GKT4 bug, normally mark-up should be provided using boolean: g_menu_item_set_attribute (item, "use-markup", "b", TRUE, NULL); But it does not work, however it does using a string: */ g_menu_item_set_attribute (item, "use-markup", "s", "TRUE", NULL); if (custom) { g_menu_item_set_attribute (item, "custom", "s", custom, NULL); // g_menu_item_set_attribute_value (item, "custom", g_variant_new_string (custom)); GVariant * cust = g_menu_item_get_attribute_value (item, "custom", g_variant_type_new("s")); if (cust) g_print ("item :: %s, custom :: %s\n", label, g_variant_get_string (cust, NULL)); } else { if (accel) g_menu_item_set_attribute (item, "accel", "s", accel, NULL); // if (check) g_menu_item_set_attribute (item, "target", "b", status, NULL); if (radio) g_menu_item_set_attribute (item, "target", "s", rstatus, NULL); #ifdef MENU_ICONS if (icon) { GIcon * gicon = get_gicon_from_data (format, icon); if (gicon) { g_menu_item_set_icon (item, gicon); g_object_unref (gicon); } } #endif } return item; } /*! \fn void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu) \brief append a GMenuItem with a subenu to a GMenu, and use markup for the GMenuItem \param menu the GMenu to insert the item with a submenu \param label the text for the menu item \param submenu the submenu to add to the menu item */ void append_submenu (GMenu * menu, const gchar * label, GMenu * submenu) { GMenuItem * item = g_menu_item_new (label, NULL); /* GKT4 bug, normally mark-up should be provided using boolean: g_menu_item_set_attribute (item, "use-markup", "b", TRUE, NULL); But it does not work, however it does using a string: */ g_menu_item_set_attribute (item, "use-markup", "s", "TRUE", NULL); g_menu_item_set_submenu (item, (GMenuModel *)submenu); g_menu_append_item (menu, item); } /*! \fn void append_menu_item (GMenu * menu, const gchar * label, const gchar * action, const gchar * accel, * const gchar * custom, int format, const gchar * icon, * gboolean check, gboolean status, gboolean radio, const gchar * rstatus) \brief create a menu item, then append it to a menu \param menu the menu to insert the item in \param label Label of the menu item \param action Action of the menu item \param accel Keyboard accelerator, if any \param custom Custom menu item ? NULL otherwise \param format Image format if not IMG_NONE \param icon Image data if not NULL \param check Check menu item ? \param status If check then status \param radio Radio menu item ? \param rstatus If radio then variant parameter */ void append_menu_item (GMenu * menu, const gchar * label, const gchar * action, const gchar * accel, const gchar * custom, int format, const gchar * icon, gboolean check, gboolean status, gboolean radio, const gchar * rstatus) { GMenuItem * item = create_gmenu_item (label, action, accel, custom, format, icon, check, status, radio, rstatus); g_menu_append_item (menu, item); g_object_unref (item); } /*! \fn GMenu * workspace_section (gchar * act, int pop) \brief create the workspace section \param act app" or "pop" key for the GAction \param pop from main app (0) or contextual (1) */ GMenu * workspace_section (gchar * act, int pop) { GMenu * menu = g_menu_new (); gchar * str; str = g_strdup_printf ("%s.workspace.open", act); append_menu_item (menu, "Open", (const gchar *)str, "W", NULL, IMG_STOCK, FOPEN, FALSE, FALSE, FALSE, NULL); g_free (str); if (! pop || nprojects) { str = g_strdup_printf ("%s.workspace.save", act); append_menu_item (menu, "Save", (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVE, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.workspace.save-as", act); append_menu_item (menu, "Save As", (const gchar *)str, "S", NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.workspace.close", act); append_menu_item (menu, "Close", (const gchar *)str, "C", NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL); g_free (str); } return menu; } /*! \fn GMenu * port_section (gchar * act, int pop, int port) \brief create the import/export menu items \param act "app" or "pop" key for the GAction \param pop from main app (0) or contextual (1) \param port Import (1) or Export (0) */ GMenu * port_section (gchar * act, int pop, int port) { gchar * port_action[2]={"export", "import"}; GMenu * menu = g_menu_new (); gchar * str; str = g_strdup_printf ("%s.%s.isaacs", act, port_action[port]); append_menu_item (menu, "ISAACS Project File (*.ipf)", (const gchar *)str, NULL, NULL, IMG_FILE, PACKAGE_MOL, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.%s.coordinates", act, port_action[port]); append_menu_item (menu, "Atomic Coordinates", (const gchar *)str, NULL, NULL, IMG_FILE, (port) ? PACKAGE_IMP : PACKAGE_CON, FALSE, FALSE, FALSE, NULL); g_free (str); return menu; } /*! \fn GMenu * project_section (gchar * act, int pop_up, int proj, int calc) \brief create the project section \param act "app" or "pop" key for the GAction \param pop_up from main app (0) or contextual (1) \param proj project id, if any (or -1) \param calc calculation id, if any (or -1) */ GMenu * project_section (gchar * act, int pop_up, int proj, int calc) { GMenu * menu = g_menu_new (); gchar * str, * str_n; if (pop_up && nprojects && proj > -1) { if (activep != proj) { str = g_strdup_printf ("%s.project.active", act); append_menu_item (menu, "Make Active", (const gchar *)str, NULL, NULL, IMG_STOCK, YES, FALSE, FALSE, FALSE, NULL); g_free (str); } if (calc > -1) { str = g_strdup_printf ("%s.project.compute", act); str_n = g_strdup_printf ("Analyze: %s", work_menu_items[calc+4]); append_menu_item (menu, str_n, (get_project_by_id(proj) -> runok[calc]) ? (const gchar *)str : "None", NULL, NULL, IMG_FILE, graph_img[calc], FALSE, FALSE, FALSE, NULL); g_free (str); g_free (str_n); } str = g_strdup_printf ("%s.project.edit", act); append_menu_item (menu, "Edit Name", (const gchar *)str, NULL, NULL, IMG_STOCK, EDITA, FALSE, FALSE, FALSE, NULL); g_free (str); } str = g_strdup_printf ("%s.project.new", act); append_menu_item (menu, "New", (const gchar *)str, "N", NULL, IMG_STOCK, FNEW, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.project.open", act); append_menu_item (menu, "Open", (const gchar *)str, "O", NULL, IMG_STOCK, FOPEN, FALSE, FALSE, FALSE, NULL); g_free (str); if (! pop_up || proj > -1) { str = g_strdup_printf ("%s.project.save", act); append_menu_item (menu, "Save", (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVE, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.project.save-as", act); append_menu_item (menu, "Save As", (const gchar *)str, NULL, NULL, IMG_STOCK, FSAVEAS, FALSE, FALSE, FALSE, NULL); g_free (str); str = g_strdup_printf ("%s.project.close", act); append_menu_item (menu, "Close", (const gchar *)str, NULL, NULL, IMG_STOCK, FCLOSE, FALSE, FALSE, FALSE, NULL); g_free (str); append_submenu (menu, "Export", port_section(act, pop_up, 0)); } return menu; } /*! \fn GMenu * import_section (gchar * act) \brief create the 'Import' submenu \param act "app" or "pop" key for the GAction */ GMenu * import_section (gchar * act) { GMenu * menu = g_menu_new (); append_submenu (menu, "Import", port_section(act, 0, 1)); return menu; } /*! \fn GMenu * quit_section (gchar * act) \brief create the 'Quit' menu item \param act "app" or "pop" key for the GAction */ GMenu * quit_section (gchar * act) { GMenu * menu = g_menu_new (); gchar * str = g_strdup_printf ("%s.program.quit", act); append_menu_item (menu, "Quit", (const gchar *)str, "Q", NULL, IMG_STOCK, FEXIT, FALSE, FALSE, FALSE, NULL); g_free (str); return menu; } /*! \fn GMenu * workspace_title () \brief create the 'Workspace' menu item */ GMenu * workspace_title () { GMenu * menu = g_menu_new (); append_menu_item (menu, "Workspace", "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * project_title (int pop_up, int proj) \brief create project title menu item \param pop_up from main app (0) or contextual (1) \param proj project id, if any (or -1) */ GMenu * project_title (int pop_up, int proj) { GMenu * menu = g_menu_new (); if (pop_up && nprojects && proj > -1) { gchar * str = g_strdup_printf ("%s", get_project_by_id(proj) -> name); append_menu_item (menu, str, "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL); g_free (str); } else { append_menu_item (menu, "Project(s)", "None", NULL, NULL, IMG_FILE, PACKAGE_TD, FALSE, FALSE, FALSE, NULL); } return menu; } /*! \fn GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc) \brief create atomes 'workspace' menu \param act "app" or "pop" key for the GAction \param pop_up from main app (0) or contextual (1) \param proj project id, if any (or -1) \param calc calculation id, if any (or -1) */ GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc) { GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel*)workspace_title()); g_menu_append_section (menu, NULL, (GMenuModel*)workspace_section(act, pop_up)); g_menu_append_section (menu, NULL, (GMenuModel*)project_title(pop_up, proj)); g_menu_append_section (menu, NULL, (GMenuModel*)project_section(act, pop_up, proj, calc)); g_menu_append_section (menu, NULL, (GMenuModel*)import_section(act)); g_menu_append_section (menu, NULL, (GMenuModel*)quit_section(act)); return menu; } /*! \fn GMenu * create_edit_menu () \brief create atomes 'edit' menu */ GMenu * create_edit_menu () { GMenu * menu = g_menu_new (); append_menu_item (menu, "Chemistry and Physics", "app.edit.chemistry", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "Box and Periodicity", "app.edit.periodicity", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "Bond Cutoffs", "app.edit.cutoffs", NULL, NULL, IMG_STOCK, DPROPERTIES, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * tool_box_section () \brief create toolboxes menu item */ GMenu * tool_box_section () { GMenu * menu = g_menu_new (); append_menu_item (menu, "Toolboxes", "app.analyze.tool-box", "T", NULL, IMG_STOCK, PAGE_SETUP, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * create_analyze_menu () \brief create atomes 'analyze' menu */ GMenu * create_analyze_menu () { GMenu * menu = g_menu_new (); append_menu_item (menu, "g(r) / G(r)", "app.analyze.gr", NULL, NULL, IMG_FILE, PACKAGE_GR, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "S(q) from FFT[g(r)]", "app.analyze.sq", NULL, NULL, IMG_FILE, PACKAGE_SQ, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "S(q) from Debye Eq.", "app.analyze.sk", NULL, NULL, IMG_FILE, PACKAGE_SQ, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "g(r) / G(r) from FFT[S(q)]", "app.analyze.gk", NULL, NULL, IMG_FILE, PACKAGE_GR, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "Bonds and Angles", "app.analyze.bonds", NULL, NULL, IMG_FILE, PACKAGE_BD, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "Ring statistics", "app.analyze.rings", NULL, NULL, IMG_FILE, PACKAGE_RI, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "Chain statistics", "app.analyze.chains", NULL, NULL, IMG_FILE, PACKAGE_CH, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "Spherical Harmonics", "app.analyze.sp", NULL, NULL, IMG_FILE, PACKAGE_SP, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "Mean Squared Displacement", "app.analyze.msd", NULL, NULL, IMG_FILE, PACKAGE_MS, FALSE, FALSE, FALSE, NULL); g_menu_append_section (menu, NULL, (GMenuModel*)tool_box_section()); return menu; } /*! \fn GMenu * create_help_menu () \brief create atomes 'help' menu */ GMenu * create_help_menu () { GMenu * menu = g_menu_new (); append_menu_item (menu, "Periodic Table", "app.help.periodic", "P", NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "About", "app.help.about", "A", NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); // append_menu_item (menu, "Register", "app.help.register", NULL, NULL, IMG_STOCK, ABOUT, FALSE, FALSE, FALSE, NULL); return menu; } /*! \fn GMenu * atomes_menu_bar () \brief create atomes menu bar */ GMenu * atomes_menu_bar () { GMenu * menu = g_menu_new (); append_submenu (menu, "Workspace", create_workspace_menu("app", 0, -1, -1)); append_submenu (menu, "Edit", create_edit_menu()); append_submenu (menu, "Analyze", create_analyze_menu()); append_submenu (menu, "Help", create_help_menu()); return menu; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse right event to popup the main application 'workspace' menu \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void atomes_popup_menu (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { if (gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture) == GDK_BUTTON_SECONDARY) { GdkRectangle rect; rect.x = x; rect.y = y; rect.width = 1; rect.height = 1; GtkWidget * popover = work_menu (-1, -1); gtk_widget_set_parent (popover, MainWindow); gtk_popover_set_has_arrow (GTK_POPOVER(popover), FALSE); gtk_popover_set_pointing_to (GTK_POPOVER(popover), & rect); gtk_popover_popup (GTK_POPOVER(popover)); } } /*! \fn G_MODULE_EXPORT gboolean on_atomes_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) \brief the GtkEventController for the keyboard button press event \param self the GtkEventController sending the signal \param keyval the \param keycode the key pressed \param state the keyboard modifier (Ctrl, Alt ... if any) \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_atomes_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) { atomes_key_pressed (keyval, state); return TRUE; } #endif /*! \fn GtkWidget * create_main_window (GApplication * atomes) \brief create the main application window \param atomes the initial GtkApplication */ GtkWidget * create_main_window (GApplication * atomes) { int i; THETD = gdk_pixbuf_new_from_file (PACKAGE_TD, NULL); #ifdef GTK3 gtk_window_set_default_icon (THETD); #endif THEMO = gdk_pixbuf_new_from_file (PACKAGE_MOL, NULL); THEBD = gdk_pixbuf_new_from_file (PACKAGE_BD, NULL); SETTING = gdk_pixbuf_new_from_file (PACKAGE_PRO, NULL); SETTINGS = gdk_pixbuf_new_from_file (PACKAGE_SET, NULL); OGL = gdk_pixbuf_new_from_file (PACKAGE_OGL, NULL); OGLM = gdk_pixbuf_new_from_file (PACKAGE_OGLM, NULL); OGLC = gdk_pixbuf_new_from_file (PACKAGE_OGLC, NULL); GtkWidget * window = gtk_application_window_new (GTK_APPLICATION(atomes)); gtk_window_set_title (GTK_WINDOW(window), PACKAGE); gtk_window_set_resizable (GTK_WINDOW(window), TRUE); gtk_widget_set_size_request (window, 900, 450); GSimpleAction * main_act[17]; main_act[0] = g_simple_action_new ("workspace.open", NULL); main_act[1] = g_simple_action_new ("workspace.save", NULL); main_act[2] = g_simple_action_new ("workspace.save-as", NULL); main_act[3] = g_simple_action_new ("workspace.close", NULL); main_act[4] = g_simple_action_new ("project.new", NULL); main_act[5] = g_simple_action_new ("project.open", NULL); main_act[6] = g_simple_action_new ("project.save", NULL); main_act[7] = g_simple_action_new ("project.save-as", NULL); main_act[8] = g_simple_action_new ("project.close", NULL); main_act[9] = g_simple_action_new ("export.isaacs", NULL); main_act[10] = g_simple_action_new ("export.coordinates", NULL); main_act[11] = g_simple_action_new ("import.isaacs", NULL); main_act[12] = g_simple_action_new ("import.coordinates", NULL); main_act[13] = g_simple_action_new ("program.quit", NULL); main_act[14] = g_simple_action_new ("analyze.tool-box", NULL); main_act[15] = g_simple_action_new ("help.periodic", NULL); main_act[16] = g_simple_action_new ("help.about", NULL); for (i=0; i<3; i++) edition_actions[i] = g_simple_action_new (edition_action_names[i], NULL); for (i=0; i<9; i++) analyze_actions[i] = g_simple_action_new (analyze_action_names[i], NULL); for (i=0; i<17; i++) add_action (main_act[i]); g_signal_connect (main_act[0], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(2)); g_signal_connect (main_act[1], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(3)); g_signal_connect (main_act[2], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(3)); g_signal_connect (main_act[3], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (main_act[4], "activate", G_CALLBACK(atomes_menu_bar_action), NULL); g_signal_connect (main_act[5], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (main_act[6], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (main_act[7], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (main_act[8], "activate", G_CALLBACK(atomes_menu_bar_action), NULL); g_signal_connect (main_act[9], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (main_act[10], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (main_act[11], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (main_act[12], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (main_act[13], "activate", G_CALLBACK(atomes_menu_bar_action), NULL); for (i=0; i<3; i++) { g_signal_connect (edition_actions[i], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(i)); } for (i=0; i Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file initc.c * @short Curve data buffer initialization * @author Sébastien Le Roux */ /* * This file: 'initc.c' * * Contains: * - Curve data buffer initialization * * List of functions: void clean_curves_data (int calc, int start, int end); void alloc_curves (int rid); void initcwidgets (); void prepostcalc (GtkWidget * widg, gboolean status, int run, int adv, double opc); */ #include "global.h" #include "callbacks.h" #include "project.h" extern void clean_this_curve_window (int cid, int rid); /*! \fn void clean_curves_data (int calc, int start, int end) \brief clean curve data on a range of curve id \param calc the calculation \param start the starting value \param end the ending value */ void clean_curves_data (int calc, int start, int end) { int i; for (i=start; i curves[calc]) { clean_this_curve_window (i, calc); } } } /*! \fn void alloc_curves (int rid) \brief allocating curve data \param rid analysis id */ void alloc_curves (int rid) { int i; if (active_project -> idcc[rid] != NULL) { g_free (active_project -> idcc[rid]); active_project -> idcc[rid] = NULL; } active_project -> idcc[rid] = g_malloc0 (active_project -> numc[rid]*sizeof*active_project -> idcc[rid]); if (active_project -> curves[rid] != NULL) { g_free (active_project -> curves[rid]); active_project -> curves[rid] = NULL; } active_project -> curves[rid] = g_malloc (active_project -> numc[rid]*sizeof*active_project -> curves); for (i = 0; i < active_project -> numc[rid]; i++) { active_project -> curves[rid][i] = g_malloc0 (sizeof*active_project -> curves[rid][i]); active_project -> curves[rid][i] -> cfile = NULL; active_project -> curves[rid][i] -> name = NULL; active_project -> curves[rid][i] -> axis_title[0] = NULL; active_project -> curves[rid][i] -> axis_title[1] = NULL; } } /*! \fn void initcwidgets () \brief initializing curve values */ void initcwidgets () { int i, j; j=active_project -> nspec; active_project -> numc[GR] = 16+5*j*j; active_project -> numc[SQ] = 8+4*j*j; active_project -> numc[SK] = 8+4*j*j; active_project -> numc[GK] = active_project -> numc[GR]; active_project -> numc[BD] = j*j; active_project -> numc[AN] = j*j*j + j*j*j*j; active_project -> numc[RI] = 20*(j+1); active_project -> numc[CH] = j+1; active_project -> numc[SP] = 0; active_project -> numc[MS] = 0; if (active_project -> steps > 1) active_project -> numc[MS] = 14*j+6; if (j == 2) { active_project -> numc[GR] = active_project -> numc[GR] + 6; active_project -> numc[SQ] = active_project -> numc[SQ] + 8; active_project -> numc[SK] = active_project -> numc[SK] + 8; active_project -> numc[GK] = active_project -> numc[GK] + 6; } active_project -> numwid = active_project -> numc[GR] + active_project -> numc[SQ] + active_project -> numc[SK] + active_project -> numc[GK] + active_project -> numc[BD] + active_project -> numc[AN] + active_project -> numc[RI] + active_project -> numc[CH] + active_project -> numc[MS]; for (i=0; i -1) active_project -> visok[run] = adv; if (! status) { #ifdef GTK3 if (widg != NULL) gdk_window_set_opacity (gtk_widget_get_window(widg), opc); #endif /* if (adv) { // bar[run] mess = g_strdup_printf ("Please wait calculation in progress"); pop = show_popup (mess, widg); g_free (mess); mess = g_strdup_printf ("Computing"); //statusval = gtk_statusbar_push (statusbar, run, mess); g_free (mess); show_the_widgets (pop); }*/ } else { if (adv && run > -1) { //gtk_statusbar_remove (statusbar, run, statusval); //destroy_this_widget(pop); } #ifdef GTK3 if (widg != NULL) gdk_window_set_opacity (gtk_widget_get_window(widg), opc); #endif } } Atomes-GNU-1.1.14/src/gui/interface.c000066400000000000000000000745031457665371200171650ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file interface.c * @short General messaging functions * @author Sébastien Le Roux */ /* * This file: 'interface.c' * * Contains: * - General messaging functions * * List of functions: int dummy_ask_ (char * question); int iask (char * question, char * lab, int id, GtkWidget * win); gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg); G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data); G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data); gchar * exact_name (gchar * name); gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win); gchar * textcolor (int i); gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer); void show_web (GtkWidget * dialog, int id); void show_info (char * information, int val, GtkWidget * win); void show_warning (char * warning, GtkWidget * win); void show_warning_ (char * warning, char * sub, char * tab); void show_error (char * error, int val, GtkWidget * win); void show_error_ (char * error, char * sub, char * tab); void init_data_ (int * nats, int * nspc, int * stps, int * cid); void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer); void lattice_info_ (int * bid, double * volume, double * density, double dvects[3][3], double rvects[3][3], double mod[3], double ang[3], double f_to_c[3][3], double c_to_f[3][3]); void send_chem_info_ (int prop[active_project -> nspec]); void update_after_calc (int calc); G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_yes_no (GtkDialog * dial, gint response_id, gpointer data); G_MODULE_EXPORT void on_answer_changed (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_iask (GtkDialog * iask, gint response_id, gpointer data); G_MODULE_EXPORT void run_cask (GtkDialog * cask, gint response_id, gpointer data); GtkWidget * addweb (int id); GtkWidget * show_pop (char * pop, GtkWidget * pwin); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "affero.h" extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); GtkWidget * answer; /* Old version to make url/email in about dialog clickable */ /* void about_dialog_handle_url (GtkAboutDialog * dialog, const gchar * link, gpointer data) { GtkWidget * error_dialog; gchar * url, * escaped; g_return_if_fail (GTK_IS_ABOUT_DIALOG (dialog)); g_return_if_fail (link != NULL); / * simple check if this is an email address * / if (! g_str_has_prefix (link, "mailto:") && strchr (link, '@') != NULL) { escaped = g_uri_escape_string (link, NULL, FALSE); url = g_strdup_printf ("mailto:%s", escaped); g_free (escaped); } else { url = g_strdup_printf ("%s", link); } #ifdef G_OS_WIN32 HINSTANCE h; h = ShellExecute (NULL, "open", url, NULL, NULL, SW_SHOWNORMAL); if ((int)h <= 32) #else #ifdef GTK4 // gtk_show_uri (GTK_WINDOW (dialog), url, gtk_event_controller_get_current_event_time ( , )); #else GError * error = NULL; gtk_show_uri_on_window (GTK_WINDOW (dialog), url, gtk_get_current_event_time (), & error); if (error != NULL) #endif #endif { gchar * uri = g_strdup_printf ("Failed to open link:\n%s", url); error_dialog = gtk_message_dialog_new (GTK_WINDOW (dialog), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, "Impossible to open link: "); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "%s", uri); run_this_gtk_dialog (error_dialog, G_CALLBACK(run_destroy_dialog), NULL); g_free (uri); } g_free (url); } */ /*! \fn GtkWidget * addweb (int id) \brief create a widget to present \param id Add contact info (1) or not (0) */ GtkWidget * addweb (int id) { GtkWidget * web; const gchar * contact = " Please contact me at:\n"; const gchar * seb = " Dr. Sébastien Le Roux "; GtkWidget * eseb; GtkWidget * vbox; GtkWidget * hbox; const gchar * or = "\n Or check the website for information\n"; if (id) { web = gtk_link_button_new_with_label (ATOMES_URL, "Visit the project's website"); } gchar * mailto = g_strdup_printf ("mailo:%s", PACKAGE_BUGREPORT); gchar * mailsh = g_strdup_printf ("<%s>",PACKAGE_BUGREPORT); eseb = gtk_link_button_new_with_label (mailto, mailsh); g_free (mailto); g_free (mailsh); vbox = create_vbox (BSEP); if (id) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (contact), FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (seb), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, eseb, FALSE, FALSE, 0); if (id) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new (or), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, web, FALSE, FALSE, 0); } return (vbox); } /*! \fn G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data) \brief create the about dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data) { GtkWidget * aboutdialog; #ifdef GTK4 GdkPaintable * atomes_logo = gtk_image_get_paintable (GTK_IMAGE(gtk_image_new_from_file(PACKAGE_LAGPL))); #else GdkPixbuf * atomes_logo = gdk_pixbuf_new_from_file (PACKAGE_LAGPL, NULL); #endif const gchar *authors[] = {"Dr. Sébastien Le Roux ", "", NULL}; const gchar * weblabel = "https://atomes.ipcms.fr"; const gchar * comments = "Visualization, analyzis, creation/edition and post-processing of atomistic models !"; const gchar * copyrights = "Copyright © 2024 \nDr. Sébastien Le Roux"; // gtk_about_dialog_set_url_hook (about_dialog_handle_url, NULL, NULL); // gtk_about_dialog_set_email_hook (about_dialog_handle_url, NULL, NULL); aboutdialog = gtk_about_dialog_new (); gtk_about_dialog_set_logo (GTK_ABOUT_DIALOG(aboutdialog), atomes_logo); gtk_about_dialog_set_version (GTK_ABOUT_DIALOG(aboutdialog), VERSION); gchar * str = g_strdup_printf ("%s", PACKAGE); gtk_about_dialog_set_program_name (GTK_ABOUT_DIALOG(aboutdialog), str); g_free (str); gtk_about_dialog_set_comments (GTK_ABOUT_DIALOG(aboutdialog), comments); gtk_about_dialog_set_website (GTK_ABOUT_DIALOG(aboutdialog), g_strdup_printf("%s", ATOMES_URL)); gtk_about_dialog_set_website_label (GTK_ABOUT_DIALOG(aboutdialog), weblabel); gtk_about_dialog_set_authors (GTK_ABOUT_DIALOG(aboutdialog), authors); gtk_about_dialog_set_copyright (GTK_ABOUT_DIALOG(aboutdialog), copyrights); gtk_about_dialog_set_license (GTK_ABOUT_DIALOG(aboutdialog), affero_license); gtk_about_dialog_set_license_type (GTK_ABOUT_DIALOG(aboutdialog), GTK_LICENSE_CUSTOM); gtk_about_dialog_set_wrap_license (GTK_ABOUT_DIALOG(aboutdialog), FALSE); run_this_gtk_dialog (aboutdialog, G_CALLBACK(destroy_this_dialog), NULL); } /*! \fn void show_web (GtkWidget * dialog, int id) \brief add / show web information to widget \param dialog the GtkWidget to modify \param id Add contact info (1) or not (0) */ void show_web (GtkWidget * dialog, int id) { GtkWidget * box = dialog_get_content_area (dialog); GtkWidget * theweb = addweb (id); show_the_widgets (theweb); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, theweb, FALSE, FALSE, 0); show_the_widgets (box); } /*! \fn void show_info (char * information, int val, GtkWidget * win) \brief add / show information message to widget \param information Message \param val Add contact info (1) or not (0) \param win the GtkWidget to modify */ void show_info (char * information, int val, GtkWidget * win) { gchar * info=NULL; if (val < 0) { info = g_strdup_printf ("%s\n%s", information, ifbug); } else { info = g_strdup_printf ("%s", information); } GtkWidget * dialog = message_dialogmodal (info, "Information", GTK_MESSAGE_INFO, GTK_BUTTONS_OK, win); if (val != 0) show_web (dialog, (val < 0) ? 0 : val); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); g_free (info); } /*! \fn void show_warning (char * warning, GtkWidget * win) \brief show warning \param warning Message \param win Parent GtkWidget, if any */ void show_warning (char * warning, GtkWidget * win) { GtkWidget * dialog = message_dialogmodal (warning, "Warning", GTK_MESSAGE_WARNING, GTK_BUTTONS_OK, win); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn void show_warning_ (char * warning, char * sub, char * tab) \brief show warning from Fortran90 \param warning Message \param sub Fortan90 subroutine \param tab Fortran90 pointer */ void show_warning_ (char * warning, char * sub, char * tab) { /* This function is called from fortran 90 */ gchar * wtot=NULL; wtot = g_strdup_printf ("%s\n%s\n%s", warning, sub, tab); show_warning (wtot, MainWindow); g_free (wtot); } /*! \fn void show_error (char * error, int val, GtkWidget * win) \brief show error message \param error Message \param val Add contact info (1) or not (0) \param win Parent GtkWidget, if any */ void show_error (char * error, int val, GtkWidget * win) { gchar * etot=NULL; if (val) { etot = g_strdup_printf ("%s", error); } else { etot = g_strdup_printf ("%s\n%s", error, ifbug); } GtkWidget * dialog = message_dialogmodal (etot, "Error", GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, win); show_web (dialog, val); g_warning ("%s", etot); run_this_gtk_dialog (dialog, G_CALLBACK(run_destroy_dialog), NULL); g_free (etot); } /*! \fn void show_error_ (char * error, char * sub, char * tab) \brief show error from Fortran90 \param error Message \param sub Fortan90 subroutine \param tab Fortran90 pointer */ void show_error_ (char * error, char * sub, char * tab) { /* This function is called from fortran 90 */ gchar * etot=NULL; etot = g_strdup_printf ("%s\n\t%s\n\t%s", error, sub, tab); show_error (etot, 0, MainWindow); g_free (etot); } gboolean res_yes_no; /*! \fn G_MODULE_EXPORT void run_yes_no (GtkDialog * dial, gint response_id, gpointer data) \brief ask yes or no for something: running dialog \param dial the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_yes_no (GtkDialog * dial, gint response_id, gpointer data) { res_yes_no = (response_id == GTK_RESPONSE_YES) ? TRUE : FALSE; destroy_this_dialog (dial); } /*! \fn gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg) \brief ask yes or no for something: prepare dialog \param title Title \param text Message \param type the type of message window \param widg the parent GtkWidget, if any */ gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg) { GtkWidget * dialog = message_dialogmodal (text, title, type, GTK_BUTTONS_YES_NO, widg); run_this_gtk_dialog (dialog, G_CALLBACK(run_yes_no), NULL); return res_yes_no; } /*! \fn gchar * exact_name (gchar * name) \brief short cut to print string without spaces \param name the initial string */ gchar * exact_name (gchar * name) { return substitute_string (name, " ", NULL); } /*! \fn GtkWidget * show_pop (char * pop, GtkWidget * pwin) \brief display pop information window \param pop Message \param pwin Parent widget, if any */ GtkWidget * show_pop (char * pop, GtkWidget * pwin) { GtkWidget * wpop = create_win ("Information", pwin, TRUE, FALSE); gtk_widget_set_size_request (wpop, 600, 80); #ifdef GTK3 gtk_window_set_position (GTK_WINDOW (wpop), GTK_WIN_POS_CENTER); #endif GtkWidget * hpop = create_hbox (0); add_container_child (CONTAINER_WIN, wpop, hpop); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hpop, stock_image(EXECUTE), TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hpop, gtk_label_new (pop), TRUE, TRUE, 0); show_the_widgets (wpop); return (wpop); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data) \brief Leaving atomes ? \param widget the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data) \brief Leaving atomes ? \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data) #endif { if (ask_yes_no ("Leaving ?!", "Are you sure you want to quit ?", GTK_MESSAGE_QUESTION, MainWindow)) { quit_gtk (); } else { gtk_widget_show (MainWindow); } return TRUE; } /*! \fn int dummy_ask_ (char * question) \brief Ask to use dummy atoms or not from Fortran90 \param question Message */ int dummy_ask_ (char * question) { GtkWidget * dask = message_dialogmodal (question, "Parameter required", GTK_MESSAGE_INFO, GTK_BUTTONS_YES_NO, MainWindow); run_this_gtk_dialog (dask, G_CALLBACK(run_yes_no), NULL); return (res_yes_no) ? 0 : -1; } extern gchar * field_init[3]; gchar * coord_type[3]={"Cartesian", "Atomic units", "Fractional"}; gchar * npt_type[4]={"A\tB\tC\tα\tβ\tɣ", "A\tB\tC\nα\tβ\tɣ", "ax\tay\taz\tbx\tby\tbz\tcx\tcy\tcz", "ax\tay\taz\nbx\tby\tbz\ncx\tcy\tcz"}; gchar * npt_info[3]={"1 line by step, as many lines as MD steps", "2 lines by step, twice as many lines as MD steps", "3 lines by step, three times as many lines as MD steps"}; GtkWidget * answer_info; /*! \fn G_MODULE_EXPORT void on_answer_changed (GtkWidget * widg, gpointer data) \brief Handling the GtkComboBox in 'int iask' \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_answer_changed (GtkWidget * widg, gpointer data) { int i, j; i = gtk_combo_box_get_active (GTK_COMBO_BOX(widg)); j = (! i || i == 2) ? 0 : (i == 1) ? 1 : 2; gtk_label_set_text (GTK_LABEL(answer_info), npt_info[j]); } int res_int; /*! \fn G_MODULE_EXPORT void run_iask (GtkDialog * iask, gint response_id, gpointer data) \brief enter an integer value - running the dialog \param iask the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_iask (GtkDialog * iask, gint response_id, gpointer data) { int i = GPOINTER_TO_INT(data); gboolean done = FALSE; const gchar * riask; if (response_id == GTK_RESPONSE_OK) { if (i == 0 || i > 3) { riask = entry_get_text (GTK_ENTRY(answer)); res_int = atof(riask); if (i > 4) { if (res_int > 0 && res_int < i+1) { done = TRUE; res_int --; } } else if (res_int > 0) { done = TRUE; } } else { done = TRUE; res_int = gtk_combo_box_get_active (GTK_COMBO_BOX(answer)); } } if (done) destroy_this_dialog (iask); } /*! \fn int iask (char * question, char * lab, int id, GtkWidget * win) \brief enter an integer value - prepare the dialog \param question Message \param lab Text to use for label \param id the required parameter id \param win the parent GtkWidget, if any */ int iask (char * question, char * lab, int id, GtkWidget * win) { GtkWidget * iask; GtkWidget * vbox; GtkWidget * hboxa; GtkWidget * quest; int i; iask = message_dialogmodal (question, "Parameter Required", GTK_MESSAGE_INFO, GTK_BUTTONS_OK, win); vbox = dialog_get_content_area (iask); gtk_box_set_spacing (GTK_BOX(vbox), 15); hboxa = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hboxa, TRUE, TRUE, 0); quest = gtk_label_new (lab); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, quest, TRUE, TRUE, 0); if (id == 0 || id > 3) { answer = gtk_entry_new (); gtk_widget_set_size_request (answer, 100, -1); gtk_entry_set_alignment (GTK_ENTRY(answer), 1.0); } else { if (id < 3) { answer = create_combo (); gtk_widget_set_size_request (answer, -1, 40); if (id < 0) for (i=0; i<3; i++) combo_text_append (answer, field_init[i]); if (id == 1) for (i=0; i<3; i++) combo_text_append (answer, coord_type[i]); if (id == 2) for (i=0; i data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(answer), cell_list -> data, "markup", 0, NULL); } } gtk_combo_box_set_active (GTK_COMBO_BOX(answer), 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, answer, FALSE, FALSE, 10); if (id == 3) { answer_info = markup_label(npt_info[0], -1, -1, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, answer_info, FALSE, FALSE, 5); g_signal_connect(G_OBJECT(answer), "changed", G_CALLBACK(on_answer_changed), NULL); } run_this_gtk_dialog (iask, G_CALLBACK(run_iask), GINT_TO_POINTER(id)); return res_int; } gchar * res_char; /*! \fn G_MODULE_EXPORT void run_cask (GtkDialog * cask, gint response_id, gpointer data) \brief enter a string - running the dialog \param cask the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_cask (GtkDialog * cask, gint response_id, gpointer data) { int i = GPOINTER_TO_INT(data); gboolean done = FALSE; if (i < 0) { while (! done) { if (response_id == GTK_RESPONSE_OK) { res_char = g_strdup_printf ("%s", entry_get_text (GTK_ENTRY(answer))); done = TRUE; } } } else { if (response_id == GTK_RESPONSE_OK) { res_char = g_strdup_printf ("%s", entry_get_text (GTK_ENTRY(answer))); } else { res_char = NULL; } done = TRUE; } if (done) destroy_this_dialog (cask); } /*! \fn gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win) \brief enter a string - prepare the dialog \param question Message \param lab Text to use for label \param id the required parameter id \param old the initial value for the string \param win the parent GtkWidget, if any */ gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win) { GtkWidget * cask; GtkWidget * dialog_ask; GtkWidget * hboxa; GtkWidget * quest; res_char = NULL; cask = message_dialogmodal (question, "Parameter required", GTK_MESSAGE_INFO, GTK_BUTTONS_OK, win); dialog_ask = dialog_get_content_area (cask); gtk_box_set_spacing (GTK_BOX(dialog_ask), 15); hboxa = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, dialog_ask, hboxa, TRUE, TRUE, 0); gtk_widget_show(hboxa); quest = gtk_label_new (lab); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, quest, TRUE, TRUE, 0); gtk_widget_show(quest); answer = gtk_entry_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, answer, TRUE, TRUE, 0); gtk_widget_set_size_request (answer, 50, -1); gtk_entry_set_alignment (GTK_ENTRY(answer), 1.0); update_entry_text (GTK_ENTRY(answer), old); run_this_gtk_dialog (cask, G_CALLBACK(run_cask), GINT_TO_POINTER(id)); return (res_char); } /*! \fn void init_data_ (int * nats, int * nspc, int * stps, int * cid) \brief update project data using information from Fortran90 \param nats number of atoms \param nspc number of species \param stps number of steps \param cid allocate chemistry data (1) or not (0) */ void init_data_ (int * nats, int * nspc, int * stps, int * cid) { active_project -> natomes = * nats; active_project -> nspec = * nspc; active_project -> steps = * stps; alloc_proj_data (active_project, * cid); if (* cid) active_chem = active_project -> chemistry; } /*! \fn void spec_data_ (int * status, int * ind, int * atd, int * nsp, * char * lbel, char * el_nme, * double * amss, double * rdus, * double * nscatt, double * xscatt) \brief update project data using information from Fortran90 \param status Update data (1) or not (0) \param ind the chemical species \param atd Z \param nsp Number of atoms of this species \param lbel Symbol \param el_nme Element \param amss M \param rdus Radius \param nscatt Neutron scattering length \param xscatt X scattering length */ void spec_data_ (int * status, int * ind, int * atd, int * nsp, char * lbel, char * el_nme, double * amss, double * rdus, double * nscatt, double * xscatt) { int id = * ind; active_chem -> label[id]= g_strdup_printf("%s", lbel); active_chem -> element[id]= g_strdup_printf("%s", el_nme); if (* status) { active_chem -> nsps[id] = * nsp; active_chem -> chem_prop[CHEM_Z][id] = (double) * atd; active_chem -> chem_prop[CHEM_M][id] = * amss; active_chem -> chem_prop[CHEM_R][id] = * rdus; active_chem -> chem_prop[CHEM_N][id] = * nscatt; active_chem -> chem_prop[CHEM_X][id] = * xscatt; } } /*! \fn void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer) \brief print information in GtkTextBuffer \param str the text \param stag the tags \param buffer the GtkTextBuffer to print to */ void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer) { GtkTextIter bEnd; GtkTextTag * tag; gtk_text_buffer_get_end_iter (buffer, &bEnd); if (stag != NULL) { tag = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table(buffer), stag); gtk_text_buffer_insert_with_tags (buffer, &bEnd, str, -1, tag, NULL); } else { tag = gtk_text_tag_table_lookup (gtk_text_buffer_get_tag_table(buffer), "default-size"); gtk_text_buffer_insert_with_tags (buffer, &bEnd, str, -1, tag, NULL); } } /*! \fn gchar * textcolor (int i) \brief setup text color keyword \param i color id */ gchar * textcolor (int i) { gchar * col = NULL; switch (i - i * (i / 9)) { case 0: col = g_strdup_printf ("red"); break; case 1: col = g_strdup_printf ("blue"); break; case 2: col = g_strdup_printf ("cyan"); break; case 3: col = g_strdup_printf ("green"); break; case 4: col = g_strdup_printf ("light_green"); break; case 5: col = g_strdup_printf ("yellow"); break; case 6: col = g_strdup_printf ("orange"); break; case 7: col = g_strdup_printf ("violet"); break; case 8: col = g_strdup_printf ("pink"); break; } return col; } /*! \fn void lattice_info_ (int * bid, double * volume, double * density, double dvects[3][3], double rvects[3][3], double mod[3], double ang[3], double f_to_c[3][3], double c_to_f[3][3]) \brief lattice data from Fortran90 \param bid 0 or MD step if NPT \param volume volume \param density density \param dvects direct space lattice vectors \param rvects reciprocal lattice vectors \param mod modulus of lattice vectors (a,b,c) \param ang lattice angles (alpha, beta, gamma) \param f_to_c fractional to cartesian matrix \param c_to_f cartesian to fractional matrix */ void lattice_info_ (int * bid, double * volume, double * density, double dvects[3][3], double rvects[3][3], double mod[3], double ang[3], double f_to_c[3][3], double c_to_f[3][3]) { int i, j; for ( i=0; i<3; i++) { for (j=0; j<3; j++) { active_cell -> box[* bid].vect[i][j] = dvects[j][i]; active_cell -> box[* bid].rvect[i][j] = rvects[j][i]; } active_cell -> box[* bid].param[0][i] = mod[i]; active_cell -> box[* bid].param[1][i] = ang[i]; } active_cell -> box[* bid].frac_to_cart = mat4(f_to_c[0][0], f_to_c[0][1], f_to_c[0][2], 0.0, f_to_c[1][0], f_to_c[1][1], f_to_c[1][2], 0.0, f_to_c[2][0], f_to_c[2][1], f_to_c[2][2], 0.0, 0.0, 0.0, 0.0, 0.0); active_cell -> box[* bid].cart_to_frac = mat4(c_to_f[0][0], c_to_f[0][1], c_to_f[0][2], 0.0, c_to_f[1][0], c_to_f[1][1], c_to_f[1][2], 0.0, c_to_f[2][0], c_to_f[2][1], c_to_f[2][2], 0.0, 0.0, 0.0, 0.0, 0.0); #ifdef DEBUG // m4_print (active_cell -> box[* bid].frac_to_cart); // m4_print (active_cell -> box[* bid].cart_to_frac); #endif active_cell -> box[* bid].vol = * volume; active_cell -> box[* bid].dens = * density; if ((active_cell -> npt && * bid == active_project -> steps-1) || ! active_cell -> npt) { active_project -> max[GR] = fdmax_ (& active_cell -> ltype); active_project -> min[SQ] = active_project -> min[SK] = fkmin_ (& active_cell -> ltype); int i, j; active_cell -> volume = active_cell -> density = 0.0; i = (active_cell -> npt) ? active_project -> steps : 1; for (j=0; j volume += active_cell -> box[j].vol; active_cell -> density += active_cell -> box[j].dens; } active_cell -> volume /= i; active_cell -> density /= i; } } /*! \fn void send_chem_info_ (int prop[active_project->nspec]) \brief getting chemistry formula information from Fortran90 \param prop the formula */ void send_chem_info_ (int prop[active_project -> nspec]) { int i; for (i=0; i nspec; i++) { active_chem -> formula[i] = prop[i]; } } /*! \fn gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer) \brief ouput the name of a coordination sphere \param this_proj the target project \param g the coordination (0 = total, 1 = partial) \param s the chemical species \param f With markup or not \param buffer Output in a GtkTextBuffer, or not if NULL */ gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer) { int l, m; gchar * spec = exact_name(this_proj -> chemistry -> label[s]); gchar * stra; gchar * strb; m = 0; for (l=0; l nspec; l++) { m += this_proj -> coord -> partial_geo[s][g][l]; } if (m > 0) { stra = g_strdup_printf ("%s [", spec); if (buffer != NULL) { print_info (spec, textcolor(s), buffer); print_info ("[", "bold", buffer); } for (l=0; l nspec; l++) { m = this_proj -> coord -> partial_geo[s][g][l]; if (m > 1) { if (f == 1) { strb = g_strdup_printf ("%s%s%d", stra, exact_name(this_proj -> chemistry -> label[l]), m); } else { strb = g_strdup_printf ("%s%s%d", stra, exact_name(this_proj -> chemistry -> label[l]), m); } if (buffer != NULL) { print_info (exact_name(this_proj -> chemistry -> label[l]), "bold", buffer); g_free (strb); strb = g_strdup_printf ("%d", m); print_info (strb, "sub", buffer); } } else if (m > 0) { strb = g_strdup_printf ("%s%s", stra, exact_name(this_proj -> chemistry -> label[l])); if (buffer != NULL) { print_info (exact_name(this_proj -> chemistry -> label[l]), "bold", buffer); } } else { strb = g_strdup_printf ("%s", stra); } g_free (stra); stra = g_strdup_printf ("%s", strb); g_free (strb); } strb = g_strdup_printf ("%s]", stra); if (buffer != NULL) { print_info ("]", "bold", buffer); } g_free (stra); } else { strb = g_strdup_printf ("%s - isolated", spec); if (buffer != NULL) { print_info (spec, textcolor(s), buffer); print_info (" - isolated", "bold", buffer); } } if (buffer != NULL) { strb = NULL; } g_free (spec); return strb; } /*! \fn void update_after_calc (int calc) \brief To update all curve plots in the workspace after a calculation \param calc Analysis id */ void update_after_calc (int calc) { int i, j; tint cd; project * this_proj; for (i=0; i initok[calc]) { for (j= 0; j < this_proj -> numc[calc]; j++) { if (this_proj -> curves[calc][j] -> plot != NULL) { cd.a = i; cd.b = calc; cd.c = j; update_curve ((gpointer)& cd); } } } } } Atomes-GNU-1.1.14/src/gui/interface.h000066400000000000000000000045221457665371200171640ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file interface.h * @short Messaging function declarations * @author Sébastien Le Roux */ /* * This header file: 'interface.h' * * Contains: - Messaging function declarations */ #ifndef INTERFACE_H_ #define INTERFACE_H_ G_MODULE_EXPORT void create_about_dialog (GtkWidget * widg, gpointer data); void show_info (char * information, int val, GtkWidget * win); void show_info_ (double * valdij); void show_warning (char * warning, GtkWidget * win); void show_warning_ (char * warning, char * sub, char * tab); void show_error (char * error, int val, GtkWidget * win); void show_error_ (char * error, char * sub, char * tab); gboolean ask_yes_no (gchar * title, gchar * text, int type, GtkWidget * widg); gchar * exact_name (gchar * name); GtkWidget * show_pop (char * pop, GtkWidget * pwin); #ifdef GTK4 G_MODULE_EXPORT gboolean leaving_question (GtkWindow * widget, gpointer data); #else G_MODULE_EXPORT gboolean leaving_question (GtkWidget * widget, GdkEvent * event, gpointer data); #endif int dummy_ask_ (char * question); int iask (char * question, char * lab, int id, GtkWidget * win); gchar * cask (char * question, char * lab, int id, char * old, GtkWidget * win); void print_info (gchar * str, gchar * stag, GtkTextBuffer * buffer); gchar * textcolor (int i); gchar * env_name (project * this_proj, int g, int s, int f, GtkTextBuffer * buffer); void init_data_ (int * nats, int * nspc, int * stps, int * cid); void update_after_calc (int calc); // In init.c: void prepostcalc (GtkWidget * widg, gboolean status, int run, int adv, double opc); void prep_calc_actions (); void initcwidgets (); #endif Atomes-GNU-1.1.14/src/gui/main.c000066400000000000000000000565221457665371200161520ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file main.c * @short Initialization of the atomes program \n Functions required to read data from the command line * @author Sébastien Le Roux */ /* * This file: 'main.c' * * Contains: * - The initialization of the atomes program - The functions required to read data from the command line * * List of functions: int test_this_arg (gchar * arg); int main (int argc, char *argv[]); gboolean destroy_func (gpointer user_data); G_MODULE_EXPORT gboolean splashdraw (GtkWidget * widget, cairo_t * cr, gpointer data); void printhelp(); void printversion (); void read_this_file (int file_type, gchar * this_file); void open_this_data_file (int file_type, gchar * file_name); G_MODULE_EXPORT void run_program (GApplication * app, gpointer data); GtkWidget * create_splash_window (); */ #include #include #include #include #include "version.h" #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #ifdef G_OS_WIN32 #define APP_EXTENSION ".exe" #else #include #define APP_EXTENSION #endif extern GtkWidget * create_main_window (GApplication * app); const gchar * dfi[2]; struct file_list { gchar * file_name; int file_type; struct file_list * next; }; struct file_list * flist = NULL; struct file_list * ftmp = NULL; gboolean with_workspace = FALSE; /*! \fn int test_this_arg (gchar * arg) \brief test an argument from the command line \param arg the argument to test */ int test_this_arg (gchar * arg) { char * fext[15]={"-awf", "-apf", " -xyz", "NULL", "-c3d", "-trj", "NULL", "-xdatcar", "NULL", "-pdb", "-ent", "-cif", "NULL", "-hist", "-ipf"}; int i, j; i = strlen(arg); gchar * str = g_ascii_strdown (arg, i); for (j=0; j<15; j++) if (g_strcmp0 (str, fext[j]) == 0) return j+1; gchar * aext = g_strdup_printf ("%c%c%c%c", str[i-4], str[i-3], str[i-2], str[i-1]); char * eext[15]={".awf", ".apf", ".xyz", "NULL", ".c3d", ".trj", "NULL", "tcar", "NULL", ".pdb", ".ent", ".cif", "NULL", "hist", ".ipf"}; for (j=0; j<15; j++) if (g_strcmp0 (aext, eext[j]) == 0) return -(j+1); g_free (str); g_free (aext); return 0; } /*! \fn void printhelp() \brief print basic help */ void printhelp() { char * help = "\nUsage: ATOMES [OPTION]\n" " ATOMES [FILE]\n" " ATOMES [OPTION] [FILE]\n" " ATOMES [FILE1] [FILE2] ...\n" " ATOMES [OPTION1] [FILE1] [OPTION2] [FILE2] ...\n\n" "3D atomistic model analysis, creation/edition and post-processing tool\n\n" "options:\n" " -v, --version version information\n" " -h, --help display this help message\n\n" "files, any number, in any order, in the following formats:\n\n" " Atomes workspace file: .awf\n" " Atomes prject file: .apf\n" " XYZ coordinates file: .xyz\n" " Chem3D coordinates file: .c3d\n" " CPMD trajectory: .trj\n" " VASP trajectory: .xdatcar\n" " PDB coordinates: .pdb, .ent\n" " Crystallographic Information File: .cif\n" " DL-POLY history file: .hist\n" " ISAACS project file: .ipf\n\n" " alternatively specify the file format using:\n\n" " -awf FILE\n" " -apf FILE\n" " -xyz FILE\n" " -c3d FILE\n" " -trj FILE\n" " -xdatcar FILE\n" " -pdb FILE, or, -ent FILE\n" " -cif FILE\n" " -hist FILE\n" " -ipf FILE\n\n" "ex:\n\n" " atomes -pdb this.f file.awf -cif that.f *.xyz\n"; char bug[20] = "\nReport a bug to <"; char eh[4] = ">\n"; printf("%s", help); printf("%s", bug); printf("%s", PACKAGE_BUGREPORT); printf("%s\n", eh); } /*! \fn void printversion () \brief print version information */ void printversion () { char scanid[80]="\n3D atomistic model analysis, creation/edition and post-processing tool\n"; char bug[20] = "\nReport a bug to <"; char eh[4] = ">\n"; printf ("%s", scanid); printf ("\n%s version : %s\n", PACKAGE, VERSION); printf ("\nGTK+ version : %1d.%1d.%1d\n", GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); printf ("Libavutil version : %2d.%2d.%3d\n", LIBAVUTIL_VERSION_MAJOR, LIBAVUTIL_VERSION_MINOR, LIBAVUTIL_VERSION_MICRO); printf ("Libavformat version : %2d.%2d.%3d\n", LIBAVFORMAT_VERSION_MAJOR, LIBAVFORMAT_VERSION_MINOR, LIBAVFORMAT_VERSION_MICRO); printf ("Libavcodec version : %2d.%2d.%3d\n", LIBAVCODEC_VERSION_MAJOR, LIBAVCODEC_VERSION_MINOR, LIBAVCODEC_VERSION_MICRO); printf ("Libswscale version : %2d.%2d.%3d\n", LIBSWSCALE_VERSION_MAJOR, LIBSWSCALE_VERSION_MINOR, LIBSWSCALE_VERSION_MICRO); #ifdef OPENMP float v; char * v_string; switch (_OPENMP) { case 200505: v = 2.5; v_string = "2005-05"; break; case 200805: v = 3.0; v_string = "2008-05"; break; case 201107: v = 3.1; v_string = "2011-07"; break; case 201307: v = 4.0; v_string = "2013-07"; break; case 201511: v = 4.5; v_string = "2015-11"; break; case 201811: v = 5.0; v_string = "2018-11"; break; case 202011: v = 5.1; v_string = "2020-11"; break; } printf ("OpenMP version : %1.1f (%s)\n", v, v_string); #endif printf ("FC Compiler : %s\n", FC); printf ("FC Compiler flags : %s\n", FCFLAGS); printf ("C Compiler : %s\n", CC); printf ("C Compiler flags : %s\n", CFLAGS); printf ("%s", bug); printf ("%s", PACKAGE_BUGREPORT); printf ("%s\n", eh); } /*! \fn gboolean destroy_func (gpointer user_data) \brief destroy splash screen \param user_data the splash screen to destroy */ gboolean destroy_func (gpointer user_data) { GtkWidget * splashi = (GtkWidget*) user_data; destroy_this_widget (splashi); return FALSE; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean splashdraw (GtkWidget * widget, cairo_t * cr, gpointer data) \brief draw splash screen \param widget the GtkWidget sending the signal \param cr the cairo drawing context \param data the associated data pointer */ G_MODULE_EXPORT gboolean splashdraw (GtkWidget * widget, cairo_t * cr, gpointer data) { cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.0); /* transparent */ cairo_paint (cr); return FALSE; } #endif /*! \fn GtkWidget * create_splash_window () \brief create splash screen window */ GtkWidget * create_splash_window () { GtkWidget * splash_window = new_gtk_window (); gtk_window_set_decorated (GTK_WINDOW (splash_window), FALSE); GtkWidget * image; #ifdef GTK4 image = gtk_picture_new_for_filename (PACKAGE_LOGO); gchar * backcol = g_strdup_printf ("window#background {\n" " background-color: rgba(255, 255, 255, 0.0);}"); provide_gtk_css (backcol); gtk_widget_set_name (splash_window, "background"); g_free (backcol); #else gtk_window_set_type_hint (GTK_WINDOW (splash_window), GDK_WINDOW_TYPE_HINT_SPLASHSCREEN); gtk_window_set_position (GTK_WINDOW (splash_window), GTK_WIN_POS_CENTER_ALWAYS); gtk_widget_set_app_paintable (splash_window, TRUE); GdkScreen * screen = gtk_widget_get_screen (splash_window); GdkVisual * visual = gdk_screen_get_rgba_visual (screen); gtk_widget_set_visual (splash_window, visual); // Next line might be optional for total transparency g_signal_connect(G_OBJECT(splash_window), "draw", G_CALLBACK(splashdraw), NULL); image = gtk_image_new_from_file (PACKAGE_LOGO); #endif add_container_child (CONTAINER_WIN, splash_window, image); show_the_widgets (splash_window); gtk_window_set_transient_for ((GtkWindow *)splash_window, (GtkWindow *)MainWindow); return splash_window; } /*! \fn void read_this_file (int file_type, gchar * this_file) \brief read file from the command line \param file_type File type \param this_file File name */ void read_this_file (int file_type, gchar * this_file) { FILE * fp = fopen (this_file, dfi[0]); if (file_type == 1) { int i = open_save_workspace (fp, 0); if (i != 0) { gchar * err = g_strdup_printf ("Error while reading workspace file\n%s\nError code: %d\n", this_file, i); show_error (err, 0, MainWindow); g_free (err); } } else { init_project (FALSE); open_save (fp, 0, activep, activep, 0, this_file); } fclose (fp); } /*! \fn void open_this_data_file (int file_type, gchar * file_name) \brief open data file from the command line \param file_type File type \param file_name File name */ void open_this_data_file (int file_type, gchar * file_name) { gchar * end; gchar * str; gchar * filedir; int i; #ifdef G_OS_WIN32 WIN32_FIND_DATA ffd; HANDLE hFind; #else DIR * d; struct dirent * dir; #endif switch (file_type) { case 1: read_this_file (1, file_name); break; case 2: end = g_strdup_printf ("%c", file_name[strlen(file_name)-1]); if (g_strcmp0 (file_name, "*") == 0 || g_strcmp0 (end, "*") == 0) { if (g_strcmp0 (file_name, "*") == 0) { filedir = g_strdup_printf ("./"); } else { filedir = g_strdup_printf ("%c", file_name[0]); for (i=1; i d_type == DT_REG) { str = g_strdup_printf ("%s/%s", filedir, dir -> d_name); read_this_file (2, str); g_free (str); } } closedir(d); } #endif g_free (filedir); } else { read_this_file (2, file_name); } break; case 15: init_project (TRUE); open_this_isaacs_xml_file (g_strdup_printf ("%s", file_name), activep, FALSE); break; default: end = g_strdup_printf ("%c", file_name[strlen(file_name)-1]); if (g_strcmp0 (file_name, "*") == 0 || g_strcmp0 (end, "*") == 0) { if (g_strcmp0 (file_name, "*") == 0) { filedir = g_strdup_printf ("./"); } else { filedir = g_strdup_printf ("%c", file_name[0]); for (i=1; i coordfile = g_strdup_printf ("%s\\%s", filedir, (gchar *)ffd.cFileName); open_this_coordinate_file (file_type-3, NULL); } while (FindNextFile(hFind, &ffd) != 0) { if (ffd.dwFileAttributes & ! FILE_ATTRIBUTE_DIRECTORY) { init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s\\%s", filedir, (gchar *)ffd.cFileName); open_this_coordinate_file (file_type-3, NULL); } } } FindClose(hFind); #else d = opendir (filedir); if (d) { while ((dir = readdir(d)) != NULL) { if (dir -> d_type == DT_REG) { init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s/%s", filedir, dir -> d_name); open_this_coordinate_file (file_type-3, NULL); } } closedir(d); } #endif g_free (filedir); } else { init_project (TRUE); active_project -> coordfile = g_strdup_printf ("%s", file_name); open_this_coordinate_file (file_type-3, NULL); } break; } } /*! \fn G_MODULE_EXPORT void run_program (GApplication * app, gpointer data) \brief run the program \param app the application to run \param data the associated data pointer */ G_MODULE_EXPORT void run_program (GApplication * app, gpointer data) { #ifdef GTK3 GtkSettings * default_settings = gtk_settings_get_default (); g_object_set (default_settings, "gtk-button-images", TRUE, NULL); #endif #ifdef G_OS_WIN32 #ifdef GTK3 g_object_set (default_settings, "gtk-key-theme-name", "win32", NULL); #endif dfi[0]="rb"; dfi[1]="wb"; #else dfi[0]="r"; dfi[1]="w"; #endif #ifdef MAC_INTEGRATION GtkosxApplication * ProgOSX; ProgOSX = g_object_new (GTKOSX_TYPE_APPLICATION, NULL); gtkosx_application_set_use_quartz_accelerators (ProgOSX, FALSE); gtkosx_application_ready (ProgOSX); #endif #ifdef DEBUG printversion (); #endif // DEBUG MainWindow = create_main_window (app); GtkWidget * isplash = create_splash_window (); if (isplash == NULL) { g_print ("Impossible to load the splash screen\n"); } else { g_timeout_add_seconds (1, destroy_func, isplash); } if (flist) { ftmp = flist; silent_input = TRUE; if (with_workspace) { while (ftmp) { if (ftmp -> file_type == 1) { // Open the workspace open_this_data_file (ftmp -> file_type, ftmp -> file_name); } ftmp = ftmp -> next; } } ftmp = flist; while (ftmp) { if (ftmp -> file_type != 1) { // Add project(s) to workspace open_this_data_file (ftmp -> file_type, ftmp -> file_name); } ftmp = ftmp -> next; } g_free (flist); flist = NULL; silent_input = FALSE; } #ifdef MAC_INTEGRATION g_object_unref (ProgOSX); #endif } /*! \fn int main (int argc, char *argv[]) \brief initalization of the atomes program \param argc number of argument(s) on the command line \param *argv[] list of argument(s) on the command line */ int main (int argc, char *argv[]) { gboolean RUNC = FALSE; #ifdef G_OS_WIN32 FreeConsole (); PACKAGE_PREFIX = g_win32_get_package_installation_directory_of_module (NULL); // g_win32_get_package_installation_directory (NULL, NULL); PACKAGE_LIB_DIR = g_build_filename (PACKAGE_PREFIX, "library", NULL); PACKAGE_DATA_DIR = g_build_filename (PACKAGE_PREFIX, "pixmaps", NULL); PACKAGE_LOCALE_DIR = g_build_filename (PACKAGE_PREFIX, "locale", NULL); PACKAGE_IMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/import.png", NULL); PACKAGE_CON = g_build_filename (PACKAGE_PREFIX, "pixmaps/convert.png", NULL); PACKAGE_IMG = g_build_filename (PACKAGE_PREFIX, "pixmaps/image.png", NULL); PACKAGE_PDF = g_build_filename (PACKAGE_PREFIX, "pixmaps/pdf.png", NULL); PACKAGE_SVG = g_build_filename (PACKAGE_PREFIX, "pixmaps/svg.png", NULL); PACKAGE_EPS = g_build_filename (PACKAGE_PREFIX, "pixmaps/eps.png", NULL); PACKAGE_PNG = g_build_filename (PACKAGE_PREFIX, "pixmaps/png.png", NULL); PACKAGE_JPG = g_build_filename (PACKAGE_PREFIX, "pixmaps/jpg.png", NULL); PACKAGE_BMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bmp.png", NULL); PACKAGE_TIFF = g_build_filename (PACKAGE_PREFIX, "pixmaps/tiff.png", NULL); PACKAGE_VOID = g_build_filename (PACKAGE_PREFIX, "pixmaps/void.png", NULL); PACKAGE_GR = g_build_filename (PACKAGE_PREFIX, "pixmaps/gr.png", NULL); PACKAGE_SQ = g_build_filename (PACKAGE_PREFIX, "pixmaps/sq.png", NULL); PACKAGE_BD = g_build_filename (PACKAGE_PREFIX, "pixmaps/bd.png", NULL); PACKAGE_AN = g_build_filename (PACKAGE_PREFIX, "pixmaps/an.png", NULL); PACKAGE_RI = g_build_filename (PACKAGE_PREFIX, "pixmaps/ri.png", NULL); PACKAGE_CH = g_build_filename (PACKAGE_PREFIX, "pixmaps/ch.png", NULL); PACKAGE_SP = g_build_filename (PACKAGE_PREFIX, "pixmaps/sp.png", NULL); PACKAGE_MS = g_build_filename (PACKAGE_PREFIX, "pixmaps/ms.png", NULL); PACKAGE_TD = g_build_filename (PACKAGE_PREFIX, "pixmaps/td.png", NULL); PACKAGE_MOL = g_build_filename (PACKAGE_PREFIX, "pixmaps/molecule.png", NULL); PACKAGE_OGL = g_build_filename (PACKAGE_PREFIX, "pixmaps/opengl.png", NULL); PACKAGE_OGLM = g_build_filename (PACKAGE_PREFIX, "pixmaps/mol.png", NULL); PACKAGE_OGLC = g_build_filename (PACKAGE_PREFIX, "pixmaps/mol.png", NULL); PACKAGE_PRO = g_build_filename (PACKAGE_PREFIX, "pixmaps/prop.png", NULL); PACKAGE_SET = g_build_filename (PACKAGE_PREFIX, "pixmaps/settings.png", NULL); PACKAGE_LOGO = g_build_filename (PACKAGE_PREFIX, "pixmaps/logo.png", NULL); PACKAGE_LAGPL = g_build_filename (PACKAGE_PREFIX, "pixmaps/logo-agpl.png", NULL); PACKAGE_LABOUT = g_build_filename (PACKAGE_PREFIX, "pixmaps/logo-about.png", NULL); PACKAGE_DOTA = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-a.png", NULL); PACKAGE_DOTB = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-b.png", NULL); PACKAGE_DOTC = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-c.png", NULL); PACKAGE_DOTD = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-d.png", NULL); PACKAGE_DOTE = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-e.png", NULL); PACKAGE_DOTF = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-f.png", NULL); PACKAGE_DOTG = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-g.png", NULL); PACKAGE_DOTH = g_build_filename (PACKAGE_PREFIX, "pixmaps/dots/dots-h.png", NULL); PACKAGE_DFBD = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/bd.png", NULL); PACKAGE_DFAN = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/an.png", NULL); PACKAGE_DFDI = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/di.png", NULL); PACKAGE_DFTD = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/td.png", NULL); PACKAGE_DFIN = g_build_filename (PACKAGE_PREFIX, "pixmaps/field/in.png", NULL); PACKAGE_SGCP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Cubic-P.png", NULL); PACKAGE_SGCI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Cubic-I.png", NULL); PACKAGE_SGCF = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Cubic-F.png", NULL); PACKAGE_SGHP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Hexagonal.png", NULL); PACKAGE_SGTR = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Trigonal-R.png", NULL); PACKAGE_SGTI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Tetragonal-I.png", NULL); PACKAGE_SGTP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Tetragonal-P.png", NULL); PACKAGE_SGOP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-P.png", NULL); PACKAGE_SGOI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-I.png", NULL); PACKAGE_SGOC = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-C.png", NULL); PACKAGE_SGOF = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Orthorhombic-F.png", NULL); PACKAGE_SGMP = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Monoclinic-P.png", NULL); PACKAGE_SGMI = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Monoclinic-I.png", NULL); PACKAGE_SGTC = g_build_filename (PACKAGE_PREFIX, "pixmaps/bravais/Triclinic.png", NULL); ATOMES_CONFIG = g_build_filename (PACKAGE_PREFIX, "atomes.cfg", NULL); #endif // G_OS_WIN32 #ifdef LINUX struct passwd * pw = getpwuid(getuid()); ATOMES_CONFIG = g_strdup_printf ("%s/.atomes.cfg", pw -> pw_dir); #endif int i, j, k; switch (argc) { case 1: RUNC=TRUE; break; case 2: if (g_strcmp0 (argv[1], "-h") == 0 || g_strcmp0 (argv[1], "--help") == 0) { printhelp(); RUNC=FALSE; } else if (g_strcmp0 (argv[1], "-v") == 0 || g_strcmp0 (argv[1], "--version") == 0) { printversion(); RUNC=FALSE; } else { RUNC=TRUE; i = test_this_arg (argv[1]); if (i !=0) { flist = g_malloc0(sizeof*flist); flist -> file_name = g_strdup_printf ("%s", argv[1]); flist -> file_type = -i; if (flist -> file_type == 1) with_workspace = TRUE; } } break; default: RUNC=TRUE; i=0; for (j=1; j 0 && j < argc-1) { if (! flist) { flist = g_malloc0(sizeof*flist); ftmp = flist; } else { ftmp -> next = g_malloc0(sizeof*ftmp -> next); ftmp = ftmp -> next; } ftmp -> file_name = g_strdup_printf ("%s", argv[j+1]); ftmp -> file_type = k; j ++; } else if (k < 0) { if (! flist) { flist = g_malloc0(sizeof*flist); ftmp = flist; } else { ftmp -> next = g_malloc0(sizeof*ftmp -> next); ftmp = ftmp -> next; } ftmp -> file_name = g_strdup_printf ("%s", argv[j]); ftmp -> file_type = -k; } if (abs(k) == 1) with_workspace = TRUE; } else if (k == 1) { j ++; } } break; } if (RUNC) { // setlocale(LC_ALL,"en_US"); gtk_disable_setlocale (); #if GLIB_MINOR_VERSION < 74 AtomesApp = gtk_application_new (g_strdup_printf ("atomes.prog-%d", (int)clock()), G_APPLICATION_FLAGS_NONE); #else AtomesApp = gtk_application_new (g_strdup_printf ("atomes.prog-%d", (int)clock()), G_APPLICATION_DEFAULT_FLAGS); #endif g_signal_connect (G_OBJECT(AtomesApp), "activate", G_CALLBACK(run_program), NULL); int status = g_application_run (G_APPLICATION (AtomesApp), 0, NULL); g_object_unref (AtomesApp); return status; } return 0; } Atomes-GNU-1.1.14/src/gui/msdcall.c000066400000000000000000000145761457665371200166500ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file msdcall.c * @short Callbacks for the MSD calculation dialog * @author Sébastien Le Roux */ /* * This file: 'msdcall.c' * * Contains: * - The callbacks for the MSD calculation dialog * * List of functions: void initmsd (); void update_msd_view (project * this_proj); G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "curve.h" #include "project.h" /*! \fn void initmsd () \brief initialize the curve widgets for the MSD */ void initmsd () { int i, j; j = 0; for ( i = 0 ; i < active_project -> nspec ; i++ ) { active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(nac)[%s]", active_chem -> label[i]); j=j+1; } for ( i = 0 ; i < active_project -> nspec ; i++ ) { active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(x)[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(y)[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(z)[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(xy)[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(xz)[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(yz)[%s]", active_chem -> label[i]); j=j+1; } for ( i = 0 ; i < active_project -> nspec ; i++ ) { active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(x/nac)[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(y/nac)[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(z/nac)[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(xy/nac)[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(xz/nac)[%s]", active_chem -> label[i]); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("MSD(yz/nac)[%s]", active_chem -> label[i]); j=j+1; } active_project -> curves[MS][j] -> name = g_strdup_printf ("Correction[x]"); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("Correction[y]"); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("Correction[z]"); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("Drift[x]"); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("Drift[y]"); j=j+1; active_project -> curves[MS][j] -> name = g_strdup_printf ("Drift[z]"); addcurwidgets (activep, MS, 0); active_project -> initok[MS]=TRUE; } /*! \fn void update_msd_view (project * this_proj) \brief update the project text view for the MSD calculation \param this_proj the target project */ void update_msd_view (project * this_proj) { gchar * str; if (this_proj -> text_buffer[MS+OT] == NULL) this_proj -> text_buffer[MS+OT] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[MS+OT]); print_info ("\n\nMean Square Displacement\n\n", "heading", this_proj -> text_buffer[MS+OT]); print_info ("Calculation details:\n\n", NULL, this_proj -> text_buffer[MS+OT]); print_info ("\t - Number of configurations: ", "bold", this_proj -> text_buffer[MS+OT]); str = g_strdup_printf ("%d", this_proj -> steps); print_info (str, "bold_blue", this_proj -> text_buffer[MS+OT]); g_free (str); print_info ("\n\n\t - Number of time steps between each configuration: ", "bold", this_proj -> text_buffer[MS+OT]); str = g_strdup_printf ("%d", this_proj -> num_delta[MS]); print_info (str, "bold_blue", this_proj -> text_buffer[MS+OT]); g_free (str); print_info ("\n\n\t - Time step δt used to integrate Newton's equations of motion: ", "bold", this_proj -> text_buffer[MS+OT]); str = g_strdup_printf ("%f", this_proj -> delta[MS]); print_info (str, "bold_blue", this_proj -> text_buffer[MS+OT]); g_free (str); print_info (" ", "bold", this_proj -> text_buffer[MS+OT]); print_info (untime[this_proj -> tunit], "bold_red", this_proj -> text_buffer[MS+OT]); print_info (calculation_time(TRUE, this_proj -> calc_time[MS]), NULL, this_proj -> text_buffer[MS+OT]); } /*! \fn G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data) \brief compute MSD \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_msd_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> initok[MS]) initmsd (); clean_curves_data (MS, 0, active_project -> numc[MS]); prepostcalc (widg, FALSE, MS, 0, opac); active_project -> min[MS] = active_project -> delta[MS]*active_project -> num_delta[MS]; active_project -> max[MS] = (active_project -> steps -1)*active_project -> delta[MS]*active_project -> num_delta[MS]; clock_gettime (CLOCK_MONOTONIC, & start_time); i = msd_ (& active_project -> delta[MS], & active_project -> num_delta[MS]); clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> calc_time[MS] = get_calc_time (start_time, stop_time); prepostcalc (widg, TRUE, MS, i, 1.0); if (! i) { show_error ("The MSD calculation has failed", 0, widg); } else { update_msd_view (active_project); gtk_widget_show (curvetoolbox); } fill_tool_model (); } Atomes-GNU-1.1.14/src/gui/ringscall.c000066400000000000000000000477611457665371200172110ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file ringscall.c * @short Callbacks for the ring statistics calculation dialog * @author Sébastien Le Roux */ /* * This file: 'ringscall.c' * * Contains: * - The callbacks for the ring statistics calculation dialog * * List of functions: void initrng (); void update_rings_menus (glwin * view); void update_rings_view (project * this_proj, int c); void clean_rings_data (int rid, glwin * view); void save_rings_data_ (int * taille, double ectrc[* taille], double ectpna[* taille], double ectmax[* taille], double ectmin[* taille], double * rpstep, double * ectrpst, double * nampat, double * ectampat); G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data); */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "glview.h" #include "curve.h" #include "initcoord.h" extern GtkWidget * prep_rings_menu (glwin * view, int id); extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern void clean_coord_window (project * this_proj); #ifdef GTK3 extern G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data); #else extern G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data); #endif gboolean toggled_rings; /*! \fn void initrng () \brief initialize the curve widgets for the ring statistics */ void initrng () { int i, j, k, l; char * cp[4] = {"Rc(n)[", "Pn(n)[", "Pmax(n)[", "Pmin(n)["}; l = 0; for ( i = 0 ; i < 5 ; i++ ) { for ( j = 0 ; j < 4 ; j++ ) { active_project -> curves[RI][l] -> name = g_strdup_printf ("%s - %sAll]", rings_type[i], cp[j]); l=l+1; } for ( j = 0 ; j < active_project -> nspec ; j++ ) { for ( k = 0 ; k < 4 ; k++ ) { active_project -> curves[RI][l] -> name = g_strdup_printf ("%s - %s%s]", rings_type[i], cp[k], active_chem -> label[j]); l=l+1; } } } addcurwidgets (activep, RI, 0); active_project -> initok[RI] = TRUE; } #ifdef GTK3 /*! \fn void update_rings_menus (glwin * view) \brief update the ring(s) menu for the glview \param view the glview */ void update_rings_menus (glwin * view) { int i, j; GtkWidget * menu; for (i=0; i<2; i++) { menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM(view -> ogl_rings[i*6])); if (GTK_IS_WIDGET(menu)) { for (j=1; j ogl_rings[i*6+j])) { g_object_ref (view -> ogl_rings[i*6+j]); gtk_container_remove (GTK_CONTAINER(menu), view -> ogl_rings[i*6+j]); } } } gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_rings[i*6], prep_rings_menu (view, i*6)); show_the_widgets (view -> ogl_rings[i*6]); widget_set_sensitive (view -> ogl_rings[i*6], view -> rings); } } #endif /*! \fn void update_rings_view (project * this_proj, int c) \brief update the text view for ring statistics \param this_proj the target project \param c the ring type */ void update_rings_view (project * this_proj, int c) { int i, j, k; gchar * nelt; gchar * col; gchar * tab; gchar * cid; gchar * str; if (this_proj -> text_buffer[RI+OT] == NULL) this_proj -> text_buffer[RI+OT] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[RI+OT]); j = this_proj -> rsparam[c][0]; if (j == 0) { nelt = g_strdup_printf ("All"); col = NULL; } else { nelt = g_strdup_printf ("%s", this_proj -> chemistry -> label[j-1]); col = textcolor(j-1); } print_info ("\n\nRing statistics\n\n", "heading", this_proj -> text_buffer[RI+OT]); str = g_strdup_printf ("\n%s rings analysis details:\n", rings_type[c]); print_info (str, "italic", this_proj -> text_buffer[RI+OT]); g_free (str); if (this_proj -> rsparam[c][2]) { print_info (" * only ABAB rings have been considered\n", "italic", this_proj -> text_buffer[RI+OT]); } if (this_proj -> rsparam[c][3]) { print_info (" * no homopolar bonds in the rings (A-A, B-B ...)\n", "italic", this_proj -> text_buffer[RI+OT]); } if (this_proj -> rsparam[c][4]) { print_info (" * no homopolar bonds in the connectivity matrix (A-A, B-B ...)\n", "italic", this_proj -> text_buffer[RI+OT]); } print_info ("\n Atom(s) used to start the search: ", NULL, this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); if (j != 0) print_info (" atom(s) only", NULL, this_proj -> text_buffer[RI+OT]); if (this_proj -> steps > 1) { print_info ("\n Average number of rings per configuration: ", NULL, this_proj -> text_buffer[RI+OT]); str = g_strdup_printf ("%f", this_proj -> rsdata[c][0]); print_info (str, "bold", this_proj -> text_buffer[RI+OT]); g_free (str); str = g_strdup_printf (" +/- %f\n", this_proj -> rsdata[c][1]); print_info (str, "bold", this_proj -> text_buffer[RI+OT]); g_free (str); } else { print_info ("\n Total number of rings: ", NULL, this_proj -> text_buffer[RI+OT]); str = g_strdup_printf ("%f\n", this_proj -> rsdata[c][0]); print_info (str, "bold", this_proj -> text_buffer[RI+OT]); g_free (str); } if (c == 1 || c == 2) { if (this_proj -> steps > 1) { print_info (" Average number of ring(s) with n > ", NULL, this_proj -> text_buffer[RI+OT]); } else { print_info (" Number of ring(s) with n > ", NULL, this_proj -> text_buffer[RI+OT]); } str = g_strdup_printf ("%d", this_proj -> rsparam[c][1]); print_info (str, "bold", this_proj -> text_buffer[RI+OT]); g_free (str); print_info (" nodes that potentially exist: ", NULL, this_proj -> text_buffer[RI+OT]); str = g_strdup_printf ("%f", this_proj -> rsdata[c][2]); print_info (str, "bold", this_proj -> text_buffer[RI+OT]); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf (" +/- %f", this_proj -> rsdata[c][3]); print_info (str, "bold", this_proj -> text_buffer[RI+OT]); g_free (str); } print_info ("\n", NULL, this_proj -> text_buffer[RI+OT]); } print_info ("\n\t n\tRc(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); if (this_proj -> steps > 1) { if (j == this_proj -> nspec) { print_info ("]\t +/- \tPn(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\t +/- \tPmax(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\t +/- \tPmin(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\t +/-\n", "bold", this_proj -> text_buffer[RI+OT]); } else { print_info ("]\t +/- \tPn(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\t +/- \tPmax(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\t +/- \tPmin(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\t +/- \n", "bold", this_proj -> text_buffer[RI+OT]); } } else { if (j == this_proj -> nspec) { print_info ("]\tPn(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\tPmax(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\tPmin(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\n", "bold", this_proj -> text_buffer[RI+OT]); } else { print_info ("]\tPn(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\tPmax(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\tPmin(n)[", "bold", this_proj -> text_buffer[RI+OT]); print_info (nelt, col, this_proj -> text_buffer[RI+OT]); print_info ("]\n", "bold", this_proj -> text_buffer[RI+OT]); } } tab = NULL; cid = NULL; k = 4*(c*(this_proj -> nspec+1) + this_proj -> rsparam[c][0]); j = 1; for ( i=2 ; i < this_proj -> rsparam[c][1] ; i++ ) { if (this_proj -> curves[RI][k] -> data[1][i] != 0.0) { j ++; if (j - 2*(j/2) == 0) { tab = g_strdup_printf ("grey_back"); cid = g_strdup_printf ("bold_grey_back"); } else { tab = NULL; cid = g_strdup_printf ("bold"); } print_info ("\t", NULL, this_proj -> text_buffer[RI+OT]); if (i < 9) { print_info (" ",cid, this_proj -> text_buffer[RI+OT]); } str = g_strdup_printf("%d", i+1); print_info (str, cid, this_proj -> text_buffer[RI+OT]); g_free (str); str = g_strdup_printf("\t%f\t", this_proj -> curves[RI][k] -> data[1][i]); print_info (str, tab, this_proj -> text_buffer[RI+OT]); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> curves[RI][k] -> err[i]); print_info (str, tab, this_proj -> text_buffer[RI+OT]); g_free (str); } str = g_strdup_printf("%f\t", this_proj -> curves[RI][k+1] -> data[1][i]); print_info (str, tab, this_proj -> text_buffer[RI+OT]); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> curves[RI][k+1] -> err[i]); print_info (str, tab, this_proj -> text_buffer[RI+OT]); g_free (str); } str = g_strdup_printf("%f\t", this_proj -> curves[RI][k+2] -> data[1][i]); print_info (str, tab, this_proj -> text_buffer[RI+OT]); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("%f\t", this_proj -> curves[RI][k+2] -> err[i]); print_info (str, tab, this_proj -> text_buffer[RI+OT]); g_free (str); } str = g_strdup_printf("%f", this_proj -> curves[RI][k+3] -> data[1][i]); print_info (str, tab, this_proj -> text_buffer[RI+OT]); g_free (str); if (this_proj -> steps > 1) { str = g_strdup_printf("\t%f", this_proj -> curves[RI][k+3] -> err[i]); print_info (str, tab, this_proj -> text_buffer[RI+OT]); g_free (str); } print_info ("\n", NULL, this_proj -> text_buffer[RI+OT]); if (tab != NULL) { g_free (tab); } if (cid != NULL) { g_free (cid); } } } print_info (calculation_time(TRUE, this_proj -> rsdata[c][4]), NULL, this_proj -> text_buffer[RI+OT]); g_free (nelt); if (col != NULL) { g_free (col); } } /*! \fn void clean_rings_data (int rid, glwin * view) \brief clean a ring type data for a glview \param rid Rings type \param view the glview */ void clean_rings_data (int rid, glwin * view) { project * this_proj = get_project_by_id(view -> proj); view -> ring_max[rid] = 0; int i, j; #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i coord -> totcoord[4+rid]; i++) { if (view -> ogl_poly[0][4+rid][i] != NULL) { if (GTK_IS_WIDGET(view -> ogl_poly[0][4+rid][i])) { if (view -> anim -> last -> img -> show_poly[4+rid][i]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_poly[0][4+rid][i], FALSE); show_hide_poly (view -> ogl_poly[0][4+rid][i], & view -> gcid[4+rid][i][4+rid]); } } } } #endif if (this_proj -> coord -> totcoord[4+rid]) { if (this_proj -> coord -> ntg[4+rid]) g_free (this_proj -> coord -> ntg[4+rid]); this_proj -> coord -> ntg[4+rid] = NULL; if (this_proj -> coord -> geolist[4+rid][0]) g_free (this_proj -> coord -> geolist[4+rid][0]); this_proj -> coord -> geolist[4+rid][0] = NULL; this_proj -> coord -> totcoord[4+rid] = 0; } if (view -> all_rings[rid]) g_free (view -> all_rings[rid]); view -> all_rings[rid] = NULL; if (view -> num_rings[rid]) g_free (view -> num_rings[rid]); view -> num_rings[rid] = NULL; if (view -> show_rpoly[rid]) g_free (view -> show_rpoly[rid]); view -> show_rpoly[rid] = NULL; if (view -> gcid[4+rid]) g_free (view -> gcid[4+rid]); view -> gcid[4+rid] = NULL; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (this_proj -> atoms[i][j].rings[rid]) { g_free (this_proj -> atoms[i][j].rings[rid]); this_proj -> atoms[i][j].rings[rid] = NULL; } } } int shaders[1] = {RINGS}; re_create_md_shaders (1, shaders, this_proj); update (view); #ifdef GTK4 update_menu_bar (view); #endif } /*! \fn G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data) \brief compute ring statistics \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_rings_released (GtkWidget * widg, gpointer data) { int search = active_project -> rsearch[0]; int i, j, k; if (toggled_rings) active_project -> dmtx = FALSE; #ifdef DEBUG g_debug ("Calc rings !"); g_debug (" - rings definition: %d", search); if (active_project -> rsparam[search][2]) g_debug (" - only ABAB rings !"); if (active_project -> rsparam[search][3]) g_debug (" - no homopolar bonds in rings !"); if (active_project -> rsparam[search][4]) g_debug (" - no homopolar bonds at all !"); g_debug (" - dmtx= %d", active_project -> dmtx); #endif cutoffsend (); //if (active_project -> steps > 1) statusb = 1; if (! active_project -> initok[RI]) { initrng (); } active_project -> rsparam[search][5] = 0; if (! active_project -> dmtx || active_project -> rsparam[search][4] || (search > 2 && active_cell -> pbc)) { active_project -> dmtx = run_distance_matrix (widg, search+1, 0); } if (active_project -> dmtx) { i = search; j = 4*(active_project -> nspec + 1) * i; clean_curves_data (RI, j+4*active_project -> rsparam[i][0], j+4*(active_project -> rsparam[i][0]+1)); clean_rings_data (i, active_glwin); active_glwin -> all_rings[i] = g_malloc0 (active_project -> steps*sizeof*active_glwin -> all_rings[i]); active_glwin -> num_rings[i] = g_malloc0 (active_project -> steps*sizeof*active_glwin -> num_rings[i]); active_glwin -> show_rpoly[i] = g_malloc0 (active_project -> steps*sizeof*active_glwin -> show_rpoly[i]); active_glwin -> ring_max[i] = active_project -> rsparam[i][1]; active_glwin -> rings = TRUE; for (j=0; j steps; j++) { active_glwin -> all_rings[i][j] = g_malloc0 (active_project -> rsparam[i][1]*sizeof*active_glwin -> all_rings[i][j]); active_glwin -> num_rings[i][j] = allocint (active_project -> rsparam[i][1]); active_glwin -> show_rpoly[i][j] = g_malloc (active_project -> rsparam[i][1]*sizeof*active_glwin -> show_rpoly[i][j]); for (k=0; k < active_project -> natomes; k++) { active_project -> atoms[j][k].rings[i] = g_malloc0 (active_project -> rsparam[i][1]*sizeof*active_project -> atoms[j][k].rings[i]); } } prepostcalc (widg, FALSE, RI, 0, opac); clock_gettime (CLOCK_MONOTONIC, & start_time); j = initrings_ (& search, & active_project -> rsparam[i][1], & active_project -> rsparam[i][0], & active_project -> rsearch[1], & active_project -> rsparam[i][2], & active_project -> rsparam[i][3]); clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> rsdata[i][4] = get_calc_time (start_time, stop_time); if (j == 0) { show_error ("The ring statistics calculation has failed", 0, widg); active_glwin -> ring_max[i] = 0; active_project -> rsdata[i][4] = 0.0; } else if (j == 2) { gchar * str = g_strdup_printf ("\tThe ring statistics have failed !\n\n" "The number of ring per MD step appears\n" "to be bigger than the initial value of %d\n" "used to allocate memory to store the results.\n\n" "Increase the value and start again !", active_project -> rsearch[1]); show_error (str, 0, widg); g_free (str); active_glwin -> ring_max[i] = 0; active_project -> rsdata[i][4] = 0.0; j = 0; } else { if (active_coord -> totcoord[4+search]) { active_project -> rsparam[search][5] = 1; update_rings_view (active_project, search); } else { active_glwin -> ring_max[i] = 0; } } prepostcalc (widg, TRUE, RI, j, 1.0); } else { show_error ("The nearest neighbors table calculation has failed", 0, widg); } active_glwin -> rings = FALSE; for (i=0; i<5; i++) { if (active_coord -> totcoord[4+i]) { active_glwin -> rings = TRUE; break; } } gtk_widget_show (curvetoolbox); clean_coord_window (active_project); #ifdef GTK3 update_rings_menus (active_glwin); #else update_menu_bar (active_glwin); #endif fill_tool_model (); if (search > 2 && active_cell -> pbc) active_project -> dmtx = FALSE; } /*! \fn void save_rings_data_ (int * taille, double ectrc[*taille], double ectpna[*taille], double ectmax[*taille], double ectmin[*taille], double * rpstep, double * ectrpst, double * nampat, double * ectampat) \brief get rings statistics results form Fortran90 \param taille number of data points \param ectrc Rc (RINGS method) \param ectpna Pn (RINGS method) \param ectmax Pmax (RINGS method) \param ectmin Pmin (RINGS method) \param rpstep ring(s) per MD step \param ectrpst Standard deviation \param nampat rings not found \param ectampat standard deviation */ void save_rings_data_ (int * taille, double ectrc[* taille], double ectpna[* taille], double ectmax[* taille], double ectmin[* taille], double * rpstep, double * ectrpst, double * nampat, double * ectampat) { int i, j; i = active_project -> rsearch[0]; active_project -> rsdata[i][0] = * rpstep; active_project -> rsdata[i][1] = * ectrpst; active_project -> rsdata[i][2] = * nampat; active_project -> rsdata[i][3] = * ectampat; j = 4*(i*(active_project -> nspec+1) + active_project -> rsparam[i][0]); active_project -> curves[RI][j] -> err = duplicate_double (* taille, ectrc); active_project -> curves[RI][j+1] -> err = duplicate_double (* taille, ectpna); active_project -> curves[RI][j+2] -> err = duplicate_double (* taille, ectmax); active_project -> curves[RI][j+3] -> err = duplicate_double (* taille, ectmin); } Atomes-GNU-1.1.14/src/gui/spcall.c000066400000000000000000000163421457665371200165000ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file spcall.c * @short Callbacks for the spherical harmonics calculation dialog * @author Sébastien Le Roux */ /* * This file: 'spcall.c' * * Contains: * - The callbacks for the spherical harmonics calculation dialog * * List of functions: void initsh (int str); void update_spherical_view (project * this_proj); G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" extern void alloc_curves (int c); extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); /*! \fn void initsh (int str) \brief initialize the curve widgets for the spherical harmonics \param str initialize or not (1/0) */ void initsh (int str) { int i, j, k; if (str) { active_project -> numwid -= active_project -> numc[SP]; active_project -> numc[SP] = active_project -> nspec; for (i=0; i nspec; i++) { active_project -> numc[SP] += active_coord -> ntg[1][i]; } alloc_curves (SP); active_project -> numwid += active_project -> numc[SP]; j = 0; for (i = 0 ; i < active_project -> nspec ; i++) { active_project -> curves[SP][i+j] -> name = g_strdup_printf("Q(l) [%s] (l=0 -> %d)", active_chem -> label[i], active_project -> num_delta[SP]); j += active_coord -> ntg[1][i]; } k = 1; for (i=0 ; i < active_project -> nspec; i++) { for (j=0 ; j < active_coord -> ntg[1][i]; j++) { active_project -> curves[SP][j+k] -> name = g_strdup_printf("Q(l) %s (l=0 -> %d)", exact_name(env_name (active_project, j, i, 0, NULL)), active_project -> num_delta[SP]); } k += active_coord -> ntg[1][i]+1; } addcurwidgets (activep, SP, 0); active_project -> initok[SP] = TRUE; } } /*! \fn void update_spherical_view (project * this_proj) \brief update the text view for spherical harmonics \param this_proj the target project */ void update_spherical_view (project * this_proj) { int i, j, k, l, m; gchar * str; gchar * tab; gchar * cid; if (this_proj -> text_buffer[SP+OT] == NULL) this_proj -> text_buffer[SP+OT] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[SP+OT]); print_info ("\n\nSpherical harmonics\n\n", "heading", this_proj -> text_buffer[SP+OT]); m = 0; for (i=0; i nspec; i++) { print_info ("\nResults for the ", NULL, this_proj -> text_buffer[SP+OT]); print_info (exact_name(active_chem -> label[i]), textcolor(i), this_proj -> text_buffer[SP+OT]); print_info (" atoms: \n\n", NULL, this_proj -> text_buffer[SP+OT]); // Here print average spec info print_info ("\tl\t", "bold_italic", this_proj -> text_buffer[SP+OT]); print_info ("Q(","bold", this_proj -> text_buffer[SP+OT]); print_info ("l", "bold_italic", this_proj -> text_buffer[SP+OT]); print_info (")","bold", this_proj -> text_buffer[SP+OT]); print_info (active_chem -> label[i], textcolor(i), this_proj -> text_buffer[SP+OT]); print_info ("[All]", "bold", this_proj -> text_buffer[SP+OT]); for (j=0 ; j < active_coord -> ntg[1][i]; j++) { print_info ("\tQ(","bold", this_proj -> text_buffer[SP+OT]); print_info ("l", "bold_italic", this_proj -> text_buffer[SP+OT]); print_info (")","bold", this_proj -> text_buffer[SP+OT]); env_name (this_proj, j, i, 1, this_proj -> text_buffer[SP+OT]); } print_info ("\n", NULL, this_proj -> text_buffer[SP+OT]); k = 1; tab = NULL; cid = NULL; for (j=0; j num_delta[SP]/2+1 ; j++) { k ++; if (k - 2*(k/2) == 0) { tab = g_strdup_printf ("grey_back"); cid = g_strdup_printf ("bold_grey_back"); } else { tab = NULL; cid = g_strdup_printf ("bold"); } print_info ("\t", NULL, this_proj -> text_buffer[SP+OT]); if (j < 5) { print_info (" ",cid, this_proj -> text_buffer[SP+OT]); } str = g_strdup_printf("%d", 2*j); print_info (str, cid, this_proj -> text_buffer[SP+OT]); g_free (str); for (l=0; l ntg[1][i]+1; l++) { str = g_strdup_printf("\t%f", this_proj -> curves[SP][l+m] -> data[1][j]); print_info (str, tab, this_proj -> text_buffer[SP+OT]); g_free (str); } print_info ("\n", NULL, this_proj -> text_buffer[SP+OT]); if (tab != NULL) { g_free (tab); } if (cid != NULL) { g_free (cid); } } m += active_coord -> ntg[1][i]+1; } print_info (calculation_time(TRUE, this_proj -> calc_time[SP]), NULL, this_proj -> text_buffer[SP+OT]); } /*! \fn G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data) \brief compute spherical harmonics \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_sph_released (GtkWidget * widg, gpointer data) { int i, j, k, l, m; if (! active_project -> initok[SP]) initsh(1); if (! active_project -> dmtx) active_project -> dmtx = run_distance_matrix (widg, 0, 0); if (active_project -> dmtx) { clean_curves_data (SP, 0, active_project -> numc[SP]); prepostcalc (widg, FALSE, SP, 0, opac); k = 0; l = active_project -> nspec; m = active_project -> num_delta[SP]; clock_gettime (CLOCK_MONOTONIC, & start_time); for (i=0; i nspec; i++) { for (j=0; j< active_coord -> ntg[1][i]; j++) { if (j==0) k ++; l += sphericals_ (& m, & i, & j, & k, active_coord -> partial_geo[i][j]); k ++; } } clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> calc_time[SP] = get_calc_time (start_time, stop_time); if (l != active_project -> numc[SP]) { i = 0; } else { i = 1; } prepostcalc (widg, TRUE, SP, i, 1.0); if (! i) { show_error ("Unexpected error when analyzing the spherical harmonics", 0, widg); } else { update_spherical_view (active_project); gtk_widget_show (curvetoolbox); } } else { show_error ("The nearest neighbors table calculation has failed", 0, widg); } fill_tool_model (); } Atomes-GNU-1.1.14/src/gui/sqcall.c000066400000000000000000000253561457665371200165060ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file sqcall.c * @short Callbacks for the s(q) / s(k) calculation dialog * @author Sébastien Le Roux */ /* * This file: 'sqcall.c' * * Contains: * - The callbacks for the s(q) / s(k) calculation dialog * * List of functions: void initsq (int r); void update_sq_view (project * this_proj, int sqk); void save_xsk_ (int * interv, double datacurve[* interv]); G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data); */ #include #include #include #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" /*! \fn void initsq (int r) \brief initialize the curve widgets for the s(q) / s(k) calculation \param r s(q) (SQ) or s(k) (SK) */ void initsq (int r) { int i, j, k; active_project -> curves[r][0] -> name = g_strdup_printf ("S(q) Neutrons"); active_project -> curves[r][1] -> name = g_strdup_printf ("S(q) Neutrons - smoothed"); active_project -> curves[r][2] -> name = g_strdup_printf ("Q(q) Neutrons"); active_project -> curves[r][3] -> name = g_strdup_printf ("Q(q) Neutrons - smoothed"); active_project -> curves[r][4] -> name = g_strdup_printf ("S(q) X-rays"); active_project -> curves[r][5] -> name = g_strdup_printf ("S(q) X-rays - smoothed"); active_project -> curves[r][6] -> name = g_strdup_printf ("Q(q) X-rays"); active_project -> curves[r][7] -> name = g_strdup_printf ("Q(q) X-rays - smoothed"); k = 8; for ( i = 0 ; i < active_project -> nspec ; i++ ) { for ( j = 0 ; j < active_project -> nspec ; j++ ) { active_project -> curves[r][k] -> name = g_strdup_printf ("AL(q)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("AL(q)[%s,%s] - smoothed", active_chem -> label[i], active_chem -> label[j]); k=k+1; } } for ( i = 0 ; i < active_project -> nspec ; i++ ) { for ( j = 0 ; j < active_project -> nspec ; j++ ) { active_project -> curves[r][k] -> name = g_strdup_printf ("FZ(q)[%s,%s]", active_chem -> label[i], active_chem -> label[j]); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("FZ(q)[%s,%s] - smoothed", active_chem -> label[i], active_chem -> label[j]); k=k+1; } } if ( active_project -> nspec == 2 ) { active_project -> curves[r][k] -> name = g_strdup_printf ("BT(q)[NN]"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("BT(q)[NN] - smoothed"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("BT(q)[NC]"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("BT(q)[NC] - smoothed"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("BT(q)[CC]"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("BT(q)[CC] - smoothed"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("BT(q)[ZZ]"); k=k+1; active_project -> curves[r][k] -> name = g_strdup_printf ("BT(q)[ZZ] - smoothed"); } addcurwidgets (activep, r, 0); active_project -> initok[r] = TRUE; } /*! \fn void update_sq_view (project * this_proj, int sqk) \brief update the text view for s(q) / s(k) calculation \param this_proj the target project \param sqk s(q) (SQ) or s(k) (SK) */ void update_sq_view (project * this_proj, int sqk) { gchar * str; if (this_proj -> text_buffer[sqk+OT] == NULL) this_proj -> text_buffer[sqk+OT] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[sqk+OT]); print_info ("\n\nStructure factor(s)", "heading", this_proj -> text_buffer[sqk+OT]); if (sqk == SK) { print_info (" - reciprocal space calculation\n\n", "heading", this_proj -> text_buffer[sqk+OT]); } else { print_info (" - FFT[g(r)]\n\n", "heading", this_proj -> text_buffer[sqk+OT]); } print_info ("Calculation details:\n\n", NULL, this_proj -> text_buffer[sqk+OT]); print_info ("\tReciprocal space discretization:\n\n", NULL, this_proj -> text_buffer[sqk+OT]); print_info ("\t - Number of δq steps: ", "bold", this_proj -> text_buffer[sqk+OT]); str = g_strdup_printf ("%d", this_proj -> num_delta[sqk]); print_info (str, "bold_blue", this_proj -> text_buffer[sqk+OT]); g_free (str); print_info ("\n\n\t between ", NULL, this_proj -> text_buffer[sqk+OT]); print_info ("Q", "bold", this_proj -> text_buffer[sqk+OT]); print_info ("min", "sub_bold", this_proj -> text_buffer[sqk+OT]); print_info (" and ", NULL, this_proj -> text_buffer[sqk+OT]); print_info ("Q", "bold", this_proj -> text_buffer[sqk+OT]); print_info ("max", "sub_bold", this_proj -> text_buffer[sqk+OT]); print_info ("\n\t where ", NULL, this_proj -> text_buffer[sqk+OT]); print_info ("Q", "bold", this_proj -> text_buffer[sqk+OT]); print_info ("min", "sub_bold", this_proj -> text_buffer[sqk+OT]); print_info (" is the minimum wave vector, and ", NULL, this_proj -> text_buffer[sqk+OT]); print_info ("Q", "bold", this_proj -> text_buffer[sqk+OT]); print_info ("max", "sub_bold", this_proj -> text_buffer[sqk+OT]); print_info (" is the maximum wave vector:\n\n", NULL, this_proj -> text_buffer[sqk+OT]); print_info ("\t\tQ", "bold", this_proj -> text_buffer[sqk+OT]); print_info ("min", "sub_bold", this_proj -> text_buffer[sqk+OT]); print_info (" = ", "bold", this_proj -> text_buffer[sqk+OT]); str = g_strdup_printf ("%f", this_proj -> min[sqk]); print_info (str, "bold_blue", this_proj -> text_buffer[sqk+OT]); g_free (str); print_info (" Å", "bold", this_proj -> text_buffer[sqk+OT]); print_info ("-1", "sup_bold", this_proj -> text_buffer[sqk+OT]); print_info ("\tand\t", NULL, this_proj -> text_buffer[sqk+OT]); print_info ("Q", "bold", this_proj -> text_buffer[sqk+OT]); print_info ("max", "sub_bold", this_proj -> text_buffer[sqk+OT]); print_info (" = ", "bold", this_proj -> text_buffer[sqk+OT]); str = g_strdup_printf ("%f", this_proj -> max[sqk]); print_info (str, "bold_blue", this_proj -> text_buffer[sqk+OT]); g_free (str); print_info (" Å", "bold", this_proj -> text_buffer[sqk+OT]); print_info ("-1", "sup_bold", this_proj -> text_buffer[sqk+OT]); print_info ("\n\n\t - δq = ", "bold", this_proj -> text_buffer[sqk+OT]); str = g_strdup_printf ("%f", this_proj -> delta[sqk]); print_info (str, "bold_blue", this_proj -> text_buffer[sqk+OT]); g_free (str); print_info (" Å", "bold", this_proj -> text_buffer[sqk+OT]); print_info ("-1", "sup_bold", this_proj -> text_buffer[sqk+OT]); print_info ("\n", "bold", this_proj -> text_buffer[sqk+OT]); print_info (calculation_time(TRUE, this_proj -> calc_time[sqk]), NULL, this_proj -> text_buffer[sqk+OT]); } /*! \fn G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data) \brief compute s(q) / s(k) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_sq_released (GtkWidget * widg, gpointer data) { int i; if (! active_project -> initok[SQ]) initsq (SQ); clean_curves_data (SQ, 0, active_project -> numc[SQ]); active_project -> delta[SQ] = (active_project -> max[SQ] - active_project -> min[SQ]) / active_project -> num_delta[SQ]; prepostcalc (widg, FALSE, SQ, 0, opac); clock_gettime (CLOCK_MONOTONIC, & start_time); i = s_of_q_ (& active_project -> max[SQ], & active_project -> min[SQ], & active_project -> num_delta[SQ]); clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> calc_time[SQ] = get_calc_time (start_time, stop_time); prepostcalc (widg, TRUE, SQ, i, 1.0); if (! i) { show_error ("The S(q) calculation has failed", 0, widg); } else { update_sq_view (active_project, SQ); gtk_widget_show (curvetoolbox); } fill_tool_model (); for (i=1; i<3; i++) update_after_calc (i); } /*! \fn void save_xsk_ (int * interv, double datacurve[*interv]) \brief get s(k) calculation results form Fortran90 \param interv number of data point (delta r/q) \param datacurve calculation result */ void save_xsk_ (int * interv, double datacurve[* interv]) { if (* interv != 0) { xsk = duplicate_double (* interv, datacurve); } } /*! \fn G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data) \brief compute s(q) / s(k) \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_calc_sk_released (GtkWidget * widg, gpointer data) { int i, j; if (! active_project -> initok[SK]) initsq (SK); clean_curves_data (SK, 0, active_project -> numc[SK]); active_project -> delta[SK] = (active_project -> max[SK] - active_project -> min[SK]) / active_project -> num_delta[SK]; prepostcalc (widg, FALSE, SK, 0, opac); i = cqvf_ (& active_project -> max[SK], & active_project -> min[SK], & active_project -> num_delta[SK], & active_project -> sk_advanced[0], & active_project -> sk_advanced[1]); prepostcalc (widg, TRUE, SK, i, 1.0); if (i == 1) { prepostcalc (widg, FALSE, SK, 0, opac); for (i=0; i numc[SK]; i++) { active_project -> curves[SK][i] -> ndata = 0; } clock_gettime (CLOCK_MONOTONIC, & start_time); j = s_of_k_ (& active_project -> num_delta[SK], & active_project -> xcor); clock_gettime (CLOCK_MONOTONIC, & stop_time); active_project -> calc_time[SK] = get_calc_time (start_time, stop_time); g_free (xsk); xsk = NULL; active_project -> runok[GK] = j; prepostcalc (widg, TRUE, SK, j, 1.0); if (! j) { remove_action (analyze_action_names[GK]); show_error ("The S(q) calculation has failed", 0, widg); } else { add_action (analyze_actions[GK]); update_sq_view (active_project, SK); gtk_widget_show (curvetoolbox); } } else { show_error ("Problem during the selection of the k-points\nused to sample the recipocal lattice", 0, widg); } fill_tool_model (); for (i=1; i<3; i++) update_after_calc (i); } Atomes-GNU-1.1.14/src/gui/tools.c000066400000000000000000000255161457665371200163650ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file tools.c * @short Callbacks for the toolbox dialog * @author Sébastien Le Roux */ /* * This file: 'tools.c' * * Contains: * - The callbacks for the toolbox dialog * * List of functions: gchar * prepare_for_title (gchar * init); void fill_tool_model (); void tool_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void adjust_tool_model (int calc, int curve, gchar * string_path); G_MODULE_EXPORT void toggle_show_hide_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); GtkWidget * tooltree (); GtkWidget * curvetbox (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" extern GtkWidget * create_curve (tint * data); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); GtkTreeStore * tool_model = NULL; GtkWidget * tool_tree = NULL; GtkWidget * toolscroll = NULL; /*! \fn gchar * prepare_for_title (gchar * init) \brief prepare a string for a window title, getting rid of all markup \param init the initial string */ gchar * prepare_for_title (gchar * init) { gchar * str = g_strdup_printf ("%s", substitute_string (init, "", NULL)); str = g_strdup_printf ("%s", substitute_string (str, "", NULL)); str = g_strdup_printf ("%s", substitute_string (str, "", NULL)); str = g_strdup_printf ("%s", substitute_string (str, "", NULL)); str = g_strdup_printf ("%s", substitute_string (str, "", NULL)); str = g_strdup_printf ("%s", substitute_string (str, "", NULL)); return str; } /*! \fn void fill_tool_model () \brief fill the tool window tree model */ void fill_tool_model () { GtkTreeIter calc_level, curve_level; int i, j; gboolean status, append; gchar * str; GtkImage * img; if (active_project) { i = (active_project -> steps > 1) ? 25 : 0; gtk_window_set_resizable (GTK_WINDOW (curvetoolbox), TRUE); #ifdef GTK4 gtk_widget_set_size_request (curvetoolbox, 300, 210+i); #else gtk_widget_set_size_request (curvetoolbox, 300, 240+i); #endif gtk_window_set_resizable (GTK_WINDOW (curvetoolbox), FALSE); } gtk_tree_store_clear (tool_model); for (i=0; i steps > 1) ? TRUE : FALSE; } else { append = FALSE; } } if (append) { gtk_tree_store_append (tool_model, & calc_level, NULL); img = GTK_IMAGE(gtk_image_new_from_file(graph_img[i])); #ifdef GTK4 gtk_tree_store_set (tool_model, & calc_level, 0, -1, 1, -1, 2, img, 3, graph_name[i], -1); #else GdkPixbuf * pix = gtk_image_get_pixbuf(img); gtk_tree_store_set (tool_model, & calc_level, 0, -1, 1, -1, 2, pix, 3, graph_name[i], -1); #endif gtk_image_clear (img); if (active_project) { if (active_project -> numc[i] > 0 && active_project -> visok[i]) { for (j=0; j numc[i]; j++) { if (active_project -> curves[i][j] -> name && active_project -> curves[i][j] -> ndata) { gtk_tree_store_append (tool_model, & curve_level, & calc_level); status = FALSE; str = g_strdup_printf ("%s", active_project -> curves[i][j] -> name); if (active_project -> curves[i][j] -> window != NULL) { if (GTK_IS_WIDGET(active_project -> curves[i][j] -> window)) { if (gtk_widget_get_visible(active_project -> curves[i][j] -> window)) status = TRUE; } } gtk_tree_store_set (tool_model, & curve_level, 0, i, 1, j, 3, str, 4, status, -1); g_free (str); } } } } } } } /* void tool_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show/hide and sensitive/not a GtkCellRenderer \param col the column \param renderer the cell renderer \param mod the model \param iter the iter \param data the associated data pointer */ void tool_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j, k; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); gboolean vis = ((j < 0 && i == 2) || (j > -1 && i == 0)) ? FALSE : TRUE; gtk_cell_renderer_set_visible (renderer, vis); if (! active_project) { gtk_cell_renderer_set_sensitive (renderer, FALSE); } else if (j > -1 && active_project -> numwid > 0) { if (active_project -> numc[j]) { gtk_tree_model_get (mod, iter, 1, & k, -1); if (active_project) gtk_cell_renderer_set_sensitive (renderer, active_project -> curves[j][k] -> ndata); } } else { gtk_cell_renderer_set_sensitive (renderer, TRUE); } } /*! \fn void adjust_tool_model (int calc, int curve, gchar * string_path) \brief adjust the content of the tool box tree model \param calc the calculation \param curve the curve \param string_path the path in the tree view */ void adjust_tool_model (int calc, int curve, gchar * string_path) { GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(tool_model), & iter, path); if (calc == SP || calc == MS) { int i, j; gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 0, & i, -1); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 1, & j, -1); if (i == calc && j == curve) gtk_tree_store_set (tool_model, & iter, 4, 0, -1); } else { gtk_tree_store_set (tool_model, & iter, 4, 0, -1); } } /*! \fn G_MODULE_EXPORT void toggle_show_hide_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief To show/hide a curve by clicking in the tree view \param cell_renderer the renderer toggled \param string_path the path in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void toggle_show_hide_curve (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k; GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(tool_model), & iter, path); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 0, & i, -1); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 1, & j, -1); gtk_tree_model_get (GTK_TREE_MODEL(tool_model), & iter, 4, & k, -1); #ifdef DEBUG // g_debug ("Show curve:: i= %d, j= %d, k= %d", i, j, k); #endif // DEBUG if (! k) { if (active_project -> curves[i][j] -> window == NULL) { active_project -> curves[i][j] -> window = create_curve (& active_project -> idcc[i][j]); active_project -> curves[i][j] -> path = g_strdup_printf ("%s", string_path); } show_the_widgets (active_project -> curves[i][j] -> window); } else { if (active_project -> curves[i][j] -> window != NULL) { gtk_widget_hide (active_project -> curves[i][j] -> window); } } gtk_tree_store_set (tool_model, & iter, 4, ! k, -1); } /*! \fn GtkWidget * tooltree () \brief create the toolbox tree view */ GtkWidget * tooltree () { GtkTreeViewColumn * tool_col[3]; GtkCellRenderer * tool_cell[3]; gchar * ctitle[3]={"Logo", "Name", "Button"}; gchar * ctype[3]={"pixbuf", "text", "active"}; GType coltype[5]= {G_TYPE_INT, G_TYPE_INT, G_TYPE_OBJECT, G_TYPE_STRING, G_TYPE_BOOLEAN}; tool_model = gtk_tree_store_newv (5, coltype); int i; fill_tool_model (); tool_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(tool_model)); for (i=0; i<3; i++) { switch (i) { case 0: tool_cell[i] = gtk_cell_renderer_pixbuf_new (); break; case 1: tool_cell[i] = gtk_cell_renderer_text_new (); break; case 2: tool_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(tool_cell[i]), "toggled", G_CALLBACK(toggle_show_hide_curve), NULL); break; } tool_col[i] = gtk_tree_view_column_new_with_attributes (ctitle[i], tool_cell[i], ctype[i], i+2, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(tool_tree), tool_col[i]); gtk_tree_view_column_set_alignment (tool_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (tool_col[i], tool_cell[i], tool_set_visible, GINT_TO_POINTER(i), NULL); } gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(tool_tree), FALSE); return tool_tree; } /*! \fn GtkWidget * curvetbox () \brief create the curve tool box window */ GtkWidget * curvetbox () { GtkWidget * ctbox; ctbox = create_win ("Toolboxes", MainWindow, FALSE, FALSE); #ifdef GTK4 gtk_widget_set_size_request (ctbox, 300, 210); #else gtk_widget_set_size_request (ctbox, 300, 240); #endif graph_img[0] = g_strdup_printf ("%s", PACKAGE_GR); graph_img[1] = g_strdup_printf ("%s", PACKAGE_SQ); graph_img[2] = g_strdup_printf ("%s", PACKAGE_SQ); graph_img[3] = g_strdup_printf ("%s", PACKAGE_GR); graph_img[4] = g_strdup_printf ("%s", PACKAGE_BD); graph_img[5] = g_strdup_printf ("%s", PACKAGE_AN); graph_img[6] = g_strdup_printf ("%s", PACKAGE_RI); graph_img[7] = g_strdup_printf ("%s", PACKAGE_CH); graph_img[8] = g_strdup_printf ("%s", PACKAGE_SP); graph_img[9] = g_strdup_printf ("%s", PACKAGE_MS); toolscroll = create_scroll (NULL, -1, -1, GTK_SHADOW_NONE); add_container_child (CONTAINER_SCR, toolscroll, tooltree ()); add_container_child (CONTAINER_WIN, ctbox, toolscroll); show_the_widgets (toolscroll); add_gtk_close_event (ctbox, G_CALLBACK(hide_this_window), NULL); return (ctbox); } Atomes-GNU-1.1.14/src/gui/work_menu.c000066400000000000000000000317221457665371200172270ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file work_menu.c * @short Workspace menu GTK3 version \n Callbacks for the workspace menu * @author Sébastien Le Roux */ /* * This file: 'work_menu.c' * * Contains: * - The workspace menu GTK3 version - Callbacks for the workspace menu * * List of functions: G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data); GtkWidget * this_work_menu (int p, int c); GtkWidget * work_menu (int p, int c); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glview.h" extern G_MODULE_EXPORT void on_calc_activate (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); /*! \fn G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data) \brief create a new project \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data) { init_project (TRUE); add_project_to_workspace (); frag_update = mol_update = 0; apply_project (FALSE); #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_project -> modelgl -> ogl_mode[1], TRUE); set_mode (active_project -> modelgl -> ogl_mode[1], & active_project -> modelgl -> colorp[1][0]); #else set_mode (NULL, & active_project -> modelgl -> colorp[1][0]); #endif prep_calc_actions (); } /*! \fn G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data) \brief leaving atomes ? \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void leaving_from_menu (GtkWidget * widg, gpointer data) { #ifdef GTK4 leaving_question (NULL, NULL); #else leaving_question (NULL, NULL, NULL); #endif } int calc_to_compute; /*! \fn G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data) \brief to compute the 'calc_to_compute' \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void compute_this_prop (GtkWidget * widg, gpointer data) { activate_project (NULL, data); on_calc_activate (NULL, GINT_TO_POINTER(calc_to_compute)); } #ifdef GTK3 /*! \fn GtkWidget * this_work_menu (int p, int c) \brief create the workspace menu GTK3 version with icons \param p project id, or -1 \param c calculation id, or -1 */ GtkWidget * this_work_menu (int p, int c) { GtkWidget * menu; GtkWidget * port; GtkWidget * dmenu; gchar * imp_str[2] = {"Import", "Export"}; menu = gtk_menu_new (); GtkAccelGroup * accel_group = gtk_accel_group_new (); gtk_window_add_accel_group (GTK_WINDOW (MainWindow), accel_group); widget_set_sensitive (gtk3_menu_item (menu, "Workspace", IMG_FILE, (gpointer)PACKAGE_TD, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE), 0); add_menu_separator (menu); gtk3_menu_item (menu, "Open", IMG_STOCK, (gpointer)FOPEN, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(2), TRUE, GDK_KEY_w, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Save", IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(3), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Save As", IMG_STOCK, (gpointer)FSAVEAS, G_CALLBACK(on_save_as_activate), GINT_TO_POINTER(3), TRUE, GDK_KEY_s, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Close", IMG_STOCK, (gpointer)FCLOSE, G_CALLBACK(on_close_workspace), GINT_TO_POINTER(1), TRUE, GDK_KEY_c, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); add_menu_separator (menu); if (p == -1) { widget_set_sensitive (gtk3_menu_item (menu, "Project(s)", IMG_FILE, (gpointer)PACKAGE_TD, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE), FALSE); add_menu_separator (menu); gtk3_menu_item (menu, "New", IMG_STOCK, (gpointer)FNEW, G_CALLBACK(on_create_new_project), NULL, TRUE, GDK_KEY_n, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Open", IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(0), TRUE, GDK_KEY_o, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Save", IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Save As", IMG_STOCK, (gpointer)FSAVEAS, G_CALLBACK(on_save_as_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Close", IMG_STOCK, (gpointer)FCLOSE, G_CALLBACK(on_close_activate), GINT_TO_POINTER(activep), FALSE, 0, 0, FALSE, FALSE, FALSE); port = gtk3_menu_item (menu, imp_str[1], IMG_FILE, (gpointer)PACKAGE_CON, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); dmenu = gtk_menu_new (); gtk3_menu_item (dmenu, "ISAACS Project File '*.ipf'", IMG_FILE, (gpointer)PACKAGE_MOL, G_CALLBACK(on_isaacs_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (dmenu, "Atomic Coordinates", IMG_FILE, (gpointer)PACKAGE_CON, G_CALLBACK(on_coord_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk_menu_item_set_submenu ((GtkMenuItem *)port, dmenu); } else { gchar * pname = g_strdup_printf ("%s", get_project_by_id(p) -> name); widget_set_sensitive (gtk3_menu_item (menu, pname, IMG_FILE, (gpointer)PACKAGE_TD, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE), 0); g_free (pname); add_menu_separator (menu); if (p != activep) { gtk3_menu_item (menu, "Make Active", IMG_STOCK, (gpointer)YES, G_CALLBACK(activate_project), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE); } if (c > -1) { gchar * str = g_strdup_printf ("Analyze: %s", work_menu_items[c+4]); widget_set_sensitive (gtk3_menu_item (menu, str, IMG_FILE, (gpointer)graph_img[c], G_CALLBACK(compute_this_prop), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE), get_project_by_id(p) -> runok[c]); g_free (str); } gtk3_menu_item (menu, "Edit Name", IMG_STOCK, (gpointer)EDITA, G_CALLBACK(change_project_name), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Save", IMG_STOCK, (gpointer)FSAVE, G_CALLBACK(on_open_save_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Save As", IMG_STOCK, (gpointer)FSAVEAS, G_CALLBACK(on_save_as_activate), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Close", IMG_STOCK, (gpointer)FCLOSE, G_CALLBACK(on_close_activate), GINT_TO_POINTER(p), FALSE, 0, 0, FALSE, FALSE, FALSE); port = gtk3_menu_item (menu, imp_str[1], IMG_FILE, (gpointer)PACKAGE_CON, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); dmenu = gtk_menu_new (); gtk3_menu_item (dmenu, "ISAACS Project File '*.ipf'", IMG_FILE, (gpointer)PACKAGE_MOL, G_CALLBACK(on_isaacs_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (dmenu, "Atomic Coordinates", IMG_FILE, (gpointer)PACKAGE_CON, G_CALLBACK(on_coord_port), GINT_TO_POINTER(1), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk_menu_item_set_submenu ((GtkMenuItem *)port, dmenu); } add_menu_separator (menu); port = gtk3_menu_item (menu, imp_str[0], IMG_FILE, (gpointer)PACKAGE_IMP, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); dmenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)port, dmenu); gtk3_menu_item (dmenu, "ISAACS Project File '*.ipf'", IMG_FILE, (gpointer)PACKAGE_MOL, G_CALLBACK(on_isaacs_port), GINT_TO_POINTER(0), FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (dmenu, "Atomic Coordinates", IMG_FILE, (gpointer)PACKAGE_IMP, G_CALLBACK(on_coord_port), GINT_TO_POINTER(0), FALSE, 0, 0, FALSE, FALSE, FALSE); add_menu_separator (menu); gtk3_menu_item (menu, "Quit", IMG_STOCK, (gpointer)FEXIT, G_CALLBACK(leaving_from_menu), NULL, TRUE, GDK_KEY_q, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); show_the_widgets (menu); return menu; } #endif extern void atomes_menu_bar_action (GSimpleAction * action, GVariant * parameter, gpointer data); extern GMenu * create_workspace_menu (gchar * act, int pop_up, int proj, int calc); extern GSimpleAction * pop_act[7]; /*! \fn GtkWidget * work_menu (int p, int c) \brief create the workspace popup menu \param p project id, or -1 \param c calculation id, or -1 */ GtkWidget * work_menu (int p, int c) { GtkWidget * menu; GSimpleActionGroup * action_popup = g_simple_action_group_new (); GSimpleAction * pop_act[17]; pop_act[0] = g_simple_action_new ("workspace.open", NULL); pop_act[1] = g_simple_action_new ("workspace.save", NULL); pop_act[2] = g_simple_action_new ("workspace.save-as", NULL); pop_act[3] = g_simple_action_new ("workspace.close", NULL); pop_act[4] = g_simple_action_new ("project.active", NULL); pop_act[5] = g_simple_action_new ("project.compute", NULL); pop_act[6] = g_simple_action_new ("project.edit", NULL); pop_act[7] = g_simple_action_new ("project.new", NULL); pop_act[8] = g_simple_action_new ("project.open", NULL); pop_act[9] = g_simple_action_new ("project.save", NULL); pop_act[10] = g_simple_action_new ("project.save-as", NULL); pop_act[11] = g_simple_action_new ("project.close", NULL); pop_act[12] = g_simple_action_new ("export.isaacs", NULL); pop_act[13] = g_simple_action_new ("export.coordinates", NULL); pop_act[14] = g_simple_action_new ("import.isaacs", NULL); pop_act[15] = g_simple_action_new ("import.coordinates", NULL); pop_act[16] = g_simple_action_new ("program.quit", NULL); int i; for (i=0; i<17; i++) g_action_map_add_action (G_ACTION_MAP(action_popup), G_ACTION(pop_act[i])); g_signal_connect (pop_act[0], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(2)); g_signal_connect (pop_act[1], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(3)); g_signal_connect (pop_act[2], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(3)); g_signal_connect (pop_act[3], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[4], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[5], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[6], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[7], "activate", G_CALLBACK(atomes_menu_bar_action), NULL); g_signal_connect (pop_act[8], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (pop_act[9], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[10], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[11], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(p)); g_signal_connect (pop_act[12], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[13], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(1)); g_signal_connect (pop_act[14], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (pop_act[15], "activate", G_CALLBACK(atomes_menu_bar_action), GINT_TO_POINTER(0)); g_signal_connect (pop_act[16], "activate", G_CALLBACK(atomes_menu_bar_action), NULL); calc_to_compute = (c < AN) ? c : c - 1; #ifdef GTK3 menu = this_work_menu (p, c); // GMenu * popup = create_workspace_menu ("pop", 1, p, c); // gtk_menu_new_from_model (G_MENU_MODEL(popup)); #else GMenu * popup = create_workspace_menu ("pop", 1, p, c); menu = gtk_popover_menu_new_from_model_full (G_MENU_MODEL(popup), GTK_POPOVER_MENU_NESTED); i = (nprojects) ? (p > -1) ? 235 : 80 : 0; gtk_widget_set_size_request (menu, -1, 235 + i); /* I need to use the ' gtk_popover_menu_new_from_model_full' command here, the menu created using the 'gtk_popover_menu_new_from_model' does not behave properly, that might be a bug, some items of the menu having the same name, It is not possible to navigate the menu properly and some elements remains inaccessible, this was solved with this '_full' command. menu = gtk_popover_menu_new_from_model (G_MENU_MODEL(popup)); */ #endif gtk_widget_insert_action_group (menu, "pop", G_ACTION_GROUP(action_popup)); return menu; } Atomes-GNU-1.1.14/src/opengl/000077500000000000000000000000001457665371200155505ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/opengl/arcball.c000066400000000000000000000044301457665371200173150ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file arcball.c * @short Mouse trackball rotation functions * @author Sébastien Le Roux */ /* * This file: 'arcball.c' * * Contains: * - The mouse trackball rotation functions * * List of functions: void arc_ball_rotation (glwin * view, int x, int y); */ #include "global.h" #include "glview.h" extern void rotate_quat (project * this_proj, vec4_t q, int status, int axis); vec3_t arc_ball_init; vec3_t arc_ball_new; vec4_t old_rotation_quaternion; vec3_t get_arc_ball_vector (glwin * view, int x, int y) { vec3_t vect; vect.x = 2.0*x/view -> pixels[0] - 1.0; y = view -> pixels[1] - y; vect.y = 2.0*y/view -> pixels[1] - 1.0; float norm_arc = vect.x*vect.x + vect.y*vect.y; if (norm_arc > 1.0) { vect.z = 0.0; } else { vect.z = sqrt(1.0 - norm_arc); } return v3_norm (vect); } /*! \fn void arc_ball_rotation (glwin * view, int x, int y) \brief Perform arcball rotation \param view the target glwin \param x x position \param y y position */ void arc_ball_rotation (glwin * view, int x, int y) { arc_ball_new = get_arc_ball_vector (view, x, y); vec3_t rot_axis = v3_cross (arc_ball_init, arc_ball_new); if (v3_length(rot_axis) > 0.0) { double rot_angle = - acos(v3_dot (arc_ball_init, arc_ball_new)); vec4_t quat = axis_to_quat (rot_axis, rot_angle); if (view -> mode != EDITION) { view -> anim -> last -> img -> rotation_quaternion = q4_mul (old_rotation_quaternion, quat); } else { rotate_quat (get_project_by_id(view -> proj), quat, 1, 1); } } } Atomes-GNU-1.1.14/src/opengl/draw/000077500000000000000000000000001457665371200165055ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/opengl/draw/d_atoms.c000066400000000000000000000444301457665371200203040ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file d_atoms.c * @short nctions to prepare the OpenGL rendering atom(s) and clone(s) * @author Sébastien Le Roux */ /* * This file: 'd_atoms.c' * * Contains: * - The functions to prepare the OpenGL rendering atom(s) and clone(s) * * List of functions: int sphere_vertices (int qual); int sphere_indices (int qual); int find_atom_vertices (gboolean to_pick); int find_clone_vertices (gboolean to_pick); float get_sphere_radius (int style, int sp, int ac, int sel); void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha); void setup_this_atom (int style, gboolean to_pick, gboolean picked, atom * at, int ac, float * vert, float al); void setup_atom_vertices (int style, gboolean to_pick, float * vertices); void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices); void setup_clone_vertices (int style, gboolean to_pick, float * vertices); void atom_positions_colors_and_sizes (int style, gboolean to_pick, float * instances); void create_atom_lists (gboolean to_pick); ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick); object_3d * draw_sphere (int quality); */ #include "global.h" #include "glview.h" #include "ogl_shading.h" #include "dlp_field.h" int atom_id; int gColorID[3]; int all_styles[NUM_STYLES]; /*! \fn ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick) \brief get atom (or clone) color \param i chemical species \param j the atom id \param al opacity (atom: 1.0, clone: 0.5) \param picked is the atom (clone) selected (1) or not (0) \param to_pick to pick (1) or to draw (0) */ ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick) { // i = atom spec, j = atom id (for coordination maps), al = alpha int s = i; int m; ColRGBA colo; if (to_pick) { gColorID[0]++; if(gColorID[0] > 255) { gColorID[0] = 0; gColorID[1]++; if(gColorID[1] > 255) { gColorID[1] = 0; gColorID[2]++; } } wingl -> color_to_pick[wingl -> to_be_picked] = gColorID[0] + 256*gColorID[1] + 256*256*gColorID[2]; colo.red = gColorID[0]/255.0; colo.green = gColorID[1]/255.0; colo.blue = gColorID[2]/255.0; colo.alpha = 1.0; wingl -> to_be_picked ++; } else if (picked) { if (field_color) { colo = init_color (proj_gl -> atoms[step][j].coord[4], num_field_objects); colo.alpha = DEFAULT_OPACITY*0.75; } else { if (picked == 1) { colo.red = 0.0; colo.green = 1.0; colo.blue = 1.0; } else { colo.red = 1.0; colo.green = 0.0; colo.blue = 0.84; } colo.alpha = DEFAULT_OPACITY*0.75; } } else { if (acolorm == 0) { colo.red = plot -> at_color[s].red; colo.green = plot -> at_color[s].green; colo.blue = plot -> at_color[s].blue; colo.alpha = al;// * plot -> m_terial.param[5]; } else if (acolorm < 5) { if (acolorm < 3) { s -= proj_sp*(s/proj_sp); } else { s = 0; } int k = proj_gl -> atoms[step][j].coord[acolorm -1]; colo.red = plot -> spcolor[acolorm - 1][s][k].red; colo.green = plot -> spcolor[acolorm - 1][s][k].green; colo.blue = plot -> spcolor[acolorm - 1][s][k].blue; colo.alpha = al;// * plot -> m_terial.param[5]; } else if (acolorm == 5) { field_molecule * fmol = get_active_field_molecule_from_model_id (proj_gl, j); if (fmol) { s = proj_gl -> atoms[0][j].fid; m = fmol -> mol -> natoms; } else { s = 0; m = 1; } colo = init_color (s, m); colo.alpha = al;// * plot -> m_terial.param[5]; } else if (acolorm == 6) { colo.red = wingl -> custom_map -> colors[step][j].red; colo.blue = wingl -> custom_map -> colors[step][j].blue; colo.green = wingl -> custom_map -> colors[step][j].green; colo.alpha = wingl -> custom_map -> colors[step][j].alpha; } } return colo; } int nbs, nbl, nba; /*! \fn int sphere_vertices (int qual) \brief return the number of OpenGL vertices to render a sphere \param qual OpenGL quality */ int sphere_vertices (int qual) { return qual * qual; } /*! \fn int sphere_indices (int qual) \brief return the number of OpenGL indices to render a sphere \param qual OpenGL quality */ int sphere_indices (int qual) { return 2 * qual * (qual - 1); } /*! \fn object_3d * draw_sphere (int quality) \brief OpenGL 3D sphere object rendering \param quality OpenGL quality */ object_3d * draw_sphere (int quality) { float theta, phi; float cos_phi, sin_phi; float xPos, yPos, zPos; int stack, slice; int x, y, z; object_3d * new_sphere = g_malloc0 (sizeof*new_sphere); new_sphere -> quality = quality; new_sphere -> num_vertices = sphere_vertices (quality); new_sphere -> vert_buffer_size = 3; new_sphere -> vertices = allocfloat (3*new_sphere -> num_vertices); new_sphere -> num_indices = sphere_indices (quality); new_sphere -> ind_buffer_size = 1; new_sphere -> indices = allocint (new_sphere -> num_indices); x = 0; for (stack=0; stack <= quality-1; stack++) { phi = pi * stack / (quality-1); cos_phi = cos(phi); sin_phi = sin(phi); for (slice=0; slice <= quality-1; slice++) { theta = 2.0 * pi * slice / (quality-1); xPos = cos(theta) * sin_phi; yPos = cos_phi; zPos = sin(theta) * sin_phi; new_sphere -> vertices[3*x] = xPos; new_sphere -> vertices[3*x+1] = yPos; new_sphere -> vertices[3*x+2] = zPos; x ++; } } gboolean oddRow = FALSE; z = 0; for (y = 0; y < quality-1; y++) { if (!oddRow) // even rows: y == 0, y == 2; and so on { for (x = 0; x <= quality-1; x++) { new_sphere -> indices[z] = (y * quality + x); new_sphere -> indices[z+1]= ((y + 1) * quality + x); z += 2; } } else { for (x = quality-1; x >= 0; x--) { new_sphere -> indices[z] = ((y + 1) * quality + x); new_sphere -> indices[z+1] = (y * quality + x); z += 2; } } oddRow = !oddRow; } return new_sphere; } /*! \fn float get_sphere_radius (int style, int sp, int ac, int sel) \brief get an atom sphere radius \param style rendering style \param sp chemical species \param ac atom (0) or clone (1) \param sel is the atom selected (1) or not (0) */ float get_sphere_radius (int style, int sp, int ac, int sel) { if (style == WIREFRAME || style == PUNT) { return plot -> pointrad[sp + ac*proj_sp] + sel*4.0; } else if (style == SPACEFILL) { return plot -> atomicrad[sp + ac*proj_sp] + sel*0.05; } else if (style == CYLINDERS) { return plot -> radall[ac] + sel*0.05; } else { return plot -> sphererad[sp + ac*proj_sp] + sel*0.05; } } /*! \fn void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha) \brief fill the OpenGL data buffer for a atom (or clone) to render \param vertices the OpenGL buffer data to fill \param pos the position vector \param col the color \param rad the radius \param alpha the opacity (atom: 1.0, clone: 0.5) */ void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha) { int l; l = nbl*ATOM_BUFF_SIZE; vertices[l] = pos.x; vertices[l+1] = pos.y; vertices[l+2] = pos.z; vertices[l+3] = rad; vertices[l+4] = col.red; vertices[l+5] = col.green; vertices[l+6] = col.blue; vertices[l+7] = col.alpha * alpha; nbl ++; } /*! \fn void setup_this_atom (int style, gboolean to_pick, gboolean picked, atom * at, int ac, float * vert, float al) \brief prepare the OpenGL rendering data of an atom / clone \param style rendering style \param to_pick to pick (1) or to draw (0) \param picked is the atom selected (1) or not (0) \param at the atom to render \param ac atom (0) or clone (1) \param vert the OpenGL buffer data to fill \param al the opacity (atom: 1.0, clone: 0.5) */ void setup_this_atom (int style, gboolean to_pick, gboolean picked, atom * at, int ac, float * vert, float al) { int i, j, k; float alpha = 1.0; float shift[3]; ColRGBA col = get_atom_color (at -> sp, at -> id, 1.0, picked, to_pick); if (at -> sp > proj_sp - 1) at -> sp -= proj_sp; float rad = get_sphere_radius ((style == NONE) ? plot -> style : style, at -> sp, ac, (picked) ? 1 : 0); for (i=0; i extra_cell[0]+1;i++) { for (j=0; j extra_cell[1]+1; j++) { for (k=0; k extra_cell[2]+1; k++) { shift[0]=i*box_gl -> vect[0][0]+j*box_gl -> vect[1][0]+k*box_gl -> vect[2][0]; shift[1]=i*box_gl -> vect[0][1]+j*box_gl -> vect[1][1]+k*box_gl -> vect[2][1]; shift[2]=i*box_gl -> vect[0][2]+j*box_gl -> vect[1][2]+k*box_gl -> vect[2][2]; at_shift (at, shift); setup_sphere_vertice (vert, vec3(at -> x, at -> y, at -> z), col, rad, (to_pick) ? 1.0 : alpha*al); at_unshift (at, shift); alpha = 0.5; } } } } /*! \fn int find_atom_vertices (gboolean to_pick) \brief find the number of atom(s) to render \param to_pick to pick (1) or to draw (0) */ int find_atom_vertices (gboolean to_pick) { int i, j; j = 0; for (i=0; i at_data != NULL) { if (plot -> at_data[i].show[0]) { if (to_pick) { all_styles[0] ++; } else { all_styles[plot -> at_data[i].style + 1] ++; } j ++; } } else { if (proj_gl -> atoms[step][i].show[0]) { if (to_pick) { all_styles[0] ++; } else { all_styles[proj_gl -> atoms[step][i].style + 1] ++; } j ++; } } } return j; } /*! \fn void setup_atom_vertices (int style, gboolean to_pick, float * vertices) \brief prepare an atom OpenGL rendering \param style the rendering style \param to_pick to pick (1) or to draw (0) \param vertices the OpenGL buffer data to fill */ void setup_atom_vertices (int style, gboolean to_pick, float * vertices) { int i; atom * tmp_a; for (i=0; i atoms[step][i]); if (in_movie_encoding && plot -> at_data != NULL) { tmp_a -> show[0] = plot -> at_data[i].show[0]; tmp_a -> style = plot -> at_data[i].style; } if (tmp_a -> show[0] && (tmp_a -> style == style || to_pick)) { setup_this_atom (style, to_pick, 0, tmp_a, 0, vertices, 1.0); } g_free (tmp_a); } } /*! \fn void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices) \brief prepare the rendering data of a clone \param style the rendering style \param to_pick to pick (1) or to draw (0) \param picked is the clone selected (1) or not (0) \param at 1st atom of the cloned chemical bond \param bt 2nd atom of the cloned chemical bond \param x x position \param y y position \param z z position \param vertices the OpenGL buffer data to fill */ void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices) { atom * tmp_a = duplicate_atom (& bt); tmp_a -> x += x; tmp_a -> y += y; tmp_a -> z += z; tmp_a -> id = at.id; tmp_a -> sp = at.sp + proj_sp; int sty = at.style; if (in_movie_encoding && plot -> at_data != NULL) { tmp_a -> show[1] = plot -> at_data[at.id].show[1]; sty = plot -> at_data[at.id].style; } if (at.show[1] && (sty == style || to_pick)) { setup_this_atom (style, to_pick, picked, tmp_a, 1, vertices, 0.5); } g_free (tmp_a); } /*! \fn int find_clone_vertices (gboolean to_pick) \brief find the number of clones to render \param to_pick to pick (1) or to draw (0) */ int find_clone_vertices (gboolean to_pick) { int i, j, k, l; l = 0; for (i=0; i < wingl -> bonds[step][1]; i++) { j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { if (plot -> at_data[j].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[plot -> at_data[j].style + 1] ++; } l++; } if (plot -> at_data[k].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[plot -> at_data[k].style + 1] ++; } l++; } } else { if (proj_gl -> atoms[step][j].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[proj_gl -> atoms[step][j].style + 1] ++; } l ++; } if (proj_gl -> atoms[step][k].show[1]) { if (to_pick) { all_styles[0] ++; } else { all_styles[proj_gl -> atoms[step][k].style + 1] ++; } l ++; } } } return l; } /*! \fn void setup_clone_vertices (int style, gboolean to_pick, float * vertices) \brief find clone(s) position(s), color(s) and prepare the data for the OpenGL rendering \param style rendering style \param to_pick to pick (1) or to draw (0) \param vertices the OpenGL data buffer to fill */ void setup_clone_vertices (int style, gboolean to_pick, float * vertices) { int i, j, k; for (i=0; i < wingl -> bonds[step][1]; i++) { j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; prepare_clone (style, to_pick, 0, proj_gl -> atoms[step][j], proj_gl -> atoms[step][k], wingl -> clones[step][i].x, wingl -> clones[step][i].y, wingl -> clones[step][i].z, vertices); prepare_clone (style, to_pick, 0, proj_gl -> atoms[step][k], proj_gl -> atoms[step][j], -wingl -> clones[step][i].x, -wingl -> clones[step][i].y, -wingl -> clones[step][i].z, vertices); } } /*! \fn void atom_positions_colors_and_sizes (int style, gboolean to_pick, float * instances) \brief find atom(s) position(s), color(s) and prepare the data for the OpenGL rendering \param style rendering style \param to_pick to pick (1) or to draw (0) \param instances the OpenGL data buffer to fill */ void atom_positions_colors_and_sizes (int style, gboolean to_pick, float * instances) { setup_atom_vertices (style, to_pick, instances); if (to_pick) wingl -> atoms_to_be_picked = wingl -> clones_to_be_picked = wingl -> to_be_picked; if (plot -> draw_clones) { setup_clone_vertices (style, to_pick, instances); if (to_pick) wingl -> clones_to_be_picked = wingl -> to_be_picked; } } /*! \fn void create_atom_lists (gboolean to_pick) \brief prepare atom(s) and clone(s) OpenGL rendering \param to_pick to pick (1) or to draw (0) */ void create_atom_lists (gboolean to_pick) { int i, j, k; object_3d * atos; gboolean sphere = TRUE; if (! to_pick) { cleaning_shaders (wingl, ATOMS); wingl -> create_shaders[ATOMS] = FALSE; } for (i=0; i draw_clones) j += find_clone_vertices (to_pick); #ifdef DEBUG g_debug ("Atom LIST:: to_pick= %s, Atom(s) to render= %d", (to_pick) ? "true" : "false", j); #endif if (j > 0) { // Render atom(s) j = (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); if (! to_pick) { wingl -> n_shaders[ATOMS][step] = 0; for (i=0; i n_shaders[ATOMS][step] ++; wingl -> ogl_glsl[ATOMS][step] = g_malloc0 (wingl -> n_shaders[ATOMS][step]*sizeof*wingl -> ogl_glsl[ATOMS][step]); } k = 0; for (i=0; i style == WIREFRAME || plot -> style == PUNT) sphere = FALSE; } else { if (i-1 == WIREFRAME || i-1 == PUNT) sphere = FALSE; } if (sphere) { atos = draw_sphere (plot -> quality); } else { atos = g_malloc0 (sizeof*atos); atos -> vert_buffer_size = 3; atos -> num_vertices = 1; atos -> vertices = allocfloat (3); atos -> vertices[0] = atos -> vertices[1] = atos -> vertices[2] = 0.0; } atos -> num_instances = j*all_styles[i]; atos -> inst_buffer_size = ATOM_BUFF_SIZE; atos -> instances = allocfloat (j*all_styles[i]*ATOM_BUFF_SIZE); nbl = 0; atom_positions_colors_and_sizes (i-1, to_pick, atos -> instances); if (! to_pick) { if (sphere) { wingl -> ogl_glsl[ATOMS][step][k] = init_shader_program (ATOMS, GLSL_SPHERES, sphere_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 4, 1, TRUE, atos); } else { wingl -> ogl_glsl[ATOMS][step][k] = init_shader_program (ATOMS, GLSL_POINTS, point_vertex, NULL, point_color, GL_POINTS, 4, 1, FALSE, atos); } } else { wingl -> ogl_glsl[PICKS][0][0] = init_shader_program (PICKS, GLSL_SPHERES, sphere_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 4, 1, FALSE, atos); } g_free (atos); k ++; } if (to_pick) break; } } } Atomes-GNU-1.1.14/src/opengl/draw/d_axis.c000066400000000000000000000273431457665371200201310ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file d_axis.c * @short Functions to prepare the OpenGL rendering for the axis * @author Sébastien Le Roux */ /* * This file: 'd_axis.c' * * Contains: * - The functions to prepare the OpenGL rendering for the axis * * List of functions: int create_axis_lists (); void setup_arrow (float * vert, vec3_t a, vec3_t b, vec3_t c, vec3_t d, vec3_t e); void init_axis_param (); void prepare_axis_data (float * vert_a, float * vert_b, float * vert_c); ColRGBA color_axis (int id); mat4_t create_axis_matrices (int type); */ #include "global.h" #include "glview.h" extern object_3d * draw_sphere (int quality); extern object_3d * draw_cylinder (int quality, float ra, float rb); extern object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); extern void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); extern void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha); extern void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta); extern void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha); extern void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc); extern float poly_alpha; extern vec3_t centroid; extern void clean_labels (int id); extern ColRGBA pcol; extern float extra; float arrow_length; float axis_size; float axis_radius; float arrow_base; float label_pos; /*! \fn ColRGBA color_axis (int id) \brief get axis color \param id axis x (0), y(1) or z(2) */ ColRGBA color_axis (int id) { if (plot -> axis_color != NULL) { return plot -> axis_color[id]; } else { ColRGBA col; col.red = (id == 2) ? 1.0: 0.0; col.green = (id == 1) ? 1.0: 0.0; col.blue = (id == 0) ? 1.0: 0.0; col.alpha = 1.0; return col; } } /*! \fn mat4_t create_axis_matrices (int type) \brief create axis OpenGL rendering matrices \param type axis type (standard: 0, atom edition viewer axis: 1) */ mat4_t create_axis_matrices (int type) { GLfloat x, y, z; float from_edge = 50.0; vec3_t win_coord; GLfloat sx = (GLfloat)wingl -> pixels[0]; GLfloat sy = (GLfloat)wingl -> pixels[1]; mat4_t axis_projection_matrix; mat4_t axis_model_matrix; mat4_t axis_view_matrix; mat4_t axis_model_view_matrix; if (plot -> axispos == CENTER) { x = y = 0.0; if (plot -> rep == ORTHOGRAPHIC) { x = 0.5 * sx; y = 0.5 * sy; } axis_projection_matrix = wingl -> proj_model_matrix; } else { axis_projection_matrix = m4_ortho (plot -> gleft, plot -> gright, plot -> gbottom, plot -> gtop, -plot -> gfar, plot -> gfar); if (plot -> axispos == TOP_RIGHT) { x = sx - from_edge; y = from_edge; } else if (plot -> axispos == TOP_LEFT) { x = from_edge; y = from_edge; } else if (plot -> axispos == BOTTOM_RIGHT) { x = sx - from_edge; y = sy - from_edge; } else if (plot -> axispos == BOTTOM_LEFT) { x = from_edge; y = sy - from_edge; } else if (plot -> axispos == CUSTOM) { // Custom position x = plot -> axis_pos[0] * sx / 100.0; y = plot -> axis_pos[1] * sy / 100.0; } } z = 0.0; win_coord = v3_un_project (vec3(x, y, z), wingl -> view_port, axis_projection_matrix); win_coord.z = 1.0; //print_axis_matrices (win_coord); if (type == 0) { axis_view_matrix = wingl -> view_matrix; } else { axis_view_matrix = wingl -> model_matrix; } axis_model_matrix = m4_translation (win_coord); axis_model_view_matrix = m4_mul (axis_model_matrix, axis_view_matrix); return m4_mul (axis_projection_matrix, axis_model_view_matrix); } /*! \fn void setup_arrow (float * vert, vec3_t a, vec3_t b, vec3_t c, vec3_t d, vec3_t e) \brief setup axis 3D arrow rendering data \param vert the OpenGL buffer data to fill \param a position vector a \param b position vector b \param c position vector c \param d position vector d \param e position vector e */ void setup_arrow (float * vert, vec3_t a, vec3_t b, vec3_t c, vec3_t d, vec3_t e) { setup_triangles (vert, a, b, c); setup_triangles (vert, a, c, d); setup_triangles (vert, a, d, e); setup_triangles (vert, a, e, b); setup_triangles (vert, b, c, d); setup_triangles (vert, b, d, e); } /*! \fn void init_axis_param () \brief initialize axis rendering parameters */ void init_axis_param () { arrow_length = 0.5; axis_size = plot -> axis_length; axis_radius = plot -> box_axis_rad[AXIS]; arrow_base = 0.1; label_pos = 0.2; if (plot -> rep == PERSPECTIVE && plot -> axispos != CENTER) { arrow_base /= (plot -> p_depth / plot -> gnear); arrow_length /= (plot -> p_depth / plot -> gnear); axis_radius /= (plot -> p_depth / plot -> gnear); axis_size /= (plot -> p_depth / plot -> gnear); label_pos /= (plot -> p_depth / plot -> gnear); } } /*! \fn void prepare_axis_data (float * vert_a, float * vert_b, float * vert_c) \brief prepare axis OpenGL rendering data buffer \param vert_a OpenGL buffer data to fill \param vert_b OpenGL buffer data to fill \param vert_c OpenGL buffer data to fill */ void prepare_axis_data (float * vert_a, float * vert_b, float * vert_c) { init_axis_param (); poly_alpha = 1.0; vec3_t a, b, c, d, e; float sa; nbs = nbl = nba = 0; int i; for (i=0; i<3; i++) { pcol = color_axis (i); a = vec3(0.0, 0.0, 0.0); b = vec3((i==0)? axis_size-arrow_length : 0.0, (i==1)? axis_size-arrow_length : 0.0, (i==2)? axis_size-arrow_length : 0.0); if (plot -> box_axis[AXIS] == WIREFRAME) { setup_line_vertice (vert_a, a, pcol, 1.0); setup_line_vertice (vert_a, b, pcol, 1.0); a = vec3((i==0)? axis_size : 0.0, (i==1)? axis_size : 0.0, (i==2)? axis_size : 0.0); sa = (i == 2) ? -1.0 : 1.0; b = vec3((i==0)? axis_size-arrow_length : -arrow_base, (i==1)? axis_size-arrow_length : -sa*arrow_base, (i==2)? axis_size-arrow_length : arrow_base); c = vec3((i==0)? axis_size-arrow_length : -arrow_base, (i==1)? axis_size-arrow_length : -arrow_base, (i==2)? axis_size-arrow_length : -arrow_base); d = vec3((i==0)? axis_size-arrow_length : arrow_base, (i==1)? axis_size-arrow_length : sa*arrow_base, (i==2)? axis_size-arrow_length : -arrow_base); e = vec3((i==0)? axis_size-arrow_length : arrow_base, (i==1)? axis_size-arrow_length : arrow_base, (i==2)? axis_size-arrow_length : arrow_base); centroid = v3_add (a, v3_add(b, v3_add(c, v3_add(d, e)))); centroid = v3_divs (centroid, 5.0); setup_arrow (vert_b, a, b, c, d, e); } else { setup_cylinder_vertice (vert_a, a, b, pcol, axis_radius, 1.0, 0.0); c = vec3((i==0)? axis_size : 0.0, (i==1)? axis_size : 0.0, (i==2)? axis_size : 0.0); nbs --; setup_cylinder_vertice (vert_b, c, b, pcol, axis_radius+arrow_base, 1.0, 0.0); nbs --; setup_cap_vertice (vert_c, c, b, pcol, axis_radius+arrow_base, 1.0); } } } /*! \fn int create_axis_lists () \brief prepare axis OpenGL rendering */ int create_axis_lists () { vec3_t pos; float shift[3]={0.0, 0.0, 0.0}; int nshaders = 0; object_3d * axis_a, * axis_b, * axis_c, * axis_d; cleaning_shaders (wingl, MAXIS); wingl -> create_shaders[MAXIS] = FALSE; if (plot -> box_axis[AXIS] == NONE) return nshaders; if (plot -> box_axis[AXIS] == WIREFRAME) { axis_a = g_malloc0 (sizeof*axis_a); axis_a -> vert_buffer_size = LINE_BUFF_SIZE; axis_a -> num_vertices = 3*2; axis_a -> vertices = allocfloat (axis_a -> vert_buffer_size*axis_a -> num_vertices); axis_b = g_malloc0 (sizeof*axis_b); axis_b -> vert_buffer_size = POLY_BUFF_SIZE; axis_b -> num_vertices = 3*6*9; axis_b -> vertices = allocfloat (axis_b -> vert_buffer_size*axis_b -> num_vertices); } else { axis_a = draw_cylinder (plot -> quality, 1.0, 1.0); axis_a -> num_instances = 3; axis_a -> inst_buffer_size = CYLI_BUFF_SIZE; axis_a -> instances = allocfloat (axis_a -> num_instances*CYLI_BUFF_SIZE); axis_b = draw_cylinder (plot -> quality, 0.0, 1.0); axis_b -> num_instances = 3; axis_b -> inst_buffer_size = CYLI_BUFF_SIZE; axis_b -> instances = allocfloat (axis_b -> num_instances*CYLI_BUFF_SIZE); axis_c = draw_cylinder_cap (plot -> quality, 1.0, FALSE); axis_c -> num_instances = 3; axis_c -> inst_buffer_size = CAPS_BUFF_SIZE; axis_c -> instances = allocfloat (CAPS_BUFF_SIZE*axis_c -> num_instances); axis_d = draw_sphere (plot -> quality); axis_d -> num_instances = 1; axis_d -> inst_buffer_size = ATOM_BUFF_SIZE; axis_d -> instances = allocfloat (ATOM_BUFF_SIZE); } nshaders = (plot -> box_axis[AXIS] == WIREFRAME) ? 2 : 4; prepare_axis_data ((plot -> box_axis[AXIS] == WIREFRAME) ? axis_a -> vertices : axis_a -> instances, (plot -> box_axis[AXIS] == WIREFRAME) ? axis_b -> vertices : axis_b -> instances, (plot -> box_axis[AXIS] == WIREFRAME) ? NULL : axis_c -> instances); clean_labels (2); if (plot -> axis_labels) { int i; for (i=0; i<3; i++) { pos = vec3 ((i==0) ? axis_size+label_pos : 0.0, (i==1) ? axis_size+label_pos : 0.0, (i==2) ? axis_size+label_pos : 0.0); prepare_string (plot -> axis_title[i], 2, color_axis (i), pos, shift, NULL, NULL, NULL); } nshaders += (plot -> labels_render[2]+1) * (plot -> labels_list[2] -> last -> id + 1); wingl -> ogl_glsl[MAXIS][0] = g_malloc0 (nshaders*sizeof*wingl -> ogl_glsl[MAXIS][0]); render_all_strings (MAXIS, 2); } else { wingl -> ogl_glsl[MAXIS][0] = g_malloc0 (nshaders*sizeof*wingl -> ogl_glsl[MAXIS][0]); } if (plot -> box_axis[AXIS] == WIREFRAME) { // Lines wingl -> ogl_glsl[MAXIS][0][0] = init_shader_program (MAXIS, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, FALSE, axis_a); wingl -> ogl_glsl[MAXIS][0][0] -> line_width = plot -> box_axis_line[AXIS]; // Arrows wingl -> ogl_glsl[MAXIS][0][1] = init_shader_program (MAXIS, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, axis_b); } else { // Yellow sphere at (0.0, 0.0, 0.0) pcol.red = pcol.green = 1.0; pcol.blue = 0.0; pcol.alpha = 1.0; setup_sphere_vertice (axis_d -> instances, vec3(0.0,0.0,0.0), pcol, axis_radius, 1.0); wingl -> ogl_glsl[MAXIS][0][0] = init_shader_program (MAXIS, GLSL_SPHERES, sphere_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 4, 1, TRUE, axis_d); // Cylinders wingl -> ogl_glsl[MAXIS][0][1] = init_shader_program (MAXIS, GLSL_CYLINDERS, cylinder_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 6, 1, TRUE, axis_a); // Cones wingl -> ogl_glsl[MAXIS][0][2] = init_shader_program (MAXIS, GLSL_CYLINDERS, cone_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 6, 1, TRUE, axis_b); // Cones Caps wingl -> ogl_glsl[MAXIS][0][3] = init_shader_program (MAXIS, GLSL_CAPS, cap_vertex, NULL, full_color, GL_TRIANGLE_FAN, 5, 1, TRUE, axis_c); g_free (axis_c); g_free (axis_d); } g_free (axis_a); g_free (axis_b); return nshaders; } Atomes-GNU-1.1.14/src/opengl/draw/d_bonds.c000066400000000000000000000611541457665371200202700ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file d_bonds.c * @short Functions to prepare the OpenGL rendering of bond(s) and clone bond(s) * @author Sébastien Le Roux */ /* * This file: 'd_bonds.c' * * Contains: * - The functions to prepare the OpenGL rendering of bond(s) and clone bond(s) * * List of functions: int cylinder_vertices (int qual); int cylinder_indices (int qual); int cap_vertices (int qual); int cap_indices (int qual); int find_bond_vertices (gboolean to_pick, int sty, int sa, int sb, int bi, int cap); int create_bond_lists (gboolean to_pick); float get_bond_radius (int sty, int ac, int at, int bt, int sel); void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta); void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha); void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices); void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, atom * at, atom * bt, float * vertices); void setup_all_cylinder_vertices (int style, gboolean to_pick, int cap, int bi, float * vertices); void setup_line_vertices (int style, int cap, int bi, int sa, int sb, float * vertices); vec4_t rotate_bond (vec3_t a, vec3_t b); object_3d * draw_cylinder (int quality, float ra, float rb); object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); */ #include "global.h" #include "glview.h" #include "dlp_field.h" extern ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_picked); extern vec3_t model_position; extern int nbs; /*! \fn int cylinder_vertices (int qual) \brief return the number of OpenGL vertices to render a cylinder \param qual OpenGL quality */ int cylinder_vertices (int qual) { return 2*qual; } /*! \fn int cylinder_indices (int qual) \brief return the number of OpenGL indices to render a cylinder \param qual OpenGL quality */ int cylinder_indices (int qual) { return 2*(qual + 1); } /*! \fn object_3d * draw_cylinder (int quality, float ra, float rb) \brief OpenGL 3D cylinder object rendering \param quality OpenGL quality \param ra cylinder radius at 1st side point \param rb cylinder radius at 2nd side point */ object_3d * draw_cylinder (int quality, float ra, float rb) { int i, j; object_3d * new_cylinder = g_malloc0 (sizeof*new_cylinder); new_cylinder -> quality = quality; new_cylinder -> num_vertices = cylinder_vertices (quality); new_cylinder -> vert_buffer_size = 3; new_cylinder -> vertices = allocfloat (3*new_cylinder -> num_vertices); new_cylinder -> num_indices = cylinder_indices (quality); new_cylinder -> ind_buffer_size = 1; new_cylinder -> indices = allocint (cylinder_indices (quality)); float step = 2.0 * pi / (quality-1); float x, y; j = 0; // Vertex for(i = 0; i < quality; i++) { x = cos (i*step); y = sin (i*step); new_cylinder -> vertices[j] = ra*x; new_cylinder -> vertices[j+1] = ra*y; new_cylinder -> vertices[j+2] = 0.5; j += 3; new_cylinder -> vertices[j] = rb*x; new_cylinder -> vertices[j+1] = rb*y; new_cylinder -> vertices[j+2] = -0.5; j += 3; } for (i = 0; i < 2*quality; i++) { new_cylinder -> indices[i] = i % (2*quality-2); } return new_cylinder; } /*! \fn int cap_vertices (int qual) \brief return the number of OpenGL vertices to render a cylinder cap \param qual OpenGL quality */ int cap_vertices (int qual) { return qual + 1; } /*! \fn int cap_indices (int qual) \brief return the number of OpenGL indices to render a cylinder cap \param qual OpenGL quality */ int cap_indices (int qual) { return qual + 2; } /*! \fn object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked) \brief OpenGL 3D cylinder cap object rendering \param quality OpenGL quality \param rad cylinder radius \param picked is the bond selected (1) or not (0) */ object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked) { int i, j; object_3d * new_cap = g_malloc0 (sizeof*new_cap); new_cap -> quality = quality; new_cap -> num_vertices = cap_vertices(quality); new_cap -> vert_buffer_size = 3; new_cap -> vertices = allocfloat (3*new_cap -> num_vertices); new_cap -> num_indices = cap_indices(quality); new_cap -> ind_buffer_size = 1; new_cap -> indices = allocint (new_cap -> num_indices); float delta = (picked) ? 0.05 : 0.0; float step = 2.0 * pi / (quality - 1); float x, y; j = 0; // Center new_cap -> vertices[j] = 0.0; new_cap -> vertices[j+1] = 0.0; new_cap -> vertices[j+2] = 0.0 - delta; j += 3; for(i = 0; i < quality; i++) { x = cos (i*step); y = sin (i*step); new_cap -> vertices[j] = rad*x; new_cap -> vertices[j+1] = rad*y; new_cap -> vertices[j+2] = 0.0 - delta; j += 3; } for (i=0; i <= quality; i++) { new_cap -> indices[i] = i % (quality + 1); } return new_cap; } /*! \fn vec4_t rotate_bond (vec3_t a, vec3_t b) \brief rotate a bond based on the proper orientation \param a 1st atom position \param b 2nd atom position */ vec4_t rotate_bond (vec3_t a, vec3_t b) { vec3_t c, f, raxis; c = v3_sub (vec3(b.x, b.y, b.z), vec3(a.x, a.y, a.z)); f = vec3 (0.0, 0.0, 1.0); double rangle; raxis = v3_cross (f, c); //rangle = 180.0 / pi * acos(v3_dot(f, c) / v3_length(c)); rangle = acos(v3_dot(f, c) / v3_length(c)); return axis_to_quat (raxis, rangle); } /*! \fn float get_bond_radius (int sty, int ac, int at, int bt, int sel) \brief get bond (clone bond) radius \param sty the rendering style \param ac atom (0) or clone (1) \param at 1st chemical species \param bt 2nd chemical species \param sel is the bond selected (1) or not (0) */ float get_bond_radius (int sty, int ac, int at, int bt, int sel) { if (sty == BALL_AND_STICK) { return plot -> bondrad[at][bt] + 0.05*sel; } else if (sty == CYLINDERS) { return plot -> radall[ac] + 0.05*sel; } else { return plot -> linerad[at][bt] + 4.0*sel; } } /*! \fn void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha) \brief fill the OpenGL data buffer for a line bond (or clone bond) to render \param vertices the OpenGL buffer to fill \param pos the position vector \param col the color \param alpha the opacity (atom: 1.0, clone: 0.5) */ void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha) { int s = nbs*LINE_BUFF_SIZE; vertices[s] = pos.x; vertices[s+1] = pos.y; vertices[s+2] = pos.z; vertices[s+3] = col.red; vertices[s+4] = col.green; vertices[s+5] = col.blue; vertices[s+6] = col.alpha * alpha; nbs ++; } /*! \fn void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta) \brief fill the OpenGL data buffer for a cylinder bond (or clone bond) to render \param vertices the OpenGL buffer to fill \param pos_a 1st atom position \param pos_b 2nd atom position \param col the color \param rad the radius \param alpha the opacity (atom: 1.0, clone: 0.5) \param delta radius correction(s) if atom(s) are shown */ void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta) { int s = nbs*CYLI_BUFF_SIZE; vertices[s] = (pos_a.x + pos_b.x)/2.0; vertices[s+1] = (pos_a.y + pos_b.y)/2.0; vertices[s+2] = (pos_a.z + pos_b.z)/2.0; vertices[s+3] = v3_length(v3_sub(pos_a, pos_b)) + delta; vertices[s+4] = rad; vec4_t quat = rotate_bond (pos_b, pos_a); vertices[s+5] = quat.w; vertices[s+6] = quat.x; vertices[s+7] = quat.y; vertices[s+8] = quat.z; vertices[s+9] = col.red; vertices[s+10] = col.green; vertices[s+11] = col.blue; vertices[s+12] = col.alpha * alpha; nbs ++; } /*! \fn void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha) \brief fill the OpenGL data buffer for a cylinder cap bond (or clone bond) to render \param vertices the OpenGL buffer to fill \param pos_a the position vector \param pos_b the rotation vector \param col the color \param rad the radius \param alpha the opacity (atom: 1.0, clone: 0.5) */ void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha) { int s = nbs*CAPS_BUFF_SIZE; vertices[s] = pos_b.x; vertices[s+1] = pos_b.y; vertices[s+2] = pos_b.z; vertices[s+3] = rad; vec4_t quat = rotate_bond (pos_b, pos_a); vertices[s+4] = quat.w; vertices[s+5] = quat.x; vertices[s+6] = quat.y; vertices[s+7] = quat.z; vertices[s+8] = col.red; vertices[s+9] = col.green; vertices[s+10] = col.blue; vertices[s+11] = col.alpha * alpha; nbs ++; } int vs_bid; /*! \fn void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices) \brief prepare the OpenGL rendering data of a bond / clone bond \param sty rendering style \param to_pick to pick (1) or to draw (0) \param picked is the bond selected (1) or not (0) \param cap draw cylinder cap (1/0) \param bi atom (0) or clone (1) visible \param pi atom (0) or clone (1) picked \param at 1st atom \param bt 2nd atom \param al the opacity (bond: 1.0, clone bond: 0.5) \param vertices the OpenGL buffer data to fill */ void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices) { float alpha = 1.0; float delta = 0.0; float shift[3]; int p, q, r; vec3_t pos_a, pos_b; ColRGBA col = get_atom_color (at -> sp, at -> id, 1.0, (picked) ? pi + 1 : 0, to_pick); float rad = get_bond_radius ((to_pick) ? BALL_AND_STICK : (sty == NONE) ? plot -> style : sty, bi, at -> sp, bt -> sp, (picked) ? 1.0 : 0.0); if (! cap && picked) { gboolean show_a, show_b; int sta, stb; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[bt -> id].show[bi]; show_b = plot -> at_data[bt -> id].pick[pi]; sta = plot -> at_data[at -> id].style; stb = plot -> at_data[bt -> id].style; } else { show_a = bt -> show[bi]; show_b = bt -> pick[pi]; sta = at -> style; stb = bt -> style; } delta = ((show_a && show_b) && (sta == stb)) ? 0.0 : 0.1; } for (p=0; p extra_cell[0]+1;p++) { for (q=0; q extra_cell[1]+1; q++) { for (r=0; r extra_cell[2]+1; r++) { shift[0]=p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift[1]=p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift[2]=p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; at_shift (at, shift); at_shift (bt, shift); pos_a = vec3(at -> x, at -> y, at -> z); pos_b = vec3((at -> x + bt -> x)/2.0, (at -> y + bt -> y)/2.0, (at -> z + bt -> z)/2.0); if (to_pick || ((sty == NONE && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || sty == BALL_AND_STICK || sty == CYLINDERS)) { if (cap) { setup_cap_vertice (vertices, pos_a, pos_b, col, rad, alpha * al); } else { setup_cylinder_vertice (vertices, pos_a, pos_b, col, rad, (to_pick) ? 1.0 : alpha*al, delta); } } else { setup_line_vertice (vertices, pos_a, col, alpha*al); setup_line_vertice (vertices, pos_b, col, alpha*al); } at_unshift (at, shift); at_unshift (bt, shift); alpha = 0.5; } } } } /*! \fn void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, atom * at, atom * bt, float * vertices) \brief prepare a bond OpenGL rendering \param sty rendering style \param to_pick to pick (1) or to draw (0) \param picked is the atom selected (1) or not (0) \param cap draw cylinder cap \param bi atom (0) or clone (1) visible \param pi atom (0) or clone (1) picked \param bid bond id \param at 1st atom \param bt 2nd atom \param vertices the OpenGL buffer data to fill */ void prepare_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, int bid, atom * at, atom * bt, float * vertices) { if (bi == 0) { setup_this_bond (sty, to_pick, picked, cap, bi, pi, at, bt, 1.0, vertices); } else { atom * tmp_a, * tmp_b; float x, y, z; int sign; sign = 1; if (wingl -> bondid[step][1][bid][0] == at -> id) sign = -1; x = wingl -> clones[step][bid].x; y = wingl -> clones[step][bid].y; z = wingl -> clones[step][bid].z; tmp_a = duplicate_atom (at); tmp_b = duplicate_atom (at); tmp_a -> pick[pi] = bt -> pick[pi]; tmp_a -> style = bt -> style; tmp_a -> sp = bt -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> x += sign * x; tmp_a -> y += sign * y; tmp_a -> z += sign * z; setup_this_bond (sty, to_pick, picked, cap, bi, pi, tmp_b, tmp_a, 0.5, vertices); g_free (tmp_a); g_free (tmp_b); tmp_a = duplicate_atom (bt); tmp_b = duplicate_atom (bt); tmp_a -> pick[pi] = at -> pick[pi]; tmp_a -> style = at -> style; tmp_a -> sp = at -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> id = at -> id; tmp_a -> x -= sign * x; tmp_a -> y -= sign * y; tmp_a -> z -= sign * z; setup_this_bond (sty, to_pick, picked, cap, bi, pi, tmp_a, tmp_b, 0.5, vertices); g_free (tmp_a); g_free (tmp_b); } } /*! \fn int find_bond_vertices (gboolean to_pick, int sty, int sa, int sb, int bi, int cap) \brief find bond(s) and clone bond(s) to render \param to_pick to pick (1) or to draw (0) \param sty rendering style \param sa 1st chemical species \param sb 2nd chemical species \param bi bond (0) or clone bond (1) \param cap draw cylinder cap (1/0) */ int find_bond_vertices (gboolean to_pick, int sty, int sa, int sb, int bi, int cap) { int i, j, k, l, m, n; gboolean show_a, show_b; l = 0; for (i=0; i < wingl -> bonds[step][bi]; i++) { j = wingl -> bondid[step][bi][i][0]; k = wingl -> bondid[step][bi][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[j].show[bi]; m = plot -> at_data[j].style; show_b = plot -> at_data[k].show[bi]; n = plot -> at_data[k].style; } else { show_a = proj_gl -> atoms[step][j].show[bi]; m = proj_gl -> atoms[step][j].style; show_b = proj_gl -> atoms[step][k].show[bi]; n = proj_gl -> atoms[step][k].style; } if (proj_gl -> atoms[step][j].sp == sa && proj_gl -> atoms[step][k].sp == sb) { if (show_a && (m == sty || to_pick)) { if (cap) { if (! show_b || n != sty) l += 1 + bi; } else { l += 1 + bi; } } } if (proj_gl -> atoms[step][j].sp == sb && proj_gl -> atoms[step][k].sp == sa) { if (show_b && (n == sty || to_pick)) { if (cap) { if (! show_a || m != sty) l += 1 + bi; } else { l += 1 + bi; } } } } return 2*l; } /*! \fn void setup_all_cylinder_vertices (int style, gboolean to_pick, int cap, int bi, float * vertices) \brief prepare cylinder bond(s) and clone bond(s) to render \param style rendering style \param to_pick to pick (1) or to draw (0) \param cap draw cylinder cap (1/0) \param bi bond (0) or clone bond (1) \param vertices the OpenGL data buffer to fill */ void setup_all_cylinder_vertices (int style, gboolean to_pick, int cap, int bi, float * vertices) { int i, j, k, l, m; gboolean show_a, show_b; for (i=0; i < wingl -> bonds[step][bi]; i++) { j = wingl -> bondid[step][bi][i][0]; k = wingl -> bondid[step][bi][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[j].show[bi]; l = plot -> at_data[j].style; show_b = plot -> at_data[k].show[bi]; m = plot -> at_data[k].style;; } else { show_a = proj_gl -> atoms[step][j].show[bi]; l = proj_gl -> atoms[step][j].style; show_b = proj_gl -> atoms[step][k].show[bi]; m = proj_gl -> atoms[step][k].style; } if (show_a && (l == style || to_pick)) { if (cap) { if (! show_b || m != style) prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][j], & proj_gl -> atoms[step][k], vertices); } else { prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][j], & proj_gl -> atoms[step][k], vertices); } } if (show_b && (m == style || to_pick)) { if (cap) { if (! show_a || l != style) prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][k], & proj_gl -> atoms[step][j], vertices); } else { prepare_bond (style, to_pick, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][k], & proj_gl -> atoms[step][j], vertices); } } } } /*! \fn void setup_line_vertices (int style, int cap, int bi, int sa, int sb, float * vertices) \brief prepare line bond(s) and clone bond(s) to render \param style rendering style \param cap draw cylinder cap (1/0) \param bi bond (0) or clone bond (1) \param sa 1st chemical species \param sb 2nd chemical species \param vertices the OpenGL buffer to fill */ void setup_line_vertices (int style, int cap, int bi, int sa, int sb, float * vertices) { int i, j, k, l, m; gboolean show_a, show_b; for (i=0; i < wingl -> bonds[step][bi]; i++) { j = wingl -> bondid[step][bi][i][0]; k = wingl -> bondid[step][bi][i][1]; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[j].show[bi]; l = plot -> at_data[j].style; show_b = plot -> at_data[k].show[bi]; m = plot -> at_data[k].style; } else { show_a = proj_gl -> atoms[step][j].show[bi]; l = proj_gl -> atoms[step][j].style; show_b = proj_gl -> atoms[step][k].show[bi]; m = proj_gl -> atoms[step][k].style; } if (proj_gl -> atoms[step][j].sp == sa && proj_gl -> atoms[step][k].sp == sb) { if (show_a && l == style) { prepare_bond (style, FALSE, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][j], & proj_gl -> atoms[step][k], vertices); } } if (proj_gl -> atoms[step][j].sp == sb && proj_gl -> atoms[step][k].sp == sa) { if (show_b && m == style) { prepare_bond (style, FALSE, FALSE, cap, bi, 0, i, & proj_gl -> atoms[step][k], & proj_gl -> atoms[step][j], vertices); } } } } /*! \fn int create_bond_lists (gboolean to_pick) \brief prepare bond(s) and clone bond(s) OpenGL rendering \param to_pick to pick (1) or to draw (0) */ int create_bond_lists (gboolean to_pick) { int nshaders = 0; int **** nbonds; int **** ncaps; int nbds[7]; int ncap[7]; object_3d * cyl, * cap; int f, g, h, i, j, k, l, m; if (! to_pick) { cleaning_shaders (wingl, BONDS); wingl -> create_shaders[BONDS] = FALSE; } g = (plot -> draw_clones) ? 2 : 1; nbonds = allocqint (NUM_STYLES, g, proj_sp, proj_sp); if (! to_pick) ncaps = allocqint (NUM_STYLES, g, proj_sp, proj_sp); for (f=0; f style != SPHERES && plot -> style != PUNT)) || (f && f-1 != SPHERES && f-1 != PUNT)) { for (h=0; h 0) l ++; if (! to_pick && ((! f && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || (f && (f-1 == BALL_AND_STICK || f-1 == CYLINDERS)))) { ncaps[f][h][i][j] = find_bond_vertices (to_pick, f-1, i, j, h, 1); m += ncaps[f][h][i][j]; } } } } nbds[f] = k; ncap[f] = m; if (to_pick || (((! f && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || (f && (f-1 == BALL_AND_STICK || f-1 == CYLINDERS))))) { if (k > 0) { nshaders ++; if (m > 0 && ! to_pick) nshaders ++; } } else { nshaders += l; } } if (to_pick) break; } #ifdef DEBUG g_debug ("Bond LIST:: to_pick= %s, shaders= %d", (to_pick) ? "true" : "false", nshaders); #endif if (nshaders == 0) return nshaders; if (! to_pick) wingl -> ogl_glsl[BONDS][step] = g_malloc0 (nshaders*sizeof*wingl -> ogl_glsl[BONDS][step]); l = 0; for (f=0; f style == BALL_AND_STICK || plot -> style == CYLINDERS)) || (f && (f-1 == BALL_AND_STICK || f-1 == CYLINDERS))) { cyl = draw_cylinder (plot -> quality, 1.0, 1.0); cyl -> num_instances = (nbds[f]/2) * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); cyl -> inst_buffer_size = CYLI_BUFF_SIZE; cyl -> instances = allocfloat (CYLI_BUFF_SIZE*cyl -> num_instances); nbs = 0; for (h=0; h instances); if (to_pick && h==0) wingl -> bonds_to_be_picked = wingl -> to_be_picked; } if (! to_pick) { wingl -> ogl_glsl[BONDS][step][l] = init_shader_program (BONDS, GLSL_CYLINDERS, cylinder_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 6, 1, TRUE, cyl); g_free (cyl); l ++; if (ncap[f] > 0) { cap = draw_cylinder_cap (plot -> quality, 1.0, FALSE); cap -> num_instances = (ncap[f]/2) * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); cap -> inst_buffer_size = CAPS_BUFF_SIZE; cap -> instances = allocfloat (CAPS_BUFF_SIZE*cap -> num_instances); nbs = 0; for (h=0; h instances); } wingl -> ogl_glsl[BONDS][step][l] = init_shader_program (BONDS, GLSL_CAPS, cap_vertex, NULL, full_color, GL_TRIANGLE_FAN, 5, 1, TRUE, cap); g_free (cap); l ++; } } else { wingl -> ogl_glsl[PICKS][0][1] = init_shader_program (PICKS, GLSL_CYLINDERS, cylinder_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 6, 1, FALSE, cyl); g_free (cyl); } } else if ((! f && (plot -> style != SPHERES && plot -> style != PUNT)) || (f && f-1 != SPHERES && f-1 != PUNT)) { for (h=0; h vert_buffer_size = LINE_BUFF_SIZE; cyl -> num_vertices = nbonds[f][h][i][j] * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); cyl -> vertices = allocfloat (cyl -> vert_buffer_size*cyl -> num_vertices); nbs = 0; setup_line_vertices (f-1, 0, h, i, j, cyl -> vertices); wingl -> ogl_glsl[BONDS][step][l] = init_shader_program (BONDS, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, FALSE, cyl); wingl -> ogl_glsl[BONDS][step][l] -> line_width = get_bond_radius (WIREFRAME, h, i+proj_sp*h, j+proj_sp*h, FALSE); g_free (cyl); l++; } } } } } } if (to_pick) break; } g_free (nbonds); if (! to_pick) g_free (ncaps); return nshaders; } Atomes-GNU-1.1.14/src/opengl/draw/d_box.c000066400000000000000000001076351457665371200177600ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file d_box.c * @short Functions to prepare the OpenGL rendering for the box(es) \n Functions to prepare the OpenGL rendering for the slab(s) \n Functions to prepare the OpenGL rendering for the volume(s) * @author Sébastien Le Roux */ /* * This file: 'd_box.c' * * Contains: * - The functions to prepare the OpenGL rendering for the box(es) - The functions to prepare the OpenGL rendering for the slab(s) - The functions to prepare the OpenGL rendering for the volume(s) * * List of functions: int create_box_lists (); double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha); gboolean are_identical_vec3 (vec3_t va, vec3_t vb); gboolean not_in_already (vec3_t a, vec3_t b, float * vertices); gboolean not_in_corners (vec3_t a, float * vertices); void setup_extra_box_vertices (vec3_t a, vec3_t b, int id, float * c_vert, float * s_vert); void setup_box_vertices (vec3_t ax, vec3_t bx, int id, float * c_vert, float * s_vert); void prepare_box_vertices (void (*c_func)(vec3_t, vec3_t, int, float *, float *), float * verts, float * serts, int id); void prepare_cuboid (vec3_t position, int id); void create_light_lists (); void cuboid_slab (mat4_t rot); void cylinder_slab (mat4_t rot); void spherical_slab (); void create_slab_lists (project * this_proj); void create_volumes_lists (); */ #include "global.h" #include "glview.h" extern object_3d * draw_sphere (int quality); extern object_3d * draw_cylinder (int quality, float ra, float rb); extern object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); extern void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); extern void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha); extern void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha, float delta); extern void setup_cap_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha); extern void create_slab_info (project * this_proj); extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); extern ColRGBA pcol; int BOX_BUFF_SIZE; /*! \fn gboolean are_identical_vec3 (vec3_t va, vec3_t vb) \brief are these 2 vectors indentical \param va 1st vector \param vb 2nd vector */ gboolean are_identical_vec3 (vec3_t va, vec3_t vb) { if (va.x == vb.x && va.y == vb.y && va.z == vb.z) { return TRUE; } else { return FALSE; } } /*! \fn gboolean not_in_already (vec3_t a, vec3_t b, float * vertices) \brief is this box edge vector already saved ? \param a 1st set of coordinates \param b 2nd set of coordinates \param vertices the data buffer to check */ gboolean not_in_already (vec3_t a, vec3_t b, float * vertices) { int i, j, k; vec3_t tma, tmb; for (i=0; i extra_cell[0]+1; p++) { for (q=0; q extra_cell[1]+1; q++) { for (r=0; r extra_cell[2]+1; r++) { if (p > 0 || q > 0 || r > 0) { shift.x = p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift.y = p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift.z = p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; t_a = v3_add (v3_muls (a, j), shift); t_b = v3_add (v3_muls (b, j), shift); if (not_in_already (t_a, t_b, c_vert)) { if (plot -> box_axis[BOX] == WIREFRAME) { setup_line_vertice (c_vert, t_a, pcol, 0.5); setup_line_vertice (c_vert, t_b, pcol, 0.5); } else { if (not_in_corners(t_a, s_vert)) setup_sphere_vertice (s_vert, t_a, pcol, plot -> box_axis_rad[BOX], pcol.alpha*0.5); if (not_in_corners(t_b, s_vert)) setup_sphere_vertice (s_vert, t_b, pcol, plot -> box_axis_rad[BOX], pcol.alpha*0.5); setup_cylinder_vertice (c_vert, t_a, t_b, pcol, plot -> box_axis_rad[BOX], 0.5, 0.0); } } } } } } } } /*! \fn void setup_box_vertices (vec3_t ax, vec3_t bx, float * c_vert, float * s_vert) \brief prepare the unit cell OpenGL rendering \param ax 1st point coordinates \param bx 2nd point coordinates \param c_vert OpenGL cylinder/line data buffer to fill \param s_vert OpenGL sphere data buffer to fill, or NULL */ void setup_box_vertices (vec3_t ax, vec3_t bx, float * c_vert, float * s_vert) { float j; vec3_t a, b; /*vec3_t cell[3]; int i; for (i=0; i<3; i++) { cell[i] = vec3(box_gl -> vect[i][0], box_gl -> vect[i][1], box_gl -> vect[i][2]); cell[i] = v3_divs (cell[i], 2.0); } vec3_t lattice = v3_add(v3_add(cell[0], cell[1]), cell[2]);*/ for (j=-1.0; j<2.0; j=j+2.0) { /*a = v3_sub (v3_muls (ax, j), lattice); b = v3_sub (v3_muls (bx, j), lattice);*/ a = v3_muls (ax, j); b = v3_muls (bx, j); if (plot -> box_axis[BOX] == WIREFRAME) { setup_line_vertice (c_vert, a, pcol, 1.0); setup_line_vertice (c_vert, b, pcol, 1.0); } else { if (not_in_corners(a, s_vert)) setup_sphere_vertice (s_vert, a, pcol, plot -> box_axis_rad[BOX], pcol.alpha*1.0); if (not_in_corners(b, s_vert)) setup_sphere_vertice (s_vert, b, pcol, plot -> box_axis_rad[BOX], pcol.alpha*1.0); setup_cylinder_vertice (c_vert, a, b, pcol, plot -> box_axis_rad[BOX], 1.0, 0.0); } } } /*! \fn void prepare_box_vertices (void (*c_func)(vec3_t, vec3_t, float *, float *), float * verts, float * serts) \brief prepare a box OpenGL rendering \param c_func the function to use a render \param verts OpenGL cylinder/line data buffer to fill \param serts OpenGL sphere data buffer to fill, or NULL */ void prepare_box_vertices (void (*c_func)(vec3_t, vec3_t, float *, float *), float * verts, float * serts) { int i; vec3_t pa, pb; for (i=-1; i<2; i=i+2) { pa.x = (- box_gl -> vect[0][0] - box_gl -> vect[1][0] + i * box_gl -> vect[2][0]) / 2.0; pa.y = (- box_gl -> vect[0][1] - box_gl -> vect[1][1] + i * box_gl -> vect[2][1]) / 2.0; pa.z = (- box_gl -> vect[0][2] - box_gl -> vect[1][2] + i * box_gl -> vect[2][2]) / 2.0; pb.x = (box_gl -> vect[0][0] - box_gl -> vect[1][0] + i * box_gl -> vect[2][0]) / 2.0; pb.y = (box_gl -> vect[0][1] - box_gl -> vect[1][1] + i * box_gl -> vect[2][1]) / 2.0; pb.z = (box_gl -> vect[0][2] - box_gl -> vect[1][2] + i * box_gl -> vect[2][2]) / 2.0; (* c_func)(pa, pb, verts, serts); pa.x = (i * box_gl -> vect[0][0] - box_gl -> vect[1][0] + box_gl -> vect[2][0]) / 2.0; pa.y = (i * box_gl -> vect[0][1] - box_gl -> vect[1][1] + box_gl -> vect[2][1]) / 2.0; pa.z = (i * box_gl -> vect[0][2] - box_gl -> vect[1][2] + box_gl -> vect[2][2]) / 2.0; pb.x = (i * box_gl -> vect[0][0] - box_gl -> vect[1][0] - box_gl -> vect[2][0]) / 2.0; pb.y = (i * box_gl -> vect[0][1] - box_gl -> vect[1][1] - box_gl -> vect[2][1]) / 2.0; pb.z = (i * box_gl -> vect[0][2] - box_gl -> vect[1][2] - box_gl -> vect[2][2]) / 2.0; (* c_func)(pa, pb, verts, serts); pa.x = (i * box_gl -> vect[0][0] + box_gl -> vect[1][0] + box_gl -> vect[2][0]) / 2.0; pa.y = (i * box_gl -> vect[0][1] + box_gl -> vect[1][1] + box_gl -> vect[2][1]) / 2.0; pa.z = (i * box_gl -> vect[0][2] + box_gl -> vect[1][2] + box_gl -> vect[2][2]) / 2.0; pb.x = (i * box_gl -> vect[0][0] - box_gl -> vect[1][0] + box_gl -> vect[2][0]) / 2.0; pb.y = (i * box_gl -> vect[0][1] - box_gl -> vect[1][1] + box_gl -> vect[2][1]) / 2.0; pb.z = (i * box_gl -> vect[0][2] - box_gl -> vect[1][2] + box_gl -> vect[2][2]) / 2.0; (* c_func)(pa, pb, verts, serts); } } /*! \fn int create_box_lists () \brief prepare box OpenGL rendering */ int create_box_lists () { int vertex = 8; object_3d * box_a, * box_b; cleaning_shaders (wingl, MDBOX); wingl -> create_shaders[MDBOX] = FALSE; if (plot -> box_axis[BOX] == NONE) return 0; int shaders; vertex *= (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); if (plot -> box_axis[BOX] == WIREFRAME) { shaders = 1; BOX_BUFF_SIZE = LINE_BUFF_SIZE; box_b = g_malloc0 (sizeof*box_b); box_b -> vert_buffer_size = LINE_BUFF_SIZE; box_b -> num_vertices = vertex*3; box_b -> vertices = allocfloat (box_b -> vert_buffer_size*box_b -> num_vertices); } else { shaders = 2; BOX_BUFF_SIZE = CYLI_BUFF_SIZE; // Spheres at corners box_a = draw_sphere (plot -> quality); box_a -> num_instances = 3*vertex*3/2; box_a -> inst_buffer_size = ATOM_BUFF_SIZE; box_a -> instances = allocfloat (box_a -> num_instances*ATOM_BUFF_SIZE); // Cylinders box_b = draw_cylinder (plot -> quality, 1.0, 1.0); box_b -> num_instances = 3*vertex; box_b -> inst_buffer_size = CYLI_BUFF_SIZE; box_b -> instances = allocfloat (box_b -> num_instances*CYLI_BUFF_SIZE); } wingl -> ogl_glsl[MDBOX][0] = g_malloc0 (shaders*sizeof*wingl -> ogl_glsl[MDBOX][0]); nbs = nbl = 0; pcol = plot -> box_color; prepare_box_vertices (setup_box_vertices, (plot -> box_axis[BOX] == WIREFRAME) ? box_b -> vertices: box_b -> instances, (plot -> box_axis[BOX] == WIREFRAME) ? NULL : box_a -> instances); if (plot -> extra_cell[0] > 0 || plot -> extra_cell[1] > 0 || plot -> extra_cell[2] > 0) { prepare_box_vertices (setup_extra_box_vertices, (plot -> box_axis[BOX] == WIREFRAME) ? box_b -> vertices: box_b -> instances, (plot -> box_axis[BOX] == WIREFRAME) ? NULL : box_a -> instances); } if (plot -> box_axis[BOX] == WIREFRAME) { wingl -> ogl_glsl[MDBOX][0][0] = init_shader_program (MDBOX, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, FALSE, box_b); wingl -> ogl_glsl[MDBOX][0][0] -> line_width = plot -> box_axis_line[BOX]; } else { // Sphere at corners wingl -> ogl_glsl[MDBOX][0][0] = init_shader_program (MDBOX, GLSL_SPHERES, sphere_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 4, 1, TRUE, box_a); g_free (box_a); // Cylinders wingl -> ogl_glsl[MDBOX][0][1] = init_shader_program (MDBOX, GLSL_CYLINDERS, cylinder_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 6, 1, TRUE, box_b); } g_free (box_b); return shaders; } /*vec3_t center; / * * void setup_cuboid_vertices (vec3_t a, vec3_t b, int id) \brief NOT USED ! \param a \param b \param id * / void setup_cuboid_vertices (vec3_t a, vec3_t b, int id) { float j; for (j=-1.0; j<2.0; j=j+2.0) { box_axis_vertices (wingl -> d_vertices[LIGHT][id], -1, 0.0, v3_muls (v3_add(a,center), j)); box_axis_vertices (wingl -> d_vertices[LIGHT][id], -1, 0.0, v3_muls (v3_add(b,center), j)); } }*/ GLfloat cuboid_vertices[] = { // Positions // Normals -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, -1.0f, 0.0f, 0.0f, -1.0f, -1.0f, 1.0f, -1.0f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, -1.0f, 1.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, -1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, 1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, -1.0f, -1.0f, 1.0f, 0.0f, -1.0f, 0.0f, -1.0f, -1.0f, -1.0f, 0.0f, -1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, 1.0f, 0.0f, 1.0f, 0.0f, -1.0f, 1.0f, -1.0f, 0.0f, 1.0f, 0.0f, }; /*! \fn void prepare_cuboid (vec3_t position, int id) \brief OpenGL 3D light object rendering \param position light position \param id shader number */ void prepare_cuboid (vec3_t position, int id) { float lgt = 1.0; object_3d * light = g_malloc0 (sizeof*light); light -> vert_buffer_size = POLY_BUFF_SIZE; light -> num_vertices = 36; light -> vertices = allocfloat (light -> vert_buffer_size*light -> num_vertices); int i, j, k, l; l = 0; for (i=0; i<36; i++) { j = 10*l; k = 6*l; light -> vertices[j] = lgt*cuboid_vertices[k]*0.5 + position.x; light -> vertices[j+1] = lgt*cuboid_vertices[k+1]*0.5 + position.y; light -> vertices[j+2] = lgt*cuboid_vertices[k+2]*0.5 + position.z; light -> vertices[j+3] = cuboid_vertices[k+3]; light -> vertices[j+4] = cuboid_vertices[k+4]; light -> vertices[j+5] = cuboid_vertices[k+5]; light -> vertices[j+6] = 1.0; light -> vertices[j+7] = 1.0; light -> vertices[j+8] = 1.0; light -> vertices[j+9] = 1.0; l ++; } wingl -> ogl_glsl[LIGHT][0][id] = init_shader_program (LIGHT, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, FALSE, light); g_free (light); } /*! \fn void create_light_lists () \brief prepare light(s) OpenGL rendering */ void create_light_lists () { int i, j; j = 0; cleaning_shaders (wingl, LIGHT); for (i=0; i lights; i++) { if (plot -> l_ght[i].show) j++; } wingl -> n_shaders[LIGHT][0] = j; if (plot -> light_loc != NULL) { g_free (plot -> light_loc); plot -> light_loc = NULL; } if (j > 0) { wingl -> ogl_glsl[LIGHT][0] = g_malloc0 (wingl -> n_shaders[LIGHT][0]*sizeof*wingl -> ogl_glsl[LIGHT][0]); plot -> light_loc = allocint (j); j = 0; for (i=0; i lights; i++) { if (plot -> l_ght[i].show) { prepare_cuboid (plot -> l_ght[i].position, j); if (plot -> l_ght[i].type > 0 && plot -> l_ght[i].fix == 0) plot -> light_loc[j] = 1; j ++; } } } wingl -> create_shaders[LIGHT] = FALSE; } vec3_t get_normal (vec3_t v1, vec3_t v2, vec3_t v3) { vec3_t edge_a = v3_sub(v3, v1); vec3_t edge_b = v3_sub(v2, v1); return v3_norm (v3_cross(edge_a, edge_b)); } /*! \fn double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha) \brief draw cuboid vertices \param draw draw or not (1/0) \param SHADID shader id \param shadnum shader number \param rot rotation matrix \param cpos position of center of slab \param paral cell parameters \param col slab color \param slab_alpha slab opacity */ double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha) { int i, j, k, l, m, n, o; vec3_t pos; double cvol; double shift[3]; cvol = (paral[0][1]*paral[1][2]-paral[0][2]*paral[1][1])*paral[2][0]; cvol += (paral[0][2]*paral[1][0]-paral[0][0]*paral[1][2])*paral[2][1]; cvol += (paral[0][0]*paral[1][1]-paral[0][1]*paral[1][0])*paral[2][2]; cvol = fabs(cvol); if (draw) { object_3d * slab = g_malloc0 (sizeof*slab); slab -> vert_buffer_size = POLY_BUFF_SIZE; slab -> num_vertices = 36*(plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); slab -> vertices = allocfloat (slab -> vert_buffer_size*slab -> num_vertices); for (i=0; i<36; i++) { j = i*POLY_BUFF_SIZE; k = 6*i; for (l=0; l<3; l++) { slab -> vertices[j+l] += 0.5*(cuboid_vertices[k]*paral[0][l] + cuboid_vertices[k+1]*paral[1][l] + cuboid_vertices[k+2]*paral[2][l]); } pos = vec3 (slab -> vertices[j], slab -> vertices[j+1], slab -> vertices[j+2]); pos = m4_mul_pos (rot, pos); slab -> vertices[j] = pos.x + cpos.x; slab -> vertices[j+1] = pos.y + cpos.y; slab -> vertices[j+2] = pos.z + cpos.z; } n = 0; for (i=0; i extra_cell[0]+1; i++) { for (j=0; j extra_cell[1]+1; j++) { for (k=0; k extra_cell[2]+1; k++) { for (l=0; l<3; l++) shift[l] = i*box_gl -> vect[0][l] + j*box_gl -> vect[1][l] + k*box_gl -> vect[2][l]; for (l=0; l<36; l++) { m = POLY_BUFF_SIZE*n; for (o=0; o<3; o++) { slab -> vertices[m+o] = slab -> vertices[l*POLY_BUFF_SIZE+o] + shift[o]; if (SHADID == SLABS) { slab -> vertices[m+6+o] = (o) ? 1.0 : 0.0; } else { if (! o) slab -> vertices[m+6+o] = col.red; if (o == 1) slab -> vertices[m+6+o] = col.green; if (o == 2) slab -> vertices[m+6+o] = col.blue; } } pos = vec3 (cuboid_vertices[6*l+3], cuboid_vertices[6*l+4], cuboid_vertices[6*l+5]); pos = m4_mul_pos (rot, pos); slab -> vertices[m+3] = pos.x; slab -> vertices[m+4] = pos.y; slab -> vertices[m+5] = pos.z; slab -> vertices[m+9] = slab_alpha; n ++; } } } } wingl -> ogl_glsl[SHADID][(SHADID == SLABS) ? 0 : step][shadnum] = init_shader_program (SHADID, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, slab); g_free (slab); } return cvol; } /*! \fn void cuboid_slab (mat4_t rot) \brief prepare cuboid slab OpenGL rendering \param rot rotation matrix */ void cuboid_slab (mat4_t rot) { int i, j, k, l, m; double ang[3], cang[3], sang[3]; double paral[3][3]; double tmp; for (i=0; i<3; i++) { if (wingl -> cell_win -> cparam[i+15] == 90.0) { ang[i] = pi/2.0; sang[i] = 1.0; cang[i] = 0.0; } else { ang[i] = wingl -> cell_win -> cparam[i+15]*pi/180.0; sang[i] = sin(ang[i]); cang[i] = cos(ang[i]); } } paral[0][0] = wingl -> cell_win -> cparam[9]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = wingl -> cell_win -> cparam[10] * cang[2]; paral[1][1] = wingl -> cell_win -> cparam[10] * sang[2]; paral[1][2] = 0.0; paral[2][0] = wingl -> cell_win -> cparam[11] * cang[1]; tmp = (cang[0] - cang[1]*cang[2]) / sang[2]; paral[2][1] = wingl -> cell_win -> cparam[11] * tmp; paral[2][2] = wingl -> cell_win -> cparam[11] * sqrt(sang[1]*sang[1] - tmp*tmp); ColRGBA null; wingl -> cell_win -> slab_vol = draw_cuboid (! wingl -> cell_win -> cut_this_slab, SLABS, 0, rot, vec3(wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]), paral, null, wingl -> cell_win -> slab_alpha); vec3_t at, atc; vec3_t ps[8]; vec3_t pn[6]; vec3_t cat = vec3(wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]); l = 0; float pmax[3]; for (i=-1; i<2; i+=2) { for (j=-1; j<2; j+=2) { for (k=-1; k<2; k+=2) { ps[l].x = 0.5*(i*paral[0][0] + j*paral[1][0] + k*paral[2][0]); ps[l].y = 0.5*(i*paral[0][1] + j*paral[1][1] + k*paral[2][1]); ps[l].z = 0.5*(i*paral[0][2] + j*paral[1][2] + k*paral[2][2]); ps[l] = m4_mul_pos (rot, ps[l]); ps[l]= v3_add (ps[l], cat); if (l == 0) { pmax[0] = ps[l].x; pmax[1] = ps[l].y; pmax[2] = ps[l].z; } else { pmax[0] = max(pmax[0],ps[l].x); pmax[1] = max(pmax[1],ps[l].y); pmax[2] = max(pmax[2],ps[l].z); } l ++; } } } pn[0] = get_normal (ps[1], ps[0], ps[2]); pn[1] = get_normal (ps[1], ps[0], ps[4]); pn[2] = get_normal (ps[2], ps[0], ps[4]); pn[3] = get_normal (ps[3], ps[7], ps[5]); pn[4] = get_normal (ps[3], ps[7], ps[6]); pn[5] = get_normal (ps[5], ps[7], ps[6]); ps[0] = v3_sub (ps[0], cat); ps[7] = v3_sub (ps[7], cat); for (i=0; i nspec; i++) wingl -> cell_win -> slab_lot[i] = 0; wingl -> cell_win -> slab_atoms = 0; float val, vbl; atom slab_center; distance at_slab; slab_center.x = cat.x; slab_center.y = cat.y; slab_center.z = cat.z; for (i=0; inatomes; i++) { at_slab = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[0][i], & slab_center); at = vec3(slab_center.x+at_slab.x, slab_center.y+at_slab.y, slab_center.z+at_slab.z); if (at.x <= pmax[0] && at.y <= pmax[1] && at.z <= pmax[2]) { m = 0; atc = v3_sub (at, cat); for (j=0; j<6; j++) { k = (j < 3) ? 0 : 7; val = v3_dot (ps[k], pn[j]); vbl = v3_dot (atc, pn[j]); if (fabs(vbl) < fabs(val)) { m ++; } else { break; } } if (m == 6 && (! at_slab.pbc || wingl -> cell_win -> slab_pbc)) { wingl -> cell_win -> slab_atoms ++; l = proj_gl -> atoms[0][i].sp; wingl -> cell_win -> slab_lot[l] ++; if (wingl -> cell_win -> cut_this_slab) process_selected_atom (proj_gl, wingl, i, 0, 0, 0); } } } } /*! \fn void cylinder_slab (mat4_t rot) \brief prepare cylinder slab OpenGL rendering \param rot rotation matrix */ void cylinder_slab (mat4_t rot) { int i, j, k; vec3_t pos_a = vec3(-wingl -> cell_win -> cparam[12]/2.0, 0.0, 0.0); vec3_t pos_b = vec3( wingl -> cell_win -> cparam[12]/2.0, 0.0, 0.0); pos_a = m4_mul_pos (rot, pos_a); pos_b = m4_mul_pos (rot, pos_b); vec3_t cat = vec3 (wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]); pos_a = v3_add (pos_a, cat); pos_b = v3_add (pos_b, cat); vec3_t axis = v3_sub (pos_b, pos_a); if (! wingl -> cell_win -> cut_this_slab) { object_3d * slab = g_malloc0 (sizeof*slab); object_3d * slab_cap = g_malloc0 (sizeof*slab_cap); slab = draw_cylinder (30, 1.0, 1.0); slab -> num_instances = (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); slab -> inst_buffer_size = CYLI_BUFF_SIZE; slab -> instances = allocfloat (slab -> num_instances*CYLI_BUFF_SIZE); slab_cap = draw_cylinder_cap (50, 1.0, FALSE); slab_cap -> num_instances = 2 * slab -> num_instances; slab_cap -> inst_buffer_size = CAPS_BUFF_SIZE; slab_cap -> instances = allocfloat (slab_cap -> num_instances*CAPS_BUFF_SIZE); ColRGBA col; col.red = 0.0; col.blue = 1.0; col.green = 1.0; col.alpha = wingl -> cell_win -> slab_alpha; vec3_t shift; for (i=0; i extra_cell[0]+1; i++) { for (j=0; j extra_cell[1]+1; j++) { for (k=0; k extra_cell[2]+1; k++) { shift.x = i*box_gl -> vect[0][0]+j*box_gl -> vect[1][0]+k*box_gl -> vect[2][0]; shift.y = i*box_gl -> vect[0][1]+j*box_gl -> vect[1][1]+k*box_gl -> vect[2][1]; shift.z = i*box_gl -> vect[0][2]+j*box_gl -> vect[1][2]+k*box_gl -> vect[2][2]; pos_a = v3_add (pos_a, shift); pos_b = v3_add (pos_b, shift); setup_cylinder_vertice (slab -> instances, pos_a, pos_b, col, wingl -> cell_win -> cparam[13], 1.0, 0.0); pos_a = v3_sub (pos_a, shift); pos_b = v3_sub (pos_b, shift); } } } wingl -> ogl_glsl[SLABS][0][0] = init_shader_program (SLABS, GLSL_CYLINDERS, cylinder_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 6, 1, TRUE, slab); g_free (slab); nbs = 0; for (i=0; i extra_cell[0]+1; i++) { for (j=0; j extra_cell[1]+1; j++) { for (k=0; k extra_cell[2]+1; k++) { shift.x = i*box_gl -> vect[0][0]+j*box_gl -> vect[1][0]+k*box_gl -> vect[2][0]; shift.y = i*box_gl -> vect[0][1]+j*box_gl -> vect[1][1]+k*box_gl -> vect[2][1]; shift.z = i*box_gl -> vect[0][2]+j*box_gl -> vect[1][2]+k*box_gl -> vect[2][2]; pos_a = v3_add (pos_a, shift); pos_b = v3_add (pos_b, shift); setup_cap_vertice (slab_cap -> instances, pos_a, pos_b, col, wingl -> cell_win -> cparam[13], 1.0); setup_cap_vertice (slab_cap -> instances, pos_b, pos_a, col, wingl -> cell_win -> cparam[13], 1.0); pos_a = v3_sub (pos_a, shift); pos_b = v3_sub (pos_b, shift); } } } wingl -> ogl_glsl[SLABS][0][1] = init_shader_program (SLABS, GLSL_CAPS, cap_vertex, NULL, full_color, GL_TRIANGLE_FAN, 5, 1, TRUE, slab_cap); g_free (slab_cap); } wingl -> cell_win -> slab_vol = pi*pow(wingl -> cell_win -> cparam[13], 2)*wingl -> cell_win -> cparam[12]; for (i=0; i nspec; i++) wingl -> cell_win -> slab_lot[i] = 0; wingl -> cell_win -> slab_atoms = 0; vec3_t atc, patc; atom slab_center; distance at_slab; slab_center.x = cat.x; slab_center.y = cat.y; slab_center.z = cat.z; for (i=0; inatomes; i++) { atc = vec3(proj_gl -> atoms[0][i].x, proj_gl -> atoms[0][i].y, proj_gl -> atoms[0][i].z); at_slab = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[0][i], & slab_center); if (wingl -> cell_win -> slab_pbc || ! at_slab.pbc) { atc = vec3(at_slab.x, at_slab.y, at_slab.z); patc = v3_proj (atc, axis); if (v3_length(patc) <= wingl -> cell_win -> cparam[12]/2.0 && v3_length(v3_sub(patc,atc)) <= wingl -> cell_win -> cparam[13]) { wingl -> cell_win -> slab_atoms ++; j = proj_gl -> atoms[0][i].sp; wingl -> cell_win -> slab_lot[j] ++; if (wingl -> cell_win -> cut_this_slab) process_selected_atom (proj_gl, wingl, i, 0, 0, 0); } } } } /*! \fn void spherical_slab () \brief prepare spherical slab OpenGL rendering */ void spherical_slab () { int i, j, k, l; vec3_t pos; if (! wingl -> cell_win -> cut_this_slab) { object_3d * slab = g_malloc0 (sizeof*slab); slab = draw_sphere (50); slab -> inst_buffer_size = ATOM_BUFF_SIZE; slab -> num_instances = (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); slab -> instances = allocfloat (slab -> num_instances*ATOM_BUFF_SIZE); ColRGBA col; col.red = 0.0; col.blue = 1.0; col.green = 1.0; col.alpha = wingl -> cell_win -> slab_alpha; double shift[3]; for (i=0; i extra_cell[0]+1; i++) { for (j=0; j extra_cell[1]+1; j++) { for (k=0; k extra_cell[2]+1; k++) { for (l=0; l<3; l++) shift[l] = i*box_gl -> vect[0][l] + j*box_gl -> vect[1][l] + k*box_gl -> vect[2][l] + wingl -> cell_win -> cparam[l+6]; pos = vec3(shift[0], shift[1], shift[2]); setup_sphere_vertice (slab -> instances, pos, col, wingl -> cell_win -> cparam[14], 1.0); } } } wingl -> ogl_glsl[SLABS][0][0] = init_shader_program (SLABS, GLSL_SPHERES, sphere_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 4, 1, TRUE, slab); g_free (slab); } wingl -> cell_win -> slab_vol = (4.0*pi/3.0)*(pow(wingl -> cell_win -> cparam[14], 3)); vec3_t cat = vec3 (wingl -> cell_win -> cparam[6], wingl -> cell_win -> cparam[7], wingl -> cell_win -> cparam[8]); for (i=0; i nspec; i++) wingl -> cell_win -> slab_lot[i] = 0; wingl -> cell_win -> slab_atoms = 0; atom slab_center; distance at_slab; slab_center.x = cat.x; slab_center.y = cat.y; slab_center.z = cat.z; for (i=0; inatomes; i++) { at_slab = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[0][i], & slab_center); if (wingl -> cell_win -> slab_pbc || ! at_slab.pbc) { if (at_slab.length <= wingl -> cell_win -> cparam[14]) { wingl -> cell_win -> slab_atoms ++; j = proj_gl -> atoms[0][i].sp; wingl -> cell_win -> slab_lot[j] ++; if (wingl -> cell_win -> cut_this_slab) process_selected_atom (proj_gl, wingl, i, 0, 0, 0); } } } } /*! \fn void create_slab_lists (project * this_proj) \brief prepare slab(s) OpenGL rendering \param this_proj the target project */ void create_slab_lists (project * this_proj) { wingl = this_proj -> modelgl; proj_gl = this_proj; cell_gl = & proj_gl -> cell; plot = wingl -> anim -> last -> img; step = plot -> step; box_gl = (cell_gl -> npt) ? & cell_gl -> box[step] : & cell_gl -> box[0]; cleaning_shaders (wingl, SLABS); if (wingl -> cell_win && (wingl -> cell_win -> slab_show || wingl -> cell_win -> cut_this_slab)) { if (! wingl -> cell_win -> cut_this_slab) { wingl -> n_shaders[SLABS][0] = 1; if (wingl -> cell_win -> slab_type == 1) wingl -> n_shaders[SLABS][0] ++; wingl -> ogl_glsl[SLABS][0] = g_malloc0 (wingl -> n_shaders[SLABS][0]*sizeof*wingl -> ogl_glsl[SLABS][0]); nbs = nbl = 0; } mat4_t rot = m4_rotation_xyz (wingl -> cell_win -> cparam[18], wingl -> cell_win -> cparam[19], wingl -> cell_win -> cparam[20]); switch (wingl -> cell_win -> slab_type) { case 0: cuboid_slab (rot); break; case 1: cylinder_slab (rot); break; case 2: spherical_slab (); break; } if (! wingl -> cell_win -> cut_this_slab) create_slab_info (proj_gl); } wingl -> create_shaders[SLABS] = FALSE; } /*! \fn void create_volumes_lists () \brief prepare volume(s) OpenGL rendering */ void create_volumes_lists () { cleaning_shaders (wingl, VOLMS); int i, j, k, l, m; wingl -> n_shaders[VOLMS][step] = 0; for (i=0; i show_vol[i]) wingl -> n_shaders[VOLMS][step] ++; if (wingl -> adv_bonding[0]) { for (i=0; i fm_show_vol[0][i]) { for (j=0; j coord -> totcoord[2]; j++) if (plot -> fm_show_vol[0][i][j]) wingl -> n_shaders[VOLMS][step] ++; } if (plot -> fm_show_vol[1][i]) { for (j=0; j coord -> totcoord[3]; j++) if (plot -> fm_show_vol[1][i][j]) wingl -> n_shaders[VOLMS][step] += proj_gl -> modelfc -> mols[step][j].multiplicity; } } } if (wingl -> n_shaders[VOLMS][step]) { wingl -> ogl_glsl[VOLMS][step] = g_malloc0 (wingl -> n_shaders[VOLMS][step]*sizeof*wingl -> ogl_glsl[VOLMS][step]); mat4_t rot; vec3_t bx; double paral[3][3]; m = 0; if (wingl -> adv_bonding[1]) { for (i=0; i fm_show_vol[1][i]) { for (j=0; j coord -> totcoord[3]; j++) { if (plot -> fm_show_vol[1][i][j]) { for (k=0; k modelfc -> mols[step][j].multiplicity; k++) { l = proj_gl -> modelfc -> mols[step][j].fragments[k]; rot = m4_rotation_anti_xyz (wingl -> frag_box[i][step][l][3], wingl -> frag_box[i][step][l][4], wingl -> frag_box[i][step][l][5]); paral[0][0] = wingl -> frag_box[i][step][l][0]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = 0.0; paral[1][1] = wingl -> frag_box[i][step][l][1]; paral[1][2] = 0.0; paral[2][0] = 0.0; paral[2][1] = 0.0; paral[2][2] = wingl -> frag_box[i][step][l][2]; bx = m4_mul_coord (rot, vec3(wingl -> frag_box[i][step][l][6], wingl -> frag_box[i][step][l][7], wingl -> frag_box[i][step][l][8])); draw_cuboid (TRUE, VOLMS, m, rot, bx, paral, plot -> fm_vol_col[1][i][j], plot -> fm_vol_col[1][i][j].alpha); m ++; } } } } } } if (wingl -> adv_bonding[0]) { for (i=0; i fm_show_vol[0][i]) { for (j=0; j coord -> totcoord[2]; j++) { if (plot -> fm_show_vol[0][i][j]) { rot = m4_rotation_anti_xyz (wingl -> frag_box[i][step][j][3], wingl -> frag_box[i][step][j][4], wingl -> frag_box[i][step][j][5]); paral[0][0] = wingl -> frag_box[i][step][j][0]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = 0.0; paral[1][1] = wingl -> frag_box[i][step][j][1]; paral[1][2] = 0.0; paral[2][0] = 0.0; paral[2][1] = 0.0; paral[2][2] = wingl -> frag_box[i][step][j][2]; bx = m4_mul_coord (rot, vec3(wingl -> frag_box[i][step][j][6], wingl -> frag_box[i][step][j][7], wingl -> frag_box[i][step][j][8])); draw_cuboid (TRUE, VOLMS, m, rot, bx, paral, plot -> fm_vol_col[0][i][j], plot -> fm_vol_col[0][i][j].alpha); m ++; } } } } } for (i=0; i show_vol[i]) { rot = m4_rotation_anti_xyz (wingl -> volume_box[i][step][3], wingl -> volume_box[i][step][4], wingl -> volume_box[i][step][5]); paral[0][0] = wingl -> volume_box[i][step][0]; paral[0][1] = 0.0; paral[0][2] = 0.0; paral[1][0] = 0.0; paral[1][1] = wingl -> volume_box[i][step][1]; paral[1][2] = 0.0; paral[2][0] = 0.0; paral[2][1] = 0.0; paral[2][2] = wingl -> volume_box[i][step][2]; bx = m4_mul_coord (rot, vec3(wingl -> volume_box[i][step][6], wingl -> volume_box[i][step][7], wingl -> volume_box[i][step][8])); draw_cuboid (TRUE, VOLMS, m, rot, bx, paral, plot -> vol_col[i], plot -> vol_col[i].alpha); m ++; } } } wingl -> create_shaders[VOLMS] = FALSE; } Atomes-GNU-1.1.14/src/opengl/draw/d_label.c000066400000000000000000000173041457665371200202400ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file d_label.c * @short Functions to prepare the OpenGL rendering of the atomic label(s) * @author Sébastien Le Roux */ /* * This file: 'd_label.c' * * Contains: * - The functions to prepare the OpenGL rendering of the atomic label(s) * * List of functions: int create_label_lists (); void prepare_label (atom at, int id, double al); void clean_labels (int id); mat4_t create_label_matrices (); */ #include "global.h" #include "glview.h" #include "interface.h" #include "dlp_field.h" extern ColRGBA init_color (int id, int numid); extern ColRGBA get_atom_color (int i, int j, double al, int picked, gboolean to_pick); extern float get_sphere_radius (int style, int sp, int ac, int sel); /*! \fn mat4_t create_label_matrices () \brief create label projection matrices */ mat4_t create_label_matrices () { return m4_ortho (0.0, wingl -> view_port.y, 0.0, wingl -> view_port.z, 1.0, 0.0); } /*! \fn void prepare_label (atom at, int id, double al) \brief prepare an atomic label OpenGL rendering \param at the atom to label \param id the label id \param al opacity */ void prepare_label (atom at, int id, double al) { int k, l; char * str = NULL; char * tmp = NULL; float shift[3]; ColRGBA lcol; k = at.sp; double rad = get_sphere_radius ((at.style == NONE) ? plot -> style : at.style, k, id, (at.pick[0] || at.pick[1])); for (l=0; l<3; l++) shift[l] = plot -> labels_shift[id][l]; shift[2] += rad; if (field_color && (field_object < 7 || field_object > 14)) { lcol = init_color (at.coord[4], num_field_objects); lcol.alpha = al*0.75; } else if (plot -> labels_color[id] == NULL) { lcol = get_atom_color (k+id*proj_sp, at.id, al, 0, FALSE); } else { lcol = plot -> labels_color[id][k]; lcol.alpha = al; } switch (plot -> labels_format[id]) { case ELEMENT_NAME: str = g_strdup_printf ("%s", exact_name(proj_gl -> chemistry -> element[k])); break; case SYMBOL: str = g_strdup_printf ("%s", exact_name(proj_gl -> chemistry -> label[k])); break; case SYMBOL_AND_NUM: str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); break; case NUM: str = g_strdup_printf ("%d", at.id+1); break; case ID_IN_MOLECULE: if (field_object == 0) { str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); } else { str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.coord[4]+1); } break; default: str = g_strdup_printf ("%s%d", exact_name(proj_gl -> chemistry -> label[k]), at.id+1); break; } if (id) { tmp = g_strdup_printf ("%s*", str); g_free (str); str = g_strdup_printf ("%s", tmp); g_free (tmp); } prepare_string (str, id, lcol, vec3(at.x, at.y, at.z), shift, NULL, NULL, NULL); g_free (str); } /*! \fn void clean_labels (int id) \brief clean atomic label shaders \param id label id */ void clean_labels (int id) { if (plot -> labels_list[id] != NULL) { g_free (plot -> labels_list[id]); plot -> labels_list[id] = NULL; } } /*! \fn int create_label_lists () \brief prepare atomic label(s) OpenGL rendering */ int create_label_lists () { int nshaders = 0; int i, j, k; float x, y, z; atom ato; #ifdef DEBUG g_debug ("Label LIST"); #endif cleaning_shaders (wingl, LABEL); wingl -> create_shaders[LABEL] = FALSE; clean_labels (0); clean_labels (1); if (in_movie_encoding && plot -> at_data != NULL) { for (i=0; i at_data[i].show[0] && plot -> at_data[i].label[0]) { prepare_label (proj_gl -> atoms[step][i], 0, 1.0); } } if (plot -> draw_clones) { for (i=0; i < wingl -> bonds[step][1]; i++) { x = wingl -> clones[step][i].x; y = wingl -> clones[step][i].y; z = wingl -> clones[step][i].z; j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; ato.x = proj_gl -> atoms[step][j].x - x; ato.y = proj_gl -> atoms[step][j].y - y; ato.z = proj_gl -> atoms[step][j].z - z; ato.sp = proj_gl -> atoms[step][j].sp; ato.id = k; ato.pick[0] = plot -> at_data[k].pick[0]; ato.pick[1] = plot -> at_data[k].pick[1]; ato.style = plot -> at_data[k].style; if (plot -> at_data[k].show[1] && plot -> at_data[k].label[1]) prepare_label (ato, 1, 0.75); ato.x = proj_gl -> atoms[step][k].x + x; ato.y = proj_gl -> atoms[step][k].y + y; ato.z = proj_gl -> atoms[step][k].z + z; ato.sp = proj_gl -> atoms[step][k].sp; ato.id = j; ato.pick[0] = plot -> at_data[j].pick[0]; ato.pick[1] = plot -> at_data[j].pick[1]; ato.style = plot -> at_data[j].style; if (plot -> at_data[j].show[1] && plot -> at_data[j].label[1]) prepare_label (ato, 1, 0.75); } } } else { for (i=0; i atoms[step][i].show[0] && proj_gl -> atoms[step][i].label[0]) { prepare_label (proj_gl -> atoms[step][i], 0, 1.0); } } if (plot -> draw_clones) { for (i=0; i < wingl -> bonds[step][1]; i++) { x = wingl -> clones[step][i].x; y = wingl -> clones[step][i].y; z = wingl -> clones[step][i].z; j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; ato.x = proj_gl -> atoms[step][j].x - x; ato.y = proj_gl -> atoms[step][j].y - y; ato.z = proj_gl -> atoms[step][j].z - z; ato.sp = proj_gl -> atoms[step][k].sp; ato.id = k; ato.pick[0] = proj_gl -> atoms[step][k].pick[0]; ato.pick[1] = proj_gl -> atoms[step][k].pick[1]; ato.style = proj_gl -> atoms[step][k].style; if (proj_gl -> atoms[step][k].show[1] && proj_gl -> atoms[step][k].label[1]) prepare_label (ato, 1, 0.75); ato.x = proj_gl -> atoms[step][k].x + x; ato.y = proj_gl -> atoms[step][k].y + y; ato.z = proj_gl -> atoms[step][k].z + z; ato.sp = proj_gl -> atoms[step][j].sp; ato.id = j; ato.pick[0] = proj_gl -> atoms[step][j].pick[0]; ato.pick[1] = proj_gl -> atoms[step][j].pick[1]; ato.style = proj_gl -> atoms[step][j].style; if (proj_gl -> atoms[step][j].show[1] && proj_gl -> atoms[step][j].label[1]) prepare_label (ato, 1, 0.75); } } } if (plot -> labels_list[0] != NULL || plot -> labels_list[1] != NULL) { nshaders = 0; if (plot -> labels_list[0] != NULL) nshaders += (plot -> labels_render[0] + 1) * (plot -> labels_list[0] -> last -> id + 1); if (plot -> draw_clones && plot -> labels_list[1] != NULL) { nshaders += (plot -> labels_render[1] + 1) * (plot -> labels_list[1] -> last -> id + 1); } wingl -> ogl_glsl[LABEL][0] = g_malloc0 (nshaders*sizeof*wingl -> ogl_glsl[LABEL][0]); for (i=0; i<2; i++) render_all_strings (LABEL, i); } return nshaders; } Atomes-GNU-1.1.14/src/opengl/draw/d_measures.c000066400000000000000000000566141457665371200210140ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file d_measures.c * @short Functions to prepare the OpenGL rendering of the measure(s) * @author Sébastien Le Roux */ /* * This file: 'd_measures.c' * * Contains: * - The functions to prepare the OpenGL rendering of the measure(s) * * List of functions: int prepare_measure_shaders (int type, int shaders); void draw_angle_label (atom * at, atom * bt, atom * ct, int pi); void set_measure_color (int selected, int id, int num); void setup_this_measured_angle (int s, int sa, int sb, int sc, int pi); void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store); void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store); void draw_bond_label (atom * at, atom * bt, int pi); void setup_this_measured_bond (int s, int sa, int sb, int pi); void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store); void create_measures_lists (); */ #include "global.h" #include "glview.h" extern void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); extern void unrotate_camera (); extern double arc_cos (double val); extern ColRGBA init_color (int id, int numid); extern void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store); extern void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store); extern void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store); extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); extern void clean_labels (int id); extern int objects[3]; extern int * object_was_selected[3]; extern int ** tmp_object_id[3]; int type_of_measure; int measures_drawing; atom_in_selection * tmp_a, * tmp_b, * tmp_c, * tmp_d; atom * ta, * tb, * tc, * td, * te, * tf; distance dist_ba, dist_bc; int * shift; double dist; object_3d * measure; ColRGBA col; ColRGBA col_gdk; /*! \fn void draw_angle_label (atom * at, atom * bt, atom * ct, int pi) \brief prepare an measured angle label OpenGL rendering \param at 1st atom \param bt 2nd atom \param ct 3rd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void draw_angle_label (atom * at, atom * bt, atom * ct, int pi) { angle real_theta = angle_3d (cell_gl, (cell_gl -> npt) ? step : 0, at, bt, ct); gchar * str; if (real_theta.pbc) { str = g_strdup_printf("%.1lf° (PBC)", real_theta.angle); } else { str = g_strdup_printf("%.1lf°", real_theta.angle); } float ls[3] = {15.0, 15.0, 0.0}; vec3_t pos = vec3(bt -> x, bt -> y, bt -> z); prepare_string (str, 3+pi, plot -> labels_color[3+pi][0], pos, ls, at, bt, ct); g_free (str); } /*! \fn void set_measure_color (int selected, int id, int num) \brief set measure color \param selected total number of selected atom(s) \param id measured element id number \param num total number of measured element(s) in the list */ void set_measure_color (int selected, int id, int num) { if (selected) { col = init_color (id, num); } else { col.red = 1.0 - plot -> backcolor.red; col.green = 1.0 - plot -> backcolor.green; col.blue = 1.0 - plot -> backcolor.blue; col.alpha = 1.0; } } /*! \fn void setup_this_measured_angle (int s, int sa, int sb, int sc, int pi) \brief prepare measured angle to render \param s measured line (0) or label (1) \param sa 1st atom \param sb 2nd atom \param sc 3rd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void setup_this_measured_angle (int s, int sa, int sb, int sc, int pi) { float alpha = 1.0; float shift[3]; int p, q, r; vec3_t pos_a, pos_b, pos_c; atom * at, * bt, * ct; at = & proj_gl -> atoms[step][sa]; bt = & proj_gl -> atoms[step][sb]; ct = & proj_gl -> atoms[step][sc]; for (p=0; p extra_cell[0]+1;p++) { for (q=0; q extra_cell[1]+1; q++) { for (r=0; r extra_cell[2]+1; r++) { shift[0]=p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift[1]=p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift[2]=p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; at_shift (at, shift); at_shift (bt, shift); at_shift (ct, shift); pos_a = vec3(at -> x, at -> y, at -> z); pos_b = vec3(bt -> x, bt -> y, bt -> z); pos_c = vec3(ct -> x, ct -> y, ct -> z); if (s == 0) { setup_line_vertice (measure -> vertices, pos_a, col, alpha); setup_line_vertice (measure -> vertices, pos_b, col, alpha); setup_line_vertice (measure -> vertices, pos_c, col, alpha); } else { // Text location for the instances ! draw_angle_label (at, bt, ct, pi); } at_unshift (at, shift); at_unshift (bt, shift); at_unshift (ct, shift); alpha = 0.5; } } } } /*! \fn void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store) \brief do things for the measured angles selection \param view the target glwin \param id action to perform: \n -2 = save angles selection, \n -1 = clean angles selection, \n 0 = prepare OpenGL buffer data analysis mode selection measure, \n 1 = prepare OpenGL buffer data edition mode selection measure, \n 2 = fill angles tree store measures window \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param store the tree store to fill, if any */ void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store) { int i, j, k, l, m; int ** did_it; int aid; gboolean do_it; //gboolean colored; image * img = view -> anim -> last -> img; // Total number of angles: int n_angl = num_angles (img -> selected[pi] -> selected); did_it = allocdint (n_angl, 3); aid = 0; tmp_a = img -> selected[pi] -> first; for (i=0; i < img -> selected[pi] -> selected; i++) { tmp_b = img -> selected[pi] -> first; for (j=0; j < img -> selected[pi] -> selected; j++) { if (tmp_b -> id != tmp_a -> id) { tmp_c = img -> selected[pi] -> first; for (k=0; k < img -> selected[pi] -> selected; k++) { if (tmp_c -> id != tmp_a -> id && tmp_c -> id != tmp_b -> id) { do_it = TRUE; for (l=0; l id && ((did_it[l][0] == tmp_a -> id && did_it[l][2] == tmp_c -> id) || (did_it[l][2] == tmp_a -> id && did_it[l][0] == tmp_c -> id))) { do_it = FALSE; break; } } if (do_it) { did_it[aid][0] = tmp_a -> id; did_it[aid][1] = tmp_b -> id; did_it[aid][2] = tmp_c -> id; switch (id) { case -2: for (m=0; m<3; m++) tmp_object_id[1][aid][m] = did_it[aid][m]; break; case -1: img -> selected[pi] -> selected_angles[aid] = 0; break; default: if (img -> selected[pi] -> selected_angles[aid] || img -> m_is_pressed == 2 || id == 2) { //colored = FALSE; if (id < 2) { set_measure_color (img -> selected[pi] -> selected_angles[aid], aid, n_angl); //colored = TRUE; } switch (id) { case 2: fill_angle_model_row (view -> proj, tmp_a -> id, tmp_b -> id, tmp_c -> id, store); break; default: setup_this_measured_angle (id, tmp_a -> id, tmp_b -> id, tmp_c -> id, pi); break; } } break; } aid ++; } } if (tmp_c -> next != NULL) tmp_c = tmp_c -> next; } } if (tmp_b -> next != NULL) tmp_b = tmp_b -> next; } if (tmp_a -> next != NULL) tmp_a = tmp_a -> next; } if (id == -1) { for (i=0; i selected[pi] -> selected_angles[i] = object_was_selected[1][j]; } } } } g_free (did_it); } /*! \fn void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store) \brief do things for the measured dihedrals selection \param view the target glwin \param id action to perform: \n -2 = save dihedrals selection \n -1 = clean dihedrals selection \n 0 = prepare OpenGL buffer data analysis mode selection measure \n 1 = prepare OpenGL buffer data edition mode selection measure \n 2 = fill dihedrals tree store measures window \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param store the tree store to fill, if any */ void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store) { int i, j, k, l, m; int ** did_it; int did; gboolean do_it; image * img = view -> anim -> last -> img; // gboolean colored; // Total number of dihedral angles: int n_dihedral = num_dihedrals (img -> selected[pi] -> selected); did_it = allocdint (n_dihedral, 4); did = 0; tmp_a = img -> selected[pi] -> first; for (i=0; i < img -> selected[pi] -> selected; i++) { tmp_b = img -> selected[pi] -> first; for (j=0; j < img -> selected[pi] -> selected; j++) { if (tmp_b -> id != tmp_a -> id) { tmp_c = img -> selected[pi] -> first; for (k=0; k < img -> selected[pi] -> selected; k++) { if (tmp_c -> id != tmp_a -> id && tmp_c -> id != tmp_b -> id) { tmp_d = img -> selected[pi] -> first; for (l=0; l < img -> selected[pi] -> selected; l++) { if (tmp_d -> id != tmp_a -> id && tmp_d -> id != tmp_b -> id && tmp_d -> id != tmp_c -> id) { do_it = TRUE; for (m=0; m id && did_it[m][1] == tmp_b -> id && did_it[m][2] == tmp_c -> id && did_it[m][3] == tmp_d -> id) ||(did_it[m][0] == tmp_d -> id && did_it[m][1] == tmp_c -> id && did_it[m][2] == tmp_b -> id && did_it[m][3] == tmp_a -> id)) { do_it = FALSE; break; } } if (do_it) { did_it[did][0] = tmp_a -> id; did_it[did][1] = tmp_b -> id; did_it[did][2] = tmp_c -> id; did_it[did][3] = tmp_d -> id; switch (id) { case -2: for (m=0; m<4; m++) tmp_object_id[2][did][m] = did_it[did][m]; break; case -1: img -> selected[pi] -> selected_dihedrals[did] = 0; break; default: if (img -> selected[pi] -> selected_dihedrals[did] || img -> m_is_pressed == 3 || id == 2) { //colored = FALSE; if (id < 2) { set_measure_color (img -> selected[pi] -> selected_dihedrals[did], did, n_dihedral); //colored = TRUE; } switch (id) { case 0: //draw_angle_arc (colored); break; case 1: //draw_angle_label (); break; case 2: fill_dihedral_model_row (view -> proj, tmp_a -> id, tmp_b -> id, tmp_c -> id, tmp_d -> id, store); break; } } break; } did ++; } } if (tmp_d -> next != NULL) tmp_d = tmp_d -> next; } } if (tmp_c -> next != NULL) tmp_c = tmp_c -> next; } } if (tmp_b -> next != NULL) tmp_b = tmp_b -> next; } if (tmp_a -> next != NULL) tmp_a = tmp_a -> next; } if (id == -1) { for (i=0; i selected[pi] -> selected_dihedrals[i] = object_was_selected[2][j]; } } } } g_free (did_it); } /*! \fn void draw_bond_label (atom * at, atom * bt, int pi) \brief prepare a measured distance OpenGL rendering \param at 1st atom \param bt 2nd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void draw_bond_label (atom * at, atom * bt, int pi) { distance dist = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, at, bt); vec3_t pos; if (dist.pbc) { pos = vec3 (at -> x - (at -> x - bt -> x)/2.0, at -> y - (at -> y - bt -> y)/2.0, at -> z - (at -> z - bt -> z)/2.0); } else { pos = vec3 (at -> x-dist.x/2.0, at -> y-dist.y/2.0, at -> z-dist.z/2.0); } gchar * str; if (dist.pbc) { str = g_strdup_printf("%.3lf Å (PBC)", dist.length); } else { str = g_strdup_printf("%.3lf Å", dist.length); } float ls[3] = {-15.0, 15.0, 0.0}; prepare_string (str, 3+pi, plot -> labels_color[3+pi][0], pos, ls, at, bt, NULL); g_free (str); } /*! \fn void setup_this_measured_bond (int s, int sa, int sb, int pi) \brief prepare measured distance to render \param s measured line (0) or label (1) \param sa 1st atom \param sb 2nd atom \param pi 0 = mouse analysis mode, 1 = mouse edition mode */ void setup_this_measured_bond (int s, int sa, int sb, int pi) { float alpha = 1.0; float shift[3]; int p, q, r; vec3_t pos_a, pos_b; atom * at, * bt; at = & proj_gl -> atoms[step][sa]; bt = & proj_gl -> atoms[step][sb]; for (p=0; p extra_cell[0]+1;p++) { for (q=0; q extra_cell[1]+1; q++) { for (r=0; r extra_cell[2]+1; r++) { shift[0]=p*box_gl -> vect[0][0]+q*box_gl -> vect[1][0]+r*box_gl -> vect[2][0]; shift[1]=p*box_gl -> vect[0][1]+q*box_gl -> vect[1][1]+r*box_gl -> vect[2][1]; shift[2]=p*box_gl -> vect[0][2]+q*box_gl -> vect[1][2]+r*box_gl -> vect[2][2]; at_shift (at, shift); at_shift (bt, shift); pos_a = vec3(at -> x, at -> y, at -> z); pos_b = vec3(bt -> x, bt -> y, bt -> z); if (s == 0) { setup_line_vertice (measure -> vertices, pos_a, col, alpha); setup_line_vertice (measure -> vertices, pos_b, col, alpha); } else { // Text location for the instances ! draw_bond_label (at, bt, pi); } at_unshift (at, shift); at_unshift (bt, shift); alpha = 0.5; } } } } /*! \fn void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store) \brief do things for the measured distances selection \param view the target glwin \param id action to perform: \n -2 = save bonds selection \n -1 = clean bonds selection \n 0 = prepare OpenGL buffer data analysis mode selection measure \n 1 = prepare OpenGL buffer data edition mode selection measure \n 2 = fill bonds distances tree store measures window \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param store the tree store to fill, if any */ void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store) { int i, j; int ** did_it; int bid; image * img = view -> anim -> last -> img; int n_dist = num_bonds (img -> selected[pi] -> selected); if (id == 1) shift = allocint(2); did_it = allocdint (n_dist, 2); bid = -1; tmp_a = img -> selected[pi] -> first; for (i=0; i < img -> selected[pi] -> selected-1; i++) { tmp_b = tmp_a -> next; for (j=i+1; j < img -> selected[pi] -> selected; j++) { bid ++; did_it[bid][0] = tmp_a -> id; did_it[bid][1] = tmp_b -> id; switch (id) { case -2: tmp_object_id[0][bid][0] = tmp_a -> id; tmp_object_id[0][bid][1] = tmp_b -> id; break; case -1: img -> selected[pi] -> selected_bonds[bid] = 0; break; default: if (img -> selected[pi] -> selected_bonds[bid] || img -> m_is_pressed == 1 || id == 2) { if (id < 2) { set_measure_color (img -> selected[pi] -> selected_bonds[bid], bid, n_dist); } switch (id) { case 2: fill_bond_model_row (view -> proj, tmp_a -> id, tmp_b -> id, store); break; default: setup_this_measured_bond (id, tmp_a -> id, tmp_b -> id, pi); break; } } break; } if (tmp_b -> next != NULL) tmp_b = tmp_b -> next; } if (tmp_a -> next != NULL) tmp_a = tmp_a -> next; } if (id == 1) g_free (shift); if (id == -1) { for (i=0; i selected[pi] -> selected_bonds[i] = object_was_selected[0][j]; } } } } g_free (did_it); } /*! \fn int prepare_measure_shaders (int type, int shaders) \brief prepare measure OpenGL rendering \param type the measure type (0 = distances, 1 = angles, 2 = dihedrals) \param shaders the shader id */ int prepare_measure_shaders (int type, int shaders) { int nshaders = 0; if (plot -> selected[type] -> selected > 1 && plot -> selected[type] -> selected < MAX_IN_SELECTION) { if (plot -> mpattern > -1) { // First the bond distances measure = g_malloc0 (sizeof*measure); measure -> vert_buffer_size = LINE_BUFF_SIZE; measure -> num_vertices = 2 * num_bonds (plot -> selected[type] -> selected) * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); measure -> vertices = allocfloat (measure -> vert_buffer_size*measure -> num_vertices); nbs = 0; bonds_loop (wingl, 0, type, NULL); if (plot -> mpattern != 2) { wingl -> ogl_glsl[MEASU][0][shaders] = init_shader_program (MEASU, GLSL_LINES, line_vertex, line_stipple, line_stipple_color, GL_LINES, 2, 7, FALSE, measure); } else { wingl -> ogl_glsl[MEASU][0][shaders] = init_shader_program (MEASU, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 7, FALSE, measure); } wingl -> ogl_glsl[MEASU][0][shaders] -> line_width = plot -> mwidth; nshaders ++; g_free (measure); // The angles if (plot -> selected[type] -> selected > 2) { measure = g_malloc0 (sizeof*measure); measure -> vert_buffer_size = LINE_BUFF_SIZE; measure -> num_vertices = 3 * num_angles (plot -> selected[type] -> selected) * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); measure -> vertices = allocfloat (measure -> vert_buffer_size*measure -> num_vertices); nbs = 0; angles_loop (wingl, 0, type, NULL); if (plot -> mpattern != 2) { wingl -> ogl_glsl[MEASU][0][shaders+1] = init_shader_program (MEASU, GLSL_LINES, angle_vertex, angle_stipple, line_stipple_color, GL_TRIANGLES, 2, 7, FALSE, measure); } else { wingl -> ogl_glsl[MEASU][0][shaders+1] = init_shader_program (MEASU, GLSL_LINES, angle_vertex, angle_stipple, angle_color, GL_TRIANGLES, 2, 7, FALSE, measure); } wingl -> ogl_glsl[MEASU][0][shaders+1] -> line_width = plot -> mwidth; nshaders ++; g_free (measure); } } // When all labels are found we render the text if any if (plot -> labels_list[3+type] != NULL) { measures_drawing = nshaders + shaders; render_all_strings (MEASU, 3+type); nshaders += (plot -> labels_render[3+type]+1) * (plot -> labels_list[3+type] -> last -> id + 1); } } return nshaders; } /*! \fn void create_measures_lists () \brief prepare measure(s) OpenGL rendering */ void create_measures_lists () { // First we draw all lines/angles displayed on screen #ifdef DEBUG g_debug ("Measure LIST"); #endif cleaning_shaders (wingl, MEASU); clean_labels (3); clean_labels (4); wingl -> create_shaders[MEASU] = FALSE; wingl -> n_shaders[MEASU][0] = 0; int i, j, k; i = (is_atom_win_active(wingl) || (wingl -> mode == EDITION && wingl -> selection_mode == NSELECTION-1)) ? 1 : 0; for (j=i; j<2; j++) { if (plot -> selected[j] -> selected > 1 && plot -> selected[j] -> selected < MAX_IN_SELECTION) { if (plot -> mpattern > -1) { wingl -> n_shaders[MEASU][0] ++; if (plot -> selected[j] -> selected > 2) wingl -> n_shaders[MEASU][0] ++; } // First we need to prepare the labels type_of_measure = 6; bonds_loop (wingl, 1, j, NULL); if (plot -> selected[j] -> selected >= 3) { type_of_measure = 9; angles_loop (wingl, 1, j, NULL); } if (plot -> labels_list[3+j] != NULL) { // shaders for the labels if any wingl -> n_shaders[MEASU][0] += (plot -> labels_render[3+j]+1) * (plot -> labels_list[3+j] -> last -> id + 1); } } } if (wingl -> n_shaders[MEASU][0]) { wingl -> ogl_glsl[MEASU][0] = g_malloc0 (wingl -> n_shaders[MEASU][0]*sizeof*wingl -> ogl_glsl[MEASU][0]); measures_drawing = 0; j = 0; for (k=i; k<2; k++) { j += prepare_measure_shaders (k, j); } } } Atomes-GNU-1.1.14/src/opengl/draw/d_poly.c000066400000000000000000000476641457665371200201600ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file d_poly.c * @short Functions to prepare the OpenGL rendering of coordination polyhedra * @author Sébastien Le Roux */ /* * This file: 'd_poly.c' * * Contains: * - The functions to prepare the OpenGL rendering of coordination polyhedra * * List of functions: int is_atom_cloned (int at); gboolean is_inside (vec3_t p, float * mi, float * ma); gboolean is_in_triangle (vec3_t p, vec3_t a, vec3_t b, vec3_t c); gboolean check_it (int i, int j, int k, int l); void setup_summit (float * vertices, vec3_t s, vec3_t n); void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc); void setup_polyhedron (float * vertices, GLfloat ** xyz, int s); void setup_tetra (float * vertices, vec3_t a, vec3_t b, vec3_t c, vec3_t d); void setup_tetrahedron (float * vertices, GLfloat ** xyz); void get_centroid (GLfloat ** xyz, int id); void check_triangles (int s, GLfloat ** xyz); void prepare_poly_gl (float * vertices, atom at, int c); void create_poly_lists (); vec3_t get_triangle_normal (vec3_t v1, vec3_t v2, vec3_t v3); */ #include "global.h" #include "glview.h" #include "color_box.h" #include "dlp_field.h" gboolean * do_gl; vec3_t centroid; ColRGBA pcol; extern int nbs, nbl, nba; float the_sign; float poly_alpha; /*! \fn void setup_summit (float * vertices, vec3_t s, vec3_t n) \brief prepare the polygon summit to render \param vertices the OpenGL data buffer to fill \param s position vector \param n normal vector */ void setup_summit (float * vertices, vec3_t s, vec3_t n) { int val = nba*POLY_BUFF_SIZE; vertices[val] = s.x; vertices[val+1] = s.y; vertices[val+2] = s.z; vertices[val+3] = n.x; vertices[val+4] = n.y; vertices[val+5] = n.z; vertices[val+6] = pcol.red; vertices[val+7] = pcol.green; vertices[val+8] = pcol.blue; vertices[val+9] = pcol.alpha * poly_alpha; nba ++; } /*! \fn vec3_t get_triangle_normal (vec3_t v1, vec3_t v2, vec3_t v3) \brief compute triangle normal vector \param v1 1st summit \param v2 2nd summit \param v3 3rd summit */ vec3_t get_triangle_normal (vec3_t v1, vec3_t v2, vec3_t v3) { vec3_t edge_a = v3_sub(v3, v1); vec3_t edge_b = v3_sub(v2, v1); vec3_t normal = v3_norm (v3_cross(edge_a, edge_b)); vec3_t plane = v3_add (v1, v3_add(v2, v3)); plane = v3_divs (plane, 3.0); float sign = 1.0; if (v3_dot (v3_sub(plane,centroid), normal) < 0) { sign = -1.0; } return v3_muls (normal, sign); } /*! \fn void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc) \brief setup triangle veertices \param vertices \param sa 1st summit \param sb 2nd summit \param sc 3rd summit */ void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc) { vec3_t normal = get_triangle_normal (sa, sb, sc); setup_summit (vertices, sa, normal); setup_summit (vertices, sb, normal); setup_summit (vertices, sc, normal); } /*vec3_t get_summit_normal (vec3_t va, vec3_t vb, vec3_t vc, vec3_t vd) { vec3_t ta, tb, tc; ta = get_triangle_normal (va, vb, vc); tb = get_triangle_normal (va, vb, vd); tc = get_triangle_normal (va, vc, vd); return v3_norm(v3_add(ta, v3_add(tb, tc))); }*/ /*! \fn void setup_polyhedron (float * vertices, GLfloat ** xyz, int s) \brief fill the OpenGL data buffer for a polyhedron to render \param vertices the OpenGL buffer data to fill \param xyz the summits coordinates \param s the number of summits */ void setup_polyhedron (float * vertices, GLfloat ** xyz, int s) { int i, j, k, l, n, o, p, q, r; vec3_t a, b, c; float shift[3]; poly_alpha = 1.0; for (n=0; n extra_cell[0]+1;n++) { for (o=0; o extra_cell[1]+1; o++) { for (p=0; p extra_cell[2]+1; p++) { shift[0]=n*box_gl -> vect[0][0]+o*box_gl -> vect[1][0]+p*box_gl -> vect[2][0]; shift[1]=n*box_gl -> vect[0][1]+o*box_gl -> vect[1][1]+p*box_gl -> vect[2][1]; shift[2]=n*box_gl -> vect[0][2]+o*box_gl -> vect[1][2]+p*box_gl -> vect[2][2]; for (q=0; q extra_cell[0]+1;n++) { for (o=0; o extra_cell[1]+1; o++) { for (p=0; p extra_cell[2]+1; p++) { shift[0]=n*box_gl -> vect[0][0]+o*box_gl -> vect[1][0]+p*box_gl -> vect[2][0]; shift[1]=n*box_gl -> vect[0][1]+o*box_gl -> vect[1][1]+p*box_gl -> vect[2][1]; shift[2]=n*box_gl -> vect[0][2]+o*box_gl -> vect[1][2]+p*box_gl -> vect[2][2]; for (q=0; q<4; q++) { for (r=0; r<3; r++) xyz[q][r] += shift[r]; } setup_tetra (vertices, vec3(xyz[0][0], xyz[0][1], xyz[0][2]), vec3(xyz[1][0], xyz[1][1], xyz[1][2]), vec3(xyz[2][0], xyz[2][1], xyz[2][2]), vec3(xyz[3][0], xyz[3][1], xyz[3][2])); poly_alpha = 0.5; for (q=0; q<4; q++) { for (r=0; r<3; r++) xyz[q][r] -= shift[r]; } } } } } /*! \fn void get_centroid (GLfloat ** xyz, int id) \brief find the barycenter of a polyhedron \param xyz the OpenGL buffer data to fill \param id the number of summits */ void get_centroid (GLfloat ** xyz, int id) { int i; centroid.x = centroid.y = centroid.z = 0.0; for (i=0; i mi[0] && p.x < ma[0]) { if (p.y > mi[1] && p.y < ma[1]) { if (p.z > mi[2] && p.z < ma[2]) { return TRUE; } } } return FALSE; } /*! \fn gboolean is_in_triangle (vec3_t p, vec3_t a, vec3_t b, vec3_t c) \brief is this point inside a triangle ? \param p the position to test \param a 1st summit of the triangle \param b 2nd summit of the triangle \param c 3rd summit of the triangle */ gboolean is_in_triangle (vec3_t p, vec3_t a, vec3_t b, vec3_t c) { float area = 0.5 * v3_length(v3_cross(v3_sub(a, b), v3_sub(a, c))); float alpha = v3_length(v3_cross(v3_sub(p, b), v3_sub(p, c))) / (2.0*area); float beta = v3_length(v3_cross(v3_sub(p, c), v3_sub(p, a))) / (2.0*area); float gamma = 1 - alpha - beta; if ((alpha >= 0.0 && alpha <= 1.0) && (beta >= 0.0 && beta <= 1.0) && (gamma >= 0.0 && gamma <= 1.0)) { return TRUE; } else { return FALSE; } } /*! \fn gboolean check_it (int i, int j, int k, int l) \brief test this atom id ? \param i 1st summit atom id \param j 2nd summit atom id \param k 3rd summit atom id \param l atom id to test */ gboolean check_it (int i, int j, int k, int l) { if (l != i && l != j && l != k) { return TRUE; } else { return FALSE; } } /*! \fn void check_triangles (int s, GLfloat ** xyz) \brief check triangle intersection \param s number of summits for the polygon \param xyz the coordinates of the summits */ void check_triangles (int s, GLfloat ** xyz) { int h, i, j, k, l, m, n; float d, r; float vd, v0; vec3_t vi, vj, vk, vl, vm; vec3_t u, v, w; vec3_t p, pt; float min_c[3], min_p[3]; float max_c[3], max_p[3]; i = s*(s-1)*(s-2)/6; do_gl = allocbool (i); for (i=0; i<3; i++) { min_c[i] = max_c[i] = xyz[0][i]; } for (i=1; i 1 && k-j > 1) { // check the plane defined by the 3 points i, j and k vi = vec3(xyz[i][0], xyz[i][1], xyz[i][2]); vj = vec3(xyz[j][0], xyz[j][1], xyz[j][2]); vk = vec3(xyz[k][0], xyz[k][1], xyz[k][2]); u = v3_sub (vi, vj); v = v3_sub (vi, vk); p = v3_norm(v3_cross (u, v)); for (l=0; l npt) ? step : 0, & at, & proj_gl -> atoms[step][j]); xyz[l][0] = at.x - d.x; xyz[l][1] = at.y - d.y; xyz[l][2] = at.z - d.z; if (d.pbc) clones = TRUE; } j = at.numv; if (j > 1) { if (j == 3) { xyz[j][0] = at.x; xyz[j][1] = at.y; xyz[j][2] = at.z; } if (plot -> draw_clones || ! clones || plot -> cloned_poly) { k = at.sp; // Set color if (pcolorm == 0) { pcol = plot -> at_color[k]; l = at.coord[c]; pcol.alpha = plot -> spcolor[c][k][l].alpha; } else if (pcolorm < 5) { l = at.coord[pcolorm - 1]; if (pcolorm > 2) { k = 0; } pcol = plot -> spcolor[pcolorm - 1][k][l]; } else if (pcolorm == 5) { field_molecule * fmol = get_active_field_molecule_from_model_id (proj_gl, at.id); if (fmol) { l = proj_gl -> atoms[0][at.id].fid; k = fmol -> mol -> natoms; } else { l = 0; k = 1; } pcol = init_color (l, k); pcol.alpha = 0.5; } else { pcol = wingl -> custom_map -> colors[step][at.id]; l = at.coord[1]; pcol.alpha = plot -> spcolor[1][k][l].alpha; } /*color[0] = pcol.red; color[1] = pcol.green; color[2] = pcol.blue; color[3] = pcol.alpha;*/ switch (j) { case 3: // Tetrahedral unit // Tétraèdre, assemblage de triangles get_centroid (xyz, 4); setup_tetrahedron (vertices, xyz); break; default: get_centroid (xyz, j); check_triangles (j, xyz); setup_polyhedron (vertices, xyz, j); break; } } } g_free (xyz); xyz = NULL; } /*! \fn int is_atom_cloned (int at) \brief does this atom have clone(s) ? \param at the atom id to test */ int is_atom_cloned (int at) { int i, j, k; i=0; for (j=0; j atoms[step][at].numv; j++) { k = proj_gl -> atoms[step][at].vois[j]; if (distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][k]).pbc) i ++; } return i; } /*! \fn void create_poly_lists () \brief prepare coordination polyhedra(s) OpenGL rendering */ void create_poly_lists () { // The order to draw the polyhedra could be based on the alpha channel // from the most transparent to the less transparent // However a better way is to used the neighbor list, if 3 atoms are linked thru bonds // and that all 3 of them are involved in polyhedra then the one at // the center is to be drawn first ... yet to be implemented int h, i, j, k, l, m, n, o, p, q; #ifdef DEBUG g_debug ("Poly LIST"); #endif cleaning_shaders (wingl, POLYS); if (wingl -> init) { h = 0; for (i=0; i<2; i++) { for (j=0; j totcoord[i]; j++) { if (plot -> show_poly[i]) { if (plot -> show_poly[i][j]) { h++; } } } } if (h) { int * npoly[2]; int ptot = 0; for (i=0; i<2; i++) { npoly[i] = allocint (coord_gl -> totcoord[i]); for (j=0; j totcoord[i]; j++) { for (k=0; k < proj_at; k++) { l = 0; for (m=0; m atoms[step][k].sp; m++) { l += coord_gl -> ntg[i][m]; } n = l + proj_gl -> atoms[step][k].coord[i]; if (n == j && plot -> show_poly[i] && plot -> show_poly[i][n]) { m = proj_gl -> atoms[step][k].coord[1]; n = proj_gl -> atoms[step][k].sp; o = 0; for (p=0; p partial_geo[n][m][p]; } p = (plot -> draw_clones) ? 1 + is_atom_cloned (k) : 1; // q is the number of summit of the polyhedra // +1 if only a coord 3 to include the central atom q = (o == 3) ? o+1: o; // Then we need the max number of triangle for this polyedron npoly[i][j] += p*(q*(q-1)*(q-2)/6); } } ptot += npoly[i][j]*3; } } if (ptot > 0) { wingl -> ogl_glsl[POLYS][step] = g_malloc0 (sizeof*wingl -> ogl_glsl[POLYS][step]); wingl -> n_shaders[POLYS][step] = 1; object_3d * poly = g_malloc0 (sizeof*poly); poly -> vert_buffer_size = POLY_BUFF_SIZE; poly -> num_vertices = ptot * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); poly -> vertices = allocfloat (poly -> vert_buffer_size*poly -> num_vertices); nba = 0; for (i=0; i<2; i++) { for (j=0; j totcoord[i]; j++) { if (npoly[i][j] > 0) { for (m=0; m < proj_at; m++) { n = 0; for (o=0; o atoms[step][m].sp; o++) { n += coord_gl -> ntg[i][o]; } o = n + proj_gl -> atoms[step][m].coord[i]; if (o == j && plot -> show_poly[i] && plot -> show_poly[i][o] && proj_gl -> atoms[step][m].numv > 1) { prepare_poly_gl (poly -> vertices, proj_gl -> atoms[step][m], i); } } } } g_free (npoly[i]); } wingl -> ogl_glsl[POLYS][step][0] = init_shader_program (POLYS, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, poly); g_free (poly); } } } wingl -> create_shaders[POLYS] = FALSE; } Atomes-GNU-1.1.14/src/opengl/draw/d_rings.c000066400000000000000000000205411457665371200203000ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file d_rings.c * @short Functions to prepare the OpenGL rendering of rings polyhedra * @author Sébastien Le Roux */ /* * This file: 'd_rings.c' * * Contains: * - The functions to prepare the OpenGL rendering of rings polyhedra * * List of functions: int prepare_rings_gl (float * vertices, int se, int ge, int ta, int id, gboolean go); void create_ring_lists (); */ #include "global.h" #include "glview.h" #include "color_box.h" extern ColRGBA pcol; extern int nbs, nbl, nba; extern void setup_tetrahedron (float * vertices, GLfloat ** xyz); extern void setup_polyhedron (float * vertices, GLfloat ** xyz, int s); extern void get_centroid (GLfloat ** xyz, int id); extern void check_triangles (int s, GLfloat ** xyz); /*! \fn int prepare_rings_gl (float * vertices, int se, int ge, int ta, int id, gboolean go) \brief prepare a ring polyhedra OpenGL rendering \param vertices the ring atomic positions buffer to fill, if any \param se type of ring \param ge the coord id for this size of ring \param ta the size of the ring \param id the ring id number \param go render the ring or not (1/0) */ int prepare_rings_gl (float * vertices, int se, int ge, int ta, int id, gboolean go) { int i, j, k, l, m; gboolean clones; gboolean add_poly; gboolean old_pbc; GLfloat *** xyz; distance d; atom at, bt; xyz = alloctfloat (ta, ta, 3); j = -1; clones = FALSE; j = wingl -> all_rings[se][step][ta-1][id][0]; l = 0; xyz[0][l][0] = proj_gl -> atoms[step][j].x; xyz[0][l][1] = proj_gl -> atoms[step][j].y; xyz[0][l][2] = proj_gl -> atoms[step][j].z; for (i=1; i < ta; i++) { j = wingl -> all_rings[se][step][ta-1][id][i]; at = proj_gl -> atoms[step][j]; bt.x = xyz[0][i-1][0]; bt.y = xyz[0][i-1][1]; bt.z = xyz[0][i-1][2]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & at, & bt); if (d.pbc) clones = TRUE; xyz[0][i][0] = xyz[0][i-1][0] + d.x; xyz[0][i][1] = xyz[0][i-1][1] + d.y; xyz[0][i][2] = xyz[0][i-1][2] + d.z; } l = ta; m = 0; if (clones) { old_pbc = cell_gl -> pbc; cell_gl -> pbc = FALSE; add_poly = TRUE; while (add_poly) { for (i=0; i all_rings[se][step][ta-1][id][i]; at = proj_gl -> atoms[step][j]; add_poly = TRUE; for (k=0; k npt) ? step : 0, & at, & bt); if (d.length < 0.01) { add_poly = FALSE; break; } } if (add_poly) break; } if (add_poly) { m ++; bt.x = xyz[0][i][0]; bt.y = xyz[0][i][1]; bt.z = xyz[0][i][2]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & at, & bt); for (j=0; j pbc = old_pbc; } if (! go) return m+1; if (plot -> draw_clones || ! clones || plot -> cloned_poly) { for (i=0; i spcolor[4+se][0][ge]; get_centroid (xyz[i], l); if (l == 4) { setup_tetrahedron (vertices, xyz[i]); } else { check_triangles (l, xyz[i]); setup_polyhedron (vertices, xyz[i], l); } } } g_free (xyz); xyz = NULL; return 0; } /*! \fn void create_ring_lists () \brief prepare ring(s) polyhedra OpenGL rendering */ void create_ring_lists () { // The order to draw the polyhedra could be based on the alpha channel // from the most transparent to the less transparent // However a better way is to used the neighbor list, if 3 atoms are linked thru bonds // and that all 3 of them are involved in polyhedra then the one at // the center is to be drawn first ... yet to be implemented int i, j, k, l, m, n; #ifdef DEBUG g_debug ("Ring LIST"); #endif cleaning_shaders (wingl, RINGS); if (wingl -> rings) { int rtot = 0; int * nrings[5]; for (i=0; i < 5; i++) { nrings[i] = g_malloc0 (coord_gl -> totcoord[i+4]*sizeof*nrings[i]); for (j=0; j < coord_gl -> totcoord[i+4]; j++) { // k is the size of the ring in total number of atoms: k = coord_gl -> geolist[i+4][0][j]; l = 0; if (plot -> show_poly[i+4][j]) { // Show all rings for (m = 0; m < wingl -> num_rings[i][step][k-1]; m++) { l += prepare_rings_gl (NULL, i, j, k, m, FALSE); } } else if (! in_movie_encoding || plot -> i_rings[i] == NULL) { // Show selected rings for (m=0; m < wingl -> num_rings[i][step][k-1]; m++) { if (wingl -> show_rpoly[i][step][k-1][m]) { l += prepare_rings_gl (NULL, i, j, k, m, FALSE); } } } // m is the number of summit of the polyhedra // +1 if only a 3 atom size ring to include a centroid m = (k == 3) ? k+1: k; // Then we need the max number of triangles for all these polyedron nrings[i][j] = l*(m*(m-1)*(m-2)/6); rtot += nrings[i][j]*3; } if (in_movie_encoding && plot -> i_rings[i] != NULL) { for (l=0; l i_rings[i][0][0]; l++) { j = plot -> i_rings[i][l+1][0]; k = coord_gl -> geolist[i+4][0][j]; m = prepare_rings_gl (NULL, i, j, k, plot -> i_rings[i][l+1][1], FALSE); if (m) { n = (k == 3) ? k+1: k; nrings[i][j] += (n*(n-1)*(n-2)/6); rtot += (n*(n-1)*(n-2)/6)*3; } } } } if (rtot > 0) { wingl -> ogl_glsl[RINGS][step] = g_malloc0 (sizeof*wingl -> ogl_glsl[RINGS][step]); wingl -> n_shaders[RINGS][step] = 1; object_3d * rings = g_malloc0 (sizeof*rings); rings -> vert_buffer_size = POLY_BUFF_SIZE; rings -> num_vertices = rtot * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); rings -> vertices = allocfloat (rings -> vert_buffer_size*rings -> num_vertices); nba = 0; for (i=0; i < 5; i++) { for (j=0; j < coord_gl -> totcoord[i+4]; j++) { if (nrings[i][j]) { k = coord_gl -> geolist[i+4][0][j]; if (plot -> show_poly[i+4][j]) { for (l=0; l < wingl -> num_rings[i][step][k-1]; l++) { prepare_rings_gl (rings -> vertices, i, j, k, l, TRUE); } } else if (! in_movie_encoding || plot -> i_rings[i] == NULL) { for (l=0; l < wingl -> num_rings[i][step][k-1]; l++) { if (wingl -> show_rpoly[i][step][k-1][l]) { prepare_rings_gl (rings -> vertices, i, j, k, l, TRUE); } } } } } if (in_movie_encoding && plot -> i_rings[i] != NULL) { for (l=0; l i_rings[i][0][0]; l++) { j = plot -> i_rings[i][l+1][0]; k = coord_gl -> geolist[i+4][0][j]; prepare_rings_gl (rings -> vertices, i, j, k, plot -> i_rings[i][l+1][1], TRUE); } } } wingl -> ogl_glsl[RINGS][step][0] = init_shader_program (RINGS, GLSL_POLYEDRA, full_vertex, NULL, full_color, GL_TRIANGLES, 3, 1, TRUE, rings); g_free (rings); } } wingl -> create_shaders[RINGS] = FALSE; } Atomes-GNU-1.1.14/src/opengl/draw/d_selection.c000066400000000000000000000757571457665371200211660ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file d_selection.c * @short Functions to prepare the OpenGL rendering of the selected: atom(s), clone(s), bond(s) and clone bond(s) \n Functions to prepare the unique color rendering for picking the atom(s) and bond(s) * @author Sébastien Le Roux */ /* * This file: 'd_selection.c' * * Contains: * - The functions to prepare the OpenGL rendering of the selected: atom(s), clone(s), bond(s) and clone bond(s) - The functions to prepare the unique color rendering for picking the atom(s) and bond(s) * * List of functions: int find_selected_clone_vertices (int style, int at); int find_selected_bond_vertices (int sty, int at, int sp, int bi, int pi, int cap); int get_clone_id (int at, int bt); int render_selected (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader); int render_picked (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader); int prepare_selection_shaders (int style, int shaders, int clone, int type, gboolean do_bonds); int check_selection (int style, int type); int create_selection_lists (); int create_pick_lists (); void setup_selected_clone_vertices (int style, int at, int pi, float * vertices); void prepare_selected_bond (int sty, int cap, int bi, int pi, atom * at, atom * bt, float * vertices); void setup_all_selected_bond_vertices (int sty, int cap, int bi, int at, int sb, int pi, float * vertices); void prepare_selected (int style, gboolean cylinder, int clone, int type); void prepare_picked (int style, gboolean cylinder, int clone, int type); */ #include "global.h" #include "glview.h" #include "dlp_field.h" extern void create_atom_lists (gboolean to_pick); extern int create_bond_lists (gboolean to_pick); extern object_3d * draw_sphere (int quality); extern object_3d * draw_cylinder (int quality, float ra, float rb); extern object_3d * draw_cylinder_cap (int quality, float rad, gboolean picked); extern void setup_line_vertice (float * vertices, vec3_t pos, ColRGBA col, float alpha); extern void setup_sphere_vertice (float * vertices, vec3_t pos, ColRGBA col, float rad, float alpha); extern void setup_cylinder_vertice (float * vertices, vec3_t pos_a, vec3_t pos_b, ColRGBA col, float rad, float alpha); extern void setup_triangles (float * vertices, vec3_t sa, vec3_t sb, vec3_t sc); extern float get_bond_radius (int sty, int ac, int at, int b, int sel); extern void setup_this_atom (int style, gboolean to_pick, int picked, atom * at, int ac, float * vert, float al); extern void prepare_clone (int style, gboolean to_pick, int picked, atom at, atom bt, float x, float y, float z, float * vertices); extern void setup_this_bond (int sty, gboolean to_pick, gboolean picked, int cap, int bi, int pi, atom * at, atom * bt, float al, float * vertices); /*! \fn void setup_selected_clone_vertices (int style, int at, int pi, float * vertices) \brief fill the OpenGL data buffer for a selected atom clone bonds to render \param style rendering style \param at the atom id \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param vertices the OpenGL buffer data to fill */ void setup_selected_clone_vertices (int style, int at, int pi, float * vertices) { int i, j; gboolean doit; distance d; for (i=0; i < proj_gl -> atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if (d.pbc) { if (in_movie_encoding && plot -> at_data != NULL) { doit = (plot -> at_data[at].pick[pi] && plot -> at_data[at].style == style) ? TRUE : FALSE; } else { doit = (proj_gl -> atoms[0][at].pick[pi] && proj_gl -> atoms[0][at].style == style) ? TRUE : FALSE; } if (doit) { prepare_clone (style, FALSE, pi+1, proj_gl -> atoms[step][at], proj_gl -> atoms[step][j], d.x, d.y, d.z, vertices); } } } } /*! \fn int find_selected_clone_vertices (int style, int at) \brief find the number of selected atom(s) to render \param style rendering style \param at the atom id */ int find_selected_clone_vertices (int style, int at) { int i, j, k; gboolean doit = FALSE; distance d; if (in_movie_encoding && plot -> at_data != NULL) { if (plot -> at_data[at].show[1] && plot -> at_data[at].style == style) doit = TRUE; } else { if (proj_gl -> atoms[step][at].show[1] && proj_gl -> atoms[step][at].style == style) doit = TRUE; } k = 0; if (doit) { for (i=0; i < proj_gl -> atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if (d.pbc) k ++; } } return k; } /*! \fn int find_selected_bond_vertices (int sty, int at, int sp, int bi, int pi, int cap) \brief find the number of selected bond(s) to render \param sty rendering style \param at the atom id \param sp the chemical species \param bi atom (0) or clone (1) \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param cap render cylinder caps (1/0) */ int find_selected_bond_vertices (int sty, int at, int sp, int bi, int pi, int cap) { int i, j, k, l, m, n; distance dist; gboolean show_a, show_b, show_c, show_d; l = 0; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[at].show[bi]; show_c = plot -> at_data[at].pick[pi]; m = plot -> at_data[at].style; } else { show_a = proj_gl -> atoms[step][at].show[bi]; show_c = proj_gl -> atoms[step][at].pick[pi]; m = proj_gl -> atoms[step][at].style; } if (show_a && show_c && m == sty) { for (i=0; i atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; if (in_movie_encoding && plot -> at_data != NULL) { show_b = plot -> at_data[j].show[bi]; show_d = plot -> at_data[j].pick[pi]; n = plot -> at_data[j].style; k = proj_gl -> atoms[0][j].sp; } else { show_b = proj_gl -> atoms[step][j].show[bi]; show_d = proj_gl -> atoms[step][j].pick[pi]; n = proj_gl -> atoms[step][j].style; k = proj_gl -> atoms[step][j].sp; } if (sp == -1 || k == sp) { dist = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if ((bi && dist.pbc) ||(! bi && ! dist.pbc)) { if (cap) { if ((! show_b || ! show_d) || (m != n)) l += 1 + bi; } else { l += 1 + bi; } } } } } return 2*l; } /*! \fn int get_clone_id (int at, int bt) \brief get the bond id of cloned bond \param at 1st atom \param bt 2nd atom */ int get_clone_id (int at, int bt) { int i, j, k; for (i=0; i < wingl -> bonds[step][1]; i++) { j = wingl -> bondid[step][1][i][0]; k = wingl -> bondid[step][1][i][1]; if ((j == at && k == bt) || (j == bt && k == at)) return i; } return -1; } /*! \fn void prepare_selected_bond (int sty, int cap, int bi, int pi, atom * at, atom * bt, float * vertices) \brief prepare the rendering of a selected bond \param sty rendering style \param cap render cylinder caps (1/0) \param bi atom (0) or clone (1) \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param at 1st atom \param bt 2nd atom \param vertices the OpenGL buffer data to fill */ void prepare_selected_bond (int sty, int cap, int bi, int pi, atom * at, atom * bt, float * vertices) { if (bi == 0) { setup_this_bond (sty, FALSE, TRUE, cap, bi, pi, at, bt, 1.0, vertices); } else { atom * tmp_a, * tmp_b; distance d = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, at, bt); tmp_a = duplicate_atom (at); tmp_b = duplicate_atom (at); tmp_a -> pick[pi] = bt -> pick[pi]; tmp_a -> style = bt -> style; tmp_a -> sp = bt -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> x -= d.x; tmp_a -> y -= d.y; tmp_a -> z -= d.z; setup_this_bond (sty, FALSE, TRUE, cap, bi, pi, tmp_b, tmp_a, 0.5, vertices); g_free (tmp_a); g_free (tmp_b); tmp_a = duplicate_atom (bt); tmp_b = duplicate_atom (bt); tmp_a -> pick[pi] = at -> pick[pi]; tmp_a -> style = at -> style; tmp_a -> sp = at -> sp + proj_sp; tmp_b -> sp += proj_sp; tmp_a -> id = at -> id; tmp_a -> x += d.x; tmp_a -> y += d.y; tmp_a -> z += d.z; setup_this_bond (sty, FALSE, TRUE, cap, bi, pi, tmp_a, tmp_b, 0.5, vertices); g_free (tmp_a); g_free (tmp_b); } } /*! \fn void setup_all_selected_bond_vertices (int sty, int cap, int bi, int at, int sb, int pi, float * vertices) \brief prepare the rendering of all selected bond(s) \param sty rendering style \param cap render cylinder caps (1/0) \param bi atom (0) or clone (1) \param at atom id \param sb target chemical species \param pi 0 = mouse analysis mode, 1 = mouse edition mode \param vertices the OpenGL buffer data to fill */ void setup_all_selected_bond_vertices (int sty, int cap, int bi, int at, int sb, int pi, float * vertices) { int i, j, k, l, m; distance dist; gboolean show_a, show_b, show_c, show_d; if (in_movie_encoding && plot -> at_data != NULL) { show_a = plot -> at_data[at].show[bi]; show_c = plot -> at_data[at].pick[pi]; l = plot -> at_data[at].style; } else { show_a = proj_gl -> atoms[step][at].show[bi]; show_c = proj_gl -> atoms[step][at].pick[pi]; l = proj_gl -> atoms[step][at].style; } if (show_a && show_c && l == sty) { for (i=0; i atoms[step][at].numv; i++) { j = proj_gl -> atoms[step][at].vois[i]; if (in_movie_encoding && plot -> at_data != NULL) { show_b = plot -> at_data[j].show[bi]; show_d = plot -> at_data[j].pick[pi]; m = plot -> at_data[j].style; k = proj_gl -> atoms[0][j].sp; } else { show_b = proj_gl -> atoms[step][j].show[bi]; show_d = proj_gl -> atoms[step][j].pick[pi]; m = proj_gl -> atoms[step][j].style; k = proj_gl -> atoms[step][j].sp; } if (sb == -1 || k == sb) { dist = distance_3d (cell_gl, (cell_gl -> npt) ? step : 0, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j]); if ((bi && dist.pbc) ||(! bi && ! dist.pbc)) { if (cap) { if ((! show_b || ! show_d) || (l != m)) { prepare_selected_bond (sty, cap, bi, pi, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j], vertices); } } else { prepare_selected_bond (sty, cap, bi, pi, & proj_gl -> atoms[step][at], & proj_gl -> atoms[step][j], vertices); } } } } } } int atoms[NUM_STYLES][2]; int bonds[NUM_STYLES][2], caps[NUM_STYLES][2]; int npbds[NUM_STYLES][2], npcps[NUM_STYLES][2]; int *** nbonds[NUM_STYLES][2]; /*! \fn void prepare_selected (int style, gboolean cylinder, int clone, int type) \brief prepare the list of selected bond(s) to render \param style rendering style \param cylinder cylinder (1) or line (1) \param clone atom (0) or clone (1) \param type 0 = mouse analysis mode, 1 = mouse edition mode */ void prepare_selected (int style, gboolean cylinder, int clone, int type) { int h, i, j; atom_in_selection * sel; npbds[style][type] = npcps[style][type] = 0; if (cylinder) { sel = plot -> selected[type] -> first; while (sel) { for (i=0; i id, -1, i, type, 0); npcps[style][type] += find_selected_bond_vertices (style-1, sel -> id, -1, i, type, 1); } sel = sel -> next; } bonds[style][type] = (npbds[style][type]) ? 1 : 0; caps[style][type] = (npcps[style][type]) ? 1 : 0; } else { sel = plot -> selected[type] -> first; while (sel) { for (i=0; i sp][j] += find_selected_bond_vertices (style-1, sel -> id, j, i, type, 0); } } sel = sel -> next; } for (h=0; h atoms[0][i].pick[type]) { for (h=0; h atoms[0][i].pick[type]) { for (h=0; h atoms[0][i].sp][j] += find_selected_bond_vertices (style-1, i, j, h, type, 0); } } } } for (h=0; h quality, 1.0, 1.0); cyl -> num_instances = (bonds/2) * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); cyl -> inst_buffer_size = CYLI_BUFF_SIZE; cyl -> instances = allocfloat (CYLI_BUFF_SIZE*cyl -> num_instances); if (caps) { cap = draw_cylinder_cap (plot -> quality, 1.0, TRUE); cap -> num_instances = (ncaps/2) * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); cap -> inst_buffer_size = CAPS_BUFF_SIZE; cap -> instances = allocfloat (CAPS_BUFF_SIZE*cap -> num_instances); } for (h=0; h selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { for (k=0; k id, k, type, (h == 0) ? cyl -> instances: cap -> instances); } if (sel -> next != NULL) sel = sel -> next; } } } l = 1; wingl -> ogl_glsl[SELEC][step][shader] = init_shader_program (SELEC, GLSL_CYLINDERS, cylinder_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 6, 1, cylinder, cyl); g_free (cyl); if (caps) { l ++; wingl -> ogl_glsl[SELEC][step][shader+1] = init_shader_program (SELEC, GLSL_CAPS, cap_vertex, NULL, full_color, GL_TRIANGLE_FAN, 5, 1, cylinder, cap); g_free (cap); } } else { l = 0; for (h=0; h vert_buffer_size = LINE_BUFF_SIZE; cyl -> num_vertices = nbonds[style][type][h][i][j] * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); cyl -> vertices = allocfloat (cyl -> vert_buffer_size*cyl -> num_vertices); nbs = 0; sel = plot -> selected[type] -> first; for (k=0; k< plot -> selected[type] -> selected; k++) { if (sel -> sp == i) { setup_all_selected_bond_vertices (style-1, 0, h, sel -> id, j, type, cyl -> vertices); } if (sel -> next != NULL) sel = sel -> next; } wingl -> ogl_glsl[SELEC][step][shader+l] = init_shader_program (SELEC, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, cylinder, cyl); wingl -> ogl_glsl[SELEC][step][shader+l] -> line_width = get_bond_radius (style, h, i+proj_sp*h, j+proj_sp*h, TRUE); g_free (cyl); l++; } } } } } return l; } /*! \fn int render_picked (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader) \brief prepare the OpenGL rendering data of to be picked bond / clone bond \param style rendering style \param cylinder cylinders (1) or lines (0) \param caps cylinder caps (1/0) \param bonds number of selected bonds \param ncaps number of cylinder caps \param type 0 = mouse analysis mode, 1 = mouse edition mode \param clone atom (0) or clone (1) \param shader shader id number */ int render_picked (int style, gboolean cylinder, int caps, int bonds, int ncaps, int type, int clone, int shader) { int h, i, j, k, l; object_3d * cyl, * cap; if (cylinder) { cyl = draw_cylinder (plot -> quality, 1.0, 1.0); cyl -> num_instances = (bonds/2) * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); cyl -> inst_buffer_size = CYLI_BUFF_SIZE; cyl -> instances = allocfloat (CYLI_BUFF_SIZE*cyl -> num_instances); if (caps) { cap = draw_cylinder_cap (plot -> quality, 1.0, TRUE); cap -> num_instances = (ncaps/2) * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); cap -> inst_buffer_size = CAPS_BUFF_SIZE; cap -> instances = allocfloat (CAPS_BUFF_SIZE*cap -> num_instances); } for (h=0; h atoms[0][j].pick[type]) { for (k=0; k instances: cap -> instances); } } } } } l = 1; wingl -> ogl_glsl[SELEC][step][shader] = init_shader_program (SELEC, GLSL_CYLINDERS, cylinder_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 6, 1, cylinder, cyl); g_free (cyl); if (caps) { l ++; wingl -> ogl_glsl[SELEC][step][shader+1] = init_shader_program (SELEC, GLSL_CAPS, cap_vertex, NULL, full_color, GL_TRIANGLE_FAN, 5, 1, cylinder, cap); g_free (cap); } } else { l = 0; for (h=0; h vert_buffer_size = LINE_BUFF_SIZE; cyl -> num_vertices = nbonds[style][type][h][i][j] * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); cyl -> vertices = allocfloat (cyl -> vert_buffer_size*cyl -> num_vertices); nbs = 0; for (k=0; k atoms[0][k].pick[type] && proj_gl -> atoms[0][k].sp == i) { setup_all_selected_bond_vertices (style-1, 0, h, k, j, type, cyl -> vertices); } } wingl -> ogl_glsl[SELEC][step][shader+l] = init_shader_program (SELEC, GLSL_LINES, line_vertex, NULL, line_color, GL_LINES, 2, 1, cylinder, cyl); wingl -> ogl_glsl[SELEC][step][shader+l] -> line_width = get_bond_radius (style, h, i+proj_sp*h, j+proj_sp*h, TRUE); g_free (cyl); l++; } } } } } return l; } /*! \fn int prepare_selection_shaders (int style, int shaders, int clone, int type, gboolean do_bonds) \brief prepare selection shaders \param style rendering style \param shaders shader id number \param clone atoms (0) or clones (1) \param type 0 = mouse analysis mode, 1 = mouse edition mode \param do_bonds render bonds (1/0) */ int prepare_selection_shaders (int style, int shaders, int clone, int type, gboolean do_bonds) { int j; int nshaders = 0; atom_in_selection * sel; gboolean doit; gboolean sphere = TRUE; gboolean cylinder = FALSE; object_3d * atos; // Bonds if (do_bonds) { if (bonds[style][type]) { if ((style-1 == NONE && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || style-1 == BALL_AND_STICK || style-1 == CYLINDERS) cylinder = TRUE; if (plot -> selected[type] -> selected > 0) { nshaders += render_selected (style, cylinder, caps[style][type], npbds[style][type], npcps[style][type], type, clone, shaders); } else { nshaders += render_picked (style, cylinder, caps[style][type], npbds[style][type], npcps[style][type], type, clone, shaders); } g_free (nbonds[style][type]); } } // Atoms if ((style-1 == NONE && (plot -> style == WIREFRAME || plot -> style == PUNT)) || style-1 == WIREFRAME || style-1 == PUNT) sphere = FALSE; if (sphere) { atos = draw_sphere (plot -> quality); } else { atos = g_malloc0 (sizeof*atos); atos -> vert_buffer_size = 3; atos -> num_vertices = 1; atos -> vertices = allocfloat (3); atos -> vertices[0] = atos -> vertices[1] = atos -> vertices[2] = 0.0; } atos -> num_instances = atoms[style][type] * (plot -> extra_cell[0]+1)*(plot -> extra_cell[1]+1)*(plot -> extra_cell[2]+1); atos -> inst_buffer_size = ATOM_BUFF_SIZE; atos -> instances = allocfloat (atos -> num_instances*ATOM_BUFF_SIZE); nbl = 0; if (plot -> selected[type] -> selected) { sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { if (in_movie_encoding && plot -> at_data != NULL) { doit = (plot -> at_data[sel -> id].show[0] && plot -> at_data[sel -> id].style == style-1) ? TRUE : FALSE; } else { doit = (proj_gl -> atoms[step][sel -> id].show[0] && proj_gl -> atoms[step][sel -> id].style == style-1) ? TRUE : FALSE; } if (doit) { setup_this_atom (style-1, FALSE, type+1, & proj_gl -> atoms[step][sel -> id], 0, atos -> instances, 0.75); } if (sel -> next != NULL) sel = sel -> next; } if (plot -> draw_clones) { // Clones instances sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { if (proj_gl -> atoms[step][sel -> id].cloned) { setup_selected_clone_vertices (style-1, sel -> id, type, atos -> instances); } if (sel -> next != NULL) sel = sel -> next; } } } else { for (j=0; j at_data != NULL) { doit = (plot -> at_data[j].pick[type] && plot -> at_data[j].show[0] && plot -> at_data[j].style == style-1) ? TRUE : FALSE; } else { doit = (proj_gl -> atoms[step][j].pick[type] && proj_gl -> atoms[step][j].show[0] && proj_gl -> atoms[step][j].style == style-1) ? TRUE : FALSE; } if (doit) { setup_this_atom (style-1, FALSE, type+1, & proj_gl -> atoms[step][j], 0, atos -> instances, 0.75); } } if (plot -> draw_clones) { // Clones instances for (j=0; j atoms[step][j].cloned) setup_selected_clone_vertices (style-1, j, type, atos -> instances); } } } if (sphere) { wingl -> ogl_glsl[SELEC][step][nshaders+shaders] = init_shader_program (SELEC, GLSL_SPHERES, sphere_vertex, NULL, full_color, GL_TRIANGLE_STRIP, 4, 1, TRUE, atos); } else { wingl -> ogl_glsl[SELEC][step][nshaders+shaders] = init_shader_program (SELEC, GLSL_POINTS, point_vertex, NULL, point_color, GL_POINTS, 4, 1, FALSE, atos); } nshaders ++; g_free (atos); return nshaders; } /*! \fn int check_selection (int style, int type) \brief check selection : atom(s) in selection ? \param style rendering style \param type 0 = mouse analysis mode, 1 = mouse edition mode */ int check_selection (int style, int type) { atom_in_selection * sel; int j, k; k = 0; if (plot -> selected[type] -> selected) { sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { if (in_movie_encoding && plot -> at_data != NULL) { if (plot -> at_data[sel -> id].show[0] && plot -> at_data[sel -> id].style == style) k ++; } else { if (proj_gl -> atoms[step][sel -> id].show[0] && proj_gl -> atoms[step][sel -> id].style == style) k ++; } if (sel -> next != NULL) sel = sel -> next; } if (plot -> draw_clones) { // Clones instances sel = plot -> selected[type] -> first; for (j=0; j< plot -> selected[type] -> selected; j++) { k += find_selected_clone_vertices (style, sel -> id); if (sel -> next != NULL) sel = sel -> next; } } } else { for (j=0; j atoms[0][j].pick[type] && proj_gl -> atoms[0][j].show[0] && proj_gl -> atoms[0][j].style == style) k ++; } if (plot -> draw_clones) { // Clones instances for (j=0; j atoms[0][j].pick[type]) k += find_selected_clone_vertices (style, j); } } } return k; } /*! \fn int create_selection_lists () \brief prepare the selected atom(s) and bond(s) OpenGL rendering */ int create_selection_lists () { int h, i, j, k, l; #ifdef DEBUG g_debug ("Selected LIST"); #endif gboolean do_bonds; gboolean cylinder = FALSE; cleaning_shaders (wingl, SELEC); wingl -> create_shaders[SELEC] = FALSE; i = (plot -> draw_clones) ? 2 : 1; j = 2; int nshaders = 0; for (k=0; k selected[k] -> selected > 0 || (! k && wingl -> picked > 0)) { for (h=0; h style == PUNT || plot -> style == SPHERES)) || h-1 == PUNT || h-1 == SPHERES) do_bonds = FALSE; atoms[h][k] = check_selection (h-1, k); nshaders += (atoms[h][k]) ? 1 : 0; if (do_bonds) { nbonds[h][k] = alloctint (i, proj_sp, proj_sp); if ((! h && (plot -> style == BALL_AND_STICK || plot -> style == CYLINDERS)) || h-1 == BALL_AND_STICK || h-1 == CYLINDERS) cylinder = TRUE; if (plot -> selected[k] -> selected > 0) { prepare_selected (h, cylinder, i, k); } else { prepare_picked (h, cylinder, i, k); } nshaders += bonds[h][k] + caps[h][k]; } } } } if (! nshaders) return 0; wingl -> ogl_glsl[SELEC][step] = g_malloc0 (nshaders*sizeof*wingl -> ogl_glsl[SELEC][step]); h = 0; for (k=0; k style == PUNT || plot -> style == SPHERES)) || l-1 == PUNT || l-1 == SPHERES) do_bonds = FALSE; if (plot -> selected[k] -> selected > 0 || (! k && wingl -> picked > 0)) { h += prepare_selection_shaders (l, h, i, k, do_bonds); } } } } return nshaders; } /*! \fn int create_pick_lists () \brief prepare the picking list OpenGL rendering */ int create_pick_lists () { int i, j, k, l; #ifdef DEBUG g_debug ("Pick LIST"); #endif cleaning_shaders (wingl, PICKS); wingl -> create_shaders[PICKS] = FALSE; i = (plot -> draw_clones) ? 2:1; j = 0; for (k=0; k show_atom[k][l]; } } if (j == 0) return 0; k = 0; for (i=0; i at_data != NULL) { k += plot -> at_data[i].show[0]; k += plot -> at_data[i].show[1]; } else { k += proj_gl -> atoms[step][i].show[0]; k += proj_gl -> atoms[step][i].show[1]; } } if (k == 0) return 0; int nshaders = 1; gboolean bonds = FALSE; i = proj_at; if (plot -> draw_clones) i += 2 * wingl -> bonds[step][1]; j = wingl -> bonds[step][0] + wingl -> bonds[step][1]; if (plot -> style != SPHERES && plot -> style != PUNT && j > 0) { bonds = TRUE; nshaders ++; i += 2 * wingl -> bonds[step][0]; if (plot -> draw_clones) i += 4 * wingl -> bonds[step][1]; } int tmp_style = plot -> style; plot -> style = BALL_AND_STICK; if (wingl -> color_to_pick != NULL) { g_free (wingl -> color_to_pick); wingl -> color_to_pick = NULL; } wingl -> to_be_picked = 0; wingl -> color_to_pick = allocint(i); wingl -> n_shaders[PICKS][0] = nshaders; wingl -> ogl_glsl[PICKS][0] = g_malloc0 (nshaders*sizeof*wingl -> ogl_glsl[PICKS][0]); gColorID[0] = gColorID[1] = gColorID[2] = 0; create_atom_lists (TRUE); wingl -> bonds_to_be_picked = 0; if (bonds) create_bond_lists (TRUE); plot -> style = tmp_style; return nshaders; } Atomes-GNU-1.1.14/src/opengl/draw/image.c000066400000000000000000000145011457665371200177340ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file image.c * @short Functions to render an image from the OpenGL window * @author Sébastien Le Roux */ /* * This file: 'image.c' * * Contains: * - The functions to render an image from the OpenGL window * * List of functions: void render_image (glwin * view, video_options * iopts); G_MODULE_EXPORT void run_render_image (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "movie.h" #include #ifndef GTKGLAREA extern GdkWindow * xwin; extern GLXContext glcontext; extern Pixmap pixmap; extern GLXPixmap glpixmap; #endif extern GdkPixbuf * pixbuf; char * image_name[IMAGE_FORMATS] = {"PNG", "JPG/JPEG", "TIFF", "Bitmap"}; char * image_list[IMAGE_FORMATS] = {"png", "jpeg", "tiff", "bmp"}; extern void fill_image (VideoStream * vs, int width, int height, glwin * view); extern void init_frame_buffer (int x, int y); extern void close_frame_buffer (); #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_render_image (GtkNativeDialog * info, gint response_id, gpointer data) \brief render an image from the OpenGL window - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_render_image (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data) \brief render an image from the OpenGL window - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_render_image (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { video_options * iopts = (video_options *)data; gchar * videofile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif init_frame_buffer (iopts -> video_res[0], iopts -> video_res[1]); project * this_proj = get_project_by_id (iopts -> proj); glwin * view = this_proj -> modelgl; init_opengl (view); int i, x, y, q; for (i=0; i n_shaders[i][step] = -1; } recreate_all_shaders (view); in_movie_encoding = TRUE; if (iopts -> oglquality != 0) { q = view -> anim -> last -> img -> quality; view -> anim -> last -> img -> quality = iopts -> oglquality; } for (i=0; i<2; i++) tmp_pixels[i] = view -> pixels[i]; x = view -> pixels[0]; y = view -> pixels[1] - 100; view -> pixels[0] = iopts -> video_res[0]; view -> pixels[1] = iopts -> video_res[1]; fill_image (NULL, iopts -> video_res[0], iopts -> video_res[1], view); GError * error = NULL; gboolean res = gdk_pixbuf_savev (pixbuf, videofile, image_list[iopts -> codec], NULL, NULL, & error); if (! res) { show_warning ("An error occurred when exporting an image\nyou might want to try again\nsorry for the trouble", view -> win); } close_frame_buffer (); in_movie_encoding = FALSE; if (iopts -> oglquality != 0) view -> anim -> last -> img -> quality = q; for (i=0; i n_shaders[i][step] = -1; } recreate_all_shaders (view); reshape (view, x, y); update (view); } else { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn void render_image (glwin * view, video_options * iopts) \brief render an image from the OpenGL window - prepare the dialog \param view the target glwin \param iopts the rendering options */ void render_image (glwin * view, video_options * iopts) { GtkFileFilter * filter; gchar * str; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser ("Render Image", GTK_WINDOW(view -> win), GTK_FILE_CHOOSER_ACTION_SAVE, "Save"); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); str = g_strdup_printf ("%s.%s", prepare_for_title(get_project_by_id(view -> proj) -> name), image_list[iopts -> codec]); gtk_file_chooser_set_current_name (chooser, str); g_free (str); filter = gtk_file_filter_new (); str = g_strdup_printf ("%s file (*.%s)", image_name[iopts -> codec], image_list[iopts -> codec]); gtk_file_filter_set_name (GTK_FILE_FILTER(filter), str); g_free (str); str = g_strdup_printf ("*.%s", image_list[iopts -> codec]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), str); g_free (str); gtk_file_chooser_add_filter (chooser, filter); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_render_image), iopts); #else run_this_gtk_dialog (info, G_CALLBACK(run_render_image), iopts); #endif } Atomes-GNU-1.1.14/src/opengl/draw/movie.c000066400000000000000000001305201457665371200177710ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file movie.c * @short Functions to encode a movie / render an image from the OpenGL rendering * @author Sébastien Le Roux */ /* * This file: 'movie.c' * * Contains: * - The functions to encode a movie / render an image from the OpenGL rendering * * List of functions: gboolean check_to_update_shaders (glwin * view, image * img_a, image * img_b, int ogl_q); gboolean create_movie (glwin * view, video_options * vopts, gchar * videofile); void convert_rgb_pixbuf_to_yuv (GdkPixbuf * pixbuf, AVFrame * picture, int w, int h); void fill_image (VideoStream * vs, int width, int height, glwin * view); void set_old_cmap (image * img, int stp, int id); void init_frame_buffer (int x, int y); void close_frame_buffer (); void save_movie (glwin * view, video_options * vopts); static void ffmpeg_encoder_set_frame_yuv_from_rgb (uint8_t * rgb, VideoStream * vs); static void write_video_frame (AVFormatContext * f_context, VideoStream * vs, int frame_id, glwin * view); static void close_stream (AVFormatContext * fc, VideoStream * vs); G_MODULE_EXPORT void run_save_movie (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_save_movie (GtkDialog * info, gint response_id, gpointer data); static GLubyte * capture_opengl_image (unsigned int width, unsigned int height); AVCodecContext * add_codec_context (AVFormatContext * fc, const AVCodec * vc, video_options * vopts); static AVFrame * alloc_video_frame (AVCodecContext * cc); VideoStream * add_video_stream (AVFormatContext * fc, const AVCodec * vc, video_options * vopts); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "movie.h" #if LIBAVCODEC_VERSION_MAJOR < 56 # define PIXEL_FORMAT PIX_FMT_YUV420P #else # define PIXEL_FORMAT AV_PIX_FMT_YUV420P #endif #define AVS_FRAME_ALIGN 16 #define RGB_TO_Y(pixels, loc) (0.29900 * pixels[loc] + 0.58700 * pixels[loc+1] + 0.11400 * pixels[loc+2]) #define RGB_TO_U(pixels, loc)(-0.16874 * pixels[loc] - 0.33126 * pixels[loc+1] + 0.50000 * pixels[loc+2]+128.0) #define RGB_TO_V(pixels, loc) (0.50000 * pixels[loc] - 0.41869 * pixels[loc+1] - 0.08131 * pixels[loc+2]+128.0) #define AVIO_FLAG_READ 1 #define AVIO_FLAG_WRITE 2 #define AVIO_FLAG_READ_WRITE (AVIO_FLAG_READ|AVIO_FLAG_WRITE) #ifndef AV_ROUND_PASS_MINMAX #define AV_ROUND_PASS_MINMAX 8192 #endif #ifndef URL_WRONLY # define URL_WRONLY 1 #endif char * codec_name[VIDEO_CODECS] = {"MPEG-1/2", "MPEG-4", "H264", "Theora", "Flash"}; char * codec_list[VIDEO_CODECS] = {"mpeg", "avi", "mkv", "ogv", "flv"}; #if LIBAVCODEC_VERSION_MAJOR > 54 int codec_id[VIDEO_CODECS] = {AV_CODEC_ID_MPEG2VIDEO, AV_CODEC_ID_MPEG4, AV_CODEC_ID_H264, AV_CODEC_ID_THEORA, AV_CODEC_ID_FLV1}; #else int codec_id[VIDEO_CODECS] = {CODEC_ID_MPEG2VIDEO, CODEC_ID_MPEG4, CODEC_ID_H264, CODEC_ID_THEORA, CODEC_ID_FLV1}; #endif /*#else GdkGLDrawable * gldrawable; GdkGLContext * glcontext; GdkPixmap * pixmap; GdkGLPixmap * glpixmap; #endif*/ GdkPixbuf * pixbuf; uint8_t * video_outbuf; int video_outbuf_size; int num_frames; int frame_start; /*! \fn void convert_rgb_pixbuf_to_yuv (GdkPixbuf * pixbuf, AVFrame * picture, int w, int h) \brief convert an RGB pixbuf to an YUV picture frame \param pixbuf the Gdk RGB pixbuf to convert \param picture the AVFrame to store the data \param w image width \param h image height */ void convert_rgb_pixbuf_to_yuv (GdkPixbuf * pixbuf, AVFrame * picture, int w, int h) { gint x, y, location, location2; gint inner_x, inner_y, half_location; gfloat cr, cb; gint pixbuf_xsize, pixbuf_ysize; guchar * pixels; gint row_stride; gboolean x_odd, y_odd; pixbuf_xsize = gdk_pixbuf_get_width (pixbuf); pixbuf_ysize = gdk_pixbuf_get_height (pixbuf); pixels = gdk_pixbuf_get_pixels (pixbuf); row_stride = gdk_pixbuf_get_rowstride (pixbuf); y_odd = (pixbuf_ysize & 0x1); x_odd = (pixbuf_xsize & 0x1); /* note, the Cr and Cb info is subsampled by 2x2 */ for (y=0; y data[0][inner_x+inner_y*w] = RGB_TO_Y (pixels, location); cb += RGB_TO_U (pixels, location); cr += RGB_TO_V (pixels, location); } half_location = x/2 + y*w/4; picture -> data[1][half_location] = cb/4.0; picture -> data[2][half_location] = cr/4.0; } if (x_odd) { location = y*row_stride+3*x; location2 = (y+1)*row_stride+3*x; picture -> data[0][x+y*w] = RGB_TO_Y (pixels, location); picture -> data[0][x+1+y*w] = 0; picture -> data[0][x+(y+1)*w] = RGB_TO_Y (pixels, location2); picture -> data[0][x+1+(y+1)*w] = 0; half_location = x/2 + y*w/4; picture -> data[1][half_location] = (RGB_TO_U(pixels, location) + RGB_TO_U(pixels, location2)+256)/4.0; picture -> data[2][half_location] = (RGB_TO_V(pixels, location) + RGB_TO_V(pixels, location2)+256)/4.0; } } if (y_odd) { for (x=0; x data[0][x+y*w] = RGB_TO_Y(pixels, location); picture -> data[0][x+1+y*w] = RGB_TO_Y(pixels, location2); picture -> data[0][x+(y+1)*w] = 0; picture -> data[0][x+1+(y+1)*w] = 0; half_location = x/2 + y*w/4; picture -> data[1][half_location] = (RGB_TO_U(pixels, location)+RGB_TO_U(pixels, location2)+256)/4.0; picture -> data[2][half_location] = (RGB_TO_V(pixels, location)+RGB_TO_V(pixels, location2)+256)/4.0; } if (x_odd) { location = y*row_stride+3*x; picture -> data[0][x+y*w] = RGB_TO_Y(pixels, location); picture -> data[0][x+1+y*w] = 0; picture -> data[0][x+(y+1)*w] = 0; picture -> data[0][x+1+(y+1)*w] = 0; half_location = x/2 + y*w/4; picture -> data[1][half_location] = (RGB_TO_U(pixels, location)+384)/4.0; picture -> data[2][half_location] = (RGB_TO_V(pixels, location)+384)/4.0; } } } /*! \fn static void ffmpeg_encoder_set_frame_yuv_from_rgb (uint8_t * rgb, VideoStream * vs) \brief set an encoder YUV frame from an RGB image \param rgb the RGB data to convert \param vs the video stream to encode the data */ static void ffmpeg_encoder_set_frame_yuv_from_rgb (uint8_t * rgb, VideoStream * vs) { const int in_linesize = 4 * vs -> cc -> width; vs -> sws_ctx = sws_getCachedContext (vs -> sws_ctx, vs -> cc -> width, vs -> cc -> height, AV_PIX_FMT_BGRA, vs -> cc -> width, vs -> cc -> height, PIXEL_FORMAT, 0, NULL, NULL, NULL); sws_scale (vs -> sws_ctx, (const uint8_t * const *)&rgb, & in_linesize, 0, vs -> cc -> height, vs -> frame -> data, vs -> frame -> linesize); } /*! \fn static GLubyte * capture_opengl_image (unsigned int width, unsigned int height) \brief capture an OpenGL image from an OpenGL rendering */ static GLubyte * capture_opengl_image (unsigned int width, unsigned int height) { size_t i, nvals; nvals = width * height * 4; GLubyte * pixels = g_malloc (nvals * sizeof(GLubyte)); GLubyte * rgb = g_malloc (nvals * sizeof(GLubyte)); glReadPixels (0, 0, width, height, GL_BGRA, GL_UNSIGNED_BYTE, pixels); // Flip data veritcally for (i = 0; i < height; i++) { memcpy (rgb + 4 * width * i, pixels + 4 * width * (height - i - 1), 4 * width); } g_free (pixels); return rgb; } //#endif /*! \fn void fill_image (VideoStream * vs, int width, int height, glwin * view) \brief render an image from an OpenGL rendering \param vs the video stream \param width image width \param height image height \param view the target glwin */ void fill_image (VideoStream * vs, int width, int height, glwin * view) { // opengl call is here !!! reshape (view, width, height); draw (view); // Might need some correction(s) here for HiDPI screens GLubyte * image = capture_opengl_image (width, height); if (vs != NULL) { //if (movie) convert_rgb_pixbuf_to_yuv (pixbuf, frame, width, height); ffmpeg_encoder_set_frame_yuv_from_rgb (image, vs); } else { cairo_surface_t * surf = cairo_image_surface_create_for_data ((guchar *)image, CAIRO_FORMAT_ARGB32, width, height, cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width)); pixbuf = convert_to_pixbuf (surf); cairo_surface_destroy (surf); } g_free (image); } /*! \fn static void write_video_frame (AVFormatContext * f_context, VideoStream * vs, int frame_id, glwin * view) \brief write a video frame from an OpenGL render \param f_context the format context to use \param vs the video stream \param frame_id the frame id number \param view the target glwin */ static void write_video_frame (AVFormatContext * f_context, VideoStream * vs, int frame_id, glwin * view) { int out_size = 0; fill_image (vs, vs -> cc -> width, vs -> cc -> height, view); AVPacket packet; #if LIBAVCODEC_VERSION_MAJOR > 57 out_size = av_new_packet (& packet, 0); if (out_size != 0) { // "Error while encoding video frame" g_warning ("MOVIE_ENCODING:: VIDEO_FRAME:: error:: %s", av_err2str(out_size)); } // get_packet_defaults (& packet); #else av_init_packet (& packet); #endif if (! out_size) { packet.dts = packet.pts = AV_NOPTS_VALUE; packet.data = NULL; packet.size = 0; vs -> frame -> pts = frame_id + 1; out_size = avcodec_send_frame (vs -> cc, vs -> frame); if (out_size < 0) { // "Error while encoding video frame" g_warning ("MOVIE_ENCODING:: VIDEO_FRAME:: error:: %s", av_err2str (out_size)); } else { if (avcodec_receive_packet (vs -> cc, & packet) < 0) { // "Error while encoding video frame" if (frame_id + 1 > frame_start) g_warning ("MOVIE_ENCODING:: VIDEO_FRAME:: warning:: packet empty, ignoring frame= %d", frame_id); } else { av_packet_rescale_ts (& packet, vs -> cc -> time_base, vs -> st -> time_base); packet.stream_index = vs -> st -> index; packet.flags |= AV_PKT_FLAG_KEY; out_size = av_interleaved_write_frame (f_context, & packet); if (out_size != 0) { // "Error while encoding video frame" g_warning ("MOVIE_ENCODING:: VIDEO_FRAME:: error:: %s", av_err2str(out_size)); } av_packet_unref(& packet); } } } } /*! \fn static AVFrame * alloc_video_frame (AVCodecContext * cc) \brief allocate a video frame using a codec context \param cc the codec context */ static AVFrame * alloc_video_frame (AVCodecContext * cc) { AVFrame * frame; frame = av_frame_alloc (); if (! frame) { return NULL; } frame -> format = cc -> pix_fmt; frame -> width = cc -> width; frame -> height = cc -> height; if (av_frame_get_buffer (frame, 32) < 0) { return NULL; } return frame; } /*! \fn AVCodecContext * add_codec_context (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) \brief create a video codec context \param fc the format context \param vc the codec \param vopts the video encoding options */ AVCodecContext * add_codec_context (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) { AVCodecContext * cc; if (! (vc = avcodec_find_encoder (codec_id[vopts -> codec]))) { // Codec not found g_warning ("MOVIE_ENCODING:: Could not find codec:: %s", codec_name[vopts -> codec]); return NULL; } if (! (cc = avcodec_alloc_context3(vc))) { g_warning ("MOVIE_ENCODING:: Could not allocate encoding context"); return NULL; } //g_debug ("Codec_id= %d", cc -> codec_id); cc -> codec_id = codec_id[vopts -> codec]; //g_debug ("Codec_id= %d", cc -> codec_id); /* put sample parameters */ cc -> bit_rate_tolerance = vopts -> bitrate*1000; cc -> bit_rate = vopts -> bitrate*1000; /* resolution must be a multiple of two */ cc -> width = vopts -> video_res[0]; cc -> height = vopts -> video_res[1]; cc -> time_base = (AVRational){1, vopts -> framesec}; cc -> framerate = (AVRational){vopts -> framesec, 1}; if (vopts -> codec != 1 && vopts -> codec != 4) cc -> max_b_frames = 1; cc -> gop_size = vopts -> extraframes; /* emit one intra frame every n frames */ cc -> pix_fmt = PIXEL_FORMAT; if (vopts -> codec == 2) av_opt_set (cc -> priv_data, "preset", "slow", 0); /* Some container formats (like MP4) require global headers to be present Mark the encoder so that it behaves accordingly. */ #if LIBAVCODEC_VERSION_MAJOR > 57 if (fc -> oformat -> flags & AVFMT_GLOBALHEADER) cc -> flags |= AV_CODEC_FLAG_GLOBAL_HEADER; #else if (fc -> oformat -> flags & AVFMT_GLOBALHEADER) cc -> flags |= CODEC_FLAG_GLOBAL_HEADER; #endif return cc; } /*! \fn VideoStream * add_video_stream (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) \brief create video stream and the associated data buffers \param fc the format context \param vc the codec \param vopts the video encoding options */ VideoStream * add_video_stream (AVFormatContext * fc, const AVCodec * vc, video_options * vopts) { VideoStream * stream = g_malloc0 (sizeof*stream); stream -> cc = add_codec_context (fc, vc, vopts); if (stream -> cc == NULL) return NULL; #if LIBAVCODEC_VERSION_MAJOR > 53 stream -> st = avformat_new_stream (fc, vc); #else st = av_new_stream (fc, vc); #endif if (! stream -> st) { g_warning ("MOVIE_ENCODING:: Could not allocate video stream"); return NULL; } stream -> st -> time_base = stream -> cc -> time_base; stream -> frame = alloc_video_frame (stream -> cc); if (stream -> frame == NULL) { g_warning ("MOVIE_ENCODING:: Could not allocate raw frame buffer"); return NULL; } return stream; } /*! \fn static void close_stream (AVFormatContext * fc, VideoStream * vs) \brief close the video stream and free associated data buffers \param fc the format context to free \param vs the video stream to close */ static void close_stream (AVFormatContext * fc, VideoStream * vs) { avcodec_free_context (& vs -> cc); av_frame_free (& vs -> frame); sws_freeContext (vs -> sws_ctx); avformat_free_context (fc); } int * old_cmap[2]; /*! \fn void set_old_cmap (image * img, int stp, int id) \brief preserve color map information \param img the target image \param stp MD step \param id color map id (0 = atom(s), 1 = polyhedra) */ void set_old_cmap (image * img, int stp, int id) { old_cmap[id][stp] = img -> color_map[id]; } /*! \fn gboolean check_to_update_shaders (glwin * view, image * img_a, image * img_b, int ogl_q) \brief test if it is required to update the OpenGL shaders, and which one(s) \param view the target glwin \param img_a the previous image \param img_b the next image \param ogl_q OpenGL quality */ gboolean check_to_update_shaders (glwin * view, image * img_a, image * img_b, int ogl_q) { gboolean shaders = FALSE; int i, j, k; int stp = img_b -> step; if (ogl_q == 0 && img_a -> quality != img_b -> quality) { view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[MAXIS] = TRUE; view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; view -> n_shaders[VOLMS][stp] = -1; view -> create_shaders[VOLMS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; for (i=0; i<2; i++) set_old_cmap (img_b, stp, i); return TRUE; } for (i=0; i<3; i++) { if (img_a -> extra_cell[i] != img_b -> extra_cell[i]) { view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[MAXIS] = TRUE; view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; view -> n_shaders[VOLMS][stp] = -1; view -> create_shaders[VOLMS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; for (i=0; i<2; i++) set_old_cmap (img_b, stp, i); return TRUE; } } project * tmp_proj = get_project_by_id(view -> proj); coord_info * this_coord = tmp_proj -> coord; for (i=0; i<9; i++) { for (j=0; j totcoord[i]; j++) { if (img_a -> show_coord[i][j] != img_b -> show_coord[i][j]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; } } if (i < 2) { for (j=0; j totcoord[i]; j++) { if (img_a -> show_poly[i][j] != img_b -> show_poly[i][j]) { view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; } } } else if (i > 3) { for (j=0; j totcoord[i]; j++) { if (img_a -> show_poly[i][j] != img_b -> show_poly[i][j]) { view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; } } } } for (j=0; j totcoord[9]; j++) { if (img_a -> show_coord[9][j] != img_b -> show_coord[9][j]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; } } if (img_a -> draw_clones != img_b -> draw_clones) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } if (img_a -> color_map[0] != img_b -> color_map[0] || img_b -> color_map[0] != old_cmap[0][stp]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> create_shaders[LABEL] = TRUE; set_old_cmap (img_b, stp, 0); shaders = TRUE; } if (img_a -> color_map[1] != img_b -> color_map[1] || img_b -> color_map[1] != old_cmap[1][stp]) { view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; set_old_cmap (img_b, stp, 1); shaders = TRUE; } if (img_a -> step != img_b -> step) { if (view -> n_shaders[ATOMS][stp] < 0) view -> create_shaders[ATOMS] = TRUE; if (view -> n_shaders[BONDS][stp] < 0) view -> create_shaders[BONDS] = TRUE; if (view -> n_shaders[POLYS][stp] < 0) view -> create_shaders[POLYS] = TRUE; if (view -> n_shaders[RINGS][stp] < 0) view -> create_shaders[RINGS] = TRUE; if (view -> n_shaders[VOLMS][stp] < 0) view -> create_shaders[VOLMS] = TRUE; if (view -> n_shaders[SELEC][stp] < 0) view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; shaders = TRUE; } gboolean do_volms = FALSE; for (i=0; i show_vol[i] != img_b -> show_vol[i]) do_volms = TRUE; if (img_a -> vol_col[i].red != img_b -> vol_col[i].red) do_volms = TRUE; if (img_a -> vol_col[i].green != img_b -> vol_col[i].green) do_volms = TRUE; if (img_a -> vol_col[i].blue != img_b -> vol_col[i].blue) do_volms = TRUE; for (j=0; j<2; j++) { if (img_a -> fm_show_vol[j][i] == NULL && img_b -> fm_show_vol[j][i] != NULL) { do_volms = TRUE; } else if (img_a -> fm_show_vol[j][i] != NULL && img_b -> fm_show_vol[j][i] == NULL) { do_volms = TRUE; } else if (img_a -> fm_show_vol[j][i] != NULL && img_b -> fm_show_vol[j][i] != NULL) { for (k=0; k totcoord[j+2]; k++) { if (img_a -> fm_show_vol[j][i][k] != img_b -> fm_show_vol[j][i][k]) do_volms = TRUE; if (img_a -> fm_vol_col[j][i][k].red != img_b -> fm_vol_col[j][i][k].red) do_volms = TRUE; if (img_a -> fm_vol_col[j][i][k].green != img_b -> fm_vol_col[j][i][k].green) do_volms = TRUE; if (img_a -> fm_vol_col[j][i][k].blue != img_b -> fm_vol_col[j][i][k].blue) do_volms = TRUE; } } } } if (do_volms) { view -> create_shaders[VOLMS] = shaders = TRUE; view -> n_shaders[VOLMS][stp] = -1; } if (img_a -> box_axis[0] != img_b -> box_axis[0]) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> box_axis_rad[0] != img_b -> box_axis_rad[0]) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> box_axis_line[0] != img_b -> box_axis_line[0]) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> box_color.red != img_b -> box_color.red) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> box_color.green != img_b -> box_color.green) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> box_color.blue != img_b -> box_color.blue) view -> create_shaders[MDBOX] = shaders = TRUE; if (img_a -> box_axis[1] != img_b -> box_axis[1]) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> box_axis_rad[1] != img_b -> box_axis_rad[1]) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> box_axis_line[1] != img_b -> box_axis_line[1]) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> axis_length != img_b -> axis_length) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> axispos != img_b -> axispos) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> axis_color == NULL && img_b -> axis_color != NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> axis_color != NULL && img_b -> axis_color == NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> axis_color != NULL && img_b -> axis_color != NULL) { for (i=0; i<3; i++) { if (img_a -> axis_color[i].red != img_b -> axis_color[i].red) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> axis_color[i].green != img_b -> axis_color[i].green) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> axis_color[i].blue != img_b -> axis_color[i].blue) view -> create_shaders[MAXIS] = shaders = TRUE; } } if (img_a -> axis_labels != img_b -> axis_labels) view -> create_shaders[MAXIS] = shaders = TRUE; for (i=0; i<3; i++) { if (g_strcmp0 (img_a -> axis_title[i],img_b -> axis_title[i]) != 0) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> axis_pos[i] != img_b -> axis_pos[i]) view -> create_shaders[MAXIS] = shaders = TRUE; } if (img_a -> labels_format[2] != img_b -> labels_format[2]) view -> create_shaders[MAXIS] = shaders = TRUE; if (g_strcmp0 (img_a -> labels_font[2], img_b -> labels_font[2]) != 0) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels_position[2] != img_b -> labels_position[2]) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels_scale[2] != img_b -> labels_scale[2]) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels_render[2] != img_b -> labels_render[2]) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels_color[2] == NULL && img_b -> labels_color[2] != NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> labels_color[2] != NULL && img_b -> labels_color[2] == NULL) { view -> create_shaders[MAXIS] = shaders = TRUE; } else if (img_a -> labels_color[2] != NULL && img_b -> labels_color[2] != NULL) { for (i=0; i<3; i++) { if (img_a -> labels_color[2][i].red != img_b -> labels_color[2][i].red) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels_color[2][i].green != img_b -> labels_color[2][i].green) view -> create_shaders[MAXIS] = shaders = TRUE; if (img_a -> labels_color[2][i].blue != img_b -> labels_color[2][i].blue) view -> create_shaders[MAXIS] = shaders = TRUE; } } if (img_a -> cloned_poly != img_b -> cloned_poly) { view -> n_shaders[POLYS][stp] = -1; view -> create_shaders[POLYS] = TRUE; view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; shaders = TRUE; } gboolean dorings = FALSE; for (i=0; i<5; i++) { if (view -> ring_max[i]) { if (img_a -> i_rings[i] && img_b -> i_rings[i]) { if (img_a -> i_rings[i][0][0] != img_b -> i_rings[i][0][0]) { view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; dorings = shaders = TRUE; break; } else { for (j=0; j i_rings[i][0][0]; j++) { if ((img_a -> i_rings[i][j+1][0] != img_b -> i_rings[i][j+1][0]) || (img_a -> i_rings[i][j+1][1] != img_b -> i_rings[i][j+1][1])) { view -> n_shaders[RINGS][stp] = -1; view -> create_shaders[RINGS] = TRUE; dorings = shaders = TRUE; break; } } } } else if (img_b -> i_rings[i]) { dorings = TRUE; } if (dorings) break; } } for (i=0; i<2; i++) { for (j=0; j nspec; j++) { if (img_a -> show_label[i][j] != img_b -> show_label[i][j]) { view -> create_shaders[LABEL] = shaders = TRUE; } if (img_a -> show_atom[i][j] != img_b -> show_atom[i][j]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; shaders = TRUE; break; } } for (j=0; j natomes; j++) { if (img_a -> at_data[j].show[i] != img_b -> at_data[j].show[i] || img_a -> at_data[j].style != img_b -> at_data[j].style) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; shaders = TRUE; break; } if (img_a -> at_data[j].label[i] != img_b -> at_data[j].label[i]) { view -> create_shaders[LABEL] = shaders = TRUE; } if (img_a -> at_data[j].pick[0] != img_b -> at_data[j].pick[0]) { view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = shaders = TRUE; } if (img_a -> at_data[j].pick[1] != img_b -> at_data[j].pick[1]) { view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = shaders = TRUE; } } } for (i=0; i<2*tmp_proj -> nspec; i++) { if ((img_a -> sphererad[i] != img_b -> sphererad[i]) || (img_a -> pointrad[i] != img_b -> pointrad[i]) || (img_a -> atomicrad[i] != img_b -> atomicrad[i])) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } for (j=0; j<2*tmp_proj -> nspec; j++) { if ((img_a -> bondrad[i][j] != img_b -> bondrad[i][j]) || (img_a -> linerad[i][j] != img_b -> linerad[i][j])) { view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } } } for (i=0; i<2; i++) { if (img_a -> labels_format[i] != img_b -> labels_format[i]) view -> create_shaders[LABEL] = shaders = TRUE; if (g_strcmp0 (img_a -> labels_font[i], img_b -> labels_font[i]) != 0) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels_position[i] != img_b -> labels_position[i]) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels_scale[i] != img_b -> labels_scale[i]) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels_render[i] != img_b -> labels_render[i]) view -> create_shaders[LABEL] = shaders = TRUE; for (j=0; j<3; j++) { if (img_a -> labels_shift[i][j] != img_b -> labels_shift[i][j]) view -> create_shaders[LABEL] = shaders = TRUE; } if (img_a -> labels_color[i] == NULL && img_b -> labels_color[i] != NULL) { view -> create_shaders[LABEL] = shaders = TRUE; } else if (img_a -> labels_color[i] != NULL && img_b -> labels_color[i] == NULL) { view -> create_shaders[LABEL] = shaders = TRUE; } else if (img_a -> labels_color[i] != NULL && img_b -> labels_color[i] != NULL) { for (j=0; j nspec; j++) { if (img_a -> labels_color[i][j].red != img_b -> labels_color[i][j].red) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels_color[i][j].green != img_b -> labels_color[i][j].green) view -> create_shaders[LABEL] = shaders = TRUE; if (img_a -> labels_color[i][j].blue != img_b -> labels_color[i][j].blue) view -> create_shaders[LABEL] = shaders = TRUE; } } if (img_a -> radall[i] != img_b -> radall[i]) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } } if (img_a -> render != img_b -> render) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; shaders = TRUE; } if (img_a -> style != img_b -> style) { view -> n_shaders[ATOMS][stp] = -1; view -> create_shaders[ATOMS] = TRUE; view -> n_shaders[BONDS][stp] = -1; view -> create_shaders[BONDS] = TRUE; view -> n_shaders[SELEC][stp] = -1; view -> create_shaders[SELEC] = TRUE; view -> create_shaders[LABEL] = TRUE; shaders = TRUE; } if (img_a -> m_is_pressed != img_b -> m_is_pressed) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> mtilt != img_b -> mtilt) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> mpattern != img_b -> mpattern) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> mfactor != img_b -> mfactor) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> mwidth != img_b -> mwidth) view -> create_shaders[MEASU] = shaders = TRUE; for (i=0; i<2; i++) { if (g_strcmp0 (img_a -> labels_font[3+i], img_b -> labels_font[3+i]) != 0) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels_position[3+i] != img_b -> labels_position[3+i]) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels_scale[3+i] != img_b -> labels_scale[3+i]) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels_render[3+i] != img_b -> labels_render[3+i]) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels_color[3+i][0].red != img_b -> labels_color[3+i][0].red) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels_color[3+i][0].green != img_b -> labels_color[3+i][0].green) view -> create_shaders[MEASU] = shaders = TRUE; if (img_a -> labels_color[3+i][0].blue != img_b -> labels_color[3+i][0].blue) view -> create_shaders[MEASU] = shaders = TRUE; for (j=0; j<3; j++) { if (img_a -> labels_shift[3+i][j] != img_b -> labels_shift[3+i][j]) view -> create_shaders[MEASU] = shaders = TRUE; } } return shaders; } extern GtkWidget * encoding_pb; /* typedef struct{ int framesec; // frame(s) per second int extraframes; // extra frame(s) per second int codec; // video codec int oglquality; // OpenGL quality int bitrate; // bitrate int video_res[2]; // video resolution (x, y) } video_options; */ /*! \fn gboolean create_movie (glwin * view, video_options * vopts, gchar * videofile) \brief render a movie from the saved animation parameters \param view the target glwin \param vopts the video encoding options \param videofile video file name */ gboolean create_movie (glwin * view, video_options * vopts, gchar * videofile) { int q; const AVOutputFormat * output_format = NULL; AVFormatContext * format_context = NULL; VideoStream * video_stream = NULL; const AVCodec * video_codec = NULL; int error; #ifdef DEBUG g_debug ("VIDEO ENCODING:: frames per seconds:: %d", vopts -> framesec); g_debug ("VIDEO ENCODING:: extra frames every:: %d frame(s)", vopts -> extraframes); g_debug ("VIDEO ENCODING:: bitrate:: %d", vopts -> bitrate); g_debug ("VIDEO ENCODING:: video_x = %d , video_y = %d", vopts -> video_res[0], vopts -> video_res[1]); g_debug ("VIDEO ENCODING:: codec:: %d, name= %s, ext= %s", vopts -> codec, codec_name[vopts -> codec], codec_list[vopts -> codec]); #endif // DEBUG num_frames = view -> anim -> frames; #if LIBAVCODEC_VERSION_MAJOR < 57 av_register_all (); avcodec_register_all (); #endif if (! (format_context = avformat_alloc_context())) { g_warning ("MOVIE_ENCODING:: Could not allocate AV format context"); return FALSE; } // Guess the desired container format based on file extension if (! (format_context -> oformat = av_guess_format (NULL, videofile, NULL))) { g_warning ("MOVIE_ENCODING:: Could not deduce container format: please change file name"); return FALSE; } output_format = format_context -> oformat; video_stream = add_video_stream (format_context, video_codec, vopts); if (video_stream == NULL) { g_warning ("MOVIE_ENCODING:: Could not create video stream"); return FALSE; } /* open the codec */ if ((error = avcodec_open2 (video_stream -> cc, video_codec, NULL)) < 0) { // Can not open codec g_warning ("MOVIE_ENCODING:: could not open codec, error= %s", av_err2str(error)); return FALSE; } avcodec_parameters_from_context (video_stream -> st -> codecpar, video_stream -> cc); #if LIBAVCODEC_VERSION_MAJOR > 52 av_dump_format (format_context, 0, videofile, 1); #else dump_format (av_format_context, 0, videofile, 1); #endif #if LIBAVCODEC_VERSION_MAJOR > 52 if (avio_open (& format_context -> pb, videofile, AVIO_FLAG_WRITE) < 0) #else if (url_fopen (& av_format_context -> pb, videofile, URL_WRONLY) < 0) #endif { // error impossible to open output file g_warning ("MOVIE_ENCODING:: Impossible to open the video file '%s'", videofile); return FALSE; } #if LIBAVCODEC_VERSION_MAJOR > 52 if (avformat_write_header (format_context, NULL) < 0) #else if (av_set_parameters (av_format_context, NULL) < 0) #endif { g_warning ("MOVIE_ENCODING:: Impossible to write the AV format header"); return FALSE; } view -> anim -> last = view -> anim -> first; if (vopts -> oglquality != 0) { q = view -> anim -> last -> img -> quality; view -> anim -> last -> img -> quality = vopts -> oglquality; } int frame_id; frame_start = 0; if (vopts -> codec == 0) { frame_start = 1; write_video_frame (format_context, video_stream, 0, view); } else if (vopts -> codec == 2) { frame_start = 24; for (frame_id = 0; frame_id < frame_start; frame_id ++) { write_video_frame (format_context, video_stream, frame_id, view); } } re_create_all_md_shaders (view); recreate_all_shaders (view); for (frame_id=0; frame_id<2; frame_id++) { old_cmap[frame_id] = allocint(get_project_by_id(view -> proj) -> steps); set_old_cmap (view -> anim -> last -> img, 0, frame_id); } double fraction; #ifdef GTK4 // GMainContext * context = g_main_loop_get_context (Event_loop[dialog_id]); #endif // GTK4 for (frame_id = frame_start; frame_id < num_frames+frame_start; frame_id ++) { //g_debug ("Rendering frame: %d, id= %d", frame_id-frame_start, view -> anim -> last -> img -> id); if (vopts -> oglquality != 0) { view -> anim -> last -> img -> quality = vopts -> oglquality; } write_video_frame (format_context, video_stream, frame_id, view); if (frame_id-frame_start > 0 && frame_id-frame_start - 10*((frame_id-frame_start)/10) == 0) { fraction = (double)(frame_id-frame_start+1)/num_frames; gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(encoding_pb), fraction); #ifdef GTK3 while (gtk_events_pending()) gtk_main_iteration(); #else // while (g_main_context_pending (context)) g_main_context_iteration (context, TRUE); #endif } if (frame_id-frame_start < num_frames-1) { check_to_update_shaders (view, view -> anim -> last -> img, view -> anim -> last -> next -> img, vopts -> oglquality); view -> anim -> last = view -> anim -> last -> next; } } if (vopts -> oglquality != 0) { view -> anim -> last -> img -> quality = q; } av_write_trailer (format_context); if (!(output_format -> flags & AVFMT_NOFILE)) { /* close the output file */ #if LIBAVCODEC_VERSION_MAJOR > 52 avio_closep (& format_context -> pb); #else url_fclose (av_format_context -> pb); #endif } close_stream (format_context, video_stream); return TRUE; } static GLuint fbo; static GLuint rbo_color; static GLuint rbo_depth; /*! \fn void init_frame_buffer (int x, int y) \brief init a frame buffer \param x x size - image width \param y y size - image height */ void init_frame_buffer (int x, int y) { glGenFramebuffers (1, & fbo); glBindFramebuffer (GL_FRAMEBUFFER, fbo); /* Color renderbuffer. */ glGenRenderbuffers (1, & rbo_color); glBindRenderbuffer (GL_RENDERBUFFER, rbo_color); /* Storage */ // glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB32F, x, y); // glRenderbufferStorage (GL_RENDERBUFFER, GL_RGBA4, x, y); glRenderbufferStorage (GL_RENDERBUFFER, GL_RGB, x, y); glFramebufferRenderbuffer (GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo_color); /* Depth renderbuffer. */ glGenRenderbuffers (1, & rbo_depth); glBindRenderbuffer (GL_RENDERBUFFER, rbo_depth); glRenderbufferStorage (GL_RENDERBUFFER, GL_DEPTH_COMPONENT, x, y); glFramebufferRenderbuffer (GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbo_depth); glReadBuffer (GL_COLOR_ATTACHMENT0); } /*! \fn void close_frame_buffer () \brief close the frame buffer */ void close_frame_buffer () { glDeleteFramebuffers (1, &fbo); glDeleteRenderbuffers (1, &rbo_color); glDeleteRenderbuffers (1, &rbo_depth); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_save_movie (GtkNativeDialog * info, gint response_id, gpointer data) \brief saving a movie - running the dialog \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_movie (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_save_movie (GtkDialog * info, gint response_id, gpointer data) \brief saving a movie - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_save_movie (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif if (response_id == GTK_RESPONSE_ACCEPT) { gchar * videofile = file_chooser_get_file_name (chooser); #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif video_options * vopts = (video_options *)data; glwin * view = get_project_by_id (vopts -> proj) -> modelgl; int x = view -> pixels[0]; int y = view -> pixels[1]; int i; for (i=0; i<2; i++) tmp_pixels[i] = view -> pixels[i]; view -> pixels[0] = vopts -> video_res[0]; view -> pixels[1] = vopts -> video_res[1]; init_frame_buffer (vopts -> video_res[0], vopts -> video_res[1]); init_opengl (view); re_create_all_md_shaders (view); recreate_all_shaders (view); in_movie_encoding = TRUE; gboolean res = create_movie (view, vopts, videofile); if (! res) { show_warning ("An error occurred when encoding movie\nyou might want to try again\nsorry for the trouble", view -> win); } close_frame_buffer (); in_movie_encoding = FALSE; re_create_all_md_shaders (view); recreate_all_shaders (view); reshape (view, x, y); update (view); } else { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn void save_movie (glwin * view, video_options * vopts) \brief saving a movie - prepare the dialog \param view the target glwin \param vopts the video encoding options */ void save_movie (glwin * view, video_options * vopts) { GtkFileFilter * filter; gchar * str; #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif info = create_file_chooser ("Render Movie", GTK_WINDOW(view -> win), GTK_FILE_CHOOSER_ACTION_SAVE, "Save"); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); #ifdef GTK3 gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); str = g_strdup_printf ("%s.%s", prepare_for_title(get_project_by_id(view -> proj) -> name), codec_list[vopts -> codec]); gtk_file_chooser_set_current_name (chooser, str); g_free (str); filter = gtk_file_filter_new (); str = g_strdup_printf ("%s file (*.%s)", codec_name[vopts -> codec], codec_list[vopts -> codec]); gtk_file_filter_set_name (GTK_FILE_FILTER(filter), str); g_free (str); str = g_strdup_printf ("*.%s", codec_list[vopts -> codec]); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter), str); g_free (str); gtk_file_chooser_add_filter (chooser, filter); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_save_movie), vopts); #else run_this_gtk_dialog (info, G_CALLBACK(run_save_movie), vopts); #endif } Atomes-GNU-1.1.14/src/opengl/draw/movie.h000066400000000000000000000036631457665371200200050ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file movie.h * @short Data structure declarations for movie encoding \n Function declarations for movie encoding * @author Sébastien Le Roux */ /* * This header file: 'movie.h' * * Contains: - Data structure declarations for movie encoding - Function declarations for movie encoding */ #ifndef MOVIE_H_ #define MOVIE_H_ #define VIDEO_CODECS 5 #define IMAGE_FORMATS 4 #include #include #include #if LIBAVCODEC_VERSION_MAJOR > 54 #include #include #endif #include #include #include // a wrapper around a single output AVStream typedef struct VideoStream VideoStream; struct VideoStream { AVStream * st; AVCodecContext * cc; AVFrame * frame; struct SwsContext * sws_ctx; }; typedef struct video_options video_options; struct video_options { int proj; int framesec; int extraframes; int codec; int oglquality; int bitrate; int * video_res; }; extern void render_image (glwin * view, video_options * iopts); extern void save_movie (glwin * view, video_options * vopts); #endif Atomes-GNU-1.1.14/src/opengl/draw/ogl_text.c000066400000000000000000000556661457665371200205200ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file ogl_text.c * @short Functions to prepare OpenGL rendering for text * @author Sébastien Le Roux */ /* * This file: 'ogl_text.c' * * Contains: * - The functions to prepare OpenGL rendering for text * * List of functions: int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff); void render_string (int glsl, int id, screen_string * this_string); void debug_string (screen_string * this_string); void render_all_strings (int glsl, int id); void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct); void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct); static void normalize_text_size (GLenum texture, int * width, int * height); screen_string * was_not_rendered_already (char * word, screen_string * list); ColRGBA * opposite_color (ColRGBA col); object_3d * create_string_texture (int cwidth, int cheight, int * pixels); object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, screen_string * this_string); */ #include "global.h" #include "glview.h" #define PANGO_TEXT_SIZE 500 #define OUTLINE_WIDTH 3 #ifndef GL_CLAMP_TO_EDGE # define GL_CLAMP_TO_EDGE 0x812F #endif #ifndef GL_TEXTURE_WRAP_R # define GL_TEXTURE_WRAP_R 0x8072 #endif extern int measures_drawing; extern int type_of_measure; extern void update_string_instances (glsl_program * glsl, object_3d * obj); GLuint textures_id[2]; const int OUTLINE_BRUSH[2*OUTLINE_WIDTH+1][2*OUTLINE_WIDTH+1] = {{ 10, 30, 45, 50, 45, 30, 10 }, { 30, 65, 85, 100, 85, 65, 30 }, { 45, 85, 200, 256, 200, 85, 45 }, { 50, 100, 256, 256, 256, 100, 50 }, { 45, 85, 200, 256, 200, 85, 45 }, { 30, 65, 85, 100, 85, 65, 30 }, { 10, 30, 45, 50, 45, 30, 10 }}; /*! \fn static void normalize_text_size (GLenum texture, int * width, int * height) \brief normalize the text size \param texture the texture type \param width image width \param height image height */ static void normalize_text_size (GLenum texture, int * width, int * height) { // if the texture target is GL_TEXTURE_2D, that means that // the texture_rectangle OpenGL extension is unsupported and we must // use only square, power-of-two textures. if (texture == GL_TEXTURE_2D) { int x = max (* width, * height); // find next power of two int n; for (n = 1; n < x; n = n << 1); // the texture must be square, and its size must be a power of two. * width = * height = n; } } /*! \fn int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff) \brief paint bitmap data using color \param color the color \param a opacity \param cw width \param ch height \param buff the data to paint */ int * paint_bitmap (vec4_t color, GLfloat a, int cw, int ch, unsigned char * buff) { int i; guint8 * row, * row_end; guint32 rgb; guint32 * p; int * bitmap; #if ! defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN rgb = ((guint32) (color.x* 255.0)) | (((guint32) (color.y * 255.0)) << 8) | (((guint32) (color.z * 255.0)) << 16); #else rgb = (((guint32) (color.x * 255.0)) << 24) | (((guint32) (color.y * 255.0)) << 16) | (((guint32) (color.z * 255.0)) << 8); #endif bitmap = allocint (cw * ch * 4); p = (guint32 *) bitmap; row = buff + cw*ch; /* past-the-end */ row_end = buff; /* beginning */ if (a == 1.0) { while (row != row_end) { row -= cw; for (i = 0; i < cw; i++) { #if ! defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN * p++ = rgb | (((guint32) row[i]) << 24); #else * p++ = rgb | ((guint32) row[i]); #endif } } } else { while (row != row_end) { row -= cw; for (i = 0; i < cw; i++) { #if ! defined(GL_VERSION_1_2) && G_BYTE_ORDER == G_LITTLE_ENDIAN * p++ = rgb | (((guint32) (a * row[i])) << 24); #else * p++ = rgb | ((guint32) (a * row[i])); #endif } } } return bitmap; } gboolean render_format; /*! \fn object_3d * create_string_texture (int cwidth, int cheight, int * pixels) \brief OpenGL 3D string object rendering \param cwidth width \param cheight height \param pixels the data to render */ object_3d * create_string_texture (int cwidth, int cheight, int * pixels) { int i, j, n; int di, dj; int fi, fj, fn; double x, y; object_3d * new_string; new_string = g_malloc0 (sizeof*new_string); if (! new_string) return NULL; int csize = cwidth * cheight; int * rawbitmap; rawbitmap = allocint(csize); if (! rawbitmap) return NULL; n = 0; for (j = 0; j < cheight; j++) { for (i = 0; i < cwidth; i++) { x = (GLubyte)(pixels [n])/255.0; y = pow(x, 0.75); rawbitmap[n] = (int)(255.0 * y); n++; } } int * neighborhood; neighborhood = allocint (csize); if (! neighborhood) return NULL; for (i = 0; i < cheight; i++) { for (j = 0; j < cwidth; j++) { n = j + i * cwidth; for (di = -OUTLINE_WIDTH; di <= OUTLINE_WIDTH; di++) { for (dj = -OUTLINE_WIDTH; dj <= OUTLINE_WIDTH; dj++) { fi = i + di; fj = j + dj; if (fi >= 0 && fi < cheight && fj >= 0 && fj < cwidth) { fn = fj + fi * cwidth; neighborhood[fn] = max (neighborhood[fn], rawbitmap[n] * OUTLINE_BRUSH[OUTLINE_WIDTH + di] [OUTLINE_WIDTH + dj]); } } } } } // Two channels, for the outline and the glyph GLubyte * channels[2]; for (i=0; i<2; i++) { channels[i] = g_malloc (csize*sizeof*channels[i]); if (! channels[i]) return NULL; } for (n = 0; n < csize; n++) { channels[1][n] = (GLubyte)rawbitmap[n]; i = (neighborhood[n] >> 8) + rawbitmap[n]; if (i > 255) { i = 255; } channels[0][n] = (GLubyte)i; } g_free (neighborhood); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); for (i=0; i<2; i++) { glGenTextures (1, & textures_id[i]); if (! textures_id[i]) return NULL; glBindTexture (ogl_texture, textures_id[i]); glTexImage2D (ogl_texture, 0, GL_RED, cwidth, cheight, 0, GL_RED, GL_UNSIGNED_BYTE, channels[i]); glTexParameteri (ogl_texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri (ogl_texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); glBindTexture (ogl_texture, 0); } return new_string; } /*! \fn object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, screen_string * this_string) \brief OpenGL 3D pango layout object rendering \param layout the Pango layout \param texture the OpenGL texture type \param id the label id \param this_string the screen string */ object_3d * gl_pango_render_layout (PangoLayout * layout, GLenum texture, int id, screen_string * this_string) { FT_Bitmap bitmap; PangoRectangle prect; object_3d * new_string; int * pixels; int cwidth, cheight; int csize; pango_layout_get_extents (layout, NULL, & prect); if (prect.width == 0 || prect.height == 0) return NULL; cheight = bitmap.rows = PANGO_PIXELS (prect.height) + 2*OUTLINE_WIDTH; cwidth = bitmap.width = PANGO_PIXELS (prect.width) + 2*OUTLINE_WIDTH; normalize_text_size (ogl_texture, & cwidth, & cheight); bitmap.pitch = cwidth; csize = cheight*cwidth; bitmap.buffer = g_malloc (csize); memset (bitmap.buffer, 0, csize); bitmap.num_grays = 256; bitmap.pixel_mode = ft_pixel_mode_grays; pango_ft2_render_layout (& bitmap, layout, PANGO_PIXELS (-prect.x)+OUTLINE_WIDTH, OUTLINE_WIDTH); pixels = paint_bitmap (vec4(1.0,0.0,0.0,0.0), 1.0, cwidth, cheight, bitmap.buffer); if (! plot -> labels_render[id]) { new_string = g_malloc0 (sizeof*new_string); new_string -> texture = -1; glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glGenTextures (1, & new_string -> texture); if (! new_string -> texture) return NULL; glBindTexture (ogl_texture, new_string -> texture); glTexImage2D (ogl_texture, 0, GL_RGBA, cwidth, cheight, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels); glTexParameteri (ogl_texture, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri (ogl_texture, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri (ogl_texture, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); glBindTexture (ogl_texture, 0); } else { new_string = create_string_texture (cwidth, cheight, pixels); } g_free (pixels); new_string -> num_vertices = 4; new_string -> vert_buffer_size = CHAR_BUFF_SIZE; new_string -> vertices = allocfloat (new_string -> num_vertices*CHAR_BUFF_SIZE); float x = (float) cwidth; float y = (float) cheight; float twidth = (ogl_texture == GL_TEXTURE_2D) ? 1.0 : x; float theight = (ogl_texture == GL_TEXTURE_2D) ? 1.0 : y; // 0 new_string -> vertices[0] = -x; new_string -> vertices[1] = y; new_string -> vertices[2] = 0.0; new_string -> vertices[3] = theight; // 1 new_string -> vertices[4] = -x; new_string -> vertices[5] = -y; new_string -> vertices[6] = 0.0; new_string -> vertices[7] = 0.0; // 2 new_string -> vertices[8] = x; new_string -> vertices[9] = y; new_string -> vertices[10] = twidth; new_string -> vertices[11] = theight; // 3 new_string -> vertices[12] = x; new_string -> vertices[13] = -y; new_string -> vertices[14] = twidth; new_string -> vertices[15] = 0.0; new_string -> num_instances = this_string -> num_instances; int i = (this_string -> type == 3) ? 1 : (this_string -> type == 4) ? 3 : 4; new_string -> inst_buffer_size = 3*i; new_string -> instances = duplicate_float (this_string -> num_instances*3*i, this_string -> instances); return new_string; } /*! \fn ColRGBA * opposite_color (ColRGBA col) \brief compute the opposite color \param col input color */ ColRGBA * opposite_color (ColRGBA col) { ColRGBA * ocol = g_malloc0 (sizeof*ocol); ocol -> red = (1.0-col.red)/2.5; ocol -> green = (1.0-col.green)/2.5; ocol -> blue = (1.0-col.blue)/2.5; ocol -> alpha = 1.0; return ocol; } /*! \fn void render_string (int glsl, int id, screen_string * this_string) \brief render a screen string \param glsl the shader id \param id the label id \param this_string the screen string to render */ void render_string (int glsl, int id, screen_string * this_string) { int j, k, l; double font_size; // Pango elements for labels PangoContext * pcontext; PangoLayout * playout; PangoFontDescription * pfont; object_3d * string_to_render = NULL; int arr_size = (this_string -> type == 4) ? 5 : (this_string -> type == 5) ? 6 : this_string -> type; //pcontext = pango_ft2_get_context (PANGO_TEXT_SIZE, PANGO_TEXT_SIZE); pcontext = pango_font_map_create_context (pango_ft2_font_map_new ()); playout = pango_layout_new (pcontext); pango_layout_set_alignment (playout, PANGO_ALIGN_CENTER); pfont = pango_font_description_from_string (plot -> labels_font[id]); j = pango_font_description_get_size (pfont); font_size = j / PANGO_SCALE; //g_debug ("Zoom = %f, gnear= %f, p_moy= %f, p_depth= %f", plot -> zoom, plot -> gnear, wingl -> p_moy, plot -> p_depth); if (plot -> labels_scale[id]) font_size *= ((ZOOM/plot -> zoom)*(plot -> gnear/6.0)*(wingl -> p_moy/plot -> p_depth)); if (in_movie_encoding) { l = (wingl -> pixels[0] > wingl -> pixels[1]) ? 1 : 0; font_size *= ((float)wingl -> pixels[l]/(float)tmp_pixels[l]); } pango_font_description_set_absolute_size (pfont, font_size*PANGO_SCALE); pango_layout_set_font_description (playout, pfont); pango_layout_set_text (playout, this_string -> word, strlen(this_string -> word)); string_to_render = gl_pango_render_layout (playout, ogl_texture, id, this_string); if (string_to_render == NULL) { g_warning ("TEXT_RENDER:: For some reason it is impossible to render"); g_warning ("TEXT_RENDER:: this string: '%s', using this font: %s", this_string -> word, plot -> labels_font[id]); } else { for (k=0; k<3; k++) string_to_render -> shift[k] = this_string -> shift[k]; string_to_render -> shift[3] = (float) plot -> labels_position[id]; string_to_render -> quality = this_string -> type; j = this_string -> id; j *= (plot -> labels_render[id] + 1); if (id == 1 && plot -> labels_list[0] != NULL) { j += (plot -> labels_render[0] + 1) * (plot -> labels_list[0] -> last -> id + 1); } if (id == 2) { j += (plot -> box_axis[AXIS] == WIREFRAME) ? 2 : 4; } else if (id == 3 || id == 4) { j += measures_drawing; } if (! plot -> labels_render[id]) { if (ogl_texture == GL_TEXTURE_RECTANGLE_ARB) { wingl -> ogl_glsl[glsl][0][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); } else { wingl -> ogl_glsl[glsl][0][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color_2d, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); } wingl -> ogl_glsl[glsl][0][j] -> col = duplicate_color(1, & (this_string -> col)); } else { if (ogl_texture == GL_TEXTURE_RECTANGLE_ARB) { string_to_render -> texture = textures_id[0]; wingl -> ogl_glsl[glsl][0][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][0][j] -> col = opposite_color(this_string -> col); string_to_render -> texture = textures_id[1]; wingl -> ogl_glsl[glsl][0][j+1] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][0][j+1] -> col = duplicate_color(1, & (this_string -> col)); } else { string_to_render -> texture = textures_id[0]; wingl -> ogl_glsl[glsl][0][j] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color_2d, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][0][j] -> col = opposite_color(this_string -> col); string_to_render -> texture = textures_id[1]; wingl -> ogl_glsl[glsl][0][j+1] = init_shader_program (glsl, GLSL_STRING, (this_string -> type == 3) ? string_vertex : (this_string -> type == 4) ? angstrom_vertex : degree_vertex, NULL, string_color_2d, GL_TRIANGLE_STRIP, arr_size, (this_string -> type == 3) ? 7 : 8, FALSE, string_to_render); wingl -> ogl_glsl[glsl][0][j+1] -> col = duplicate_color(1, & (this_string -> col)); } } g_free (string_to_render); } pango_font_description_free (pfont); g_object_unref (G_OBJECT(pcontext)); g_object_unref (G_OBJECT(playout)); } /*! \fn void debug_string (screen_string * this_string) \brief debug screen string data \param this_string */ void debug_string (screen_string * this_string) { g_debug ("STRING:: id= %d, text:: %s", this_string -> id, this_string -> word); g_debug ("STRING:: color:: r= %f, g= %f, b= %f, a= %f", this_string -> col.red, this_string -> col.green, this_string -> col.blue, this_string -> col.alpha); int i, j; j = 0; for (i=0; i num_instances; i++, j+=3) { g_debug ("STRING:: %d-th :: pos[%d][x]= %f, pos[%d][y]= %f, pos[%d][z]= %f, theta[%d]= %f", i, i, this_string -> instances[j], i, this_string -> instances[j+1], i, this_string -> instances[j+2], i, this_string -> instances[j+2]); } g_debug ("STRING:: shift:: x= %f, y= %f, z= %f", this_string -> shift[0], this_string -> shift[1], this_string -> shift[2]); g_debug ("STRING:: show :: %f", this_string -> shift[3]); } /*! \fn void render_all_strings (int glsl, int id) \brief render all string to be rendered for a label list \param glsl shader id \param id label id */ void render_all_strings (int glsl, int id) { if (plot -> labels_list[id] != NULL) { screen_string * this_string = plot -> labels_list[id] -> last; while (this_string != NULL) { //if (glsl == MEASU) debug_string (this_string); render_string (glsl, id, this_string); this_string = this_string -> prev; } } } /*! \fn screen_string * was_not_rendered_already (char * word, screen_string * list) \brief check if a string was not already rendered and the corresponding screen string created \param word the string to render \param list the screen string list */ screen_string * was_not_rendered_already (char * word, screen_string * list) { if (list != NULL) { screen_string * tmp_string = list -> last; while (tmp_string != NULL) { if (g_strcmp0 (tmp_string -> word, word) == 0) { return tmp_string; } tmp_string = tmp_string -> prev; } tmp_string = NULL; g_free (tmp_string); } return NULL; } /*! \fn void add_string_instance (screen_string * string, vec3_t pos, atom * at, atom * bt, atom * ct) \brief add an instance to a screen string \param string the screen string to increase \param pos the position \param at the 1st atom, if any (bond or angle measure string) \param bt the 2nd atom, if any (bond or angle measure string) \param ct the 3rd atom, if any (angle measure string) */ void add_string_instance (screen_string * string, vec3_t pos, atom * at, atom * bt, atom * ct) { int i, j; i = 0; j = (string -> type == 3) ? 1 : (type_of_measure == 6) ? 3 : 4; if (string -> num_instances > 0) { float * instances = duplicate_float (3*j*string -> num_instances, string -> instances); g_free (string -> instances); string -> instances = allocfloat (3*j*(string -> num_instances+1)); for (i=0; i<3*j*string -> num_instances; i++) { string -> instances[i] = instances[i]; } } else { string -> instances = allocfloat (3*j); } string -> num_instances ++; string -> instances[i] = pos.x; string -> instances[i+1] = pos.y; string -> instances[i+2] = pos.z; if (j > 1) { string -> instances[i+3] = at -> x; string -> instances[i+4] = at -> y; string -> instances[i+5] = at -> z; string -> instances[i+6] = bt -> x; string -> instances[i+7] = bt -> y; string -> instances[i+8] = bt -> z; if (j == 4) { string -> instances[i+9] = ct -> x; string -> instances[i+10] = ct -> y; string -> instances[i+11] = ct -> z; } } } /*! \fn void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) \brief Add a screen string to the list of screen string to render \param text the text to render \param id the label id \param col the color \param pos the position \param lshift label position shift on x, y and z, if any \param at the 1st atom, if any (bond or angle measure string) \param bt the 2nd atom, if any (bond or angle measure string) \param ct the 3rd atom, if any (angle measure string) */ void add_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) { if (plot -> labels_list[id] == NULL) { plot -> labels_list[id] = g_malloc0 (sizeof*plot -> labels_list[id]); plot -> labels_list[id] -> last = plot -> labels_list[id]; } else { screen_string * s_tring = g_malloc0 (sizeof*s_tring); s_tring -> prev = plot -> labels_list[id] -> last; s_tring -> id = plot -> labels_list[id] -> last -> id + 1; plot -> labels_list[id] -> last = s_tring; } plot -> labels_list[id] -> last -> word = g_strdup_printf ("%s", text); plot -> labels_list[id] -> last -> col = col; plot -> labels_list[id] -> last -> type = (id < 3) ? 3 : (type_of_measure == 6) ? 4 : 5; int i; for (i=0; i<3; i++) plot -> labels_list[id] -> last -> shift[i] = lshift[i]; add_string_instance (plot -> labels_list[id] -> last, pos, at, bt, ct); } /*! \fn void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) \brief prepare a screen string to be rendered \param text the text to render \param id the label id \param col the color \param pos the position \param lshift label position shift on x, y and z, if any \param at the 1st atom, if any (bond or angle measure string) \param bt the 2nd atom, if any (bond or angle measure string) \param ct the 3rd atom, if any (angle measure string) */ void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct) { screen_string * this_string = was_not_rendered_already (text, plot -> labels_list[id]); if (this_string == NULL) { add_string (text, id, col, pos, lshift, at, bt, ct); } else { add_string_instance (this_string, pos, at, bt, ct); } } Atomes-GNU-1.1.14/src/opengl/edit/000077500000000000000000000000001457665371200164755ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/opengl/edit/atom_action.c000066400000000000000000002062401457665371200211420ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_action.c * @short Functions to apply the edition actions to the model * @author Sébastien Le Roux */ /* * This file: 'atom_action.c' * * Contains: * - The functions to apply the edition actions to the model * * List of functions: int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing); void free_dummies (dummy_atom * tmp_pick); void clean_this_project (project * this_proj); void clean_motion_search (project * this_proj, atom_search * asearch, int sid); void clean_all_trees (atom_search * asearch, project * this_proj); void apply_action (project * this_proj, atom_search * asearch); void prepare_random_action (project * this_proj, atom_search * asearch); G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data); atom_search * duplicate_atom_search (atom_search * asearch); */ #include "atom_edit.h" #include "curve.h" /*! \fn void free_dummies (dummy_atom * tmp_pick) \brief free atom dummy list \param tmp_pick the atom dummy list to free */ void free_dummies (dummy_atom * tmp_pick) { while (tmp_pick) { if (tmp_pick -> next) { tmp_pick = tmp_pick -> next; g_free (tmp_pick -> prev); tmp_pick -> prev = NULL; } else { g_free (tmp_pick); tmp_pick = NULL; } } } /*! \fn void clean_this_project (project * this_proj) \brief clean project data for the edition process \param this_proj the target project */ void clean_this_project (project * this_proj) { int i, j; opengl_project_changed (this_proj -> id); selected_aspec = -1; is_selected = -1; for (i=0; i natomes; i++) { opengl_project -> atoms[0][i].show[0] = opengl_project -> atoms[0][i].show[1] = FALSE; } gboolean vis_stat = opengl_project -> modelgl -> atom_win -> visible; opengl_project -> modelgl -> atom_win -> visible = FALSE; i = opengl_project -> modelgl -> selection_mode; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = NSELECTION-1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = i; opengl_project -> modelgl -> atom_win -> visible = vis_stat; #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> create_shaders[RINGS] = TRUE; opengl_project -> modelgl -> n_shaders[RINGS][0] = -1; for (i=0; i<2; i++) { for (j=0; j coord -> totcoord[i]; j++) { opengl_project -> modelgl -> anim -> last -> img -> show_poly[i][j] = FALSE; } } opengl_project -> modelgl -> create_shaders[POLYS] = TRUE; opengl_project -> modelgl -> n_shaders[POLYS][0] = -1; opengl_project -> natomes = 0; g_free (this_proj -> atoms[0]); for (i=0; i<2; i++) { if (opengl_project -> modelgl -> bonds[0][i]) { if (opengl_project -> modelgl -> bondid[0][i]) { g_free (opengl_project -> modelgl -> bondid[0][i]); opengl_project -> modelgl -> bondid[0][i] = NULL; } } opengl_project -> modelgl -> bonds[0][i] = 0; opengl_project -> modelgl -> allbonds[i] = 0; } g_free (opengl_project -> chemistry); opengl_project -> chemistry = NULL; init_curves_and_calc (opengl_project); opengl_project -> numwid = -1; frag_update = mol_update = 0; prep_calc_actions (); free_glwin_spec_data (opengl_project, opengl_project -> nspec); glwin_init_spec_data (opengl_project, 1); opengl_project -> nspec = 0; for (i=0; i<10; i++) opengl_project -> coord -> totcoord[i] = 0; #ifdef GTK3 // GTK3 Menu Action To Check for (i=1; i modelgl -> ogl_coord[i] = NULL; for (i=0; i modelgl -> ogl_rings[i] = NULL; opengl_project -> modelgl -> ogl_chains[0] = NULL; #endif prepare_opengl_menu_bar (opengl_project -> modelgl); } /*! \fn void clean_motion_search (project * this_proj, atom_search * asearch, int sid) \brief clean atom search motion data \param this_proj the target project \param asearch the target atom search \param sid motion id */ void clean_motion_search (project * this_proj, atom_search * asearch, int sid) { int i; if (asearch -> in_selection) { for (i=0; i todo_size; i++) asearch -> todo[i] = 0; asearch -> in_selection = 0; if (this_proj -> modelgl -> atom_win -> to_be_moved[sid]) { atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[sid]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_moved[sid] = NULL; } } this_proj -> modelgl -> atom_win -> rebuilt[! sid] = TRUE; this_proj -> modelgl -> atom_win -> rebuilt[sid] = FALSE; } /*! \fn int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible) \brief apply atom edition action to project (motion, remove, replace, insert, random move) \param this_proj the target project \param asearch the target atom search \param visible is the 'model edition' window visible (1/0) */ int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible) { int i, j, k, l, m, n, o, p; dummy_atom * to_rem, * to_add; dummy_atom * tmp_rem, * tmp_add; atomic_object * object_list = NULL; atomic_object * tmp_list; atomic_object * object, * tmp_obj; int remove, extra, nmols; int act = (asearch -> pointer[0].c == 3) ? 0 : (asearch -> pointer[0].c == 5) ? 1 : 3; to_rem = tmp_rem = NULL; to_add = tmp_add = NULL; remove = extra = nmols = 0; atom_edition * edit = this_proj -> modelgl -> atom_win; edit -> add_spec = 0; if (this_proj -> nspec) { edit -> new_z = duplicate_double (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); edit -> coord = duplicate_coord_info (this_proj -> coord); } else if (! this_proj -> natomes) { edit -> coord = NULL; } gboolean passivate = FALSE; if (asearch -> action == REMOVE) { if (this_proj -> modelgl -> cell_win) { if (this_proj -> modelgl -> cell_win -> slab_passivate) passivate = TRUE; } } if (asearch -> action == DISPL || asearch -> action == REMOVE || asearch -> action == RANMOVE) { for (i=0; i natomes; i++) { if (asearch -> todo[i]) { if (to_rem != NULL) { tmp_rem -> next = g_malloc0 (sizeof*tmp_rem); tmp_rem -> next -> prev = tmp_rem; tmp_rem = tmp_rem -> next; } else { to_rem = g_malloc0 (sizeof*to_rem); tmp_rem = to_rem; } tmp_rem -> id = i; remove ++; } } } else { object = edit -> to_be_inserted[act]; i = o = p = 0; while (object) { j = object -> id; /* #ifdef DEBUG g_debug ("object -> id= %d, name= %s, todo[%d]= %d", j+1, object -> name, j+1, asearch -> todo[j]); #endif */ if (asearch -> todo[j]) { if (edit -> coord) { o += search_for_new_spec (edit, object); } else { edit -> coord = duplicate_coord_info (object -> coord); edit -> new_z = allocdouble (edit -> coord -> species); for (k=0; k coord -> species; k++) edit -> new_z[k] = (double)object -> old_z[k]; o += object -> species; } asearch -> in_selection --; if (! object_list) { object_list = duplicate_atomic_object (object); tmp_list = object_list; } else { tmp_list -> next = duplicate_atomic_object (object); tmp_list -> next -> prev = tmp_list; tmp_list = tmp_list -> next; } for (k=0; k atoms; k++) { if (to_add) { tmp_add -> next = g_malloc0 (sizeof*tmp_add); tmp_add -> next -> prev = tmp_add; tmp_add = tmp_add -> next; } else { to_add = g_malloc0 (sizeof*to_add); tmp_add = to_add; } tmp_add -> id = this_proj -> natomes + extra - remove; l = object -> at_list[k].sp; tmp_add -> type = find_spec_id (edit -> coord -> species, object -> old_z[l], edit -> new_z); tmp_add -> xyz[0] = object -> at_list[k].x + object -> baryc[0]; tmp_add -> xyz[1] = object -> at_list[k].y + object -> baryc[1]; tmp_add -> xyz[2] = object -> at_list[k].z + object -> baryc[2]; for (m=0; m<2; m++) { tmp_add -> coord[m] = find_this_geo_id (m, object -> coord, object -> old_z, object -> at_list[k].coord[m], l, tmp_add -> type, edit -> coord, edit -> new_z); } for (m=2; m<4; m++) tmp_add -> coord[m] = object -> at_list[k].coord[2] + i; if (this_proj -> coord) { for (m=2; m<4; m++) tmp_add -> coord[m] += this_proj -> coord -> totcoord[m]; } tmp_add -> numv = object -> at_list[k].numv; if (tmp_add -> numv) { tmp_add -> vois = duplicate_int (object -> at_list[k].numv, object -> at_list[k].vois); for (m=0; m numv; m++) tmp_add -> vois[m] += p + this_proj -> natomes; sort (tmp_add ->numv, tmp_add -> vois); } extra ++; } i += object -> coord -> totcoord[2]; p += object -> atoms; if (object -> prev) { if (object -> next) { object -> prev -> next = object -> next; object -> next -> prev = object -> prev; tmp_obj = object; object = object -> next; g_free (tmp_obj); } else { object -> prev -> next = NULL; g_free (object); object = NULL; } } else { if (object -> next) { edit -> to_be_inserted[act] = object -> next; object = object -> next; g_free (object -> prev); object -> prev = NULL; } else { g_free (edit -> to_be_inserted[act]); edit -> to_be_inserted[act] = NULL; object = NULL; } } } else { object = object -> next; } } nmols += i; edit -> coord -> totcoord[2] += i; edit -> add_spec = o; } #ifdef DEBUG if (asearch -> action == INSERT && extra) { g_debug ("Project coord before insert:"); if (this_proj -> natomes) { print_coord_info (this_proj, this_proj -> coord); } else { g_debug (" *** None *** "); } g_debug ("Coord info after object insert:"); print_coord_info (NULL, edit -> coord); } #endif if (asearch -> action == DISPL && remove == 0) return -1; if (asearch -> action == RANMOVE && remove == 0) return -1; if (asearch -> action == REMOVE && remove == 0) return -1; if ((asearch -> action == INSERT || asearch -> action == REPLACE) && extra == 0) return extra; if (asearch -> action == REMOVE && remove > this_proj -> natomes) return -1; if ((asearch -> action != DISPL && asearch -> action != RANMOVE) || (asearch -> passivating && asearch -> filter < 3) || (asearch -> action == RANMOVE && asearch -> passivating && asearch -> object < 2) || (asearch -> action == RANMOVE && ! asearch -> passivating && ! asearch -> object)) { this_proj -> modelgl -> bonding = FALSE; this_proj -> coord -> totcoord[3] = 0; if (this_proj -> modelgl -> adv_bonding[1]) { for (i=0; i<2; i++) { if (this_proj -> modelgl -> anim -> last -> img -> color_map[i] == 4 || this_proj -> modelgl -> anim -> last -> img -> color_map[i] == 5) { #ifdef GTK3 // GTK3 Menu Action To Check if (this_proj -> modelgl -> color_styles[i*ATOM_MAPS]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[i*ATOM_MAPS], TRUE); set_color_map (this_proj -> modelgl -> color_styles[i*ATOM_MAPS], & this_proj -> modelgl -> colorp[i*ATOM_MAPS][0]); } #endif } } } this_proj -> modelgl -> adv_bonding[1] = FALSE; if (this_proj -> force_field[0]) { g_free (this_proj -> force_field[0]); this_proj -> force_field[0] = NULL; } if (asearch -> action != DISPL && asearch -> action != RANMOVE) { if (this_proj -> modelgl -> custom_map) { g_free (this_proj -> modelgl -> custom_map); this_proj -> modelgl -> custom_map = NULL; for (i=0; i<2; i++) { j = i*ATOM_MAPS; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j], TRUE); set_color_map (this_proj -> modelgl -> color_styles[j], & this_proj -> modelgl -> colorp[j][0]); if (i) widget_set_sensitive (this_proj -> modelgl -> color_styles[j+6], 0); #endif } } } } // Clean curves data for (i=0 ; i visok[i]=FALSE; hide_curves (this_proj, i); erase_curves (this_proj, i); } if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (i=0; i<5; i++) { clean_rings_data (i, this_proj -> modelgl); } #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif } clean_volumes_data (this_proj -> modelgl); if (asearch -> action == REMOVE && remove == this_proj -> natomes) { clean_this_project (this_proj); return remove; } atom * new_list = NULL; atom * tmp_new = NULL; gboolean * showfrag; int ** tmpgeo[2]; int new_atoms = 0; int * old_id = NULL; if (this_proj -> natomes) { old_id = allocint (this_proj -> natomes); tmp_rem = to_rem; for (i=0; i natomes; i++) { if (tmp_rem && tmp_rem -> id == i) { old_id[i] = -(i+1); if (asearch -> action == DISPL || asearch -> action == RANMOVE || passivate) { if (new_list) { tmp_new -> next = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; } else { new_list = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new = new_list; } new_atoms ++; } if (tmp_rem -> next != NULL) tmp_rem = tmp_rem -> next; } else { old_id[i] = i+1; if (new_list) { tmp_new -> next = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; } else { new_list = duplicate_atom (& this_proj -> atoms[0][i]); tmp_new = new_list; } new_atoms ++; } } if (asearch -> action == DISPL || asearch -> action == REMOVE || asearch -> action == RANMOVE) { check_coord_modification (this_proj, old_id, new_list, NULL, TRUE, passivate); // old_id for atoms to be passivated (removed then replaced) have been corrected to be > 0, // accordingly the total number of atoms to save must be updated if (passivate) { i = 0; tmp_new = new_list; while (tmp_new) { if (old_id[tmp_new -> id] > 0) i++; tmp_new = tmp_new -> next; } new_atoms = i; } } // Preserving coordination information for (i=0; i<2; i++) { j= this_proj -> nspec + edit -> add_spec; tmpgeo[i] = g_malloc (j*sizeof*tmpgeo[i]); for (k=0; k coord -> ntg[i][k]); } } tmp_new = new_list; while (tmp_new) { j = tmp_new -> id; k = tmp_new -> sp; // g_debug (" id= %d, c[0]= %d, c[1]= %d", j, tmp_new -> coord[0], tmp_new -> coord[1]); if (! passivate || old_id[j] > 0) { for (l=0; l<2; l++) { m = tmp_new -> coord[l]; if (m >= edit -> coord -> ntg[l][k]) { g_warning ("Error: at= %d, sp= %d, l= %d, geo_id= %d, edit -> coord -> ntg[%d][%d]= %d", j+1, k, l, m, l, k, edit -> coord -> ntg[l][k]); } tmpgeo[l][k][m] ++; } } tmp_new = tmp_new -> next; } if (asearch -> action != INSERT && asearch -> action != REPLACE) { showfrag = remove_bonds_from_project (this_proj, NULL, old_id, new_list, (asearch -> action == DISPL || asearch -> action == RANMOVE) ? FALSE : TRUE, passivate); } else { i = edit -> coord -> totcoord[2]; j = this_proj -> coord -> totcoord[2]; showfrag = allocbool (i); for (k=0; k modelgl -> anim -> last -> img -> show_coord[2][k]; } for (k=j; k coord -> species*sizeof*tmpgeo[i]); for (j=0; j coord -> species; j++) { tmpgeo[i][j] = allocint (edit -> coord -> ntg[i][j]); } } showfrag = allocbool(edit -> coord -> totcoord[2]); for (j=0; j coord -> totcoord[2]; j++) { showfrag[j] = TRUE; } } if (asearch -> action == DISPL || asearch -> action == REMOVE || asearch -> action == RANMOVE) { free_dummies (to_rem); to_rem = NULL; to_add = NULL; tmp_new = new_list; i = k = 0; while (tmp_new) { if (old_id[tmp_new -> id] > 0 || asearch -> action != REMOVE) { if (tmp_new -> pick[0] || tmp_new -> pick[1]) { if (to_add != NULL) { tmp_add -> next = g_malloc0 (sizeof*tmp_add); tmp_add -> next -> prev = tmp_add; tmp_add = tmp_add -> next; } else { to_add = g_malloc0 (sizeof*to_add); tmp_add = to_add; } for (j=0; j<2; j++) tmp_add -> pick[j] = tmp_new -> pick[j]; tmp_add -> id = i; k ++; } i ++; } tmp_new = tmp_new -> next; } } else { tmp_add = to_add; if (new_list) { tmp_new = new_list; while (tmp_new -> next) tmp_new = tmp_new -> next; } while (tmp_add) { if (new_list) { tmp_new -> next = g_malloc0 (sizeof*tmp_new -> next); tmp_new -> next -> prev = tmp_new; tmp_new = tmp_new -> next; } else { new_list = g_malloc0 (sizeof*new_list); tmp_new = new_list; } tmp_new -> sp = tmp_add -> type; tmp_new -> show[0] = tmp_new -> show[1] = TRUE; tmp_new -> x = tmp_add -> xyz[0]; tmp_new -> y = tmp_add -> xyz[1]; tmp_new -> z = tmp_add -> xyz[2]; for (i=0; i<4; i++) tmp_new -> coord[i] = tmp_add -> coord[i]; i = tmp_new -> sp; for (j=0; j<2; j++) { k = tmp_add -> coord[j]; tmpgeo[j][i][k] ++; } // Neighbors tmp_new -> numv = tmp_add -> numv; if (tmp_new -> numv) tmp_new -> vois = duplicate_int (tmp_new -> numv, tmp_add -> vois); new_atoms ++; tmp_add -> pick[0] = TRUE; tmp_add = tmp_add -> next; } atomic_object * object = object_list; i = 0; while (object) { i += object -> bonds; object = object -> next; } int ** new_bond_list = allocdint (i, 2); i = j = 0; object = object_list; while (object) { add_bonds_to_list (new_bond_list, i, j, object); i += object -> atoms; j += object -> bonds; if (object -> next) { object = object -> next; g_free (object -> prev); } else { g_free (object); object = NULL; } } add_bonds_to_project (this_proj, remove, j, new_bond_list); } if (this_proj -> natomes) { opengl_project_changed (this_proj -> id); is_selected = selected_aspec = -1; gboolean vis_stat = opengl_project -> modelgl -> atom_win -> visible; opengl_project -> modelgl -> atom_win -> visible = FALSE; i = opengl_project -> modelgl -> selection_mode; opengl_project -> modelgl -> selection_mode = ATOMS; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = NSELECTION-1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); #endif opengl_project -> modelgl -> selection_mode = i; opengl_project -> modelgl -> atom_win -> visible = vis_stat; } if (this_proj -> nspec) { g_free (this_proj -> atoms[0]); } else { this_proj -> atoms = g_malloc0 (sizeof*this_proj -> atoms); } int rem_spec; int * spid, * spdel; spid = allocint (this_proj -> nspec + edit -> add_spec); spdel = allocint (this_proj -> nspec + edit -> add_spec); int * atid = allocint (new_atoms); this_proj -> atoms[0] = g_malloc0 (new_atoms*sizeof*this_proj -> atoms[0]); tmp_new = new_list; i = 0; while (tmp_new) { if (asearch -> action != REMOVE || old_id[tmp_new -> id] > 0) { this_proj -> atoms[0][i] = * duplicate_atom (tmp_new); this_proj -> atoms[0][i].id = i; spid[this_proj -> atoms[0][i].sp] ++; atid[i] = this_proj -> atoms[0][i].sp; this_proj -> atoms[0][i].pick[0] = this_proj -> atoms[0][i].pick[1] = FALSE; i ++; } if (tmp_new -> next) { tmp_new = tmp_new -> next; g_free (tmp_new -> prev); } else { g_free (tmp_new); tmp_new = NULL; } } if (old_id) g_free (old_id); old_id = NULL; rem_spec = 0; for (i=0; i nspec + edit -> add_spec; i++) { if (spid[i] == 0) { // A chem spec is being removed ... shit that's more work rem_spec ++; } else { spdel[i] = rem_spec; } } if (rem_spec || edit -> add_spec) { int new_spec = this_proj -> nspec - rem_spec + edit -> add_spec; chemical_data * newchem = alloc_chem_data (new_spec); i = 0; for (j=0; j nspec; j++) { if (spid[j] != 0) { newchem -> nsps[i] = this_proj -> chemistry -> nsps[j]; newchem -> formula[i] = this_proj -> chemistry -> formula[j]; newchem -> label[i] = g_strdup_printf ("%s", this_proj -> chemistry -> label[j]); newchem -> element[i] = g_strdup_printf ("%s", this_proj -> chemistry -> element[j]); for (k=0; k chem_prop[k][i] = this_proj -> chemistry -> chem_prop[k][j]; } if (j < this_proj -> nspec-1) { k = i; for (l=j; l nspec; l++) { if (spid[l] != 0) { newchem -> cutoffs[i][k] = newchem -> cutoffs[k][i] = this_proj -> chemistry -> cutoffs[j][l]; k ++; } } } newchem -> nsps[i] = spid[j]; i ++; } } j = (this_proj -> nspec) ? 1 : 0; for (k=0; k add_spec - j*rem_spec; k++) { l = this_proj -> nspec + k; if ( spid[l]) { newchem -> nsps[i] = spid[l]; newchem -> formula[i] = 0; newchem -> chem_prop[CHEM_Z][i] = newchem -> chem_prop[CHEM_X][i] = edit -> new_z[l]; m = (int)newchem -> chem_prop[CHEM_Z][i]; newchem -> label[i] = g_strdup_printf ("%s", periodic_table_info[m].lab); newchem -> element[i] = g_strdup_printf ("%s", periodic_table_info[m].name); n = 0; newchem -> chem_prop[CHEM_M][i] = set_mass_ (& m); newchem -> chem_prop[CHEM_R][i] = set_radius_ (& m, & n); newchem -> chem_prop[CHEM_N][i] = set_neutron_ (& m); newchem -> chem_prop[CHEM_X][i] = newchem -> chem_prop[CHEM_Z][i]; i ++; } } initcutoffs (newchem, new_spec); for (i=0; i atoms[0][i].sp = atid[i]; } if (this_proj -> chemistry) g_free (this_proj -> chemistry); this_proj -> chemistry = NULL; this_proj -> chemistry = duplicate_chemical_data (new_spec, newchem); g_free (newchem); } else { g_free (this_proj -> chemistry -> nsps); this_proj -> chemistry -> nsps = duplicate_int (this_proj -> nspec, spid); } g_free (atid); i = activep; if (! this_proj -> natomes) { this_proj -> natomes = new_atoms; if (! this_proj -> cell.crystal) center_molecule (this_proj); } else { this_proj -> natomes = new_atoms; } // Active project changes in the next call recover_opengl_data (this_proj, nmols, edit -> add_spec, rem_spec, spid, spdel, tmpgeo, showfrag); if (showfrag) { g_free (showfrag); showfrag = NULL; } #ifdef DEBUG if (this_proj -> natomes) { print_coord_info (this_proj, this_proj -> coord); } else { g_debug (" *** None *** "); } #endif g_free (spdel); g_free (edit -> new_z); g_free (spid); for (j=0; j<2; j++) { g_free (tmpgeo[j]); } init_curves_and_calc (active_project); if (active_box) { if (test_vol(active_box -> param, active_box -> vect)) { for (j=0; j<3; j=j+2) active_project -> runok[j] = TRUE; } } initcwidgets (); active_project -> dmtx = FALSE; active_project -> run = (active_project -> natomes) ? TRUE : FALSE; chemistry_ () ; if (asearch -> recompute_bonding) { active_project_changed (activep); bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); } // Then back to the previous active project active_project_changed (i); int shaders[5] = {ATOMS, BONDS, POLYS, RINGS, SELEC}; re_create_md_shaders (5, shaders, this_proj); this_proj -> modelgl -> create_shaders[PICKS] = TRUE; this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; this_proj -> modelgl -> create_shaders[LABEL] = TRUE; this_proj -> modelgl -> create_shaders[MEASU] = TRUE; tmp_add = to_add; for (i=0; i<2; i++) save_all_selections (this_proj -> modelgl, i); while (tmp_add != NULL) { for (i=0; i<2; i++) { if (tmp_add -> pick[i]) { process_selected_atom (this_proj, this_proj -> modelgl, tmp_add -> id, 0, 0, i); } } tmp_add = tmp_add -> next; } for (i=0; i<2; i++) update_all_selections (this_proj -> modelgl, i); if (to_add != NULL) free_dummies (to_add); if (visible && (asearch -> action != DISPL && asearch -> action != RANMOVE)) { for (i=0; i<3; i++) { g_free (this_proj -> modelgl -> saved_coord[i]); this_proj -> modelgl -> saved_coord[i] = NULL; init_coordinates (this_proj, i, FALSE, TRUE); } this_proj -> modelgl -> was_moved = FALSE; this_proj -> modelgl -> atom_win -> rebuilt[0] = FALSE; this_proj -> modelgl -> atom_win -> rebuilt[1] = FALSE; if (this_proj -> modelgl -> atom_win -> msd) g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = allocfloat (this_proj -> natomes); if (this_proj -> modelgl -> atom_win -> msd_all) g_free (this_proj -> modelgl -> atom_win -> msd_all); this_proj -> modelgl -> atom_win -> msd_all = allocfloat (this_proj -> nspec); for (i=0; i<2; i++) clean_motion_search (this_proj, this_proj -> modelgl -> search_widg[2+4*i], i); motion_to_zero (this_proj -> modelgl -> search_widg[2]); } else if (visible && (asearch -> action == DISPL || asearch -> action == RANMOVE)) { this_proj -> modelgl -> was_moved = TRUE; clean_motion_search (this_proj, this_proj -> modelgl -> search_widg[(asearch -> action == DISPL) ? 6 : 2], (asearch -> action == DISPL) ? 1 : 0); if (asearch -> action == RANMOVE) motion_to_zero (this_proj -> modelgl -> search_widg[2]); } else if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { g_free (this_proj -> modelgl -> saved_coord[1]); this_proj -> modelgl -> saved_coord[1] = save_coordinates (this_proj, 1); this_proj -> modelgl -> baryc[1] = get_bary (this_proj, 1); } update (this_proj -> modelgl); #ifdef GTK4 update_menu_bar (this_proj -> modelgl); #endif clean_coord_window (this_proj); switch (asearch -> action) { case REPLACE: return extra; break; case INSERT: return extra; break; case REMOVE: return remove; break; default: return 0; break; } } /*! \fn void clean_all_trees (atom_search * asearch, project * this_proj) \brief clean all tree models in the 'model edition' window \param asearch the target atom search \param this_proj the target project */ void clean_all_trees (atom_search * asearch, project * this_proj) { int i, j; for (i=0; i<5; i++) { if (i == 3) { clean_picked_and_labelled (this_proj -> modelgl -> search_widg[i+2], TRUE); if (this_proj -> modelgl -> search_widg[INSERT] -> in_selection) { allocate_todo (this_proj -> modelgl -> search_widg[i+2], this_proj -> modelgl -> search_widg[INSERT] -> in_selection); atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_inserted[1]; j = 0; while (object) { object -> id = j; j ++; object = object -> next; } update_search_tree (this_proj -> modelgl -> search_widg[i+2]); } } else if (this_proj -> modelgl -> search_widg[i+2] -> atom_tree) { j = get_asearch_filter (this_proj -> modelgl -> search_widg[i+2]); if ((j == 3 && ! this_proj -> modelgl -> adv_bonding[0]) || (j == 4 && ! this_proj -> modelgl -> adv_bonding[1])) { gtk_combo_box_set_active (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[i+2] -> filter_box), 0); set_filter_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[i+2] -> filter_box), this_proj -> modelgl -> search_widg[i+2]); } else if (asearch -> action != DISPL && asearch -> action != RANMOVE) { set_filter_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[i+2] -> filter_box), this_proj -> modelgl -> search_widg[i+2]); } update_search_tree (this_proj -> modelgl -> search_widg[i+2]); } if ((i == 0 || i == 4) && this_proj -> modelgl -> search_widg[i+2] -> todo_size >= 10000) { re_populate_tree_search (this_proj -> modelgl -> search_widg[i+2]); } } if ((this_proj -> modelgl -> atom_win -> adv_bonding[0] && ! this_proj -> modelgl -> adv_bonding[0]) || (this_proj -> modelgl -> atom_win -> adv_bonding[1] && ! this_proj -> modelgl -> adv_bonding[1])) { int j; for (i=0; i<5; i++) { if (i != 3) { if (this_proj -> modelgl -> search_widg[i+2] -> passivating) { j = (this_proj -> modelgl -> search_widg[i+2] -> object < 2) ? 3 : 2; } else { j = (! this_proj -> modelgl -> search_widg[i+2] -> object) ? 3 : 2; } if (GTK_IS_WIDGET(this_proj -> modelgl -> search_widg[i+2] -> filter_box)) { if (this_proj -> modelgl -> atom_win -> adv_bonding[1] && ! this_proj -> modelgl -> adv_bonding[1]) { gtk_combo_box_text_remove ((GtkComboBoxText *) this_proj -> modelgl -> search_widg[i+2] -> filter_box, j+1); } if (this_proj -> modelgl -> atom_win -> adv_bonding[0] && ! this_proj -> modelgl -> adv_bonding[0]) { gtk_combo_box_text_remove ((GtkComboBoxText *) this_proj -> modelgl -> search_widg[i+2] -> filter_box, j); } } } } } for (i=0 ;i<2; i++) this_proj -> modelgl -> atom_win -> adv_bonding[i] = this_proj -> modelgl -> adv_bonding[i]; } /*! \fn void apply_action (project * this_proj, atom_search * asearch) \brief apply edition action \param this_proj the target project \param asearch the target atom search */ void apply_action (project * this_proj, atom_search * asearch) { gchar * str; gchar * appl[3] = {"replaced", "removed", "inserted"}; int k, l; l = 0; gboolean visible = (this_proj -> modelgl -> atom_win) ? this_proj -> modelgl -> atom_win -> visible : FALSE; if (asearch -> action == REPLACE || asearch -> action == REMOVE) { to_remove_this_list_of_objects (this_proj, asearch); l = action_atoms_from_project (this_proj, remove_search, visible); g_free (remove_search); remove_search = NULL; } k = (asearch -> action == REMOVE) ? l : action_atoms_from_project (this_proj, asearch, visible); if (asearch -> action != DISPL && asearch -> action != RANMOVE) { switch (k) { case 0: str = g_strdup_printf ("No atoms to be %s !", appl[asearch -> action-3]); break; default: if (asearch -> action == REPLACE && l) { if (asearch -> pointer[0].c == 8) l += asearch -> int_b - k; str = g_strdup_printf ("%d atom(s) removed !\n%d atom(s) inserted !", l, k); } else { str = g_strdup_printf ("%d atom(s) %s !", k, appl[asearch -> action-3]); } break; } if (this_proj -> modelgl -> atom_win -> win) { show_info (str, 0, this_proj -> modelgl -> atom_win -> win); } else { show_info (str, 0, this_proj -> modelgl -> win); } g_free (str); } if (visible) { if (k || l) { if (this_proj -> modelgl -> atom_win) { if (this_proj -> modelgl -> atom_win -> visible) clean_all_trees (asearch, this_proj); if (this_proj -> modelgl -> atom_win -> msd) { g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = NULL; } this_proj -> modelgl -> atom_win -> msd = allocfloat (this_proj -> natomes); } } } clean_other_window_after_edit (this_proj); } /*! \fn void prepare_random_action (project * this_proj, atom_search * asearch) \brief prepare random action \param this_proj the target project \param asearch the target atom search */ void prepare_random_action (project * this_proj, atom_search * asearch) { int i, j, k, l, m, n, o, p, q; double test, prob; atomic_object * object = NULL; atomic_object * tmp_oba, * tmp_obb; molecule * molfc; int max_num, total_num; gboolean lets_do_this = (asearch -> action == REMOVE || (asearch -> action == REPLACE && this_proj -> modelgl -> atom_win -> to_be_inserted[0])) ? TRUE : FALSE; if (lets_do_this) { int filter = get_asearch_filter (asearch); int obj = get_asearch_object (asearch); int num_elem = asearch -> todo_size; int * random_todo = duplicate_int (num_elem, asearch -> todo); total_num = (asearch -> mode && filter > 2 && obj) ? this_proj -> coord -> totcoord[2] : this_proj -> natomes; g_free (asearch -> todo); allocate_todo (asearch, total_num); if (asearch -> action == REPLACE && this_proj -> modelgl -> atom_win -> to_be_inserted[0]) { tmp_oba = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; object = duplicate_atomic_object (tmp_oba); tmp_obb = object; while (tmp_oba -> next) { tmp_oba = tmp_oba -> next; tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb = tmp_obb -> next; } g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[0]); this_proj -> modelgl -> atom_win -> to_be_inserted[0] = NULL; } gboolean doit; asearch -> in_selection = 0; tmp_oba = object; for (i=0; i chemistry -> nsps[i]; break; case 1: for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].numv == i) max_num ++; } break; case 2: j = 0; for (k=0; k nspec; k++) { j += this_proj -> coord -> ntg[1][k]; if (j > i) break; } l = 0; for (m=0; m coord -> ntg[1][m]; p = i - l; for (l=0; l natomes; l++) { if (this_proj -> atoms[0][l].sp == k && this_proj -> atoms[0][l].coord[1] == p) max_num ++; } break; case 3: if (obj) { max_num = this_proj -> coord -> totcoord[2]; } else { for (l=0; l natomes; l++) { if (this_proj -> atoms[0][l].coord[2] == i) max_num ++; } } break; case 4: molfc = & this_proj -> modelfc -> mols[0][i]; if (obj) { max_num = molfc -> multiplicity; } else { max_num = molfc -> natoms*molfc -> multiplicity; } break; } test = 1.0 / max_num; j = 0; // Using CPU time to randomize clock_t begin = clock(); k = (int)begin; while (j < random_todo[i]) { l = 0; for (m=0; m todo[m]) { doit = FALSE; if (filter < 3 || ! obj) { n = this_proj -> atoms[0][m].sp; if (this_proj -> atoms[0][m].pick[0] == asearch -> status || asearch -> status == 2) { switch (filter) { case 0: if (n == i) doit = TRUE; break; case 1: if (this_proj -> atoms[0][m].numv == i) doit = TRUE; break; case 2: o = this_proj -> atoms[0][m].coord[1]; for (q=0;q coord -> ntg[1][q]; if (o == i) doit = TRUE; break; default: if (this_proj -> atoms[0][m].coord[filter-1] == i) doit = TRUE; break; } } } else if (filter == 3) { doit = TRUE; } else { for (n=0; n multiplicity; n++) { if (molfc -> fragments[n] == m) { doit = TRUE; break; } } } if (doit) { l ++; o = (o+1)*max_num*m; prob = random3_(& n); if (prob >= (l-1)*test && prob < l*test) { j ++; asearch -> todo[m] = 1; if (asearch -> action == REPLACE) { if (this_proj -> modelgl -> atom_win -> to_be_inserted[0] == NULL) { this_proj -> modelgl -> atom_win -> to_be_inserted[0] = duplicate_atomic_object (tmp_oba); tmp_obb = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; } else { tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb -> next -> prev = tmp_obb; tmp_obb = tmp_obb -> next; } tmp_obb -> id = m; } asearch -> in_selection ++; if (j == random_todo[i]) break; } } } } } if (asearch -> action == REPLACE) { if (tmp_oba -> next != NULL) tmp_oba = tmp_oba -> next; } } } if (asearch -> action == REPLACE) g_free (object); if (random_todo) g_free (random_todo); int old_filter = asearch -> filter; // if (asearch -> mode && obj && asearch -> filter == 3) asearch -> filter = 2; apply_action (this_proj, asearch); asearch -> filter = old_filter; } } /*! \fn gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing) \brief check for object(s) in selection to apply action \param this_proj the target project \param asearch the target atom search \param editing actually going for action (1) or simply counting elements (0) */ gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing) { int i, j, k, l, m, n, o, p, q; gboolean taking_action = FALSE; if (asearch -> action == INSERT) { taking_action = TRUE; } else { i = j = 0; if (asearch -> mode) { for (l=0; l todo_size; l++) { if (asearch -> todo[l]) i++; if (asearch -> action == REPLACE) { if (get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[0], -(l+3), 0)) { if (asearch -> todo[l]) j ++; } } else { if (asearch -> pick[l] && asearch -> todo[l]) j ++; } } if (asearch -> action == REMOVE && i == j) { taking_action = TRUE; } else if (asearch -> action == REPLACE && i == j && i == asearch -> in_selection) { taking_action = TRUE; } } else { m = (asearch -> pointer[0].c == 3) ? 0 : (asearch -> pointer[0].c == 5) ? 1 : 3; int filter = get_asearch_filter (asearch); int object = get_asearch_object (asearch); int pass_size; int * pass_todo = NULL; atomic_object * passivating_object = NULL; atomic_object * pao = NULL; atomic_object * pio = NULL; float * tmp_msd = NULL; if (asearch -> passivating) { if (object > 1 && filter > 2) { pass_size = this_proj -> coord -> totcoord[filter - 1]; } else { pass_size = this_proj -> natomes; } pass_todo = allocint (pass_size); if (asearch -> action == RANMOVE) tmp_msd = allocfloat (this_proj -> natomes); } switch (asearch -> action) { case DISPL: for (l=0; l todo_size; l++) { if (asearch -> todo[l]) i ++; if (editing) { if (asearch -> todo[l]) { if (asearch -> passivating) { if (object < 2) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; default: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = asearch -> todo[l]; k ++; } } break; } } else { switch (filter) { case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; k ++; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; k ++; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; default: for (n=0; n coord -> totcoord[filter -1]; n++) { if (n == l) { pass_todo[n] = asearch -> todo[l]; k ++; if (! passivating_object) { passivating_object = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; } } } } } } break; case REPLACE: for (l=0; l todo_size; l++) { if (asearch -> todo[l]) i ++; pio = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[m], l, 0); if (pio) { if (asearch -> todo[l]) { j ++; if (asearch -> passivating) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } default: if (object < 2) { for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = n; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = n; pao -> next -> prev = pao; pao = pao -> next; } k ++; } } } else { pass_todo[l] = asearch -> todo[l]; if (! passivating_object) { passivating_object = duplicate_atomic_object (pio); pao = passivating_object; pao -> id = l; } else { pao -> next = duplicate_atomic_object (pio); pao -> id = l; pao -> next -> prev = pao; pao = pao -> next; } k ++; } break; } } } } } break; case REMOVE: for (l=0; l todo_size; l++) { if (asearch -> todo[l]) { i ++; if (asearch -> passivating) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = 1; k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = 1; k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = 1; k ++; } } default: if (object < 2) { for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = 1; k ++; } } } else { pass_todo[l] = 1; k ++; } break; } } } } break; case RANMOVE: for (l=0; l todo_size; l++) { if (asearch -> passivating) { if (asearch -> todo[l] && this_proj -> modelgl -> atom_win -> msd_all[l] > 0.0) { i ++; if (object < 2) { switch (filter) { case 0: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].sp == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; default: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; if (o == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; k ++; } } break; } } else { switch (filter) { case 1: for (n=0; n natomes; n++) { if (this_proj -> atoms[0][n].numv == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; case 2: for (n=0; n natomes; n++) { o = this_proj -> atoms[0][n].coord[filter - 1]; p = this_proj -> atoms[0][n].sp; for (q=0; q coord -> ntg[1][q]; if (o == l) { pass_todo[n] = asearch -> todo[l]; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; if (! passivating_object) { passivating_object = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_atom_coordination (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } k ++; } } break; default: for (n=0; n coord -> totcoord[filter -1]; n++) { if (n == l) { pass_todo[n] = asearch -> todo[l]; k ++; tmp_msd[n] = this_proj -> modelgl -> atom_win -> msd_all[l]; if (! passivating_object) { passivating_object = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao = passivating_object; } else { pao -> next = create_object_from_frag_mol (this_proj, filter-1, n, NULL); pao -> next -> prev = pao; pao = pao -> next; } } } break; } } } } else if (object && filter > 2) { if (asearch -> todo[l] && this_proj -> modelgl -> atom_win -> msd_all[l] > 0.0) i ++; } else { if (asearch -> todo[l] && this_proj -> modelgl -> atom_win -> msd[l] > 0.0) i ++; } } break; } if (asearch -> action == REMOVE && i) { taking_action = TRUE; } else if (asearch -> action == REPLACE) { if (asearch -> in_selection == i && i == j) taking_action = TRUE; } else { asearch -> in_selection = i; if (i) taking_action = TRUE; } if (asearch -> passivating && taking_action && editing) { g_free (asearch -> todo); asearch -> todo = duplicate_int (pass_size, pass_todo); g_free (pass_todo); asearch -> todo_size = pass_size; asearch -> in_selection = k; switch (asearch -> action) { case DISPL: this_proj -> modelgl -> atom_win -> to_be_moved[0] = passivating_object; break; case REPLACE: this_proj -> modelgl -> atom_win -> to_be_inserted[m] = passivating_object; break; case RANMOVE: if (this_proj -> modelgl -> atom_win -> msd) g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = duplicate_float (this_proj -> natomes, tmp_msd); g_free (tmp_msd); this_proj -> modelgl -> atom_win -> to_be_moved[1] = passivating_object; break; } } } } return taking_action; } /*! \fn atom_search * duplicate_atom_search (atom_search * asearch) \brief duplicate atom search data structure \param asearch */ atom_search * duplicate_atom_search (atom_search * asearch) { atom_search * bsearch = g_malloc0 (sizeof*bsearch); bsearch -> search_digit = asearch -> search_digit; bsearch -> proj = asearch -> proj; bsearch -> action = asearch -> action; bsearch -> status = asearch -> status; bsearch -> mode = asearch -> mode; bsearch -> object = asearch -> object; bsearch -> filter = asearch -> filter; bsearch -> search_digit = asearch -> search_digit; bsearch -> spec_to_add = asearch -> spec_to_add; bsearch -> num_to_add = asearch -> num_to_add; bsearch -> in_selection = asearch -> in_selection; bsearch -> passivating = asearch -> passivating; bsearch -> was_selected = asearch -> was_selected; bsearch -> recompute_bonding = asearch -> recompute_bonding; bsearch -> set_for_all = asearch -> set_for_all; bsearch -> int_b = asearch -> int_b; int i = get_asearch_num_objects (asearch); bsearch -> lab = duplicate_int (i, asearch -> lab); bsearch -> pick = duplicate_int (i, asearch -> lab); bsearch -> todo_size = asearch -> todo_size; bsearch -> todo = duplicate_int (bsearch -> todo_size, asearch -> todo); for (i=0; i<6; i++) { bsearch -> pointer[i].a = asearch -> pointer[i].a; bsearch -> pointer[i].b = asearch -> pointer[i].b; bsearch -> pointer[i].c = asearch -> pointer[i].c; } return bsearch; } /*! \fn G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data) \brief take edition action \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i; i = id -> c; atom_search * this_search = duplicate_atom_search (this_proj -> modelgl -> search_widg[i]); if (do_we_have_objects_in_selection(this_proj, this_search, TRUE)) { if (i != RANMOVE) { if (this_search -> mode) { prepare_random_action (this_proj, this_search); } else { apply_action (this_proj, this_search); } } else { random_move (this_proj, this_search); clean_all_trees (this_search, this_proj); } if (this_proj -> modelgl -> atom_win -> visible) { for (i=0; i<5; i++) widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), i), this_proj -> natomes); widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), 3), 1); } } else { if (i < RANMOVE) { show_info ("Nothing to be done, check selection !", 0, this_proj -> modelgl -> atom_win -> win); } else { show_info ("Nothing to be done, check selection and/or MSD !", 0, this_proj -> modelgl -> atom_win -> win); } } } Atomes-GNU-1.1.14/src/opengl/edit/atom_coord.c000066400000000000000000000606271457665371200210020ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_coord.c * @short Functions to correct the coordination menus and the corresponding data pointers after edition * @author Sébastien Le Roux */ /* * This file: 'atom_coord.c' * * Contains: * - The functions to correct the coordination menus and the corresponding data pointers after edition * * List of functions: int test_this_coord (project * this_proj, int spec, int gid, int cid, int minc, int maxc); void print_coord_info (project * this_proj, coord_info * coord); void clean_coords_and_geoms (project * this_proj, atom_edition * edit, int new_spec, int rem, int adds, int * spid, int *** tmpgeo, gboolean * showcoord[2], gboolean * showpoly[2]); void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_mol); void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag); coord_info * duplicate_coord_info (coord_info * old_coord); */ #include "atom_edit.h" /*! \fn int test_this_coord (project * this_proj, int spec, int gid, int cid, int minc, int maxc) \brief Look for a type of coordination sphere in a model \param this_proj the target project \param spec the number of chemical species \param gid the coordination type \param cid the coordination id \param minc min value for coordination id \param maxc max value for coordination id */ int test_this_coord (project * this_proj, int spec, int gid, int cid, int minc, int maxc) { int i, j, k, l; l = 0; for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[gid]; if (j == spec && (k > maxc && k < minc)) return -1; if (j == spec && k == cid) { l ++; } } return l; } /*! \fn void print_coord_info (project * this_proj, coord_info * coord) \brief print coordination info \param this_proj the target project \param coord the target coordination info */ void print_coord_info (project * this_proj, coord_info * coord) { int * min_bs, * max_bs; int i, j, k, l, m; gchar * str; int test; if (coord -> species) { min_bs = allocint(coord -> species); max_bs = allocint(coord -> species); g_debug (" "); g_debug ("coord -> species = %d", coord -> species); g_debug (" "); for (i=0; i<4; i++) { g_debug (" --- start geo[%d] ---", i); g_debug ("geo i = %d, totcoord[%d] = %d", i, i, coord -> totcoord[i]); if ((i < 2 || i > 3) && coord -> totcoord[i]) { j = (i < 2) ? coord -> species : 1; g_debug (" spec i = %d, jmax= %d", i, j); g_debug (" "); for (k=0; k partial_geo[k][0][0]; for (m=0; m species; m++) { min_bs[k] = min (min_bs[k], coord -> partial_geo[k][0][m]); max_bs[k] = max (max_bs[k], coord -> partial_geo[k][0][m]); } for (l=1; l ntg[i][k]; l++) { for (m=0; m species; m++) { min_bs[k] = min (min_bs[k], coord -> partial_geo[k][l][m]); max_bs[k] = max (max_bs[k], coord -> partial_geo[k][l][m]); } } } for (k=0; k ntg[%d][%d] = %d", i, k, i, k, coord -> ntg[i][k]); test = (this_proj) ? test_this_coord (this_proj, k, i, 0, min_bs[k], max_bs[k]) : 0; str = g_strdup_printf (" l = %d, coord -> geolist[%d][%d][%d]= %d, num[at,%d]= %d", 0, i, k, 0, coord -> geolist[i][k][0], 0, test); if (coord -> ntg[i][k] > 1) { for (l=1; l ntg[i][k]; l++) { test = (this_proj) ? test_this_coord (this_proj, k, i, l, min_bs[k], max_bs[k]) : 0; str = g_strdup_printf ("%s\n l = %d, coord -> geolist[%d][%d][%d]= %d, num[at,%d]= %d", str, l, i, k, l, coord -> geolist[i][k][l], l, test); } } g_debug ("%s", str); g_free (str); } if (i == 1) { g_debug (" "); for (k=0; k partial_geo[%d][%d][%d]= %d", k, k, 0, 0, coord -> partial_geo[k][0][0]); for (l=1; l partial_geo[%d][%d][%d]= %d", str, k, k, 0, l, coord -> partial_geo[k][0][l]); } if (coord -> ntg[i][k] > 1) { for (l=1; l ntg[i][k]; l++) { str = g_strdup_printf ("%s\n\n k = %d, coord -> partial_geo[%d][%d][%d]= %d", str, k, k, l, 0, coord -> partial_geo[k][l][0]); for (m=1; m partial_geo[%d][%d][%d]= %d", str, k, k, l, m, coord -> partial_geo[k][l][m]); } } } g_debug ("%s", str); g_free (str); } } g_debug (" "); } g_debug (" --- end geo[%d] ---", i); g_debug (" "); } g_free (min_bs); g_free (max_bs); } else { g_debug (" "); g_debug ("Coord is empty no species !"); g_debug (" "); } } /*! \fn coord_info * duplicate_coord_info (coord_info * old_coord) \brief duplicate coordination information data structure \param old_coord the coordination info to duplicate */ coord_info * duplicate_coord_info (coord_info * old_coord) { coord_info * new_coord = g_malloc0 (sizeof*new_coord); int i, j, k, l; if (! old_coord -> species) return new_coord; new_coord -> species = old_coord -> species; new_coord -> cmax = old_coord -> cmax; new_coord -> cmin = old_coord -> cmin; for (i=0; i<10; i++) { new_coord -> totcoord[i] = old_coord -> totcoord[i]; if ((i < 2 || i > 3) && old_coord -> totcoord[i]) { j = (i < 2) ? new_coord -> species : 1; new_coord -> ntg[i] = duplicate_int (j, old_coord -> ntg[i]); new_coord -> geolist[i] = g_malloc0 (j*sizeof*new_coord -> geolist[i]); if (i == 1) new_coord -> partial_geo = g_malloc0 (j*sizeof*new_coord -> partial_geo); for (k=0; k geolist[i][k] = duplicate_int (new_coord -> ntg[i][k], old_coord -> geolist[i][k]); if (i == 1) { new_coord -> partial_geo[k] = g_malloc0 (new_coord -> ntg[i][k]*sizeof*new_coord -> partial_geo[k]); for (l=0; l ntg[i][k]; l++) { new_coord -> partial_geo[k][l] = duplicate_int (new_coord -> species, old_coord -> partial_geo[k][l]); } } } } } return new_coord; } /*! \fn void clean_coords_and_geoms (project * this_proj, atom_edition * edit, * int new_spec, int rem, int adds, int * spid, int *** tmpgeo, * gboolean * showcoord[2], gboolean * showpoly[2]) \brief clean coordination data and atomic coordination id data \param this_proj the target project \param edit \param new_spec the number of chemical species \param rem the number of chemical species to remove \param adds the number of new chemical species \param spid the number of atom(s) by chemical species \param tmpgeo the new number of coordination [c] by chemical species [s] 'coorrd -> ntg[c][s]' \param showcoord the coordination show status \param showpoly the polyhedra show status */ void clean_coords_and_geoms (project * this_proj, atom_edition * edit, int new_spec, int rem, int adds, int * spid, int *** tmpgeo, gboolean * showcoord[2], gboolean * showpoly[2]) { int i, j, k, l, m, n, o, p, q, r, s; int * tntg; coord_info * old_coord = duplicate_coord_info (edit -> coord); g_free (edit -> coord); edit -> coord = g_malloc0 (sizeof*edit -> coord); coord_info * tmp_coord = edit -> coord; this_proj -> coord -> cmin = 20; this_proj -> coord -> cmax = 0; for (i=0; i<2; i++) { tmp_coord -> totcoord[i] = 0; tmp_coord -> geolist[i] = g_malloc (new_spec*sizeof*tmp_coord -> geolist[i]); tmp_coord -> ntg[i] = allocint (new_spec); if (i) tmp_coord -> partial_geo = g_malloc (new_spec*sizeof*tmp_coord -> partial_geo); showcoord[i] = allocbool(old_coord -> totcoord[i]); showpoly[i] = allocbool(old_coord -> totcoord[i]); // g_debug ("i= %d, allocating showcoord/poly of %d", i, old_coord -> totcoord[i]); tmp_coord -> totcoord[i] = 0; j = s = 0; // g_debug ("i= %d, new_spec= %d, rem= %d", i, new_spec, rem); for (k=0; k ntg[i][k]); tntg = allocint (old_coord -> ntg[i][k]); // if (i == 0) g_debug (" checking geom:: i= %d, SP= %d, ntg[%d][%d]= %d", i, k, i, k, old_coord -> ntg[i][k]); for (m=0; m ntg[i][k]; m++) { // if (i == 0) g_debug (" :: m = %d, tmpgeo[%d][%d][%d]= %d", m, i, k, m, tmpgeo[i][k][m]); if (tmpgeo[i][k][m]) { p = 1; if (i) { //g_debug ("checking partial, m= %d, l= %d", m, l); if (l) { p = 0; for (o=0; o partial_geo[k][m][q] != old_coord -> partial_geo[k][o][q]) { p = 1; break; } } if (! p) break; } } } else { for (o=0; o geolist[i][k][m] == old_coord -> geolist[i][k][o]) { // g_debug (" WAS HERE:: k= %d, m= %d, o= %d, geolist = %d", k, m, o, old_coord -> geolist[i][k][m]); p = 0; break; } } } if (p) { // g_debug (" i= %d, tntg[m]= 1, m= %d", i, m); tntg[m] = 1; o = l; l ++; } // if (i == 0) g_debug (" geo= %d, old_sp= %d, new_sp= %d, old_geo= %d, new_geo= %d", i, k, s, m, o); for (p=0; p natomes; p++) { if (this_proj -> atoms[0][p].sp == s) { if (this_proj -> atoms[0][p].coord[i] == m) { this_proj -> atoms[0][p].coord[i] = o; } } } } } if (l) { tmp_coord -> geolist[i][j] = allocint(l); if (i) { // g_debug ("allocating partial[%d] of %d and %d", j, l, new_spec); tmp_coord -> partial_geo[j] = allocdint (l, new_spec); } // if (! i) g_debug (" ntg[0][%d]= %d", j, l); tmp_coord -> ntg[i][j] = l; tmp_coord -> totcoord[i] += l; p = (k < new_spec+rem-adds) ? k : new_spec+rem-adds; q = 0; for (r=0; r coord -> ntg[i][r]; p = 0; for (r=0; r ntg[i][r]; m = 0; for (n=0; n ntg[i][k]; n++) { // g_debug ("n= %d, tntg[%d]= %d", n, n, tntg[n]); if (tntg[n]) { tmp_coord -> geolist[i][j][m] = old_coord -> geolist[i][k][n]; this_proj -> coord -> cmax = max (tmp_coord -> geolist[i][j][m], this_proj -> coord -> cmax); this_proj -> coord -> cmin = min (tmp_coord -> geolist[i][j][m], this_proj -> coord -> cmin); if (k < new_spec-adds+rem) { if (n < this_proj -> coord -> ntg[i][k]) { //g_debug ("p= %d, m= %d, p+m= %d, q= %d, n= %d, q+n= %d", p, m, p+m, q, n, q+n); showcoord[i][p+m] = this_proj -> modelgl -> anim -> last -> img -> show_coord[i][q+n]; showpoly[i][p+m] = this_proj -> modelgl -> anim -> last -> img -> show_poly[i][q+n]; } else { showcoord[i][p+m] = TRUE; showpoly[i][p+m] = FALSE; } } else { //g_debug ("p= %d, m= %d, p+m= %d", p, m, p+m); showcoord[i][p+m] = TRUE; showpoly[i][p+m] = FALSE; } if (i) { o = 0; for (r=0; r partial_geo[j][m][o] = old_coord -> partial_geo[k][n][r]; //g_debug ("j= %d, m= %d, o= %d, partial= %d, %d", j, m, o, tmp_coord -> partial_geo[j][m][o], old_coord -> partial_geo[k][n][r]); o ++; } } } m ++; } } } g_free (tntg); j ++; } s += (spid[k]) ? 1 : 0; } } } /*! \fn void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, * gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, * gboolean update_it, gboolean update_frag, gboolean update_mol) \brief update coordination(s), fragment(s) and molecule(s) OpenGL menus and associated data pointers \param this_proj the target project \param coord the target coordination info data structure \param new_spec the number of chemical species \param nmols the number of fragment(s) to add \param showcoord the coordination show status \param showpoly the polyhedra show status \param showfrag the fragment show status \param update_it update atoms data (and GTK3 menus) \param update_mol update molecule(s) data */ void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_mol) { int i, j, k; for (i=0; i<4; i++) { g_free (this_proj -> modelgl -> gcid[i]); this_proj -> modelgl -> gcid[i] = NULL; } for (i=0; i<2; i++) init_opengl_coords (i, coord -> totcoord[i], 0); i = 0; for (j=0; j ntg[0][j], coord -> geolist[0][j]); } i ++; for (j=0; j ntg[1][j]); for (k=0; k ntg[1][j]; k++) partial_geo_out_ (& j, & k, & new_spec, coord -> partial_geo[j][k]); init_menu_coordinations_ (& i, & j, & coord -> ntg[1][j], coord -> geolist[1][j]); } i = 2; this_proj -> coord -> totcoord[i] += nmols; if (this_proj -> coord -> totcoord[i]) { this_proj -> modelgl -> adv_bonding[i-2] = TRUE; init_opengl_coords (i, this_proj -> coord -> totcoord[i], 0); init_menu_fragmol_ (& i); } else { this_proj -> modelgl -> adv_bonding[i-2] = FALSE; } if (update_mol) { i = 3; if (this_proj -> coord -> totcoord[i]) { this_proj -> modelgl -> adv_bonding[i-2] = TRUE; init_opengl_coords (i, this_proj -> coord -> totcoord[i], 0); init_menu_fragmol_ (& i); } } else { this_proj -> modelgl -> adv_bonding[1] = FALSE; this_proj -> coord -> totcoord[3] = 0; } #ifdef GTK3 prep_all_coord_menus (this_proj -> modelgl); #endif if (update_it) { gboolean * viz[2]; for (i=0; i<2; i++) viz[i] = allocbool (this_proj -> natomes); for (i=0; i natomes; i++) { for (j=0; j<2; j++) viz[j][i] = this_proj -> atoms[0][i].show[j]; } #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) { for (j=0; j coord -> totcoord[i]; j++) { if (this_proj -> modelgl -> ogl_geom[0][i][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j]) != showcoord[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j], showcoord[i][j]); } } } if (this_proj -> modelgl -> ogl_poly[0][i][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_poly[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j]) != showpoly[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j], showpoly[i][j]); } } } } g_free (showcoord[i]); g_free (showpoly[i]); } for (i=0; i coord -> totcoord[2]; i++) { if (this_proj -> modelgl -> ogl_geom[0][2][i]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[0][2][i])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][2][i]) != showfrag[i]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][2][i], showfrag[i]); } } } } #endif for (i=0; i natomes; i++) { for (j=0; j<2; j++) this_proj -> atoms[0][i].show[j] = viz[j][i]; } for (i=0; i<2; i++) g_free (viz[i]); } } /*! \fn void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag) \brief recover image pointer data and OpenGL window menu structure \param this_proj the target project \param nmols the number of molecules \param add the number of new chemical species \param rem the number of chemical species to remove \param num the number of atom(s) by chemical species \param rec the lsit of removed chemical species, if any \param tmpgeo the new number of coordination [c] by chemical species [s] 'coorrd -> ntg[c][s]' \param showfrag the saved fragment(s) show information */ void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag) { // Now OpenGL data int old_spec = this_proj -> nspec; //g_debug ("recover opengl:: old_spec= %d, add= %d, rem= %d", old_spec, add, rem); int new_spec = old_spec + add - rem; gboolean * showcoord[2]; gboolean * showpoly[2]; gboolean update_it = FALSE; clean_coords_and_geoms (this_proj, this_proj -> modelgl -> atom_win, new_spec, rem, add, num, tmpgeo, showcoord, showpoly); if (add || rem) { if (old_spec) free_glwin_spec_data (this_proj, old_spec); glwin_init_spec_data (this_proj, new_spec); } this_proj -> nspec = new_spec; active_project_changed (this_proj -> id); if ((add && old_spec) || rem) { int h, i, j, k, l, m, n, o, p, q; image * new_img = g_malloc0 (sizeof*new_img); image_init_spec_data (new_img, this_proj, new_spec); image * old_img = this_proj -> modelgl -> anim -> last -> img; // copy info in new data, then clean old data and copy it back for (i=0; i<2; i++) { for (j=0; j show_atom[i][j-k] = old_img -> show_atom[i][j]; new_img -> show_label[i][j-k] = old_img -> show_label[i][j]; } } } for (h=0; h<2*old_spec; h++) { i = (h < old_spec) ? h : h - old_spec; if (num[i]) { j = rec[i]; k = (h < old_spec) ? 0 : 1; l = h - k*old_spec - j + k*new_spec; new_img -> sphererad[l] = old_img -> sphererad[h]; new_img -> atomicrad[l] = old_img -> atomicrad[h]; new_img -> pointrad[l] = old_img -> pointrad[h]; new_img -> at_color[l].red = old_img -> at_color[h].red; new_img -> at_color[l].green = old_img -> at_color[h].green; new_img -> at_color[l].blue = old_img -> at_color[h].blue; new_img -> at_color[l].alpha = old_img -> at_color[h].alpha; for (m=0; m<2*old_spec; m++) { n = (m < old_spec) ? m : m - old_spec; if (num[n]) { o = rec[n]; p = (m < old_spec) ? 0 : 1; q = m - p*old_spec - o + p*new_spec; new_img -> linerad[l][q] = old_img -> linerad[h][m]; new_img -> bondrad[l][q] = old_img -> bondrad[h][m]; } } } } for (i=0; i<2; i++) { if (old_img -> show_atom[i] != NULL) { g_free (old_img -> show_atom[i]); old_img -> show_atom[i] = NULL; } if (old_img -> show_label[i] != NULL) { g_free (old_img -> show_label[i]); old_img -> show_label[i] = NULL; } } for (i=0; i<9; i++) { g_free (old_img -> spcolor[i]); old_img -> spcolor[i] = NULL; } g_free (old_img -> sphererad); g_free (old_img -> atomicrad); g_free (old_img -> pointrad); g_free (old_img -> at_color); g_free (old_img -> linerad); g_free (old_img -> bondrad); for (i=0; i<2; i++) { old_img -> show_atom[i] = duplicate_bool (new_spec, new_img -> show_atom[i]); old_img -> show_label[i] = duplicate_bool (new_spec, new_img -> show_label[i]); } old_img -> sphererad = duplicate_double (2*new_spec, new_img -> sphererad); old_img -> atomicrad = duplicate_double (2*new_spec, new_img -> atomicrad); old_img -> pointrad = duplicate_double (2*new_spec, new_img -> pointrad); old_img -> at_color = duplicate_color (2*new_spec, new_img -> at_color); old_img -> linerad = g_malloc (2*new_spec*sizeof*old_img -> linerad); old_img -> bondrad = g_malloc (2*new_spec*sizeof*old_img -> bondrad); for (i=0; i<2*new_spec; i++) { old_img -> linerad[i] = duplicate_double (2*new_spec, new_img -> linerad[i]); old_img -> bondrad[i] = duplicate_double (2*new_spec, new_img -> bondrad[i]); } for (i=0; i<9; i++) { old_img -> spcolor[i] = NULL; if (i < 2) { old_img -> spcolor[i] = g_malloc (new_spec*sizeof*old_img -> spcolor[i]); } else { old_img -> spcolor[i] = g_malloc (1*sizeof*old_img -> spcolor[i]); old_img -> spcolor[i][0] = NULL; } } g_free (new_img); update_it = TRUE; } else if (add) { image_init_spec_data (this_proj -> modelgl -> anim -> last -> img, this_proj, new_spec); } if (add || rem) { #ifdef GTK3 // GTK3 Menu Action To Check int i; for (i=1; i modelgl -> ogl_coord[i] = NULL; for (i=0; i modelgl -> ogl_rings[i] = NULL; this_proj -> modelgl -> ogl_chains[0] = NULL; prepare_opengl_menu_bar (this_proj -> modelgl); // GTK3 Menu Action To Check set_advanced_bonding_menus (this_proj -> modelgl); #endif } new_coord_menus (this_proj, this_proj -> modelgl -> atom_win -> coord, new_spec, nmols, showcoord, showpoly, showfrag, update_it, (add || rem) ? FALSE : (! nmols) ? TRUE : FALSE); } Atomes-GNU-1.1.14/src/opengl/edit/atom_edit.c000066400000000000000000000446361457665371200206230ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_edit.c * @short Functions to create the model edition window * @author Sébastien Le Roux */ /* * This file: 'atom_edit.c' * * Contains: * - The functions to create the model edition window * * List of functions: gboolean is_atom_win_active (glwin * view); G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean delete_action (GtkWidget * widg, GdkEvent * event, gpointer data); void clean_coord_window (project * this_proj); void clean_other_window_after_edit (project * this_proj); void clean_atom_win (project * this_proj); void prepare_atom_edition (gpointer data, gboolean visible); G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data); G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data); GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox); GtkWidget * create_edition_window (project * this_proj); atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); */ #include "atom_edit.h" float limit[2] = {100.0, 180.0}; gchar * action_name[5] = {"Move", "Replace", "Remove", "Insert", "Random move"}; gchar * action_atoms[3] = {"All non-selected atoms", "All selected atoms", "All atoms"}; gboolean was_moved; /*! \fn gboolean is_atom_win_active (glwin * view) \brief is the model edition window visible ? \param view the target glwin */ gboolean is_atom_win_active (glwin * view) { if (view -> atom_win) { return view -> atom_win -> visible; } return FALSE; } /*! \fn void clean_coord_window (project * this_proj) \brief update the environment configuration window after edtion \param this_proj the target project */ void clean_coord_window (project * this_proj) { if (this_proj -> modelgl -> coord_win) { #ifdef GTK3 int x, y; gtk_window_get_position (GTK_WINDOW(this_proj -> modelgl -> coord_win -> win), & x, & y); #endif this_proj -> modelgl -> coord_win -> win = destroy_this_widget (this_proj -> modelgl -> coord_win -> win); this_proj -> modelgl -> coord_win -> win = advanced_coord_properties (this_proj -> modelgl, 0); #ifdef GTK3 gtk_window_move (GTK_WINDOW(this_proj -> modelgl -> coord_win -> win), x ,y); #endif } } /*! \fn void clean_other_window_after_edit (project * this_proj) \brief update other windows after model edition if required \param this_proj the target project */ void clean_other_window_after_edit (project * this_proj) { int i; clean_coord_window (this_proj); if (this_proj -> modelgl -> cell_win) { if (this_proj -> modelgl -> cell_win -> win && ! this_proj -> modelgl -> cell_win -> slab_passivate) { i = gtk_notebook_get_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> cell_win -> notebook)); #ifdef GTK3 int x, y; gtk_window_get_position (GTK_WINDOW(this_proj -> modelgl -> cell_win -> win), & x, & y); #endif this_proj -> modelgl -> cell_win -> win = destroy_this_widget (this_proj -> modelgl -> cell_win -> win); this_proj -> modelgl -> cell_win -> density = NULL; if (this_proj -> modelgl -> cell_win -> slab_lot) g_free (this_proj -> modelgl -> cell_win -> slab_lot); this_proj -> modelgl -> cell_win -> slab_lot = allocint (this_proj -> nspec); this_proj -> modelgl -> cell_win -> slab_info = NULL; if (this_proj -> natomes) { this_proj -> modelgl -> cell_win -> win = create_cell_edition_window (this_proj, & this_proj -> modelgl -> colorp[0][0]); gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> cell_win -> notebook), i); #ifdef GTK3 gtk_window_move (GTK_WINDOW(this_proj -> modelgl -> cell_win -> win), x ,y); #endif show_the_widgets (this_proj -> modelgl -> cell_win -> win); for (i=1; i<6; i++) { if (i < 3) gtk_widget_hide (this_proj -> modelgl -> cell_win -> slab_hbox[i]); gtk_widget_hide (this_proj -> modelgl -> cell_win -> slab_box[i]); } } } } /*if (this_proj -> modelgl -> spiner) { gtk_window_get_position (GTK_WINDOW(this_proj -> modelgl -> spiner -> win), & x, & y); this_proj -> modelgl -> spiner -> win = destroy_this_widget (this_proj -> modelgl -> spiner -> win); g_free (this_proj -> modelgl -> spiner); this_proj -> modelgl -> spiner = NULL; if (this_proj -> natomes) window_spinner (NULL, this_proj -> modelgl); gtk_window_move (GTK_WINDOW(this_proj -> modelgl -> spiner -> win), x ,y); }*/ } /*! \fn void clean_atom_win (project * this_proj) \brief clean model edition data \param this_proj the target project */ void clean_atom_win (project * this_proj) { this_proj -> modelgl -> anim -> last -> img -> box_axis[AXIS] = this_proj -> modelgl -> atom_win -> old_axis; this_proj -> modelgl -> atom_win -> win = destroy_this_widget (this_proj -> modelgl -> atom_win -> win); if (! this_proj -> modelgl -> builder_win) { g_free (this_proj -> modelgl -> atom_win); this_proj -> modelgl -> atom_win = NULL; } else { this_proj -> modelgl -> atom_win -> visible = FALSE; } int shaders[6] = {ATOMS, BONDS, POLYS, RINGS, SELEC, VOLMS}; re_create_md_shaders (6, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; this_proj -> modelgl -> create_shaders[MEASU] = TRUE; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; this_proj -> modelgl -> create_shaders[PICKS] = TRUE; int i; for (i=0; i<2; i++) { if (this_proj -> modelgl -> saved_coord[i] != NULL) { g_free (this_proj -> modelgl -> saved_coord[i]); this_proj -> modelgl -> saved_coord[i] = NULL; } } clean_other_window_after_edit (this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data) \brief close model edition window \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_edit (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); gboolean leave = (this_proj -> modelgl -> was_moved) ? ask_yes_no("Leaving without saving ?", "To preserve atom(s) displacement(s) press the 'Apply' button\n" "Otherwise initial atom positions will be restored ...\n" "\t\t\t Are you sure to leave ?" , GTK_MESSAGE_QUESTION, this_proj -> modelgl -> atom_win -> win) : TRUE; if (leave && this_proj -> modelgl -> atom_win) { int h; for (h=0; h<2; h++) { reset_coordinates (this_proj, h); init_coordinates (this_proj, h, TRUE, FALSE); } for (h=2; h<7; h++) { g_free (this_proj -> modelgl -> search_widg[h]); this_proj -> modelgl -> search_widg[h]= NULL; } this_proj -> modelgl -> was_moved = FALSE; clean_atom_win (this_proj); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data) \brief model edition window close event callback GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_action (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean delete_action (GtkWidget * widg, GdkEvent * event, gpointer data) \brief model edition window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_action (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_edit (NULL, data); return TRUE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data) \brief reset model transformation toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data) { if (gtk_check_button_get_active (but)) #else /*! \fn G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data) \brief reset model transformation toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data) { if (gtk_toggle_button_get_active (but)) #endif { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); if (ask_yes_no("Reset", "Reset and get back to initial coordinates ?\n This will affect all atoms !", GTK_MESSAGE_WARNING, this_proj -> modelgl -> atom_win -> win)) { int h, i, j; for (h=0; h<3; h++) { for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> atom_win -> new_param[h][i][j] = this_proj -> modelgl -> edition_param[h][i][j]; gtk_range_set_value (GTK_RANGE(this_proj -> modelgl -> atom_win -> edit_scale[j]), this_proj -> modelgl -> atom_win -> new_param[h][i][j]); update_range_and_entry (this_proj, h, i, j); // update_coordinates (this_proj, h, i, j); } } } for (h=0; h<2; h++) { reset_coordinates (this_proj, h); init_coordinates (this_proj, h, TRUE, FALSE); } init_default_shaders (this_proj -> modelgl); update (this_proj -> modelgl); } #ifdef GTK4 gtk_check_button_set_active (but, FALSE); #else gtk_toggle_button_set_active (but, FALSE); #endif } } /*! \fn G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data) \brief apply edition action callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void apply_edit (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); int h, i, j; i = this_proj -> modelgl -> mode; this_proj -> modelgl -> mode = ANALYZE; image * last = this_proj -> modelgl -> anim -> last -> img; vec4_t q = last -> rotation_quaternion; init_camera (this_proj, TRUE); last -> rotation_quaternion = q; this_proj -> modelgl -> mode = i; for (h=0; h<3; h++) { for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> edition_param[h][i][j] = this_proj -> modelgl -> atom_win -> new_param[h][i][j]; this_proj -> modelgl -> atom_win -> old_param[h][i][j] = this_proj -> modelgl -> atom_win -> new_param[h][i][j]; } } } for (h=0; h<2; h++) { g_free (this_proj -> modelgl -> saved_coord[h]); this_proj -> modelgl -> saved_coord[h] = save_coordinates (this_proj, h); } this_proj -> modelgl -> was_moved = FALSE; //clean_atom_win (this_proj); } /*! \fn GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox) \brief create the model edition notebook \param this_proj the target project \param vbox the GtkWidget sending the signal */ GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox) { GtkWidget * notebook = gtk_notebook_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, FALSE, FALSE, 0); gchar * str; int i; for (i=0; i<5; i++) { str = g_strdup_printf ("%s", action_name[i]); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), action_tab(i, this_proj), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } show_the_widgets (notebook); return notebook; } /*! \fn atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize) \brief allocate atom search data structure \param proj the target project id \param action the edition action \param searchid the atom search id \param tsize the atom search object list size */ atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize) { atom_search * asearch = g_malloc0 (sizeof*asearch); asearch -> search_digit = -1; asearch -> proj = proj; asearch -> action = action; int i; for (i=0; i<6; i++) { asearch -> pointer[i].a = proj; asearch -> pointer[i].b = TOLAB+i; asearch -> pointer[i].c = searchid; } asearch -> recompute_bonding = FALSE; if (searchid != 5) allocate_todo (asearch, tsize); if (get_project_by_id(proj) -> modelgl) clean_picked_and_labelled (asearch, TRUE); return asearch; } /*! \fn GtkWidget * create_edition_window (project * this_proj) \brief create the model edition window \param this_proj the target project */ GtkWidget * create_edition_window (project * this_proj) { gchar * str = g_strdup_printf ("Model edition - %s", this_proj -> name); this_proj -> modelgl -> was_moved = FALSE; GtkWidget * win = create_win (str, this_proj -> modelgl -> win, FALSE, FALSE); g_free (str); int i, j; for (i=2; i<7; i++) { if (this_proj -> modelgl -> search_widg[i] == NULL) { this_proj -> modelgl -> search_widg[i] = allocate_atom_search (this_proj -> id, i, i, this_proj -> natomes); this_proj -> modelgl -> search_widg[i] -> status = (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) ? 1 : 2; } } this_proj -> modelgl -> atom_win -> vbox = create_vbox (5); add_container_child (CONTAINER_WIN, win, this_proj -> modelgl -> atom_win -> vbox); gtk_widget_set_size_request (this_proj -> modelgl -> atom_win -> vbox, 760, -1); add_gtk_close_event (win, G_CALLBACK(delete_action), GINT_TO_POINTER(this_proj -> id)); for (i=0; i<2; i++) { for (j=0; j<2; j++) this_proj -> modelgl -> rebuild[i][j] = TRUE; } this_proj -> modelgl -> atom_win -> notebook = create_atom_notebook (this_proj, this_proj -> modelgl -> atom_win -> vbox); GtkWidget * hbox = create_hbox (5); add_box_child_end (this_proj -> modelgl -> atom_win -> vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button ("Apply", IMG_STOCK, APPLY, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(apply_edit), GINT_TO_POINTER(this_proj -> id)); add_box_child_end (hbox, but, FALSE, FALSE, 5); but = create_button ("Close", IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_edit), GINT_TO_POINTER(this_proj -> id)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); return win; } /*! \fn void prepare_atom_edition (gpointer data, gboolean visible) \brief prepare atom edition \param data the associated data pointer \param visible is the window visible (1/0) */ void prepare_atom_edition (gpointer data, gboolean visible) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); int i; if (this_proj -> modelgl -> atom_win == NULL) { this_proj -> modelgl -> atom_win = g_malloc0 (sizeof*this_proj -> modelgl -> atom_win); for (i=0; i<2; i++) this_proj -> modelgl -> atom_win -> adv_bonding[i] = this_proj -> modelgl -> adv_bonding[i]; if (this_proj -> modelgl -> anim) { this_proj -> modelgl -> atom_win -> old_axis = this_proj -> modelgl -> anim -> last -> img -> box_axis[AXIS]; } for (i=0; i<2; i++) { init_coordinates (this_proj, i, visible, TRUE); } this_proj -> modelgl -> atom_win -> msd = allocfloat (this_proj -> natomes); this_proj -> modelgl -> atom_win -> msd_all = allocfloat (this_proj -> nspec); this_proj -> modelgl -> atom_win -> repeat_move = 1; } this_proj -> modelgl -> atom_win -> visible = visible; if (visible) { this_proj -> modelgl -> atom_win -> win = create_edition_window (this_proj); show_the_widgets (this_proj -> modelgl -> atom_win -> win); gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), id -> b); for (i=0; i<5; i++) { if (i != 3) { if (this_proj -> modelgl -> search_widg[i+2] -> todo_size < 10000) { gtk_widget_hide (this_proj -> modelgl -> search_widg[i+2] -> info[1]); } else { gtk_widget_hide (this_proj -> modelgl -> search_widg[i+2] -> id_box); } } widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), i), this_proj -> natomes); } widget_set_sensitive (gtk_notebook_get_nth_page(GTK_NOTEBOOK (this_proj -> modelgl -> atom_win -> notebook), 3), 1); if (this_proj -> modelgl -> mode == EDITION) { #ifdef GTK4 set_mode (NULL, & this_proj -> modelgl -> colorp[0][0]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[0], TRUE); set_mode (this_proj -> modelgl -> ogl_mode[0], & this_proj -> modelgl -> colorp[0][0]); #endif } } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open model edition window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data) \brief open model edition window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data) #endif { prepare_atom_edition (data, TRUE); } Atomes-GNU-1.1.14/src/opengl/edit/atom_edit.h000066400000000000000000000227321457665371200206210ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_edit.h * @short Function declarations for the mode edition window * @author Sébastien Le Roux */ /* * This header file: 'atom_edit.h' * * Contains: - Function declarations for the mode edition window */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "initcoord.h" #include "glview.h" #include "glwindow.h" #include "project.h" #include "workspace.h" #ifndef ATOM_EDIT_H_ #define ATOM_EDIT_H_ #define IDCOL 0 #define TOLAB 3 #define TOPIC 4 extern GtkWidget * selection_tab (atom_search * asearch, int nats); extern G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data); extern void save_rotation_quaternion (glwin * view); extern void center_molecule (project * this_proj); extern vec3_t get_arc_ball_vector (glwin * view, int x, int y); extern void update_search_tree (atom_search * asearch); extern int selected_aspec; extern int is_selected; extern chemical_data * alloc_chem_data (int spec); extern void image_init_spec_data (image * img, project * this_proj, int nsp); extern void free_glwin_spec_data (project * this_proj, int spec); extern void glwin_init_spec_data (project * this_proj, int nspec); extern void prepare_opengl_menu_bar (glwin * view); extern gboolean test_vol (double box[2][3], double vect[3][3]); extern GtkTreeModel * replace_combo_tree (gboolean insert, int proj); extern int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch); extern int get_atom_id_from_periodic_table (atom_search * asearch); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); extern insertion_menu mol[]; extern atom_search * remove_search; extern GtkWidget * coord_menu (glwin * view); extern GtkWidget * advanced_coord_properties (glwin * view, int page); extern GtkWidget * create_cell_edition_window (project * this_proj, gpointer data); extern G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data); extern gchar * mot[2][2]; extern gboolean in_bond (int at, int bd[2]); extern int being_copied; extern atomic_object * lib_object; extern float limit[2]; extern gchar * action_name[5]; extern gchar * action_atoms[3]; extern void check_all_trees (project * this_proj); extern atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid); extern void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id); extern void motion_to_zero (atom_search * asearch); extern int get_asearch_num_objects (atom_search * asearch); extern int get_asearch_object (atom_search * asearch); extern int get_asearch_filter (atom_search * asearch); extern int get_todo_size (atom_search * asearch); extern void allocate_todo (atom_search * asearch, int tsize); extern void clean_todo (atom_search * asearch); extern void clean_picked_and_labelled (atom_search * asearch, gboolean clean_msd); extern void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status); extern void re_populate_tree_search (atom_search * asearch); extern G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); extern G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data); extern void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object); extern void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list); extern gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate); #ifdef GTK4 extern G_MODULE_EXPORT void set_reset_transformation (GtkCheckButton * but, gpointer data); #else extern G_MODULE_EXPORT void set_reset_transformation (GtkToggleButton * but, gpointer data); #endif extern void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch); extern void to_passivate_using_the_objects (project * this_proj, atom_search * asearch); extern tint ulam_coord (glwin * view); extern void correct_pos_and_get_dim (atomic_object * object, gboolean adjust); extern atomic_object * duplicate_atomic_object (atomic_object * old_obj); extern atomic_object * create_object_from_species (project * this_proj, int sid, atom_search * remove); extern void reconstruct_bonds (project * this_proj, int ifcl, int * bcid); extern void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord); extern atomic_object * create_object_from_selection (project * this_proj); extern atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove); extern atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove); extern atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove); extern void create_object_from_library (int p); extern int create_object_from_open_project (project * this_proj, int p); extern void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); extern int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch); extern G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data); extern void clean_other_window_after_edit (project * this_proj); extern void clean_coord_window (project * this_proj); extern GtkWidget * create_atom_notebook (project * this_proj, GtkWidget * vbox); extern double ** save_coordinates (project * this_proj, int status); extern void reset_coordinates (project * this_proj, int status); extern vec3_t get_bary (project * this_proj, int status); extern void init_coordinates (project * this_proj, int status, gboolean win, gboolean init); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern void rotate_quat (project * this_proj, vec4_t q, int status, int axis); extern void rotate (project * this_proj, int i, int j, int k, float param); extern void random_move (project * this_proj, atom_search * asearch); extern void update_coordinates (project * this_proj, int status, int axis, int action); extern G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void to_set_move (GtkEditable * widg, gpointer data); #else extern G_MODULE_EXPORT gboolean to_set_move (GtkWidget * widg, GdkEventFocus * event, gpointer data); #endif extern G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data); extern void range_has_changed (gpointer data, double v); extern void update_range_and_entry (project * this_proj, int i, int j, int k); extern G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); extern G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data); extern void check_motion_interactors (project * this_proj, atom_search * asearch); extern GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj); extern void apply_action (project * this_proj, atom_search * asearch); extern void clean_all_trees (atom_search * asearch, project * this_proj); extern gboolean do_we_have_objects_in_selection (project * this_proj, atom_search * asearch, gboolean editing); extern G_MODULE_EXPORT void take_action (GtkButton * but, gpointer data); extern GtkWidget * action_tab (int aid, project * this_proj); extern int find_this_geo_id (int id, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z); extern void check_coord_modification (project * this_proj, int old_id[], atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating); extern void print_coord_info (project * this_proj, coord_info * coord); extern coord_info * duplicate_coord_info (coord_info * old_coord); extern void recover_opengl_data (project * this_proj, int nmols, int add, int rem, int * num, int * rec, int *** tmpgeo, gboolean * showfrag); extern chemical_data * duplicate_chemical_data (int spec, chemical_data * chem); extern int find_spec_id (int s, int z, double * list_z); extern int search_for_new_spec (atom_edition * edit, atomic_object * object); extern void prepare_atom_edition (gpointer data, gboolean visible); #ifdef GTK4 G_MODULE_EXPORT void action_window (GSimpleAction * action, GVariant * parameter, gpointer data); #else G_MODULE_EXPORT void action_window (GtkWidget * widg, gpointer data); #endif G_MODULE_EXPORT void close_build (GtkWidget * widg, gpointer data); #endif Atomes-GNU-1.1.14/src/opengl/edit/atom_geo.c000066400000000000000000000347541457665371200204500ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_geo.c * @short Functions to check for the appropriate atomic coordinations * @author Sébastien Le Roux */ /* * This file: 'atom_geo.c' * * Contains: * - The functions to check for the appropriate atomic coordinations * * List of functions: int is_this_a_new_geo (int id, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z); gboolean is_in_atom_list (int aid, atom * new_list); void sort_partial_geo (int ** geom, int num_a); void check_coord_modification (project * this_proj, int * old_id, atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating); */ #include "atom_edit.h" /*! \fn void sort_partial_geo (int ** geom, int num_a) \brief sort partial geometries \param geom the data to sort \param num_a the number of data point */ void sort_partial_geo (int ** geom, int num_a) { int i, j, k, l; for(i=0;i geom[j][0]) { for (k=0; k<2; k++) { l = geom[i][k]; geom[i][k] = geom[j][k]; geom[j][k] = l; } } } } } /*! \fn int is_this_a_new_geo (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) \brief if required create a new geometry, stored in coord, for coordination type 'gid' and chemical species 'new_sp', return geometry id \param gid the new coordination type (0 = total, 1 = partial) \param obj the new coordination info to update \param old_z old Z list \param old_geo the old coordination id \param old_sp the old chemical species id \param new_sp the new chemical species id \param coord the old coordination info \param new_z new Z list */ int is_this_a_new_geo (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) { int i, j, k, l, m, n, o; int ** n_part, ** o_part; // Number of coord of type id for spec new_sp i = coord -> ntg[gid][new_sp]; // Using j to store the total number of neighbor(s) for the coordination to test // Using k to store the number of type(s) of neighbor(s) for the coordination to test j = k = 0; for (l=0; l species; l++) { if (obj -> partial_geo[old_sp][old_geo][l]) { k ++; j += obj -> partial_geo[old_sp][old_geo][l]; } } // Then comparing with already stored data in coord for (l=0; l geolist[gid][new_sp][l] == obj -> geolist[gid][old_sp][old_geo]) return l; break; case 1: m = 0; n = 0; for (o=0; o species; o++) { if (coord -> partial_geo[new_sp][l][o]) { m ++; n += coord -> partial_geo[new_sp][l][o]; } } if (j == n && k == m) { // Same number of atoms in the coordination for the spec // 2 structures of size l: [0]= Z, [1] = nato // Sort by Z, then comparing n_part = allocdint (m, 2); o_part = allocdint (m, 2); m = 0; for (n=0; n species; n++) { if (coord -> partial_geo[new_sp][l][n]) { n_part[m][0] = (int)new_z[n]; n_part[m][1] = coord -> partial_geo[new_sp][l][n]; m ++; } } if (m > 1) sort_partial_geo (n_part, m); m = 0; for (n=0; n species; n++) { if (obj -> partial_geo[old_sp][old_geo][n]) { o_part[m][0] = old_z[n]; o_part[m][1] = obj -> partial_geo[old_sp][old_geo][n]; m ++; } } if (m > 1) sort_partial_geo (o_part, m); n = 1; for (o=0; o ntg[gid][new_sp]; if (! gid) { coord -> geolist[gid][new_sp] = g_realloc (coord -> geolist[gid][new_sp], (j+1)*sizeof*coord -> geolist[gid][new_sp]); coord -> geolist[gid][new_sp][coord -> ntg[gid][new_sp]] = obj -> geolist[gid][old_sp][old_geo]; } else { coord -> partial_geo[new_sp] = g_realloc (coord -> partial_geo[new_sp], (j+1)*sizeof*coord -> partial_geo[new_sp]); coord -> partial_geo[new_sp][j] = allocint (coord -> species); for (k=0; k species; k++) { if (old_z[k]) { l = find_spec_id (coord -> species, old_z[k], new_z); coord -> partial_geo[new_sp][j][l] = obj -> partial_geo[old_sp][old_geo][k]; } } } coord -> ntg[gid][new_sp] ++; coord -> totcoord[gid] ++; return i; } /*! \fn int find_this_geo_id (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) \brief if required create a new geometry, stored in coord, for coordination type 'gid' and chemical species 'new_sp', return geometry id \param gid the new coordination type (0 = total, 1 = partial) \param obj the new coordination info to update \param old_z old Z list \param old_geo the old coordination id for this coordination type \param old_sp the old chemical species id \param new_sp the new chemical species id \param coord the old coordination info \param new_z new Z list */ int find_this_geo_id (int gid, coord_info * obj, int * old_z, int old_geo, int old_sp, int new_sp, coord_info * coord, double * new_z) { int i, j, k, l, m, n, o; int ** n_part, ** o_part; // Number of coord of type id for spec new_sp i = coord -> ntg[gid][new_sp]; if (gid) { // Using j to store the total number of neighbor(s) for the coordination to test // Using k to store the number of type(s) of neighbor(s) for the coordination to test j = k = 0; for (l=0; l species; l++) { if (obj -> partial_geo[old_sp][old_geo][l]) { k ++; j += obj -> partial_geo[old_sp][old_geo][l]; } } } // Then comparing with already stored data in coord for (l=0; l ntg[gid][new_sp]; l++) { switch (gid) { case 0: if (coord -> geolist[0][new_sp][l] == obj -> geolist[0][old_sp][old_geo]) return l; break; case 1: m = 0; n = 0; for (o=0; o species; o++) { if (coord -> partial_geo[new_sp][l][o]) { m ++; n += coord -> partial_geo[new_sp][l][o]; } } if (j == n && k == m) { // Same number of atoms in the coordination for the spec // 2 structures of size l: [0]= Z, [1] = nato // Sort by Z, then comparing n_part = allocdint (m, 2); o_part = allocdint (m, 2); m = 0; for (n=0; n species; n++) { if (coord -> partial_geo[new_sp][l][n]) { n_part[m][0] = (int)new_z[n]; n_part[m][1] = coord -> partial_geo[new_sp][l][n]; m ++; } } if (m > 1) sort_partial_geo (n_part, m); m = 0; for (n=0; n species; n++) { if (obj -> partial_geo[old_sp][old_geo][n]) { o_part[m][0] = old_z[n]; o_part[m][1] = obj -> partial_geo[old_sp][old_geo][n]; m ++; } } if (m > 1) sort_partial_geo (o_part, m); n = 1; for (o=0; o ntg[gid][new_sp]; coord -> geolist[gid][new_sp] = g_realloc (coord -> geolist[gid][new_sp], (j+1)*sizeof*coord -> geolist[gid][new_sp]); coord -> geolist[gid][new_sp][j] = obj -> geolist[gid][old_sp][old_geo]; if (gid) { coord -> partial_geo[new_sp] = g_realloc (coord -> partial_geo[new_sp], (j+1)*sizeof*coord -> partial_geo[new_sp]); coord -> partial_geo[new_sp][j] = allocint (coord -> species); for (k=0; k species; k++) { if (old_z[k]) { l = find_spec_id (coord -> species, old_z[k], new_z); coord -> partial_geo[new_sp][j][l] = obj -> partial_geo[old_sp][old_geo][k]; } } } coord -> ntg[gid][new_sp] ++; coord -> totcoord[gid] ++; return i; } /*! \fn void check_coord_modification (project * this_proj, int * old_id, atom * new_list, * atomic_object * this_object, gboolean movtion, gboolean passivating) \brief check atom coordination modification on edition \param this_proj the target project \param old_id the old atom id list, if any \param new_list the new atom(s) list \param this_object the object to insert, if any \param movtion motion (1) or removal (2) \param passivating passivate */ void check_coord_modification (project * this_proj, int * old_id, atom * new_list, atomic_object * this_object, gboolean movtion, gboolean passivating) { atom * tmp_new; int g, h, i, j, k, l, m, n; gboolean correct_it; int * new_z = allocint (this_proj -> nspec); double * old_z; if (this_object) old_z = duplicate_double (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_old_id; int * nvois = allocint (this_proj -> nspec); if (passivating) new_old_id = duplicate_int (this_proj -> natomes, old_id); for (i=0; i nspec; i++) { new_z[i] = (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]; } // first create a dummy coord structure to store an atom individual data coord_info * new_coord = g_malloc0 (sizeof*new_coord); for (i=0; i<2; i++) { new_coord -> totcoord[i] = 1; new_coord -> ntg[i] = allocint (this_proj -> nspec); for (j=0; j nspec; j++) new_coord -> ntg[i][j] = 1; new_coord -> geolist[i] = allocdint (this_proj -> nspec, 1); } new_coord -> species = this_proj -> nspec; new_coord -> partial_geo = alloctint (this_proj -> nspec, 1, this_proj -> nspec); g = (passivating) ? 2 : 1; for (h=0; h sp; // Fill the dummy coord with the new atom information for (j=0; j<2; j++) new_coord -> geolist[j][i][0] = tmp_new -> numv; k = tmp_new -> coord[1]; for (j=0; j nspec; j++) { new_coord -> partial_geo[i][0][j] = this_proj -> coord -> partial_geo[i][k][j]; } j = tmp_new -> id; correct_it = FALSE; if (movtion) { for (k=0; k numv; k++) { l = tmp_new -> vois[k]; if ((old_id[j] > 0 && old_id[l] < 0) || (old_id[j] < 0 && old_id[l] > 0)) { correct_it = TRUE; // This neighbor will be moved / removed if (! passivating || h) { m = this_proj -> atoms[0][l].sp; // For the atom studied reduce the number of neighbors of that species: new_coord -> partial_geo[i][0][m] --; for (n=0; n<2; n++) new_coord -> geolist[n][i][0] --; } } } } else { for (k=0; k nspec; k++) nvois[k]=0; for (k=0; k numv; k++) { l = tmp_new -> vois[k]; m = this_object -> at_list[l].sp; nvois[m] ++; } l = 0; for (k=0; k nspec; k++) { if (nvois[k] != new_coord -> partial_geo[i][0][k]) { correct_it = TRUE; new_coord -> partial_geo[i][0][k] = nvois[k]; } l += nvois[k]; } for (k=0; k<2; k++) new_coord -> geolist[k][i][0] = l; } if (correct_it) { if (passivating && ! h) { if (old_id[j]) { switch (this_proj -> modelgl -> search_widg[8] -> filter) { case 0: l = i; break; case 1: l = tmp_new -> numv; break; case 2: l = tmp_new -> coord[1]; for (m=0; m coord -> ntg[1][m]; break; default: l = tmp_new -> coord[this_proj -> modelgl -> search_widg[8] -> filter-1]; break; } if (get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[3], l, 0)) new_old_id[j] = abs(old_id[j]); } } else { for (j=0; j<2; j++) { if (this_object) { tmp_new -> coord[j] = find_this_geo_id (j, new_coord, new_z, 0, i, i, this_object -> coord, old_z); } else { tmp_new -> coord[j] = find_this_geo_id (j, new_coord, new_z, 0, i, i, this_proj -> modelgl -> atom_win -> coord, this_proj -> modelgl -> atom_win -> new_z); } } } correct_it = FALSE; } tmp_new = tmp_new -> next; } if (passivating && ! h) { for (i=0; i natomes; i++) old_id[i] = new_old_id[i]; g_free (new_old_id); } } if (this_object) g_free (old_z); g_free (new_coord); g_free (nvois); } Atomes-GNU-1.1.14/src/opengl/edit/atom_insert.c000066400000000000000000000107121457665371200211660ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_insert.c * @short Functions to insert bond(s) in a project * @author Sébastien Le Roux */ /* * This file: 'atom_insert.c' * * Contains: * - The functions to insert bond(s) in a project * * List of functions: void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list); void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object); void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible); G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data); */ #include "atom_edit.h" /*! \fn void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list) \brief add bond list to project bond list \param this_proj the target project \param removed the number of atom(s) removed \param nbd the number of bond(s) to add \param new_bond_list the bond list to add */ void add_bonds_to_project (project * this_proj, int removed, int nbd, int ** new_bond_list) { int i, j; if (nbd) { i = this_proj -> modelgl -> bonds[0][0]; this_proj -> modelgl -> bondid[0][0] = g_realloc (this_proj -> modelgl -> bondid[0][0], (i+nbd)*sizeof*this_proj -> modelgl -> bondid[0][0]); for (j=0; j modelgl -> bondid[0][0][j+i] = allocint (2); this_proj -> modelgl -> bondid[0][0][j+i][0] = new_bond_list[j][0] + this_proj -> natomes - removed; this_proj -> modelgl -> bondid[0][0][j+i][1] = new_bond_list[j][1] + this_proj -> natomes - removed; } this_proj -> modelgl -> bonds[0][0] += nbd; this_proj -> modelgl -> allbonds[0] += nbd; } } /*! \fn void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object) \brief add object bond(s) list to overall bond(s) list \param new_bond_list the bond list in the model \param nat the number of atom(s) in the model \param nbd the number of bond(s) in the model \param object the target insert object */ void add_bonds_to_list (int ** new_bond_list, int nat, int nbd, atomic_object * object) { int i; if (object -> bonds) { for (i=0; i bonds; i++) { new_bond_list[i+nbd][0] = object -> ibonds[i][0] + nat; new_bond_list[i+nbd][1] = object -> ibonds[i][1] + nat; } } } /*! \fn void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible) \brief prepare to insert something \param key the string describing the object to insert \param this_proj the target project \param asearch the target atom search \param visible is the model edition window visible */ void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible) { int i = get_selected_object_id (visible, this_proj -> id, key, asearch); if (i == FROM_PROJECT || i == FROM_DATA || i > 0) to_insert_in_project (i, -1, this_proj, asearch, visible); } /*! \fn G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data) \brief change the object to insert \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atoms_to_insert (GtkComboBox * box, gpointer data) { GValue val = {0, }; GtkTreeModel * cmodel = gtk_combo_box_get_model (box); GtkTreeIter iter; if (gtk_combo_box_get_active_iter (box, & iter)) { gtk_tree_model_get_value (cmodel, & iter, 0, & val); tint * dat = (tint *)data; gchar * str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); project * this_proj = get_project_by_id (dat -> a); prepare_to_instert (str, this_proj, this_proj -> modelgl -> search_widg[dat -> c], TRUE); g_free (str); } gtk_combo_box_set_active (box, 0); } Atomes-GNU-1.1.14/src/opengl/edit/atom_move.c000066400000000000000000001212221457665371200206270ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_move.c * @short Functions to move atom(s) and group of atom(s) \n Functions to move randomly atom(s) and group of atom(s) \n Functions to create the motion widgets of the model edition window * @author Sébastien Le Roux */ /* * This file: 'atom_move.c' * * Contains: * - The functions to move atom(s) and group of atom(s) - The functions to move randomly atom(s) and group of atom(s) - The functions to create the motion widgets of the model edition window * * List of functions: float get_limit (int mot, glwin * view); double ** save_coordinates (project * this_proj, int status); gboolean rebuild_selection (project * this_proj, atom_search * asearch, int filter); gboolean random_move_objects (project * this_proj, atom_search * asearch, int numo, int filter, int obj); gboolean move_objects (project * this_proj, atom_search * asearch, int action, int axis, vec3_t trans, float ang); G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void reset_coordinates (project * this_proj, int status); void init_coordinates (project * this_proj, int status, gboolean win, gboolean init); void translate (project * this_proj, int status, int axis, vec3_t trans); void rotate_quat (project * this_proj, vec4_t q, int status, int axis); void rotate (project * this_proj, int status, int axis, int raxis, float param); void random_move_this_atom (project * this_proj, int aid); void random_rotate_this_object (project * this_proj, atomic_object * object, double ratio, double msd); void random_translate_this_object (project * this_proj, atomic_object * object, double ratio, double msd); void random_move_this_object (project * this_proj, atomic_object * object, int move, double msd); void trigger_refresh (project * this_proj, atom_search * asearch); void random_move (project * this_proj, atom_search * asearch); void translate_this_atom (project * this_proj, int aid, int axis, vec3_t trans); void translate_this_object (project * this_proj, atomic_object * object, int axis, vec3_t trans); void rotate_this_object (project * this_proj, atomic_object * object, int axis, int rax, float ang); void move_selection (project * this_proj, int action, int axis, vec3_t trans, float ang); void update_coordinates (project * this_proj, int status, int axis, int action); void update_range_and_entry (project * this_proj, int i, int j, int k); void range_has_changed (gpointer data, double v); void check_motion_interactors (project * this_proj, atom_search * asearch); G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data); G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data); GtkWidget * create_axis_entries (atom_search * asearch, project * this_proj, int mot, int axd); GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj); */ #include "atom_edit.h" gboolean * was_moved_atom; /*! \fn double ** save_coordinates (project * this_proj, int status) \brief save atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ double ** save_coordinates (project * this_proj, int status) { int i, j; i = 0; if (status > 1) { i = this_proj -> natomes; } else { for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status) i++; } } if (i == 0) return NULL; double ** coords = allocddouble (i, 3); i = 0; if (status > 1) { for (i=0; i natomes; i++) { coords[i][0] = this_proj -> atoms[0][i].x; coords[i][1] = this_proj -> atoms[0][i].y; coords[i][2] = this_proj -> atoms[0][i].z; } } else { for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status) { coords[i][0] = this_proj -> atoms[0][j].x; coords[i][1] = this_proj -> atoms[0][j].y; coords[i][2] = this_proj -> atoms[0][j].z; i ++; } } } return coords; } /*! \fn void reset_coordinates (project * this_proj, int status) \brief reset transformation and restore saved atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ void reset_coordinates (project * this_proj, int status) { int i, j; i = 0; if (this_proj -> modelgl -> saved_coord[status] != NULL) { for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status || status > 1) { this_proj -> atoms[0][j].x = this_proj -> modelgl -> saved_coord[status][i][0]; this_proj -> atoms[0][j].y = this_proj -> modelgl -> saved_coord[status][i][1]; this_proj -> atoms[0][j].z = this_proj -> modelgl -> saved_coord[status][i][2]; i ++; } } } } /*! \fn vec3_t get_bary (project * this_proj, int status) \brief get barycenter of atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) */ vec3_t get_bary (project * this_proj, int status) { vec3_t bar = vec3(0.0,0.0,0.0); int j; float i = 0.0; for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status || status == 2) { i += 1.0; bar = v3_add (bar, vec3(this_proj -> atoms[0][j].x, this_proj -> atoms[0][j].y, this_proj -> atoms[0][j].z)); } } if (i > 0.0) bar = v3_divs (bar, i); return bar; } /*! \fn void init_coordinates (project * this_proj, int status, gboolean win, gboolean init) \brief preserve atomic coordinates \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param win is the model edition window opened ? \param init preserve atomic coordinates */ void init_coordinates (project * this_proj, int status, gboolean win, gboolean init) { if (win) { int i, j; for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> atom_win -> new_param[status][i][j] = this_proj -> modelgl -> edition_param[status][i][j]; this_proj -> modelgl -> atom_win -> old_param[status][i][j] = this_proj -> modelgl -> edition_param[status][i][j]; } } this_proj -> modelgl -> atom_win -> axis[status] = 1; this_proj -> modelgl -> atom_win -> show_axis[status] = FALSE; } this_proj -> modelgl -> baryc[status] = get_bary (this_proj, status); if (init) { this_proj -> modelgl -> saved_coord[status] = save_coordinates (this_proj, status); } } /*! \fn void translate (project * this_proj, int status, int axis, vec3_t trans) \brief translate \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis 0 = model, 1 = eye \param trans translation vector */ void translate (project * this_proj, int status, int axis, vec3_t trans) { int i, j; vec3_t c_old, c_new; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (this_proj -> atoms[i][j].pick[0] == status || status < 0) { c_old = vec3(this_proj -> atoms[i][j].x, this_proj -> atoms[i][j].y, this_proj -> atoms[i][j].z); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = v3_add (c_new, trans); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = v3_add (c_old, trans); } this_proj -> atoms[i][j].x = c_new.x; this_proj -> atoms[i][j].y = c_new.y; this_proj -> atoms[i][j].z = c_new.z; } } } } /*! \fn void rotate_quat (project * this_proj, vec4_t q, int status, int axis) \brief rotate using quaternion \param this_proj the target project \param q rotation quaternion \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis 0 = model, 1 = eye */ void rotate_quat (project * this_proj, vec4_t q, int status, int axis) { int j; mat4_t rot = m4_quat_rotation (q); vec3_t c_old, c_new; for (j=0; j natomes; j++) { if (this_proj -> atoms[0][j].pick[0] == status) { c_old = vec3(this_proj -> atoms[0][j].x, this_proj -> atoms[0][j].y, this_proj -> atoms[0][j].z); c_new = v3_sub(c_old, this_proj -> modelgl -> baryc[status]); if (axis) { c_old = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_new); c_new = m4_mul_pos (rot, c_old); c_old = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_new); } else { c_old = m4_mul_pos (rot, c_new); } c_new = v3_add (c_old, this_proj -> modelgl -> baryc[status]); this_proj -> atoms[0][j].x = c_new.x; this_proj -> atoms[0][j].y = c_new.y; this_proj -> atoms[0][j].z = c_new.z; } } } /*! \fn void rotate (project * this_proj, int status, int axis, int raxis, float param) \brief rotate \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis 0 = model, 1 = eye \param raxis rotation axis 0 = x, 1 = y, 2 = z \param param rotation angle */ void rotate (project * this_proj, int status, int axis, int raxis, float param) { vec4_t qr; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); qr = axis_to_quat(ax[raxis-3], param*pi/90.0); rotate_quat (this_proj, qr, status, axis); } /*! \fn void random_move_this_atom (project * this_proj, int aid) \brief random move atom \param this_proj the target project \param aid the atom id */ void random_move_this_atom (project * this_proj, int aid) { int i, j, k, l; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; for (j=0; j<3; j++) { k = (j+1)*i*aid*(3*this_proj -> numwid); prob= random3_(& k); k *= k; l = (prob <= 0.5) ? 1 : -1; prob = random3_(& k); switch (j) { case 0: this_proj -> atoms[0][aid].x += l*prob*sqrt(this_proj -> modelgl -> atom_win -> msd[aid]/3.0); break; case 1: this_proj -> atoms[0][aid].y += l*prob*sqrt(this_proj -> modelgl -> atom_win -> msd[aid]/3.0); break; case 2: this_proj -> atoms[0][aid].z += l*prob*sqrt(this_proj -> modelgl -> atom_win -> msd[aid]/3.0); break; } } } /*! \fn void random_rotate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) \brief random rotate an object \param this_proj the target project \param object the object to rotate \param ratio ratio translation / rotation \param msd the MSD */ void random_rotate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) { int i, j, k, l, m, n; vec3_t c_new, c_old; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); vec3_t baryc = vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2]); vec4_t qr; mat4_t rot; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; for (j=0; j<3; j++) { k = (j+1)*i*(3*this_proj -> numwid); prob=random3_(& k); k *= k; l = (prob <= 0.5) ? 1 : -1; prob = random3_(& k); qr = axis_to_quat(ax[j], l*prob*sqrt(ratio*msd/3.0)*pi/90.0); rot = m4_quat_rotation (qr); for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) { c_old = vec3(object -> at_list[m].x, object -> at_list[m].y, object -> at_list[m].z); c_new = m4_mul_pos (rot, c_old); object -> at_list[m].x = c_new.x; object -> at_list[m].y = c_new.y; object -> at_list[m].z = c_new.z; c_old = v3_add (c_new, baryc); this_proj -> atoms[0][n].x = c_old.x; this_proj -> atoms[0][n].y = c_old.y; this_proj -> atoms[0][n].z = c_old.z; } } } } /*! \fn void random_translate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) \brief random translate an object \param this_proj the target project \param object the object to translate \param ratio ratio translation / rotation \param msd the MSD */ void random_translate_this_object (project * this_proj, atomic_object * object, double ratio, double msd) { int i, j, k, l, m, n; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; for (j=0; j<3; j++) { k = (j+1)*i*(3*this_proj -> numwid); prob=random3_(& k); k *= k; l = (prob <= 0.5) ? 1 : -1; prob = l*random3_(& k)*sqrt(ratio*msd/3.0); switch (j) { case 0: for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) this_proj -> atoms[0][n].x += prob; } break; case 1: for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) this_proj -> atoms[0][n].y += prob; } break; case 2: for (m=0; m atoms; m++) { n = object -> at_list[m].id; if (! was_moved_atom[n]) this_proj -> atoms[0][n].z += prob; } break; } object -> baryc[j] += prob; } } /*! \fn void random_move_this_object (project * this_proj, atomic_object * object, int move, double msd) \brief random move object \param this_proj the target project \param object the object to move \param move the number of times to repeat the motion \param msd the MSD */ void random_move_this_object (project * this_proj, atomic_object * object, int move, double msd) { int i, j; // Using CPU time to randomize clock_t begin = clock(); double prob; i = (int)begin; switch (move) { case 1: random_translate_this_object (this_proj, object, 1.0, msd); break; case 2: random_rotate_this_object (this_proj, object, 1.0, msd); break; case 3: j = object -> species*i*object -> atoms*(3*this_proj -> numwid); prob = random3_(& j); random_translate_this_object (this_proj, object, prob, msd); random_rotate_this_object (this_proj, object, 1.0-prob, msd); break; } } /*! \fn void trigger_refresh (project * this_proj, atom_search * asearch) \brief refresh search tree model \param this_proj the target project \param asearch the target atom search */ void trigger_refresh (project * this_proj, atom_search * asearch) { clean_all_trees (asearch, this_proj); this_proj -> modelgl -> atom_win -> rebuilt[(asearch -> action == DISPL) ? 0 : 1] = TRUE; update_search_tree (this_proj -> modelgl -> search_widg[(asearch -> action == DISPL) ? 6 : 2]); check_all_trees (this_proj); } /*! \fn gboolean rebuild_selection (project * this_proj, atom_search * asearch, int filter) \brief rebuild selection (split fragments linked thru PBC) \param this_proj the target project \param asearch the target atom search \param filter the filter (0 = species, 1 = partial coord, 2 = total coord, 3 = fragment, 4 = molecule) */ gboolean rebuild_selection (project * this_proj, atom_search * asearch, int filter) { int i, j, k, l; gboolean was_frag = this_proj -> modelgl -> adv_bonding[0]; gboolean was_mol = this_proj -> modelgl -> adv_bonding[1]; gboolean recons = FALSE; int old_frag = this_proj -> coord -> totcoord[2]; i = (asearch -> action == DISPL) ? 0 : 1; if (asearch -> object && this_proj -> modelgl -> rebuild[0][i]) { int * saved_todo = duplicate_int (asearch -> todo_size, asearch -> todo); int old_tds = asearch -> todo_size; g_free (asearch -> todo); allocate_todo (asearch, this_proj -> natomes); j = 0; int * oifcl = NULL; atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[i]; while (object) { j += object -> ifcl; object = object -> next; } if (j) { object = this_proj -> modelgl -> atom_win -> to_be_moved[i]; oifcl = allocint (j); l = 0; while (object) { for (k=0; k ifcl; k++) { oifcl[l] = object -> bcid[k]; l ++; } object = object -> next; } } if (j) { reconstruct_bonds (this_proj, j, oifcl); g_free (oifcl); oifcl = NULL; } object = this_proj -> modelgl -> atom_win -> to_be_moved[i]; while (object) { if (object -> ifcl) reconstruct_coordinates_for_object (this_proj, object, TRUE); if (filter < 3) { recons = TRUE; for (j=0; j atoms; j++) { k = object -> at_list[j].id; asearch -> todo[k] = 1; } } object = object -> next; } if (recons) { apply_action (this_proj, asearch); trigger_refresh (this_proj, asearch); } g_free (asearch -> todo); asearch -> todo = duplicate_int (old_tds, saved_todo); asearch -> todo_size = old_tds; g_free (saved_todo); } if ((was_frag && ! this_proj -> modelgl -> adv_bonding[0]) || (was_mol && ! this_proj -> modelgl -> adv_bonding[1])) { return TRUE; } else if (old_frag != this_proj -> coord -> totcoord[2]) { return TRUE; } else { return FALSE; } } /*! \fn gboolean random_move_objects (project * this_proj, atom_search * asearch, int numo, int filter, int obj) \brief random move object(s) \param this_proj the target project \param asearch the target atom search \param numo the number of object(s) to move \param filter the filter (0 = species, 1 = partial coord, 2 = total coord, 3 = fragment, 4 = molecule) \param obj the object (0 = atom(s), 1 = group of atoms) */ gboolean random_move_objects (project * this_proj, atom_search * asearch, int numo, int filter, int obj) { atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[1]; float v; int i, j, k; gboolean recons = FALSE; if (! this_proj -> modelgl -> atom_win -> rebuilt[1]) { recons = rebuild_selection (this_proj, asearch, filter); } was_moved_atom = allocbool (this_proj -> natomes); for (i=0; i todo[i] && object) { v = (obj && filter > 2) ? this_proj -> modelgl -> atom_win -> msd_all[i] : this_proj -> modelgl -> atom_win -> msd[i]; if (v > 0.0) { for (j=0; j modelgl -> atom_win -> repeat_move; j++) { random_move_this_object (this_proj, object, asearch -> todo[i], v); } for (j=0; j atoms; j++) { k = object -> at_list[j].id; was_moved_atom[k] = TRUE; } } object = object -> next; } } g_free (was_moved_atom); return recons; } /*! \fn void random_move (project * this_proj, atom_search * asearch) \brief random move \param this_proj the target project \param asearch the target atom search */ void random_move (project * this_proj, atom_search * asearch) { int obj = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); int i, j; gboolean recons = FALSE; if (this_proj -> modelgl -> atom_win -> to_be_moved[1]) { recons = random_move_objects (this_proj, asearch, asearch -> todo_size, filter, obj); } else { if (this_proj -> modelgl -> rebuild[0][1] && ! this_proj -> modelgl -> atom_win -> rebuilt[1]) { apply_action (this_proj, asearch); recons = TRUE; } for (i=0; i todo_size; i++) { if (asearch -> todo[i] && this_proj -> modelgl -> atom_win -> msd[i] > 0.0) { for (j=0; j modelgl -> atom_win -> repeat_move; j++) random_move_this_atom (this_proj, i); } } } if (asearch -> recompute_bonding) { i = activep; active_project_changed (activep); bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); active_project_changed (i); recons = TRUE; } this_proj -> modelgl -> was_moved = TRUE; init_default_shaders (this_proj -> modelgl); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (this_proj -> modelgl); #endif if (recons) trigger_refresh (this_proj, asearch); } /*! \fn void translate_this_atom (project * this_proj, int aid, int axis, vec3_t trans) \brief translate atom \param this_proj the target project \param aid atom id \param axis 0 = model, 1 = eye \param trans translation vector */ void translate_this_atom (project * this_proj, int aid, int axis, vec3_t trans) { vec3_t c_old, c_new; c_old = vec3(this_proj -> atoms[0][aid].x, this_proj -> atoms[0][aid].y, this_proj -> atoms[0][aid].z); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = v3_add (c_new, trans); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = v3_add (c_old, trans); } this_proj -> atoms[0][aid].x = c_new.x; this_proj -> atoms[0][aid].y = c_new.y; this_proj -> atoms[0][aid].z = c_new.z; } /*! \fn void translate_this_object (project * this_proj, atomic_object * object, int axis, vec3_t trans) \brief translate object \param this_proj the target project \param object the object to translate \param axis 0 = model, 1 = eye \param trans the translation vector */ void translate_this_object (project * this_proj, atomic_object * object, int axis, vec3_t trans) { int i, j; vec3_t c_old, c_new; c_old = vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2]); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = v3_add (c_new, trans); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = v3_add (c_old, trans); } object -> baryc[0] = c_new.x; object -> baryc[1] = c_new.y; object -> baryc[2] = c_new.z; for (i=0; i atoms; i++) { j = object -> at_list[i].id; if (! was_moved_atom[j]) { was_moved_atom[j] = TRUE; this_proj -> atoms[0][j].x = object -> baryc[0] + object -> at_list[i].x; this_proj -> atoms[0][j].y = object -> baryc[1] + object -> at_list[i].y; this_proj -> atoms[0][j].z = object -> baryc[2] + object -> at_list[i].z; } } } /*! \fn void rotate_this_object (project * this_proj, atomic_object * object, int axis, int rax, float ang) \brief rotate object \param this_proj the target project \param object the object to rotate \param axis 0 = model, 1 = eye \param rax the rotation axis \param ang the rotation angle */ void rotate_this_object (project * this_proj, atomic_object * object, int axis, int rax, float ang) { int i, j; vec3_t c_new, c_old; vec3_t baryc = vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2]); vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); vec4_t qr; mat4_t rot; qr = axis_to_quat(ax[rax], ang*pi/180.0); rot = m4_quat_rotation (qr); for (i=0; i atoms; i++) { j = object -> at_list[i].id; if (! was_moved_atom[j]) { c_old = vec3(object -> at_list[i].x, object -> at_list[i].y, object -> at_list[i].z); if (axis) { c_new = m4_mul_pos (this_proj -> modelgl -> view_matrix, c_old); c_old = m4_mul_pos (rot, c_new); c_new = m4_mul_pos (this_proj -> modelgl -> un_view_matrix, c_old); } else { c_new = m4_mul_pos (rot, c_old); } object -> at_list[i].x = c_new.x; object -> at_list[i].y = c_new.y; object -> at_list[i].z = c_new.z; c_old = v3_add (c_new, baryc); this_proj -> atoms[0][j].x = c_old.x; this_proj -> atoms[0][j].y = c_old.y; this_proj -> atoms[0][j].z = c_old.z; was_moved_atom[j] = TRUE; } } } /*! \fn gboolean move_objects (project * this_proj, atom_search * asearch, int action, int axis, vec3_t trans, float ang) \brief move objects, return reconstruction status \param this_proj the target project \param asearch the target atom search \param action 0 = translation, 1 = rotation \param axis 0 = model, 1 = eye \param trans the translation vector, if any \param ang the rotation angle, if any */ gboolean move_objects (project * this_proj, atom_search * asearch, int action, int axis, vec3_t trans, float ang) { gboolean recons = FALSE; if (this_proj -> modelgl -> rebuild[0][0] && ! this_proj -> modelgl -> atom_win -> rebuilt[0]) { recons = rebuild_selection (this_proj, asearch, get_asearch_filter(asearch)); } atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[0]; was_moved_atom = allocbool (this_proj -> natomes); int i, j; while (object) { if (action < 3) { translate_this_object (this_proj, object, axis, trans); } else { rotate_this_object (this_proj, object, axis, action-3, ang); } for (i=0; i atoms; i++) { j = object -> at_list[i].id; was_moved_atom[j] = TRUE; } object = object -> next; } g_free (was_moved_atom); return recons; } extern atom_search * duplicate_atom_search (atom_search * asearch); /*! \fn void move_selection (project * this_proj, int action, int axis, vec3_t trans, float ang) \brief move atom selection \param this_proj the target project \param action 0 = translation, 1 = rotation \param axis 0 = model, 1 = eye \param trans the translation vector, if any \param ang the rotation angle, if any */ void move_selection (project * this_proj, int action, int axis, vec3_t trans, float ang) { atom_search * asearch = duplicate_atom_search (this_proj -> modelgl -> search_widg[2]); gboolean recons = FALSE; gboolean move_it = do_we_have_objects_in_selection (this_proj, asearch, TRUE); if (move_it) { int i; if (this_proj -> modelgl -> atom_win -> to_be_moved[0]) { recons = move_objects (this_proj, asearch, action, axis, trans, ang); } else { if (this_proj -> modelgl -> rebuild[0][0] && ! this_proj -> modelgl -> atom_win -> rebuilt[0]) { apply_action (this_proj, asearch); recons = TRUE; } for (i=0; i todo_size; i++) { if (asearch -> todo[i]) { translate_this_atom (this_proj, i, axis, trans); } } } if (asearch -> recompute_bonding) { i = activep; active_project_changed (activep); bonds_update = 1; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); active_project_changed (i); recons = TRUE; } init_default_shaders (this_proj -> modelgl); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (this_proj -> modelgl); #endif if (recons) trigger_refresh (this_proj, asearch); } } /*! \fn void update_coordinates (project * this_proj, int status, int axis, int action) \brief update atomic coordinates on motion \param this_proj the target project \param status selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param axis axis, 0 = model, 1 = eye \param action 0 = translation, 1 = rotation */ void update_coordinates (project * this_proj, int status, int axis, int action) { vec3_t trans = vec3(this_proj -> modelgl -> atom_win -> new_param[status][axis][0]-this_proj -> modelgl -> atom_win -> old_param[status][axis][0], this_proj -> modelgl -> atom_win -> new_param[status][axis][1]-this_proj -> modelgl -> atom_win -> old_param[status][axis][1], this_proj -> modelgl -> atom_win -> new_param[status][axis][2]-this_proj -> modelgl -> atom_win -> old_param[status][axis][2]); float r = this_proj -> modelgl -> atom_win -> new_param[status][axis][action] - this_proj -> modelgl -> atom_win -> old_param[status][axis][action]; if (v3_length(trans) != 0.0 || r != 0.0) { move_selection (this_proj, action, axis, trans, r); this_proj -> modelgl -> was_moved = TRUE; this_proj -> modelgl -> atom_win -> old_param[status][axis][action] = this_proj -> modelgl -> atom_win -> new_param[status][axis][action]; init_default_shaders (this_proj -> modelgl); update (this_proj -> modelgl); } } /*! \fn G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data) \brief repeat motion callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void repeat_move (GtkSpinButton * res, gpointer data) { project * this_proj = (project *)data; this_proj -> modelgl -> atom_win -> repeat_move = gtk_spin_button_get_value_as_int(res); } /*! \fn void update_range_and_entry (project * this_proj, int i, int j, int k) \brief update motion range \param this_proj the target project \param i selection status, 0 = non selected atom(s), 1 = selected atom(s), 2 = all atom(s) \param j axis, 0 = model, 1 = eye \param k parameter to update: x, y, z or alpha, beta, gamma */ void update_range_and_entry (project * this_proj, int i, int j, int k) { update_entry_double (GTK_ENTRY(this_proj -> modelgl -> atom_win -> edit_entry[k]), this_proj -> modelgl -> atom_win -> new_param[i][j][k]); gtk_range_set_value (GTK_RANGE(this_proj -> modelgl -> atom_win -> edit_scale[k]), this_proj -> modelgl -> atom_win -> new_param[i][j][k]); } /*! \fn float get_limit (int mot, glwin * view) \brief get motion limit \param mot translation (0) or rotation (1) \param view the target glwin */ float get_limit (int mot, glwin * view) { if (! mot) { int plimit = (int)(view -> anim -> last -> img -> p_depth/limit[mot]); return limit[mot] + 2.0*plimit*limit[mot]; } else { return limit[mot]; } } /*! \fn void range_has_changed (gpointer data, double v) \brief motion \param data the associated data pointer \param v the value for motion */ void range_has_changed (gpointer data, double v) { tint * id = (tint *)data; project * this_proj = get_project_by_id(id -> a); int h, i, j, k; h = id -> b - TOLAB; i = (h < 3) ? 0 : 1; j = this_proj -> modelgl -> atom_win -> axis[i]; k = this_proj -> modelgl -> search_widg[id -> c] -> status; if (v != this_proj -> modelgl -> atom_win -> new_param[k][j][h]) { float plim = get_limit (i, this_proj -> modelgl); if (v >= -plim && v <= plim) { this_proj -> modelgl -> atom_win -> new_param[k][j][h] = v; this_proj -> modelgl -> atom_win -> active = i; update_coordinates (this_proj, k, j, h); } update_range_and_entry (this_proj, k, j, h); } } /*! \fn G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data) \brief motion callback - entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_move (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = atof(m); range_has_changed (data, v); } /*! \fn G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data) \brief motion callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void range_move (GtkRange * range, gpointer data) { range_has_changed (data, gtk_range_get_value (range)); } /*! \fn G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief motion callback - scroll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_range_move (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { range_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data) \brief set motion axis (eye or model) \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_for_motion (GtkComboBox * box, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i, j; j = id -> b - TOLAB; this_proj -> modelgl -> atom_win -> axis[j] = gtk_combo_box_get_active (box); for (i=3*j; i<(j + 1)*3; i++) { update_range_and_entry (this_proj, this_proj -> modelgl -> search_widg[id -> c] -> status, this_proj -> modelgl -> atom_win -> axis[j], i); } this_proj -> modelgl -> atom_win -> active = j; update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data) \brief set show / hide motion axis toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_motion_axis (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data) \brief set show / hide motion axis toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_motion_axis (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i, j; j = id -> b - TOLAB; #ifdef GTK4 i = gtk_check_button_get_active (but); gtk_check_button_set_active (GTK_CHECK_BUTTON(this_proj -> modelgl -> atom_win -> axis_but[! j]), i); #else i = gtk_toggle_button_get_active (but); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(this_proj -> modelgl -> atom_win -> axis_but[! j]), i); #endif this_proj -> modelgl -> atom_win -> active = j; this_proj -> modelgl -> atom_win -> show_axis[j] = i; if (i) { this_proj -> modelgl -> anim -> last -> img -> box_axis[AXIS] = CYLINDERS; } else { this_proj -> modelgl -> anim -> last -> img -> box_axis[AXIS] = this_proj -> modelgl -> atom_win -> old_axis; } this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); } /*! \fn void check_motion_interactors (project * this_proj, atom_search * asearch) \brief add motion check button \param this_proj the target project \param asearch the target atom search */ void check_motion_interactors (project * this_proj, atom_search * asearch) { gboolean activate = do_we_have_objects_in_selection (this_proj, asearch, FALSE); int i; if (this_proj -> modelgl -> atom_win) { for (i=0; i<6; i++) { if (this_proj -> modelgl -> atom_win -> edit_entry[i]) { widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_entry[i], (((asearch -> object && ! asearch -> passivating ) || (asearch -> object > 1 && asearch -> passivating)) || i < 3) ? activate : 0); } if (this_proj -> modelgl -> atom_win -> edit_scale[i]) { widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_scale[i], (((asearch -> object && ! asearch -> passivating ) || (asearch -> object > 1 && asearch -> passivating)) || i < 3) ? activate : 0); } } } } /*! \fn GtkWidget * create_axis_entries (atom_search * asearch, project * this_proj, int mot, int axd) \brief create axis entries \param asearch the target atom search \param this_proj the target project \param mot translation (0) or rotation (1) \param axd axis (0 = x, 1 = y, 2 = z) */ GtkWidget * create_axis_entries (atom_search * asearch, project * this_proj, int mot, int axd) { gchar * str; GtkWidget * lab; GtkWidget * hbox; gchar * axis[3]={"x", "y", "z"}; gchar * unit[2]={"Å", "°"}; GtkWidget * vbox = create_vbox (5); int j = mot*3 + axd; float plim = get_limit (mot, this_proj -> modelgl); this_proj -> modelgl -> atom_win -> edit_entry[j] = create_entry (G_CALLBACK(set_move), 100, 15, FALSE, & asearch -> pointer[j]); this_proj -> modelgl -> atom_win -> edit_scale[j] = create_hscale (-plim, plim, 0.001, this_proj -> modelgl -> atom_win -> new_param[asearch -> status][1][j], GTK_POS_TOP, 4, 250, G_CALLBACK(range_move), G_CALLBACK(scroll_range_move), & asearch -> pointer[j]); widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_entry[j], 0); widget_set_sensitive (this_proj -> modelgl -> atom_win -> edit_scale[j], 0); str = g_strdup_printf ("On %s axis:", axis[axd]); lab = markup_label(unit[mot], 20, -1, 0.0, 0.5); update_entry_double (GTK_ENTRY(this_proj -> modelgl -> atom_win -> edit_entry[j]), this_proj -> modelgl -> atom_win -> new_param[asearch -> status][1][j]); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 70, -1, 0.0, 0.5), FALSE, FALSE, 50); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> edit_scale[j], FALSE, FALSE, 0); GtkWidget * fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(fixed), this_proj -> modelgl -> atom_win -> edit_entry[j], 0, 15); gtk_fixed_put (GTK_FIXED(fixed), lab, 120, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj) \brief add motion interaction widgets \param asearch the target atom search \param axd translation (0) or rotation (1) \param this_proj the target project */ GtkWidget * add_motion_interaction (atom_search * asearch, int axd, project * this_proj) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Select the axis to be used: ", 200, -1, 0.0, 0.5), FALSE, FALSE, 20); this_proj -> modelgl -> atom_win -> axis_combo[axd] = create_combo (); combo_text_append (this_proj -> modelgl -> atom_win -> axis_combo[axd], "Model axis"); combo_text_append (this_proj -> modelgl -> atom_win -> axis_combo[axd], "Eye (viewer) axis"); gtk_combo_box_set_active (GTK_COMBO_BOX(this_proj -> modelgl -> atom_win -> axis_combo[axd]), this_proj -> modelgl -> atom_win -> axis[axd]); g_signal_connect (G_OBJECT (this_proj -> modelgl -> atom_win -> axis_combo[axd]), "changed", G_CALLBACK(set_axis_for_motion), & asearch -> pointer[axd]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> axis_combo[axd], FALSE, FALSE, 20); this_proj -> modelgl -> atom_win -> axis_but[axd] = check_button ("Show", 100, 35, FALSE, G_CALLBACK(set_show_motion_axis), & asearch -> pointer[axd]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> axis_but[axd], FALSE, FALSE, 20); int i; for (i=0; i<3; i++) { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_axis_entries (asearch, this_proj, axd, i), FALSE, FALSE, 0); } hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); //add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, // check_button ("Reset transformation(s)", -1, 35, FALSE, G_CALLBACK(set_reset_transformation), & asearch -> pointer[0]), // FALSE, FALSE, 10); return vbox; } Atomes-GNU-1.1.14/src/opengl/edit/atom_object.c000066400000000000000000001260011457665371200211270ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_object.c * @short Functions to create atomic objects * @author Sébastien Le Roux */ /* * This file: 'atom_object.c' * * Contains: * - The functions to create atomic objects * * List of functions: int in_object_bond_list (atomic_object * object, int aid, int bid); int create_object_from_open_project (project * this_proj, int p); int * duplicate_z (int species, double * old_z); double get_object_dim (atomic_object * object); gboolean rebuild_atom_neighbors (project * this_proj, int step, atomic_object * object, int target, int aid, atom * at, gboolean * checked_at); void correct_pos_and_get_dim (atomic_object * object, gboolean adjust); void reconstruct_bonds (project * this_proj, int ifcl, int * bcid); void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord); void correct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord); void create_object_from_library (int p); void clean_object_vois (project * this_proj, atomic_object * object, int * new_id, gboolean movtion); void clean_object_bonds (project * proj, int o_step, atomic_object * object, int * new_id, gboolean movtion); void add_object_atoms (atomic_object * this_object, project * this_proj, int o_step, int numa, int * old_id, gboolean alloc_new_id, atom_search * remove); void adjust_object_frag_coord (atomic_object * object); void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch); void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); atomic_object * duplicate_atomic_object (atomic_object * old_obj); atomic_object * create_object_from_species (project * this_proj, int sid, atom_search * remove); atomic_object * create_object_from_selection (project * this_proj); atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove); atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove); atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove); tint ulam_coord (glwin * view); */ #include "atom_edit.h" extern atomic_object * cif_object; /*! \fn double get_object_dim (atomic_object * object) \brief get estimate of an object dimension \param object */ double get_object_dim (atomic_object * object) { double dmax = 0.0; vec3_t at, bt; vec3_t dist; int i, j; for (i=0; i atoms-1; i++) { at = vec3 (object -> at_list[i].x, object -> at_list[i].y, object -> at_list[i].z); for (j=i+1; j atoms; j++) { bt = vec3 (object -> at_list[j].x, object -> at_list[j].y, object -> at_list[j].z); dist = v3_sub(at, bt); dmax = max (dmax, v3_length(dist)); } } return dmax+1.0; } /*! \fn void correct_pos_and_get_dim (atomic_object * object, gboolean adjust) \brief get the barycenter of the atomic coordinates of an object \param object the target insert object \param adjust center object coordinates or not */ void correct_pos_and_get_dim (atomic_object * object, gboolean adjust) { int i; if (object -> baryc) g_free(object -> baryc); object -> baryc = allocdouble(3); for (i=0; i atoms; i++) { object -> baryc[0] += object -> at_list[i].x; object -> baryc[1] += object -> at_list[i].y; object -> baryc[2] += object -> at_list[i].z; } for (i=0; i<3; i++) object -> baryc[i] /= object -> atoms; if (adjust) { for (i=0; i atoms; i++) { object -> at_list[i].x -= object -> baryc[0]; object -> at_list[i].y -= object -> baryc[1]; object -> at_list[i].z -= object -> baryc[2]; } } object -> dim = get_object_dim (object); } /*! \fn gboolean rebuild_atom_neighbors (project * this_proj, int step, atomic_object * object, int target, int aid, atom * at, gboolean * checked_at) \brief rebuild target atom id coordinates using PBC \param this_proj the target project \param step the MD step \param object the target insert object \param target the target atom id to correct \param aid the atom id \param at the target atom \param checked_at the list of already checked/corrected atom coordinates id */ gboolean rebuild_atom_neighbors (project * this_proj, int step, atomic_object * object, int target, int aid, atom * at, gboolean * checked_at) { int i, j; distance dist; for (i=0; i numv; i++) { j = at -> vois[i]; dist = distance_3d (& this_proj -> cell, step, at, & object -> at_list[j]); if (dist.pbc && ! checked_at[j]) { object -> at_list[j].x = at -> x - dist.x; object -> at_list[j].y = at -> y - dist.y; object -> at_list[j].z = at -> z - dist.z; } } checked_at[aid] = TRUE; i = 0; for (j=0; j atoms; j++) if (checked_at[j]) i ++; if (i == target) return TRUE; for (i=0; i numv; i++) { j = at -> vois[i]; if (! checked_at[j]) { if (rebuild_atom_neighbors (this_proj, step, object, target, j, & object -> at_list[j], checked_at)) return TRUE; } } return FALSE; } /*! \fn void reconstruct_bonds (project * this_proj, int ifcl, int * bcid) \brief reconstruct the project bond(s)/clone(s) lists after reconstruction using PBC \param this_proj the target project \param ifcl number of clone bond(s) removed \param bcid the removed clone bond(s) atoms id */ void reconstruct_bonds (project * this_proj, int ifcl, int * bcid) { int i, j, k, l; int o_step = this_proj -> modelgl -> anim -> last -> img -> step; int ** old_bid = NULL; old_bid = allocdint (this_proj -> modelgl -> bonds[o_step][0], 2); for (i=0; i modelgl -> bonds[o_step][0]; i++) { for (j=0; j<2; j++) old_bid[i][j] = this_proj -> modelgl -> bondid[o_step][0][i][j]; } g_free (this_proj -> modelgl -> bondid[o_step][0]); this_proj -> modelgl -> bondid[o_step][0] = allocdint (this_proj -> modelgl -> bonds[o_step][0]+ ifcl, 2); for (i=0; i modelgl -> bonds[o_step][0]; i++) { for (j=0; j<2; j++) this_proj -> modelgl -> bondid[o_step][0][i][j] = old_bid[i][j]; } if (old_bid) g_free (old_bid); old_bid = NULL; for (i=0; i modelgl -> bonds[o_step][0]; for (l=0; l<2; l++) { this_proj -> modelgl -> bondid[o_step][0][k][l] = this_proj -> modelgl -> bondid[o_step][1][j][l]; } this_proj -> modelgl -> bonds[o_step][0] ++; this_proj -> modelgl -> allbonds[0] ++; this_proj -> modelgl -> bondid[o_step][1][j][0] = -1; } vec3_t * old_clo = NULL; i = this_proj -> modelgl -> bonds[o_step][1] - ifcl; l = 0; if (i) { old_clo = g_malloc0 (i*sizeof*old_clo); old_bid = allocdint (i, 2); for (i=0; i modelgl -> bonds[o_step][1]; i++) { if (this_proj -> modelgl -> bondid[o_step][1][i][0] > -1) { for (k=0; k<2; k++) old_bid[l][k] = this_proj -> modelgl -> bondid[o_step][1][i][k]; old_clo[l].x = this_proj -> modelgl -> clones[o_step][i].x; old_clo[l].y = this_proj -> modelgl -> clones[o_step][i].y; old_clo[l].z = this_proj -> modelgl -> clones[o_step][i].z; l ++; } } } g_free (this_proj -> modelgl -> bondid[o_step][1]); this_proj -> modelgl -> bondid[o_step][1] = NULL; g_free (this_proj -> modelgl -> clones[o_step]); this_proj -> modelgl -> clones[o_step] = NULL; this_proj -> modelgl -> bonds[o_step][1] = this_proj -> modelgl -> allbonds[1] = l; if (l) { this_proj -> modelgl -> bondid[o_step][1] = allocdint (l, 2); this_proj -> modelgl -> clones[o_step] = g_malloc0 (l*sizeof*this_proj -> modelgl -> clones[o_step]); for (i=0; i modelgl -> bondid[o_step][1][i][j] = old_bid[i][j]; this_proj -> modelgl -> clones[o_step][i].x = old_clo[i].x; this_proj -> modelgl -> clones[o_step][i].y = old_clo[i].y; this_proj -> modelgl -> clones[o_step][i].z = old_clo[i].z; } if (old_clo) g_free (old_clo); old_clo = NULL; if (old_bid) g_free (old_bid); old_bid = NULL; } } /*! \fn void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) \brief reconstruct object atomic coordinates using PBC \param this_object the target project \param this_proj the target insert object \param upcoord reconstruction of atomic coordinates using PBC ? */ void reconstruct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) { int h, i, j, k; if (this_proj -> coord -> totcoord[2]) { int * tmp_multi = allocint (this_proj -> coord -> totcoord[2]); for (i=0; i atoms; i++) { j = this_object -> at_list[i].coord[2]; tmp_multi[j] = 1; } gboolean * checked_at = allocbool (this_object -> atoms); h = (this_proj -> cell.npt) ? this_proj -> modelgl -> anim -> last -> img -> step : 0; for (i=0; i coord -> totcoord[2]; i++) { if (tmp_multi[i]) { k = 0; for (j=0; j atoms; j++) { checked_at[j] = FALSE; if (this_object -> at_list[j].coord[2] == i) { k ++; } } for (j=0; j atoms; j++) { if (this_object -> at_list[j].coord[2] == i) { rebuild_atom_neighbors (this_proj, h, this_object, k, j, & this_object -> at_list[j], checked_at); } } } } g_free (checked_at); } correct_pos_and_get_dim (this_object, TRUE); if (upcoord) { reconstruct_bonds (this_proj, this_object -> ifcl, this_object -> bcid); for (i=0; i atoms; i++) { j = this_object -> at_list[i].id; this_proj -> atoms[0][j].x = this_object -> at_list[i].x + this_object -> baryc[0]; this_proj -> atoms[0][j].y = this_object -> at_list[i].y + this_object -> baryc[1]; this_proj -> atoms[0][j].z = this_object -> at_list[i].z + this_object -> baryc[2]; this_proj -> atoms[0][j].cloned = FALSE; } for (i=0; i<3; i++) this_proj -> modelgl -> saved_coord[i] = save_coordinates (this_proj, i); } } /*! \fn void correct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) \brief correct the atomic coordinates for 'this_object' \param this_proj the target project \param this_object the target insert object \param upcoord reconstruction of atomic coordinates using PBC ? */ void correct_coordinates_for_object (project * this_proj, atomic_object * this_object, gboolean upcoord) { if (this_object -> ifcl) { if (upcoord) { reconstruct_coordinates_for_object (this_proj, this_object, upcoord); this_object -> ifcl = 0; g_free (this_object -> bcid); this_object -> bcid = NULL; } else { correct_pos_and_get_dim (this_object, FALSE); } } else { correct_pos_and_get_dim (this_object, TRUE); } } /*! \fn tint ulam_coord (glwin * view) \brief shift insertion position for object not to have overlapping objects for multiple/repeated insertions \param view the target glwin */ tint ulam_coord (glwin * view) { tint pos; int m; pos.a = pos.b = pos.c = 0; if (view -> builder_win) return pos; int p = view -> nth_copy; if (p > 0) { pos.c = p/9; m = p - pos.c*9; pos.b = m/3; pos.a = p - pos.c*9 - pos.b*3; } return pos; } int being_copied; atomic_object * lib_object; /*! \fn atomic_object * duplicate_atomic_object (atomic_object * old_obj) \brief duplicate an insert object \param old_obj the insert object to duplicate */ atomic_object * duplicate_atomic_object (atomic_object * old_obj) { atomic_object * new_obj = g_malloc0 (sizeof*new_obj); new_obj -> origin = old_obj -> origin; new_obj -> type = old_obj -> type; new_obj -> dim = old_obj -> dim; new_obj -> name = g_strdup_printf ("%s", old_obj -> name); new_obj -> atoms = old_obj -> atoms; new_obj -> at_list = g_malloc0 (new_obj -> atoms*sizeof*new_obj -> at_list); int i; for (i=0; i atoms; i++) { new_obj -> at_list[i] = * duplicate_atom (& old_obj -> at_list[i]); } new_obj -> old_z = duplicate_int (old_obj -> species, old_obj -> old_z); new_obj -> coord = duplicate_coord_info (old_obj -> coord); new_obj -> baryc = duplicate_double (3, old_obj -> baryc); new_obj -> occ = old_obj -> occ; new_obj -> species = old_obj -> species; if (old_obj -> bonds) { new_obj -> ibonds = g_malloc0 (old_obj -> bonds*sizeof*new_obj -> ibonds); int i; for (i=0; i bonds; i++) { new_obj -> ibonds[i] = duplicate_int (2, old_obj -> ibonds[i]); } } new_obj -> bonds = old_obj -> bonds; return new_obj; } /*! \fn void create_object_from_library (int p) \brief create object using the molecular library \param p the project id of the library molecule in the workspace */ void create_object_from_library (int p) { int i, j; lib_object = g_malloc0 (sizeof*lib_object); project * other_proj = get_project_by_id (p); i = other_proj -> natomes; lib_object -> type = FROM_LIBRARY; lib_object -> origin = p; lib_object -> name = g_strdup_printf ("%s", other_proj -> name); lib_object -> coord = duplicate_coord_info (other_proj -> coord); lib_object -> atoms = i; lib_object -> at_list = g_malloc0 (lib_object -> atoms*sizeof*lib_object -> at_list); lib_object -> occ = 1.0; lib_object -> species = other_proj -> nspec; lib_object -> old_z = allocint (other_proj -> nspec); for (j=0; j nspec; j++) lib_object -> old_z[j] = (int) other_proj -> chemistry -> chem_prop[CHEM_Z][j]; for (j=0; j at_list[j] = * duplicate_atom (& other_proj -> atoms[0][j]); } correct_pos_and_get_dim (lib_object, TRUE); if (other_proj -> modelgl -> bonds[0][0]) { i = other_proj -> modelgl -> bonds[0][0]; lib_object -> ibonds = allocdint (i, 2); for (j=0; j ibonds[j][0] = other_proj -> modelgl -> bondid[0][0][j][0]; lib_object -> ibonds[j][1] = other_proj -> modelgl -> bondid[0][0][j][1]; } lib_object -> bonds = i; } // Always one frag from library lib_object -> coord -> totcoord[2] = 1; } /*! \fn int in_object_bond_list (atomic_object * object, int aid, int bid) \brief is there a bond between atom aid and atom bid ? \param object the target insert object \param aid 1st atom id \param bid 2nd atom id */ int in_object_bond_list (atomic_object * object, int aid, int bid) { int i; for (i=0; i bonds; i++) { if (object -> ibonds[i][0] == aid && object -> ibonds[i][1] == bid) return 1; if (object -> ibonds[i][1] == aid && object -> ibonds[i][0] == bid) return 1; } return 0; } /*! \fn void clean_object_vois (project * this_proj, atomic_object * object, int * new_id, gboolean movtion) \brief clean the object neigbours list \param this_proj the target project \param object the target insert object \param new_id list of atom's old id in the project 'this_proj' \param movtion reconstruction of atomic coordinates using PBC ? */ void clean_object_vois (project * this_proj, atomic_object * object, int * new_id, gboolean movtion) { int i, j, k, l; int * tmpv; for (i=0; i atoms; i++) { if (object -> at_list[i].numv) { tmpv = duplicate_int (object -> at_list[i].numv, object -> at_list[i].vois); g_free (object -> at_list[i].vois); object -> at_list[i].vois = NULL; j = 0; for (k=0; k at_list[i].numv; k++) { l = tmpv[k]; if (new_id[l]) { j += (! movtion) ? in_object_bond_list(object, i, new_id[l]-1) : 1; } } if (j) { object -> at_list[i].vois = allocint (j); j = 0; for (k=0; k at_list[i].numv; k++) { l = tmpv[k]; if (new_id[l]) { if (! movtion || in_object_bond_list(object, i, new_id[l]-1)) { object -> at_list[i].vois[j] = new_id[l]-1; j ++; } } } } object -> at_list[i].numv = j; g_free (tmpv); } } } /*! \fn void clean_object_bonds (project * proj, int o_step, atomic_object * object, int * new_id, gboolean movtion) \brief create the object bond list, and adjust the bond's atom id \param proj the target project \param o_step the MD step \param object the target insert object \param new_id list of atom's old id in the project 'this_proj' \param movtion reconstruction of atomic coordinates using PBC ? */ void clean_object_bonds (project * proj, int o_step, atomic_object * object, int * new_id, gboolean movtion) { int h, i, j, k, l, m; gboolean doit; int ** tmpibonds = allocdint (proj -> modelgl -> bonds[o_step][0]+proj -> modelgl -> bonds[o_step][1], 2); if (proj -> modelgl -> bonds[o_step][1]) { h = (movtion) ? 2 : 1; } else { h = 1; } i = 0; if (new_id) object -> bcid = allocint (proj -> modelgl -> bonds[o_step][1]); for (j=0; j modelgl -> bonds[o_step][j]; k++) { l = proj -> modelgl -> bondid[o_step][j][k][0]; m = proj -> modelgl -> bondid[o_step][j][k][1]; doit = FALSE; if (new_id) { if (new_id[l] && new_id[m]) doit = TRUE; } else { doit = TRUE; } if (doit) { if (new_id) { tmpibonds[i][0] = new_id[l] - 1; tmpibonds[i][1] = new_id[m] - 1; } else { tmpibonds[i][0] = l; tmpibonds[i][1] = m; } i ++; if (j && new_id) { object -> bcid[object -> ifcl] = k; object -> ifcl ++; } } } } if (i) { object -> ibonds = allocdint (i, 2); for (j=0; j ibonds[j][0] = tmpibonds[j][0]; object -> ibonds[j][1] = tmpibonds[j][1]; } } g_free (tmpibonds); object -> bonds = i; if (new_id) clean_object_vois (proj, object, new_id, movtion); } /*! \fn void add_object_atoms (atomic_object * this_object, project * this_proj, * int o_step, int numa, int * old_id, gboolean alloc_new_id, atom_search * remove) \brief add atom list to insert object \param this_object the target insert object \param this_proj the target project \param o_step the MD step \param numa number of atom(s) \param old_id list of atom's old id in the project 'this_proj' \param alloc_new_id check_bonding check bonding ? (partial copy or not) \param remove remove search, if any */ void add_object_atoms (atomic_object * this_object, project * this_proj, int o_step, int numa, int * old_id, gboolean check_bonding, atom_search * remove) { int i, j; this_object -> atoms = numa; this_object -> at_list = g_malloc0 (this_object -> atoms*sizeof*this_object -> at_list); int * new_id = allocint (this_proj -> natomes); for (i=0; i atoms; i++) { j = old_id[i]-1; new_id[j] = i+1; if (remove) remove -> todo[j] = 1; this_object -> at_list[i] = * duplicate_atom (& this_proj -> atoms[o_step][j]); if (i) { this_object -> at_list[i].prev = & this_object -> at_list[i-1]; this_object -> at_list[i-1].next = & this_object -> at_list[i]; } } gboolean movtion = ((object_motion && this_proj -> modelgl -> rebuild[0][0]) || (! object_motion && this_proj -> modelgl -> rebuild[1][0])); if (check_bonding) { clean_object_bonds (this_proj, o_step, this_object, new_id, movtion); } correct_coordinates_for_object (this_proj, this_object, movtion); if (check_bonding) { check_coord_modification (this_proj, NULL, & this_object -> at_list[0], this_object, FALSE, FALSE); } g_free (old_id); g_free (new_id); } /*! \fn int * duplicate_z (int species, double * old_z) \brief duplicate z table when creating an object, integer is preferred to avoid comparison errors during action \param species the number of chemical species \param old_z the old z table to duplicate * */ int * duplicate_z (int species, double * old_z) { int i; int * new_z = allocint (species); for (i=0; i modelgl -> anim -> last -> img -> step; this_object -> name = g_strdup_printf ("%s", this_proj -> chemistry -> label[sid]); i = this_proj -> chemistry -> nsps[sid]; this_object -> type = FROM_SPEC; this_object -> origin = this_proj -> id; this_object -> atoms = i; this_object -> at_list = g_malloc0 (this_object -> atoms*sizeof*this_object -> at_list); this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_id = NULL; new_id = allocint (this_proj -> natomes); gboolean check_bonding = FALSE; gboolean bonding = FALSE; i = 0; for (j=0; j natomes; j++) { if (this_proj -> atoms[o_step][j].sp == sid) { if (this_proj -> atoms[o_step][j].numv) bonding = TRUE; new_id[i] = j+1; i ++; } } check_bonding = (i != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, i, new_id, check_bonding, remove); return this_object; } /*! \fn atomic_object * create_object_from_selection (project * this_proj) \brief create object from atom selection \param this_proj the target project */ atomic_object * create_object_from_selection (project * this_proj) { int i, j; atomic_object * this_object = g_malloc0 (sizeof*this_object); int o_step = this_proj -> modelgl -> anim -> last -> img -> step; this_object -> name = g_strdup_printf ("From selection"); i = 0; for (j=0; jnatomes; j++) { if (pasted_todo[j]) i++; } this_object -> type = FROM_DATA; this_object -> origin = this_proj -> id; this_object -> atoms = i; this_object -> at_list = g_malloc0 (this_object -> atoms*sizeof*this_object -> at_list); this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); i = 0; int * new_id = NULL; new_id = allocint(this_proj -> natomes); gboolean check_bonding = FALSE; gboolean bonding = FALSE; for (j=0; j natomes; j++) { if (pasted_todo[j]) { new_id[i] = j+1; if (this_proj -> atoms[o_step][j].numv) bonding = TRUE; i ++; } } check_bonding = (i != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, i, new_id, check_bonding, NULL); if (pasted_todo) { g_free (pasted_todo); pasted_todo = NULL; } return this_object; } /*! \fn atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove) \brief create object from an atom and its nearest neighbors \param this_proj the target project \param coord 0 = total coordination, 1 = partial coordination \param aid the atom id \param remove remove search, if any */ atomic_object * create_object_from_atom_coordination (project * this_proj, int coord, int aid, atom_search * remove) { int i, j, k; atomic_object * this_object = g_malloc0 (sizeof*this_object); gchar * str; int o_step = this_proj -> modelgl -> anim -> last -> img -> step; i = this_proj -> atoms[o_step][aid].numv; k = this_proj -> atoms[o_step][aid].coord[coord]; j = this_proj -> atoms[o_step][aid].sp; switch (coord) { case 0: if (i > 0) { str = g_strdup_printf ("%d-fold", i); } else { str = g_strdup_printf ("Isolated"); } break; case 1: str = g_strdup_printf ("%s", env_name(this_proj, k, j, 1, NULL)); break; } this_object -> name = g_strdup_printf ("%s - %s%d", str, this_proj -> chemistry -> label[j], aid+1); g_free (str); this_object -> type = - (coord + 3); this_object -> origin = this_proj -> id; this_object -> atoms = i+1; this_object -> at_list = g_malloc0 (this_object -> atoms*sizeof*this_object -> at_list); this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_int (this_proj -> nspec, (int *)this_proj -> chemistry -> chem_prop[CHEM_Z]); this_object -> at_list[0] = * duplicate_atom (& this_proj -> atoms[o_step][aid]); if (remove) remove_search -> todo[aid] = 1; gboolean movtion = (object_motion && this_proj -> modelgl -> rebuild[0][0]) || (! object_motion && this_proj -> modelgl -> rebuild[1][0]); if (this_proj -> atoms[o_step][aid].numv) { int * new_id = NULL; new_id = allocint (this_proj -> natomes); new_id[aid] = 1; for (i=0; i atoms[o_step][aid].numv; i++) { j = this_proj -> atoms[o_step][aid].vois[i]; if (remove) remove_search -> todo[j] = 1; new_id[j] = i+2; this_object -> at_list[i+1] = * duplicate_atom (& this_proj -> atoms[o_step][j]); } clean_object_bonds (this_proj, o_step, this_object, new_id, movtion); if (new_id) { g_free (new_id); new_id = NULL; } correct_coordinates_for_object (this_proj, this_object, movtion); } return this_object; } /*! \fn atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove) \brief create object from all the atom(s) that have the same exact coordination than the target atom \param this_proj the target project \param coord 0 = total coordination, 1 = partial coordination \param aid target atom id \param remove remove search, if any */ atomic_object * create_object_from_overall_coordination (project * this_proj, int coord, int aid, atom_search * remove) { int i, j, k, l, m, n; atomic_object * this_object = g_malloc0 (sizeof*this_object); int o_step = this_proj -> modelgl -> anim -> last -> img -> step; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); this_object -> type = - (coord + 3); this_object -> origin = this_proj -> id; this_object -> occ = 1.0; int * new_id = NULL; new_id = allocint(this_proj -> natomes); gchar * str; gboolean check_bonding = FALSE; gboolean bonding = FALSE; switch (coord) { case 0: for (k=0; k natomes; k++) { if (this_proj -> atoms[o_step][k].coord[0] == aid) { i = this_proj -> atoms[o_step][k].numv; break; } } if (i) { bonding = TRUE; str = g_strdup_printf ("%d-fold", i); } else { str = g_strdup_printf ("Isolated"); } j = 0; for (k=0; k natomes; k++) { if (this_proj -> atoms[o_step][k].numv == aid) { new_id[j] = k+1; j ++; } } break; case 1: j = 0; for (k=0; k natomes; k++) { l = this_proj -> atoms[o_step][k].sp; m = this_proj -> atoms[o_step][k].coord[coord-1]; for (n=0; n coord -> ntg[1][n]; if (m == aid) { new_id[j] = k+1; if (this_proj -> atoms[o_step][k].numv) bonding = TRUE; j ++; } } str = g_strdup_printf ("%s", env_name(this_proj, l, aid, 1, NULL)); break; } this_object -> name = g_strdup_printf ("All %s - atom(s)", str); g_free (str); check_bonding = (j != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, j, new_id, check_bonding, remove); return this_object; } /*! \fn atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove) \brief create object from a fragment or a molecule \param this_proj the target project \param coord 2 = fragment, 3 = molecule \param geo fragment or molecule id \param remove remove search, if any */ atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove) { int i, j; atomic_object * this_object = g_malloc0 (sizeof*this_object); if (coord == 2) { this_object -> name = g_strdup_printf ("Fragment N°%d", geo+1); } else { this_object -> name = g_strdup_printf ("Molecule N°%d", geo+1); } int o_step = this_proj -> modelgl -> anim -> last -> img -> step; this_object -> type = - (coord + 3); this_object -> origin = this_proj -> id; this_object -> occ = 1.0; this_object -> coord = duplicate_coord_info (this_proj -> coord); this_object -> species = this_proj -> nspec; this_object -> old_z = duplicate_z (this_proj -> nspec, this_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_id = NULL; new_id = allocint(this_proj -> natomes); gboolean check_bonding = FALSE; gboolean bonding = FALSE; i = 0; for (j=0; jnatomes; j++) { if (this_proj -> atoms[o_step][j].coord[coord] == geo) { new_id[i] = j+1; if (this_proj -> atoms[o_step][j].numv) bonding = TRUE; i++; } } check_bonding = (i != this_proj -> natomes && bonding) ? TRUE : FALSE; add_object_atoms (this_object, this_proj, o_step, i, new_id, check_bonding, remove); return this_object; } /*! \fn void adjust_object_frag_coord (atomic_object * object) \brief adjust object number of fragment(s) \param object the target insert object */ void adjust_object_frag_coord (atomic_object * object) { int i, j, k; int * corf = allocint (object -> coord -> totcoord[2]); int * rorf = allocint (object -> coord -> totcoord[2]); for (i=0; i atoms; i++) { j = object -> at_list[i].coord[2]; rorf[j] ++; } j = k = 0; for (i=0; i coord -> totcoord[2]; i++) { corf[i] = k; if (rorf[i]) { j++; } else { k++; } } object -> coord -> totcoord[2] = j; for (i=0; i atoms; i++) { j = corf[object -> at_list[i].coord[2]]; object -> at_list[i].coord[2] -= j; object -> at_list[i].id = i; } remove_bonds_from_project (NULL, object, NULL, & object -> at_list[0], FALSE, FALSE); } /*! \fn int create_object_from_open_project (project * this_proj, int p) \brief create object from atom(s) of a project opened in the workspace \param this_proj the target project \param p the project id of the project that contains the atom(s) to copy */ int create_object_from_open_project (project * this_proj, int p) { int i, j; lib_object = g_malloc0 (sizeof*lib_object); project * other_proj; other_proj = get_project_by_id (p); int o_step = other_proj -> modelgl -> anim -> last -> img -> step; switch (this_proj -> modelgl -> other_status) { case 0: i = other_proj -> natomes - other_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected; lib_object -> name = g_strdup_printf ("All non-selected atom(s) from: %s", get_project_by_id(p) -> name); break; case 1: i = other_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected; lib_object -> name = g_strdup_printf ("All selected atom(s) from: %s", get_project_by_id(p) -> name); break; case 2: i = other_proj -> natomes; lib_object -> name = g_strdup_printf ("All atom(s) from: %s", get_project_by_id(p) -> name); break; } lib_object -> type = FROM_PROJECT; lib_object -> origin = p; lib_object -> atoms = i; lib_object -> at_list = g_malloc0 (lib_object -> atoms*sizeof*lib_object -> at_list); lib_object -> occ = 1.0; lib_object -> coord = duplicate_coord_info (other_proj -> coord); lib_object -> species = other_proj -> nspec; lib_object -> old_z = duplicate_z (other_proj -> nspec, other_proj -> chemistry -> chem_prop[CHEM_Z]); int * new_id = NULL; gboolean check_bonding = FALSE; new_id = allocint (other_proj -> natomes); if (this_proj -> modelgl -> other_status == 2) { for (j=0; j at_list[j] = * duplicate_atom (& other_proj -> atoms[o_step][j]); new_id[j] = j+1; if (j) { lib_object -> at_list[j].prev = & lib_object -> at_list[j-1]; lib_object -> at_list[j-1].next = & lib_object -> at_list[j]; } } } else { i = 0; for (j=0; j natomes; j++) { if (other_proj -> atoms[o_step][j].pick[0] == this_proj -> modelgl -> other_status) { lib_object -> at_list[i] = * duplicate_atom (& other_proj -> atoms[o_step][j]); new_id[j] = i+1; if (i) { lib_object -> at_list[i].prev = & lib_object -> at_list[i-1]; lib_object -> at_list[i-1].next = & lib_object -> at_list[i]; } i ++; } } } check_bonding = (i != other_proj -> natomes && (other_proj -> modelgl -> bonds[o_step][0] || other_proj -> modelgl -> bonds[o_step][1])) ? TRUE : FALSE; clean_object_bonds (other_proj, o_step, lib_object, new_id, check_bonding); if (i < other_proj -> natomes) { for (j=0; j atoms; j++) lib_object -> at_list[j].id = new_id[lib_object -> at_list[j].id]-1; if (check_bonding) check_coord_modification (other_proj, NULL, & lib_object -> at_list[0], lib_object, FALSE, FALSE); } correct_coordinates_for_object (other_proj, lib_object, TRUE); if (i < other_proj -> natomes && check_bonding) adjust_object_frag_coord (lib_object); return FROM_PROJECT; } /*! \fn void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch) \brief clean object data \param orig - (fragmol id/species id +1), -1, or, orgin atom id \param act action in enum 'actions' \param this_proj the target project \param asearch the target atom search */ void clean_this_object (int orig, int act, project * this_proj, atom_search * asearch) { atomic_object * tmp_object = NULL; atomic_object * object; switch (asearch -> action) { case REPLACE: object = (this_proj -> modelgl) ? this_proj -> modelgl -> atom_win -> to_be_inserted[act] : cif_object; break; default: object = this_proj -> modelgl -> atom_win -> to_be_moved[act]; break; } while (object) { if ((object -> origin > -1 || object -> origin < -2) && object -> origin == orig) { if (object -> ibonds) g_free (object -> ibonds); if (object -> baryc) g_free (object -> baryc); if (object -> at_list) g_free (object -> at_list); if (object -> coord) g_free (object -> coord); object -> atoms = object -> bonds = 0; asearch -> in_selection --; if (object -> prev != NULL) { if (object -> next != NULL) { object -> next -> prev = object -> prev; object -> prev -> next = object -> next; tmp_object = object -> next; g_free (object); object = tmp_object; } else { object = object -> prev; g_free (object -> next); object -> next = NULL; break; } } else { if (object -> next != NULL) { object = object -> next; if (this_proj -> modelgl) { g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[act]); } else { g_free (cif_object); } object -> prev = NULL; switch (asearch -> action) { case REPLACE: if (this_proj -> modelgl) { this_proj -> modelgl -> atom_win -> to_be_inserted[act] = object; } else { cif_object = object; } break; default: this_proj -> modelgl -> atom_win -> to_be_moved[act] = object; break; } } else { g_free (object); switch (asearch -> action) { case REPLACE: if (this_proj -> modelgl) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[act] = NULL; } else { object = cif_object = NULL; } break; default: object = this_proj -> modelgl -> atom_win -> to_be_moved[act] = NULL; break; } } } } else { object = object -> next; } } } /*! \fn void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible) \brief to insert object in project \param stat in enum object_types \param orig - (fragmol id/species id +1), -1, or, orgin atom id \param this_proj the target project \param asearch the target atom search \param visible is the model edition window visible ? */ void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible) { int i, j; atomic_object * tmp_object = NULL; atomic_object * object; int act; if (asearch -> pointer[0].c == 3) { act = 0; } else if (asearch -> pointer[0].c == 5) { act = 1; } else { act = asearch -> pointer[0].c - 5; } if (! this_proj -> modelgl || ((! act || act == 3) && this_proj -> modelgl -> atom_win -> to_be_inserted[act])) { clean_this_object (orig, act, this_proj, asearch); } if (stat == FROM_DATA) lib_object = duplicate_atomic_object (copied_object); tint ulam; tmp_object = NULL; vec3_t coor_ins = vec3 (0.0,0.0,0.0); if (! visible) { if (act > 0) { if (this_proj -> modelgl) { if (this_proj -> modelgl -> anim && ! this_proj -> modelgl -> builder_win) { this_proj -> modelgl -> insert_coords = get_insertion_coordinates (this_proj -> modelgl); coor_ins = this_proj -> modelgl -> insert_coords; } } } else if (! act) { if (orig < -2 && asearch -> object && ! asearch -> mode) { int filter = get_asearch_filter (asearch); if (! filter) { tmp_object = create_object_from_species (this_proj, -orig-3, NULL); } else if (filter < 3) { tmp_object = create_object_from_atom_coordination (this_proj, filter-1, -orig-3, NULL); } else { tmp_object = create_object_from_frag_mol (this_proj, filter-1, -orig-3, NULL); } coor_ins = vec3 (tmp_object -> baryc[0], tmp_object -> baryc[1], tmp_object -> baryc[2]); if (tmp_object) g_free (tmp_object); } else if (orig > -1) { coor_ins = vec3 (this_proj -> atoms[0][orig].x, this_proj -> atoms[0][orig].y, this_proj -> atoms[0][orig].z); } } } if (stat > 0) { lib_object = g_malloc0 (sizeof*lib_object); lib_object -> type = stat; lib_object -> old_z = allocint (1); lib_object -> old_z[0] = (stat < 119) ? stat : 0.0; lib_object -> at_list = g_malloc0(sizeof*lib_object -> at_list); lib_object -> coord = g_malloc0 (sizeof*lib_object -> coord); lib_object -> coord -> species = 1; for (j=0; j<2; j++) { lib_object -> coord -> totcoord[j] = 1; lib_object -> coord -> ntg[j] = allocint (1); lib_object -> coord -> ntg[j][0] = 1; lib_object -> coord -> geolist[j] = allocdint (1, 1); if (j) lib_object -> coord -> partial_geo = alloctint (1, 1, 1); } lib_object -> coord -> totcoord[j] = 1; lib_object -> baryc = allocdouble (3); lib_object -> atoms = 1; lib_object -> occ = 1.0; lib_object -> species = 1; lib_object -> dim = get_object_dim (lib_object); if (stat > 119) { lib_object -> name = g_strdup_printf ("Empty position"); } else { lib_object -> name = g_strdup_printf ("%s atom", periodic_table_info[stat].lab); } } if (this_proj -> modelgl) { ulam = ulam_coord (this_proj -> modelgl); if (this_proj -> modelgl -> atom_win -> to_be_inserted[act] == NULL) { this_proj -> modelgl -> atom_win -> to_be_inserted[act] = duplicate_atomic_object (lib_object); object = this_proj -> modelgl -> atom_win -> to_be_inserted[act]; } else { object = this_proj -> modelgl -> atom_win -> to_be_inserted[act]; while (object -> next) object = object -> next; object -> next = duplicate_atomic_object (lib_object); object -> next -> prev = object; object = object -> next; } } else { ulam.a = ulam.b = ulam.c = 0.0; if (cif_object == NULL) { cif_object = duplicate_atomic_object (lib_object); object = cif_object; } else { object = cif_object; while (object -> next) object = object -> next; object -> next = duplicate_atomic_object (lib_object); object -> next -> prev = object; object = object -> next; } } if (act) { object -> id = (object -> prev) ? object -> prev -> id + 1 : 0; } else { object -> id = (orig > -1) ? orig : (orig < -2) ? abs(orig) - 3 : abs(orig) - 1; } object -> origin = orig; for (i=0; i atoms; i++) { object -> at_list[i].x += coor_ins.x + object -> dim*ulam.a; object -> at_list[i].y += coor_ins.y + object -> dim*ulam.b; object -> at_list[i].z += coor_ins.z + object -> dim*ulam.c; } asearch -> in_selection ++; if (visible) { int * atid; if (act == 1 || act == 2) { if (object -> id > 0) { atid = duplicate_int (object -> id, asearch -> todo); g_free (asearch -> todo); } allocate_todo (asearch, object -> id+1); for (i=0; i id; i++) { asearch -> todo[i] = atid[i]; } asearch -> todo[i] = 0; update_search_tree (asearch); } } } Atomes-GNU-1.1.14/src/opengl/edit/atom_remove.c000066400000000000000000000501211457665371200211550ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_remove.c * @short Functions to remove bond(s) from a project \n Function to prepare the passivation (removal followed by insertion) * @author Sébastien Le Roux */ /* * This file: 'atom_remove.c' * * Contains: * - The functions to remove bond(s) from a project - The function to prepare the passivation (removal followed by insertion) * * List of functions: int test_this_fragment (int natomes, int fcoord, int fid, atom * atom_list, int * old_id, gboolean remove); gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate); void set_mol_data (int the_atom, int the_mol); void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch); void to_passivate_using_the_objects (project * this_proj, atom_search * asearch); */ #include "atom_edit.h" int tmbs; int molcounter; int atoms_in_frag; int * tigl; int * migl; int * togl; int * ats_in_frag; int * ats_id; int * contacts; int ** neighbors; extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); /*! \fn void set_mol_data_list (int the_atom, atom ** mol_list, int the_mol) \brief set molecule id for atom \param the_atom the atom id \param mol_list the list of atom(s) to look up \param the_mol the molecule id */ void set_mol_data_list (int aid, atom ** mol_list, int the_mol) { int ab, ac, ad; molcounter ++; int the_atom = tigl[aid]; togl[the_atom] = the_mol; tmbs ++; if (molcounter == 10000) goto end; if (tmbs == atoms_in_frag) goto end; int mid = migl[aid]; for (ab=0; ab < mol_list[mid] -> numv; ab++) { ac = mol_list[mid] -> vois[ab]; ad = tigl[ac]; if (! togl[ad] && molcounter < 100000) set_mol_data_list (ac, mol_list, the_mol); if (tmbs == atoms_in_frag) goto end; if (molcounter == 10000) goto end; } molcounter --; end:; } /*! \fn int test_this_fragment (int natomes, int fcoord, int fid, atom * atom_list, int * old_id, gboolean remove) \brief verify that all atom(s) in the fragment are connected somehow, otherwise create new fragment \param natomes number of atom(s) \param fcoord the number of fragment(s) \param fid the fragment id \param atom_list the atom(s) list \param old_id the atom(s) old id list \param remove remove (1) or motion (0) action */ int test_this_fragment (int natomes, int fcoord, int fid, atom ** atom_list, int * old_id, gboolean remove) { int i, j, k, l, m, n; gboolean modif; tigl = allocint(natomes); migl = allocint(natomes); i = 0; for (j=0; j id] > 0) modif = TRUE; } } if (modif) { if (atom_list[j] -> coord[2] == fid) { tigl[atom_list[j] -> id] = i; migl[atom_list[j] -> id] = j; i ++; } } } if (i) { togl = allocint(i); atoms_in_frag = i; // Check each atoms (recursive testing) int totmol = 0; tmbs = molcounter = 0; start:; i = 0; for (j=0; j coord[2] == fid) { k = tigl[atom_list[j] -> id]; if (! molcounter && ! togl[k]) { totmol ++; set_mol_data_list (atom_list[j] -> id, atom_list, totmol); if (tmbs == atoms_in_frag) goto end; if (molcounter == 10000) goto start; molcounter = 0; } else if (molcounter > 0 && togl[k] == totmol) { for (l=0; l numv; l++) { m = atom_list[j] -> vois[l]; n = tigl[m]; if (! togl[n]) { molcounter = 0; i = 1; set_mol_data_list (m, atom_list, totmol); if (tmbs == atoms_in_frag) goto end; if (molcounter == 10000) goto start; molcounter = 1; } } } } } } if (tmbs < atoms_in_frag) { molcounter = 0; goto start; } if (molcounter) goto start; end:; i = 0; for (j=0; j id; l = tigl[k]; if (togl[l] > 1) { atom_list[j] -> coord[2] = fcoord + togl[l] - 2; // g_debug ("togl[l] = %d, j= %d, atom_list[j] -> coord[2]= %d", togl[l], j, atom_list[j] -> coord[2]); } i = max (i, togl[l]); } } g_free (togl); } g_free (tigl); g_free (migl); return i-1; } /*! \fn gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate) \brief remove bond(s) from project \param this_proj the target project \param this_object the target insert object, if any \param old_id the atom(s) id list \param new_list the new atom list \param remove remove (1) or motion (0) action \param passivate passivate (1) or not (0) */ gboolean * remove_bonds_from_project (project * this_proj, atomic_object * this_object, int * old_id, atom * new_list, gboolean remove, gboolean passivate) { int h, i, j, k, l, m; int tmpbond[2]; int ** tmpbondid[2]; atom * tmp_list; gboolean * frag_to_test; gboolean * frag_to_remove; gboolean * show_frag = NULL; int * per_frag; int * in_frag; int * tmp_vois = NULL; int * id_mod = NULL; /* tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if ((remove && old_id[i] > 0) || ! remove) { g_debug ("Keeping atom: %d", i+1); g_debug (" atom: %d has: %d neighbor(s):", i+1, tmp_list -> numv); for (j=0; j numv; j++) { g_debug (" n: %d, atom= %d", j+1, tmp_list -> vois[j]+1); } } tmp_list = tmp_list -> next; }*/ int tcf = (this_proj) ? this_proj -> coord -> totcoord[2] : this_object -> coord -> totcoord[2]; if (this_proj) { if (tcf) { show_frag = duplicate_bool (tcf, this_proj -> modelgl -> anim -> last -> img -> show_coord[2]); } else { show_frag = allocbool (1); show_frag[0] = TRUE; tcf = 1; } } int nat = (this_proj) ? this_proj -> natomes : this_object -> atoms; per_frag = allocint (tcf); in_frag = allocint (tcf); id_mod = allocint (nat); tmp_vois = allocint (20); h = -1; tmp_list = new_list; for (i=0; i atoms[0][i].coord[2] : tmp_list -> coord[2]; per_frag[j] ++; if (old_id[i] < 0) { in_frag[j] ++; if (! remove && ! passivate) { h ++; id_mod[tmp_list -> id] = h; } } else { h ++; id_mod[tmp_list -> id] = h; } if (old_id[i] > 0 || ! remove) { if (tmp_list -> numv > 0) { k = 0; // Save the neighbors list for this atom for (l=0; l numv; l++) { m = tmp_list -> vois[l]; if ((remove && old_id[m] > 0) || (! remove && old_id[i] > 0 && old_id[m] > 0) || (! remove && old_id[i] < 0 && old_id[m] < 0)) { tmp_vois[k] = m; k ++; } } g_free (tmp_list -> vois); tmp_list -> vois = NULL; tmp_list -> numv = k; if (k) { // Correct the neighbor list for this atom tmp_list -> vois = allocint (k); for (l=0; l vois[l] = tmp_vois[l]; } } } if ( old_id[i] > 0 || ! remove || passivate) tmp_list = tmp_list -> next; } g_free (tmp_vois); // Taking care of the isolated atom(s) tmp_list = new_list; while (tmp_list) { i = tmp_list -> coord[2]; if (! tmp_list -> numv && per_frag[i] > 1 && old_id[tmp_list -> id] > 0) { // If the atom has no neighbors, and if it is not the last one in the fragment show_frag = g_realloc (show_frag, (tcf+1)*sizeof*show_frag); per_frag = g_realloc (per_frag, (tcf+1)*sizeof*per_frag); in_frag = g_realloc (in_frag, (tcf+1)*sizeof*in_frag); show_frag[tcf] = show_frag[i]; per_frag[tcf] = 1; per_frag[i] --; tmp_list -> coord[2] = tcf; tcf ++; } tmp_list = tmp_list -> next; } frag_to_test = allocbool (tcf); frag_to_remove = allocbool (tcf); for (i=0; i 1 && in_frag[i]) { frag_to_test[i] = TRUE; } // g_debug ("i= %d, frag_to_test[%d]= %d, frag_to_remove[%d]= %d, in_frag[%d]= %d, per_frag[%d]= %d", i, i, frag_to_test[i], i, frag_to_remove[i], i, in_frag[i], i, per_frag[i]); } g_free (in_frag); g_free (per_frag); atom ** atom_list = g_malloc0 (nat*sizeof*atom_list); tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || ! remove) { atom_list[i] = duplicate_atom (tmp_list); } tmp_list = tmp_list -> next; } if (remove && this_proj) { i = 0; // Removing fragment(s) if needed int * new_fid = allocint (tcf); for (j=0; j coord[2] = new_fid[atom_list[j] -> coord[2]]; } g_free (new_fid); tcf -= i; if (i) { show_frag = g_realloc (show_frag, tcf*sizeof*show_frag); } } i = tcf; for (j=0; j 0) { show_frag = g_realloc (show_frag, (tcf+k)*sizeof*show_frag); for (l=tcf; l coord -> totcoord[2] = tcf; } else { this_object -> coord -> totcoord[2] = tcf; } tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || ! remove) { tmp_list -> coord[2] = atom_list[i] -> coord[2]; g_free (atom_list[i]); // g_debug ("End:: id= %d, coord[2]= %d", tmp_list -> id, tmp_list -> coord[2]); } tmp_list = tmp_list -> next; } g_free (atom_list); if (this_proj) { for (i=0; i<2; i++) { tmpbondid[i] = NULL; tmpbond[i] = 0; } for (i=0; i<2; i++) { if (this_proj -> modelgl -> bonds[0][i]) { tmpbondid[i] = allocdint (this_proj -> modelgl -> bonds[0][i], 2); j = 0; for (k=0; k modelgl -> bonds[0][i]; k++) { l = this_proj -> modelgl -> bondid[0][i][k][0]; m = this_proj -> modelgl -> bondid[0][i][k][1]; if (old_id[l] > 0 && old_id[m] > 0) { tmpbondid[i][j][0] = l; tmpbondid[i][j][1] = m; j ++; } else if (! remove && (old_id[l] < 0 && old_id[m] < 0)) { tmpbondid[i][j][0] = l; tmpbondid[i][j][1] = m; j ++; } } tmpbond[i] = j; // g_debug ("i= %d, tmpbond[%d]= %d", i, i, tmpbond[i]); } } distance clo; for (i=0; i<2; i++) { if (this_proj -> modelgl -> bonds[0][i]) { g_free (this_proj -> modelgl -> bondid[0][i]); this_proj -> modelgl -> bondid[0][i] = NULL; if (i) { g_free (this_proj -> modelgl -> clones[0]); this_proj -> modelgl -> clones[0] = NULL; } if (tmpbond[i]) { if (i) this_proj -> modelgl -> clones[0] = g_malloc0 (tmpbond[i]*sizeof*this_proj -> modelgl -> clones[0]); this_proj -> modelgl -> bondid[0][i] = allocdint (tmpbond[i], 2); for (k=0; k modelgl -> bondid[0][i][k][0] = id_mod[tmpbondid[i][k][0]]; this_proj -> modelgl -> bondid[0][i][k][1] = id_mod[tmpbondid[i][k][1]]; //g_debug ("bc:: i= %d, j= %d, a= %d, b= %d", i, k, tmpbondid[i][k][0], tmpbondid[i][k][1]); if (i) { l = this_proj -> modelgl -> bondid[0][i][k][0]; m = this_proj -> modelgl -> bondid[0][i][k][1]; clo = distance_3d (& this_proj -> cell, 0, & this_proj -> atoms[0][l], & this_proj -> atoms[0][m]); this_proj -> modelgl -> clones[0][k].x = clo.x; this_proj -> modelgl -> clones[0][k].y = clo.y; this_proj -> modelgl -> clones[0][k].z = clo.z; } } } this_proj -> modelgl -> bonds[0][i] = tmpbond[i]; this_proj -> modelgl -> allbonds[i] = tmpbond[i]; } if (tmpbondid[i]) { g_free (tmpbondid[i]); tmpbondid[i] = NULL; } } } if (this_proj) { tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if (old_id[i] > 0 || ! remove) { if (tmp_list -> numv > 0) { for (j=0; j numv; j++) { k = tmp_list -> vois[j]; tmp_list -> vois[j] = id_mod[k]; } } } tmp_list = tmp_list -> next; } } if (id_mod) { g_free (id_mod); id_mod = NULL; } /*tmp_list = new_list; while (tmp_list) { i = tmp_list -> id; if ((remove && old_id[i] > 0) || ! remove) { g_debug ("Correct atom: %d", i+1); g_debug (" atom: %d has: %d neighbor(s):", i+1, tmp_list -> numv); for (j=0; j numv; j++) { g_debug (" n: %d, atom= %d", j+1, tmp_list -> vois[j]+1); } } tmp_list = tmp_list -> next; }*/ return show_frag; } /*! \fn void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch) \brief prepaer to remove a list of object(s) from a project, one object after another. \param this_proj the target project \param asearch the target atom search */ void to_remove_this_list_of_objects (project * this_proj, atom_search * asearch) { int i, j; atomic_object * tmp_object; atomic_object * tmp_replace; if (asearch -> action == REPLACE) { if (asearch -> pointer[0].c == 3) { tmp_replace = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; } else { tmp_replace = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; } } int filter = get_asearch_filter (asearch); int object = get_asearch_object (asearch); remove_search = allocate_atom_search (this_proj -> id, REMOVE, REMOVE, this_proj -> natomes); for (i=0; i todo_size; i++) { if (asearch -> todo[i]) { tmp_object = NULL; if (filter > 0 && filter < 3 && ((object && ! asearch -> passivating) || (object == 2 && asearch -> passivating))) { tmp_object = create_object_from_atom_coordination (this_proj, filter-1, i, remove_search); } else if (filter > 2 && ((object && ! asearch -> passivating) || (object == 2 && asearch -> passivating))) { j = (asearch -> mode && filter == 4) ? filter - 1 : filter; tmp_object = create_object_from_frag_mol (this_proj, j-1, i, remove_search); } else { remove_search -> todo[i] = 1; if (asearch -> action == REPLACE) { tmp_object = g_malloc0(sizeof*tmp_object); tmp_object -> baryc = allocdouble (3); tmp_object -> baryc[0] = this_proj -> atoms[0][i].x; tmp_object -> baryc[1] = this_proj -> atoms[0][i].y; tmp_object -> baryc[2] = this_proj -> atoms[0][i].z; } } if (asearch -> action == REPLACE) { for (j=0; j<3; j++) tmp_replace -> baryc[j] += tmp_object -> baryc[j]; tmp_replace = tmp_replace -> next; } if (tmp_object) g_free (tmp_object); } } i = 0; for (j=0; j natomes; j++) { if (remove_search -> todo[j]) i++; } remove_search -> in_selection = i; } /*! \fn void to_passivate_using_the_objects (project * this_proj, atom_search * asearch) \brief prepare passivation (delete of an object, then insert of another one at the same location) \param this_proj the target project \param asearch the target atom search */ void to_passivate_using_the_objects (project * this_proj, atom_search * asearch) { int i, j, k, l, m; atomic_object * object = NULL; atomic_object * tmp_oba, * tmp_obb; int filter = get_asearch_filter (asearch); int num_elem = asearch -> todo_size; int * passivate_todo = duplicate_int (num_elem, asearch -> todo); g_free (asearch -> todo); allocate_todo (asearch, this_proj -> natomes); if (this_proj -> modelgl -> atom_win -> to_be_inserted[3]) { tmp_oba = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; object = duplicate_atomic_object (tmp_oba); tmp_obb = object; while (tmp_oba -> next) { tmp_oba = tmp_oba -> next; tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb = tmp_obb -> next; } g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[3]); this_proj -> modelgl -> atom_win -> to_be_inserted[3] = NULL; } gboolean doit; asearch -> in_selection = 0; tmp_oba = object; for (i=0; i natomes; j++) { doit = FALSE; if (this_proj -> atoms[0][j].pick[0]) { k = this_proj -> atoms[0][j].sp; switch (filter) { case 0: if (k == i) doit = TRUE; break; case 1: if (this_proj -> atoms[0][j].numv == i) doit = TRUE; break; case 2: l = this_proj -> atoms[0][j].coord[1]; for (m=0;m coord -> ntg[1][m]; if (l == i) doit = TRUE; break; default: if (this_proj -> atoms[0][j].coord[filter-1] == i) doit = TRUE; break; } if (doit) { asearch -> todo[j] = 1; if (this_proj -> modelgl -> atom_win -> to_be_inserted[3] == NULL) { this_proj -> modelgl -> atom_win -> to_be_inserted[3] = duplicate_atomic_object (tmp_oba); tmp_obb = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; } else { tmp_obb -> next = duplicate_atomic_object (tmp_oba); tmp_obb -> next -> prev = tmp_obb; tmp_obb = tmp_obb -> next; } tmp_obb -> id = j; asearch -> in_selection ++; } } } if (tmp_oba -> next != NULL) tmp_oba = tmp_oba -> next; } } if (passivate_todo) g_free (passivate_todo); apply_action (this_proj, asearch); } Atomes-GNU-1.1.14/src/opengl/edit/atom_search.c000066400000000000000000000325261457665371200211360ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_search.c * @short Functions to prepare the model edition 'search' tabs and the associated widgets * @author Sébastien Le Roux */ /* * This file: 'atom_search.c' * * Contains: * - The functions to prepare the model edition 'search' tabs and the associated widgets * * List of functions: G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void turn_bonding_on (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data); GtkWidget * create_search_box (int aid, project * this_proj); GtkWidget * create_action_combo (int id, project * this_proj); GtkWidget * action_tab (int aid, project * this_proj); */ #include "atom_edit.h" #ifdef GTK4 /*! \fn G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data) \brief rebuild toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild_on (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data) \brief rebuild toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild_on (GtkToggleButton * but, gpointer data) #endif { tint * dat = (tint *) data; int i; #ifdef GTK4 i = gtk_check_button_get_active (but); get_project_by_id(dat -> a) -> modelgl -> rebuild[0][dat -> c] = i; #else i = gtk_toggle_button_get_active (but); get_project_by_id(dat -> a) -> modelgl -> rebuild[0][dat -> c] = i; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)get_project_by_id(dat -> a) -> modelgl -> rbuild[i], i); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data) \brief update bonding toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_bonding_on (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void turn_bonding_on (GtkToggleButton * but, gpointer data) \brief update bonding toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_bonding_on (GtkToggleButton * but, gpointer data) #endif { atom_search * asearch = (atom_search *) data; int i; #ifdef GTK4 i = gtk_check_button_get_active (but); #else i = gtk_toggle_button_get_active (but); #endif asearch -> recompute_bonding = i; } /*! \fn GtkWidget * create_search_box (int aid, project * this_proj) \brief create the action search widget \param aid the action id \param this_proj the target project */ GtkWidget * create_search_box (int aid, project * this_proj) { gchar * appl[5] = {" Move atom(s)", " Replace atom(s)", " Remove atom(s)", " Insert atom(s)", " Move atom(s)"}; gchar * img[4]= {EDITA, LIST_REM, LIST_ADD, MEDIA_PLAY}; GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox; GtkWidget * widg; int i; if (aid == 4) { i = (this_proj -> modelgl -> search_widg[aid+1] != NULL) ? this_proj -> modelgl -> search_widg[aid+1] -> in_selection : 0; } else if (aid == 8) { i = this_proj -> nspec; } else { i = this_proj -> modelgl -> search_widg[aid+1] -> todo_size; } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, selection_tab (this_proj -> modelgl -> search_widg[aid+1], i), FALSE, FALSE, 0); if (aid == 1 || aid == 5) { int j = (aid == 1) ? 0 : 1; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); this_proj -> modelgl -> atom_win -> edition_but[j] = check_button("Extract/rebuild the object(s) to be moved, ie. cut/clean bonds with nearest neighbor(s)", -1, 25, this_proj -> modelgl -> rebuild[0][j], G_CALLBACK(turn_rebuild_on), & this_proj -> modelgl -> colorp[0][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> edition_but[j], FALSE, FALSE, 50); } if (aid == 1 || aid == 3 || aid == 5) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); widg = check_button("Recompute bonding information using bond cutoff(s)", -1, 25, this_proj -> modelgl -> search_widg[aid+1] -> recompute_bonding, G_CALLBACK(turn_bonding_on), this_proj -> modelgl -> search_widg[aid+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, widg, FALSE, FALSE, 50); } if (aid > 1 && aid < 6) { GtkWidget * lay = create_layout (-1, 100); GtkWidget * but; if (aid == 5) { layout_add_widget (lay, markup_label("Repeat n times, n= ", 100, -1, 0.0, 0.5), 125, 25); layout_add_widget (lay, spin_button (G_CALLBACK(repeat_move), 1, 1, 1000, 1, 0, 100, this_proj), 275, 20); } but = create_button (appl[aid-1], IMG_STOCK, img[aid-2], 100, 35, GTK_RELIEF_NORMAL, G_CALLBACK(take_action), & this_proj -> modelgl -> search_widg[aid+1] -> pointer[0]); layout_add_widget (lay, but, 500, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, lay, FALSE, FALSE, 0); } return vbox; } /*! \fn G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data) \brief change selection status \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atoms_for_action (GtkComboBox * box, gpointer data) { tint * id = (tint *)data; project * this_proj = get_project_by_id (id -> a); int i, j, k; i = gtk_combo_box_get_active (box); this_proj -> modelgl -> search_widg[id -> c] -> status = i; if (id -> c == 2) { for (j=0; j<2; j++) { gtk_combo_box_set_active (GTK_COMBO_BOX(this_proj -> modelgl -> atom_win -> axis_combo[j]), this_proj -> modelgl -> atom_win -> axis[j]); for (k=0; k<6; k++) { gtk_range_set_value (GTK_RANGE(this_proj -> modelgl -> atom_win -> edit_scale[k]), this_proj -> modelgl -> atom_win -> new_param[i][j][k]); update_range_and_entry (this_proj, i, this_proj -> modelgl -> atom_win -> axis[j], k); } } } clean_picked_and_labelled (this_proj -> modelgl -> search_widg[id -> c], TRUE); update_search_tree (this_proj -> modelgl -> search_widg[id -> c]); } /*! \fn GtkWidget * create_action_combo (int id, project * this_proj) \brief create action combo box \param id the action id \param this_proj the target project */ GtkWidget * create_action_combo (int id, project * this_proj) { GtkWidget * combo; if (id == 3 || id == 5) { GtkTreeModel * model = replace_combo_tree (TRUE, this_proj -> id); combo = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer, "text", 0, NULL); g_signal_connect (G_OBJECT(combo), "changed", G_CALLBACK(set_atoms_to_insert), & this_proj -> modelgl -> search_widg[id+2] -> pointer[0]); gtk_combo_box_set_active (GTK_COMBO_BOX(combo), 0); GList * cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(combo)); if(cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), cell_list -> data, "markup", 0, NULL); } set_atoms_to_insert (GTK_COMBO_BOX(combo), & this_proj -> modelgl -> search_widg[id+2] -> pointer[0]); } else { combo = create_combo (); int i; for (i=0; i<3; i++) combo_text_append (combo, action_atoms[i]); gtk_combo_box_set_active (GTK_COMBO_BOX(combo), this_proj -> modelgl -> search_widg[id+2] -> status); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_atoms_for_action), & this_proj -> modelgl -> search_widg[id+2] -> pointer[0]); } return combo; } /*! \fn G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data) \brief expanding motion callback \param exp the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void expanding_atoms (GtkWidget * exp, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); int i; for (i=0; i<3; i++) { if (i != dat -> c - 1) { if (gtk_expander_get_expanded (GTK_EXPANDER (this_proj -> modelgl -> atom_win -> at_expand[i]))) { gtk_expander_set_expanded (GTK_EXPANDER (this_proj -> modelgl -> atom_win -> at_expand[i]), FALSE); } } } } /*! \fn GtkWidget * action_tab (int aid, project * this_proj) \brief create model edtion action tab \param aid the action id \param this_proj the target project */ GtkWidget * action_tab (int aid, project * this_proj) { gchar * action[7] = {"moved", "replaced", "removed", "inserted", "moved randomly", " ", "passivated"}; GtkWidget * vbox = create_vbox (BSEP); atom_search * asearch = this_proj -> modelgl -> search_widg[aid+2]; GtkWidget * hbox; if (aid < 5) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); gchar * str = g_strdup_printf ("Select the object(s) to be %s in: ", action[aid]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 200, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); this_proj -> modelgl -> atom_win -> atom_combo[aid] = create_action_combo (aid, this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, this_proj -> modelgl -> atom_win -> atom_combo[aid], FALSE, FALSE, 20); } GtkWidget * sbox = create_vbox (BSEP); GtkWidget * tbox = create_search_box (aid+1, this_proj); if (! aid) { gchar * exp_name[3] = {"Atom selection:", "Translate:", "Rotate:"}; int i; for (i=0; i<3; i++) { this_proj -> modelgl -> atom_win -> at_expand[i] = create_expander (exp_name[i], NULL); add_box_child_start (GTK_ORIENTATION_VERTICAL, sbox, this_proj -> modelgl -> atom_win -> at_expand[i], TRUE, TRUE, 10); if (! i) { add_container_child (CONTAINER_EXP, this_proj -> modelgl -> atom_win -> at_expand[i], tbox); gtk_expander_set_expanded (GTK_EXPANDER(this_proj -> modelgl -> atom_win -> at_expand[i]), TRUE); } else { add_container_child (CONTAINER_EXP, this_proj -> modelgl -> atom_win -> at_expand[i], add_motion_interaction (asearch, i-1, this_proj)); gtk_expander_set_expanded (GTK_EXPANDER(this_proj -> modelgl -> atom_win -> at_expand[i]), FALSE); if (i == 2) widget_set_sensitive (this_proj -> modelgl -> atom_win -> at_expand[2], asearch -> object); } g_signal_connect (G_OBJECT(this_proj -> modelgl -> atom_win -> at_expand[i]), "activate", G_CALLBACK(expanding_atoms), & asearch -> pointer[0]); } } else { if (aid < 3) { asearch -> mode_box = create_combo (); combo_text_append (asearch -> mode_box, "Normally"); combo_text_append (asearch -> mode_box, "Randomly"); gtk_combo_box_set_active (GTK_COMBO_BOX(asearch -> mode_box), 0); g_signal_connect (G_OBJECT (asearch -> mode_box), "changed", G_CALLBACK(set_search_mode), asearch); GtkWidget * box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, sbox, box, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(".", 5, -1, 0.0, 0.5), FALSE, FALSE, 10); gchar * type_of[2]={"Replace: ", "Remove: "}; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(type_of[aid-1], 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, asearch -> mode_box, FALSE, FALSE, 5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, sbox, tbox, FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, sbox, FALSE, FALSE, 5); if (! aid || aid == 4) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button ("Reset transformation(s)", -1, 35, FALSE, G_CALLBACK(set_reset_transformation), & asearch -> pointer[0]), FALSE, FALSE, 10); } show_the_widgets (vbox); if (aid != 3) widget_set_sensitive (vbox, this_proj -> nspec); return vbox; } Atomes-GNU-1.1.14/src/opengl/edit/atom_species.c000066400000000000000000000112451457665371200213170ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file atom_species.c * @short Functions to look for new chemical species and modify the chemical information accordingly * @author Sébastien Le Roux */ /* * This file: 'atom_species.c' * * Contains: * - The functions to look for new chemical species and modify the chemical information accordingly * * List of functions: int find_spec_id (int s, int z, double * list_z); int search_for_new_spec (atom_edition * edit, atomic_object * object); chemical_data * duplicate_chemical_data (int spec, chemical_data * chem); */ #include "atom_edit.h" /*! \fn chemical_data * duplicate_chemical_data (int spec, chemical_data * chem) \brief duplicate chemical data information \param spec the number of chemical species \param chem the chemical data to duplicate */ chemical_data * duplicate_chemical_data (int spec, chemical_data * chem) { chemical_data * newchem = g_malloc0 (sizeof*chem); newchem -> label = g_malloc (spec*sizeof*newchem -> label); newchem -> element = g_malloc (spec*sizeof*newchem -> element); int i, j; for (i=0; i label[i] = g_strdup_printf ("%s", chem -> label[i]); newchem -> element[i] = g_strdup_printf ("%s", chem -> element[i]); } newchem -> nsps = duplicate_int (spec, chem -> nsps); newchem -> formula = duplicate_int (spec, chem -> formula); newchem -> cutoffs = allocddouble (spec, spec); newchem -> grtotcutoff = chem -> grtotcutoff; newchem -> chem_prop = allocddouble (CHEM_PARAMS, spec); for (i=0; i cutoffs[i][j] = chem -> cutoffs[i][j]; for (j=0; j chem_prop[j][i] = chem -> chem_prop[j][i]; } return newchem; } /*! \fn int find_spec_id (int s, int z, double * list_z) \brief find species id based on Z \param s the number of chemical species \param z the target Z \param list_z the list of Z values */ int find_spec_id (int s, int z, double * list_z) { int i; if (list_z) { for (i=0; i coord; int i, j, k, l, m; i = 0; for (j=0; j species; j++) { if (object -> old_z[j] > 0) { k = find_spec_id (coord -> species, object -> old_z[j], edit -> new_z); if (k < 0) { i ++; edit -> new_z = g_realloc (edit -> new_z, (coord -> species+i)*sizeof*edit -> new_z); edit -> new_z[coord -> species+i-1] = (double)object -> old_z[j]; } } } if (i) { coord_info * tmp = duplicate_coord_info (edit -> coord); for (j=0; j<2; j++) { if (coord -> species) { g_free (coord -> ntg[j]); g_free (coord -> geolist[j]); } coord -> ntg[j] = allocint (coord -> species + i); coord -> geolist[j] = g_malloc0 ((coord -> species + i)*sizeof* coord -> geolist[j]); if (j) { if (coord -> species) g_free (coord -> partial_geo); coord -> partial_geo = g_malloc0 ((coord -> species + i)*sizeof*coord -> partial_geo); } for (k=0; k species; k++) { coord -> ntg[j][k] = tmp -> ntg[j][k]; coord -> geolist[j][k] = duplicate_int (tmp -> ntg[j][k], tmp -> geolist[j][k]); if (j) { coord -> partial_geo[k] = allocdint (coord -> ntg[j][k], coord -> species + i); for (l=0; l ntg[j][k]; l++) { for (m=0; m species; m++) { coord -> partial_geo[k][l][m] = tmp -> partial_geo[k][l][m]; } } } } } coord -> species += i; g_free (tmp); } return i; } Atomes-GNU-1.1.14/src/opengl/edit/cbuild_action.c000066400000000000000000001473351457665371200214550ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cbuild_action.c * @short Functions to build a crystal using space group, crystallographic position(s) and object(s) to insert * @author Sébastien Le Roux */ /* * This file: 'cbuild_action.c' * * Contains: * - The functions to build a crystal using space group, crystallographic position(s) and object(s) to insert * * List of functions: int test_lattice (builder_edition * cbuilder, cell_info * cif_cell); int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos); int build_crystal (gboolean visible, project * this_proj, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); double get_val_from_setting (gchar * pos, gchar * sval); double get_value_from_pos (gchar * pos); double get_val_from_wyckoff (gchar * pos, gchar * wval); gboolean same_coords (float a, float b); gboolean are_equal_vectors (vec3_t u, vec3_t v); gboolean pos_not_taken (int pos, int dim, int * tab); gboolean adjust_object_occupancy (crystal_data * cryst, int occupying, int tot_cell); void get_origin (space_group * spg); void compute_lattice_properties (cell_info * cell); void clean_this_proj (project * this_proj, gboolean newp); space_group * duplicate_space_group (space_group * spg); crystal_data * allocate_crystal_data (int objects, int species); crystal_data * free_crystal_data (crystal_data * cryst); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "glview.h" #include "bind.h" #include "project.h" #include "workspace.h" #include "atom_edit.h" #include "cbuild_edit.h" #include "readers.h" #include extern int get_crystal_id (int spg); extern atomic_object * cif_object; gchar * tmp_pos = NULL; /*! \fn double get_val_from_setting (gchar * pos, gchar * sval) \brief get value from space group setting \param pos the position "a", "b" or "c" \param sval the space group setting */ double get_val_from_setting (gchar * pos, gchar * sval) { if (! strstr(sval, pos)) { return 0.0; } else { if (g_strcmp0(sval, pos)==0) return 1.0; gchar * sym[8]={"-1/3", "+1/3", "1/3", "-2/3", "+2/3", "2/3", "-", "+"}; double vals[8]={-1.0/3.0, 1.0/3.0, 1.0/3.0, -2.0/3.0, 2.0/3.0, 2.0/3.0, -1.0, 1.0}; gchar * ksym = NULL; int i; for (i=0; i<8; i++) { ksym = g_strdup_printf ("%s%s", sym[i], pos); if (strstr(sval, ksym)) { tmp_pos = g_strdup_printf ("%s", replace_markup (tmp_pos, ksym, NULL)); g_free (ksym); ksym = NULL; return vals[i]; } g_free (ksym); ksym = NULL; } tmp_pos = g_strdup_printf ("%s", replace_markup (tmp_pos, pos, NULL)); return 1.0; } } /*! \fn double get_value_from_pos (gchar * pos) \brief get position double value from string description \param pos the string description */ double get_value_from_pos (gchar * pos) { if (strstr(pos, "/")) { char * p = NULL; double u, v; p = strtok(pos, "/"); u = atof(p); p = strtok(NULL, "/"); v = atof(p); return u/v; } else { return atof(pos); } } /*! \fn void get_origin (space_group * spg) \brief get space group origin matrices \param spg the target space group */ void get_origin (space_group * spg) { char * vinit[3]={"a", "b", "c"}; double spinit[3][4]; int i, j, k; i = spg -> sid; for (j=0; j<3; j++) { tmp_pos = g_strdup_printf ("%s", spg -> settings[i].pos[j]); for (k=0; k<3; k++) { spinit[j][k] = get_val_from_setting (vinit[k], spg -> settings[i].pos[j]); } if (tmp_pos) { spinit[j][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spinit[j][3] = 0.0; } } spg -> coord_origin = mat4 (spinit[0][0], spinit[1][0], spinit[2][0], 0.0, spinit[0][1], spinit[1][1], spinit[2][1], 0.0, spinit[0][2], spinit[1][2], spinit[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); spg -> wyck_origin = m4_invert_affine (spg -> coord_origin); spg -> coord_origin.m30 = spg -> wyck_origin.m30 = spinit[0][3]; spg -> coord_origin.m31 = spg -> wyck_origin.m31 = spinit[1][3]; spg -> coord_origin.m32 = spg -> wyck_origin.m32 = spinit[2][3]; #ifdef DEBUG g_debug ("Coord origin:"); m4_print (spg -> coord_origin); g_debug ("Wyck origin:"); m4_print (spg -> wyck_origin); #endif } /*! \fn void compute_lattice_properties (cell_info * cell) \brief compute lattice parameters following cell description \param cell the target cell description */ void compute_lattice_properties (cell_info * cell) { int i; box_info * box = & cell -> box[0]; double ltemp; double angle[3]; double sangle[3], cangle[3]; if (! cell -> ltype) { for (i=0; i<3; i++) { if (box -> param[1][i] == 90.0) { angle[i] = pi/2.0; sangle[i] = 1.0; cangle[i] = 0.0; } else { angle[i] = box -> param[1][i]*pi/180.0; sangle[i] = sin(angle[i]); cangle[i] = cos(angle[i]); } } box -> vect[0][0] = box -> param[0][0]; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> param[0][1] * cangle[2]; box -> vect[1][1] = box -> param[0][1] * sangle[2]; box -> vect[1][2] = 0.0; box -> vect[2][0] = box -> param[0][2] * cangle[1]; ltemp = (cangle[0] - cangle[1]*cangle[2]) / sangle[2]; box -> vect[2][1] = box -> param[0][2] * ltemp; box -> vect[2][2] = box -> param[0][2] * sqrt(sangle[1]*sangle[1] - ltemp*ltemp); } else { for (i=0; i<3; i++) box -> param[0][i] = v3_length(vec3(box -> vect[i][0], box -> vect[i][1], box -> vect[i][2])); box -> param[1][0] = (box -> vect[2][0]*box -> vect[1][0] + box -> vect[2][1]*box -> vect[1][1] + box -> vect[2][2]*box -> vect[1][2]); box -> param[1][0] /= (box -> param[0][1] * box -> param[0][2]); box -> param[1][1] = (box -> vect[0][0]*box -> vect[2][0] + box -> vect[0][1]*box -> vect[2][1] + box -> vect[0][2]*box -> vect[2][2]); box -> param[1][1] /= (box -> param[0][0] * box -> param[0][2]); box -> param[1][2] = (box -> vect[0][0]*box -> vect[1][0] + box -> vect[0][1]*box -> vect[1][1] + box -> vect[0][2]*box -> vect[1][2]); box -> param[1][2] /= (box -> param[0][0] * box -> param[0][1]); for (i=0; i<3; i++) { if (box -> param[1][i] == 0.0) { box -> param[1][i] = 90.0; sangle[i] = 1.0; cangle[i] = 0.0; } else { angle[i] = acos(box -> param[1][i]); sangle[i] = sin(angle[i]); cangle[i] = cos(angle[i]); box -> param[1][i] = angle[i]*180.0/pi; } } } #ifdef DEBUG g_debug (" a= %f, b= %f, c= %f", box -> param[0][0], box -> param[0][1], box -> param[0][2]); g_debug (" alpha= %f, beta= %f, gamma= %f", box -> param[1][0], box -> param[1][1], box -> param[1][2]); g_debug (" a.x= %f, a.y= %f, a.z= %f", box -> vect[0][0], box -> vect[0][1], box -> vect[0][2]); g_debug (" b.x= %f, b.y= %f, b.z= %f", box -> vect[1][0], box -> vect[1][1], box -> vect[1][2]); g_debug (" c.x= %f, c.y= %f, c.z= %f", box -> vect[2][0], box -> vect[2][1], box -> vect[2][2]); #endif box -> vol = (box -> vect[0][1]*box -> vect[1][2] - box -> vect[0][2]*box -> vect[1][1])*box -> vect[2][0]; box -> vol += (box -> vect[0][2]*box -> vect[1][0] - box -> vect[0][0]*box -> vect[1][2])*box -> vect[2][1]; box -> vol += (box -> vect[0][0]*box -> vect[1][1] - box -> vect[0][1]*box -> vect[1][0])*box -> vect[2][2]; box -> vol = fabs(box -> vol); cell -> volume = box -> vol; #ifdef DEBUG g_debug ("Lattice volume= %f", box -> vol); #endif double z = sqrt(fabs(1 - cangle[0]*cangle[0]-cangle[1]*cangle[1]-cangle[2]*cangle[2] + 2*cangle[0]*cangle[1]*cangle[2])); float ** ftc; ftc = allocdfloat (4,4); ftc[0][0]=box -> param[0][0]; ftc[0][1]=box -> param[0][1]*cangle[2]; ftc[0][2]=box -> param[0][2]*cangle[1]; ftc[1][1]=box -> param[0][1]*sangle[2]; ftc[1][2]=box -> param[0][2]*((cangle[0]-cangle[1]*cangle[2])/sangle[2]); ftc[2][2]=box -> param[0][2]*z/sangle[2]; box -> frac_to_cart = mat4(ftc[0][0], ftc[0][1], ftc[0][2], ftc[0][3], ftc[1][0], ftc[1][1], ftc[1][2], ftc[1][3], ftc[2][0], ftc[2][1], ftc[2][2], ftc[2][3], ftc[3][0], ftc[3][1], ftc[3][2], ftc[3][3]); ftc[0][0]=1.0/box -> frac_to_cart.m00; ftc[0][1]=-cangle[2]/(sangle[2]*box -> param[0][0]); ftc[0][2]=box -> param[0][1]*box -> param[0][2]/box -> vol; ftc[0][2]=ftc[0][2]*(cangle[0]*cangle[2] - cangle[1])/sangle[0]; ftc[1][1]=1.0/box -> frac_to_cart.m11; ftc[1][2]=(box -> param[0][0]*box -> param[0][2])/box -> vol; ftc[1][2]=ftc[1][2]*(cangle[1]*cangle[2] - cangle[0])/sangle[2]; ftc[2][2]=1.0/box -> frac_to_cart.m22; box -> cart_to_frac = mat4 (ftc[0][0], ftc[0][1], ftc[0][2], ftc[0][3], ftc[1][0], ftc[1][1], ftc[1][2], ftc[1][3], ftc[2][0], ftc[2][1], ftc[2][2], ftc[2][3], ftc[3][0], ftc[3][1], ftc[3][2], ftc[3][3]); g_free (ftc); #ifdef DEBUG m4_print (box -> frac_to_cart); m4_print (box -> cart_to_frac); #endif } /*! \fn int test_lattice (builder_edition * cbuilder, cell_info * cif_cell) \brief test lattice parameters \param cbuilder the builder edition with the lattice parameters \param cif_cell the cell information when testing CIF file */ int test_lattice (builder_edition * cbuilder, cell_info * cif_cell) { int i, j; cell_info * cell = (cbuilder) ? & cbuilder -> cell : cif_cell; box_info * box = & cell -> box[0]; i = cell -> sp_group -> id; j = get_crystal_id (i); if (cbuilder) { if (! cell -> ltype) { // Adjust a,b,c,alpha,beta,gamma and compute vectors if (j == 3 || j == 4 || j == 6) { box -> param[1][1] = box -> param[1][2] = box -> param[1][0]; } if (j == 3 || (j == 4 && cell -> sp_group -> name[0] == 'P') || j == 5) { box -> param[0][1] = box -> param[0][0]; } else if ((j == 4 && cell -> sp_group -> name[0] == 'R') || j == 6) { box -> param[0][1] = box -> param[0][2] = box -> param[0][0]; } } if (! test_vol(box -> param, box -> vect)) { show_warning ("Please describe properly the lattice parameters", cbuilder -> win); return 0; } compute_lattice_properties (cell); } // Strictly different or possibly different ? /*if (j < 3) { if (box -> param[0][0] == box -> param[0][1] || box -> param[0][0] == box -> param[0][2] || box -> param[0][1] == box -> param[0][2]) { // Box error: a, b, c not all different return 0; } }*/ if (j == 3 || j == 4 || j == 5) { if (box -> param[0][0] != box -> param[0][1]) { // Box error: a and b must be equal return 0; } } if (j == 2 || j == 3 || j == 6) { if (box -> param[1][0] != 90.0 || box -> param[1][1] != 90.0 || box -> param[1][2] != 90.0) { // Angle error: alpha, beta and gamma must be = 90 return 0; } } switch (j) { // Strictly different or possibly different ? /* case 0: if (! (box -> param[1][0] != box -> param[1][1] && box -> param[1][0] != box -> param[1][2] && box -> param[1][1] != box -> param[1][2])) { // Angle error: alpha, beta, gamma not all different return 0; } break; */ case 1: if (box -> param[1][0] != 90.0) { // Angle error: alpha must be = 90 return 0; } else if (box -> param[1][1] != 90.0 && box -> param[1][2] != 90.0) { // Angle error: beta or gamma must be = 90 return 0; } break; case 4: if (cell -> sp_group -> name[0] != 'R') { if (box -> param[1][0] != 90.0 || box -> param[1][1] != 90.0 || box -> param[1][2] != 120.0) { // Angle error: alpha and beta must be equal= 90, gamma must be = 120 return 0; } } else { if (box -> param[1][0] != box -> param[1][1] || box -> param[1][0] != box -> param[1][2] || box -> param[1][1] != box -> param[1][2]) { // Angle error: alpha, beta, gamma must all be equal return 0; } else if (box -> param[0][0] != box -> param[0][2]) { // Box error: a, b and c must all be equal return 0; } } break; case 5: if (box -> param[1][0] != 90.0 || box -> param[1][1] != 90.0 || box -> param[1][2] != 120.0) { // Angle error: alpha and beta must be = 90, gamma must be = 120 return 0; } break; case 6: if (box -> param[0][0] != box -> param[0][1] || box -> param[0][0] != box -> param[0][2] || box -> param[0][1] != box -> param[0][2]) { // Box error: a, b, c not all equal return 0; } break; } return 1; } /*! \fn double get_val_from_wyckoff (gchar * pos, gchar * wval) \brief get point value from wyckoff position \param pos "x", "y" or "z" \param wval wyckoff position vector */ double get_val_from_wyckoff (gchar * pos, gchar * wval) { if (! strstr(wval, pos)) { return 0.0; } else { if (g_strcmp0(wval, pos)==0) return 1.0; gchar * sym[4]={"-2", "2", "-", "+"}; double sval[4]={-2.0, 2.0, -1.0, 1.0}; gchar * ksym = NULL; int i; for (i=0; i<4; i++) { ksym = g_strdup_printf ("%s%s", sym[i], pos); if (strstr(wval, ksym)) { tmp_pos = g_strdup_printf ("%s", replace_markup (tmp_pos, ksym, NULL)); g_free (ksym); ksym = NULL; return sval[i]; } g_free (ksym); ksym = NULL; } tmp_pos = g_strdup_printf ("%s", replace_markup (tmp_pos, pos, NULL)); return 1.0; } } /*! \fn void clean_this_proj (project * this_proj, gboolean newp) \brief clean project and/or associated cell parameters \param this_proj the target project \param newp is this a new project ? */ void clean_this_proj (project * this_proj, gboolean newp) { int i, j; if (newp) { close_project(this_proj); } else { for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) this_proj -> cell.box[0].param[i][j] = 0.0; this_proj -> cell.box[0].vect[i][j] = 0.0; } } this_proj -> cell.ltype = 0; this_proj -> cell.pbc = FALSE; } } /*! \fn gboolean same_coords (float a, float b) \brief test if values are similar, allowing a 0.0001 difference \param a 1st value \param b 2nd value */ gboolean same_coords (float a, float b) { int i; for (i=0; i<10; i++) if (fabs(fabs(a-b) - i) < 0.0001) return TRUE; return FALSE; } /*! \fn gboolean are_equal_vectors (vec3_t u, vec3_t v) \brief comparing atomic coordinates vectors \param u 1st vector \param v 2nd vector */ gboolean are_equal_vectors (vec3_t u, vec3_t v) { if (same_coords(u.x, v.x) && same_coords(u.y, v.y) && same_coords(u.z, v.z)) { return TRUE; } return FALSE; } /*! \fn int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos) \brief was this position already saved ? \param all_pos the list of saved atomic coordinates \param num_pos the number of saved atomic coordinates \param pos the vector to test */ int pos_not_saved (vec3_t * all_pos, int num_pos, vec3_t pos) { int i; for (i=0; i id = spg -> id; new_spg -> hms = g_strdup_printf ("%s", spg -> hms); new_spg -> bravais = g_strdup_printf ("%s", spg -> bravais); if (spg -> settings[spg -> sid].origin) { new_spg -> setting = g_strdup_printf ("%s:%d", spg -> settings[spg -> sid].name, spg -> settings[spg -> sid].origin); } else { new_spg -> setting = g_strdup_printf ("%s", spg -> settings[spg -> sid].name); } return new_spg; } /*! \fn crystal_data * allocate_crystal_data (int objects, int species) \brief allocate crystal data pointer \param objects the number of object(s) \param species the number of chemical species */ crystal_data * allocate_crystal_data (int objects, int species) { crystal_data * cryst = g_malloc0(sizeof*cryst); cryst -> objects = objects; cryst -> spec = species; cryst -> at_by_object = allocint(cryst -> objects); cryst -> pos_by_object = allocint(cryst -> objects); cryst -> occupancy = allocdouble(cryst -> objects); cryst -> sites = g_malloc0(cryst -> objects*sizeof*cryst -> sites); cryst -> insert = g_malloc0(cryst -> objects*sizeof*cryst -> insert); cryst -> position = g_malloc0(cryst -> objects*sizeof*cryst -> position); cryst -> coord = g_malloc0(cryst -> objects*sizeof*cryst -> coord); cryst -> lot = g_malloc0(cryst -> objects*sizeof*cryst -> lot); cryst -> at_type = g_malloc0(cryst -> objects*sizeof*cryst -> at_type); cryst -> z = allocdouble (species); cryst -> nsps = allocint (species); cryst -> holes = allocbool (cryst -> objects); return cryst; } /*! \fn crystal_data * free_crystal_data (crystal_data * cryst) \brief free crystal data pointer \param cryst the data pointer to free */ crystal_data * free_crystal_data (crystal_data * cryst) { if (cryst -> at_by_object) g_free (cryst -> at_by_object); if (cryst -> pos_by_object) g_free (cryst -> pos_by_object); if (cryst -> occupancy) g_free (cryst -> occupancy); if (cryst -> sites) g_free (cryst -> sites); if (cryst -> insert) g_free (cryst -> insert); if (cryst -> position) g_free (cryst -> position); if (cryst -> coord) g_free (cryst -> coord); if (cryst -> lot) g_free (cryst -> lot); if (cryst -> at_type) g_free (cryst -> at_type); if (cryst -> z) g_free (cryst -> z); if (cryst -> nsps) g_free (cryst -> nsps); if (cryst -> holes) g_free (cryst -> holes); g_free (cryst); return NULL; } /*! \fn gboolean pos_not_taken (int pos, int dim, int * tab) \brief is this position already taken ? \param pos position id \param dim number of position(s) \param tab the list of position(s) */ gboolean pos_not_taken (int pos, int dim, int * tab) { int i; for (i=0; i 2) ? TRUE : FALSE; // position ordering must be used to ensure proper overlapping with holes pos_order = allocint (cryst -> objects); i = j = 0; for (k=0; k objects; k++) { if (cryst -> holes[k]) { pos_order[i] = k; j = max (j, cryst -> pos_by_object[i]); i ++; } } if (i) { with_holes = TRUE; holes_pos = allocdbool (cryst -> objects, j); } for (j=0; j objects; j++) { if (! cryst -> holes[j]) { pos_order[i] = j; i ++; } } for (h=0; h objects; h++) { i = pos_order[h]; #ifdef DEBUG g_debug ("i= %d, occ[%d]= %f, pbo[%d]= %d", i+1, i+1, cryst -> occupancy[i], i+1, cryst -> pos_by_object[i]); #endif if (cryst -> sites[i][0] > 0 && cryst -> occupancy[i]*cryst -> pos_by_object[i] < 1.0 && ! cryst -> holes[i]) low_occ = TRUE; if (cryst -> sites[i][0] > 0 && cryst -> occupancy[i] < 1.0 && cryst -> pos_by_object[i] > 1) { v = 0.0; pos_bs = cryst -> pos_by_object[i]; site_bs = (cryst -> holes[i]) ? 1 : cryst -> sites[i][0]; num_bs = cryst -> sites[i][0]; taken_pos = allocbool (pos_bs); #ifdef DEBUG g_debug ("i= %d, site[%d][0]= %d, pos_bs= %d, num_bs= %d", i+1, i+1, cryst -> sites[i][0], pos_bs, num_bs); #endif for (j=0; j sites[i][0]; j++) { k = cryst -> sites[i][j+1]; v += cryst -> occupancy[k]; } l = 0; if (with_holes) { for (j=0; j sites[i][j+1]; #ifdef DEBUG g_debug ("\tj= %d, k= %d, sites[%d][0]= %d, occ[%d]= %f, pos_by_objects[%d]= %d", j+1, k+1, k+1, cryst -> sites[k][0], k+1, cryst -> occupancy[k], k+1, cryst -> pos_by_object[k]); #endif if (cryst -> sites[k][0] > -1) { num_to_save = round (pos_bs*cryst -> occupancy[k]); l += num_to_save; #ifdef DEBUG g_debug ("\tnum_to_save= %d, l= %d", num_to_save, l); #endif if (j == num_bs-1) { if ((v == 1.0 && l != pos_bs) || l > pos_bs) num_to_save += (pos_bs-l); } site_pos = allocint (num_to_save); m = 0; while (m < num_to_save) { pick_it = TRUE; if (occupying < 3) { CPU_time = clock(); n = (CPU_time - (k+17)*pos_bs) + (3*cryst -> at_by_object[i]); prob = random3_(& n); p = round (prob * (pos_bs-1)); if (with_holes) { pick_it = (taken_pos[p] || holes_pos[i][p]) ? FALSE : TRUE; } else { pick_it = ! taken_pos[p]; } } else if (occupying == 3) { p = 0; if (with_holes) { while (taken_pos[p] || holes_pos[i][p]) p ++; } else { while (taken_pos[p]) p ++; } } else { #ifdef DEBUG g_debug ("\t\tp= %d, m= %d, sites[i][0]= %d", p, m, cryst -> sites[k][0]); #endif p = j + m*cryst -> sites[k][0]; if (p > cryst -> pos_by_object[k]-1) { p -= (cryst -> pos_by_object[k]-1); } #ifdef DEBUG g_debug ("\t\tp= %d", p); #endif for (n=0; n pos_by_object[k]) n = 0; pick_it = FALSE; while (! pick_it) { pick_it = TRUE; for (o=0; o coord[k][m] = cryst -> coord[k][n]; if (occ_sym && tot_cell > 1) { for (o=1; o objects/tot_cell); cryst -> coord[p][m] = cryst -> coord[p][n]; } } } cryst -> pos_by_object[k] = num_to_save; cryst -> sites[k][0] = -1; if (occ_sym && tot_cell > 1) { for (o=1; o objects/tot_cell); cryst -> pos_by_object[p] = num_to_save; cryst -> sites[p][0] = -1; } } if (cryst -> holes[i]) { for (o=0; o sites[i][o+1]; for (q=0; q 1) { for (s=1; s objects/tot_cell); holes_pos[t][r] = TRUE; } } } } } g_free (site_pos); } } g_free (taken_pos); } } if (holes_pos) g_free (holes_pos); return low_occ; } /*! \fn int build_crystal (gboolean visible, project * this_proj, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg) \brief build crystal \param visible is the crystal builder window visible ? \param this_proj the target project \param to_wrap wrap or not atomic coordinates in the unit cell \param show_clones show / hide clone(s) \param cell the cell info that contains the crystal description \param widg the GtkWidget sending the signal */ int build_crystal (gboolean visible, project * this_proj, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg) { int h, i, j, k, l, m, n, o, p, q; int build_res = 1; space_group * sp_group = cell -> sp_group; box_info * box = & cell -> box[0]; gchar * str; mat4_t ** wyckpos = g_malloc0 (sp_group -> numw*sizeof*wyckpos); double spgpos[3][4]; for (i=0; i<1; i++)//sp_group -> numw; i++) { wyckpos[i] = g_malloc0 (sp_group -> wyckoff[i].multi*sizeof*wyckpos[i]); for (j=0; j wyckoff[i].multi; j++) { for (k=0; k<3; k++) { tmp_pos = g_strdup_printf ("%s", sp_group -> wyckoff[i].pos[j][k]); for (l=0; l<3; l++) { spgpos[k][l] = get_val_from_wyckoff (vect_comp[l], sp_group -> wyckoff[i].pos[j][k]); } if (tmp_pos) { spgpos[k][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spgpos[k][3] = 0.0; } } wyckpos[i][j] = mat4 (spgpos[0][0], spgpos[0][1], spgpos[0][2], spgpos[0][3], spgpos[1][0], spgpos[1][1], spgpos[1][2], spgpos[1][3], spgpos[2][0], spgpos[2][1], spgpos[2][2], spgpos[2][3], 0.0, 0.0, 0.0, 1.0); wyckpos[i][j] = m43_mul(sp_group -> wyck_origin, wyckpos[i][j]); #ifdef DEBUG // g_debug ("w_id= %d, w_mul= %d", i+1, j+1); // m4_print (wyckpos[i][j]); #endif } } double copos[3]; int npoints; vec3_t * points; h = sp_group -> sid; if (sp_group -> settings[h].nump) { points = g_malloc0(sp_group -> settings[h].nump*sizeof*points); for (i=0; i settings[h].nump; i++) { for (j=0; j<3; j++) { tmp_pos = g_strdup_printf ("%s", sp_group -> settings[h].points[i][j]); copos[j] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } points[i] = vec3(copos[0], copos[1], copos[2]); //m4_mul_coord (sp_group -> coord_origin, vec3(copos[0], copos[1], copos[2])); #ifdef DEBUG // g_debug ("point=%d, p.x= %f, p.y= %f, p.z= %f", i+1, points[i].x, points[i].y ,points[i].z); #endif } npoints = sp_group -> settings[h].nump; } else { points = g_malloc0(1*sizeof*points); points[0] = vec3(0.0, 0.0, 0.0); npoints = 1; } vec3_t pos; atomic_object * object = NULL; gboolean done; crystal_data * cdata = NULL; int occupying; double amin = box -> param[0][0]; for (i=1; i<3; i++) amin = min(amin, box -> param[0][i]);; if (! visible) { tint point; point.a = this_proj -> id; point.b = point.c = 0; this_proj -> modelgl = g_malloc0(sizeof*this_proj -> modelgl); prepare_atom_edition (& point, FALSE); this_proj -> modelgl -> search_widg[7] = allocate_atom_search (this_proj -> id, INSERT, 7, this_reader -> natomes); gboolean do_obj; for (i=0; i natomes; i++) { do_obj = FALSE; for (j=0; j atom_unlabelled; j++) { if (this_reader -> u_atom_list[j] == i) { do_obj = TRUE; break; } } if (do_obj) { if (! object) { this_proj -> modelgl -> atom_win -> to_be_inserted[2] = duplicate_atomic_object (get_atomic_object_by_origin (cif_object, this_reader -> object_list[j], 0)); object = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; } else { object -> next = duplicate_atomic_object (get_atomic_object_by_origin (cif_object, this_reader -> object_list[j], 0)); } } else { j = this_reader -> lot[i]; to_insert_in_project ((int)this_reader -> z[j], -1, this_proj, this_proj -> modelgl -> search_widg[7], FALSE); } this_proj -> modelgl -> search_widg[7] -> todo[i] = 1; if (! object) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; } else { object = object -> next; } object -> occ = this_reader -> occupancy[i]; for (j=0; j<3; j++) object -> baryc[j] = this_reader -> coord[i][j]; } occupying = 0; } else { occupying = this_proj -> modelgl -> builder_win -> occupancy; } for (h=0; h<2; h++) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; i = j = k = 0; while (object) { l = object -> id; if (this_proj -> modelgl -> search_widg[7] -> todo[l]) { if (h) { for (m=0; m species; m++) { done = FALSE; for (l=0; l old_z[m] == cdata -> z[l]) { done = TRUE; break; } } if (! done && object -> old_z[m] > 0.0) { cdata -> z[k] = object -> old_z[m]; k ++; } if (object -> old_z[m] == 0.0) { cdata -> holes[i] = TRUE; cdata -> with_holes = TRUE; } } n = sp_group -> wyckoff[0].multi*npoints; cdata -> at_type[i] = allocint(n); cdata -> coord[i] = g_malloc0(n*sizeof*cdata -> coord[i]); cdata -> insert[i] = m4_mul_coord (sp_group -> coord_origin, vec3(object -> baryc[0], object -> baryc[1], object -> baryc[2])); #ifdef DEBUG // g_debug ("at_orig= %d, pos.x= %f, pos.y= %f, pos.z= %f", i+1, object -> baryc[0], object -> baryc[1], object -> baryc[2]); // g_debug ("at_calc= %d, pos.x= %f, pos.y= %f, pos.z= %f", i+1, cdata -> insert[i].x, cdata -> insert[i].y, cdata -> insert[i].z); #endif n = 0; for (o=0; o wyckoff[0].multi; p++) { pos = v3_add (m4_mul_coord (wyckpos[0][p], cdata -> insert[i]), points[o]); q = pos_not_saved (cdata -> coord[i], n, pos); if (q > 0) { cdata -> coord[i][n].x = pos.x; cdata -> coord[i][n].y = pos.y; cdata -> coord[i][n].z = pos.z; #ifdef DEBUG // g_debug (" c.x= %f, c.y= %f, c.z= %f", cdata -> coord[i][n].x, cdata -> coord[i][n].y, cdata -> coord[i][n].z); #endif cdata -> at_type[i][n] = 1; n ++; } else if (q < 0) { cdata -> at_type[i][-(q+1)] ++; } } } cdata -> pos_by_object[i] = n; cdata -> occupancy[i] = object -> occ; if (! cdata -> holes[i]) cdata -> lot[i] = allocint(object -> atoms); cdata -> position[i] = g_malloc0(object -> atoms*sizeof*cdata -> position[i]); for (l=0; l atoms; l++) { n = object -> at_list[l].sp; cdata -> position[i][l].x = object -> at_list[l].x; cdata -> position[i][l].y = object -> at_list[l].y; cdata -> position[i][l].z = object -> at_list[l].z; if (! cdata -> holes[i]) { for (o=0; o z[o] == object -> old_z[n]) { cdata -> lot[i][l] = o; break; } } } } cdata -> at_by_object[i] = object -> atoms; i ++; } else { if (object -> dim > amin) { str = g_strdup_printf ("%s size (%f Ang.) is bigger than the min(a,b,c)\n" "If you build the crystal the final structure is likely to be crowded !\n" "Continue anyway ?", object -> name, object -> dim); build_res = 2; if (! ask_yes_no("This object might be too big !" , str, GTK_MESSAGE_WARNING, widg)) { g_free (str); if (points) g_free (points); if (wyckpos) g_free (wyckpos); if (cdata) cdata = free_crystal_data (cdata); if (! visible) { this_proj -> modelgl -> search_widg[7] = free_this_search_data (this_proj -> modelgl -> search_widg[7]); g_free (this_proj -> modelgl); this_proj -> modelgl = NULL; active_glwin = NULL; } return 0; } g_free (str); } i ++; j += object -> species; k += object -> atoms; } } object = object -> next; } if (! h) { if (k) { cdata = allocate_crystal_data (i, j); cdata -> overlapping = (visible) ? this_proj -> modelgl -> builder_win -> overlapping : FALSE; } else { if (points) g_free (points); if (wyckpos) g_free (wyckpos); if (cdata) cdata = free_crystal_data (cdata); if (! visible) { this_proj -> modelgl -> search_widg[7] = free_this_search_data (this_proj -> modelgl -> search_widg[7]); g_free (this_proj -> modelgl); this_proj -> modelgl = NULL; active_glwin = NULL; } return 0; } } } if (points) g_free (points); if (wyckpos) g_free (wyckpos); cdata -> spec = k; double u, v; m = 0; for (i=0; i objects; i++) { m += (cdata -> holes[i]) ? 1 : 0; u = v = 0.0; for (j=0; j<2; j++) { k = 1; if (! cdata -> overlapping || cdata -> holes[i]) { u = cdata -> occupancy[i]; } else { v = cdata -> occupancy[i]; } if (u+v > 1.0 || u+v < 0.0) { if (cdata) cdata = free_crystal_data (cdata); show_warning ("Impossible to build crystal: check occupancy !", widg); return 0; } else if (cdata -> overlapping && ! cdata -> with_holes) { if (j) cdata -> sites[i][k] = i; } else { for (l=0; l objects; l++) { if (l != i) { if (cdata -> insert[i].x == cdata -> insert[l].x && cdata -> insert[i].y == cdata -> insert[l].y && cdata -> insert[i].z == cdata -> insert[l].z) { if (j) { if (! cdata -> overlapping || cdata -> holes[i]) { k ++; cdata -> sites[i][k] = l; } } else { if (! cdata -> overlapping || cdata -> holes[i]) k ++; if (! cdata -> overlapping || cdata -> holes[l]) { u += cdata -> occupancy[l]; } else { v = max(v, cdata -> occupancy[l]); } if (u+v > 1.00001) { show_warning ("Impossible to build crystal: site total occupancy > 1.0", widg); if (cdata) cdata = free_crystal_data (cdata); return 0; } } } } } } if (! j) { cdata -> sites[i] = allocint (k+1); cdata -> sites[i][0] = k; cdata -> sites[i][1] = i; if (k > 1) cdata -> shared_sites = TRUE; } } } #ifdef DEBUG /*for (i=0; i objects; i++) { g_debug ("i= %d, site[%d]= %d", i+1, i+1, cdata -> sites[i][0]); for (j=0; j sites[i][0]; j++) { g_debug ("\t j= %d, co-site[%d][%d]= %d", j+1, i+1, j+1, cdata -> sites[i][j+1]+1); } }*/ #endif // DEBUG if (m == cdata -> objects) { if (cdata) cdata = free_crystal_data (cdata); show_warning ("Impossible to build crystal: empty site(s) only !", widg); return 0; } gboolean new_proj = (this_proj -> natomes && visible) ? TRUE : FALSE; if (new_proj) { init_project(TRUE); } else if (visible) { active_project_changed (this_proj -> id); } for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) { active_box -> param[i][j] = box -> param[i][j]; if (! i) active_box -> param[i][j] *= cell -> cextra[j]; } active_box -> vect[i][j] *= cell -> cextra[i]; } } compute_lattice_properties (active_cell); active_cell -> ltype = 1; active_cell -> pbc = TRUE; int tot_cell = 1; for (i=0; i<3; i++) { tot_cell *= cell -> cextra[i]; } vec3_t vx, vy, vz, shift; h = 0; i = (occupying == 2) ? 0 : 1; j = (occupying == 2) ? 1 : tot_cell; crystal_data * cryst = allocate_crystal_data (j*cdata -> objects, cdata -> spec); g_free (cryst -> z); cryst -> z = duplicate_double (cdata -> spec, cdata -> z); cryst -> shared_sites = cdata -> shared_sites; cryst -> overlapping = cdata -> overlapping; cryst -> with_holes = cdata -> with_holes; if (occupying == 2) { for (k=0; k objects; k++) { cryst -> pos_by_object[k] = tot_cell*cdata -> pos_by_object[k]; cryst -> at_by_object[k] = cdata -> at_by_object[k]; cryst -> at_type[k] = duplicate_int (sp_group -> wyckoff[0].multi*npoints, cdata -> at_type[k]); cryst -> holes = duplicate_bool (cdata -> objects, cdata -> holes); if (! cdata -> holes[k]) cryst -> lot[k] = duplicate_int (cdata -> at_by_object[k], cdata -> lot[k]); cryst -> occupancy[k] = cdata -> occupancy[k]; cryst -> sites[k] = duplicate_int (cdata -> sites[k][0]+1, cdata -> sites[k]); cryst -> position[k] = g_malloc0 (cdata -> at_by_object[k]*sizeof*cryst -> position[k]); for (l=0; l at_by_object[k]; l++) cryst -> position[k][l] = cdata -> position[k][l]; cryst -> coord[k] = g_malloc0(cryst -> pos_by_object[k]*sizeof*cryst -> coord[k]); } } for (k=0; k cextra[0]; k++) { vx = v3_muls(vec3(box -> vect[0][0], box -> vect[0][1], box -> vect[0][2]), k); for (l=0; l cextra[1]; l++) { vy = v3_muls(vec3(box -> vect[1][0], box -> vect[1][1], box -> vect[1][2]), l); for (m=0; m cextra[2]; m++) { vz = v3_muls(vec3(box -> vect[2][0], box -> vect[2][1], box -> vect[2][2]), m); shift = v3_add (vx, v3_add(vy, vz)); for (n=0; n objects; n++) { if (occupying != 2) { cryst -> coord[n+h] = g_malloc0(cdata -> pos_by_object[n]*sizeof*cryst -> coord[n+h]); cryst -> pos_by_object[n+h] = cdata -> pos_by_object[n]; cryst -> at_by_object[n+h] = cdata -> at_by_object[n]; cryst -> holes[n+h] = cdata -> holes[n]; cryst -> at_type[n+h] = duplicate_int (sp_group -> wyckoff[0].multi*npoints, cdata -> at_type[n]); if (! cdata -> holes[n]) cryst -> lot[n+h] = duplicate_int (cdata -> at_by_object[n], cdata -> lot[n]); cryst -> occupancy[n+h] = cdata -> occupancy[n]; cryst -> sites[n+h] = duplicate_int (cdata -> sites[n][0]+1, cdata -> sites[n]); for (o=0; o sites[n+h][0]; o++) cryst -> sites[n+h][o+1] += h; cryst -> position[n+h] = g_malloc0 (cdata -> at_by_object[n]*sizeof*cryst -> position[n+h]); for (o=0; o at_by_object[n]; o++) cryst -> position[n+h][o] = cdata -> position[n][o]; } o = cdata -> pos_by_object[n]; for (p=0; p coord[n+i*h][p+(!i)*h*o] = v3_add(m4_mul_coord (box -> frac_to_cart, cdata -> coord[n][p]), shift); } } h += (occupying != 2) ? cdata -> objects : 1; } } } cdata = free_crystal_data (cdata); gboolean low_occ = adjust_object_occupancy (cryst, occupying, tot_cell); atom at, bt; distance dist; gboolean dist_chk = TRUE; if (! cryst -> overlapping) { for (i=0; i objects; i++) { if (! cryst -> holes[i]) { for (j=0; j pos_by_object[i]; j++) { at.x = cryst -> coord[i][j].x; at.y = cryst -> coord[i][j].y; at.z = cryst -> coord[i][j].z; for (k=i; k objects; k++) { if (! cryst -> holes[k]) { if (k != i || j < cryst -> pos_by_object[i]-1) { l = (k == i) ? j+1 : 0; for (m=l; m pos_by_object[k]; m++) { bt.x = cryst -> coord[k][m].x; bt.y = cryst -> coord[k][m].y; bt.z = cryst -> coord[k][m].z; dist = distance_3d (active_cell, 0, & at, & bt); if (dist.length < 0.5) { // g_print ("i= %d, j= %d, k= %d, m= %d, d= %f\n", i, j, k, m, dist.length); if (dist_chk) { build_res = 3; if (ask_yes_no ("Inter-object distance(s) < 0.5 Ang. !", "Inter-object distance(s) < 0.5 Ang. !\n\n\t\tContinue and leave a single object at each position ?", GTK_MESSAGE_WARNING, widg)) { dist_chk = FALSE; } else { clean_this_proj (active_project, new_proj); cryst = free_crystal_data (cryst); return 0; } } if (! dist_chk) { if (dist.length < 0.1) { cryst -> at_type[i][j] += cryst -> at_type[k][m]; for (n=m; n pos_by_object[k]-1; n++) { cryst -> coord[k][n].x = cryst -> coord[k][n+1].x; cryst -> coord[k][n].y = cryst -> coord[k][n+1].y; cryst -> coord[k][n].z = cryst -> coord[k][n+1].z; cryst -> at_type[k][n] += cryst -> at_type[k][n+1]; } cryst -> pos_by_object[k] --; m --; } } } } } } } } } } } int tot_new_at = 0; for (i=0; i objects; i++) { if (! cryst -> holes[i]) tot_new_at += cryst -> pos_by_object[i]*cryst -> at_by_object[i]; } int * tot_new_lot = allocint(tot_new_at); vec3_t * ncc = g_malloc0(tot_new_at*sizeof*ncc); i = 0; for (j=0; j objects; j++) { if (! cryst -> holes[j]) { for (k=0; k at_by_object[j]; k++) { for (l=0; l pos_by_object[j]; l++) { ncc[i] = v3_add (cryst -> coord[j][l], cryst -> position[j][k]); m = tot_new_lot[i] = cryst -> lot[j][k]; cryst -> nsps[m] ++; i ++; } } } } active_project -> steps = 1; active_project -> natomes = tot_new_at; if (low_occ) { i = 0; for (j=0; j spec; j++) { if (cryst -> nsps[j]) i ++; } active_project -> nspec = i; } else { active_project -> nspec = cryst -> spec; } #ifdef DEBUG g_debug ("CRYSTAL:: atoms= %d, species= %d", active_project -> natomes, active_project -> nspec); #endif alloc_proj_data (active_project, 1); active_project_changed (activep); k = l = 0; for (i=0; i spec; i++) { if (! cryst -> nsps[i]) { if (! low_occ) { if (ncc) g_free (ncc); if (tot_new_lot) g_free (tot_new_lot); #ifdef DEBUG g_debug ("CRYSTAL:: spec= %d, label= %s, nsps= %d", i+1, periodic_table_info[j].lab, 0); #endif return 0; } } else { j = (int)cryst -> z[i]; active_chem -> label[k] = g_strdup_printf ("%s", periodic_table_info[j].lab); active_chem -> element[k] = g_strdup_printf ("%s", periodic_table_info[j].name); active_chem -> nsps[k] = cryst -> nsps[i]; active_chem -> chem_prop[CHEM_Z][k] = cryst -> z[i]; active_chem -> chem_prop[CHEM_M][k] = set_mass_ (& j); active_chem -> chem_prop[CHEM_R][k] = set_radius_ (& j, & l); active_chem -> chem_prop[CHEM_N][k] = set_neutron_ (& j); active_chem -> chem_prop[CHEM_X][k] = active_chem -> chem_prop[CHEM_Z][k]; #ifdef DEBUG g_debug ("CRYSTAL:: spec= %d, label= %s, nsps= %d", k+1, active_chem -> label[k], active_chem -> nsps[k]); #endif for (m=0; m vect[j][i]/2.0; } } for (i=0; i atoms[0][i].id = i; j = tot_new_lot[i]; active_project -> atoms[0][i].sp = j; active_project -> atoms[0][i].x = ncc[i].x + copos[0]; active_project -> atoms[0][i].y = ncc[i].y + copos[1]; active_project -> atoms[0][i].z = ncc[i].z + copos[2]; active_project -> atoms[0][i].show[0] = TRUE; active_project -> atoms[0][i].show[1] = TRUE; active_project -> atoms[0][i].label[0] = FALSE; active_project -> atoms[0][i].label[1] = FALSE; active_project -> atoms[0][i].pick[0] = FALSE; active_project -> atoms[0][i].cloned = FALSE; #ifdef DEBUG // g_debug ("sp= %d, %s %f %f %f", j+1, active_chem -> label[j], ncc[i].x, ncc[i].y, ncc[i].z); #endif } if (ncc) g_free (ncc); if (tot_new_lot) g_free (tot_new_lot); active_cell -> has_a_box = TRUE; active_cell -> crystal = TRUE; if (visible) { for (i=0; i<3; i=i+2) active_project -> runok[i] = TRUE; active_project -> runok[BD] = TRUE; active_project -> runok[RI] = TRUE; active_project -> runok[CH] = TRUE; active_project -> runok[SP] = TRUE; active_project_changed (activep); if (new_proj) { add_project_to_workspace (); apply_project (TRUE); } else { active_project -> run = TRUE; initcutoffs (active_chem, active_project -> nspec); init_curves_and_calc (active_project); initcwidgets (); active_project_changed (activep); init_camera (active_project, TRUE); set_img_lights (active_project, active_image); image_init_spec_data (active_image, active_project, active_project -> nspec); glwin_init_spec_data (active_project, active_project -> nspec); #ifdef GTK3 // GTK3 Menu Action To Check for (j=1; j ogl_coord[j] = NULL; for (j=0; j ogl_rings[j] = NULL; for (j=0; j<2; j++) active_glwin -> ogl_mode[2+j+NINPUTS] = NULL; active_glwin -> ogl_chains[0] = NULL; #endif prepare_opengl_menu_bar (active_glwin); active_glwin -> labelled = check_label_numbers (active_project, 0); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; bonds_update = 1; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); if (active_glwin -> mode == EDITION) { #ifdef GTK4 set_mode (NULL, & active_glwin -> colorp[0][0]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_mode[0], TRUE); set_mode (active_glwin -> ogl_mode[0], & active_glwin -> colorp[0][0]); #endif } gtk_widget_show (active_glwin -> win); gtk_button_set_label (GTK_BUTTON(active_glwin -> builder_win -> pbut), "Build (new project)"); if (active_glwin -> atom_win) { if (active_glwin -> atom_win -> win) { clean_all_trees (active_glwin -> search_widg[7], active_project); } } } init_camera (active_project, TRUE); active_image -> box_axis[0] = 1; if (to_wrap) { shift_it (vec3(0.0,0.0,0.0), 1, activep); active_glwin -> wrapped = TRUE; } active_image -> draw_clones = (active_glwin -> allbonds[1]) ? show_clones : FALSE; update_all_menus (active_glwin, active_project -> natomes); #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) { if (active_glwin -> ogl_box[i] != NULL) { widget_set_sensitive (active_glwin -> ogl_box[i], active_cell -> ltype); } } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_rep[0], TRUE); set_rep (active_glwin -> ogl_rep[0], & active_glwin -> colorp[0][0]); #endif init_shaders (active_glwin); update (active_glwin); chemistry_ (); } else { active_project -> modelgl -> search_widg[7] = free_this_search_data (active_project -> modelgl -> search_widg[7]); g_free (active_project -> modelgl); active_project -> modelgl = NULL; active_glwin = NULL; } update_insert_combos (); active_cell -> sp_group = duplicate_space_group (sp_group); if (low_occ) { gchar * low_warning = "The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message."; show_warning (low_warning, widg); } return build_res; } Atomes-GNU-1.1.14/src/opengl/edit/cbuild_edit.c000066400000000000000000001456231457665371200211230ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cbuild_edit.c * @short Functions to create the crystal builder window * @author Sébastien Le Roux */ /* * This file: 'cbuild_edit.c' * * Contains: * - The functions to create the crystal builder window * * List of functions: int get_crystal_id (int spg); int get_bravais_img_id (int spg); int get_sg_num (GtkComboBox * box); int read_space_group (builder_edition * cbuilder, int spg); int get_group_id_from_name (gchar * sg_name); G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean delete_build (GtkWidget * widg, GdkEvent * event, gpointer data); gchar * frac_string (gchar * init); gchar * get_num_string (gchar * str); gchar * get_so_string (space_group * spg, int id); void adjust_lattice_parameters (builder_edition * cbuilder); void adjust_so_combo (builder_edition * cbuilder); void adjust_bv_img (builder_edition * cbuilder); void adjust_lattice_constraints (builder_edition * cbuilder); void adjust_sg_combo (builder_edition * cbuilder, int cs, int bl); void prepare_crystal_builder (gpointer data); G_MODULE_EXPORT void update_cb_vect (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void update_cb_box (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void set_lattice (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_so (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_sg (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_bl (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_cs (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_wr (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_shc (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void add_cryst_cell (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data); G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data); G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggle_occ (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void toggle_overlap (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data); G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data); GtkWidget * prepare_lattice_grid (int type, builder_edition * cbuilder, glwin * glview); GtkWidget * sg_info (int sg, gpointer data); GtkWidget * create_bl_combo (int cs, gpointer data); GtkWidget * builder_win (project * this_proj, gpointer data); GtkTreeModel * so_combo_tree (space_group * spg); GtkTreeModel * sg_combo_tree (int csid, int bvid); GtkTreeModel * la_combo_tree (); */ #include "global.h" #include "interface.h" #include "glview.h" #include "cbuild_edit.h" #include "bind.h" #include "project.h" #include "workspace.h" #include "readers.h" extern G_MODULE_EXPORT void show_sg_info (GtkButton * but, gpointer data); extern void get_origin (space_group * spg); extern int test_lattice (builder_edition * cbuilder, cell_info * cif_cell); extern int build_crystal (gboolean visible, project * this_proj, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); gchar * crystal_sytems[7] = {"Triclinic", "Monoclinic", "Othorhombic", "Tetragonal", "Trigonal", "Hexagonal", "Cubic"}; gchar * bravais_keys[7][4] = {{"Primitive", NULL, NULL, NULL}, {"Primitive", "Base-centered", NULL, NULL}, {"Primitive", "Base-centered", "Body-centered", "Face-centered"}, {"Primitive", "Body-centered", NULL, NULL}, {"Hexagonal axes", "Rhombohedral axes", NULL, NULL}, {"Hexagonal", NULL, NULL, NULL}, {"Primitive", "Body-centered", "Face-centered", NULL}}; gchar * latt_info[7]={"abc\nα ≠ β ≠ ɣ", // Triclinic "abc\nα = β = 90° ≠ ɣ\n\tor\nα = ɣ = 90° ≠ β", // Monoclinic "abc\nα = β = ɣ = 90°", // Orthorhombic "a = bc\nα = β = ɣ = 90°", // Tetragonal "a = b = c\nα = β = γ ≠ 90°", // Trigonal R "a = bc\nα = β = 90° and ɣ = 120°", // Hexagonal "a = b = c\nα = β = ɣ = 90°"}; // Cubic int nsg_bv[7]={2, 13, 59, 68, 25, 27, 36}; int min_bv[7]={0, 2, 15, 74, 142, 167, 194}; /*! \fn int get_crystal_id (int spg) \brief get the bravais lattice id from space group id \param spg the target space group id */ int get_crystal_id (int spg) { if (spg < 3) { return 0; } else if (spg < 16) { return 1; } else if (spg < 75) { return 2; } else if (spg < 143) { return 3; } else if (spg < 168) { if (groups[spg-1][0] == 'R') { return 4; } else { return 5; } } else if (spg < 195) { return 5; } else { return 6; } } /*! \fn int get_bravais_img_id (int spg) \brief get bravais image from space group id \param spg the target space group id */ int get_bravais_img_id (int spg) { if (spg < 3) { return 0; } else if (spg < 16) { if (groups[spg-1][0] == 'P') { return 1; } else { return 2; } } else if (spg < 75) { if (groups[spg-1][0] == 'P') { return 3; } else if (groups[spg-1][0] == 'I') { return 4; } else if (groups[spg-1][0] == 'A' || groups[spg-1][0] == 'C') { return 5; } else { return 6; } } else if (spg < 143) { if (groups[spg-1][0] == 'P') { return 7; } else { return 8; } } else if (spg < 168) { if (groups[spg-1][0] == 'R') { return 9; } else { return 10; } } else if (spg < 195) { return 10; } else { if (groups[spg-1][0] == 'P') { return 11; } else if (groups[spg-1][0] == 'I') { return 12; } else { return 13; } } } /*! \fn gchar * frac_string (gchar * init) \brief get pango string for fraction string \param init the target fraction string */ gchar * frac_string (gchar * init) { gchar * end = substitute_string (init, "1/2", "½"); end = substitute_string (end, "1/4", "¼"); end = substitute_string (end, "3/4", "¾"); end = substitute_string (end, "1/3", "⅓"); end = substitute_string (end, "2/3", "⅔"); end = substitute_string (end, "1/6", "⅙"); end = substitute_string (end, "5/6", "⅚"); end = substitute_string (end, "1/8", "⅛"); end = substitute_string (end, "3/8", "⅜"); end = substitute_string (end, "5/8", "⅝"); end = substitute_string (end, "7/8", "⅞"); return g_strdup_printf ("%s", end); } /*! \fn gchar * get_num_string (gchar * str) \brief get description string for entry string \param str the target string */ gchar * get_num_string (gchar * str) { str = replace_markup (str, "65", "65"); str = replace_markup (str, "64", "64"); str = replace_markup (str, "63", "63"); str = replace_markup (str, "62", "62"); str = replace_markup (str, "61", "61"); str = replace_markup (str, "43", "43"); str = replace_markup (str, "42", "42"); str = replace_markup (str, "41", "41"); str = replace_markup (str, "32", "32"); str = replace_markup (str, "31", "31"); return substitute_string (str, "21", "21"); } /*! \fn gchar * get_so_string (space_group * spg, int id) \brief get space group setting descrption string \param spg the target space group \param id the space grop setting */ gchar * get_so_string (space_group * spg, int id) { gchar * str = replace_markup (spg -> settings[id].name, "s", "/"); str = get_num_string (str); str = substitute_string (str, "_", NULL); if (spg -> settings[id].origin) { str = g_strdup_printf ("%s (%d)", str, spg -> settings[id].origin); } return str; } /*! \fn GtkTreeModel * so_combo_tree (space_group * spg) \brief create the space group setting combo box tree model \param spg the target space group */ GtkTreeModel * so_combo_tree (space_group * spg) { GtkTreeIter iter; GtkTreeStore * store; int i; store = gtk_tree_store_new (1, G_TYPE_STRING); if (! spg) return GTK_TREE_MODEL (store); if (spg -> nums > 1) { for (i=0; i nums; i++) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, get_so_string (spg, i), -1); } } else { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, groups[spg -> id-1], -1); } return GTK_TREE_MODEL (store); } /*! \fn GtkTreeModel * sg_combo_tree (int csid, int bvid) \brief create the space group combo box tree model \param csid the crystal system \param bvid the bravais lattice */ GtkTreeModel * sg_combo_tree (int csid, int bvid) { GtkTreeIter iter; GtkTreeStore * store; int i; gboolean doit; gchar * str; store = gtk_tree_store_new (1, G_TYPE_STRING); for (i=min_bv[csid]; ia, b, c, α β ɣ", "Vectors"}; int i; store = gtk_tree_store_new (1, G_TYPE_STRING); for (i=0; i<2; i++) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, lat[i], -1); } return GTK_TREE_MODEL (store); } /*! \fn int get_sg_num (GtkComboBox * box) \brief get space group number from active iter in tree model of combo box \param box the target GtkComboBox */ int get_sg_num (GtkComboBox * box) { GValue val = {0, }; GtkTreeModel * cmodel = gtk_combo_box_get_model (box); GtkTreeIter iter; gchar * str = NULL; gchar * num = NULL; int i = 0; if (gtk_combo_box_get_active_iter (box, & iter)) { gtk_tree_model_get_value (cmodel, & iter, 0, & val); str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); if (str) { num = g_strdup_printf ("%c%c%c", str[0], str[1], str[2]); i = (int) atof (num); g_free (str); g_free (num); } } return i; } /*! \fn void adjust_lattice_parameters (builder_edition * cbuilder) \brief adjust lattice parameters depending on space group \param cbuilder the target build edition */ void adjust_lattice_parameters (builder_edition * cbuilder) { int i, j, k; j = get_sg_num (GTK_COMBO_BOX(cbuilder -> sg_combo)); k = get_crystal_id (j); box_info * box = & cbuilder -> cell.box[0]; switch (k) { case 1: box -> param[1][0] = 90.0; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[2][0] = box -> vect[2][1] = 0.0; break; case 2: box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 90.0; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; box -> vect[2][0] = box -> vect[2][1] = 0.0; break; case 3: box -> param[0][1] = box -> param[0][0]; box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 90.0; break; case 4: box -> param[0][1] = box -> param[0][0]; if (cbuilder -> cell.sp_group -> name[0] == 'R') { box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 0.0; } else { box -> param[1][0] = box -> param[1][1] = 90.0; box -> param[1][2] = 120.0; } box -> vect[1][1] = box -> vect[0][0]; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; break; case 5: box -> param[0][1] = box -> param[0][0]; box -> param[1][0] = box -> param[1][1] = 90.0; box -> param[1][2] = 120.0; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; break; case 6: box -> param[0][1] = box -> param[0][2] = box -> param[0][0]; box -> param[1][0] = box -> param[1][1] = box -> param[1][2] = 90.0; box -> vect[1][1] = box -> vect[2][2] = box -> vect[0][0]; box -> vect[0][1] = box -> vect[0][2] = 0.0; box -> vect[1][0] = box -> vect[1][2] = 0.0; box -> vect[2][0] = box -> vect[2][1] = 0.0; break; default: break; } if (cbuilder -> cell.ltype) { for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (cbuilder -> ventry[i][j]) { if (GTK_IS_WIDGET(cbuilder -> ventry[i][j])) { update_entry_double (GTK_ENTRY(cbuilder -> ventry[i][j]), box -> vect[i][j]); } } } } } else { for (i=0; i<2; i++) { for (j=0; j<3; j++) { if (cbuilder -> bentry[i][j]) { if (GTK_IS_WIDGET(cbuilder -> bentry[i][j])) { update_entry_double (GTK_ENTRY(cbuilder -> bentry[i][j]), box -> param[i][j]); } } } } if (cbuilder -> bentry[0][1]) { if (GTK_IS_WIDGET(cbuilder -> bentry[0][1])) { widget_set_sensitive (cbuilder -> bentry[0][1], (k > 2) ? 0 : 1); if (k > 2) update_entry_text (GTK_ENTRY(cbuilder -> bentry[0][1]), ""); } } if (cbuilder -> bentry[0][2]) { if (GTK_IS_WIDGET(cbuilder -> bentry[0][2])) { widget_set_sensitive (cbuilder -> bentry[0][2], (k > 5 || (k == 4 && cbuilder -> cell.sp_group -> name[0] == 'R')) ? 0 : 1); if (k > 5 || (k == 4 && cbuilder -> cell.sp_group -> name[0] == 'R')) update_entry_text (GTK_ENTRY(cbuilder -> bentry[0][2]), ""); } } for (i=0; i<3; i++) { if (cbuilder -> bentry[1][i]) { if (GTK_IS_WIDGET(cbuilder -> bentry[1][i])) { widget_set_sensitive (cbuilder -> bentry[1][i], (k > 1) || (k == 1 && ! i) ? 0 : 1); if (k == 4 && cbuilder -> cell.sp_group -> name[0] == 'R') { if (! i) { widget_set_sensitive (cbuilder -> bentry[1][i], 1); } else { update_entry_text (GTK_ENTRY(cbuilder -> bentry[1][i]), ""); } } } } } } } /*! \fn G_MODULE_EXPORT void update_cb_vect (GtkEntry * entry, gpointer data) \brief update lattice vector callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cb_vect (GtkEntry * entry, gpointer data) { tint * id = (tint *)data; const gchar * m = entry_get_text (entry); double v = atof(m); get_project_by_id(id -> a) -> modelgl -> builder_win -> cell.box[0].vect[id -> b][id -> c] = v; update_entry_double (entry, v); } /*! \fn G_MODULE_EXPORT void update_cb_box (GtkEntry * entry, gpointer data) \brief update lattice box parameter callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cb_box (GtkEntry * entry, gpointer data) { tint * id = (tint *)data; const gchar * m = entry_get_text (entry); double v = atof(m); if (v >= 0.0) { get_project_by_id(id -> a) -> modelgl -> builder_win -> cell.box[0].param[id -> b][id -> c] = v; } update_entry_double (entry, v); } /*! \fn GtkWidget * prepare_lattice_grid (int type, builder_edition * cbuilder, glwin * glview) \brief prepare the lattice parameters grid widget \param type the type of lattice system \param cbuilder the target builder edition \param glview the target glwin */ GtkWidget * prepare_lattice_grid (int type, builder_edition * cbuilder, glwin * glview) { GtkWidget * table = gtk_grid_new (); int i, j, k; k = 0; for (i=0; i<3; i++) { for (j=0; j<3; j++, k++) { if (i < 2) cbuilder -> cell.box[0].param[i][j] = 0.0; cbuilder -> cell.box[0].vect[i][j] = 0.0; t_box[k].a = i; t_box[k].b = j; } } cbuilder -> cell.ltype = type; if (cbuilder -> cell.ltype) { k = 0; for (i=0; i<4; i++) { if (i > 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_name[i-1], 20, -1, 0.0, 0.5), 0, i, 1, 1); } for (j=0; j<4; j++) { if (j > 0) { if (i == 0) { gtk_grid_attach (GTK_GRID (table), markup_label(vect_comp[j-1], -1, 20, 0.5, 0.5), j, 0, 1, 1); } else { cbuilder -> ventry[i-1][j-1] = create_entry (G_CALLBACK(update_cb_vect), 100, 15, FALSE, & cbuilder -> pointers[i][j]); update_entry_double (GTK_ENTRY(cbuilder -> ventry[i-1][j-1]), cbuilder -> cell.box[0].vect[i-1][j-1]); gtk_grid_attach (GTK_GRID (table), cbuilder -> ventry[i-1][j-1], j, i, 1, 1); k ++; } } } } } else { k = 0; for (i=0; i<2; i++) { //gtk_grid_attach (GTK_GRID (table), markup_label(box_p[i], -1, 50, 0.5, 0.5), 1, i+2*i, 1, 1); gtk_grid_attach (GTK_GRID (table), markup_label(" ", 20, -1, 0.5, 0.5), 0, i, 1, 1); for (j=0; j<3; j++, k++) { gtk_grid_attach (GTK_GRID (table), markup_label(box_prop[i][j], -1, -1, 0.5, 0.5), j+1, i+2*i, 1, 1); cbuilder -> bentry[i][j] = create_entry (G_CALLBACK(update_cb_box), 100, 15, FALSE, & cbuilder -> pointers[i][j]); update_entry_double (GTK_ENTRY(cbuilder -> bentry[i][j]), cbuilder -> cell.box[0].param[i][j]); gtk_grid_attach (GTK_GRID (table), cbuilder -> bentry[i][j], j+1, i+2*i+1, 1, 1); } } adjust_lattice_parameters (cbuilder); } return table; } /*! \fn G_MODULE_EXPORT void set_lattice (GtkComboBox * box, gpointer data) \brief change the lattice system \param box the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_lattice (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; glwin * view = get_project_by_id(id -> a) -> modelgl; builder_edition * cbuilder = view -> builder_win; cbuilder -> lattice_grid = destroy_this_widget (cbuilder -> lattice_grid); cbuilder -> lattice_grid = prepare_lattice_grid (gtk_combo_box_get_active (box), cbuilder, view); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> lattice_box, cbuilder -> lattice_grid, FALSE, FALSE, 5); show_the_widgets (cbuilder -> lattice_grid); } /*! \fn G_MODULE_EXPORT void set_so (GtkComboBox * box, gpointer data) \brief set space group setting \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_so (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; builder_edition * cbuilder = get_project_by_id(id -> a) -> modelgl -> builder_win; int i = gtk_combo_box_get_active(box); gchar * str = g_strdup_printf ("(%s,%s,%s)", cbuilder -> cell.sp_group -> settings[i].pos[0], cbuilder -> cell.sp_group -> settings[i].pos[1], cbuilder -> cell.sp_group -> settings[i].pos[2]); cbuilder -> so_info = destroy_this_widget(cbuilder -> so_info); cbuilder -> so_info = markup_label(frac_string(str), -1, -1, 0.5, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, cbuilder -> so_info, FALSE, FALSE, 10); gtk_widget_show (cbuilder -> so_info); cbuilder -> cell.sp_group -> sid = i; get_origin (cbuilder -> cell.sp_group); } /*! \fn GtkWidget * sg_info (int sg, gpointer data) \brief create the space group information button \param sg space group id \param data the associated data pointer */ GtkWidget * sg_info (int sg, gpointer data) { gchar * str = g_strdup_printf ("%s group info", groups[sg]); GtkWidget * mlab = markup_label(str, -1, -1, 0.5, 0.5); GtkWidget * mbut = create_button (NULL, IMG_NONE, NULL, 50, -1, GTK_RELIEF_NORMAL, G_CALLBACK(show_sg_info), data); add_container_child (CONTAINER_BUT, mbut, mlab); show_the_widgets (mbut); return mbut; } /*! \fn int read_space_group (builder_edition * cbuilder, int spg) \brief read space group N°spg data from file \param cbuilder the target builder edition \param spg the space group id */ int read_space_group (builder_edition * cbuilder, int spg) { // Read file gchar * sgfile = substitute_string(groups[spg], "", NULL); sgfile = substitute_string(sgfile, "", NULL); sgfile = substitute_string(sgfile, "/", "s"); #ifdef G_OS_WIN32 sgfile = g_strdup_printf ("%s\\space_groups\\%d-%s.sgl", PACKAGE_LIB_DIR, spg+1, sgfile); #else sgfile = g_strdup_printf ("%s/space_groups/%d-%s.sgl", PACKAGE_LIB_DIR, spg+1, sgfile); #endif int res; if (cbuilder) { cbuilder -> cell.sp_group = read_sg_xml_file (sgfile); res = (cbuilder -> cell.sp_group) ? 1 : 0; } else if (this_reader) { this_reader -> lattice.sp_group = read_sg_xml_file (sgfile); res = (this_reader -> lattice.sp_group) ? 1 : 0; } g_free (sgfile); return res; } /*! \fn int get_group_id_from_name (gchar * sg_name) \brief get space group id from name \param sg_name the space group string */ int get_group_id_from_name (gchar * sg_name) { int i; for (i=0; i<230; i++) { if (g_strcmp0(groups[i], sg_name) == 0) return i+1; } return 0; } /*! \fn void adjust_so_combo (builder_edition * cbuilder) \brief adjust the space group setting combo box to use pango markup \param cbuilder the target builder edition */ void adjust_so_combo (builder_edition * cbuilder) { GtkTreeModel * model = so_combo_tree (cbuilder -> cell.sp_group); gtk_combo_box_set_model (GTK_COMBO_BOX(cbuilder -> so_combo), model); g_object_unref (model); gtk_combo_box_set_active (GTK_COMBO_BOX(cbuilder -> so_combo), 0); GList * cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(cbuilder -> so_combo)); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cbuilder -> so_combo), cell_list -> data, "markup", 0, NULL); } widget_set_sensitive (cbuilder -> so_combo, cbuilder -> cell.sp_group -> nums-1); if (cbuilder -> cell.sp_group) get_origin (cbuilder -> cell.sp_group); } /*! \fn void adjust_bv_img (builder_edition * cbuilder) \brief adjust the bravais lattice image \param cbuilder the target builder edition */ void adjust_bv_img (builder_edition * cbuilder) { if (cbuilder -> bv_img) cbuilder -> bv_img = destroy_this_widget(cbuilder -> bv_img); cbuilder -> bv_img = gtk_image_new_from_file (bravais_img[get_bravais_img_id(cbuilder -> cell.sp_group -> id)]); #ifdef GTK4 gtk_widget_set_size_request (cbuilder -> bv_img, 200, 200); gtk_widget_set_hexpand (cbuilder -> bv_img, TRUE); gtk_widget_set_vexpand (cbuilder -> bv_img, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[1], cbuilder -> bv_img, FALSE, FALSE, 5); } /*! \fn void adjust_lattice_constraints (builder_edition * cbuilder) \brief adjust lattice constraints \param cbuilder the target builder edition */ void adjust_lattice_constraints (builder_edition * cbuilder) { if (cbuilder -> ltc_cons) cbuilder -> ltc_cons = destroy_this_widget(cbuilder -> ltc_cons); gchar * str = g_strdup_printf ("%s", latt_info[get_crystal_id (cbuilder -> cell.sp_group -> id)]); cbuilder -> ltc_cons = markup_label(str, 150, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, cbuilder -> ltc_cons, FALSE, FALSE, 5); } /*! \fn G_MODULE_EXPORT void set_sg (GtkComboBox * box, gpointer data) \brief change space group \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_sg (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; builder_edition * cbuilder = get_project_by_id(id -> a) -> modelgl -> builder_win; int i = get_sg_num(box); if (i) { cbuilder -> sg_but = destroy_this_widget(cbuilder -> sg_but); if (read_space_group (cbuilder, i-1)) { cbuilder -> sg_but = sg_info (i-1, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, cbuilder -> sg_but, FALSE, FALSE, 10); if (cbuilder -> bv_box[0]) adjust_lattice_constraints (cbuilder); if (cbuilder -> bv_box[1]) adjust_bv_img (cbuilder); show_the_widgets (cbuilder -> bh_box); if (cbuilder -> so_combo) adjust_so_combo (cbuilder); if (cbuilder -> lattice_grid) adjust_lattice_parameters (cbuilder); } else { // Error reading file show_error ("Cannot read space group *.sgl file ?!\nPlease check the program library !", 0, cbuilder -> win); } } } /*! \fn void adjust_sg_combo (builder_edition * cbuilder, int cs, int bl) \brief adjust the space group combo box to use pango markup \param cbuilder the target builder edition \param cs the crystal system \param bl the bravais lattice */ void adjust_sg_combo (builder_edition * cbuilder, int cs, int bl) { GtkTreeModel * model = sg_combo_tree (cs, bl); gtk_combo_box_set_model (GTK_COMBO_BOX(cbuilder -> sg_combo), model); g_object_unref (model); gtk_combo_box_set_active (GTK_COMBO_BOX(cbuilder -> sg_combo), 0); GList * cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(cbuilder -> sg_combo)); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cbuilder -> sg_combo), cell_list -> data, "markup", 0, NULL); } adjust_lattice_parameters (cbuilder); } /*! \fn G_MODULE_EXPORT void set_bl (GtkComboBox * box, gpointer data) \brief change bravais lattice \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bl (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; int i, j; i = gtk_combo_box_get_active (GTK_COMBO_BOX(cbuilder -> cs_combo)); j = gtk_combo_box_get_active (box); adjust_sg_combo (cbuilder, i, j); } /*! \fn GtkWidget * create_bl_combo (int cs, gpointer data) \brief create the bravais lattice combo box \param cs the associated crystal system \param data the associated data pointer */ GtkWidget * create_bl_combo (int cs, gpointer data) { GtkWidget * cbox = create_combo(); int i; combo_text_append (cbox, "All"); for (i=0; i<4; i++) { if (bravais_keys[cs][i]) combo_text_append (cbox, bravais_keys[cs][i]); } i = (cs == 0 || cs == 5) ? 0 : 1; widget_set_sensitive (cbox, i); gtk_combo_box_set_active (GTK_COMBO_BOX(cbox), ! i); g_signal_connect (G_OBJECT(cbox), "changed", G_CALLBACK(set_bl), data); gtk_widget_set_size_request (cbox, 150, 25); return cbox; } /*! \fn G_MODULE_EXPORT void set_cs (GtkComboBox * box, gpointer data) \brief change the crystal system \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_cs (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; int i = gtk_combo_box_get_active (box); cbuilder -> bl_combo = destroy_this_widget(cbuilder -> bl_combo); cbuilder -> bl_combo = create_bl_combo (i, data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, cbuilder -> bl_combo, FALSE, FALSE, 0); adjust_sg_combo (cbuilder, i, 0); gtk_widget_show (cbuilder -> bl_combo); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data) \brief wrap or not atomic coordinates after crystal building toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_wr (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_wr (GtkToggleButton * but, gpointer data) \brief wrap or not atomic coordinates after crystal building toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_wr (GtkToggleButton * but, gpointer data) #endif { builder_edition * cbuilder = (builder_edition * )data; #ifdef GTK4 cbuilder -> wrap = gtk_check_button_get_active (but); #else cbuilder -> wrap = gtk_toggle_button_get_active (but); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data) \brief show / hide clones after crystal building toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_shc (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_shc (GtkToggleButton * but, gpointer data) \brief show / hide clones after crystal building toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_shc (GtkToggleButton * but, gpointer data) #endif { builder_edition * cbuilder = (builder_edition * )data; #ifdef GTK4 cbuilder -> clones = gtk_check_button_get_active (but); #else cbuilder -> clones = gtk_toggle_button_get_active (but); #endif } /*! \fn G_MODULE_EXPORT void add_cryst_cell (GtkSpinButton * res, gpointer data) \brief add cell callback spin \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_cryst_cell (GtkSpinButton * res, gpointer data) { tint * bid = (tint *)data; builder_edition * cbuilder = get_project_by_id(bid -> a) -> modelgl -> builder_win; cbuilder -> cell.cextra[bid -> b] = gtk_spin_button_get_value_as_int(res); } /*! \fn G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data) \brief build crystall callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void apply_build (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); if (test_lattice(this_proj -> modelgl -> builder_win, NULL)) { build_crystal (TRUE, this_proj, this_proj -> modelgl -> builder_win -> wrap, this_proj -> modelgl -> builder_win -> clones, & this_proj -> modelgl -> builder_win -> cell, this_proj -> modelgl -> builder_win -> win); } } /*! \fn G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data) \brief close crystal builder and free associated data pointers \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_build (GtkButton * but, gpointer data) { int id = GPOINTER_TO_INT(data); project * this_proj = get_project_by_id(id); this_proj -> modelgl -> search_widg[7] = free_this_search_data (this_proj -> modelgl -> search_widg[7]); this_proj -> modelgl -> builder_win -> win = destroy_this_widget(this_proj -> modelgl -> builder_win -> win); g_free (this_proj -> modelgl -> builder_win); this_proj -> modelgl -> builder_win = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data) \brief crystal builder delete event callback GTK4 \param widg the target GtkWindow \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_build (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean delete_build (GtkWidget * widg, GdkEvent * event, gpointer data) \brief crystal builder delete event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean delete_build (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_build (NULL, data); return TRUE; } dint occp[5]; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data) \brief occupancy toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_occ (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_occ (GtkToggleButton * but, gpointer data) \brief occupancy toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_occ (GtkToggleButton * but, gpointer data) #endif { dint * cid = (dint *)data; get_project_by_id(cid -> a) -> modelgl -> builder_win -> occupancy = cid -> b; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data) \brief adjust overlapping toggle callback GTK4 \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_overlap (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggle_overlap (GtkToggleButton * Button, gpointer data) \brief adjust overlapping toggle callback GTK3 \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggle_overlap (GtkToggleButton * Button, gpointer data) #endif { builder_edition * cbuilder = (builder_edition * )data; #ifdef GTK4 cbuilder -> overlapping = gtk_check_button_get_active (Button); #else cbuilder -> overlapping = gtk_toggle_button_get_active (Button); #endif } /*! \fn G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data) \brief adjust occupancy create dialog callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void adjust_occupancy (GtkButton * but, gpointer data) { project * this_proj = (project *)data; builder_edition * cbuilder = this_proj -> modelgl -> builder_win; GtkWidget * info = dialogmodal ("Occupancy set-up", GTK_WINDOW(cbuilder -> win)); GtkWidget * vbox, * hbox; vbox = dialog_get_content_area (info); gchar * boccup[5] = {"Random for the initial cell only", "Random cell by cell", "Completely random", "Successively", "Alternatively"}; gchar * occup[5] = {"Sites are filled randomly in the initial cell only,\n" " then the initial cell is simply replicated.", "Sites are filled randomly for each cell, cell by cell separately.", "Sites are filled randomly for the entire network,\n" " the final crystal is considered as a whole.", "Sites are filled successively: all object(s) A, then all object(s) B ... ", "Sites are filled alternatively: object A, object B, object A ..."}; GtkWidget * occ_but[5]; int i; for (i=0; i<5; i++) { hbox = create_hbox(0); occp[i].a = this_proj -> id; occp[i].b = i; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); #ifdef GTK4 occ_but[i] = check_button (boccup[i], -1, 25, FALSE, G_CALLBACK(toggle_occ), & occp[i]); if (i) { gtk_check_button_set_group ((GtkCheckButton *)occ_but[i], (GtkCheckButton *)occ_but[0]); } #else if (! i) { occ_but[i] = radio_button (boccup[i], -1, 25, FALSE, G_CALLBACK(toggle_occ), & occp[i]); } else { occ_but[i] = gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON(occ_but[0])); add_container_child (CONTAINER_BUT, occ_but[i], markup_label(boccup[i], -1, 25, 0.0, 0.5)); } #endif if (i) g_signal_connect (G_OBJECT(occ_but[i]), "toggled", G_CALLBACK(toggle_occ), & occp[i]); #ifdef GTK4 gtk_button_set_has_frame (GTK_BUTTON(occ_but[i]), FALSE); #endif add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, occ_but[i], FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (occup[i], 200, -1, 0.5, 0.5), FALSE, FALSE, 50); } i = cbuilder -> occupancy; #ifdef GTK4 gtk_check_button_set_active (GTK_CHECK_BUTTON(occ_but[i]), TRUE); #else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(occ_but[i]), TRUE); #endif hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button ("Allow overlapping", -1, 25, cbuilder -> overlapping, G_CALLBACK(toggle_overlap), (gpointer)cbuilder), FALSE, FALSE, 0); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); gchar * overlap = "Instead of ensuring that sites are filled by a single object,\n" "this allows object(s) to share the same crystalline position. \n" "The option above describes how filled and empty positions alternate."; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (overlap, 200, -1, 0.5, 0.5), FALSE, FALSE, 50); show_the_widgets (info); run_this_gtk_dialog (info, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn GtkWidget * builder_win (project * this_proj, gpointer data) \brief create crystal builder window \param this_proj the target project \param data the associated data pointer */ GtkWidget * builder_win (project * this_proj, gpointer data) { int i, j; gchar * str = (! this_proj -> natomes) ? g_strdup_printf ("Crystal builder - %s", this_proj -> name) : g_strdup_printf ("Crystal builder"); builder_edition * cbuilder = this_proj -> modelgl -> builder_win; GtkWidget * win = create_win (str, this_proj -> modelgl -> win, FALSE, FALSE); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, win, vbox); cbuilder -> bh_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cbuilder -> bh_box, FALSE, FALSE, 0); for (i=0; i<2; i++) { cbuilder -> bv_box[i] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bh_box, cbuilder -> bv_box[i], FALSE, FALSE, 0); } // Crystal system GtkWidget * hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Crystal system:", 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> cs_combo = create_combo(); for (i=0; i<7;i++) combo_text_append (cbuilder -> cs_combo, crystal_sytems[i]); gtk_combo_box_set_active (GTK_COMBO_BOX(cbuilder -> cs_combo), 0); gtk_widget_set_size_request (cbuilder -> cs_combo, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> cs_combo, FALSE, FALSE, 0); g_signal_connect (G_OBJECT(cbuilder -> cs_combo), "changed", G_CALLBACK(set_cs), (gpointer)cbuilder); // Bravais lattice cbuilder -> bl_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], cbuilder -> bl_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, markup_label("Bravais lattice:", 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> bl_combo = create_bl_combo (0, (gpointer)cbuilder); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> bl_box, cbuilder -> bl_combo, FALSE, FALSE, 0); cbuilder -> ltc_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, markup_label("Lattice constraints: ", 150, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", latt_info[get_crystal_id (1)]); cbuilder -> ltc_cons = markup_label(str, 150, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> ltc_box, cbuilder -> ltc_cons, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[0], cbuilder -> ltc_box, FALSE, FALSE, 5); // cbuilder -> bv_img = gtk_image_new_from_file (bravais_img[get_bravais_img_id(1)]); // add_box_child_start (GTK_ORIENTATION_VERTICAL, cbuilder -> bv_box[1], cbuilder -> bv_img, FALSE, FALSE, 5); // Space group cbuilder -> sg_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cbuilder -> sg_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, markup_label("Space group:", 150, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkTreeModel * model = sg_combo_tree (0, 0); cbuilder -> sg_combo = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> sg_combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> sg_combo), renderer, "text", 0, NULL); g_signal_connect (G_OBJECT(cbuilder -> sg_combo), "changed", G_CALLBACK(set_sg), data); gtk_widget_set_size_request (cbuilder -> sg_combo, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> sg_box, cbuilder -> sg_combo, FALSE, FALSE, 0); gtk_combo_box_set_active (GTK_COMBO_BOX(cbuilder -> sg_combo), 0); GList * cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(cbuilder -> sg_combo)); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cbuilder -> sg_combo), cell_list -> data, "markup", 0, NULL); } // Space group option cbuilder -> so_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, cbuilder -> so_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, markup_label("Settings:", 150, -1, 0.0, 0.5), FALSE, FALSE, 5); model = so_combo_tree (cbuilder -> cell.sp_group); cbuilder -> so_combo = gtk_combo_box_new_with_model (model); g_object_unref (model); renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> so_combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> so_combo), renderer, "text", 0, NULL); gtk_widget_set_size_request (cbuilder -> so_combo, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, cbuilder -> so_box, cbuilder -> so_combo, FALSE, FALSE, 0); gtk_combo_box_set_active (GTK_COMBO_BOX(cbuilder -> so_combo), 0); widget_set_sensitive (cbuilder -> so_combo, 0); g_signal_connect (G_OBJECT(cbuilder -> so_combo), "changed", G_CALLBACK(set_so), data); cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(cbuilder -> so_combo)); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cbuilder -> so_combo), cell_list -> data, "markup", 0, NULL); } for (i=0; i<3; i++) { cbuilder -> cell.cextra[i] = 1; for (j=0; j<3; j++) { cbuilder -> pointers[i][j].a = this_proj -> id; cbuilder -> pointers[i][j].b = i; cbuilder -> pointers[i][j].c = j; } } if (cbuilder -> cell.sp_group) get_origin (cbuilder -> cell.sp_group); // Lattice parameters hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Lattice parameters:", 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> lattice_box = create_vbox (BSEP); GtkTreeModel * lmodel = la_combo_tree (); cbuilder -> la_combo = gtk_combo_box_new_with_model (lmodel); g_object_unref (lmodel); renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (cbuilder -> la_combo), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (cbuilder -> la_combo), renderer, "text", 0, NULL); gtk_widget_set_size_request (cbuilder -> la_combo, 150, 25); g_signal_connect (G_OBJECT(cbuilder -> la_combo), "changed", G_CALLBACK(set_lattice), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> la_combo, FALSE, FALSE, 0); gtk_combo_box_set_active (GTK_COMBO_BOX(cbuilder -> la_combo), 0); cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(cbuilder -> la_combo)); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(cbuilder -> la_combo), cell_list -> data, "markup", 0, NULL); } hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> lattice_box, FALSE, FALSE, 50); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Cell(s):", 150, -1, 0.0, 0.5), FALSE, FALSE, 5); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * ax_cell[3]; for (i=0; i<3; i++) { ax_cell[i] = spin_button (G_CALLBACK(add_cryst_cell), cbuilder -> cell.cextra[i], 1, 1000, 1, 0, 100, & cbuilder -> pointers[i][0]); str = g_strdup_printf ("%s x ", box_prop[0][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 50, -1, 1.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ax_cell[i], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (" Wrap all atoms in the unit cell after building", -1, -1, FALSE, G_CALLBACK(set_wr), (gpointer)cbuilder), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button (" Show/hide clones after building", -1, -1, FALSE, G_CALLBACK(set_shc), (gpointer)cbuilder), FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); this_proj -> modelgl -> search_widg[7] = allocate_atom_search (this_proj -> id, INSERT, 7, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Add object(s):", 150, -1, 0.0, 0.5), FALSE, FALSE, 5); cbuilder -> add_combo = create_action_combo (5, this_proj); gtk_widget_set_size_request (cbuilder -> add_combo, 110, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cbuilder -> add_combo, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button ("Occupancy", IMG_STOCK, DPROPERTIES, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(adjust_occupancy), this_proj), FALSE, FALSE, 5); GtkWidget * cbscroll = create_scroll (vbox, 400, 200, GTK_SHADOW_NONE); add_container_child (CONTAINER_SCR, cbscroll, create_atoms_tree (this_proj -> modelgl -> search_widg[7], this_proj, 0)); hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 5); cbuilder -> pbut = create_button ((this_proj -> natomes) ? "Build (new project)" : "Build", IMG_STOCK, APPLY, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(apply_build), GINT_TO_POINTER(this_proj -> id)); add_box_child_end (hbox, cbuilder -> pbut, FALSE, FALSE, 5); GtkWidget * but = create_button ("Close", IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_build), GINT_TO_POINTER(this_proj -> id)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); add_gtk_close_event (win, G_CALLBACK(delete_build), GINT_TO_POINTER(this_proj -> id)); return win; } /*! \fn void prepare_crystal_builder (gpointer data) \brief create the crystal builder \param data the associated data pointer */ void prepare_crystal_builder (gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); if (this_proj -> modelgl -> builder_win == NULL) { // close_edit (NULL, GINT_TO_POINTER(this_proj -> id)); prepare_atom_edition (data, FALSE); this_proj -> modelgl -> builder_win = g_malloc0(sizeof*this_proj -> modelgl -> builder_win); this_proj -> modelgl -> builder_win -> cell.box = g_malloc0(sizeof*this_proj -> modelgl -> builder_win -> cell.box); this_proj -> modelgl -> builder_win -> win = builder_win (this_proj, data); } show_the_widgets (this_proj -> modelgl -> builder_win -> win); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create the crystal build window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data) \brief create the crystal build window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data) #endif { prepare_crystal_builder (data); } Atomes-GNU-1.1.14/src/opengl/edit/cbuild_edit.h000066400000000000000000000102261457665371200211160ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cbuild_edit.h * @short Function declarations for the crystal builder * @author Sébastien Le Roux */ /* * This header file: 'cbuild_edit.h' * * Contains: - Function declarations for the crystal builder */ #ifndef CBUILD_EDIT_H_ #define CBUILD_EDIT_H_ #include "global.h" #include typedef struct crystal_data crystal_data; struct crystal_data { int objects; int spec; double * z; int ** lot; int ** at_type; int * nsps; int * at_by_object; int * pos_by_object; double * occupancy; gboolean overlapping; int ** sites; gboolean shared_sites; gboolean with_holes; gboolean * holes; vec3_t * insert; vec3_t ** coord; vec3_t ** position; }; extern int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader); extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern gchar * groups[230]; extern gchar * hmsymbols[230]; extern dint t_box[9]; extern double tmp_box[2][3]; extern double tmp_vect[3][3]; extern char * vect_name[3]; extern char * vect_comp[3]; extern char * box_p[2]; extern char * box_prop[2][3]; extern atom_search * insert_search; extern gboolean test_vol (double box[2][3], double vect[3][3]); extern G_MODULE_EXPORT void update_vect (GtkEntry * entry, gpointer data); extern G_MODULE_EXPORT void update_box (GtkEntry * entry, gpointer data); extern double get_value_from_pos (gchar * pos); extern double get_val_from_wyckoff (gchar * pos, gchar * wval); extern crystal_data * allocate_crystal_data (int objects, int species); extern crystal_data * free_crystal_data (crystal_data * cryst); extern gboolean adjust_object_occupancy (crystal_data * cryst, int occupying, int tot_cell); #ifdef GTK4 extern G_MODULE_EXPORT void to_update_box (GtkEditable * widg, gpointer data); extern G_MODULE_EXPORT void to_update_vect (GtkEditable * widg, gpointer data); #else extern G_MODULE_EXPORT gboolean to_update_box (GtkWidget * widg, GdkEventFocus * event, gpointer data); extern G_MODULE_EXPORT gboolean to_update_vect (GtkWidget * widg, GdkEventFocus * event, gpointer data); #endif extern gchar * replace_markup (char * init, char * key, char * rep); extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern space_group * read_sg_xml_file (const char * filetoread); extern GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int na); extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern GtkWidget * create_action_combo (int id, project * this_proj); extern void prepare_atom_edition (gpointer data, gboolean visible); extern void clean_all_trees (atom_search * asearch, project * this_proj); extern void prepare_opengl_menu_bar (glwin * view); extern void allocatoms (project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern void set_img_lights (project * this_proj, image * img); extern void image_init_spec_data (image * img, project * this_proj, int nsp); extern void glwin_init_spec_data (project * this_proj, int nspec); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); extern void shift_it (vec3_t shift, int refresh, int proj); extern G_MODULE_EXPORT void close_edit (GtkWidget * widg, gpointer data); extern int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); #endif Atomes-GNU-1.1.14/src/opengl/edit/cbuild_info.c000066400000000000000000000463571457665371200211350ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cbuild_info.c * @short Functions to create the space group information dialog * @author Sébastien Le Roux */ /* * This file: 'cbuild_info.c' * * Contains: * - The functions to create the space group information dialog * * List of functions: gchar * get_bravais (int spg); gchar * get_frac (float val); void get_wyck_char (float val, int ax, int bx); void get_extra_val (float val, int ax); void get_wyck_names (space_group * spg, int i, int j); void set_wisible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); static void fill_wyckoff_model (GtkTreeStore * store, space_group * spg); G_MODULE_EXPORT void set_so_info (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void show_sg_info (GtkWidget * but, gpointer data); GtkWidget * create_wyckoff_tree (space_group * spg); GtkWidget * create_setting_info (space_group * spg, int sid); GtkWidget * create_wyck_pts_info (space_group * spg, int sid); */ #include "global.h" #include "interface.h" #include "glview.h" #include "cbuild_edit.h" extern int get_crystal_id (int spg); extern int get_bravais_img_id (int spg); extern gchar * frac_string (gchar * init); extern gchar * get_num_string (gchar * str); extern gchar * get_so_string (space_group * spg, int id); extern GtkTreeModel * so_combo_tree (space_group * spg); extern gchar * tmp_pos; extern gchar * latt_info[7]; GtkWidget * info_hsbox; GtkWidget * info_vs; GtkWidget * wypts_vbox; GtkWidget * info_wyck_pts; GtkWidget * info_wyck_scroll; GtkWidget * info_wyck_tree; gchar * wnpos[3] = {NULL, NULL, NULL}; /*! \fn gchar * get_bravais (int spg) \brief retrieve the space group bravais lattice \param spg the target space group id */ gchar * get_bravais (int spg) { if (groups[spg-1][0] == 'A' || groups[spg-1][0] == 'C') { return "Base-centered"; } else if (groups[spg-1][0] == 'F') { return "Face-centered"; } else if (groups[spg-1][0] == 'I') { return "Body-centered"; } else if (groups[spg-1][0] == 'P') { return "Primitive"; } else if (groups[spg-1][0] == 'R') { return "Rhombohedral"; } else { return NULL; } } /*! \fn gchar * get_frac (float val) \brief get string for value \param val the target value */ gchar * get_frac (float val) { float vallist[12] = {1.0, 1.0/2.0, 1.0/4.0, 3.0/4.0, 1.0/8.0, 3.0/8.0, 5.0/8.0, 7.0/8.0, 1.0/3.0, 2.0/3.0, 1.0/6.0, 5.0/6.0}; gchar * charlist[12] = {"1", "1/2", "1/4", "3/4", "1/8", "3/8", "5/8", "7/8", "1/3", "2/3", "1/6", "5/6"}; int i; for (i=0; i<12; i++) { if (fabs(val) - vallist[i] == 0.0) return g_strdup_printf ("%s", charlist[i]); } return NULL; } /*! \fn void get_wyck_char (float val, int ax, int bx) \brief convert wyckoff value to string \param val the target value \param ax axis id, x = 0, y = 1, z = 2 \param bx axis label 0 = "x", 1 = "y", 2 = "z" */ void get_wyck_char (float val, int ax, int bx) { if (wnpos[ax]) { if (fabs(val) == 1.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s+%s", wnpos[ax], vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("%s-%s", wnpos[ax], vect_comp[bx]); } } else if (val != 0.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s+%s%s", wnpos[ax], get_frac(val), vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("%s-%s%s", wnpos[ax], get_frac(val), vect_comp[bx]); } } } else { if (fabs(val) == 1.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s", vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("-%s", vect_comp[bx]); } } else if (val != 0.0) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s%s", get_frac(val), vect_comp[bx]); } else { wnpos[ax] = g_strdup_printf ("-%s%s", get_frac(val), vect_comp[bx]); } } } } /*! \fn void get_extra_val (float val, int ax) \brief convert wyckoff extra value to string \param val the target value \param ax axis id, x = 0, y = 1, z = 2 */ void get_extra_val (float val, int ax) { if (val) { if (wnpos[ax]) { if (val > 0.0) { wnpos[ax] = g_strdup_printf ("%s+%s", wnpos[ax], get_frac(val)); } else { wnpos[ax] = g_strdup_printf ("%s-%s", wnpos[ax], get_frac(val)); } } else { float v = (val > 0.0) ? val : 1.0 + val; v = (v == 1.0) ? 0.0 : v; if (v != 0.0) wnpos[ax] = g_strdup_printf ("%s", get_frac(v)); } } } /*! \fn void get_wyck_names (space_group * spg, int i, int j) \brief get the name of this wyckoff position \param spg the target space group \param i the wyckoff position id \param j the multiplicity for this wyckoff position */ void get_wyck_names (space_group * spg, int i, int j) { int k, l; double spgpos[3][4]; mat4_t wpos; for (k=0; k<3; k++) { tmp_pos = g_strdup_printf ("%s", spg -> wyckoff[i].pos[j][k]); for (l=0; l<3; l++) { spgpos[k][l] = get_val_from_wyckoff (vect_comp[l], spg -> wyckoff[i].pos[j][k]); } if (tmp_pos) { spgpos[k][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spgpos[k][3] = 0.0; } } wpos = mat4 (spgpos[0][0], spgpos[0][1], spgpos[0][2], spgpos[0][3], spgpos[1][0], spgpos[1][1], spgpos[1][2], spgpos[1][3], spgpos[2][0], spgpos[2][1], spgpos[2][2], spgpos[2][3], 0.0, 0.0, 0.0, 1.0); if (i == spg -> numw - 1) m4_print (wpos); wpos = m43_mul(spg -> wyck_origin, wpos); for (k=0; k<3; k++) { if (wnpos[k]) { g_free (wnpos[k]); wnpos[k] = NULL; } } get_wyck_char (wpos.m00, 0, 0); get_wyck_char (wpos.m10, 0, 1); get_wyck_char (wpos.m20, 0, 2); get_extra_val (wpos.m30, 0); get_wyck_char (wpos.m01, 1, 0); get_wyck_char (wpos.m11, 1, 1); get_wyck_char (wpos.m21, 1, 2); get_extra_val (wpos.m31, 1); get_wyck_char (wpos.m02, 2, 0); get_wyck_char (wpos.m12, 2, 1); get_wyck_char (wpos.m22, 2, 2); get_extra_val (wpos.m32, 2); for (k=0; k<3; k++) if (! wnpos[k]) wnpos[k] = g_strdup_printf ("0"); } /*! \fn static void fill_wyckoff_model (GtkTreeStore * store, space_group * spg) \brief fill wyckoff position tree store \param store the tree store to fill \param spg the target space group */ static void fill_wyckoff_model (GtkTreeStore * store, space_group * spg) { GtkTreeIter wlevel; GtkTreeIter mlevel; int i, j, k; gchar * str; gchar * strw[3]; if (spg) { for (i=0; i numw; i++) { gtk_tree_store_append (store, & wlevel, NULL); str = g_strdup_printf ("%d", spg -> wyckoff[i].multi); gtk_tree_store_set (store, & wlevel, 0, 1, 1, i+1, 2, str, 3, spg -> wyckoff[i].let, 4, spg -> wyckoff[i].site, -1); g_free (str); for (j=0; j wyckoff[i].multi; j++) { get_wyck_names (spg, i, j); gtk_tree_store_append (store, & mlevel, & wlevel); for (k= 0; k<3; k++) strw[k] = frac_string (wnpos[k]); str = g_strdup_printf ("(%s,%s,%s)", strw[0], strw[1], strw[2]); for (k= 0; k<3; k++) g_free (strw[k]); gtk_tree_store_set (store, & mlevel, 0, 0, 5, str, -1); g_free (str); } } } } /*! \fn void set_wisible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer, if visible then add or not pango markup \param col the tree view column \param renderer the cell renderer \param mod the tree model \param iter the tree iter \param data the associated data pointer */ void set_wisible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & j, -1); if ((j && (i > 1 && i < 5)) || (!j && i==5)) { gchar * str = NULL; gtk_tree_model_get (mod, iter, i, & str, -1); g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } gtk_cell_renderer_set_visible (renderer, (i<5) ? j : ! j); } /*! \fn GtkWidget * create_wyckoff_tree (space_group * spg) \brief create wyckoff position tree \param spg the target space group */ GtkWidget * create_wyckoff_tree (space_group * spg) { int i; GtkTreeViewColumn * wcol[6]; GtkCellRenderer * wcell[6]; gchar * witle[6] = {" ", "Id.", "Multiplicity", "Letter", "Symmetry", "Coordinates"}; gchar * wtype[6]={"text", "text", "text", "text", "text", "text"}; GType w_type[6] = {G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING}; GtkTreeStore * wmodel = gtk_tree_store_newv (6, w_type); GtkWidget * wtree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(wmodel)); for (i=0; i<6; i++) { wcell[i] = gtk_cell_renderer_text_new(); wcol[i] = gtk_tree_view_column_new_with_attributes(witle[i], wcell[i], wtype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(wtree), wcol[i]); gtk_tree_view_column_set_cell_data_func (wcol[i], wcell[i], set_wisible, GINT_TO_POINTER(i), NULL); if (!i) gtk_tree_view_column_set_visible (wcol[i], FALSE); } fill_wyckoff_model (wmodel, spg); g_object_unref (wmodel); return wtree; } /*! \fn GtkWidget * create_setting_info (space_group * spg, int sid) \brief create setting information label \param spg the target space group \param sid the setting id */ GtkWidget * create_setting_info (space_group * spg, int sid) { gchar * sxyz[3]; int i; for (i=0; i<3; i++) { sxyz[i] = g_strdup_printf ("%s", spg -> settings[sid].pos[i]); sxyz[i] = frac_string (sxyz[i]); } gchar * str = g_strdup_printf ("(%s,%s,%s)", sxyz[0], sxyz[1], sxyz[2]); for (i=0; i<3; i++) g_free (sxyz[i]); GtkWidget * label = markup_label(str, 90, -1, 0.0, 0.5); g_free (str); return label; } /*! \fn GtkWidget * create_wyck_pts_info (space_group * spg, int sid) \brief create wyckoff label \param spg the target space group \param sid the setting id */ GtkWidget * create_wyck_pts_info (space_group * spg, int sid) { int i, j; gchar * str; gchar * sxyz[3]; if (spg -> settings[sid].nump > 1) { for (i=0; i settings[sid].nump; i++) { for (j=0; j<3; j++) { sxyz[j] = g_strdup_printf ("%s", spg -> settings[sid].points[i][j]); sxyz[j] = frac_string (sxyz[j]); } if (! i) { str = g_strdup_printf ("+(%s,%s,%s)", sxyz[0], sxyz[1], sxyz[2]); } else { str = g_strdup_printf ("%s\t+(%s,%s,%s)", str, sxyz[0], sxyz[1], sxyz[2]); } for (j=0; j<3; j++) g_free (sxyz[j]); } return markup_label(str, -1, -1, 0.5, 0.5); } else { return NULL; } } /*! \fn G_MODULE_EXPORT void set_so_info (GtkComboBox * box, gpointer data) \brief change space group origin \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_so_info (GtkComboBox * box, gpointer data) { builder_edition * cbuilder = (builder_edition *)data; int i = gtk_combo_box_get_active (box); gtk_combo_box_set_active (GTK_COMBO_BOX(cbuilder -> so_combo), i); if (i > -1) { info_vs = destroy_this_widget (info_vs); info_vs = create_setting_info (cbuilder -> cell.sp_group, i); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, info_vs, FALSE, FALSE, 5); show_the_widgets (info_vs); info_wyck_pts = destroy_this_widget(info_wyck_pts); info_wyck_pts = create_wyck_pts_info (cbuilder -> cell.sp_group, i); if (info_wyck_pts) { add_box_child_start (GTK_ORIENTATION_VERTICAL, wypts_vbox, info_wyck_pts, FALSE, FALSE, 0); show_the_widgets (wypts_vbox); } if (info_wyck_scroll) { info_wyck_tree = destroy_this_widget (info_wyck_tree); info_wyck_tree = create_wyckoff_tree (cbuilder -> cell.sp_group); add_container_child (CONTAINER_SCR, info_wyck_scroll, info_wyck_tree); show_the_widgets (info_wyck_scroll); } } } /*! \fn G_MODULE_EXPORT void show_sg_info (GtkWidget * but, gpointer data) \brief show space group information dialog callback \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_sg_info (GtkWidget * but, gpointer data) { tint * id = (tint *) data; space_group * spg = get_project_by_id(id -> a) -> modelgl -> builder_win -> cell.sp_group; gchar * str = g_strdup_printf ("%s info", groups[spg -> id-1]); str = substitute_string (str, "", NULL); str = substitute_string (str, "", NULL); GtkWidget * info = dialogmodal (str, GTK_WINDOW(get_project_by_id(id -> a) -> modelgl -> builder_win -> win)); GtkWidget * vbox, * hbox; vbox = dialog_get_content_area (info); GtkWidget * ivbox[2]; GtkWidget * ihbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ihbox, FALSE, FALSE, 0); int xsize = 150; int i; for (i=0; i<2; i++) { ivbox[i] = create_vbox(i); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ihbox, ivbox[i], FALSE, FALSE, 0); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Space group: ", xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", groups[spg -> id-1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Number: ", xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%d", spg -> id); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Hermman-Mauguin: ", xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", spg -> hms); str = g_strdup_printf ("%s", get_num_string(str)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Crystal system: ", xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", spg -> bravais); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); str = get_bravais(spg -> id); if (str) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Bravais lattice: ", xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Lattice constraints: ", xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); str = g_strdup_printf ("%s", latt_info[get_crystal_id (spg -> id)]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 150, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[0], hbox, FALSE, FALSE, 5); GtkWidget * bvimg = gtk_image_new_from_file (bravais_img[get_bravais_img_id(spg -> id)]); #ifdef GTK4 gtk_widget_set_size_request (bvimg, 200, 200); gtk_widget_set_hexpand (bvimg, TRUE); gtk_widget_set_vexpand (bvimg, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, ivbox[1], bvimg, FALSE, FALSE, 5); info_hsbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info_hsbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, markup_label("Setting(s): ", xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); if (spg -> nums > 1) { GtkTreeModel * model = so_combo_tree (spg); GtkWidget * sbox = gtk_combo_box_new_with_model (model); g_object_unref (model); GtkCellRenderer * renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (sbox), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (sbox), renderer, "text", 0, NULL); gtk_widget_set_size_request (sbox, 150, 25); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, sbox, FALSE, FALSE, 5); gtk_combo_box_set_active (GTK_COMBO_BOX(sbox), 0); g_signal_connect (G_OBJECT(sbox), "changed", G_CALLBACK(set_so_info), get_project_by_id(id -> a) -> modelgl -> builder_win); GList * cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(sbox)); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(sbox), cell_list -> data, "markup", 0, NULL); } } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, markup_label(get_so_string (spg, 0), 50, -1, 0.0, 0.5), FALSE, FALSE, 5); } info_vs = create_setting_info (spg, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, info_hsbox, info_vs, FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Wyckoff position(s): ", xsize, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); wypts_vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wypts_vbox, FALSE, FALSE, 5); info_wyck_pts = create_wyck_pts_info (spg, 0); if (info_wyck_pts) add_box_child_start (GTK_ORIENTATION_VERTICAL, wypts_vbox, info_wyck_pts, FALSE, FALSE, 0); info_wyck_scroll = create_scroll (NULL, 400, 200, GTK_SHADOW_NONE); info_wyck_tree = create_wyckoff_tree (spg); add_container_child (CONTAINER_SCR, info_wyck_scroll, info_wyck_tree); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info_wyck_scroll, FALSE, FALSE, 5); show_the_widgets (info); run_this_gtk_dialog (info, G_CALLBACK(run_destroy_dialog), NULL); } Atomes-GNU-1.1.14/src/opengl/edit/cbuild_sg.c000066400000000000000000000662721457665371200206110ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cbuild_sg.c * @short Functions to read space group data from XML files * @author Sébastien Le Roux */ /* * This file: 'cbuild_sg.c' * * Contains: * - The functions to read space group data from XML files * * List of functions: int get_this_group_data (space_group * spg, xmlNodePtr racine); space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader); space_group * read_sg_xml_file (const char * filetoread); */ #include "global.h" #include "cbuild_edit.h" gchar * groups[230] = {"P1", "P-1", "P2", "P21", "C2", "Pm", "Pc", "Cm", "Cc", "P2/m", "P21/m", "C2/m", "P2/c", "P21/c", "C2/c", "P222", "P2221", "P21212", "P212121", "C2221", "C222", "F222", "I222", "I212121", "Pmm2", "Pmc21", "Pcc2", "Pma2", "Pca21", "Pnc2", "Pmn21", "Pba2", "Pna21", "Pnn2", "Cmm2", "Cmc21", "Ccc2", "Amm2", "Aem2", "Ama2", "Aea2", "Fmm2", "Fdd2", "Imm2", "Iba2", "Ima2", "Pmmm", "Pnnn", "Pccm", "Pban", "Pmma", "Pnna", "Pmna", "Pcca", "Pbam", "Pccn", "Pbcm", "Pnnm", "Pmmn", "Pbcn", "Pbca", "Pnma", "Cmcm", "Cmce", "Cmmm", "Cccm", "Cmme", "Ccce", "Fmmm", "Fddd", "Immm", "Ibam", "Ibca", "Imma", "P4", "P41", "P42", "P43", "I4", "I41", "P-4", "I-4", "P4/m", "P42/m", "P4/n", "P42/n", "I4/m", "I41/a", "P422", "P4212", "P4122", "P41212", "P4222", "P42212", "P4322", "P43212", "I422", "I4122", "P4mm", "P4bm", "P42cm", "P42nm", "P4cc", "P4nc", "P42mc", "P42bc", "I4mm", "I4cm", "I41md", "I41cd", "P-42m", "P-42c", "P-421m", "P-421c", "P-4m2", "P-4c2", "P-4b2", "P-4n2", "I-4m2", "I-4c2", "I-42m", "I-42d", "P4/mmm", "P4/mcc", "P4/nbm", "P4/nnc", "P4/mbm", "P4/mnc", "P4/nmm", "P4/ncc", "P42/mmc", "P42/mcm", "P42/nbc", "P42/nnm", "P42/mbc", "P42/mnm", "P42/nmc", "P42/ncm", "I4/mmm", "I4/mcm", "I41/amd", "I41/acd", "P3", "P31", "P32", "R3", "P-3", "R-3", "P312", "P321", "P3112", "P3121", "P3212", "P3221", "R32", "P3m1", "P31m", "P3c1", "P31c", "R3m", "R3c", "P-31m", "P-31c", "P-3m1", "P-3c1", "R-3m", "R-3c", "P6", "P61", "P65", "P62", "P64", "P63", "P-6", "P6/m", "P63/m", "P622", "P6122", "P6522", "P6222", "P6422", "P6322", "P6mm", "P6cc", "P63cm", "P63mc", "P-6m2", "P-6c2", "P-62m", "P-62c", "P6/mmm", "P6/mcc", "P63/mcm", "P63/mmc", "P23", "F23", "I23", "P213", "I213", "Pm-3", "Pn-3", "Fm-3", "Fd-3", "Im-3", "Pa-3", "Ia-3", "P432", "P4232", "F432", "F4132", "I432", "P4332", "P4132", "I4132", "P-43m", "F-43m", "I-43m", "P-43n", "F-43c", "I-43d", "Pm-3m", "Pn-3n", "Pm-3n", "Pn-3m", "Fm-3m", "Fm-3c", "Fd-3m", "Fd-3c", "Im-3m", "Ia-3d"}; gchar * hmsymbols[230] = {"P 1", "P -1", "P 1 2 1", "P 1 21 1", "C 1 2 1", "P 1 m 1", "P 1 c 1", "C 1 m 1", "C 1 c 1", "P 1 2/m 1", "P 1 21/m 1", "C 1 2/m 1", "P 1 2/c 1", "P 1 21/c 1", "C 1 2/c 1", "P 2 2 2", "P 2 2 21", "P 21 21 2", "P 21 21 21", "C 2 2 21", "C 2 2 2", "F 2 2 2", "I 2 2 2", "I 21 21 21", "P m m 2", "P m c 21", "P c c 2", "P m a 2", "P c a 21", "P n c 2", "P m n 21", "P b a 2", "P n a 21", "P n n 2", "C m m 2", "C m c 21", "C c c 2", "A m m 2", "A e m 2", "A m a 2", "A e a 2", "F m m 2", "F d d 2", "I m m 2", "I b a 2", "I ma 2", "P 2/m 2/m 2/m", "P 2/n 2/n 2/n", "P 2/c 2/c 2/m", "P 2/b 2/a 2/n", "P 21 /m 2/m 2/a", "P 2/n 21/n 2/a", "P 2/m 2/n 21/a", "P 21/c 2/c 2/a", "P 21/b 21/a 2/m", "P 21/c 21/c 2/n", "P 2/b 21/c 21/m", "P 21/n 21/n 2/m", "P 21/m 21/m 2/n", "P 21/b 2/c 21/n", "P 21/b 21/c 21/a", "P 21/n 21/m 21/a", "C 2/m 2/c 21/m", "C 2/m 2/c 21/e", "C 2/m 2/m 2/m", "C 2/c 2/c 2/m", "C 2/m 2/m 2/e", "C 2/c 2/c 2/e", "F 2/m 2/m 2/m", "F 2/d 2/d 2/d", "I 2/m 2/m 2/m", "I 2/b 2/a 2/m", "I 21/b 21/c 21/a", "I 21/m 21/m 21/a", "P 4", "P 41", "P 42", "P 43", "I 4", "I 41", "P -4", "I -4", "P 4/m", "P 42/m", "P 4/n", "P 42/n", "I 4/m", "I 41/a", "P 4 2 2", "P 4 21 2", "P 41 2 2", "P 41 21 2", "P 42 2 2", "P 42 21 2", "P 43 2 2", "P 43 21 2", "I 4 2 2", "I 41 2 2", "P 4 m m", "P 4 b m", "P 42 c m", "P 42 n m", "P 4 c c", "P 4 n c", "P 42 m c", "P 42 b c", "I 4 m m", "I 4 c m", "I 41 m d", "I 41 c d", "P -4 2 m", "P -4 2 c", "P -4 21 m", "P -4 21 c", "P -4 m 2", "P -4 c 2", "P -4 b 2", "P -4 n 2", "I -4 m 2", "I -4 c 2", "I -4 2 m", "I -4 2 d", "P 4/m 2/m 2/m", "P 4/m 2/c 2/c", "P 4/n 2/b 2/m", "P 4/n 2/n 2/c", "P 4/m 21/b 2/m", "P 4/m 21/b 2/m", "P 4/n 21/m 2/m", "P 4/n 21/c 2/c", "P 42/m 2/m 2/c", "P 42/m 2/c 2/m", "P 42/n 2/b 2/c", "P 42/n 2/n 2/m", "P 42/m 21/b 2/c", "P 42/m 21/n 2/m", "P 42/n 21/m 2/c", "P 42/n 21/c 2/m", "I 4/m 2/m 2/m", "I 4/m 2/c 2/m", "I 41/a 2/m 2/d", "I 41/a 2/c 2/d", "P 3", "P 31", "P 32", "R 3", "P -3", "R -3", "P 3 1 2", "P 3 2 1", "P 31 1 2", "P 31 2 1", "P 32 1 2", "P 32 2 1", "R 3 2", "P 3 m 1", "P 3 1 m", "P 3 c 1", "P 3 1 c", "R 3 m", "R 3 c", "P -3 1 2/m", "P -3 1 2/c", "P -3 2/m 1", "P -3 2/c 1", "R -3 2/m", "R -3 2/c", "P 6", "P 61", "P 65", "P 62", "P 64", "P 63", "P -6", "P 6/m", "P 63/m", "P 6 2 2", "P 61 2 2", "P 65 2 2", "P 62 2 2", "P 64 2 2", "P 63 2 2", "P 6 m m", "P 6 c c", "P 63 c m", "P 63 m c", "P -6 m 2", "P -6 c 2", "P -6 2 m", "P -6 2 c", "P 6/m 2/m 2/m", "P 6/m 2/c 2/c", "P 63/m 2/c 2/m", "P 63/m 2/m 2/c", "P 2 3", "F 2 3", "I 2 3", "P 21 3", "I 21 3", "P 2/m -3", "P 2/n -3", "F 2/m -3", "F 2/d -3", "I 2/m -3", "P 21/a -3", "I 21/a -3", "P 4 3 2", "P 42 3 2", "F 4 3 2", "F 41 3 2", "I 4 3 2", "P 43 3 2", "P 41 3 2", "I 41 3 2", "P -4 3 m", "F -4 3 m", "I -4 3 m", "P -4 3 n", "F -4 3 c", "I -4 3 d", "P 4/m -3 2/m", "P 4/n -3 2/n", "P 42/m -3 2/n", "P 42/n -3 2/m", "F 4/m -3 2/m", "F 4/m -3 2/c", "F 41/d -3 2/m", "F 41/d -3 2/c", "I 4/m -3 2/m", "I 41/a -3 2/d"}; /*! \fn space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader) \brief clean space group and corresponding XML data \param doc the XML doc pointer to free \param reader the XML reader to free */ space_group * clean_sgl_data (xmlDoc * doc, xmlTextReaderPtr reader) { xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return NULL; } /*! \fn int get_this_group_data (space_group * spg, xmlNodePtr racine) \brief retrieve space group data \param spg the space group pointer to fill \param racine the XML node root */ int get_this_group_data (space_group * spg, xmlNodePtr racine) { xmlNodePtr node, num_node; xmlNodePtr the_setting, the_point; xmlNodePtr sp_node, ps_node, pp_node; xmlAttrPtr s_node, p_node; int val; int j, k; node = findnode (racine -> children, "settings"); if (node == NULL) return 0; s_node = node -> properties; if (s_node == NULL) return 0; while (s_node) { num_node = s_node -> children; if (num_node == NULL) return 0; if (g_strcmp0 ("num",(char *)s_node -> name) == 0) { val = (int) atof((char *)xmlNodeGetContent(num_node)); } s_node = s_node -> next; } if (! val) return 0; spg -> nums = val; spg -> settings = g_malloc0(spg -> nums*sizeof*spg -> settings); node = node -> children; if (node == NULL) return 0; j = 0; for (sp_node = node; sp_node; sp_node = sp_node -> next) { if (sp_node -> type == XML_ELEMENT_NODE) { s_node = sp_node -> properties; if (s_node == NULL) return 0; while (s_node) { the_setting = s_node -> children; if (the_setting == NULL) return 0; if (g_strcmp0 ("name",(char *)s_node -> name) == 0) { spg -> settings[j].name = g_strdup_printf ("%s", (char *)xmlNodeGetContent(the_setting)); } else if (g_strcmp0 ("origin",(char *)s_node -> name) == 0) { spg -> settings[j].origin = (int)atof((char *)xmlNodeGetContent(the_setting)); } else if (g_strcmp0 ("x",(char *)s_node -> name) == 0) { spg -> settings[j].pos[0] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(the_setting)); } else if (g_strcmp0 ("y",(char *)s_node -> name) == 0) { spg -> settings[j].pos[1] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(the_setting)); } else if (g_strcmp0 ("z",(char *)s_node -> name) == 0) { spg -> settings[j].pos[2] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(the_setting)); } s_node = s_node -> next; } ps_node = findnode (sp_node -> children, "points"); if (ps_node) { p_node = ps_node -> properties; if (p_node == NULL) return 0; while (p_node) { num_node = p_node -> children; if (num_node == NULL) return 0; if (g_strcmp0 ("num",(char *)p_node -> name) == 0) { val = (int) atof((char *)xmlNodeGetContent(num_node)); } p_node = p_node -> next; } if (! val) return 0; spg -> settings[j].nump = val; spg -> settings[j].points = g_malloc(val*sizeof*spg -> settings[j].points); ps_node = ps_node -> children; if (ps_node == NULL) return 0; k = 0; for (pp_node = ps_node; pp_node; pp_node = pp_node->next) { if (pp_node -> type == XML_ELEMENT_NODE) { s_node = pp_node -> properties; if (s_node == NULL) return 0; spg -> settings[j].points[k] = g_malloc(3*sizeof*spg -> settings[j].points[k]); while (s_node) { the_point = s_node -> children; if (the_point == NULL) return 0; if (g_strcmp0 ("x",(char *)s_node -> name) == 0) { spg -> settings[j].points[k][0] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(the_point)); } else if (g_strcmp0 ("y",(char *)s_node -> name) == 0) { spg -> settings[j].points[k][1] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(the_point)); } else if (g_strcmp0 ("z",(char *)s_node -> name) == 0) { spg -> settings[j].points[k][2] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(the_point)); } s_node = s_node -> next; } k ++; } } } j ++; } } return 1; } /*! \fn space_group * read_sg_xml_file (const char * filetoread) \brief read space group data from XML file \param filetoread the file to read */ space_group * read_sg_xml_file (const char * filetoread) { int i, j; const xmlChar sgl[8]="sg-xml"; xmlDoc * doc; xmlTextReaderPtr reader; xmlNodePtr racine, node, num_node; xmlNodePtr cp_node, wp_node, wc_node; xmlNodePtr the_wyck, the_pos; xmlAttrPtr c_node, w_node, p_node; space_group * spg = g_malloc0(sizeof*spg); reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return NULL; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return 0; racine = xmlDocGetRootElement(doc); if (g_strcmp0 ((char *)(racine -> name), (char *)sgl) != 0) return clean_sgl_data (doc, reader); spg = g_malloc0(sizeof*spg); node = findnode (racine -> children, "space-group"); if (node == NULL) return clean_sgl_data (doc, reader); spg -> name = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(node)); node = findnode (racine -> children, "sg-num"); if (node == NULL) return clean_sgl_data (doc, reader); spg -> id = (int) atof((char *)xmlNodeGetContent(node)); node = findnode (racine -> children, "hm-symbol"); if (node == NULL) return clean_sgl_data (doc, reader); spg -> hms = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(node)); node = findnode (racine -> children, "bravais"); if (node == NULL) return clean_sgl_data (doc, reader); spg -> bravais = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(node)); // Settings if (!get_this_group_data (spg, racine)) return clean_sgl_data (doc, reader); node = findnode(racine -> children, "wyckoff"); if (node == NULL) return clean_sgl_data (doc, reader); c_node = node -> properties; if (c_node == NULL) return clean_sgl_data (doc, reader); while (c_node) { num_node = c_node -> children; if (num_node == NULL) return clean_sgl_data (doc, reader); if (g_strcmp0 ("num",(char *)c_node -> name) == 0) { spg -> numw = (int) atof((char *)xmlNodeGetContent(num_node)); } c_node = c_node -> next; } if (! spg -> numw) return clean_sgl_data (doc, reader); spg -> wyckoff = g_malloc0(spg -> numw*sizeof*spg -> wyckoff); i = 0; node = node -> children; if (node == NULL) return clean_sgl_data (doc, reader); for (cp_node = node; cp_node; cp_node = cp_node->next) { if (cp_node -> type == XML_ELEMENT_NODE) { w_node = cp_node -> properties; if (w_node == NULL) return clean_sgl_data (doc, reader); while (w_node) { the_wyck = w_node -> children; if (the_wyck == NULL) return clean_sgl_data (doc, reader); if (g_strcmp0 ("mul",(char *)w_node -> name) == 0) { spg -> wyckoff[i].multi = (int)atof((char *)xmlNodeGetContent(the_wyck)); } else if (g_strcmp0 ("let",(char *)w_node -> name) == 0) { spg -> wyckoff[i].let = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(the_wyck)); } else if (g_strcmp0 ("site",(char *)w_node -> name) == 0) { spg -> wyckoff[i].site = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(the_wyck)); } w_node = w_node -> next; } spg -> wyckoff[i].pos = g_malloc(spg -> wyckoff[i].multi*sizeof*spg -> wyckoff[i].pos); wp_node = cp_node -> children; if (wp_node == NULL) return clean_sgl_data (doc, reader); j = 0; for (wc_node = wp_node; wc_node; wc_node = wc_node->next) { if (wc_node -> type == XML_ELEMENT_NODE) { p_node = wc_node -> properties; if (p_node == NULL) return clean_sgl_data (doc, reader); spg -> wyckoff[i].pos[j] = g_malloc(3*sizeof*spg -> wyckoff[i].pos[j]); while (p_node) { the_pos = p_node -> children; if (the_pos == NULL) return clean_sgl_data (doc, reader); if (g_strcmp0 ("x",(char *)p_node -> name) == 0) { spg -> wyckoff[i].pos[j][0] = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(the_pos)); } else if (g_strcmp0 ("y",(char *)p_node -> name) == 0) { spg -> wyckoff[i].pos[j][1] = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(the_pos)); } else if (g_strcmp0 ("z",(char *)p_node -> name) == 0) { spg -> wyckoff[i].pos[j][2] = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(the_pos)); } p_node = p_node -> next; } j ++; } } i ++; } } xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return spg; } } Atomes-GNU-1.1.14/src/opengl/edit/cell_cut.c000066400000000000000000000770651457665371200204520ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cell_cut.c * @short Functions to create the 'slab cutting' tab of the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_cut.c' * * Contains: * - The functions to create the 'slab cutting' tab of the cell edition window * * List of functions: G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void create_slab_info (project * this_proj); void slab_alpha_has_changed (gpointer data, GLfloat v); void invert_selection (project * this_proj); G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_slab_property (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_slab_type (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_slab_alpha (GtkRange * range, gpointer data); G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data); G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data); GtkWidget * prepare_slab_box (int sid, project * this_proj); GtkWidget * create_slab_param_combo (int sid, project * this_proj); GtkWidget * cut_in_model (project * this_proj); */ #include "cell_edit.h" #include "atom_edit.h" extern G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); /*! \fn G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data) \brief passivate button callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void setup_passivate (GtkButton * but, gpointer data) { project * this_proj = (project *)data; gchar * str = g_strdup_printf ("Cell edition - %s: surface passivation", this_proj -> name); GtkWidget * dial = dialogmodal (prepare_for_title(str), GTK_WINDOW(this_proj -> modelgl -> cell_win -> win)); g_free (str); this_proj -> modelgl -> search_widg[8] -> passivating = TRUE; GtkWidget * vbox = dialog_get_content_area (dial); GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_NONE); add_container_child (CONTAINER_SCR, scrollsets, action_tab (6, this_proj)); widget_set_sensitive (this_proj -> modelgl -> search_widg[8] -> object_box, 0); gtk_widget_set_size_request (scrollsets, 760, 350); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, scrollsets, FALSE, FALSE, 10); GtkWidget * info = markup_label ("Select any object(s) A to be replaced when creating the slab, then select the object(s) B to insert in its place.\n" "When cutting into the model any bond to A with the new surface, will be passivated by B", -1, -1, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, info, FALSE, FALSE, 20); show_the_widgets (dial); if (! this_proj -> modelgl -> search_widg[8] -> in_selection) { gtk_combo_box_set_active (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[8] -> atom_box), 0); set_filter_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[8] -> atom_box), this_proj -> modelgl -> search_widg[8]); } else { gtk_combo_box_set_active (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[8] -> atom_box), 0); set_spec_changed (GTK_COMBO_BOX(this_proj -> modelgl -> search_widg[8] -> atom_box), this_proj -> modelgl -> search_widg[8]); } g_signal_connect (G_OBJECT(dial), "response", G_CALLBACK(destroy_this_dialog), NULL); dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); this_proj -> modelgl -> search_widg[8] -> passivating = FALSE; } /*! \fn void create_slab_info (project * this_proj) \brief create slab information widget \param this_proj the target project */ void create_slab_info (project * this_proj) { this_proj -> modelgl -> cell_win -> slab_info = destroy_this_widget (this_proj -> modelgl -> cell_win -> slab_info); this_proj -> modelgl -> cell_win -> slab_info = create_vbox (BSEP); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info, hbox, FALSE, FALSE, 5); gchar * str; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("- Volume: ", 100, -1, 0.0, 0.5), FALSE, FALSE, 0); str = g_strdup_printf ("%f", this_proj -> modelgl -> cell_win -> slab_vol); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 90, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Å3", 20, -1, 0.5, 0.5), FALSE, FALSE, 0); g_free (str); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("- Atom(s) in slab: ", 100, -1, 0.0, 0.5), FALSE, FALSE, 0); str = g_strdup_printf ("%d", this_proj -> modelgl -> cell_win -> slab_atoms); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); int i; for (i=0; i nspec; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info, hbox, FALSE, FALSE, 0); str = g_strdup_printf ("\t - %s atom(s) in slab: ", this_proj -> chemistry -> label[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); str = g_strdup_printf ("%d", this_proj -> modelgl -> cell_win -> slab_lot[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); } add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_info_box, this_proj -> modelgl -> cell_win -> slab_info, FALSE, FALSE, 0); show_the_widgets (this_proj -> modelgl -> cell_win -> slab_info); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data) \brief set slab property toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_property (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_slab_property (GtkToggleButton * but, gpointer data) \brief set slab property toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_property (GtkToggleButton * but, gpointer data) #endif { dint * dat = (dint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; gboolean status; #ifdef GTK4 status = gtk_check_button_get_active (but); #else status = gtk_toggle_button_get_active (but); #endif switch (dat -> b) { case 0: view -> cell_win -> slab_show = status; break; case 1: view -> cell_win -> slab_pbc = status; break; case 2: view -> cell_win -> slab_act = status; break; case 3: view -> cell_win -> slab_out = status; break; case 4: view -> cell_win -> slab_passivate = status; widget_set_sensitive (view -> cell_win -> passivate, view -> cell_win -> slab_passivate); if (view -> cell_win -> slab_passivate) { prepare_atom_edition (& view -> colorp[0][0], FALSE); view -> search_widg[8] = allocate_atom_search (dat -> a, REPLACE, 8, get_project_by_id(dat -> a) -> nspec); view -> search_widg[8] -> status = 2; setup_passivate (NULL, get_project_by_id(dat -> a)); } else { g_free (view -> search_widg[8]); view -> search_widg[8] = NULL; if (! view -> atom_win -> visible) { g_free (view -> atom_win); view -> atom_win = NULL; } } break; } if (view -> cell_win -> slab_show) { view -> create_shaders[SLABS] = TRUE; } else { cleaning_shaders (view, SLABS); } update (view); } /*! \fn GtkWidget * prepare_slab_box (int sid, project * this_proj) \brief create slab parameters widget box \param sid the type of slab \param this_proj the target project */ GtkWidget * prepare_slab_box (int sid, project * this_proj) { gchar * option[6]={"- Position the center of the slab: ", // 6, 7, 8 "- Size of the slab: ", // 9, 10, 11 "- Size of the slab: ", // 12, 13 "- Size of the slab: ", // 14 "- Parallelepiped Angles: ", // 15, 16, 17 "- Slab rotation: "}; // 18, 19, 20 GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(option[sid], 200, -1, 0.0, 0.5), FALSE, FALSE, 5); int i; switch (sid) { case 0: for (i=6; i<9; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 1: for (i=9; i<12; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 2: for (i=12; i<14; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 3: add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, 14), FALSE, FALSE, 0); break; case 4: for (i=15; i<18; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; case 5: for (i=18; i<21; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); break; } return vbox; } /*! \fn G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data) \brief change slab option combo \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_option (GtkComboBox * box, gpointer data) { project * this_proj = (project *)data; int i, j; i = gtk_combo_box_get_active (box); for (j=0; j<6; j++) { gtk_widget_hide (this_proj -> modelgl -> cell_win -> slab_box[j]); } switch (i) { case 0: gtk_widget_show (this_proj -> modelgl -> cell_win -> slab_box[0]); break; case 1: gtk_widget_show (this_proj -> modelgl -> cell_win -> slab_box[1+this_proj -> modelgl -> cell_win -> slab_type]); break; default: if (this_proj -> modelgl -> cell_win -> slab_type) { gtk_widget_show (this_proj -> modelgl -> cell_win -> slab_box[5]); } else { gtk_widget_show (this_proj -> modelgl -> cell_win -> slab_box[i+2]); } break; } } /*! \fn GtkWidget * create_slab_param_combo (int sid, project * this_proj) \brief create slab parameters combo widget \param sid the slab type \param this_proj the target project */ GtkWidget * create_slab_param_combo (int sid, project * this_proj) { GtkWidget * combo = create_combo (); gchar * options[4] = {"Position", "Size", "Angles", "Rotation"}; int i, j, k; i = 4 - sid; for (j=0; j modelgl -> cell_win -> slab_hbox[i]); this_proj -> modelgl -> cell_win -> slab_type = i = gtk_combo_box_get_active (box); gtk_widget_show (this_proj -> modelgl -> cell_win -> slab_hbox[i]); gtk_combo_box_set_active (GTK_COMBO_BOX(this_proj -> modelgl -> cell_win -> slab_param[i]), 0); set_slab_option (GTK_COMBO_BOX(this_proj -> modelgl -> cell_win -> slab_param[i]), this_proj); if (this_proj -> modelgl -> n_shaders[SLABS][0]) { this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } /*! \fn void slab_alpha_has_changed (gpointer data, GLfloat v) \brief change slab opacity \param data the associated data pointer \param v the new opacity value */ void slab_alpha_has_changed (gpointer data, GLfloat v) { glwin * view = (glwin *)data; view -> cell_win -> slab_alpha = v; if (view -> n_shaders[SLABS][0]) { view -> create_shaders[SLABS] = TRUE; update (view); } } /*! \fn G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change slab opactiy callback - scoll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_slab_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { slab_alpha_has_changed (data, (GLfloat) value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_slab_alpha (GtkRange * range, gpointer data) \brief change slab opactiy callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_slab_alpha (GtkRange * range, gpointer data) { slab_alpha_has_changed (data, (GLfloat) gtk_range_get_value (range)); } /*! \fn void invert_selection (project * this_proj) \brief invert atom(s) selection \param this_proj the target project */ void invert_selection (project * this_proj) { save_all_selections (this_proj -> modelgl, 0); int i, j, k; if (this_proj -> modelgl -> mode == EDITION) { // Invert the saved coordinates as well double ** saved_c = NULL; i = this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected; if (i < this_proj -> natomes) { saved_c = g_malloc0 ((this_proj -> natomes - i)*sizeof*saved_c); k = 0; for (j=0; j natomes; j++) { if (! this_proj -> atoms[0][j].pick[0]) { saved_c[k] = allocdouble (3); saved_c[k][0] = this_proj -> atoms[0][j].x; saved_c[k][1] = this_proj -> atoms[0][j].y; saved_c[k][2] = this_proj -> atoms[0][j].z; k ++; } } } g_free (this_proj -> modelgl -> saved_coord[1]); this_proj -> modelgl -> saved_coord[1] = NULL; if (saved_c) { this_proj -> modelgl -> saved_coord[1] = g_malloc0 ((this_proj -> natomes - i)*sizeof*this_proj -> modelgl -> saved_coord[1]); for (j=0; j natomes - i; j++) { this_proj -> modelgl -> saved_coord[1][j] = duplicate_double(3, saved_c[j]); } g_free (saved_c); } } for (i=0; i natomes; i++) { process_selected_atom (this_proj, this_proj -> modelgl, i, 0, 0, 0); } update_all_selections (this_proj -> modelgl, 0); if (this_proj -> modelgl -> mode == EDITION) { this_proj -> modelgl -> baryc[1] = get_bary (this_proj, 1); } int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, this_proj); } /*! \fn G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data) \brief select / unselect atom(s) in slab callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_this_slab (GtkButton * but, gpointer data) { project * this_proj = (project *)data; this_proj -> modelgl -> cell_win -> cut_this_slab = TRUE; opengl_project_changed (this_proj -> id); selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif save_all_selections (this_proj -> modelgl, 0); create_slab_lists (this_proj); update_all_selections (this_proj -> modelgl, 0); if (this_proj -> modelgl -> cell_win -> slab_act) invert_selection (this_proj); this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data) \brief cut this slab callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cut_this_slab (GtkButton * but, gpointer data) { project * this_proj = (project *)data; int is_out, i; if (this_proj -> modelgl-> cell_win -> slab_atoms) { if (! this_proj -> modelgl -> cell_win -> slab_passivate || do_we_have_objects_in_selection(this_proj, this_proj -> modelgl -> search_widg[8], FALSE)) { is_out = this_proj -> modelgl -> cell_win -> slab_out; if (this_proj -> modelgl -> search_widg[8]) this_proj -> modelgl -> search_widg[8] -> passivating = FALSE; gchar * infom[2] = {"Cut and modify model ?\n This is irreversible !", "Cut and create new project ?"}; if (ask_yes_no("Cut", infom[is_out], GTK_MESSAGE_WARNING, this_proj -> modelgl -> cell_win -> win)) { this_proj -> modelgl -> cell_win -> cut_this_slab = TRUE; if (is_out) preserve_ogl_selection (this_proj -> modelgl); opengl_project_changed (this_proj -> id); selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif save_all_selections (this_proj -> modelgl, 0); create_slab_lists (this_proj); update_all_selections (this_proj -> modelgl, 0); is_selected = 1; if (this_proj -> modelgl -> cell_win -> slab_act) invert_selection (this_proj); switch (is_out) { case 0: // Modify project if (this_proj -> modelgl -> cell_win -> slab_passivate) { if (this_proj -> modelgl -> atom_win) { #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif this_proj -> modelgl -> cell_win -> slab_passivate = FALSE; to_passivate_using_the_objects (this_proj, this_proj -> modelgl -> search_widg[8]); this_proj -> modelgl -> cell_win -> slab_passivate = TRUE; } } else { #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif } break; case 1: // Create new project if (this_proj -> modelgl -> cell_win -> slab_passivate) { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif } #ifdef GTK4 edit_in_new_project (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else edit_in_new_project (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif if (this_proj -> modelgl -> cell_win -> slab_passivate) { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); active_project_changed (nprojects-1); active_glwin -> cell_win = g_malloc0(sizeof*active_glwin -> cell_win); active_glwin -> cell_win -> slab_lot = allocint (active_project -> nspec); active_glwin -> cell_win -> slab_type = this_proj -> modelgl -> cell_win ->slab_type; active_glwin -> cell_win -> slab_pbc = this_proj -> modelgl -> cell_win ->slab_pbc; active_glwin -> cell_win -> slab_act = this_proj -> modelgl -> cell_win -> slab_act; active_glwin -> cell_win -> slab_passivate = TRUE; for (i=0; i<21; i++) active_glwin -> cell_win -> cparam[i] = this_proj -> modelgl -> cell_win -> cparam[i]; prepare_atom_edition (& active_glwin -> colorp[0][0], FALSE); active_glwin -> search_widg[8] = allocate_atom_search (activep, REPLACE, 8, this_proj -> modelgl -> search_widg[8] -> todo_size); active_glwin -> search_widg[8] -> status = 2; active_glwin -> search_widg[8] -> object = this_proj -> modelgl -> search_widg[8] -> object; active_glwin -> search_widg[8] -> filter = this_proj -> modelgl -> search_widg[8] -> filter; active_glwin -> search_widg[8] -> in_selection = this_proj -> modelgl -> search_widg[8] -> in_selection; active_glwin -> search_widg[8] -> todo_size = this_proj -> modelgl -> search_widg[8] -> todo_size; active_glwin -> search_widg[8] -> todo = duplicate_int (active_glwin -> search_widg[8] -> todo_size, this_proj -> modelgl -> search_widg[8] -> todo); active_glwin -> atom_win -> to_be_inserted[3] = duplicate_atomic_object (this_proj -> modelgl -> atom_win -> to_be_inserted[3]); atomic_object * tmp_a, * tmp_b; tmp_a = this_proj -> modelgl -> atom_win -> to_be_inserted[3]; tmp_b = active_glwin -> atom_win -> to_be_inserted[3]; while (tmp_a -> next) { tmp_b -> next = duplicate_atomic_object (tmp_a -> next); tmp_b -> next -> prev = tmp_b; tmp_b = tmp_b -> next; tmp_a = tmp_a -> next; } opengl_project_changed (active_project -> id); #ifdef GTK4 select_unselect_atoms (NULL, NULL, & active_glwin -> colorp[0][0]); #else select_unselect_atoms (NULL, & active_glwin -> colorp[0][0]); #endif save_all_selections (active_glwin, 0); active_glwin -> cell_win -> cut_this_slab = TRUE; create_slab_lists (active_project); update_all_selections (active_glwin, 0); if (active_glwin -> cell_win -> slab_act) invert_selection (active_project); #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif active_glwin -> cell_win -> slab_passivate = FALSE; to_passivate_using_the_objects (active_project, active_glwin -> search_widg[8]); active_glwin -> cell_win -> slab_passivate = TRUE; g_free (active_glwin -> search_widg[8]); active_glwin -> search_widg[8] = NULL; if (! active_glwin -> atom_win -> visible) { g_free (active_glwin -> atom_win); active_glwin -> atom_win = NULL; } g_free (active_glwin -> cell_win); active_glwin -> cell_win = NULL; } break; } #ifdef GTK4 // select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][0]); #else // select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][0]); #endif if (is_out) restore_ogl_selection (this_proj -> modelgl); this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } else { show_info ("Nothing to passivate the bond(s) to be broken:\nDeactivate passivating or adjust option(s) properly !", 0, this_proj -> modelgl -> cell_win -> win); } } else { show_info ("The slab is empty, nothing to do !", 0, this_proj -> modelgl -> cell_win -> win); } } /*! \fn GtkWidget * cut_in_model (project * this_proj) \brief create the cut slab tab \param this_proj the target project */ GtkWidget * cut_in_model (project * this_proj) { int i; GtkWidget * layout; i = (this_proj -> nspec > 3) ? 15 * (this_proj -> nspec - 3) : 0; #ifdef G_OS_WIN32 layout = create_layout (800, 510+i); #else layout = create_layout (800, 420+i); #endif GtkWidget * box = create_vbox (BSEP); layout_add_widget (layout, box, 10, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label("Cut slab in the simulation box: ", -1, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button ("Show/Hide slab", 25, -1, this_proj -> modelgl -> cell_win -> slab_show, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[0]), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button ("Use PBC to select atoms", 25, -1, this_proj -> modelgl -> cell_win -> slab_pbc, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[1]), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button ("Invert cutting (all but the slab)", 25, -1, this_proj -> modelgl -> cell_win -> slab_act, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[2]), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button ("Export in new project", 25, -1, this_proj -> modelgl -> cell_win -> slab_out, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[3]), FALSE, FALSE, 0); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 10); GtkWidget * hox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hox, FALSE, FALSE, 0); GtkWidget * combo = create_combo (); gchar * type[3] = {"Parallelepiped", "Cylinder", "Sphere"}; for (i=0; i<3; i++) combo_text_append (combo, type[i]); gtk_combo_box_set_active (GTK_COMBO_BOX(combo), this_proj -> modelgl -> cell_win -> slab_type); g_signal_connect (G_OBJECT (combo), "changed", G_CALLBACK(set_slab_type), this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, markup_label("- Shape of the slab: ", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, combo, FALSE, FALSE, 5); // Passivation hox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hox, FALSE, FALSE, 100); GtkWidget * but = check_button ("Passivate surface", -1, -1, this_proj -> modelgl -> cell_win -> slab_passivate, G_CALLBACK(set_slab_property), & this_proj -> modelgl -> cell_win -> slab_pointer[4]); // widget_set_sensitive (but, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, but, FALSE, FALSE, 20); this_proj -> modelgl -> cell_win -> passivate = create_button ("Options", IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(setup_passivate), this_proj); widget_set_sensitive (this_proj -> modelgl -> cell_win -> passivate, this_proj -> modelgl -> cell_win -> slab_passivate); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hox, this_proj -> modelgl -> cell_win -> passivate, FALSE, FALSE, 0); GtkWidget * hhbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hhbox, FALSE, FALSE, 5); GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, vbox, FALSE, FALSE, 0); this_proj -> modelgl -> cell_win -> slab_opts = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_proj -> modelgl -> cell_win -> slab_opts, FALSE, FALSE, 5); for (i=0; i<3; i++) { this_proj -> modelgl -> cell_win -> slab_hbox[i] = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_opts, this_proj -> modelgl -> cell_win -> slab_hbox[i], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> modelgl -> cell_win -> slab_hbox[i], markup_label("- Select option to tweak: ", 200, -1, 0.0, 0.5), FALSE, FALSE, 0); this_proj -> modelgl -> cell_win -> slab_param[i] = create_slab_param_combo (i, this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> modelgl -> cell_win -> slab_hbox[i], this_proj -> modelgl -> cell_win -> slab_param[i], FALSE, FALSE, 5); } for (i=0; i<6; i++) { this_proj -> modelgl -> cell_win -> slab_box[i] = prepare_slab_box (i, this_proj); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> cell_win -> slab_opts, this_proj -> modelgl -> cell_win -> slab_box[i], FALSE, FALSE, 5); } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, vbox, FALSE, FALSE, 40); GtkWidget * vvbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, vvbox, FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, markup_label("Slab information:", -1, -1, 0.0, 0.5), FALSE, FALSE, 10); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("- Opacity: ", 100, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_hscale (0.0, 1.0, 0.01, this_proj -> modelgl -> cell_win -> slab_alpha, GTK_POS_LEFT, 2, 150, G_CALLBACK(set_slab_alpha), G_CALLBACK(scroll_set_slab_alpha), this_proj -> modelgl), FALSE, FALSE, 10); this_proj -> modelgl -> cell_win -> slab_info_box = create_vbox (BSEP); create_slab_info (this_proj); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, this_proj -> modelgl -> cell_win -> slab_info_box, FALSE, FALSE, 5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button ("Select atom(s) in this slab !", IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(select_this_slab), this_proj), FALSE, FALSE, 100); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("or", 100, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_button ("Cut this slab now !", IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(cut_this_slab), this_proj), FALSE, FALSE, 30); show_the_widgets (layout); return layout; } Atomes-GNU-1.1.14/src/opengl/edit/cell_density.c000066400000000000000000000126511457665371200213240ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cell_density.c * @short Functions to create the 'density adjustment' tab in the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_density.c' * * Contains: * - The functions to create the 'density adjustment' tab in the cell edition window * * List of functions: void display_density (cell_edition * cell, double vol, double dens, double adens); G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_rescaling (GtkToggleButton * but, gpointer data); GtkWidget * adjust_density_tab (project * this_proj); */ #include "cell_edit.h" /*! \fn void display_density (cell_edition * cell, double vol, double dens, double adens) \brief create density information widgets \param cell the target cell edition \param vol the volume \param dens the density \param adens the atomic density */ void display_density (cell_edition * cell, double vol, double dens, double adens) { cell -> density = destroy_this_widget (cell -> density); cell -> density = create_vbox (BSEP); GtkWidget * hbox; gchar * pname[3]= {"Volume:", "Mass density:", "Number density:"}; gchar * punit[3]= {"Å3", "g/cm3", "atom/Å3"}; double val[3]; val[0] = vol; val[1] = dens; val[2] = adens; int i; gchar * str; for (i=0; i<3; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, cell -> density, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(pname[i], 120, -1, 0.0, 0.5), FALSE, FALSE, 100); str = g_strdup_printf ("%f", val[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 120, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(punit[i], 20, -1, 0.5, 0.5), FALSE, FALSE, 10); } add_box_child_start (GTK_ORIENTATION_VERTICAL, cell -> density_box, cell -> density, FALSE, FALSE, 10); show_the_widgets (cell -> density); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data) \brief homogeneous rescaling toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rescaling (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_rescaling (GtkToggleButton * but, gpointer data) \brief homogeneous rescaling toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rescaling (GtkToggleButton * but, gpointer data) #endif { glwin * view = (glwin *)data; #ifdef GTK4 view -> cell_win -> homo_density = gtk_check_button_get_active (but); #else view -> cell_win -> homo_density = gtk_toggle_button_get_active (but); #endif widget_set_sensitive (view -> cell_win -> shift_box[1], view -> cell_win -> homo_density); } /*! \fn GtkWidget * adjust_density_tab (project * this_proj) \brief create the density tab \param this_proj the target project */ GtkWidget * adjust_density_tab (project * this_proj) { GtkWidget * layout = create_layout (350, 400); GtkWidget * vbox = create_vbox (BSEP); layout_add_widget (layout, vbox, 100, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Modify the density of the simulation box *: ", -1, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button ("Homogeneous rescaling **", -1, -1, this_proj -> modelgl -> cell_win -> homo_density, G_CALLBACK(set_rescaling), this_proj -> modelgl), FALSE, FALSE, 5); int i; for (i=3; i<6; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); this_proj -> modelgl -> cell_win -> density_box = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, this_proj -> modelgl -> cell_win -> density_box, FALSE, FALSE, 5); display_density (this_proj -> modelgl -> cell_win, this_proj -> cell.volume, this_proj -> cell.density, this_proj -> natomes/this_proj -> cell.volume); gchar * info[2] = {" * Visual information will be preserved, real bonding is likely to be modified.\n" " Bond properties should be re-calculated, if required bond cutoff should be updated.", "** Keep the ratios between the lattice vectors A, B and C like in the initial cell."}; for (i=0; i<2; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(info[i], -1, -1, 0.0, 0.5), FALSE, FALSE, 5); show_the_widgets (layout); return layout; } Atomes-GNU-1.1.14/src/opengl/edit/cell_edit.c000066400000000000000000000201571457665371200205720ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cell_edit.c * @short Functions to create the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_edit.c' * * Contains: * - The functions to create the cell edition window * * List of functions: G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_cell (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data); G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data); GtkWidget * cell_tab (int i, project * this_proj); GtkWidget * create_cell_notebook (project * this_proj, GtkWidget * vbox); GtkWidget * create_cell_edition_window (project * this_proj, gpointer data); */ #include "cell_edit.h" gchar * edit_names[7] = {"Wrap All Atoms in", "Shift Center", "Add Extra(s)", "Create Super-Cell", "Adjust Density", "Cut Slab", "PBC Pixels Debug"}; /*! \fn G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data) \brief close cell edition window and free the associated data pointers \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_cell_edit (GtkButton * but, gpointer data) { project * this_proj = (project *)data; int i; for (i=0; i<3; i++) this_proj -> modelgl -> cshift[i] = this_proj -> modelgl -> cell_win -> cparam[i]; this_proj -> modelgl -> cell_win -> win = destroy_this_widget (this_proj -> modelgl -> cell_win -> win); g_free (this_proj -> modelgl -> cell_win); this_proj -> modelgl -> cell_win = NULL; cleaning_shaders (this_proj -> modelgl, SLABS); update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data) \brief cell edition window close event callback GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_cell (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_cell (GtkWidget * widg, GdkEvent * event, gpointer data) \brief cell edition window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_cell (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_cell_edit (NULL, data); return FALSE; } /*! \fn GtkWidget * cell_tab (int i, project * this_proj) \brief create the 'i'th cell tab \param i the cell tab id \param this_proj the target project */ GtkWidget * cell_tab (int i, project * this_proj) { switch (i) { case 0: return shift_center_tab (this_proj); break; case 1: return add_extra_cell_tab (this_proj -> modelgl); break; case 2: return adjust_density_tab (this_proj); break; case 3: return cut_in_model (this_proj); break; #ifdef DEBUG default: return pixels_tab (this_proj); break; #else default: return NULL; break; #endif } } /*! \fn GtkWidget * create_cell_notebook (project * this_proj, GtkWidget * vbox) \brief create the cell edition notebook \param this_proj the target project \param vbox the GtkWidget sending the signal */ GtkWidget * create_cell_notebook (project * this_proj, GtkWidget * vbox) { GtkWidget * notebook = gtk_notebook_new (); gchar * str; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, TRUE, TRUE, 0); int i, j; gboolean doit; #ifdef DEBUG for (i=0; i<5; i ++) #else for (i=0; i<4; i ++) #endif { #ifdef DEBUG doit = (i == 4 && ! this_proj -> pix[0]) ? FALSE : TRUE; #else doit = TRUE; #endif if (doit) { j = (i < 2) ? i+1 : i+2; str = g_strdup_printf ("%s", edit_names[j]); gtk_notebook_insert_page (GTK_NOTEBOOK(notebook), cell_tab (i, this_proj), markup_label(str, -1, -1, 0.0, 0.5), i); if (i > 1) widget_set_sensitive (gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook), i), (this_proj -> steps) > 1 ? 0 : 1); g_free (str); } } show_the_widgets (notebook); return notebook; } /*! \fn GtkWidget * create_cell_edition_window (project * this_proj, gpointer data) \brief create the cell editon window \param this_proj the target project \param data the associated data pointer */ GtkWidget * create_cell_edition_window (project * this_proj, gpointer data) { gchar * str = g_strdup_printf ("Cell edition - %s", this_proj -> name); GtkWidget * win = create_win (str, this_proj -> modelgl -> win, FALSE, FALSE); g_free (str); GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, win, vbox); gtk_widget_set_size_request (vbox, 700 , -1); int i; for (i=0; i<3; i++) this_proj -> modelgl -> cell_win -> cparam[i] = this_proj -> modelgl -> cshift[i]; this_proj -> modelgl -> cell_win -> notebook = create_cell_notebook (this_proj, vbox); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button ("Close", IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_cell_edit), this_proj); add_box_child_end (hbox, but, FALSE, FALSE, 5); add_gtk_close_event (win, G_CALLBACK(close_cell), this_proj); return win; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create the cell edition window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data) \brief create the cell edition window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data) #endif { tint * id = (tint *) data; int i; project * this_proj = get_project_by_id(id -> a); if (this_proj -> modelgl -> cell_win == NULL) { this_proj -> modelgl -> cell_win = g_malloc0 (sizeof*this_proj -> modelgl -> cell_win); this_proj -> modelgl -> cell_win -> homo_density = TRUE; this_proj -> modelgl -> cell_win -> slab_alpha = 0.75; this_proj -> modelgl -> cell_win -> slab_lot = allocint (this_proj -> nspec); this_proj -> modelgl -> cell_win -> slab_pbc = this_proj -> cell.pbc; for (i=0; i<5; i++) { this_proj -> modelgl -> cell_win -> slab_pointer[i].a = id -> a; this_proj -> modelgl -> cell_win -> slab_pointer[i].b = i; } for (i=9; i<13; i++) this_proj -> modelgl -> cell_win -> cparam[i] = 5.0; for (i=13; i<15; i++) this_proj -> modelgl -> cell_win -> cparam[i] = 2.5; for (i=15; i<18; i++) this_proj -> modelgl -> cell_win -> cparam[i] = 90.0; this_proj -> modelgl -> cell_win -> win = create_cell_edition_window (this_proj, data); } show_the_widgets (this_proj -> modelgl -> cell_win -> win); for (i=1; i<6; i++) { if (i < 3) gtk_widget_hide (this_proj -> modelgl -> cell_win -> slab_hbox[i]); gtk_widget_hide (this_proj -> modelgl -> cell_win -> slab_box[i]); } int page = id -> b; gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> cell_win -> notebook), page); } Atomes-GNU-1.1.14/src/opengl/edit/cell_edit.h000066400000000000000000000061351457665371200205770ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cell_edit.h * @short Function declarations for the cell edition window * @author Sébastien Le Roux */ /* * This header file: 'cell_edit.h' * * Contains: - Function declarations for the cell edition window */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "glview.h" #include "glwindow.h" #ifndef CELL_EDIT_H_ #define CELL_EDIT_H_ extern gchar * axis[3]; extern char * box_prop[2][3]; extern void allocatoms (project * this_proj); extern void center_molecule (project * this_proj); extern gchar * edit_names[7]; extern gchar * mot[2][2]; extern GtkWidget * advanced_coord_properties (glwin * view, int page); extern gboolean run_distance_matrix (GtkWidget * widg, int calc, int up_ngb); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); extern void preserve_ogl_selection (glwin * view); extern void restore_ogl_selection (glwin * view); extern void create_slab_lists (project * this_proj); extern int is_selected; extern int selected_aspec; GtkWidget * create_cell_entries (project * this_proj, int i); GtkWidget * create_shift_box (project * this_proj); void display_density (cell_edition * cell, double vol, double dens, double adens); void shift_it (vec3_t shift, int refresh, int proj); void sens_superbut (project * this_proj); void invert_selection (project * this_proj); GtkWidget * shift_center_tab (project * this_proj); GtkWidget * add_extra_cell_tab (glwin * view); GtkWidget * supercell_tab (glwin * view); GtkWidget * adjust_density_tab (project * this_proj); GtkWidget * cut_in_model (project * this_proj); GtkWidget * pixels_tab (project * this_proj); extern void wrapping (glwin * view); extern G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void edition_win (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void edition_win (GtkWidget * widg, gpointer data); #endif extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); #endif Atomes-GNU-1.1.14/src/opengl/edit/cell_extra.c000066400000000000000000000077331457665371200207750ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cell_extra.c * @short Functions to create the 'add cell(s)' tab in the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_extra.c' * * Contains: * - The functions to create the 'add cell(s)' tab in the cell edition window * * List of functions: G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data); GtkWidget * add_extra_cell_tab (glwin * view); */ #include "cell_edit.h" /*! \fn G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data) \brief add cell callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_cell (GtkSpinButton * res, gpointer data) { tint * dat = (tint *)data; int i; project * this_proj = get_project_by_id (dat -> a); image * last = this_proj -> modelgl -> anim -> last -> img; i = max(last -> extra_cell[0], last -> extra_cell[1]); i = max(i, last -> extra_cell[2]); last -> p_depth /= (i+1); last -> extra_cell[dat -> b] = gtk_spin_button_get_value_as_int(res) - 1; i = max(last -> extra_cell[0], last -> extra_cell[1]); i = max(i, last -> extra_cell[2]); last -> p_depth *= (i+1); double fact = last -> p_depth*2.0 / last -> gfar; last -> gfar = last -> p_depth*2.0; last -> gnear *= fact; last -> zoom *= fact; init_default_shaders (this_proj -> modelgl); this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; if (this_proj -> modelgl -> n_shaders[SLABS][0]) this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); sens_superbut (this_proj); } /*! \fn GtkWidget * add_extra_cell_tab (glwin * view) \brief create the add cell(s) tab \param view the target glwin */ GtkWidget * add_extra_cell_tab (glwin * view) { GtkWidget * layout = create_layout (350, 150); GtkWidget * hbox = create_hbox (50); GtkWidget * vbox = create_vbox (BSEP); layout_add_widget (layout, hbox, 50, 50); int i; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("\tAdd extra cell(s):", -1, -1, 0.0, 0.5), FALSE, FALSE, 10); GtkWidget * hhbox; gchar * str; for (i=0; i<3; i++) { hhbox = create_hbox (0); view -> cell_win -> ax_cell[i] = spin_button (G_CALLBACK(add_cell), view -> anim -> last -> img -> extra_cell[i]+1, 1, 1000, 1, 0, 100, & view -> colorp[i][0]); str = g_strdup_printf ("%s x ", box_prop[0][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 40); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> cell_win -> ax_cell[i], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hhbox, FALSE, FALSE, 5); } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 50); view -> cell_win -> superbut = create_button ("Create super-cell", IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(super_cell_but), view); sens_superbut (get_project_by_id(view -> proj)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> cell_win -> superbut, FALSE, FALSE, 90); show_the_widgets (layout); return layout; } Atomes-GNU-1.1.14/src/opengl/edit/cell_pixel.c000066400000000000000000000167651457665371200210000ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cell_pixel.c * @short Functions to create the pixel debugging tab for the cell edition window \n This is only used when DEBUG option is activated at build time * @author Sébastien Le Roux */ /* * This file: 'cell_pixel.c' * * Contains: * - The functions to create the pixel debugging tab for the cell edition window This is only used when DEBUG option is activated at build time * * List of functions: void pix_info_ (int * na, int * nb, int * nc); void send_pix_info_ (int * p, int listp[27], int * ngb); void update_pix_table (project * this_proj); G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data); GtkWidget * create_css_label (gchar * str, int id); GtkWidget * attach_grid (project * this_proj, int init); GtkWidget * pixels_tab (project * this_proj); */ #ifdef DEBUG #include "cell_edit.h" /*! \fn void pix_info_ (int * na, int * nb, int * nc) \brief allocate pixel data pointer from Fortran90 \param na x size \param nb y size \param nc z size */ void pix_info_ (int * na, int * nb, int * nc) { active_project -> pix[0] = *na; active_project -> pix[1] = *nb; active_project -> pix[2] = *nc; active_project -> pixels = allocdint (active_project -> pix[0]*active_project -> pix[1]*active_project -> pix[2],27); } /*! \fn void send_pix_info_ (int * p, int listp[27], int * ngb) \brief retrieve pixel information from Fortran90 \param p the pixel id \param listp the neighbor list for pixel id \param ngb the number of neighbor for pixel id */ void send_pix_info_ (int * p, int listp[27], int * ngb) { int i; for (i=0; i<* ngb; i++) { active_project -> pixels[* p][i] = listp[i]; } } /*! \fn GtkWidget * create_css_label (gchar * str, int id) \brief create CSS label \param str the string \param id 0 = white, 1 = yellow */ GtkWidget * create_css_label (gchar * str, int id) { gchar * colo[2] = {"white", "yellow"}; gchar * backcol; if (id) { backcol = g_strdup_printf ("label#icolor {\n" " background-color: red;\n" " color: %s;\n}", colo[id]); } else { backcol = g_strdup_printf ("label#color {\n" " background-color: blue;\n" " color: %s;\n}", colo[id]); } provide_gtk_css (backcol); g_free (backcol); GtkWidget * lab = markup_label(str, 50, 50, 0.5, 0.5); gtk_widget_set_name (lab, (id) ? "icolor" : "color"); gtk_widget_show (lab); return lab; } /*! \fn GtkWidget * attach_grid (project * this_proj, int init) \brief create pixel grid \param this_proj the target project \param init the target pixel */ GtkWidget * attach_grid (project * this_proj, int init) { GtkWidget * table = gtk_grid_new (); gchar * str; gboolean actif; int i, j, k, l, m; l = init+1; for (i=0; i pix[1]; i++) { for (j=0; j pix[0]; j++) { actif = FALSE; for (k=0; k<27; k++) { if (l == this_proj -> pixels[this_proj -> actif_pix-1][k]) { actif = TRUE; } } if (l == this_proj -> actif_pix) { str = g_strdup_printf ("%d", l); m = 1; } else { str = g_strdup_printf ("%d", l); m = 0; } l ++; if (actif) { gtk_grid_attach (GTK_GRID (table), create_css_label(str, m), j, i, 1, 1); } else { gtk_grid_attach (GTK_GRID (table), markup_label(str, 50, 50, 0.5, 0.5), j, i, 1, 1); } g_free (str); } } gtk_widget_set_size_request (table, this_proj -> pix[0]*50, this_proj -> pix[1]*50); return table; } /*! \fn void update_pix_table (project * this_proj) \brief prepare pixel table widget \param this_proj the target project */ void update_pix_table (project * this_proj) { int i; int pix[3]; for (i=0; i<3; i++) { this_proj -> pix_tab[i] = destroy_this_widget (this_proj -> pix_tab[i]); } // Seed for bottom grid if (this_proj -> actif_pix <= this_proj -> pix[0]*this_proj -> pix[1]) { pix[0] = this_proj -> pix[0]*this_proj -> pix[1]*(this_proj -> pix[2]-1); } else { pix[0] = (this_proj -> actif_pix-1)/(this_proj -> pix[0]*this_proj -> pix[1]); pix[0] -= 1; pix[0] *= (this_proj -> pix[0]*this_proj -> pix[1]); } // Seed for pixel grid pix[1] = (this_proj -> actif_pix-1)/(this_proj -> pix[0]*this_proj -> pix[1]); pix[1] *= (this_proj -> pix[0]*this_proj -> pix[1]); // Seed for top grid if (this_proj -> actif_pix > this_proj -> pix[0]*this_proj -> pix[1]*(this_proj -> pix[2]-1)) { pix[2] = 0; } else { pix[2] = (this_proj -> actif_pix-1)/(this_proj -> pix[0]*this_proj -> pix[1]); pix[2] += 1; pix[2] *= (this_proj -> pix[0]*this_proj -> pix[1]); } for (i=0; i<3; i++) { this_proj -> pix_tab[i] = attach_grid (this_proj, pix[i]); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> pix_box, this_proj -> pix_tab[i], FALSE, FALSE, 20); } show_the_widgets (this_proj -> pix_box); } /*! \fn G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data) \brief set pixel id callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_pix (GtkEntry * res, gpointer data) { int id = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id (id); const gchar * m = entry_get_text (res); double v = atof(m); int p = (int)v; int n = this_proj-> pix[0] * this_proj -> pix[1] * this_proj -> pix[2]; if (p > 0 && p <= n) { this_proj -> actif_pix = p; } update_entry_int (res, this_proj -> actif_pix); update_pix_table (this_proj); } /*! \fn GtkWidget * pixels_tab (project * this_proj) \brief create the PBC pixels checking tab \param this_proj the target project */ GtkWidget * pixels_tab (project * this_proj) { GtkWidget * vbox = create_vbox (BSEP); GtkWidget * hbox = create_hbox (0); gchar * str = g_strdup_printf ("\tSelect pixel to check, from 1 to %d:", this_proj -> pix[0]*this_proj -> pix[1]*this_proj->pix[2]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, create_entry(G_CALLBACK(set_pix), 100, 15, FALSE, GINT_TO_POINTER(this_proj -> id)), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * scroll = create_scroll (vbox, 700, 350, GTK_SHADOW_ETCHED_IN); this_proj -> actif_pix = 1; this_proj -> pix_box = create_vbox (0); this_proj -> pix_tab[0] = this_proj -> pix_tab[1] = this_proj -> pix_tab[2] = NULL; update_pix_table (this_proj); add_container_child (CONTAINER_SCR, scroll, this_proj -> pix_box); return vbox; } #endif // DEBUG Atomes-GNU-1.1.14/src/opengl/edit/cell_shift.c000066400000000000000000000504001457665371200207540ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cell_shift.c * @short Functions to create the 'shift cell center' tab for the cell edition window * @author Sébastien Le Roux */ /* * This file: 'cell_shift.c' * * Contains: * - The functions to create the 'shift cell center' tab for the cell edition window * * List of functions: G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void modify_coordinates_in_lattice (project * this_proj, mat4_t * dlat, mat4_t * drec, int refresh, int density); void shift_it (vec3_t shift, int refresh, int proj); void adjust_it (int refresh, int proj); void shift_has_changed (gpointer data, double val); void wrapping (glwin * view); G_MODULE_EXPORT void set_shift (GtkEntry * res, gpointer data); G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data); G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void wrap_coord (GtkToggleButton * but, gpointer data); GtkWidget * create_cell_entries (project * this_proj, int i); GtkWidget * create_shift_box (project * this_proj); GtkWidget * shift_center_tab (project * this_proj); */ #include "cell_edit.h" /*! \fn void modify_coordinates_in_lattice (project * this_proj, mat4_t * dlat, mat4_t * drec, int refresh, int density) \brief modify atomic coordinates in lattice \param this_proj the target project \param dlat lattice vectors matrix \param drec reciprocal vectors matrix \param refresh refresh rendering data \param density 0= shift, 1 = density modification */ void modify_coordinates_in_lattice (project * this_proj, mat4_t * dlat, mat4_t * drec, int refresh, int density) { vec3_t pos; vec3_t res; int i, j; box_info * box; mat4_t lat, rec; if (! density) { box = & this_proj -> cell.box[0]; lat = mat4 (box -> vect[0][0], box -> vect[1][0], box -> vect[2][0], 0.0, box -> vect[0][1], box -> vect[1][1], box -> vect[2][1], 0.0, box -> vect[0][2], box -> vect[1][2], box -> vect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); rec = mat4 (box -> rvect[0][0], box -> rvect[0][1], box -> rvect[0][2], 0.0, box -> rvect[1][0], box -> rvect[1][1], box -> rvect[1][2], 0.0, box -> rvect[2][0], box -> rvect[2][1], box -> rvect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { pos = vec3(this_proj -> atoms[i][j].x, this_proj -> atoms[i][j].y, this_proj -> atoms[i][j].z); if (density) { res = m4_mul_pos(*drec, pos); pos = m4_mul_pos(*dlat, res); } else { if (this_proj -> cell.npt && i) { box = & this_proj -> cell.box[i]; lat = mat4 (box -> vect[0][0], box -> vect[1][0], box -> vect[2][0], 0.0, box -> vect[0][1], box -> vect[1][1], box -> vect[2][1], 0.0, box -> vect[0][2], box -> vect[1][2], box -> vect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); rec = mat4 (box -> rvect[0][0], box -> rvect[0][1], box -> rvect[0][2], 0.0, box -> rvect[1][0], box -> rvect[1][1], box -> rvect[1][2], 0.0, box -> rvect[2][0], box -> rvect[2][1], box -> rvect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); } res = m4_mul_pos(rec, pos); res.x -= (int)res.x; res.x -= (int)(res.x/0.5); res.y -= (int)res.y; res.y -= (int)(res.y/0.5); res.z -= (int)res.z; res.z -= (int)(res.z/0.5); pos = m4_mul_pos(lat, res); } this_proj -> atoms[i][j].x = pos.x; this_proj -> atoms[i][j].y = pos.y; this_proj -> atoms[i][j].z = pos.z; } if (density) { for (j=0; j modelgl -> bonds[i][1]; j++) { pos = vec3(this_proj -> modelgl -> clones[i][j].x, this_proj -> modelgl -> clones[i][j].y, this_proj -> modelgl -> clones[i][j].z); res = m4_mul_pos(*drec, pos); pos = m4_mul_pos(*dlat, res); this_proj -> modelgl -> clones[i][j].x = pos.x; this_proj -> modelgl -> clones[i][j].y = pos.y; this_proj -> modelgl -> clones[i][j].z = pos.z; } } } if (refresh) { i = activep; active_project_changed (this_proj -> id); if (! density) { this_proj -> dmtx = run_distance_matrix (NULL, 0, 1); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (active_glwin -> ogl_clones[0], active_glwin -> allbonds[1]); #endif } else { /*if (this_proj -> modelgl -> adv_bonding[1]) { for (j=0; j<2; j++) { if (this_proj -> modelgl -> anim -> last -> img -> color_map[j] == 4 || this_proj -> modelgl -> anim -> last -> img -> color_map[j] == 5) { if (this_proj -> modelgl -> color_styles[j*ATOM_MAPS]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j*ATOM_MAPS], TRUE); set_color_map (this_proj -> modelgl -> color_styles[j*ATOM_MAPS], & this_proj -> modelgl -> colorp[j*ATOM_MAPS][0]); } } } }*/ /*this_proj -> modelgl -> bonding = FALSE; this_proj -> modelgl -> adv_bonding[0] = this_proj -> modelgl -> adv_bonding[1] = FALSE; if (this_proj -> force_field[0]) { g_free (this_proj -> force_field[0]); this_proj -> force_field[0] = NULL; }*/ /*int j; if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (j=0; j<5; j++) { clean_rings_data (j, this_proj -> modelgl); #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif }*/ } init_default_shaders (this_proj -> modelgl); if (density) this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; if (this_proj -> modelgl -> n_shaders[SLABS][0]) this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); if (i != this_proj -> id) active_project_changed (i); } } /*! \fn void shift_it (vec3_t shift, int refresh, int proj) \brief shift atomic coordinates \param shift the shift vector \param refresh refresh rendering data \param proj the target project id */ void shift_it (vec3_t shift, int refresh, int proj) { project * this_proj = get_project_by_id (proj); translate (this_proj, -1, 0, shift); modify_coordinates_in_lattice (this_proj, NULL, NULL, refresh, 0); } /*! \fn void adjust_it (int refresh, int proj) \brief adjust atomic coordinates \param refresh refresh rendering data \param proj the project id */ void adjust_it (int refresh, int proj) { int i, j; project * this_proj = get_project_by_id (proj); box_info * box = & this_proj -> cell.box[0]; mat4_t rec = mat4 (box -> rvect[0][0], box -> rvect[0][1], box -> rvect[0][2], 0.0, box -> rvect[1][0], box -> rvect[1][1], box -> rvect[1][2], 0.0, box -> rvect[2][0], box -> rvect[2][1], box -> rvect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); for (i=0; i<3; i++) box -> param[0][i] = this_proj -> modelgl -> cell_win -> cparam[i+3]; i = this_proj -> cell.ltype; this_proj -> cell.ltype = 1; j = activep; active_project_changed (this_proj -> id); this_proj -> cell.ltype = i; active_project_changed (j); mat4_t lat = mat4 (box -> vect[0][0], box -> vect[1][0], box -> vect[2][0], 0.0, box -> vect[0][1], box -> vect[1][1], box -> vect[2][1], 0.0, box -> vect[0][2], box -> vect[1][2], box -> vect[2][2], 0.0, 0.0, 0.0, 0.0, 1.0); modify_coordinates_in_lattice (this_proj, & lat, & rec, refresh, 1); double m = 0.0; for (i=0; i nspec; i++) m += this_proj -> chemistry -> nsps[i] * this_proj -> chemistry -> chem_prop[CHEM_M][i]; this_proj -> cell.density = 10.0*m/(this_proj -> cell.volume*6.02214179); display_density (this_proj -> modelgl -> cell_win, this_proj -> cell.volume, this_proj -> cell.density, this_proj -> natomes/this_proj -> cell.volume); } /*! \fn void shift_has_changed (gpointer data, double val) \brief shift atomic coordinates \param data the associated data pointer \param val the shift value */ void shift_has_changed (gpointer data, double val) { tint * dat = (tint *)data; int i, j, k, l; project * this_proj = get_project_by_id (dat -> a); cell_edition * cedit = this_proj -> modelgl -> cell_win; l = (this_proj -> cell.npt) ? this_proj -> modelgl -> anim -> last -> img -> step : 0; if (dat -> b < 3) { if (val >= - this_proj -> cell.box[l].param[0][dat -> b]/2.0 && val <= this_proj -> cell.box[l].param[0][dat -> b]/2.0) { if (val != cedit -> cparam[dat -> b]) { double cparam[3]; for (i=0; i<3; i++) cparam[i] = - cedit -> cparam[i]; shift_it (vec3(cparam[0], cparam[1], cparam[2]), 0, dat -> a); cedit -> cparam[dat -> b] = val; for (i=0; i<3; i++) cparam[i] = cedit -> cparam[i]; shift_it (vec3(cparam[0], cparam[1], cparam[2]), 1, dat -> a); } } } else if (dat -> b < 6) { if (val > 0.0 && val <= cedit -> initbox[dat -> b-3]*100.0) { if (val != cedit -> cparam[dat -> b]) { adjust_it (0, dat -> a); if (cedit -> homo_density) { double v = val / cedit -> initbox[dat -> b - 3]; for (i=0; i<3; i++) cedit -> cparam[i+3] = v * cedit -> initbox[i]; } else { cedit -> cparam[dat -> b] = val; } adjust_it (1, dat -> a); } } } else if (dat -> b > 5 && dat -> b < 15) { i = (dat -> b < 9) ? 6 : (dat -> b < 12) ? 9 : dat -> b; j = (dat -> b < 9) ? 1 : (dat -> b < 12) ? 2 : 10; k = (dat -> b < 9) ? 1 : 0; if (val > -k * cedit -> initbox[dat -> b - i] && val <= j * cedit -> initbox[dat -> b - i]) { if (val != cedit -> cparam[dat -> b]) { cedit -> cparam[dat -> b] = val; if (this_proj -> modelgl -> n_shaders[SLABS][0]) { this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } } } else if (dat -> b > 14) { i = (dat -> b < 18) ? 0 : 1; if (val >= -i * 180.0 && val <= 180.0) { if (val != cedit -> cparam[dat -> b]) { cedit -> cparam[dat -> b] = val; if (this_proj -> modelgl -> n_shaders[SLABS][0]) { this_proj -> modelgl -> create_shaders[SLABS] = TRUE; update (this_proj -> modelgl); } } } } if ((dat -> b > 2 && dat -> b < 6) && cedit -> homo_density) { for (i=3; i<6; i++) { update_entry_double (GTK_ENTRY(cedit -> edit_entry[i]), cedit -> cparam[i]); gtk_range_set_value (GTK_RANGE(cedit -> edit_scale[i]), cedit -> cparam[i]); } } else { update_entry_double (GTK_ENTRY(cedit -> edit_entry[dat -> b]), cedit -> cparam[dat -> b]); gtk_range_set_value (GTK_RANGE(cedit -> edit_scale[dat -> b]), cedit -> cparam[dat -> b]); } } /*! \fn G_MODULE_EXPORT void set_shift (GtkEntry * res, gpointer data) \brief set atomic coordinates shift \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_shift (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = atof(m); shift_has_changed (data, v); } /*! \fn G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief shift coordinates callback - scroll \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_shift_coord (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { shift_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data) \brief shift coordinates callback - range \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void shift_coord (GtkRange * range, gpointer data) { shift_has_changed (data, gtk_range_get_value (range)); } /*! \fn GtkWidget * create_cell_entries (project * this_proj, int i) \brief create the cell entry widgets \param this_proj the target project \param i target parameter/action id (shift, cut, density) */ GtkWidget * create_cell_entries (project * this_proj, int i) { int j, k, l, m; gchar * str; GtkWidget * lab; GtkWidget * hbox; gchar * axis[3]={"x", "y", "z"}; gchar * angl[3]={"α", "β", "ɣ"}; gchar * unit[2]={"Å", "°"}; GtkWidget * vbox = create_vbox (5); cell_edition * cedit = this_proj -> modelgl -> cell_win; cedit -> edit_entry[i] = create_entry (G_CALLBACK(set_shift), 100, 15, FALSE, & this_proj -> modelgl -> colorp[i][0]); if (i < 3 || (i > 5 && i < 12)) { j = (i < 3) ? i : (i < 9) ? i - 6 : i - 9; k = (i < 3) ? 2 : 1; l = (i < 9) ? 1 : 0; m = (i < 9) ? 1 : 2; cedit -> edit_scale[i] = create_hscale (-l*this_proj -> cell.box[0].param[0][j]/k, m*this_proj -> cell.box[0].param[0][j]/k, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf ("on %s axis [+/- Å]", axis[j]); } else if (i < 6) { cedit -> initbox[i-3] = cedit -> cparam[i] = this_proj -> cell.box[0].param[0][i-3]; cedit -> edit_scale[i] = create_hscale (0.0, this_proj -> cell.box[0].param[0][i-3]*10.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf ("Lattice %s [+/- Å]", box_prop[0][i-3]); } else if (i == 12) { cedit -> edit_scale[i] = create_hscale (0.0, this_proj -> cell.box[0].param[0][0]*10.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf ("Length [+/- Å]"); } else if (i > 14 && i < 18) { cedit -> edit_scale[i] = create_hscale (0.0, 180.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf ("Angle %s [+/- °]", angl[i-15]); } else if (i > 17) { cedit -> edit_scale[i] = create_hscale (-180, 180.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf ("on %s axis [+/- °]", axis[i-18]); } else { cedit -> edit_scale[i] = create_hscale (0.0, this_proj -> cell.box[0].param[0][0]*10.0, 0.01, cedit -> cparam[i], GTK_POS_TOP, 3, 200, G_CALLBACK(shift_coord), G_CALLBACK(scroll_shift_coord), & this_proj -> modelgl -> colorp[i][0]); str = g_strdup_printf ("Radius [+/- Å]"); } update_entry_double (GTK_ENTRY(cedit -> edit_entry[i]), cedit -> cparam[i]); lab = markup_label(unit[(i > 14 && i < 18) ? 1 : 0], 20, -1, 0.0, 0.5); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 110, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cedit -> edit_scale[i], FALSE, FALSE, 20); GtkWidget * fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(fixed), cedit -> edit_entry[i], 0, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 0); fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 5); gtk_fixed_put (GTK_FIXED(fixed), lab, (i>2 && i<6) ? -50 : 0, 25); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); return vbox; } /*! \fn GtkWidget * create_shift_box (project * this_proj) \brief create shift box widgets \param this_proj the target project */ GtkWidget * create_shift_box (project * this_proj) { GtkWidget * vbox = create_vbox (BSEP); int i; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Shift the position of the cell center *: ", -1, -1, 0.0, 0.5), FALSE, FALSE, 5); for (i=0; i<3; i++) add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_cell_entries (this_proj, i), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("* requires all atoms to be wrapped in the unit cell", -1, -1, 0.0, 0.5), FALSE, FALSE, 5); widget_set_sensitive (vbox, this_proj -> modelgl -> wrapped); show_the_widgets (vbox); return vbox; } /*! \fn void wrapping (glwin * view) \brief wrapping atomic coordinates \param view the target glwin */ void wrapping (glwin * view) { gchar * text = "You are about to put all the atoms back inside the model box\n" "This action is irreversible, proceed anyway ?"; if (ask_yes_no ("Wrap atomic coordinates in unit cell ?", text, GTK_MESSAGE_WARNING, view -> win)) { shift_it (vec3 (0.0, 0.0, 0.0), 1, view -> proj); view -> wrapped = TRUE; } if (view -> cell_win) { if (view -> cell_win -> shift_box[0]) { if (GTK_IS_WIDGET(view -> cell_win -> shift_box[0])) { widget_set_sensitive (view -> cell_win -> shift_box[0], view -> wrapped); } } } #ifdef GTK3 // GTK3 Menu Action To Check if (GTK_IS_WIDGET(view -> ogl_box[2])) { widget_set_sensitive (view -> ogl_box[2], ! view -> wrapped); } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data) \brief wrap atomic coordinates callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void wrap_coord (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void wrap_coord (GtkToggleButton * but, gpointer data) \brief wrap atomic coordinates callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void wrap_coord (GtkToggleButton * but, gpointer data) #endif { glwin * view = (glwin *)data; wrapping (view); widget_set_sensitive (GTK_WIDGET(but), ! view -> wrapped); } /*! \fn GtkWidget * shift_center_tab (project * this_proj) \brief create the shift cell center tab \param this_proj the target project */ GtkWidget * shift_center_tab (project * this_proj) { GtkWidget * layout = create_layout (350, 250); glwin * view = this_proj -> modelgl; view -> cell_win -> shift_box[0] = create_shift_box (this_proj); view -> cell_win -> put_in_box = check_button ("Wrap atomic coordinates in unit cell", -1, -1, FALSE, G_CALLBACK(wrap_coord), view); widget_set_sensitive (view -> cell_win -> put_in_box, ! view -> wrapped); if (view -> record) widget_set_sensitive (view -> cell_win -> put_in_box, FALSE); layout_add_widget (layout, view -> cell_win -> put_in_box, 20, 20); layout_add_widget (layout, view -> cell_win -> shift_box[0], 100, 100); show_the_widgets (layout); return layout; } Atomes-GNU-1.1.14/src/opengl/edit/cell_super.c000066400000000000000000000243311457665371200210010ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file cell_super.c * @short Functions to create a super-cell using the extra cell(s) * @author Sébastien Le Roux */ /* * This file: 'cell_super.c' * * Contains: * - The functions to create a super-cell using the extra cell(s) * * List of functions: gboolean ** duplicate_geom_info (project * this_proj); gboolean ** duplicate_poly_info (project * this_proj); void restore_coord_and_poly_info (project * proj, gboolean ** cshow, gboolean ** pshow); void sens_superbut (project * this_proj); void super_celling (glwin * view); G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data); */ #include "cell_edit.h" #include "atom_edit.h" extern void clean_coord_window (project * this_proj); extern GtkWidget * cell_tab (int i, project * this_proj); /*! \fn gboolean ** duplicate_geom_info (project * this_proj) \brief duplicate coordinations show status \param this_proj the target project */ gboolean ** duplicate_geom_info (project * this_proj) { int i, j; gboolean ** show = g_malloc (2*sizeof*show); for (i=0; i<2; i++) { show[i] = allocbool(this_proj -> coord -> totcoord[i]); for (j=0; j coord -> totcoord[i]; j++) { show[i][j] = this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]; } } return show; } /*! \fn gboolean ** duplicate_poly_info (project * this_proj) \brief duplicate polyhedra show status \param this_proj the target project */ gboolean ** duplicate_poly_info (project * this_proj) { int i, j; gboolean ** show = g_malloc (2*sizeof*show); for (i=0; i<2; i++) { show[i] = allocbool(this_proj -> coord -> totcoord[i]); for (j=0; j coord -> totcoord[i]; j++) { show[i][j] = this_proj -> modelgl -> anim -> last -> img -> show_poly[i][j]; } } return show; } /*! \fn void restore_coord_and_poly_info (project * proj, gboolean ** cshow, gboolean ** pshow) \brief restore show status after \param proj the target project \param cshow the saved coordination show status \param pshow the saved polyhedra show status */ void restore_coord_and_poly_info (project * proj, gboolean ** cshow, gboolean ** pshow) { int i, j; for (i=0; i<2; i++) { for (j=0; j totcoord[i]; j++) { #ifdef GTK3 if (active_glwin -> ogl_geom[0][i][j] != NULL) { if (GTK_IS_WIDGET(active_glwin -> ogl_geom[0][i][j])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_geom[0][i][j], cshow[i][j]); if (cshow[i][j]) show_hide_coord (active_glwin -> ogl_geom[0][i][j], & active_glwin -> gcid[i][j][i]); } } if (active_glwin -> ogl_poly[0][i][j] != NULL) { if (GTK_IS_WIDGET(active_glwin -> ogl_poly[0][i][j])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)active_glwin -> ogl_poly[0][i][j], pshow[i][j]); if (pshow[i][j]) show_hide_poly (active_glwin -> ogl_poly[0][i][j], & active_glwin -> gcid[i][j][i]); } } #endif } } } /*! \fn void sens_superbut (project * this_proj) \brief adjust 'Create super-cell' button sensitivity \param this_proj the target project */ void sens_superbut (project * this_proj) { int i, j; if (this_proj -> modelgl -> record) { i = 0; } else { i = 0; for (j=0; j<3; j++) i += this_proj -> modelgl -> anim -> last -> img -> extra_cell[j]; } if (this_proj -> modelgl -> cell_win) { widget_set_sensitive (this_proj -> modelgl -> cell_win -> superbut, i); } #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (this_proj -> modelgl -> ogl_box[5], i); #endif } /*! \fn void super_celling (glwin * view) \brief create super cell \param view the target glwin */ void super_celling (glwin * view) { gchar * txta = "You are about to change the periodicity of the 3D model,"; gchar * txtb = "this will affect the entire molecular dynamics trajectory,"; gchar * txtc = "\tand the action is irreversible, proceed anyway ?"; gchar * str; if (get_project_by_id(view -> proj) -> steps > 1) { str = g_strdup_printf ("%s\n%s\n%s", txta, txtb, txtc); } else { str = g_strdup_printf ("%s\n%s", txta, txtc); } if (ask_yes_no ("Create a super-cell ?", str, GTK_MESSAGE_WARNING, view -> win)) { int i, j, k, l; k = activep; image * last = view -> anim -> last -> img; if (k != view -> proj) active_project_changed (view -> proj); preserve_ogl_selection (view); if (add_cells_ (& active_project -> natomes, & active_project -> steps, last -> extra_cell)) { if (active_cell -> crystal) { vec3_t shift; shift.x = active_box -> vect[0][0] + active_box -> vect[1][0] + active_box -> vect[2][0]; shift.y = active_box -> vect[0][1] + active_box -> vect[1][1] + active_box -> vect[2][1]; shift.z = active_box -> vect[0][2] + active_box -> vect[1][2] + active_box -> vect[2][2]; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].x += shift.x; active_project -> atoms[i][j].y += shift.y; active_project -> atoms[i][j].z += shift.z; } } } l = 1; for (i=0; i<3; i++) { for (j=0; j<3; j++) { active_box -> vect[i][j] *= (last -> extra_cell[i] + 1); } l *= (last -> extra_cell[i] + 1); active_box -> param[0][i] *= (last -> extra_cell[i] + 1); last -> extra_cell[i] = 0; if (active_glwin -> cell_win) { if (active_glwin -> cell_win -> ax_cell[i]) { gtk_spin_button_set_value (GTK_SPIN_BUTTON(active_glwin -> cell_win -> ax_cell[i]), 1.0); } } } if (active_cell -> crystal) { vec3_t shift; shift.x = active_box -> vect[0][0] + active_box -> vect[1][0] + active_box -> vect[2][0]; shift.y = active_box -> vect[0][1] + active_box -> vect[1][1] + active_box -> vect[2][1]; shift.z = active_box -> vect[0][2] + active_box -> vect[1][2] + active_box -> vect[2][2]; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].x -= shift.x/2.0; active_project -> atoms[i][j].y -= shift.y/2.0; active_project -> atoms[i][j].z -= shift.z/2.0; } } } for (i=0; i nspec; i++) { active_chem -> nsps[i] *= l; } init_curves_and_calc (active_project); if (! active_project -> cell.crystal) center_molecule (active_project); active_project_changed (view -> proj); active_project -> dmtx = FALSE; bonds_update = 1; active_project -> runc[0] = FALSE; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; gboolean ** cshow = duplicate_geom_info (active_project); gboolean ** pshow = duplicate_poly_info (active_project); if (view -> rings) { view -> rings = FALSE; for (i=0; i<5; i++) { clean_rings_data (i, view); #ifdef GTK3 update_rings_menus (view); #endif } } if (view -> chains) { clean_chains_data (view); #ifdef GTK3 update_chains_menus (view); #endif } on_calc_bonds_released (NULL, NULL); restore_coord_and_poly_info (active_project, cshow, pshow); g_free (cshow); g_free (pshow); int shaders[1] = {POLYS}; re_create_md_shaders (1, shaders, active_project); view -> create_shaders[PICKS] = TRUE; view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; } else { show_warning ("Something went wrong, the 3D model was not updated", view -> win); } restore_ogl_selection (view); fill_tool_model (); clean_other_window_after_edit (active_project); if (k != view -> proj) active_project_changed (k); } update (view); #ifdef GTK update_menu_bar (view); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create super cell menu callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void super_cell (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data) \brief create super cell menu callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void super_cell (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; super_celling (view); sens_superbut (get_project_by_id(view -> proj)); } /*! \fn G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data) \brief create super cell callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void super_cell_but (GtkButton * but, gpointer data) { glwin * view = (glwin *)data; super_celling (view); sens_superbut (get_project_by_id(view -> proj)); } Atomes-GNU-1.1.14/src/opengl/glview.c000066400000000000000000001614771457665371200172310ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file glview.c * @short Callbacks of the OpenGL window * @author Sébastien Le Roux */ /* * This file: 'glview.c' * * Contains: * - The callbacks of the OpenGL window * * List of functions: GLuint * allocgluint (int val); GLuint ** allocdgluint (int xal, int yal); GLfloat ** allocdGLfloat (int xal, int yal); gboolean is_GLExtension_Supported (const char * extension); G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data); void update_bonds_ (int * bd, int * stp, int * bdim, int bda[* bdim], int bdb[* bdim], double * x, double * y, double * z); void sort (int dim, int * tab); void update_atom_neighbors_ (int * stp, int * at, int * nv); void update_this_neighbor_ (int * stp, int * at, int * iv, int * nv); void update (glwin * view); void transform (glwin * view, double aspect); void reshape (glwin * view, int width, int height); void save_rotation_quaternion (glwin * view); void edit_for_motion (glwin * view); void motion (glwin * view, gint x, gint y, GdkModifierType state); void render_this_gl_window (glwin * view, GtkGLArea * area, gint button, double ptx, double pty); void render_this_gl_window (glwin * view, GtkWidget * widg, gint button); void glwin_lib_pressed (double x, double y, guint event_type, int event_button, gpointer data); void glwin_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data); void zoom (glwin * view, int delta); void rotate_x_y (glwin * view, double angle_x, double angle_y); void init_camera (project * this_proj, int get_depth); void image_init_spec_data (image * img, project * this_proj, int nsp); void set_img_lights (project * this_proj, image * img); void init_img (project * this_proj); void init_opengl (glwin * view); void center_molecule (project * this_proj); void center_this_molecule (glwin * view); void free_glwin_spec_data (project * this_proj, int spec); void glwin_init_spec_data (project * this_proj, int nspec); void init_glwin (glwin * view); void gtk_window_change_gdk_visual (GtkWidget * win); G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motc, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); G_MODULE_EXPORT void on_realize (GtkWidget * widg, gpointer data); GError * init_gtk_gl_area (GtkGLArea * area); ColRGBA set_default_color (int z); */ #include "global.h" #include "interface.h" #include "initcoord.h" #include "bind.h" #include "project.h" #include "glview.h" extern vec3_t arc_ball_init; extern vec4_t old_rotation_quaternion; extern void process_the_hits (glwin * view, gint event_button, double ptx, double pty); extern void arc_ball_rotation (glwin * view, int x, int y); extern vec3_t get_arc_ball_vector (glwin * view, int x, int y); extern Light init_light_source (int type, float val, float vbl); extern void rotate_quat (project * this_proj, vec4_t q, int status, int axis); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern vec3_t get_bary (project * this_proj, int status); extern void update_labels (glwin * view); extern void prepare_atom_edition (gpointer data, gboolean visible); extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); extern atomic_object * create_object_from_frag_mol (project * this_proj, int coord, int geo, atom_search * remove); GLenum ogl_texture; /*! \fn GLuint * allocgluint (int val) \brief allocate a GLuint * pointer \param val size of the pointer to allocate */ GLuint * allocgluint (int val) { GLuint * var = NULL; var = g_malloc0 (val*sizeof*var); return var; } /*! \fn GLuint ** allocdgluint (int xal, int yal) \brief allocate a GLuint ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ GLuint ** allocdgluint (int xal, int yal) { GLuint ** var = NULL; int i; var = g_malloc (xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = allocgluint(yal); } return var; } /*! \fn GLfloat ** allocdGLfloat (int xal, int yal) \brief allocate a GLfloat ** pointer \param xal 1st dimension size of the pointer to allocate \param yal 2nd dimension size of the pointer to allocate */ GLfloat ** allocdGLfloat (int xal, int yal) { GLfloat ** var = NULL; int i; var = g_malloc (xal*sizeof*var); for ( i = 0 ; i < xal ; i ++ ) { /* allocation d'un tableau de tableau */ var[i] = g_malloc0 (yal*sizeof*var[i]); } return var; } const float light_pos[MAX_LIGHTS][4] = {{-0.1f, 0.1f, 1.0f, 0.0f}, { 1.0f, 2.0f, 0.5f, 0.0f}, {-1.0f, 2.0f, -1.0f, 0.0f}, {-1.0f, -1.0f, 0.0f, 0.0f}}; /*! \fn ColRGBA set_default_color (int z) \brief pick the default color for an atom \param z atomic number */ ColRGBA set_default_color (int z) { ColRGBA col; double colors[116][3]={{1.00, 1.00, 1.00}, {0.85, 1.00, 1.00}, {0.80, 0.50, 1.00}, {0.76, 1.00, 0.00}, {1.00, 0.71, 0.71}, {0.56, 0.56, 0.56}, {0.18, 0.31, 0.97}, {1.00, 0.05, 0.05}, {0.56, 0.87, 0.31}, {0.70, 0.89, 0.96}, {0.67, 0.36, 0.95}, {0.54, 1.00, 0.00}, {0.75, 0.65, 0.65}, {0.94, 0.78, 0.62}, {1.00, 0.50, 0.00}, {1.00, 1.00, 0.19}, {0.12, 0.94, 0.12}, {0.50, 0.82, 0.89}, {0.56, 0.25, 0.83}, {0.24, 1.00, 0.00}, {0.90, 0.90, 0.90}, {0.75, 0.76, 0.78}, {0.65, 0.65, 0.67}, {0.54, 0.60, 0.78}, {0.61, 0.48, 0.78}, {0.87, 0.40, 0.20}, {0.94, 0.56, 0.62}, {0.31, 0.81, 0.31}, {0.78, 0.50, 0.20}, {0.49, 0.50, 0.69}, {0.76, 0.56, 0.56}, {0.40, 0.56, 0.56}, {0.74, 0.50, 0.89}, {1.00, 0.63, 0.00}, {0.65, 0.16, 0.16}, {0.36, 0.72, 0.82}, {0.44, 0.18, 0.69}, {0.00, 1.00, 0.00}, {0.58, 1.00, 1.00}, {0.58, 0.88, 0.88}, {0.45, 0.76, 0.79}, {0.33, 0.71, 0.71}, {0.23, 0.62, 0.62}, {0.14, 0.56, 0.56}, {0.04, 0.49, 0.55}, {0.00, 0.41, 0.52}, {0.75, 0.75, 0.75}, {1.00, 0.85, 0.56}, {0.65, 0.46, 0.45}, {0.40, 0.50, 0.50}, {0.62, 0.39, 0.71}, {0.83, 0.48, 0.00}, {0.58, 0.00, 0.58}, {0.26, 0.62, 0.69}, {0.34, 0.09, 0.56}, {0.00, 0.79, 0.00}, {0.44, 0.83, 1.00}, {1.00, 1.00, 0.78}, {0.85, 1.00, 0.78}, {0.78, 1.00, 0.78}, {0.64, 1.00, 0.78}, {0.56, 1.00, 0.78}, {0.38, 1.00, 0.78}, {0.27, 1.00, 0.78}, {0.19, 1.00, 0.78}, {0.12, 1.00, 0.78}, {0.00, 1.00, 0.61}, {0.00, 0.90, 0.46}, {0.00, 0.83, 0.32}, {0.00, 0.75, 0.22}, {0.00, 0.67, 0.14}, {0.30, 0.76, 1.00}, {0.30, 0.65, 1.00}, {0.13, 0.58, 0.84}, {0.15, 0.49, 0.67}, {0.15, 0.40, 0.59}, {0.09, 0.33, 0.53}, {0.81, 0.81, 0.87}, {1.00, 0.81, 0.13}, {0.72, 0.72, 0.81}, {0.65, 0.33, 0.30}, {0.34, 0.35, 0.38}, {0.62, 0.31, 0.71}, {0.67, 0.36, 0.00}, {0.46, 0.31, 0.27}, {0.26, 0.51, 0.59}, {0.26, 0.00, 0.40}, {0.00, 0.49, 0.00}, {0.44, 0.67, 0.98}, {0.00, 0.73, 1.00}, {0.00, 0.63, 1.00}, {0.00, 0.56, 1.00}, {0.00, 0.50, 1.00}, {0.00, 0.42, 1.00}, {0.33, 0.36, 0.95}, {0.54, 0.31, 0.89}, {0.63, 0.21, 0.83}, {0.70, 0.12, 0.83}, {0.70, 0.12, 0.73}, {0.70, 0.05, 0.65}, {0.74, 0.05, 0.53}, {0.78, 0.00, 0.40}, {0.80, 0.00, 0.35}, {0.82, 0.00, 0.31}, {0.85, 0.00, 0.27}, {0.88, 0.00, 0.22}, {0.90, 0.00, 0.18}, {0.92, 0.00, 0.15}, {0.93, 0.00, 0.14}, {0.94, 0.00, 0.13}, {0.95, 0.00, 0.12}, {0.96, 0.00, 0.10}, {0.97, 0.00, 0.10}, {0.98, 0.00, 0.10}, {0.99, 0.00, 0.10}}; // Dumy atoms have z < 1 int Z = (z < 1) ? 1 : z; col.red = colors[Z-1][0]; col.green = colors[Z-1][1]; col.blue = colors[Z-1][2]; col.alpha = 1.0; return col; } /*! \fn void update_bonds_ (int * bd, int * stp, * int * bdim, int bda[*bdim], int bdb[*bdim], * double * x, double * y, double * z) \brief update bonding information from Fortran90 \param bd bonds (0) or clones (1) \param stp the MD step \param bdim number of bonds (or clone bonds) \param bda bond "ab" list atom a \param bdb bond "ab" list atom b \param x clone(s) x coordinates \param y clone(s) y coordinates \param z clone(s) z coordinates */ void update_bonds_ (int * bd, int * stp, int * bdim, int bda[* bdim], int bdb[* bdim], double * x, double * y, double * z) { int i, j, k; active_glwin -> allbonds[* bd] += * bdim; active_glwin -> bonds[* stp][* bd] = * bdim; if (* bdim > 0) { active_glwin -> bondid[* stp][* bd] = NULL; active_glwin -> bondid[* stp][* bd] = allocdint (* bdim, 2); for (i=0; i< * bdim; i++) { j = bda[i] - 1; k = bdb[i] - 1; active_glwin -> bondid[* stp][* bd][i][0] = j; active_glwin -> bondid[* stp][* bd][i][1] = k; } if (* bd) { if (active_glwin -> clones[* stp] != NULL) { g_free (active_glwin -> clones[* stp]); active_glwin -> clones[* stp] = NULL; } active_glwin -> clones[* stp] = g_malloc0 (*bdim*sizeof*active_glwin -> clones[* stp]); for (i=0; i< * bdim; i++) { active_glwin -> clones[* stp][i].x = x[i]; active_glwin -> clones[* stp][i].y = y[i]; active_glwin -> clones[* stp][i].z = z[i]; j = bda[i] - 1; k = bdb[i] - 1; active_project -> atoms[* stp][j].cloned = TRUE; active_project -> atoms[* stp][k].cloned = TRUE; } } } } /*! \fn void sort (int dim, int * tab) \brief sort, nim to max, a table by integer value \param dim the number of value \param tab the table to sort */ void sort (int dim, int * tab) { int i, j, val; for (i=1; i-1; j--) { if (tab[j] <= val) break; tab[j+1] = tab[j]; } tab[j+1]=val; } } /*! \fn void update_atom_neighbors_ (int * stp, int * at, int * nv) \brief update an atom number of neighbors from Fortran90 \param stp the MD step \param at atom id \param nv number of neighbor atom(s) */ void update_atom_neighbors_ (int * stp, int * at, int * nv) { active_project -> atoms[* stp][* at].numv = * nv; if (* nv) { active_project -> atoms[* stp][* at].vois = allocint(* nv); } } /*! \fn void update_this_neighbor_ (int * stp, int * at, int * iv, int * nv) \brief update atom neighbor list from Fortran90 \param stp the MD step \param at atom id \param iv neighbor index \param nv neighbor id */ void update_this_neighbor_ (int * stp, int * at, int * iv, int * nv) { active_project -> atoms[* stp][* at].vois[* iv] = * nv - 1; if (* iv == active_project -> atoms[* stp][* at].numv - 1) { sort (active_project -> atoms[* stp][* at].numv, active_project -> atoms[* stp][* at].vois); } } /*! \fn void update (glwin * view) \brief update the rendering of the OpenGL window \param view the target glwin */ void update (glwin * view) { gtk_gl_area_queue_render ((GtkGLArea *)view -> plot); #ifdef G_OS_WIN32 gtk_widget_hide (view -> plot); gtk_widget_show (view -> plot); #endif } /*! \fn void transform (glwin * view, double aspect) \brief transform the OpenGL window \param view the target glwin \param aspect new aspect ratio */ void transform (glwin * view, double aspect) { GLdouble w, h; GLdouble dw, dh; double zoom = view -> anim -> last -> img -> zoom; view -> zoom_factor = zoom * 0.1 * view -> anim -> last -> img -> p_depth / (2.0 * view -> anim -> last -> img -> gfar); if (view -> anim -> last -> img -> rep == ORTHOGRAPHIC) { zoom *= (view -> anim -> last -> img -> p_depth / view -> anim -> last -> img -> gnear); } dw = view -> anim -> last -> img -> c_shift[0]*2.0*zoom; dh = view -> anim -> last -> img -> c_shift[1]*2.0*zoom; if (aspect > 1.0) { w = zoom * aspect; h = zoom; } else { w = zoom; h = zoom / aspect; } view -> anim -> last -> img -> gleft = -w + dw; view -> anim -> last -> img -> gright = w + dw; view -> anim -> last -> img -> gbottom = -h + dh; view -> anim -> last -> img -> gtop = h + dh; if (view -> anim -> last -> img -> rep == PERSPECTIVE) { view -> projection_matrix = m4_frustum (view -> anim -> last -> img -> gleft, view -> anim -> last -> img -> gright, view -> anim -> last -> img -> gbottom, view -> anim -> last -> img -> gtop, view -> anim -> last -> img -> gnear, view -> anim -> last -> img -> gfar); } else { view -> projection_matrix = m4_ortho (view -> anim -> last -> img -> gleft, view -> anim -> last -> img -> gright, view -> anim -> last -> img -> gbottom, view -> anim -> last -> img -> gtop, -view -> anim -> last -> img -> gfar, view -> anim -> last -> img -> gfar); } } /*! \fn void reshape (glwin * view, int width, int height) \brief reshape (resize) the OpenGL window \param view the target glwin \param width new with \param height new height */ void reshape (glwin * view, int width, int height) { double aspect; int scale = 1.0; if (view -> win) { if (GTK_IS_WIDGET(view -> win)) { scale = gtk_widget_get_scale_factor (view -> win); } } glViewport (0, 0, (GLsizei) scale * width, (GLsizei) scale * height); view -> view_port = vec4 (0.0, 0.0, width, height); aspect = (double) width / (double) height; transform (view, aspect); } /*! \fn void save_rotation_quaternion (glwin * view) \brief save the rotation quaternion of the last image \param view the target glwin */ void save_rotation_quaternion (glwin * view) { //int i; //for (i=0; i<4; i++) old_rotation_quaternion[i] = view -> anim -> last -> img -> rotation_quaternion[i]; old_rotation_quaternion.w = view -> anim -> last -> img -> rotation_quaternion.w; old_rotation_quaternion.x = view -> anim -> last -> img -> rotation_quaternion.x; old_rotation_quaternion.y = view -> anim -> last -> img -> rotation_quaternion.y; old_rotation_quaternion.z = view -> anim -> last -> img -> rotation_quaternion.z; } /*! \fn void edit_for_motion (glwin * view) \brief if edition mode is one some steps are required \param view the target glwin */ void edit_for_motion (glwin * view) { gboolean check_edit = FALSE; project * this_proj = get_project_by_id(view -> proj); prepare_atom_edition (& view -> colorp[0][0], FALSE); atom_search * move_search = allocate_atom_search (this_proj -> id, DISPL, DISPL, this_proj -> natomes); int ** frag = allocdint (this_proj -> coord -> totcoord[2], 2); int i, j, k; j = 0; for (i=0; i natomes; i++) { k = this_proj -> atoms[0][i].coord[2]; frag[k][0] ++; if (this_proj -> atoms[0][i].pick[0]) { move_search -> todo[i] = 1; frag[k][1] ++; j ++; } } if (j) { for (i=0; i coord -> totcoord[2]; i++) { if (frag[i][1] && frag[i][1] < frag[i][0]) { check_edit = TRUE; break; } } if (check_edit) { action_atoms_from_project (this_proj, move_search, (this_proj -> modelgl -> atom_win) ? this_proj -> modelgl -> atom_win -> visible : FALSE); } else { atomic_object * object; for (i=0; i coord -> totcoord[2]; i++) { if (frag[i][1]) { object_motion = TRUE; object = create_object_from_frag_mol (this_proj, 2, i, NULL); object_motion = FALSE; g_free (object); } } } g_free (frag); } view -> baryc[1] = get_bary (this_proj, 1); move_search = free_this_search_data (move_search); view -> prepare_motion = FALSE; } /*! \fn void motion (glwin * view, gint x, gint y, GdkModifierType state) \brief mouse motion in the OpenGL window \param view the target glwin \param x x position \param y y position \param state The keyboard modifier (Ctrl, Alt ...) */ void motion (glwin * view, gint x, gint y, GdkModifierType state) { view -> mouseAction = MOTION; int i; if (view -> mouseStatus == CLICKED) { if (view -> mode == EDITION && view -> prepare_motion && view -> rebuild[0][0]) edit_for_motion (view); if (state & GDK_BUTTON1_MASK) { arc_ball_rotation (view, x, y); } else if (state & GDK_BUTTON2_MASK) { if (view -> mode != EDITION) { view -> anim -> last -> img -> c_shift[0] -= (double) (x - view -> mouseX) / view -> pixels[0]; view -> anim -> last -> img -> c_shift[1] += (double) (y - view -> mouseY) / view -> pixels[1]; for (i=0; i<2; i++) { if (view -> camera_widg[i+5]) { if (GTK_IS_WIDGET(view -> camera_widg[i+5])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> camera_widg[i+5], - view -> anim -> last -> img -> c_shift[i]); } } } } else { vec3_t pos_a = vec3(x, - y, 0.75); vec3_t pos_b = vec3(view -> mouseX, - view -> mouseY, 0.75); vec3_t trans_a = v3_un_project (pos_a, view -> view_port, view -> projection_matrix); vec3_t trans_b = v3_un_project (pos_b, view -> view_port, view -> projection_matrix); vec3_t trans; trans.x = (trans_a.x - trans_b.x); trans.y = (trans_b.y - trans_a.y); if (view -> anim -> last -> img -> rep == PERSPECTIVE) { trans.x *= view -> anim -> last -> img -> p_depth; trans.y *= view -> anim -> last -> img -> p_depth; } trans.z = 0.0; translate (get_project_by_id(view -> proj), 1, 1, trans); } } if (view -> mode == EDITION) { init_default_shaders (view); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (view); #endif } view -> mouseX = x; view -> mouseY = y; update (view); } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data) \brief handle mouse motion event in the OpenGL window GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data) { glwin * view = (glwin *) data; if (view -> mouseStatus != RELEASED) { GdkEventMotion * mevent = (GdkEventMotion *)event; gint x, y; GdkModifierType state; if (mevent -> is_hint) { gdk_window_get_device_position (mevent -> window, mevent -> device, & x, & y, & state); } else { x = (gint) mevent -> x; y = (gint) mevent -> y; state = (GdkModifierType) mevent -> state; } motion (view, x, y, state); } return FALSE; } #else /*! \fn G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motc, gdouble x, gdouble y, gpointer data) \brief handle mouse motion event in the OpenGL window GTK4 \param motc The GtkEvenController sending the signal \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motc, gdouble x, gdouble y, gpointer data) { glwin * view = (glwin *) data; if (view -> mouseStatus != RELEASED) { motion (view, (gint)x, (gint)y, gtk_event_controller_get_current_event_state((GtkEventController*)motc)); } } #endif #ifdef GTKGLAREA /*! \fn void render_this_gl_window (glwin * view, GtkGLArea * area, gint button, double ptx, double pty) \brief render the OpenGL window \param view the target glwin \param area the target GtkGLArea \param button the button id \param ptx x position \param pty y position */ void render_this_gl_window (glwin * view, GtkGLArea * area, gint button, double ptx, double pty) #else /*! \fn void render_this_gl_window (glwin * view, GtkWidget * widg, gint button) \brief render the OpenGL window \param view the target glwin \param widg the GtkWidget sending the signal \param button the button id */ void render_this_gl_window (glwin * view, GtkWidget * widg, gint button) #endif { #ifdef GTKGLAREA view -> pixels[0] = gtk_widget_get_allocated_width (GTK_WIDGET(area)); view -> pixels[1] = gtk_widget_get_allocated_height (GTK_WIDGET(area)); gtk_gl_area_make_current (area); if (gtk_gl_area_get_error (area) == NULL) #else view -> pixels[0] = gtk_widget_get_allocated_width (widg); view -> pixels[1] = gtk_widget_get_allocated_height (widg); GdkWindow * win = gtk_widget_get_window (widg); if (glXMakeCurrent (GDK_WINDOW_XDISPLAY (win), GDK_WINDOW_XID (win), view -> glcontext)) #endif { reshape (view, view -> pixels[0], view -> pixels[1]); draw (view); if (view -> to_pick) { if (button) process_the_hits (view, button, ptx, pty); view -> to_pick = FALSE; reshape (view, view -> pixels[0], view -> pixels[1]); draw (view); } #ifdef GTKGLAREA glFlush (); #else glXSwapBuffers (GDK_WINDOW_XDISPLAY (win), GDK_WINDOW_XID (win)); #endif } } /*! \fn void glwin_lib_pressed (double x, double y, guint event_type, guint event_button, gpointer data) \brief handle mouse button event on the molecular library OpenGL window \param x x position \param y y position \param event_type event type \param event_button event button \param data the associated data pointer */ void glwin_lib_pressed (double x, double y, guint event_type, guint event_button, gpointer data) { glwin * view = (glwin *) data; switch (event_type) { case GDK_BUTTON_PRESS: view -> mouseStatus = CLICKED; view -> mouseX = x; view -> mouseY = y; if (event_button == 1) { save_rotation_quaternion (view); arc_ball_init = get_arc_ball_vector (view, view -> mouseX, view -> mouseY); view -> to_pick = FALSE; update (view); } break; case GDK_BUTTON_RELEASE: view -> mouseStatus = RELEASED; break; } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data) \brief handle mouse button event on the molecular library OpenGL window (limited interaction) \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton*)event; glwin_lib_pressed (bevent -> x, bevent -> y, bevent -> type, bevent -> button, data); return FALSE; } #else /*! \fn G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief handle mouse button press event on the molecular library OpenGL window (limited interaction) \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_lib_pressed (x, y, GDK_BUTTON_PRESS, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } /*! \fn G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief handle mouse button release event on the molecular library OpenGL window (limited interaction) \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_lib_pressed (x, y, GDK_BUTTON_RELEASE, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } #endif // GTK3 gl_pop_info to_pop; /*! \fn void glwin_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) \brief handle mouse button event on the OpenGL window \param event_x x position \param event_y y position \param event_button event button \param event_type event type \param event_time event time \param data the associated data pointer */ void glwin_button_event (double event_x, double event_y, guint event_button, guint event_type, guint32 event_time, gpointer data) { glwin * view = (glwin *) data; switch (event_type) { case GDK_BUTTON_PRESS: view -> mouseStatus = CLICKED; view -> mouseX = event_x; view -> mouseY = event_y; clock_gettime (CLOCK_MONOTONIC, & start_time); if (event_button == 1 || event_button == 3) { save_rotation_quaternion (view); arc_ball_init = get_arc_ball_vector (view, view -> mouseX, view -> mouseY); view -> nth_copy = 0; view -> insert_coords = get_insertion_coordinates (view); #ifdef GTKGLAREA render_this_gl_window (view, GTK_GL_AREA(view -> plot), event_button, event_x, event_y); #else render_this_gl_window (view, plot, event_button); #endif } break; case GDK_BUTTON_RELEASE: view -> mouseStatus = RELEASED; clock_gettime (CLOCK_MONOTONIC, & stop_time); if (get_calc_time (start_time, stop_time) < 0.4) { view -> to_pick = TRUE; #ifdef GTKGLAREA render_this_gl_window (view, GTK_GL_AREA(view -> plot), event_button, event_x, event_y); #else render_this_gl_window (view, plot, event_button); #endif } if (view -> mode == EDITION && view -> mouseAction == MOTION) { view -> baryc[1] = get_bary (get_project_by_id(view -> proj), 1); view -> mouseAction = ANALYZE; } if (event_button == 3) { switch (to_pop.action) { case 1: popup_main_menu (view, to_pop.x, to_pop.y); break; case 2: popup_selection (view, to_pop.x, to_pop.y, to_pop.pts[0], to_pop.pts[1], to_pop.pts[2], to_pop.pts[3], to_pop.pts[4]); break; } to_pop.action = 0; } break; } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data) \brief mouse button event on the OpenGL window \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data) { GdkEventButton * bevent = (GdkEventButton*)event; glwin_button_event (bevent -> x, bevent -> y, bevent -> button, bevent -> type, bevent -> time, data); return FALSE; } #else /*! \fn G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button pressed signal on the OpenGL window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_PRESS, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } /*! \fn G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief mouse button released signal on the OpenGL window \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { glwin_button_event (x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), GDK_BUTTON_RELEASE, gtk_event_controller_get_current_event_time((GtkEventController *)gesture), data); } #endif // GTK3 // Zoom in or out /*! \fn void zoom (glwin * view, int delta) \brief zoom in or zoom out in the OpenGL window \param view the target glwin \param delta the zoom modification */ void zoom (glwin * view, int delta) { view -> anim -> last -> img -> zoom += delta * view -> zoom_factor; if (view -> camera_widg[0]) { if (GTK_IS_WIDGET(view -> camera_widg[0])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> camera_widg[0], 1.0-0.5*view -> anim -> last -> img -> zoom); } } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data) \brief handle mouse scroll event on the OpenGL window \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data) { glwin * view = (glwin *) data; GdkEventScroll * sevent = (GdkEventScroll *)event; if (sevent -> direction == GDK_SCROLL_UP) { zoom (view, 1); } else if (sevent -> direction == GDK_SCROLL_DOWN && view -> anim -> last -> img -> zoom > ZOOM_MAX) { zoom (view, -1); } update_labels (view); update (view); return FALSE; } #else /*! \fn G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data) \brief handle mouse scroll event on the OpenGL window \param event the GtkEventControllerScroll sending the signal \param dx x position \param dy y position \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data) { glwin * view = (glwin *) data; if (dy < 0) { zoom (view, 1); } else if (dy > 0 && view -> anim -> last -> img -> zoom > ZOOM_MAX) { zoom (view, -1); } update_labels (view); update (view); return TRUE; } #endif /*! \fn void rotate_x_y (glwin * view, double angle_x, double angle_y) \brief rotate the OpenGL camera \param view the target glwin \param angle_x camera angle on x axis \param angle_y camera angle on y axis */ void rotate_x_y (glwin * view, double angle_x, double angle_y) { vec3_t axis; vec4_t q_a, q_b, q_c; axis.x = 0.0; axis.y = 1.0; axis.z = 0.0; q_a = axis_to_quat (axis, -pi*angle_y/180.0); axis.x = 1.0; axis.y = 0.0; axis.z = 0.0; q_b = axis_to_quat (axis, -pi*angle_x/180.0); q_c = q4_mul (q_a, q_b); view -> anim -> last -> img -> c_angle[0] -= angle_x; view -> anim -> last -> img -> c_angle[1] -= angle_y; int i; for (i=0; i<2; i++) { if (abs(view -> anim -> last -> img -> c_angle[i]) > 180.0) view -> anim -> last -> img -> c_angle[i] = 0.0; if (view -> camera_widg[i+3]) { if (GTK_IS_WIDGET(view -> camera_widg[i+3])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> camera_widg[i+3], view -> anim -> last -> img -> c_angle[i]); } } } if (view -> mode != EDITION) { view -> anim -> last -> img -> rotation_quaternion = q4_mul (old_rotation_quaternion, q_c); } else { rotate_quat (get_project_by_id(view -> proj), q_c, 1, 1); init_default_shaders (view); #ifdef GTK3 // GTK3 Menu Action To Check set_advanced_bonding_menus (view); #endif } } /*! \fn void init_camera (project * this_proj, int get_depth) \brief intialize the OpenGL camera settings \param this_proj the target project \param get_depth estimate the OpenGL depth ? (1/0) */ void init_camera (project * this_proj, int get_depth) { glwin * view = this_proj -> modelgl; if (get_depth) view -> anim -> last -> img -> p_depth = (this_proj -> natomes) ? oglmax_ () : 50.0; if (view -> camera_widg[1]) { if (GTK_IS_WIDGET(view -> camera_widg[1])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> camera_widg[1], view -> anim -> last -> img -> p_depth); } } view -> anim -> last -> img -> gnear = 6.0;//view -> anim -> last -> img -> p_depth/15.0; if (view -> camera_widg[2]) { if (GTK_IS_WIDGET(view -> camera_widg[2])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> camera_widg[2], view -> anim -> last -> img -> gnear); } } view -> anim -> last -> img -> gfar = view -> anim -> last -> img -> p_depth*2.0; view -> anim -> last -> img -> rotation_quaternion.w = 0.0; view -> anim -> last -> img -> rotation_quaternion.x = 0.0; view -> anim -> last -> img -> rotation_quaternion.y = 0.0; view -> anim -> last -> img -> rotation_quaternion.z = 1.0; int i; for (i=0; i<2; i++) { view -> anim -> last -> img -> c_shift[i] = 0.0; view -> anim -> last -> img -> c_angle[i] = 0.0; if (view -> camera_widg[i+5]) { if (GTK_IS_WIDGET(view -> camera_widg[i+5])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> camera_widg[i+5], view -> anim -> last -> img -> c_shift[i]); } } } save_rotation_quaternion (view); rotate_x_y (view, CAMERA_ANGLE_X, CAMERA_ANGLE_Y); view -> anim -> last -> img -> zoom = ZOOM; if (view -> camera_widg[0]) { if (GTK_IS_WIDGET(view -> camera_widg[0])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> camera_widg[0], 1.0 - 0.5*view -> anim -> last -> img -> zoom); } } } /*! \fn void image_init_spec_data (image * img, project * this_proj, int nsp) \brief initialize the chemical species related pointers in an image data structure \param img the target image \param this_proj the target project \param nsp the number of chemical species */ void image_init_spec_data (image * img, project * this_proj, int nsp) { int i, j; // Chemical species related for (i = 0; i<2; i++) { img -> show_label[i] = allocbool(nsp); img -> show_atom[i] = allocbool(nsp); for (j=0; j show_atom[i][j] = TRUE; } img -> at_color = g_malloc0 (2*nsp*sizeof*img -> at_color); img -> sphererad = allocdouble (2*nsp); img -> pointrad = allocdouble (2*nsp); img -> atomicrad = allocdouble (2*nsp); img -> bondrad = allocddouble (2*nsp, 2*nsp); img -> linerad = allocddouble (2*nsp, 2*nsp); for (i = 0; i < nsp; i++) { img -> sphererad[i] = img -> sphererad[i+nsp] = this_proj -> chemistry -> chem_prop[CHEM_R][i]/2.0; img -> atomicrad[i] = img -> atomicrad[i+nsp] = this_proj -> chemistry -> chem_prop[CHEM_R][i]; img -> pointrad[i] = img -> pointrad[i+nsp] = DEFAULT_SIZE; img -> at_color[i] = img -> at_color[i+nsp] = set_default_color ((int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]); img -> linerad[i][i] = img -> linerad[i+nsp][i+nsp] = DEFAULT_SIZE; img -> bondrad[i][i] = img -> bondrad[i+nsp][i+nsp] = min(1.0, img -> sphererad[i]/2.0); } for (i=0; i < nsp-1; i++) { for (j=i+1; j < nsp; j++) { img -> linerad[i][j] = img -> linerad[j][i] = img -> linerad[i+nsp][j+nsp] = img -> linerad[j+nsp][i+nsp] = DEFAULT_SIZE; img -> bondrad[i][j] = min(1.0, img -> sphererad[i]/2.0); img -> bondrad[i][j] = min(img -> bondrad[i][j], img -> sphererad[j]/2.0); img -> bondrad[j][i] = img -> bondrad[i+nsp][j+nsp] = img -> bondrad[j+nsp][i+nsp] = img -> bondrad[i][j]; } } for (i=0; i<10; i++) { img -> spcolor[i] = NULL; if (i < 2) { img -> spcolor[i] = g_malloc (nsp*sizeof*img -> spcolor[i]); } else { img -> spcolor[i] = g_malloc (1*sizeof*img -> spcolor[i]); img -> spcolor[i][0] = NULL; } } } /*! \fn void set_img_lights (project * this_proj, image * img) \brief initialize lightning for an image data structure \param this_proj the target project \param img the target image */ void set_img_lights (project * this_proj, image * img) { img -> lights = 3; if (img -> l_ght) g_free (img -> l_ght); img -> l_ght = g_malloc0 (3*sizeof*img -> l_ght); float val; if (this_proj -> cell.box) { val = (this_proj -> cell.box[0].param[0][0] == 0.0) ? img -> p_depth : this_proj -> cell.box[0].param[0][0]; } else { val = img -> p_depth; } float vbl = img -> p_depth; img -> l_ght[0] = init_light_source (0, val, vbl); img -> l_ght[1] = init_light_source (1, val, vbl); img -> l_ght[2] = init_light_source (1, val, vbl); } /*! \fn void init_img (project * this_proj) \brief initialize an image data structure \param this_proj the target project */ void init_img (project * this_proj) { int i; this_proj -> modelgl -> anim -> last -> img = g_malloc0(sizeof*this_proj -> modelgl -> anim -> last -> img); image * img = this_proj -> modelgl -> anim -> last -> img; img -> backcolor.red = 0.0; img -> backcolor.green = 0.0; img -> backcolor.blue = 0.0; img -> backcolor.alpha = 1.0; img -> box_color.red = 0.0; img -> box_color.green = 1.0; img -> box_color.blue = 0.0; img -> box_color.alpha = 1.0; img -> color_map[0] = 0; img -> color_map[1] = 0; img -> box_axis_rad[BOX] = 0.05; img -> box_axis_line[BOX] = DEFAULT_SIZE; img -> axispos = BOTTOM_RIGHT; img -> box_axis_rad[AXIS] = 0.1; img -> box_axis_line[AXIS] = DEFAULT_SIZE; img -> axis_length = 2.0*DEFAULT_SIZE; img -> axis_color = NULL; img -> axis_pos[0] = 50.0; img -> axis_pos[1] = 50.0; img -> axis_pos[2] = 0.0; img -> axis_labels = 1; img -> filled_type = NONE; img -> quality = QUALITY; img -> render = FILL; img -> rep = PERSPECTIVE; // Visual styles img -> style = (this_proj -> natomes <= 1000) ? BALL_AND_STICK : DEFAULT_STYLE; img -> box_axis[AXIS] = NONE; // (this_proj -> natomes <= 1000) ? CYLINDERS : DEFAULT_STYLE; if (this_proj -> cell.pbc) { img -> box_axis[BOX] = (this_proj -> natomes <= 1000) ? CYLINDERS : DEFAULT_STYLE; } else { img -> box_axis[BOX] = NONE; } for (i=0; i<5; i++) { img -> labels_position[i] = 1; img -> labels_render[i] = BETTER_TEXT; if (i < 2) img -> labels_format[i] = SYMBOL_AND_NUM; img -> labels_font[i] = g_strdup_printf ("Sans Bold 12"); } img -> mtilt = TRUE; img -> mfactor = 1; img -> mwidth = 1.0; for (i=0; i<2; i++) { img -> labels_font[3+i] = g_strdup_printf ("Courier New Bold 18"); img -> labels_color[3+i] = g_malloc (sizeof*img -> labels_color[3]); img -> labels_color[3+i][0].red = 1.0; img -> labels_color[3+i][0].green = 1.0; img -> labels_color[3+i][0].blue = 1.0; img -> labels_color[3+i][0].alpha = 1.0; img -> selected[i] = g_malloc0 (sizeof*img -> selected[i]); } img -> axis_title[0] = g_strdup_printf ("x"); img -> axis_title[1] = g_strdup_printf ("y"); img -> axis_title[2] = g_strdup_printf ("z"); img -> radall[0] = img -> radall[1] = 0.1; if (this_proj -> nspec) image_init_spec_data (img, this_proj, this_proj -> nspec); this_proj -> modelgl -> p_moy = img -> p_depth = (this_proj -> natomes) ? oglmax_ () : 50.0; set_img_lights (this_proj, img); img -> m_terial.predefine = 4; img -> m_terial.albedo = vec3(0.5, 0.5, 0.5); img -> m_terial.param[0] = DEFAULT_LIGHTNING; img -> m_terial.param[1] = DEFAULT_METALLIC; img -> m_terial.param[2] = DEFAULT_ROUGHNESS; img -> m_terial.param[3] = DEFAULT_AMBIANT_OCCLUSION; img -> m_terial.param[4] = DEFAULT_GAMMA_CORRECTION; img -> m_terial.param[5] = DEFAULT_OPACITY; img -> f_g.density = 0.005; img -> f_g.depth[0] = 1.0; img -> f_g.depth[1] = 90.0; img -> f_g.color = vec3 (0.01f, 0.01f, 0.01f); } /*! \fn gboolean is_GLExtension_Supported (const char * extension) \brief test if this GLExtension is support \param extension the target GLExtension */ gboolean is_GLExtension_Supported (const char * extension) { int i, j; i = j = 0; glGetIntegerv (GL_NUM_EXTENSIONS, & i); for (j=0; j steps; l++) { x = 0.0; y = 0.0; z = 0.0; for (i = 0; i < this_proj -> natomes; i++) { x += this_proj -> atoms[l][i].x; y += this_proj -> atoms[l][i].y; z += this_proj -> atoms[l][i].z; } x /= this_proj -> natomes; y /= this_proj -> natomes; z /= this_proj -> natomes; for (i = 0; i < this_proj -> natomes; i++) { this_proj -> atoms[l][i].x -= x; this_proj -> atoms[l][i].y -= y; this_proj -> atoms[l][i].z -= z; } for (i=0; i modelgl -> volume_box[i]) { if (this_proj -> modelgl -> volume_box[i][l]) { this_proj -> modelgl -> volume_box[i][l][6] -= x; this_proj -> modelgl -> volume_box[i][l][7] -= y; this_proj -> modelgl -> volume_box[i][l][8] -= z; rot = m4_rotation_anti_xyz (this_proj -> modelgl -> volume_box[i][l][3], this_proj -> modelgl -> volume_box[i][l][4], this_proj -> modelgl -> volume_box[i][l][5]); bini = m4_mul_coord (rot, vec3(this_proj -> modelgl -> volume_box[i][l][6], this_proj -> modelgl -> volume_box[i][l][7], this_proj -> modelgl -> volume_box[i][l][8])); bini.x -= x; bini.y -= y; bini.z -= z; rot = m4_rotation_xyz (this_proj -> modelgl -> volume_box[i][l][3], this_proj -> modelgl -> volume_box[i][l][4], this_proj -> modelgl -> volume_box[i][l][5]); bend = m4_mul_coord (rot, bini); this_proj -> modelgl -> volume_box[i][l][6] = bend.x; this_proj -> modelgl -> volume_box[i][l][7] = bend.y; this_proj -> modelgl -> volume_box[i][l][8] = bend.z; } } if (this_proj -> modelgl -> frag_box[i]) { if (this_proj -> modelgl -> frag_box[i][l]) { for (j=0; j coord -> totcoord[2]; j++) { rot = m4_rotation_anti_xyz (this_proj -> modelgl -> frag_box[i][l][j][3], this_proj -> modelgl -> frag_box[i][l][j][4], this_proj -> modelgl -> frag_box[i][l][j][5]); bini = m4_mul_coord (rot, vec3(this_proj -> modelgl -> frag_box[i][l][j][6], this_proj -> modelgl -> frag_box[i][l][j][7], this_proj -> modelgl -> frag_box[i][l][j][8])); bini.x -= x; bini.y -= y; bini.z -= z; rot = m4_rotation_xyz (this_proj -> modelgl -> frag_box[i][l][j][3], this_proj -> modelgl -> frag_box[i][l][j][4], this_proj -> modelgl -> frag_box[i][l][j][5]); bend = m4_mul_coord (rot, bini); this_proj -> modelgl -> frag_box[i][l][j][6] = bend.x; this_proj -> modelgl -> frag_box[i][l][j][7] = bend.y; this_proj -> modelgl -> frag_box[i][l][j][8] = bend.z; } } } } } this_proj -> cell.crystal = FALSE; } /*! \fn void center_this_molecule (glwin * view) \brief center atomic coordinates around (0,0,0) and refresh shaders \param view the target glwin */ void center_this_molecule (glwin * view) { center_molecule (get_project_by_id(view -> proj)); view -> insert_coords = vec3(0.0, 0.0, 0.0); int shaders[6] = {ATOMS, BONDS, POLYS, RINGS, SELEC, VOLMS}; re_create_md_shaders (6, shaders, get_project_by_id(view -> proj)); view -> create_shaders[PICKS] = TRUE; view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; update (view); } /*! \fn void free_glwin_spec_data (project * this_proj, int spec) \brief free the memory used by the chemical species related data in a glwin data structure \param this_proj the target project \param spec the number of chemical species */ void free_glwin_spec_data (project * this_proj, int spec) { int i, j, k; for (i=0; i modelgl -> colorp[i] != NULL) { g_free (this_proj -> modelgl -> colorp[i]); this_proj -> modelgl -> colorp[i] = NULL; } } for (i=0; i<10; i++) { k = (i > 2) ? 1 : spec; if (i < 2 || i > 3) { for (j=0; j coord -> geolist[i][j] != NULL) { g_free (this_proj -> coord -> geolist[i][j]); this_proj -> coord -> geolist[i][j] = NULL; } } this_proj -> coord -> geolist[i]=NULL; } } for (i=0; i coord -> partial_geo[i] != NULL) g_free (this_proj -> coord -> partial_geo[i]); this_proj -> coord -> partial_geo[i] = NULL; } g_free (this_proj -> coord -> partial_geo); this_proj -> coord -> partial_geo = NULL; } /*! \fn void glwin_init_spec_data (project * this_proj, int nspec) \brief initialize the glwin chemical species related pointers \param this_proj the target project \param nspec the number of chemical species */ void glwin_init_spec_data (project * this_proj, int nspec) { int i, j, k; for (i=0; i modelgl -> colorp[i] = NULL; this_proj -> modelgl -> colorp[i] = g_malloc (nspec*2*sizeof*this_proj -> modelgl -> colorp[i]); for (j=0; j modelgl -> colorp[i][j].a = this_proj -> id; this_proj -> modelgl -> colorp[i][j].b = i; this_proj -> modelgl -> colorp[i][j].c = j; } } #ifdef GTK3 // GTK3 Menu Action To Check int l; #endif for (i=0; i<10; i++) { k = (i > 2) ? 1 : nspec; #ifdef GTK3 // GTK3 Menu Action To Check for (j = 0; j < 2; j++) { this_proj -> modelgl -> oglmv[j][i] = NULL; this_proj -> modelgl -> oglmv[j][i] = g_malloc0 (k*sizeof*this_proj -> modelgl -> oglmv[j][i]); if (i < 9) { this_proj -> modelgl -> oglmc[j][i] = NULL; this_proj -> modelgl -> oglmc[j][i] = g_malloc0 (k*sizeof*this_proj -> modelgl -> oglmc[j][i]); } if (i < 2 || (i > 3 && i < 9)) { this_proj -> modelgl -> oglmpv[j][i] = NULL; this_proj -> modelgl -> oglmpv[j][i] = g_malloc0 (k*sizeof*this_proj -> modelgl -> oglmpv[j][i]); } for (l=0; l modelgl -> oglmv[j][i][l] = NULL; if (i < 9) this_proj -> modelgl -> oglmc[j][i][l] = NULL; if (i < 2 || (i > 3 && i < 9)) this_proj -> modelgl -> oglmpv[j][i][l] = NULL; } } #endif if (i < 2 || i > 3) { this_proj -> coord -> geolist[i] = g_malloc0 (k*sizeof*this_proj -> coord -> geolist[i]); for (j=0; j coord -> geolist[i][j] = NULL; } } } this_proj -> coord -> partial_geo = g_malloc0 (nspec*sizeof*this_proj -> coord -> partial_geo); for (i=0; i coord -> partial_geo[i] = NULL; } /*! \fn void init_glwin (glwin * view) \brief initialize a glwin pointer \param view the target glwin */ void init_glwin (glwin * view) { project * this_proj = get_project_by_id(view -> proj); // Have to be the active project view -> anim = g_malloc0 (sizeof*view -> anim); snapshot * snap = g_malloc0 (sizeof*snap); view -> anim -> first = snap; view -> anim -> last = snap; init_img (this_proj); init_camera (this_proj, FALSE); view -> mouseStatus = RELEASED; view -> mouseAction = ANALYZE; // Warning, if not centered at start-up, dmtx could fail if (! this_proj -> cell.crystal) center_molecule (this_proj); view -> bonds = allocdint (this_proj -> steps, 2); view -> bondid = g_malloc0 (this_proj -> steps*sizeof*view -> bondid); view -> clones = g_malloc0 (this_proj -> steps*sizeof*view -> clones); int i; for (i=0; i < this_proj -> steps; i++) { view -> bondid[i] = g_malloc0 (2*sizeof*view -> bondid[i]); view -> clones[i] = NULL; } // Data that depends on the number of chemical species glwin_init_spec_data (this_proj, (this_proj -> nspec) ? this_proj -> nspec : 1); view -> stop = TRUE; view -> speed = 100; view -> zoom_factor = ZOOM_FACTOR; view -> mode = ANALYZE; view -> selection_mode = ATOMS; // On normal motion and copy rebuild: view -> rebuild[0][0] = view -> rebuild[1][0] = (this_proj -> steps > 1) ? FALSE : TRUE; view -> init = TRUE; init_opengl (view); init_shaders (view); this_proj -> initgl = TRUE; #ifdef GTK4 update_menu_bar (view); #endif } /*! \fn GError * init_gtk_gl_area (GtkGLArea * area) \brief initialize a GtkGLArea, return error if any \param area the GtkGLArea point to initialize */ GError * init_gtk_gl_area (GtkGLArea * area) { if (area == NULL) { area = (GtkGLArea *)gtk_gl_area_new (); } else { gtk_gl_area_make_current (area); } gtk_gl_area_set_has_depth_buffer (area, TRUE); gtk_gl_area_set_has_stencil_buffer (area, TRUE); return gtk_gl_area_get_error (area); } #ifdef GTKGLAREA /*! \fn G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data) \brief realize event for a GtkGLArea \param area the GtkGLArea sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data) #else /*! \fn G_MODULE_EXPORT void on_realize (GtkWidget * widg, gpointer data) \brief realize event for the OpenGL widget \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_realize (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; GError * err; #ifdef GTKGLAREA err = init_gtk_gl_area (area); if (err == NULL) { #else GdkWindow * xwin = gtk_widget_get_window (view -> plot); GLint attr_list[] = {GLX_DOUBLEBUFFER, GLX_RGBA, GLX_DEPTH_SIZE, 1, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1, None}; XVisualInfo * visualinfo = glXChooseVisual (GDK_WINDOW_XDISPLAY (xwin), gdk_screen_get_number (gdk_window_get_screen (xwin)), attr_list); view -> glcontext = glXCreateContext (GDK_WINDOW_XDISPLAY (xwin), visualinfo, NULL, TRUE); g_free (visualinfo); if (glXMakeCurrent (GDK_WINDOW_XDISPLAY (xwin), GDK_WINDOW_XID (xwin), view -> glcontext)) { #endif init_glwin (view); } else { #ifdef GTK3 #ifdef GTKGLAREA #ifndef G_OS_WIN32 if (atomes_visual) { atomes_visual = 0; goto end; } #endif #endif #endif gchar * errm = g_strdup_printf ("Impossible to initialize the OpenGL 3D rendering ! \n %s\n", err -> message); g_error_free (err); show_error (errm, 0, MainWindow); g_free (errm); atomes_visual = -1; } #ifdef GTK3 end:; #endif } #ifdef GTKGLAREA /*! \fn G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data) \brief OpenGL rendering widget expose event callback GTK4 \param area the GtkGLArea sending the signal \param context the associated GdkGLContext \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data) \brief OpenGL rendering widget expose event callback GTK3 \param widg the GtkWidget sending the signal \param cr the cairo drawing context to use for the draw \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data) #endif { glwin * view = (glwin *) data; #ifdef GTK3 GdkEvent * event = gtk_get_current_event (); if (event && event -> type == GDK_EXPOSE && ((GdkEventExpose *)event) -> count > 0) return TRUE; #endif #ifdef GTKGLAREA render_this_gl_window (view, area, 0, 0.0, 0.0); #else render_this_gl_window (view, widg, 0); #endif return TRUE; } Atomes-GNU-1.1.14/src/opengl/glview.h000066400000000000000000000261061457665371200172230ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file glview.h * @short Variable declarations related to the OpenGL window \n Function declarations related to the OpenGL window * @author Sébastien Le Roux */ /* * This header file: 'glview.h' * * Contains: - Variable declarations related to the OpenGL window - Function declaration related to the OpenGL window */ #ifndef GL_VIEW_H_ #define GL_VIEW_H_ /*! \def QUALITY \brief Default OpenGL quality (number of polygons) */ #define QUALITY 30 /*! \def DEFAULT_STYLE \brief Default OpenGL style: ball and stick */ #define DEFAULT_STYLE 1 #define DEFAULT_SIZE 1 /*! \def DEFAULT_LIGHTNING \brief Default OpenGL material ligthning */ #define DEFAULT_LIGHTNING 1.00 /*! \def DEFAULT_METALLIC \brief Default OpenGL material metallic */ #define DEFAULT_METALLIC 0.35 /*! \def DEFAULT_ROUGHNESS \brief Default OpenGL material roughness */ #define DEFAULT_ROUGHNESS 0.15 /*! \def DEFAULT_AMBIANT_OCCLUSION \brief Default OpenGL material ambiant occlusion */ #define DEFAULT_AMBIANT_OCCLUSION 1.00 /*! \def DEFAULT_GAMMA_CORRECTION \brief Default OpenGL material gamma correction */ #define DEFAULT_GAMMA_CORRECTION 1.50 /*! \def DEFAULT_OPACITY \brief Default OpenGL opacity */ #define DEFAULT_OPACITY 1.00 // default light data /*! \def MAX_LIGHTS \brief Maximum number of light sources */ #define MAX_LIGHTS 10 /*! \def DEFAULT_INTENSITY \brief Default light intensity */ #define DEFAULT_INTENSITY 10.0 /*! \def NEAR_PLANE \brief Default value for the OpenGL near plane */ #define NEAR_PLANE 1.0 /*! \def FAR_PLANE \brief Default value for the OpenGL far plane */ #define FAR_PLANE 10.0 /*! \def CAMERA_ANGLE_X \brief Default value for the OpenGL camera pitch in ° */ #define CAMERA_ANGLE_X 5.0 // Pitch in degree /*! \def CAMERA_ANGLE_Y \brief Default value for the OpenGL camera heading in ° */ #define CAMERA_ANGLE_Y -25.0 // Heading in degree /*! \def CAMERA_ANGLE_Z \brief Default value for the OpenGL camera toll in ° */ #define CAMERA_ANGLE_Z 0.0 /*! \def ZOOM \brief Default value for the OpenGL zoom */ #define ZOOM 1.5 /*! \def ZOOM_FACTOR \brief Default value for the OpenGL zoom factor */ #define ZOOM_FACTOR 0.05 /*! \def ZOOM_MAX \brief Maximum value for the OpenGL zoom factor */ #define ZOOM_MAX 0.001 /*! \def REFRESH \brief Refresh time for spinning the OpenGL window in milliseconds */ #define REFRESH 10 /*! \def MAX_IN_SELECTION \brief Maximum number of atoms in selection to display measure information */ #define MAX_IN_SELECTION 21 /*! \def COORD_MAX_MENU \brief Maximum number of fragments or molecules to build the related menu items */ #define COORD_MAX_MENU 20 /*! \enum radii */ enum radii { VDW = 0, /*!< 0 */ INC = 1, /*!< 1 */ COV = 2, /*!< 2 */ ION = 3 /*!< 3 */ }; /*! \enum representation */ enum representation { ORTHOGRAPHIC = 0, /*!< 0 */ PERSPECTIVE = 1 /*!< 1 */ }; /*! \enum modes */ enum modes { ANALYZE = 0, /*!< 0 */ EDITION = 1, /*!< 1 */ MOTION = 2, /*!< 2 */ DL_POLY = 3, /*!< 3 */ LAAMPS = 4, /*!< 4 */ CPMD_AI = 5, /*!< 5 */ CP2K_AI = 6, /*!< 6 */ CP2K_QMMM = 7, /*!< 7 */ CP2K_MM = 8 /*!< 8 */ }; #define NUM_STYLES 7 /*! \enum styles */ enum styles { NONE = -1, /*!< -1 */ BALL_AND_STICK = 0, /*!< 0 */ WIREFRAME = 1, /*!< 1 */ SPACEFILL = 2, /*!< 2 */ SPHERES = 3, /*!< 3 */ CYLINDERS = 4, /*!< 4 */ PUNT = 5 /*!< 5 */ }; /*! \enum render */ enum render { FILL = 0, /*!< 0 */ LINE = 1, /*!< 1 */ PTS = 2 /*!< 2 */ }; /*! \enum action */ enum action { ROTATE = 0, /*!< 0 */ MOVE = 1, /*!< 1 */ SELECT = 2, /*!< 2 */ ZOOM_IN_OUT = 3, /*!< 3 */ SPIN = 4 /*!< 4 */ }; /*! \enum mouse_status */ enum mouse_status { CLICKED = 0, /*!< 0 */ RELEASED = 1 /*!< 1 */ }; /*! \enum axisposition */ enum axisposition { TOP_RIGHT = 0, /*!< 0 */ TOP_LEFT = 1, /*!< 1 */ BOTTOM_RIGHT = 2, /*!< 2 */ BOTTOM_LEFT = 3, /*!< 3 */ CENTER = 4, /*!< 4 */ CUSTOM = 5 /*!< 5 */ }; /*! \enum labels */ enum labels { ELEMENT_NAME = 0, /*!< 0 */ SYMBOL = 1, /*!< 1 */ SYMBOL_AND_NUM = 2, /*!< 2 */ NUM = 3, /*!< 3 */ ID_IN_MOLECULE = 4 /*!< 4 */ }; /*! \enum actions */ enum actions { DISPL = 2, /*!< 2 */ REPLACE = 3, /*!< 3 */ REMOVE = 4, /*!< 4 */ INSERT = 5, /*!< 5 */ RANMOVE = 6 /*!< 6 */ }; /*! \enum texts */ enum texts { SIMPLE_TEXT = 0, /*!< 0 */ BETTER_TEXT = 1 /*!< 1 */ }; /*enum material { AMBIENT = 0, DIFFUSE = 1, SPECULAR = 2, EMISSION = 3, OPACITY = 4 };*/ extern GLfloat ** allocdGLfloat (int xal, int yal); extern GLfloat initlights[4][4]; extern gboolean pick; extern glwin * wingl; extern project * proj_gl; extern coord_info * coord_gl; extern box_info * box_gl; extern cell_info * cell_gl; extern int proj_sp; extern int proj_at; extern image * plot; extern int qual; extern int acolorm; extern int pcolorm; extern int step; extern int gColorID[3]; extern int field_object; extern GLenum ogl_texture; extern gboolean create_bond (int ac, int bid, int ba, int bb, int sel, double length); extern void draw_cylinder_bond (atom a, atom b, int bid, int ci, int bi); extern void draw_cylinder_bond_to_pick (atom a, atom b, int bid); extern void draw_wireframe_bond (atom a, atom b, int ci, int bi); extern gboolean create_atom (GLUquadricObj * quadric, int aid, int ac, int sp, int sel); extern void draw_vertices (int id); extern void draw_atom_to_pick (atom at); extern void draw_atom (atom at, double al); extern void draw_rings_gl (int se, int ge, int ta, int id); extern void draw_box (); extern void prepare_cuboid (vec3_t position, int id); extern void prepare_axis (); extern void draw (glwin * view); extern void render_all_strings (int glsl, int id); extern void prepare_string (char * text, int id, ColRGBA col, vec3_t pos, float lshift[3], atom * at, atom * bt, atom * ct); ColRGBA init_color (int id, int numid); ColRGBA set_default_color (int z); extern void sort (int dim, int * tab); extern vec3_t get_insertion_coordinates (glwin * view); void setup_bonds (glwin * view); void update (glwin * view); void center_this_molecule (glwin * view); G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data); #ifdef GTK3 G_MODULE_EXPORT gboolean on_lib_pressed (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_button_event (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_motion (GtkWidget * widg, GdkEvent * event, gpointer data); G_MODULE_EXPORT gboolean on_scrolled (GtkWidget * widg, GdkEvent * event, gpointer data); #else G_MODULE_EXPORT void on_lib_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_lib_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_button_released (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void on_glwin_pointer_motion (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT gboolean on_glwin_pointer_scoll (GtkEventControllerScroll * event, gdouble dx, gdouble dy, gpointer data); #endif void reshape (glwin * view, int width, int height); void zoom (glwin * view, int delta); void init_opengl (glwin * view); void init_camera (project * this_proj, gboolean get_depth); #ifdef GTKGLAREA G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkGLArea * area, GdkGLContext * context, gpointer data); #else G_MODULE_EXPORT void on_realize (GtkWidget * area, gpointer data); G_MODULE_EXPORT gboolean on_expose (GtkWidget * widg, cairo_t * cr, gpointer data); #endif extern void debug_image (image img, int i); extern distance distance_2d (atom * at, atom * bt); extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); extern angle angle_2d (atom * at, atom * bt, atom * ct); extern angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct); extern angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); extern atom * duplicate_atom (atom * at); extern void at_shift (atom * at, float * shift); extern void at_unshift (atom * at, float * shift); extern int check_label_numbers (project * this_proj, int types); extern mat4_t create_axis_matrices (int type); extern mat4_t create_label_matrices (); extern int nbs, nbl, nba; extern void re_create_all_md_shaders (glwin * view); extern void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj); extern void cleaning_shaders (glwin * view, int shader); extern void init_default_shaders (glwin * view); extern void init_shaders(glwin * view); extern glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj); extern void update_selection_list (atom_selection * at_list, atom * at, gboolean add); extern void update_all_selections (glwin * view, int pi); extern void save_all_selections (glwin * view, int pi); extern void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); extern void update_selection_tree (glwin * view, int pi, int id); extern void update_all_menus (glwin * view, int nats); extern gboolean is_coord_in_menu (int id, project * this_proj); extern atom_search * free_this_search_data (atom_search * this_search); #ifdef GTK3 extern G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data); #else extern G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * state, gpointer data); #endif extern void popup_selection (glwin * view, double ptx, double pty, int se, int pe, int ai, int bi, int ac); extern void popup_main_menu (glwin * view, double ptx, double pty); typedef struct gl_pop_info gl_pop_info; struct gl_pop_info { int action; double x, y; int pts[5]; }; extern gl_pop_info to_pop; #endif Atomes-GNU-1.1.14/src/opengl/glwin.h000066400000000000000000001156211457665371200170470ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file glwin.h * @short Variable declarations related the OpenGL window \n Data structure declarations related the OpenGL window * @author Sébastien Le Roux */ /* * This header file: 'glwin.h' * * Contains: - Variable declarations related the OpenGL window - Data structure declarations related the OpenGL window */ #ifndef GLWIN_H_ #define GLWIN_H_ #include "ogl_shading.h" #ifndef GL_COLOR_SUM_EXT # define GL_COLOR_SUM_EXT 0x8458 #endif #ifndef GL_LIGHT_MODEL_COLOR_CONTROL_EXT # define GL_LIGHT_MODEL_COLOR_CONTROL_EXT 0x81F8 #endif #ifndef GL_SEPARATE_SPECULAR_COLOR_EXT # define GL_SEPARATE_SPECULAR_COLOR_EXT 0x81FA #endif #ifndef GL_TEXTURE_RECTANGLE_ARB # define GL_TEXTURE_RECTANGLE_ARB 0x84F5 #endif #define BOX 0 #define AXIS 1 #define OGL_RENDERS 3 #define OGL_BOX 8 #define OGL_AXIS 13 #define OGL_REPS 2 #define ATOM_MAPS 7 #define POLY_MAPS 7 #define OGL_COORDS 5 #define OGL_RINGS 12 #define NUM_COLORS 64 #define NINPUTS 6 #define NSELECTION 7 #define NGLOBAL_SHADERS 14 /*! \enum object_types */ enum object_types { FROM_DATA = -8, /*!< -8 */ FROM_SPEC = -7, /*!< -7 */ FROM_MOL = -6, /*!< -6 */ FROM_FRAG = -5, /*!< -5 */ FROM_COORD_P = -4, /*!< -4 */ FROM_COORD_T = -3, /*!< -3 */ FROM_LIBRARY = -2, /*!< -2 */ FROM_PROJECT = -1 /*!< -1 */ }; /*! \enum shaders \brief The different types of shaders in the atomes program */ enum shaders { ATOMS = 0, /*!< 0 */ BONDS = 1, /*!< 1 */ SELEC = 2, /*!< 2 */ POLYS = 3, /*!< 3 */ MDBOX = 4, /*!< 4 */ MAXIS = 5, /*!< 5 */ ARROW = 6, /*!< 6 */ RINGS = 7, /*!< 7 */ PICKS = 8, /*!< 8 */ LABEL = 9, /*!< 9 */ MEASU = 10, /*!< 10 */ LIGHT = 11, /*!< 11 */ SLABS = 12, /*!< 12 */ VOLMS = 13 /*!< 13 */ }; #define FILLED_STYLES 4 #define OGL_STYLES 6 extern char * text_styles[OGL_STYLES]; extern char * text_filled[FILLED_STYLES]; /*! \typedef angle */ typedef struct angle angle; struct angle { double angle; /*!< the angle value */ gboolean pbc; /*!< are PBC used ? 1 = yes, 0 = no */ }; /*! \typedef distance */ typedef struct distance distance; struct distance { double length; /*!< the distance value */ double x; /*!< x vector component */ double y; /*!< y vector component */ double z; /*!< z vector component */ gboolean pbc; /*!< are PBC used ? 1 = yes, 0 = no */ }; typedef struct atom_data atom_data; struct atom_data { gboolean show[2]; gboolean label[2]; gboolean pick[2]; gboolean cloned; int style; }; typedef struct spinner spinner; struct spinner { GtkWidget * win; GtkWidget * right; GtkWidget * left; GtkWidget * up; GtkWidget * down; GtkWidget * stop; }; typedef struct sequencer sequencer; struct sequencer { GtkWidget * win; GtkWidget * first; GtkWidget * last; GtkWidget * prev; GtkWidget * next; GtkWidget * jump; GtkWidget * play; GtkWidget * stop; GtkWidget * loop; GtkWidget * fast; GtkWidget * slow; }; typedef struct recorder recorder; struct recorder { GtkWidget * win; GtkWidget * rec; GtkWidget * stop; }; /*! \typedef Light \brief Light parameters for OpenGL rendering */ typedef struct Light Light; struct Light { int type; /*!< Light type: 0 = directional, 1 = point, 2 = spot light */ int fix; /*!< Light fix: 0 = fix for the view, 1 = fix for the molecule */ int show; /*!< Show (1) or hide light (0) */ vec3_t position; /*!< Light position */ vec3_t direction; /*!< Light direction for directional and spot lights */ vec3_t intensity; /*!< Light colors */ vec3_t attenuation; /*!< Constant, linear and quadratic attenuations */ vec3_t spot_data; /*!< Angle, inner and outer spot light cutoff */ }; /*! \typedef Material \brief Material parameters for OpenGL rendering */ typedef struct Material Material; struct Material { int predefine; /*!< Cutsom (0) or template (1) */ vec3_t albedo; /*!< Albedo components */ // 0 = lightning model // 2 = metallic // 3 = roughness // 4 = back lightning // 5 = gamma // 6 = opacity GLfloat param[6]; /*!< Material parameters \n 0 = lightning model, \n 1 = metallic, \n 2 = roughness, \n 3 = back lightning, \n 4 = gamma, \n 5 = opacity*/ }; /*! \typedef Fog \brief Fog parameters for OpenGL rendering */ typedef struct Fog Fog; struct Fog { int mode; /*!< Fog mode in: none, linear (LINEAR), exponential (EXP) and exponential squared (EXP2) */ int based; /*!< Fog type: plane based (0) or range based (1) */ float density; /*!< Fog density */ float depth[2]; /*!< Fog depth: 0 = start value, 1 = end value */ vec3_t color; /*!< Fog color */ }; /*! \typedef screen_string \brief OpenGL string rendering */ typedef struct screen_string screen_string; struct screen_string { int id; /*!< The string unique ID */ int type; /*!< The type of string (3= labels, 4 = bonds, 5= angles) */ char * word; /*!< The text to be displayed */ ColRGBA col; /*!< Color of the string */ float shift[4]; /*!< The shifts (if any) on x, y, z, then visibility */ int num_instances; /*!< The number of instances for that string */ float * instances; /*!< The list of instances for that string */ screen_string * prev; screen_string * last; }; typedef struct atom_in_selection atom_in_selection; struct atom_in_selection { int id; int sp; atom_in_selection * prev; atom_in_selection * next; }; typedef struct atom_selection atom_selection; struct atom_selection { int selected; int * selected_bonds; ColRGBA * bond_colors; int * selected_angles; ColRGBA * angle_colors; int * selected_dihedrals; ColRGBA * dihedral_colors; atom_in_selection * first; atom_in_selection * last; }; /*! \typedef image \brief a structure to describe the content of the OpenGL rendering */ typedef struct image image; struct image { ColRGBA backcolor; /*!< Background color */ // Color maps for atoms [0] and polyhedra [1] int color_map[2]; /*!< Color maps, 0= atoms, 1 = polyhedra */ gboolean * show_atom[2]; /*!< Daw or not the atom(s), 0 = atoms, 1 = clones */ gboolean * show_label[2]; /*!< Draw or not the label(s), 0 = atoms, 1 = clones */ gboolean * show_poly[9]; /*!< Draw or not the polyhedra */ gboolean * show_coord[10]; /*!< Draw or not the coordination(s) */ // Atoms ColRGBA * at_color; /*!< Atomic species color(s) */ double * sphererad; /*!< Sphere radii (spheres or ball and stick used as style) */ double * pointrad; /*!< Point size (points or wireframe used as style) */ double * atomicrad; /*!< Sphere radii (spacefilled used as style) */ // Bonds double ** bondrad; /*!< Cylinder radii (ball and stick used as style) */ double ** linerad; /*!< Line width (wireframe used as style) */ double radall[2]; /*!< Cylinder radii (cylinders used as style) */ // Clones gboolean draw_clones; /*!< Draw clones: 0 = no, 1 = yes */ gboolean cloned_poly; /*!< Draw cloned ployhedra: 0 = no, 1 = yes */ // Labels // 0 = atoms, 1 = clones, 2 = axis, 3 = measures, 4 = measure edition int labels_position[5]; /*!< Labels position: \n 0 = atom(s), \n 1 = clone(s), \n 2 = axis, \n 3 = measure(s), \n 4 = measure(s) in edition mode */ int labels_render[5]; /*!< Labels rendering mode: \n 0 = atom(s), \n 1 = clone(s), \n 2 = axis, \n 3 = measure(s), \n 4 = measure(s) in edition mode */ int labels_scale[5]; /*!< Labels scaling mode: \n 0 = atom(s), \n 1 = clone(s), \n 2 = axis, \n 3 = measure(s), \n 4 = measure(s) in edition mode */ gchar * labels_font[5]; /*!< Labels font: \n 0 = atom(s), \n 1 = clone(s), \n 2 = axis, \n 3 = measure(s), \n 4 = measure(s) in edition mode */ ColRGBA * labels_color[5]; /*!< Labels color: \n 0 = atom(s), \n 1 = clone(s), \n 2 = axis, \n 3 = measure(s), \n 4 = measure(s) in edition mode */ double labels_shift[5][3]; /*!< Labels axis shit, if any: \n 0 = atom(s), \n 1 = clone(s), \n 2 = axis, \n 3 = measure(s), \n 4 = measure(s) in edition mode */ struct screen_string * labels_list[5]; /*!< Label screen strings (rendered and re-usable objects): \n 0 = atom(s), \n 1 = clone(s), \n 2 = axis, \n 3 = measure(s), \n 4 = measure(s) in edition mode */ // 0 =Element name, 1 = Atomic symbol, 2 = Atomic symbol + ID number, 3 = ID number int labels_format[3]; /*!< Label format for the atom(s) and clone(s) \n 0 = element name, \n 1 = atomic symbol, \n 2 = atomic symbol + ID number (default), \n 3 = ID number */ gboolean mtilt; /*!< Measure tilt, if any */ int mpattern; /*!< Measure line pattern */ int mfactor; /*!< Measure */ double mwidth; /*!< Measure line width */ int m_is_pressed; /*!< is the key m pressed ? */ // Atom selection: 0 = normal mode, 1 = edition mode atom_selection * selected[2]; /*!< atom(s) selection lists \n 0 = analysis mode, \n 1 = edition mode */ // Model box and partial axis data // BOX = 0, AXIS = 1 int box_axis[2]; /*!< Show (1) / hide (0): \n 0 = model box, \n 1 = axis */ double box_axis_rad[2]; /*!< Cylinder radius (if used): \n 0 = model box, \n 1 = axis */ double box_axis_line[2]; /*!< Wireframe line width (if used): 0 = model box, \n 1 = axis */ ColRGBA box_color; /*!< Model box color */ // Extra cell on a/b/c int extra_cell[3]; /*!< Extra cells (if any) on x, y and z */ double axis_length; /*!< Axis length */ int axispos; /*!< Axis */ GLdouble axis_pos[3]; /*!< Axis position */ int axis_labels; /*!< */ gchar * axis_title[3]; /*!< Axis titles */ ColRGBA * axis_color; /*!< Axis colors, if not default */ // Coordination(s) ColRGBA ** spcolor[10]; /*!< Coordination sphere colors */ GLdouble p_depth; /*!< Camera depth */ GLdouble c_angle[2]; /*!< Camera angle: pitch and heading */ GLdouble c_shift[2]; /*!< Camera position: x and y */ GLdouble gnear; /*!< Near plane position */ GLdouble gfar; /*!< Far plane position */ GLdouble gleft; /*!< Left plane position */ GLdouble gright; /*!< Right plane position */ GLdouble gtop; /*!< Top plane position */ GLdouble gbottom; /*!< Bottom plane position */ GLdouble zoom; /*!< Zoom factor */ vec4_t rotation_quaternion; /*!< Rotation quaternion */ // Only for recording int ** i_rings[5]; /*!< Ring(s) visual information, temporary buffer for movie encoding */ atom_data * at_data; /*!< Atom visual information, temporary buffer for movie encoding */ // Volumes gboolean show_vol[FILLED_STYLES]; /*!< Show (1) or hide (0) overall molecular volumes, calculated using: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van Der Waals radii, \n 3 = in crystal radii */ ColRGBA vol_col[FILLED_STYLES]; /*!< Overall molecular volume colors, calculated using: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van Der Waals radii, \n 3 = in crystal radii */ gboolean * fm_show_vol[2][FILLED_STYLES]; /*!< Show (1) or hide (0) isolated fragment(s) and molecule(s) volumes, calculated using: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van Der Waals radii, \n 3 = in crystal radii */ ColRGBA * fm_vol_col[2][FILLED_STYLES]; /*!< Isolated fragment(s) and molecule(s) volume colors: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van Der Waals radii, \n 3 = in crystal radii */ int rotation_mode; /*!< Not used anymore, should be removed */ int style; /*!< Default style, in: \n 0 = ball and stick, \n 1 = wireframe, \n 2 = spacefilled, \n 2 = spheres, \n 3 = cylinders, \n 4 = dots */ int filled_type; /*!< Spacefilled type, in: \n 0 = covalent radii, \n 1 = ionic radii, \n 2 = van Der Waals radii, \n 3 = in crystal radii */ GLint quality; /*!< Quality of the rendering */ GLint render; /*!< OpenGL render type, in \n 0 = filled (default), \n 1 = lines, \n 2 = points */ int lights; /*!< Number of light(s), default 3 */ int * light_loc; /*!< Lights locations (only used when drawing light spots), in \n 0 = ambient light, not in the model, \n 1 = spot or directional light, in the model */ Light * l_ght; /*!< Light(s) description(s), if any */ Material m_terial; /*!< Material description, if any */ Fog f_g; /*!< Fog description, if any*/ int step; /*!< The MD step, in case of trajectory */ int rep; /*!< Representation: 0 = orthographic, 1 = perspective */ int id; /*!< Image ID */ }; /*! \typedef snapshot */ typedef struct snapshot snapshot; struct snapshot { image * img; /*!< The image structure for this snapshot */ snapshot * prev; snapshot * next; }; /*! \typedef animation */ typedef struct animation animation; struct animation { int frames; /*!< Number of frames or snapshots */ snapshot * first; snapshot * last; }; /*! \typedef colormap */ typedef struct colormap colormap; struct colormap { float ** data; /*!< Data to use as custom color map, value per MD step x atom */ int points; /*!< Number of color(s) to build the custom color map */ ColRGBA ** colors; /*!< Color(s) to use to build the custom color map */ float * positions; /*!< Point positions, in the overall value range */ float cmin; /*!< Minimum value */ float cmax; /*!< Maximum value */ ColRGBA * values; /*!< The atom(s) colors calculated using the custom color map information */ }; /*! \typedef atom_search \brief a data structure to search for atom(s) and edit the model */ typedef struct atom_search atom_search; struct atom_search { int proj; /*!< Target project */ int action; /*!< Action to be performed */ GtkWidget * atom_tree; GtkWidget * mode_box; GtkWidget * object_box; GtkWidget * filter_box; GtkWidget * atom_box; GtkWidget * id_box; GtkWidget * big_box; GtkTreeStore * atom_model; GtkListStore * obj_model; GtkTreePath * path; GtkWidget * info[2]; GtkWidget * preview[2]; // 0 = Unselected // 1 = Selected // 2 = All int status; /*!< Atom(s) status for the search, in: \n 0 = unselected, \n 1 = selected, \n 2 = all */ // O = Normal // 1 = Random int mode; /*!< Search mode, in: \n 0 = normal, \n 1 = random */ // 0 = Atoms // 1 = Groups int object; /*!< Search object, in: \n 0 = isolated atom(s), \n 1 = group of atoms */ int filter; /*!< Search filter, in: \n 0 = chemical species, \n 1 = total coordination(s), \n 2 = partial coordination(s), \n 3 = fragment(s), \n 4 = molecule(s) */ int spec; /*!< Target chemical species, if any */ int search_digit; int spec_to_add; int num_to_add; int in_selection; GtkWidget * entry_a, * entry_b; GtkWidget * but_a, * but_b; GtkWidget * img_a, * img_b; // Passivating = for all atoms of that type but not as a group gboolean passivating; gboolean was_selected; gboolean recompute_bonding; int set_for_all; int int_b; int * lab; int * pick; int todo_size; int * todo; tint pointer[6]; }; /*! \typedef atomic_object \brief a data structure to describe an object to work on. \n the object can be one or more: \n - atom(s) \n - chemical species \n - coordination sphere(s) (total or partial) \n - fragment(s) \n - molecule(s) \n - selection(s) of atom(s) from any project in the workspace */ typedef struct atomic_object atomic_object; struct atomic_object { int id; /*!< Object ID */ int origin; /*!< Origin project for the object */ float dim; /*!< Maximum size in x, y or z for the object */ gchar * name; /*!< Name of the object */ int type; /*!< Type of object */ int atoms; /*!< Number of atom(s) */ int species; /*!< Number of chemical species */ int * old_z; /*!< Temporary buffer to preserve the atomic numbers */ struct atom * at_list; /*!< List of atom(s) in the object */ int ifcl; /*!< Number of clone(s), if any */ int * bcid; /*!< Cloned bonds ID */ double occ; /*!< Occupancy (for crystal building purposes) */ double * baryc; /*!< Position barycenter for the object */ int bonds; /*!< Number of chemical bonds */ int ** ibonds; /*!< List of bonds */ coord_info * coord; /*!< coordination information */ atomic_object * prev; atomic_object * next; }; /*! \typedef wyckoff_position \brief a structure to describe a Wyckoff position in crystallography */ typedef struct wyckoff_position wyckoff_position; struct wyckoff_position { int multi; /*!< Multiplicity */ gchar * let; /*!< Letter */ gchar * site; /*!< Symmetry */ gchar *** pos; /*!< Coordinate(s) */ }; /*! \typedef spg_setting \brief a structure to describe the settings of a space group in crystallography */ typedef struct spg_setting spg_setting; struct spg_setting { int origin; /*!< Origin */ gchar * name; /*!< Name of the setting */ gchar * pos[3]; /*!< Lattice orientation modification(s) */ int nump; /*!< Number of Wyckoff position modification(s) */ gchar *** points; /*!< Wyckoff position modification(s) */ }; /*! \typedef space_group \brief a structure to described a space group in crystallography */ typedef struct space_group space_group; struct space_group { int id; /*!< ID number, in [1-230] */ gchar * name; /*!< Name */ gchar * hms; /*!< Hermann-Mauguin symbol */ gchar * bravais; /*!< Type of Bravais lattice */ gchar * setting; /*!< Available setting(s), if any*/ int sid; /*!< Selected setting, if any */ int nums; /*!< Number of possible setting(s) */ spg_setting * settings; /*!< Space group settings */ int numw; /*!< Number of Wyckoff position(s) */ wyckoff_position * wyckoff; /*!< Wyckoff position(s) */ mat4_t coord_origin; /*!< Origin of the atomic coordinates */ mat4_t wyck_origin; /*!< Origin of the Wyckoff positions */ }; /*! \typedef box_info \brief model box information */ typedef struct box_info box_info; struct box_info { double param[2][3]; /*!< Box parameters: \n 0: a, b, c \n 1: alpha, beta, gamma */ double vect[3][3]; /*!< Box vectors */ double rvect[3][3]; /*!< Reciprocal vectors */ mat4_t frac_to_cart; /*!< Fractional to Cartesian matrix */ mat4_t cart_to_frac; /*!< Cartesian to fractional matrix */ double vol; /*!< Volume */ double dens; /*!< Density */ }; /*! \typedef cell_info \brief Description of the periodicity */ typedef struct cell_info cell_info; struct cell_info { box_info * box; /*!< Model box description \n In the case of NPT calculation as many boxes as MD steps are described */ int cextra[3]; /*!< Extra boxes (if any), on x, y and z*/ int pbc; /*!< Apply PBC */ int frac; /*!< Are the initial coordinates fractional ? */ int ltype; /*!< Lattice type, in \n 0 = isolated, \n 1 = a,b,c + angles, \n 2 = vectors */ double volume; /*!< Volume, average if NPT */ double density; /*!< Density, average if NPT */ gboolean npt; /*!< NPT trajectory (0 = no, 1 = yes) */ gboolean has_a_box; /*!< Is there a model box ? (0 = no, 1 = yes) */ gboolean crystal; /*!< Is this a crystal ? (0 = no, 1 = yes) */ space_group * sp_group; /*!< Space group in the case of a crystal */ }; typedef struct builder_edition builder_edition; struct builder_edition { GtkWidget * win; GtkWidget * bh_box; GtkWidget * bv_box[2]; GtkWidget * cs_combo; GtkWidget * bl_box; GtkWidget * ltc_box; GtkWidget * ltc_cons; GtkWidget * bv_img; GtkWidget * bl_combo; GtkWidget * sg_box; GtkWidget * sg_combo; GtkWidget * sg_but; GtkWidget * so_box; GtkWidget * so_combo; GtkWidget * so_info; GtkWidget * la_combo; GtkWidget * lattice_grid; GtkWidget * lattice_box; GtkWidget * bentry[2][3]; GtkWidget * ventry[3][3]; GtkWidget * add_combo; GtkWidget * pbut; cell_info cell; int occupancy; gboolean overlapping; gboolean wrap; gboolean clones; int extrac[3]; tint pointers[3][3]; }; typedef struct atom_edition atom_edition; struct atom_edition { GtkWidget * win; GtkWidget * vbox; GtkWidget * notebook; GtkWidget * atom_combo[5]; GtkWidget * axis_combo[2]; GtkWidget * axis_but[2]; GtkWidget * edit_entry[6]; GtkWidget * edit_scale[6]; GtkWidget * at_expand[3]; GtkWidget * edition_but[2]; GtkTreePath ** replace_nodes[2]; gboolean visible; int active; int axis[2]; gboolean show_axis[2]; gboolean rebuilt[2]; gboolean old_axis; float new_param[3][2][6]; float old_param[3][2][6]; int repeat_move; float * msd; float * msd_all; // 0 = REPLACE // 1 = INSERT // 2 = CBUILD // 3 = PASSIVATE atomic_object * to_be_inserted[4]; atomic_object * to_be_moved[2]; int adv_bonding[2]; coord_info * coord; int add_spec; double * new_z; }; typedef struct cell_edition cell_edition; struct cell_edition { GtkWidget * win; GtkWidget * notebook; GtkWidget * put_in_box; GtkWidget * passivate; GtkWidget * superbut; GtkWidget * shift_box[2]; GtkWidget * ax_cell[3]; GtkWidget * edit_entry[21]; GtkWidget * edit_scale[21]; GtkWidget * density_box; GtkWidget * density; gboolean slab_show; gboolean slab_pbc; gboolean cut_this_slab; gboolean slab_passivate; int slab_type; int slab_act; int slab_out; double slab_vol; float slab_alpha; int slab_atoms; int * slab_lot; GtkWidget * slab_opts; GtkWidget * slab_hbox[3]; GtkWidget * slab_param[3]; GtkWidget * slab_box[6]; GtkWidget * slab_info_box; GtkWidget * slab_info; gboolean homo_density; double cparam[21]; double initbox[3]; dint slab_pointer[5]; }; typedef struct opengl_edition opengl_edition; struct opengl_edition { GtkWidget * win; GtkWidget * templates; GtkWidget * param_mat; GtkWidget * m_entry[5]; GtkWidget * m_scale[5]; GtkWidget * lights; GtkWidget * lights_box; GtkWidget * basic[2]; GtkWidget * base_ogl[2][5]; GtkWidget * entogl[5][3]; GtkWidget * advanced_light_box; GtkWidget * light_type; GtkWidget * light_type_box; GtkWidget * light_fix; GtkWidget * light_show; GtkWidget * light_b_entry[2]; GtkWidget * light_entry[6]; GtkWidget * light_b_coord[2]; GtkWidget * dens_box; GtkWidget * depth_box; GtkWidget * fog_range[3]; GtkWidget * param_fog; int proj; dint pointer[6]; tint pos_pointer[5][3]; }; typedef struct coord_edition coord_edition; struct coord_edition { GtkWidget * win; GtkWidget * notebook; GtkTreeStore * rings_model[5]; GtkTreeStore * chains_model; GtkListStore * frag_mol_model[2]; int rst[5], rsz[5], ri[5]; GtkWidget * rilab[5][3]; int cst, csz, ch; GtkWidget * chlab[3]; }; typedef struct measures measures; struct measures { GtkWidget * win; GtkWidget * label; GtkWidget * selection_tree[3]; }; typedef struct volumes volumes; struct volumes { GtkWidget * win; // All model GtkWidget * compb[FILLED_STYLES]; GtkWidget * hboxv[FILLED_STYLES]; GtkWidget * hbvol[FILLED_STYLES]; GtkWidget * lab_vol[FILLED_STYLES]; double angp; // Fragments and molecules int sid[2]; GtkWidget ** fm_compb[2][FILLED_STYLES]; GtkWidget ** fm_hboxv[2][FILLED_STYLES]; GtkWidget ** fm_hbvol[2][FILLED_STYLES]; GtkWidget ** fm_lab_vol[2][FILLED_STYLES]; GtkWidget * fm_vbox[2]; GtkWidget * fm_vvbox[2]; int ngeov[2]; int * geov_id[2]; }; typedef struct model_edition model_edition; struct model_edition { GtkWidget * win; GtkWidget * notebook; }; /*! \typedef glwin \brief OpenGL window widget structure */ typedef struct glwin glwin; struct glwin { gboolean init; /*!< Was rendering initialized (0 = no, 1 = yes) */ int proj; /*!< Target project */ // The entire OpenGL window GtkWidget * win; // The menu bar GtkWidget * menu_box; GtkWidget * menu_bar; #ifdef GTK3 // OpenGL menus GtkWidget * ogl_styles[OGL_STYLES]; GtkWidget * filled_styles[FILLED_STYLES]; GtkWidget * color_styles[ATOM_MAPS+POLY_MAPS]; GtkWidget * ogl_render[OGL_RENDERS]; GtkWidget * ogl_rep[OGL_REPS]; GtkWidget * ogl_quality; GtkWidget ** ogl_box_axis[2]; GtkWidget * ogl_box[8]; GtkWidget * ogl_mouse[3]; GtkWidget * ogl_atoms[8]; GtkWidget ** ogl_spec[2]; GtkWidget ** ogl_lab[2]; GtkWidget * ogl_bonds[14]; GtkWidget * ogl_clones[6]; GtkWidget * ogl_coord[OGL_COORDS]; GtkWidget * ogl_rings[OGL_RINGS]; GtkWidget * ogl_chains[2]; GtkWidget ** ogl_geom[2][10]; GtkWidget ** ogl_poly[2][9]; GtkWidget ** oglmv[2][10]; // Coordination sphere show/hide menus GtkWidget ** oglmc[2][9]; // Coordination sphere color menus GtkWidget ** oglmpv[2][9]; // Polyhedra view/hide menus GtkWidget * ogl_mode[2+2*NINPUTS]; GtkWidget * ogl_smode[NSELECTION]; GtkWidget * ogl_anim[2]; #endif GtkWidget * camera_widg[7]; GtkWidget * rbuild[2]; GtkWidget * cbuilder; // Matrices vec3_t model_position; vec4_t view_port; mat4_t projection_matrix; mat4_t model_matrix; mat4_t view_matrix; mat4_t un_view_matrix; mat4_t model_view_matrix; mat4_t view_model_matrix; mat4_t proj_model_matrix; mat4_t proj_model_view_matrix; mat4_t proj_view_matrix; mat4_t normal_matrix; mat4_t axis_proj_model_view_matrix; mat4_t label_projection_matrix; gboolean create_shaders[NGLOBAL_SHADERS]; glsl_program *** ogl_glsl[NGLOBAL_SHADERS]; int * n_shaders[NGLOBAL_SHADERS]; opengl_edition * opengl_win; model_edition * model_win[2]; builder_edition * builder_win; // OpenGL plot GtkWidget * plot; #ifndef GTKGLAREA GLXContext glcontext; #endif int pixels[2]; int mouseX; int mouseY; int mouseAction; int mouseStatus; int nth_copy; gboolean to_pick; // Action mode // 0 = analyze (normal), 1 = edit structure int mode; /*!< Mouse mode, in: \n 0 = analyze (default), \n 1 = edition (default for new project) */ // Selection mode int selection_mode; /*!< Mouse selection mode, in: \n 0 = atom / bond, \n 1 = total coordination sphere, \n 2 = partial coordination sphere, \n 3 = fragment, \n 4 = molecule, \n 5 = single fragment, \n 6 = single molecule, \n 7 = selection in edition mode */ // For temporary backup purposes only: atom_selection * tmp_sel[2]; int * stored_labels[2]; int other_status; coord_edition * coord_win; int cmap[ATOM_MAPS]; atom_edition * atom_win; double ** saved_coord[3]; cell_edition * cell_win; // 0 = atoms // 1 = clones // 2 = MOVE // 3 = REPLACE // 4 = REMOVE // 5 = INSERT // 6 = RANMOVE // 7 = CBUILDER // 8 = PASSIVATE atom_search * search_widg[9]; vec3_t baryc[3]; vec3_t insert_coords; // 0 = Status // 1 = Translation / Rotation // 3 = x_t, y_t, z_t, x_r, y_r, z_r float edition_param[3][2][6]; // 0-2 translation, 3-5 rotation // Color pointers, these are used to deal with the // Callbacks for the OpenGL window menus, and are used // for atoms / box / axis ... tint * colorp[64]; /*!< Color pointers \n these are used to deal with the Callbacks for the OpenGL window, \n and are used for atoms / box / axis ... */ colormap * custom_map; /*!< User defined color map, if any */ int allbonds[2]; /*!< Total number of chemical bond(s): \n 0 = normal bond(s), \n 1 = cloned bonds */ int ** bonds; /*!< Number of bond(s) by MD step, then 0/1=normal/cloned */ int **** bondid; /*!< Atoms ID in bonds, by MD step, then 0/1=norm/clones, then bond ID */ // Clones vec3_t ** clones; /*!< List of cloned atomic coordiantes */ gboolean prepare_motion; gboolean was_moved; // Rebuild trigger switch on edition // [0] = on move: // [0] atom_win active: 0/1 to turn off/on // [1] atom_win inactive: 0/1 to turn off/on // [1] = on copy: // [0] atom_win active: 0/1 to turn off/on // [1] atom_win inactive: 0/1 to turn off/on gboolean rebuild[2][2]; /*!< Rebuild trigger switch on edition: \n [0] = on move: \n [0] atom_win active: 0/1 to turn off/on \n [1] atom_win inactive: 0/1 to turn off/on \n [1] = on copy: \n [0] atom_win active: 0/1 to turn off/on \n [1] atom_win inactive: 0/1 to turn off/on */ gboolean bonding; gboolean adv_bonding[2]; /*!< Is advanced bonding information available, \n 0 = Fragments, \n 1 = Molecules */ qint ** gcid[10]; /*!< Geom colors pointers */ gboolean rings; int ring_max[5]; /*!< The largest ring size */ int ** num_rings[5]; /*!< The number of rings (search type, step, ring size) */ int **** all_rings[5]; /*!< The ring(s) of atoms */ gboolean *** show_rpoly[5]; /*!< Show polyhedra of selected rings */ gboolean chains; int chain_max; /*!< The largest chain size */ int ** num_chains; /*!< The number of chains (chain size, step) */ int **** all_chains; /*!< The chain(s) of atoms */ // Volumes data gboolean volumes; double * atoms_volume[FILLED_STYLES]; double * atoms_ppvolume[FILLED_STYLES]; // [9] : a,b,c,alpha,beta,gama,p.x,p.y,p.z double ** volume_box[FILLED_STYLES]; gboolean comp_vol[FILLED_STYLES]; double ** frag_mol_volume[2][FILLED_STYLES]; double ** frag_mol_ppvolume[2][FILLED_STYLES]; double *** frag_box[FILLED_STYLES]; gboolean ** fm_comp_vol[2][FILLED_STYLES]; int labelled; int picked; // Color picking int to_be_picked; /*!< Total number of objects that can be picked */ int atoms_to_be_picked; /*!< Number of atoms that can be picked */ int clones_to_be_picked; /*!< Number of clones that can be picked */ int bonds_to_be_picked; /*!< Number of bonds that can be picked (do not include clones) */ int * color_to_pick; /*!< The different colors that can be picked */ // Spinner, player sequencer * player; gboolean play; gboolean stop; gboolean loop; int speed; spinner * spiner; gboolean spin[4]; int spin_speed[4]; recorder * rec; gboolean record; int frames; animation * anim; double cshift[3]; gboolean wrapped; measures * measure_win; volumes * volume_win; float zoom_factor; GLdouble p_moy; gboolean fullscreen; int action_id; GSimpleActionGroup * action_group; }; #endif Atomes-GNU-1.1.14/src/opengl/math_3d.h000066400000000000000000001006561457665371200172500ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file math_3d.h * @short Functions for OpenGL math * @author Sébastien Le Roux * @author Stephan Soller * @author Tobias Malmsheimer */ /* * This header file: 'math_3d.h' * * Contains: - Functions for OpenGL math */ /* The following was adapted from the file Math 3D v1.0 By Stephan Soller and Tobias Malmsheimer The original file was modified and completed to match 'atomes' needs. */ /* Math 3D is a compact C99 library meant to be used with OpenGL. It provides basic 3D vector and 4x4 matrix operations as well as functions to create transformation and projection matrices. The OpenGL binary layout is used so you can just upload vectors and matrices into shaders and work with them without any conversions. It's an stb style single header file library. Define MATH_3D_IMPLEMENTATION before you include this file in *one* C file to create the implementation. QUICK NOTES - If not explicitly stated by a parameter name all angles are in radians. - The matrices use column-major indices. This is the same as in OpenGL and GLSL. The matrix documentation below for details. - Matrices are passed by value. This is probably a bit inefficient but simplifies code quite a bit. Most operations will be inlined by the compiler anyway so the difference shouldn't matter that much. A matrix fits into 4 of the 16 SSE2 registers anyway. If profiling shows significant slowdowns the matrix type might change but ease of use is more important than every last percent of performance. - When combining matrices with multiplication the effects apply right to left. This is the convention used in mathematics and OpenGL. Source: https://en.wikipedia.org/wiki/Transformation_matrix#Composing_and_inverting_transformations Direct3D does it differently. - The `m4_mul_pos()` and `m4_mul_dir()` functions do a correct perspective divide (division by w) when necessary. This is a bit slower but ensures that the functions will properly work with projection matrices. If profiling shows this is a bottleneck special functions without perspective division can be added. But the normal multiplications should avoid any surprises. - The library consistently uses a right-handed coordinate system. The old `glOrtho()` broke that rule and `m4_ortho()` has be slightly modified so you can always think of right-handed cubes that are projected into OpenGLs normalized device coordinates. - Special care has been taken to document all complex operations and important sources. Most code is covered by test cases that have been manually calculated and checked on the whiteboard. Since indices and math code is prone to be confusing we used pair programming to avoid mistakes. FURTHER IDEAS These are ideas for future work on the library. They're implemented as soon as there is a proper use case and we can find good names for them. - bool v3_is_null(vec3_t v, float epsilon) To check if the length of a vector is smaller than `epsilon`. - vec3_t v3_length_default(vec3_t v, float default_length, float epsilon) Returns `default_length` if the length of `v` is smaller than `epsilon`. Otherwise same as `v3_length()`. - vec3_t v3_norm_default(vec3_t v, vec3_t default_vector, float epsilon) Returns `default_vector` if the length of `v` is smaller than `epsilon`. Otherwise the same as `v3_norm()`. - mat4_t m4_invert(mat4_t matrix) Matrix inversion that works with arbitrary matrices. `m4_invert_affine()` can already invert translation, rotation, scaling, mirroring, reflection and shearing matrices. So a general inversion might only be useful to invert projection matrices for picking. But with orthographic and perspective projection it's probably simpler to calculate the ray into the scene directly based on the screen coordinates. VERSION HISTORY v1.0 2016-02-15 Initial release **/ #ifndef MATH_3D_H_ #define MATH_3D_H_ #include #include // Define PI directly because we would need to define the _BSD_SOURCE or // _XOPEN_SOURCE feature test macros to get it from math.h. That would be a // rather harsh dependency. So we define it directly if necessary. #ifndef M_PI #define M_PI 3.14159265358979323846 #endif // // 3D vectors // // Use the `vec3()` function to create vectors. All other vector functions start // with the `v3_` prefix. // // The binary layout is the same as in GLSL and everything else (just 3 floats). // So you can just upload the vectors into shaders as they are. // typedef struct { float x, y, z; } vec3_t; static inline vec3_t vec3(float x, float y, float z) { return (vec3_t){ x, y, z }; } static inline vec3_t v3_add (vec3_t a, vec3_t b) { return (vec3_t){ a.x + b.x, a.y + b.y, a.z + b.z }; } static inline vec3_t v3_adds (vec3_t a, float s) { return (vec3_t){ a.x + s, a.y + s, a.z + s }; } static inline vec3_t v3_sub (vec3_t a, vec3_t b) { return (vec3_t){ a.x - b.x, a.y - b.y, a.z - b.z }; } static inline vec3_t v3_subs (vec3_t a, float s) { return (vec3_t){ a.x - s, a.y - s, a.z - s }; } static inline vec3_t v3_mul (vec3_t a, vec3_t b) { return (vec3_t){ a.x * b.x, a.y * b.y, a.z * b.z }; } static inline vec3_t v3_muls (vec3_t a, float s) { return (vec3_t){ a.x * s, a.y * s, a.z * s }; } static inline vec3_t v3_div (vec3_t a, vec3_t b) { return (vec3_t){ a.x / b.x, a.y / b.y, a.z / b.z }; } static inline vec3_t v3_divs (vec3_t a, float s) { return (vec3_t){ a.x / s, a.y / s, a.z / s }; } static inline float v3_length(vec3_t v) { return sqrtf(v.x*v.x + v.y*v.y + v.z*v.z); } static inline vec3_t v3_norm (vec3_t v); static inline float v3_dot (vec3_t a, vec3_t b) { return a.x*b.x + a.y*b.y + a.z*b.z; } static inline vec3_t v3_proj (vec3_t v, vec3_t onto); static inline vec3_t v3_cross (vec3_t a, vec3_t b); static inline float v3_angle_between(vec3_t a, vec3_t b); /* Sébastien Le Roux - quaternions - 6/02/2017 */ typedef struct { float w, x, y, z; } vec4_t; static inline vec4_t vec4(float w, float x, float y, float z) { return (vec4_t){ w, x, y, z }; } static inline vec4_t v4_add (vec4_t a, vec4_t b) { return (vec4_t){ a.w + b.w, a.x + b.x, a.y + b.y, a.z + b.z }; } static inline vec4_t v4_adds (vec4_t a, float s) { return (vec4_t){ a.w + s, a.x + s, a.y + s, a.z + s }; } static inline vec4_t v4_sub (vec4_t a, vec4_t b) { return (vec4_t){ a.w - b.w, a.x - b.x, a.y - b.y, a.z - b.z }; } static inline vec4_t v4_subs (vec4_t a, float s) { return (vec4_t){ a.w - s, a.x - s, a.y - s, a.z - s }; } static inline vec4_t v4_mul (vec4_t a, vec4_t b) { return (vec4_t){ a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z }; } static inline vec4_t v4_muls (vec4_t a, float s) { return (vec4_t){ a.w * s, a.x * s, a.y * s, a.z * s }; } static inline vec4_t v4_div (vec4_t a, vec4_t b) { return (vec4_t){ a.w / b.w, a.x / b.x, a.y / b.y, a.z / b.z }; } static inline vec4_t v4_divs (vec4_t a, float s) { return (vec4_t){ a.w / s, a.x / s, a.y / s, a.z / s }; } static inline float v4_length(vec4_t v) { return sqrtf(v.w*v.w + v.x*v.x + v.y*v.y + v.z*v.z); } static inline vec4_t v4_norm (vec4_t v); static inline vec4_t v4_mul (vec4_t a, vec4_t b); // // 4x4 matrices // // Use the `mat4()` function to create a matrix. You can write the matrix // members in the same way as you would write them on paper or on a whiteboard: // // mat4_t m = mat4( // 1, 0, 0, 7, // 0, 1, 0, 5, // 0, 0, 1, 3, // 0, 0, 0, 1 // ) // // This creates a matrix that translates points by vec3(7, 5, 3). All other // matrix functions start with the `m4_` prefix. Among them functions to create // identity, translation, rotation, scaling and projection matrices. // // The matrix is stored in column-major order, just as OpenGL expects. Members // can be accessed by indices or member names. When you write a matrix on paper // or on the whiteboard the indices and named members correspond to these // positions: // // | m[0][0] m[1][0] m[2][0] m[3][0] | // | m[0][1] m[1][1] m[2][1] m[3][1] | // | m[0][2] m[1][2] m[2][2] m[3][2] | // | m[0][3] m[1][3] m[2][3] m[3][3] | // // | m00 m10 m20 m30 | // | m01 m11 m21 m31 | // | m02 m12 m22 m32 | // | m03 m13 m23 m33 | // // The first index or number in a name denotes the column, the second the row. // So m[i][j] denotes the member in the ith column and the jth row. This is the // same as in GLSL (source: GLSL v1.3 specification, 5.6 Matrix Components). // typedef union { // The first index is the column index, the second the row index. The memory // layout of nested arrays in C matches the memory layout expected by OpenGL. float m[4][4]; // OpenGL expects the first 4 floats to be the first column of the matrix. // So we need to define the named members column by column for the names to // match the memory locations of the array elements. struct { float m00, m01, m02, m03; float m10, m11, m12, m13; float m20, m21, m22, m23; float m30, m31, m32, m33; }; } mat4_t; static inline mat4_t mat4( float m00, float m10, float m20, float m30, float m01, float m11, float m21, float m31, float m02, float m12, float m22, float m32, float m03, float m13, float m23, float m33 ); static inline mat4_t m4_identity (); static inline mat4_t m4_translation (vec3_t offset); static inline mat4_t m4_scaling (vec3_t scale); static inline mat4_t m4_rotation_x (float angle_in_rad); static inline mat4_t m4_rotation_y (float angle_in_rad); static inline mat4_t m4_rotation_z (float angle_in_rad); static inline mat4_t m4_rotation (float angle_in_rad, vec3_t axis); // // Sébastien Le Roux - Quaternions - 6/02/2017 // static inline vec4_t axis_to_quat (vec3_t axis, float angle_in_rad); static inline mat4_t m4_quat_rotation (vec4_t q); static inline mat4_t m4_ortho (float left, float right, float bottom, float top, float back, float front); static inline mat4_t m4_perspective (float vertical_field_of_view_in_deg, float aspect_ratio, float near_view_distance, float far_view_distance); static inline mat4_t m4_frustum (float left, float right, float bottom, float top, float front, float back); static inline mat4_t m4_look_at (vec3_t from, vec3_t to, vec3_t up); static inline mat4_t m4_transpose (mat4_t matrix); static inline mat4_t m4_mul (mat4_t a, mat4_t b); static inline mat4_t m43_mul(mat4_t a, mat4_t b); static inline mat4_t m4_invert_affine(mat4_t matrix); static inline mat4_t m4_translate (mat4_t matrix, vec3_t translation); static inline vec3_t m4_mul_pos (mat4_t matrix, vec3_t position); static inline vec3_t m4_mul_coord (mat4_t matrix, vec3_t position); static inline vec3_t m4_mul_abc (mat4_t matrix, vec3_t position); static inline vec3_t m4_mul_dir (mat4_t matrix, vec3_t direction); static inline void m4_print (mat4_t matrix); static inline void m4_printp (mat4_t matrix, int width, int precision); static inline void m4_fprint (FILE* stream, mat4_t matrix); static inline void m4_fprintp (FILE* stream, mat4_t matrix, int width, int precision); // // 3D vector functions header implementation // static inline vec3_t v3_norm(vec3_t v) { float len = v3_length(v); if (len > 0.0) return (vec3_t){ v.x / len, v.y / len, v.z / len }; else return (vec3_t){ 0, 0, 0}; } static inline vec3_t v3_proj(vec3_t v, vec3_t onto) { return v3_muls(onto, v3_dot(v, onto) / v3_dot(onto, onto)); } static inline vec3_t v3_cross(vec3_t a, vec3_t b) { return (vec3_t){ a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x }; } static inline float v3_angle_between(vec3_t a, vec3_t b) { return acosf( v3_dot(a, b) / (v3_length(a) * v3_length(b)) ); } // // Sébastien Le Roux - Quaternions - 6/02/2017 // static inline vec4_t v4_norm(vec4_t v) { float len = v4_length(v); if (len > 0.0) return (vec4_t){ v.w / len, v.x / len, v.y / len , v.z / len}; else return (vec4_t){ 0, 0, 0, 0}; } static inline vec4_t q4_mul(vec4_t a, vec4_t b) { return (vec4_t){ a.z * b.w + a.w * b.z + a.x * b.y - a.y * b.x, a.z * b.x + a.x * b.z + a.y * b.w - a.w * b.y, a.z * b.y + a.y * b.z + a.w * b.x - a.x * b.w, a.z * b.z - (a.w * b.w + a.x * b.x + a.y * b.y)}; } // // Matrix functions header implementation // static inline mat4_t mat4( float m00, float m10, float m20, float m30, float m01, float m11, float m21, float m31, float m02, float m12, float m22, float m32, float m03, float m13, float m23, float m33 ) { return (mat4_t){ .m[0][0] = m00, .m[1][0] = m10, .m[2][0] = m20, .m[3][0] = m30, .m[0][1] = m01, .m[1][1] = m11, .m[2][1] = m21, .m[3][1] = m31, .m[0][2] = m02, .m[1][2] = m12, .m[2][2] = m22, .m[3][2] = m32, .m[0][3] = m03, .m[1][3] = m13, .m[2][3] = m23, .m[3][3] = m33 }; } static inline mat4_t m4_identity() { return mat4( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_translation(vec3_t offset) { return mat4( 1, 0, 0, offset.x, 0, 1, 0, offset.y, 0, 0, 1, offset.z, 0, 0, 0, 1 ); } static inline mat4_t m4_scaling(vec3_t scale) { float x = scale.x, y = scale.y, z = scale.z; return mat4( x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_rotation_x(float angle_in_rad) { float s = sinf(angle_in_rad), c = cosf(angle_in_rad); return mat4( 1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_rotation_y(float angle_in_rad) { float s = sinf(angle_in_rad), c = cosf(angle_in_rad); return mat4( c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_rotation_z(float angle_in_rad) { float s = sinf(angle_in_rad), c = cosf(angle_in_rad); return mat4( c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1 ); } static inline mat4_t m4_transpose(mat4_t matrix) { return mat4( matrix.m00, matrix.m01, matrix.m02, matrix.m03, matrix.m10, matrix.m11, matrix.m12, matrix.m13, matrix.m20, matrix.m21, matrix.m22, matrix.m23, matrix.m30, matrix.m31, matrix.m32, matrix.m33 ); } /** * Multiplication of two 4x4 matrices. * * Implemented by following the row times column rule and illustrating it on a * whiteboard with the proper indices in mind. * * Further reading: https://en.wikipedia.org/wiki/Matrix_multiplication * But note that the article use the first index for rows and the second for * columns. */ static inline mat4_t m4_mul(mat4_t a, mat4_t b) { mat4_t result; int i, j, k; for(i = 0; i < 4; i++) { for(j = 0; j < 4; j++) { float sum = 0; for(k = 0; k < 4; k++) { sum += a.m[k][j] * b.m[i][k]; } result.m[i][j] = sum; } } return result; } static inline mat4_t m43_mul(mat4_t a, mat4_t b) { mat4_t result; int i, j, k; for(i = 0; i < 4; i++) { for(j = 0; j < 3; j++) { float sum = 0; for(k = 0; k < 4; k++) { sum += a.m[k][j] * b.m[i][k]; } result.m[i][j] = sum; //if (i < 3 && result.m[i][j] != 0.0) result.m[i][j] /= fabs(sum); } } result.m03 = result.m13 = result.m23 = result.m33 = 0.0; return result; } #endif // MATH_3D_HEADER #ifndef MATH_3D_IMPLEMENTATION #define MATH_3D_IMPLEMENTATION /** * Creates a matrix to rotate around an axis by a given angle. The axis doesn't * need to be normalized. * * Sources: * * https://en.wikipedia.org/wiki/Rotation_matrix#Rotation_matrix_from_axis_and_angle */ static inline mat4_t m4_rotation (float angle_in_rad, vec3_t axis) { vec3_t normalized_axis = v3_norm(axis); float x = normalized_axis.x, y = normalized_axis.y, z = normalized_axis.z; float c = cosf(angle_in_rad), s = sinf(angle_in_rad); return mat4( c + x*x*(1-c), x*y*(1-c) - z*s, x*z*(1-c) + y*s, 0, y*x*(1-c) + z*s, c + y*y*(1-c), y*z*(1-c) - x*s, 0, z*x*(1-c) - y*s, z*y*(1-c) + x*s, c + z*z*(1-c), 0, 0, 0, 0, 1 ); } /* Sébastien Le Roux 08/07/2022 Rotation 3D, on x, y and z, providing angles in degrees [ 0 - 90 ] */ static inline mat4_t m4_rotation_anti_xyz (float alpha, float beta, float gamma) { mat4_t rot = m4_identity (); vec4_t qr; double pi = 3.141592653589793238462643383279502884197; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); qr = axis_to_quat (ax[2], - gamma*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[1], - beta*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[0], - alpha*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); return rot; } static inline mat4_t m4_rotation_xyz (float alpha, float beta, float gamma) { mat4_t rot = m4_identity (); vec4_t qr; double pi = 3.141592653589793238462643383279502884197; vec3_t ax[3]; ax[0] = vec3(1.0,0.0,0.0); ax[1] = vec3(0.0,1.0,0.0); ax[2] = vec3(0.0,0.0,1.0); qr = axis_to_quat (ax[0], alpha*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[1], beta*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); qr = axis_to_quat (ax[2], gamma*pi/90.0); rot = m4_mul (rot, m4_quat_rotation (qr)); return rot; } /* Sébastien Le Roux 06/02/2017 Quaternion rotation */ static inline vec4_t axis_to_quat (vec3_t axis, float angle_in_rad) { vec4_t qr; float half_angle = angle_in_rad/2.0; float n = sinf(half_angle)/v3_length(axis); qr.w = axis.x * n; qr.x = axis.y * n; qr.y = axis.z * n; qr.z = cosf(half_angle); return v4_norm (qr); } static inline vec4_t m4_mul_v4 (mat4_t mat, vec4_t vec) { int i; float out[4]; float in[4] = {vec.w, vec.x, vec.y, vec.z}; for (i=0; i<4; i++) { out[i] = in[0] * mat.m[0][i] + in[1] * mat.m[1][i] + in[2] * mat.m[2][i] + in[3] * mat.m[3][i]; } return vec4(out[0], out[1], out[2], out[3]); } static inline mat4_t m4_quat_rotation (vec4_t q) { // I consider that the quaternion is already normalized // vec4_t n_quat = v4_norm(q); return mat4( 1.0 - 2.0 * (q.x * q.x + q.y * q.y), 2.0 * (q.w * q.x + q.y * q.z), 2.0 * (q.y * q.w - q.x * q.z), 0, 2.0 * (q.w * q.x - q.y * q.z), 1.0 - 2.0 * (q.y * q.y + q.w * q.w), 2.0 * (q.x * q.y + q.w * q.z), 0, 2.0 * (q.y * q.w + q.x * q.z), 2.0 * (q.x * q.y - q.w * q.z), 1.0 - 2.0 * (q.x * q.x + q.w * q.w), 0, 0, 0, 0, 1 ); } static inline vec3_t v3_project (vec3_t worldpos, vec4_t viewport, mat4_t projection) { mat4_t mod = m4_mul(projection, m4_translation(worldpos)); vec4_t out = m4_mul_v4 (mod, vec4(0.0, 0.0, 0.0, 1.0)); if (out.z != 0.0) { out.z = 1.0 / out.z; out.w = out.z * out.w + 1.0; out.x = out.z * out.x + 1.0; out.y = out.z * out.y + 1.0; return vec3(out.w*viewport.y + viewport.w, out.x*viewport.z + viewport.x, out.y); } else { return vec3 (0.0, 0.0, -1.0); } } static inline vec3_t v3_un_project (vec3_t winpos, vec4_t viewport, mat4_t projection) { vec3_t in = vec3 (2.0*(winpos.x-viewport.w)/viewport.y - 1.0, 2.0*((viewport.z-winpos.y)-viewport.x)/viewport.z - 1.0, 2.0*winpos.z-1.0); return m4_mul_pos (m4_invert_affine(projection), in); } /** * Creates an orthographic projection matrix. It maps the right handed cube * defined by left, right, bottom, top, back and front onto the screen and * z-buffer. You can think of it as a cube you move through world or camera * space and everything inside is visible. * * This is slightly different from the traditional glOrtho() and from the linked * sources. These functions require the user to negate the last two arguments * (creating a left-handed coordinate system). We avoid that here so you can * think of this function as moving a right-handed cube through world space. * * The arguments are ordered in a way that for each axis you specify the minimum * followed by the maximum. Thats why it's bottom to top and back to front. * * Implementation details: * * To be more exact the right-handed cube is mapped into normalized device * coordinates, a left-handed cube where (-1 -1) is the lower left corner, * (1, 1) the upper right corner and a z-value of -1 is the nearest point and * 1 the furthest point. OpenGL takes it from there and puts it on the screen * and into the z-buffer. * * Sources: * * https://msdn.microsoft.com/en-us/library/windows/desktop/dd373965(v=vs.85).aspx * https://unspecified.wordpress.com/2012/06/21/calculating-the-gluperspective-matrix-and-other-opengl-matrix-maths/ */ static inline mat4_t m4_ortho(float left, float right, float bottom, float top, float back, float front) { float l = left, r = right, b = bottom, t = top, n = front, f = back; float tx = -(r + l) / (r - l); float ty = -(t + b) / (t - b); float tz = -(f + n) / (f - n); return mat4( 2 / (r - l), 0, 0, tx, 0, 2 / (t - b), 0, ty, 0, 0, 2 / (f - n), tz, 0, 0, 0, 1 ); } /** * Creates a perspective projection matrix for a camera. * * The camera is at the origin and looks in the direction of the negative Z axis. * `near_view_distance` and `far_view_distance` have to be positive and > 0. * They are distances from the camera eye, not values on an axis. * * `near_view_distance` can be small but not 0. 0 breaks the projection and * everything ends up at the max value (far end) of the z-buffer. Making the * z-buffer useless. * * The matrix is the same as `gluPerspective()` builds. The view distance is * mapped to the z-buffer with a reciprocal function (1/x). Therefore the z-buffer * resolution for near objects is very good while resolution for far objects is * limited. * * Sources: * * https://unspecified.wordpress.com/2012/06/21/calculating-the-gluperspective-matrix-and-other-opengl-matrix-maths/ */ static inline mat4_t m4_perspective(float vertical_field_of_view_in_deg, float aspect_ratio, float near_view_distance, float far_view_distance) { float fovy_in_rad = vertical_field_of_view_in_deg / 180 * M_PI; float f = 1.0f / tanf(fovy_in_rad / 2.0f); float ar = aspect_ratio; float nd = near_view_distance, fd = far_view_distance; return mat4( f / ar, 0, 0, 0, 0, f, 0, 0, 0, 0, (fd+nd)/(nd-fd), (2*fd*nd)/(nd-fd), 0, 0, -1, 0 ); } /** * Sébastien Le Roux 6/02/2017 Follwing glFrustum man page */ static inline mat4_t m4_frustum (float left, float right, float bottom, float top, float front, float back) { float n = 2.0f * front; float l = right - left; float p = top - bottom; float a = (right + left) / l; float b = (top + bottom) / p; float c = -(back + front) / (back - front); float d = - back * n / (back - front); return mat4( n / l, 0, a, 0, 0, n / p, b, 0, 0, 0, c, d, 0, 0, -1, 0 ); } /** * Builds a transformation matrix for a camera that looks from `from` towards * `to`. `up` defines the direction that's upwards for the camera. All three * vectors are given in world space and `up` doesn't need to be normalized. * * Sources: Derived on whiteboard. * * Implementation details: * * x, y and z are the right-handed base vectors of the cameras subspace. * x has to be normalized because the cross product only produces a normalized * output vector if both input vectors are orthogonal to each other. And up * probably isn't orthogonal to z. * * These vectors are then used to build a 3x3 rotation matrix. This matrix * rotates a vector by the same amount the camera is rotated. But instead we * need to rotate all incoming vertices backwards by that amount. That's what a * camera matrix is for: To move the world so that the camera is in the origin. * So we take the inverse of that rotation matrix and in case of an rotation * matrix this is just the transposed matrix. That's why the 3x3 part of the * matrix are the x, y and z vectors but written horizontally instead of * vertically. * * The translation is derived by creating a translation matrix to move the world * into the origin (thats translate by minus `from`). The complete lookat matrix * is then this translation followed by the rotation. Written as matrix * multiplication: * * lookat = rotation * translation * * Since we're right-handed this equals to first doing the translation and after * that doing the rotation. During that multiplication the rotation 3x3 part * doesn't change but the translation vector is multiplied with each rotation * axis. The dot product is just a more compact way to write the actual * multiplications. */ static inline mat4_t m4_look_at(vec3_t from, vec3_t to, vec3_t up) { vec3_t z = v3_muls(v3_norm(v3_sub(to, from)), -1); vec3_t x = v3_norm(v3_cross(up, z)); vec3_t y = v3_cross(z, x); return mat4( x.x, x.y, x.z, -v3_dot(from, x), y.x, y.y, y.z, -v3_dot(from, y), z.x, z.y, z.z, -v3_dot(from, z), 0, 0, 0, 1 ); } /** * Inverts an affine transformation matrix. That are translation, scaling, * mirroring, reflection, rotation and shearing matrices or any combination of * them. * * Implementation details: * * - Invert the 3x3 part of the 4x4 matrix to handle rotation, scaling, etc. * correctly (see source). * - Invert the translation part of the 4x4 matrix by multiplying it with the * inverted rotation matrix and negating it. * * When a 3D point is multiplied with a transformation matrix it is first * rotated and then translated. The inverted transformation matrix is the * inverse translation followed by the inverse rotation. Written as a matrix * multiplication (remember, the effect applies right to left): * * inv(matrix) = inv(rotation) * inv(translation) * * The inverse translation is a translation into the opposite direction, just * the negative translation. The rotation part isn't changed by that * multiplication but the translation part is multiplied by the inverse rotation * matrix. It's the same situation as with `m4_look_at()`. But since we don't * store the rotation matrix as 3D vectors we can't use the dot product and have * to write the matrix multiplication operations by hand. * * Sources for 3x3 matrix inversion: * * https://www.khanacademy.org/math/precalculus/precalc-matrices/determinants-and-inverses-of-large-matrices/v/inverting-3x3-part-2-determinant-and-adjugate-of-a-matrix */ static inline mat4_t m4_invert_affine(mat4_t matrix) { // Create shorthands to access matrix members float m00 = matrix.m00, m10 = matrix.m10, m20 = matrix.m20, m30 = matrix.m30; float m01 = matrix.m01, m11 = matrix.m11, m21 = matrix.m21, m31 = matrix.m31; float m02 = matrix.m02, m12 = matrix.m12, m22 = matrix.m22, m32 = matrix.m32; // Invert 3x3 part of the 4x4 matrix that contains the rotation, etc. // That part is called R from here on. // Calculate cofactor matrix of R float c00 = m11*m22 - m12*m21, c10 = -(m01*m22 - m02*m21), c20 = m01*m12 - m02*m11; float c01 = -(m10*m22 - m12*m20), c11 = m00*m22 - m02*m20, c21 = -(m00*m12 - m02*m10); float c02 = m10*m21 - m11*m20, c12 = -(m00*m21 - m01*m20), c22 = m00*m11 - m01*m10; // Caclculate the determinant by using the already calculated determinants // in the cofactor matrix. // Second sign is already minus from the cofactor matrix. float det = m00*c00 + m10*c10 + m20 * c20; if (fabsf(det) == 0.0000) return m4_identity(); // Calcuate inverse of R by dividing the transposed cofactor matrix by the // determinant. float i00 = c00 / det, i10 = c01 / det, i20 = c02 / det; float i01 = c10 / det, i11 = c11 / det, i21 = c12 / det; float i02 = c20 / det, i12 = c21 / det, i22 = c22 / det; // Combine the inverted R with the inverted translation return mat4( i00, i10, i20, -(i00*m30 + i10*m31 + i20*m32), i01, i11, i21, -(i01*m30 + i11*m31 + i21*m32), i02, i12, i22, -(i02*m30 + i12*m31 + i22*m32), 0, 0, 0, 1 ); } static inline mat4_t m4_translate (mat4_t matrix, vec3_t translation) { return mat4( matrix.m00, matrix.m10, matrix.m20, matrix.m30 + translation.x, matrix.m01, matrix.m11, matrix.m21, matrix.m31 + translation.y, matrix.m02, matrix.m12, matrix.m22, matrix.m32 + translation.z, matrix.m03, matrix.m13, matrix.m23, matrix.m33 ); } /** * Multiplies a 4x4 matrix with a 3D vector representing a point in 3D space. * * Before the matrix multiplication the vector is first expanded to a 4D vector * (x, y, z, 1). After the multiplication the vector is reduced to 3D again by * dividing through the 4th component (if it's not 0 or 1). */ static inline vec3_t m4_mul_pos(mat4_t matrix, vec3_t position) { vec3_t result = vec3( matrix.m00 * position.x + matrix.m10 * position.y + matrix.m20 * position.z + matrix.m30, matrix.m01 * position.x + matrix.m11 * position.y + matrix.m21 * position.z + matrix.m31, matrix.m02 * position.x + matrix.m12 * position.y + matrix.m22 * position.z + matrix.m32 ); float w = matrix.m03 * position.x + matrix.m13 * position.y + matrix.m23 * position.z + matrix.m33; if (w != 0.0) return vec3(result.x / w, result.y / w, result.z / w); return result; } static inline vec3_t m4_mul_coord(mat4_t matrix, vec3_t position) { vec3_t result = vec3( matrix.m00 * position.x + matrix.m10 * position.y + matrix.m20 * position.z + matrix.m30, matrix.m01 * position.x + matrix.m11 * position.y + matrix.m21 * position.z + matrix.m31, matrix.m02 * position.x + matrix.m12 * position.y + matrix.m22 * position.z + matrix.m32 ); return result; } static inline vec3_t m4_mul_abc(mat4_t matrix, vec3_t direction) { vec3_t result = vec3( matrix.m00 * direction.x + matrix.m10 * direction.y + matrix.m20 * direction.z, matrix.m01 * direction.x + matrix.m11 * direction.y + matrix.m21 * direction.z, matrix.m02 * direction.x + matrix.m12 * direction.y + matrix.m22 * direction.z ); return result; } /** * Multiplies a 4x4 matrix with a 3D vector representing a direction in 3D space. * * Before the matrix multiplication the vector is first expanded to a 4D vector * (x, y, z, 0). For directions the 4th component is set to 0 because directions * are only rotated, not translated. After the multiplication the vector is * reduced to 3D again by dividing through the 4th component (if it's not 0 or * 1). This is necessary because the matrix might contains something other than * (0, 0, 0, 1) in the bottom row which might set w to something other than 0 * or 1. */ static inline vec3_t m4_mul_dir(mat4_t matrix, vec3_t direction) { vec3_t result = vec3( matrix.m00 * direction.x + matrix.m10 * direction.y + matrix.m20 * direction.z, matrix.m01 * direction.x + matrix.m11 * direction.y + matrix.m21 * direction.z, matrix.m02 * direction.x + matrix.m12 * direction.y + matrix.m22 * direction.z ); float w = matrix.m03 * direction.x + matrix.m13 * direction.y + matrix.m23 * direction.z; if (w != 0.0) return vec3(result.x / w, result.y / w, result.z / w); return result; } static inline void m4_print(mat4_t matrix) { m4_fprintp(stdout, matrix, 6, 4); } static inline void m4_printp(mat4_t matrix, int width, int precision) { m4_fprintp(stdout, matrix, width, precision); } static inline void m4_fprint(FILE* stream, mat4_t matrix) { m4_fprintp(stream, matrix, 6, 2); } static inline void m4_fprintp(FILE* stream, mat4_t matrix, int width, int precision) { mat4_t m = matrix; int w = width, p = precision; int r; for(r = 0; r < 4; r++) { fprintf(stream, "| %*.*f %*.*f %*.*f %*.*f |\n", w, p, m.m[0][r], w, p, m.m[1][r], w, p, m.m[2][r], w, p, m.m[3][r] ); } } #endif // MATH_3D_IMPLEMENTATION Atomes-GNU-1.1.14/src/opengl/ogl_draw.c000066400000000000000000000430101457665371200175100ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file ogl_draw.c * @short OpenGL window drawing funcions * @author Sébastien Le Roux */ /* * This file: 'ogl_draw.c' * * Contains: * - The OpenGL window drawing funcions * * List of functions: void print_matrices (); void setup_camera (); void unrotate_camera (); void duplicate_material_and_lightning (image * new_img, image * old_img); void add_image (); void at_shift (atom * at, float * shift); void at_unshift (atom * at, float * shift); void draw (glwin * view); screen_string * duplicate_screen_string (screen_string * old_s); atom * duplicate_atom (atom * at); image * duplicate_image (image * old_img); */ #include "global.h" #include "glview.h" #include "dlp_field.h" #include extern ColRGBA init_color (int id, int numid); extern Light * copy_light_sources (int dima, int dimb, Light * old_sp); extern atom_selection * duplicate_ogl_selection (atom_selection * old_sel); double x, y, z; GLUquadricObj * quadric; glwin * wingl; project * proj_gl; int proj_sp; int proj_at; coord_info * coord_gl; box_info * box_gl; cell_info * cell_gl; image * plot; int qual; int acolorm; int pcolorm; int step; extern int nbs, nbl; extern void create_atom_lists (gboolean to_pick); extern int create_bond_lists (gboolean to_pick); extern int create_selection_lists (); extern void create_poly_lists (); extern void create_ring_lists (); extern int create_box_lists (); extern int create_axis_lists (); extern int create_pick_lists (); extern int create_label_lists (); extern void create_measures_lists (); extern void create_light_lists (); extern void create_slab_lists (project * this_proj); extern void create_volumes_lists (); /*! \fn void print_matrices () \brief print OpenGL matrices */ void print_matrices () { g_debug ("*** Print Matrices ***"); g_debug ("\n"); g_debug (":: MODEL_MATRIX"); m4_print (wingl -> model_matrix); g_debug ("\n"); g_debug (":: VIEW_MATRIX"); m4_print (wingl -> view_matrix); g_debug ("\n"); g_debug (":: MODEL_VIEW_MATRIX"); m4_print (wingl -> model_view_matrix); g_debug ("\n"); g_debug (":: NORMAL_MATRIX"); m4_print (wingl -> normal_matrix); g_debug ("\n"); g_debug (":: PROJECTION_MATRIX"); m4_print (wingl -> projection_matrix); g_debug ("\n"); g_debug (":: PROJECTION_MODEL_VIEW_MATRIX"); m4_print (wingl -> proj_model_view_matrix); } /*! \fn void setup_camera () \brief setup OpenGL camera */ void setup_camera () { wingl -> model_position = vec3 (0.0, 0.0, -plot -> p_depth); wingl -> model_matrix = m4_translation (wingl -> model_position); wingl -> proj_model_matrix = m4_mul (wingl -> projection_matrix, wingl -> model_matrix); wingl -> view_matrix = m4_quat_rotation (plot -> rotation_quaternion); vec4_t quat; quat = plot -> rotation_quaternion; quat.z = - quat.z; wingl -> un_view_matrix = m4_quat_rotation (quat); wingl -> model_view_matrix = m4_mul (wingl -> model_matrix, wingl -> view_matrix); wingl -> normal_matrix = m4_transpose (m4_invert_affine(wingl -> model_matrix)); wingl -> proj_model_view_matrix = m4_mul (wingl -> projection_matrix, wingl -> model_view_matrix); wingl -> proj_view_matrix = m4_mul (wingl -> projection_matrix, wingl -> view_matrix); wingl -> view_model_matrix = m4_mul (wingl -> view_matrix, wingl -> model_matrix); // print_matrices(); } /*! \fn void unrotate_camera () \brief unrotate OpenGL camera */ void unrotate_camera () { vec4_t quat; quat = plot -> rotation_quaternion; quat.z = - quat.z; wingl -> model_view_matrix = m4_mul (wingl -> model_view_matrix, m4_quat_rotation (quat)); } /*! \fn screen_string * duplicate_screen_string (screen_string * old_s) \brief create a copy a screen_string data structure \param old_s the data structure to be copied */ screen_string * duplicate_screen_string (screen_string * old_s) { screen_string * new_s = g_malloc0 (sizeof*new_s); new_s -> word = g_strdup_printf ("%s", old_s -> word); new_s -> col = old_s -> col; int i; for (i=0; i<3; i++) new_s -> shift[i] = old_s -> shift[i]; new_s -> num_instances = old_s -> num_instances; new_s -> instances = duplicate_float (old_s -> num_instances*4, old_s -> instances); new_s -> prev = NULL; new_s -> last = NULL; return new_s; } /*! \fn void duplicate_material_and_lightning (image * new_img, image * old_img) \brief copy the material and lightning parameters of an image data structure \param new_img the new image \param old_img the old image with the data to be copied */ void duplicate_material_and_lightning (image * new_img, image * old_img) { new_img -> quality = old_img -> quality; new_img -> render = old_img -> render; new_img -> lights = old_img -> lights; new_img -> l_ght = copy_light_sources (old_img -> lights, old_img -> lights, old_img -> l_ght); new_img -> m_terial.predefine = old_img -> m_terial.predefine; new_img -> m_terial.albedo = old_img -> m_terial.albedo; int i; for (i=0; i<6; i++) new_img -> m_terial.param[i] = old_img -> m_terial.param[i]; new_img -> f_g.mode = old_img -> f_g.mode; new_img -> f_g.based = old_img -> f_g.based; new_img -> f_g.density = old_img -> f_g.density; for (i=0; i<2; i++) new_img -> f_g.depth[i] = old_img -> f_g.depth[i]; new_img -> f_g.color = old_img -> f_g.color; } /*! \fn image * duplicate_image (image * old_img) \brief create a copy of an image data structure \param old_img the image to copy */ image * duplicate_image (image * old_img) { int i, j, k, l, m; image * new_img = g_malloc0 (sizeof*new_img); // This line will copy all the stuff that is not dynamically allocated * new_img = * old_img; j = proj_gl -> nspec; for (i=0; i<2; i++) { new_img -> color_map[i] = old_img -> color_map[i]; new_img -> show_atom[i] = duplicate_bool(j, old_img -> show_atom[i]); new_img -> show_label[i] = duplicate_bool(j, old_img -> show_label[i]); } new_img -> sphererad = duplicate_double(2*j, old_img -> sphererad); new_img -> pointrad = duplicate_double(2*j, old_img -> pointrad); new_img -> atomicrad = duplicate_double(2*j, old_img -> atomicrad); new_img -> bondrad = g_malloc0 (2*j*sizeof*new_img -> bondrad); new_img -> linerad = g_malloc0 (2*j*sizeof*new_img -> linerad); new_img -> at_color = duplicate_color (2*j, old_img -> at_color); for (i=0; i<2*j; i++) { new_img -> bondrad[i] = duplicate_double(2*j, old_img -> bondrad[i]); new_img -> linerad[i] = duplicate_double(2*j, old_img -> linerad[i]); } for (i=0; i<9; i++) { new_img -> show_coord[i] = duplicate_bool(coord_gl -> totcoord[i], old_img -> show_coord[i]); if (i < 2 || i > 3) new_img -> show_poly[i] = duplicate_bool(coord_gl -> totcoord[i], old_img -> show_poly[i]); k = (i < 2) ? proj_gl -> nspec : 1; new_img -> spcolor[i] = g_malloc (k*sizeof*new_img -> spcolor[i]); for (j=0; j spcolor[i][j] = duplicate_color (coord_gl -> totcoord[i], old_img -> spcolor[i][j]); } } new_img -> at_data = g_malloc0 (proj_gl -> natomes*sizeof*new_img -> at_data); for (i=0; i natomes; i++) { new_img -> at_data[i].show[0] = proj_gl -> atoms[step][i].show[0]; new_img -> at_data[i].show[1] = proj_gl -> atoms[step][i].show[1]; new_img -> at_data[i].label[0] = proj_gl -> atoms[step][i].label[0]; new_img -> at_data[i].label[1] = proj_gl -> atoms[step][i].label[1]; new_img -> at_data[i].pick[0] = proj_gl -> atoms[step][i].pick[0]; new_img -> at_data[i].cloned = proj_gl -> atoms[step][i].cloned; new_img -> at_data[i].style = proj_gl -> atoms[step][i].style; } for (i=0; i<3; i++) { new_img -> axis_title[i] = g_strdup_printf ("%s", old_img -> axis_title[i]); } new_img -> axis_color = NULL; if (old_img -> axis_color != NULL) { new_img -> axis_color = duplicate_color (3, old_img -> axis_color); } screen_string * stmp_a, * stmp_b; for (i=0; i<5; i++) { if (i<2)new_img -> labels_format[i] = old_img -> labels_format[i]; new_img -> labels_font[i] = g_strdup_printf ("%s", old_img -> labels_font[i]); new_img -> labels_color[i] = NULL; for (j=0; j<3; j++)new_img -> labels_shift[i][j] = old_img -> labels_shift[i][j]; if (old_img -> labels_color[i] != NULL) { k = (i < 2) ? proj_gl -> nspec : 1; new_img -> labels_color[i] = duplicate_color (k, old_img -> labels_color[i]); } new_img -> labels_list[i] = NULL; if (old_img -> labels_list[i] != NULL) { new_img -> labels_list[i] = duplicate_screen_string (old_img -> labels_list[i]); new_img -> labels_list[i] -> last = duplicate_screen_string (old_img -> labels_list[i] -> last); stmp_a = old_img -> labels_list[i] -> last; stmp_b =new_img -> labels_list[i] -> last; while (stmp_a -> prev != NULL) { stmp_b -> prev = duplicate_screen_string (stmp_a -> prev); stmp_b -> prev -> last = stmp_b -> last; stmp_a = stmp_a -> prev; stmp_b = stmp_b -> prev; } } } duplicate_material_and_lightning (new_img, old_img); // Atom selection for (i=0; i<2; i++) new_img -> selected[i] = duplicate_ogl_selection (old_img -> selected[i]); // Rings poly if any 'isolated' if (wingl -> rings) { for (i=0; i<5; i++) { if (wingl -> ring_max[i]) { m = 0; for (j=0; j< coord_gl -> totcoord[i+4]; j++) { k = coord_gl -> geolist[i+4][0][j]; for (l=0; l num_rings[i][step][k-1]; l++) { if (wingl -> show_rpoly[i][step][k-1][l]) m++; } } if (m) { new_img -> i_rings[i] = allocdint (m+1, 2); new_img -> i_rings[i][0][0] = m; m = 1; for (j=0; j totcoord[i+4]; j++) { k = coord_gl -> geolist[i+4][0][j]; for (l=0; l num_rings[i][step][k-1]; l++) { if (wingl -> show_rpoly[i][step][k-1][l]) { new_img -> i_rings[i][m][0] = j; new_img -> i_rings[i][m][1] = l; m ++; } } } } } } } // Volumes if (wingl -> volumes) { for (i=0; i<2; i++) { for (j=0; j fm_show_vol[i][j] = duplicate_bool (coord_gl -> totcoord[2+i], old_img -> fm_show_vol[i][j]); for (k=0; k totcoord[2+i]; k++) { new_img -> fm_vol_col[i][j][k] = old_img -> fm_vol_col[i][j][k]; } } } } return new_img; } /*! \fn void add_image () \brief add an image to the animation */ void add_image () { snapshot * nextsnap = g_malloc0 (sizeof*nextsnap); nextsnap -> img = duplicate_image (plot); nextsnap -> img -> id ++; // Now the pointers if (wingl -> anim -> frames == 0) { wingl -> anim -> first -> prev = NULL; wingl -> anim -> last = nextsnap; wingl -> anim -> last -> prev = NULL; wingl -> anim -> first = nextsnap; } else { wingl -> anim -> last -> next = nextsnap; nextsnap -> prev = wingl -> anim -> last; wingl -> anim -> last = wingl -> anim -> last -> next; wingl -> anim -> last -> img -> id = wingl -> anim -> frames; } wingl -> anim -> frames += 1; } extern void update_gl_pick_colors (); /*! \fn atom * duplicate_atom (atom * at) \brief copy (partially) an atom data structure \param at the atom to copy */ atom * duplicate_atom (atom * at) { atom * bt = g_malloc0 (sizeof*bt); bt -> x = at -> x; bt -> y = at -> y; bt -> z = at -> z; bt -> sp = at -> sp; bt -> id = at -> id; bt -> style = at -> style; bt -> cloned = at -> cloned; int i; for (i=0; i<2; i++) { bt -> show[i] = at -> show[i]; bt -> pick[i] = at -> pick[i]; bt -> label[i] = at -> label[i]; } for (i=0; i<5; i++) { bt -> coord[i] = at -> coord[i]; } bt -> numv = at -> numv; bt -> fid = at -> fid; bt -> faid = at -> faid; if (bt -> numv) bt -> vois = duplicate_int (bt -> numv, at -> vois); return bt; } /*! \fn void at_shift (atom * at, float * shift) \brief modify atomic coordinates to display image in cell replica \param at the atom \param shift the shift to apply */ void at_shift (atom * at, float * shift) { at -> x += shift[0]; at -> y += shift[1]; at -> z += shift[2]; } /*! \fn void at_unshift (atom * at, float * shift) \brief correct atomic coordinates modified to display image in cell replica \param at the atom \param shift the shift to correct */ void at_unshift (atom * at, float * shift) { at -> x -= shift[0]; at -> y -= shift[1]; at -> z -= shift[2]; } /*! \fn void draw (glwin * view) \brief main drawing subroutine for the OpenGL window \param view the target glwin */ void draw (glwin * view) { wingl = view; proj_gl = get_project_by_id(view -> proj); proj_sp = proj_gl -> nspec; proj_at = proj_gl -> natomes; coord_gl = proj_gl -> coord; cell_gl = & proj_gl -> cell; plot = wingl -> anim -> last -> img; qual = plot -> quality-1; acolorm = plot -> color_map[0]; pcolorm = plot -> color_map[1]; step = plot -> step; box_gl = (cell_gl -> npt) ? & cell_gl -> box[step] : & cell_gl -> box[0]; /* #ifdef DEBUG clock_gettime (CLOCK_MONOTONIC, & start_time); GLuint GPU_time; glGenQueries (1, & GPU_time); glBeginQuery (GL_TIME_ELAPSED, GPU_time); // #endif */ // First, if needed, we prepare the display lists if (proj_at) { if (wingl -> create_shaders[ATOMS] && wingl -> n_shaders[ATOMS][step] < 0) create_atom_lists (FALSE); if (wingl -> create_shaders[BONDS] && wingl -> n_shaders[BONDS][step] < 0) wingl -> n_shaders[BONDS][step] = create_bond_lists (FALSE); if (wingl -> create_shaders[SELEC] && wingl -> n_shaders[SELEC][step] < 0) wingl -> n_shaders[SELEC][step] = create_selection_lists (); if (wingl -> create_shaders[POLYS] && wingl -> n_shaders[POLYS][step] < 0) create_poly_lists (); if (wingl -> create_shaders[RINGS] && wingl -> n_shaders[RINGS][step] < 0) create_ring_lists (); if (wingl -> create_shaders[PICKS]) wingl -> n_shaders[PICKS][0] = create_pick_lists (); if (wingl -> create_shaders[SLABS]) create_slab_lists (proj_gl); if (wingl -> create_shaders[VOLMS] && wingl -> n_shaders[VOLMS][step] < 0) create_volumes_lists (proj_gl); if (wingl -> create_shaders[LABEL]) wingl -> n_shaders[LABEL][0] = create_label_lists (); if (wingl -> create_shaders[MEASU]) create_measures_lists (); } else { int i; for (i=0; i create_shaders[MDBOX]) wingl -> n_shaders[MDBOX][0] = create_box_lists (); if (wingl -> create_shaders[MAXIS]) wingl -> n_shaders[MAXIS][0] = create_axis_lists (); if (wingl -> create_shaders[LIGHT]) create_light_lists (); setup_camera (); // We draw normal scene or picking mode scene (only atoms or selection) if (wingl -> to_pick) { // Picking mode scene glDisable (GL_LIGHTING); glClearColor (plot -> backcolor.red, plot -> backcolor.green, plot -> backcolor.blue, 1.0); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); draw_vertices (PICKS); glEnable (GL_LIGHTING); } else { // Normal mode scene glClearColor (plot -> backcolor.red, plot -> backcolor.green, plot -> backcolor.blue, plot -> backcolor.alpha); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); // We want to draw the elements by reverse order // so that atoms will be last and and will appear on // top of bonds and so on // Box draw_vertices (MDBOX); // The bonds draw_vertices (BONDS); // Now the atoms draw_vertices (ATOMS); // The selected atoms/bonds draw_vertices (SELEC); int i = plot -> render; plot -> render = FILL; // Atom labels draw_vertices (LABEL); // Axis if centered if (view -> anim -> last -> img -> axispos == 4) draw_vertices (MAXIS); // Last the coordination polyhedra draw_vertices (POLYS); draw_vertices (RINGS); // Measures draw_vertices (MEASU); // Slab draw_vertices (SLABS); // Volumes draw_vertices (VOLMS); // Axis if not centered if (view -> anim -> last -> img -> axispos != 4) draw_vertices (MAXIS); // Lights draw_vertices (LIGHT); plot -> render = i; //draw_labels (); if (wingl -> record) add_image (); } /* #ifdef DEBUG glEndQuery (GL_TIME_ELAPSED); GLint done = 0; while (! done) { glGetQueryObjectiv (GPU_time, GL_QUERY_RESULT_AVAILABLE, & done); } GLint GPU_res; glGetQueryObjectiv (GPU_time, GL_QUERY_RESULT, & GPU_res); g_print (":: TIME TO RENDER (GPU) = %f s\n", (double)GPU_res/CLOCKS_PER_SEC); clock_gettime (CLOCK_MONOTONIC, & stop_time); g_print (":: TIME TO RENDER (CPU) = %s\n", calculation_time(FALSE, get_calc_time (start_time, stop_time))); // #endif */ } Atomes-GNU-1.1.14/src/opengl/ogl_shaders.c000066400000000000000000001173451457665371200202210ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file ogl_shaders.c * @short OpenGL shaders for the atomes program * @author Sébastien Le Roux */ /* * This file: 'ogl_shaders.c' * * Contains: * - The OpenGL shaders for the atomes program * */ #include "global.h" // Point shaders: // const GLchar * point_vertex; // const GLchar * point_colors; //#define GLSL(src) "#version 430 core\n" #src #define GLSL(src) "#version 150\n" #src const GLchar * point_vertex = GLSL( uniform mat4 mvp; in vec3 vert; in vec3 offset; in float size; in vec4 vertColor; out vec4 vert_color; void main() { vert_color = vertColor; gl_PointSize = size; gl_Position = mvp * vec4(vert + offset, 1.0); } ); const GLchar * point_color = GLSL( in vec4 vert_color; out vec4 fragment_color; void main() { /*if(dot(gl_PointCoord-0.5,gl_PointCoord-0.5)>0.25) { discard; } else {*/ fragment_color = vert_color; //} } ); // Basic line shaders // const GLchar * line_vertex; // const GLchar * line_colors; const GLchar * line_vertex = GLSL( uniform mat4 mvp; in vec3 vert; in vec4 vertColor; out vec4 vert_color; void main() { vert_color = vertColor; gl_Position = mvp * vec4(vert, 1.0); } ); const GLchar * axis_line_vertex = GLSL( uniform mat4 mvp; uniform vec4 vertColor; in vec3 vert; out vec4 vert_color; void main() { vert_color = vertColor; gl_Position = mvp * vec4(vert, 1.0); } ); const GLchar * line_color = GLSL( in vec4 vert_color; out vec4 fragment_color; void main() { fragment_color = vert_color; } ); const GLchar * line_stipple = GLSL( layout(lines) in; layout(line_strip, max_vertices=2) out; in vec4 vert_color[]; uniform float depth; out float line_pos; out vec4 v_color; void main() { vec2 win_pos_0 = gl_in[0].gl_Position.xy; vec2 win_pos_1 = gl_in[1].gl_Position.xy; gl_Position = gl_in[0].gl_Position; line_pos = 0.0; v_color = vert_color[0]; EmitVertex(); gl_Position = gl_in[1].gl_Position; float psize = 3.0; // No particular reason, just seems right line_pos = psize * length(win_pos_1 - win_pos_0); line_pos *= depth; v_color = vert_color[1]; EmitVertex(); EndPrimitive(); } ); const GLchar * angle_vertex = GLSL( uniform mat4 mvp; in vec3 vert; in vec4 vertColor; out vec4 vert_color; void main() { vert_color = vertColor; gl_Position = vec4(vert, 1.0); } ); const GLchar * angle_stipple = GLSL( layout(triangles) in; layout(line_strip, max_vertices=20) out; in vec4 vert_color[]; uniform float depth; uniform mat4 mvp; uniform mat4 un_view; uniform mat4 text_proj; uniform vec4 viewp; out float line_pos; out vec4 v_color; const float PI = 3.14159265359; mat4 translate_this (in vec3 coord) { mat4 translate; translate[0] = vec4(1.0, 0.0, 0.0, 0.0); translate[1] = vec4(0.0, 1.0, 0.0, 0.0); translate[2] = vec4(0.0, 0.0, 1.0, 0.0); translate[3][0] = coord.x; translate[3][1] = coord.y; translate[3][2] = coord.z; translate[3][3] = 1.0; return translate; } vec3 project (in vec3 coord) { mat4 n_mvp = (mvp * translate_this (coord)); vec4 res = n_mvp * vec4(vec3(0.0), 1.0); if (res.w != 0.0) { res.w = 1.0 / res.w; res.x = res.w * res.x + 1.0; res.y = res.w * res.y + 1.0; res.z = res.w * res.z + 1.0; return vec3 (res.x*viewp.z+viewp.x, res.y*viewp.w+viewp.y, res.z); } else { return vec3 (0.0, 0.0, -1.0); } } float angle2d (in vec2 at, in vec2 bt, in vec2 ct) { vec2 ab = bt - at; vec2 bc = bt - ct; float theta = dot(ab,bc) / (length(ab) * length(bc)); if (theta < -1.0) { return acos (-2.0 - theta); } else if (theta > 1.0) { return acos (2.0 - theta); } else { return acos (theta); } } void main() { vec3 pa = project (gl_in[0].gl_Position.xyz); vec3 pb = project (gl_in[1].gl_Position.xyz); vec3 pc = project (gl_in[2].gl_Position.xyz); vec2 pd; pd.x = pb.x + 100.0; pd.y = pb.y; float alpha = angle2d (pa.xy, pb.xy, pd); float beta = angle2d (pc.xy, pb.xy, pd); float theta = angle2d (pa.xy, pb.xy, pc.xy); if (pa.y > pb.y && pc.y > pb.y) { beta = min (alpha, beta); } else if (pa.y < pb.y && pc.y < pb.y) { beta = min (-alpha, -beta); // or beta = - max (alpha, beta); } else { vec2 pe; vec2 pf; pe.y = max(pa.y, pc.y); if (pe.y == pa.y) { pe.x = pa.x; pf.y = pc.y; pf.x = pc.x; } else { pe.x = pc.x; pf.y = pa.y; pf.x = pa.x; } beta = angle2d (pe, pb.xy, pd); alpha = angle2d (pf, pb.xy, pd); if (beta + alpha < PI) { beta -= theta; } } float psize = 3.0; // No particular reason, just seems right float tan_factor = tan(theta/10.0); float radial_factor = cos(theta/10.0); float dist = min(length(pb-pa), length(pb-pc)) / 3.0; float x = dist * cos(beta); float y = dist * sin(beta); float tx; float ty; vec2 apos; vec2 bpos; v_color = vert_color[0]; vec4 pos_s = mvp * gl_in[0].gl_Position; vec4 pos_e = mvp * gl_in[1].gl_Position; line_pos = 0.0; gl_Position = pos_s; EmitVertex(); float line_save = psize * length(pos_e.xy - pos_s.xy); line_pos = line_save; line_pos *= depth; gl_Position = pos_e; EmitVertex(); int i; line_pos = -1.0; EmitVertex(); for (i = 0; i < 11; i++) { apos = vec2(x,y); gl_Position = text_proj * (vec4(pb, 1.0) + vec4(apos.x, apos.y, 0.0, 1.0)); EmitVertex(); if (i == 0) { line_pos = line_save; EmitVertex(); } tx = -y; ty = x; x += tx * tan_factor; y += ty * tan_factor; x *= radial_factor; y *= radial_factor; bpos = vec2(x,y); line_pos += psize * length(bpos - apos) / 20.0; } EmitVertex(); line_save = line_pos; line_pos = -1.0; EmitVertex(); gl_Position = pos_e; EmitVertex(); line_pos = line_save; line_pos *= depth; EmitVertex(); pos_s = mvp * gl_in[2].gl_Position; line_pos += depth * psize * length(pos_s.xy - pos_e.xy); gl_Position = pos_s; EmitVertex(); EndPrimitive(); } ); const GLchar * line_stipple_color = GLSL( uniform int factor; uniform uint pattern; in float line_pos; in vec4 v_color; out vec4 fragment_color; void main() { fragment_color = v_color; if (line_pos == -1.0) discard; uint bit = uint(round(line_pos/factor)) % 16U; if ((pattern & (1U< light.cone_angle) { float epsilon = light.spot_inner - light.spot_outer; I = saturate((theta - light.spot_outer) / epsilon); } else { return vec3(0.0001); } } } vec3 V = normalize(-v_pos); vec3 H = normalize(L + V); vec3 N = surfaceNormal; // compute material reflectance float NdL = max(0.0, dot(N, L)); float NdV = max(0.001, dot(N, V)); float NdH = max(0.001, dot(N, H)); float HdV = max(0.001, dot(H, V)); float LdV = max(0.001, dot(L, V)); // fresnel term is common for any, except phong // so it will be calculated inside ifdefs vec3 specfresnel; vec3 specref; if (model == PHONG) { // specular reflectance with PHONG specfresnel = fresnel_factor (specular, NdV); specref = phong_specular (V, L, N, specfresnel, mat.roughness); } else if (model == BLINN) { // specular reflectance with BLINN specfresnel = fresnel_factor (specular, HdV); specref = blinn_specular (NdH, specfresnel, mat.roughness); } else { // specular reflectance with COOK-TORRANCE specfresnel = fresnel_factor(specular, HdV); specref = cooktorrance_specular(model, NdL, NdV, NdH, specfresnel, mat.roughness); } specref *= vec3(NdL); // diffuse is common for any model vec3 diffref = (vec3(1.0) - specfresnel) * phong_diffuse() * NdL; // compute lighting vec3 reflected_light = vec3(0); vec3 diffuse_light = vec3(0); // initial value == constant ambient light // point light vec3 light_color = light.intensity * A * I; reflected_light += specref * light_color; diffuse_light += diffref * light_color; // final result return diffuse_light * mix(mat.albedo, vec3(0.0), mat.metallic) + reflected_light; } vec3 Apply_fog (in vec3 lightColor) { //distance float dist = 0.0; float fogFactor = 0.0; //compute distance used in fog equations if (fog.based == 0) { //plane based dist = abs (surfacePosition.z); } else { //range based dist = length (surfacePosition); } if (fog.mode == 1) // linear fog { fogFactor = (fog.depth.x - dist)/(fog.depth.y - fog.depth.x); } else if (fog.mode == 2) // exponential fog { fogFactor = 1.0 / exp (dist * fog.density); } else { fogFactor = 1.0 / exp((dist * fog.density)* (dist * fog.density)); } fogFactor = saturate (fogFactor); return mix (fog.color, lightColor, fogFactor); } void main () { // Properties vec3 color; float alpha; if (lights_on == 0) { color = vec3(1.0); alpha = surfaceColor.w; } else { // mix between metal and non-metal material, for non-metal // constant base specular factor of 0.04 grey is used vec3 specular = mix(vec3(0.04), mat.albedo, mat.metallic); color = vec3(0.0); for(int i = 0; i < numLights; i++) { color += Apply_lighting_model (lights_on, AllLights[i], specular); } color = pow(color, vec3(1.0/mat.gamma)); alpha = surfaceColor.w * mat.alpha; } if (fog.mode > 0) { fragment_color = vec4 (Apply_fog(surfaceColor.xyz*color), alpha); } else { fragment_color = vec4 (surfaceColor.xyz*color, alpha); } } ); // Sphere const GLchar * sphere_vertex = GLSL( uniform mat4 mvp; uniform mat4 m_view; in vec3 vert; in vec3 offset; in vec4 vertColor; in float radius; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 surfaceNormal; out vec3 surfaceToCamera; void main () { surfaceColor = vertColor; vec4 pos = vec4 (radius*vert + offset, 1.0); surfacePosition = vec3(m_view * pos); surfaceNormal = mat3(m_view) * vert; surfaceToCamera = normalize (- surfacePosition); gl_PointSize = 1.0; gl_Position = mvp * pos; } ); const GLchar * axis_sphere_vertex = GLSL( uniform mat4 mvp; uniform mat4 m_view; uniform vec4 vertColor; in vec3 vert; in vec3 vertNormal; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 surfaceNormal; out vec3 surfaceToCamera; void main () { surfaceColor = vertColor; vec4 pos = vec4(vert, 1.0); surfacePosition = vec3(m_view * pos); surfaceNormal = mat3(m_view) * vertNormal; surfaceToCamera = normalize (- surfacePosition); gl_PointSize = 1.0; gl_Position = mvp * pos; } ); // Cylinder const GLchar * gs_cylinder_vertex = GLSL( in vec3 vert; in vec4 vertColor; out vec4 vertCol; void main () { vertCol = vertColor; gl_Position = vec4(vert, 1.0); } ); const GLchar * cylinder_vertex = GLSL( uniform mat4 mvp; uniform mat4 m_view; in vec4 quat; in float height; in float radius; in vec3 offset; in vec3 vert; in vec4 vertColor; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 surfaceNormal; out vec3 surfaceToCamera; vec3 rotate_this (in vec3 v, in vec4 quat) { vec3 u = vec3(quat.x, quat.y, quat.z); float s = quat.w; return 2.0 * dot(u,v) * u + (s*s - dot(u,u)) * v + 2.0 * s * cross (u,v); } void main () { surfaceColor = vertColor; vec3 pos = vec3(radius*vert.x, radius*vert.y, height*vert.z); vec3 norm = normalize (vec3(vert.x, vert.y, 0.0)); if (quat.w != 0.0) { pos = rotate_this (pos, quat); norm = rotate_this (norm, quat); } pos += offset; surfacePosition = vec3(m_view * vec4(pos,1.0)); surfaceNormal = mat3(m_view) * norm; surfaceToCamera = normalize (- surfacePosition); gl_Position = mvp * vec4(pos,1.0); } ); const GLchar * cone_vertex = GLSL( uniform mat4 mvp; uniform mat4 m_view; in vec4 quat; in float height; in float radius; in vec3 offset; in vec3 vert; in vec4 vertColor; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 surfaceNormal; out vec3 surfaceToCamera; vec3 rotate_this (in vec3 v, in vec4 quat) { vec3 u = vec3(quat.x, quat.y, quat.z); float s = quat.w; return 2.0 * dot(u,v) * u + (s*s - dot(u,u)) * v + 2.0 * s * cross (u,v); } void main () { surfaceColor = vertColor; vec3 pos = vec3(radius*vert.x, radius*vert.y, height*vert.z); // The normal calculation changes / cylinders float B = sqrt(radius*radius + height*height); vec3 norm = vec3(height*vert.x/B, height*vert.y/B, radius/B); if (quat.w != 0.0) { pos = rotate_this (pos, quat); norm = rotate_this (norm, quat); } pos += offset; surfacePosition = vec3(m_view * vec4(pos,1.0)); surfaceNormal = mat3(m_view) * norm; surfaceToCamera = normalize (- surfacePosition); gl_Position = mvp * vec4(pos,1.0); } ); const GLchar * cap_vertex = GLSL( uniform mat4 mvp; uniform mat4 m_view; in vec4 quat; in float radius; in vec3 offset; in vec3 vert; in vec4 vertColor; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 surfaceNormal; out vec3 surfaceToCamera; vec3 rotate_this (in vec3 v, in vec4 quat) { vec3 u = vec3(quat.x, quat.y, quat.z); float s = quat.w; return 2.0 * dot(u,v) * u + (s*s - dot(u,u)) * v + 2.0 * s * cross (u,v); } void main () { surfaceColor = vertColor; vec3 pos = vec3(radius*vert.x, radius*vert.y, vert.z); vec3 norm = vec3(0.0, 0.0, -1.0); if (quat.w != 0.0) { pos = rotate_this (pos, quat); norm = rotate_this (norm, quat); } pos += offset; surfacePosition = vec3(m_view * vec4(pos,1.0)); surfaceNormal = mat3(m_view) * norm; surfaceToCamera = normalize (- surfacePosition); gl_Position = mvp * vec4(pos,1.0); } ); const GLchar * gs_cylinder_geom = GLSL( layout (lines) in; layout (triangle_strip, max_vertices=64) out; uniform mat4 mvp; uniform mat4 m_view; uniform int quality; uniform float radius; in vec4 vertCol[]; out vec4 surfaceColor; out vec3 surfacePosition; out vec3 surfaceNormal; out vec3 surfaceToCamera; float pi = 3.141592653; vec3 create_perp (in vec3 axis) { vec3 u = vec3(0.0, 0.0, 1.0); vec3 v = vec3(0.0, 1.0, 0.0); vec3 res = cross(u, axis); if (length(res) == 0.0) { res = cross (v, axis); } return res; } void main() { vec3 v1 = gl_in[0].gl_Position.xyz; vec3 v2 = gl_in[1].gl_Position.xyz; vec3 axis = normalize(v2 - v1); vec3 perp_x = create_perp (axis); vec3 perp_y = cross (axis, perp_x); float step = 2.0 * pi / float(quality - 1); for(int i=0; i light.cone_angle) { float epsilon = light.spot_inner - light.spot_outer; I = saturate((theta - light.spot_outer) / epsilon); } else { return vec3(0.0001); } } } vec3 V = normalize(-v_pos); vec3 H = normalize(L + V); vec3 N = surfaceNormal; // compute material reflectance float NdL = max(0.0, dot(N, L)); float NdV = max(0.001, dot(N, V)); float NdH = max(0.001, dot(N, H)); float HdV = max(0.001, dot(H, V)); float LdV = max(0.001, dot(L, V)); // fresnel term is common for any, except phong // so it will be calculated inside ifdefs vec3 specfresnel; vec3 specref; if (model == PHONG) { // specular reflectance with PHONG specfresnel = fresnel_factor (specular, NdV); specref = phong_specular (V, L, N, specfresnel, mat.roughness); } else if (model == BLINN) { // specular reflectance with BLINN specfresnel = fresnel_factor (specular, HdV); specref = blinn_specular (NdH, specfresnel, mat.roughness); } else { // specular reflectance with COOK-TORRANCE specfresnel = fresnel_factor(specular, HdV); specref = cooktorrance_specular(model, NdL, NdV, NdH, specfresnel, mat.roughness); } specref *= vec3(NdL); // diffuse is common for any model vec3 diffref = (vec3(1.0) - specfresnel) * phong_diffuse() * NdL; // compute lighting vec3 reflected_light = vec3(0); vec3 diffuse_light = vec3(0); // initial value == constant ambient light // point light vec3 light_color = light.intensity * A * I; reflected_light += specref * light_color; diffuse_light += diffref * light_color; // final result return diffuse_light * mix(mat.albedo, vec3(0.0), mat.metallic) + reflected_light; } vec3 Apply_fog (in vec3 lightColor) { //distance float dist = 0.0; float fogFactor = 0.0; //compute distance used in fog equations if (fog.based == 0) { //plane based dist = abs (surfacePosition.z); } else { //range based dist = length (surfacePosition); } if (fog.mode == 1) // linear fog { fogFactor = (fog.depth.x - dist)/(fog.depth.y - fog.depth.x); } else if (fog.mode == 2) // exponential fog { fogFactor = 1.0 / exp (dist * fog.density); } else { fogFactor = 1.0 / exp((dist * fog.density)* (dist * fog.density)); } fogFactor = saturate (fogFactor); return mix (fog.color, lightColor, fogFactor); } void main() { // Properties vec3 color; float alpha; if (lights_on == 0) { color = vec3(1.0); alpha = vertColor.w; } else { // mix between metal and non-metal material, for non-metal // constant base specular factor of 0.04 grey is used vec3 specular = mix(vec3(0.04), mat.albedo, mat.metallic); color = vec3(0.0); for(int i = 0; i < numLights; i++) { color += Apply_lighting_model (lights_on, AllLights[i], specular); } color = pow(color, vec3(1.0/mat.gamma)); alpha = vertColor.w * mat.alpha; } if (fog.mode > 0) { fragment_color = vec4 (Apply_fog(vertColor.xyz*color), alpha); } else { fragment_color = vec4 (vertColor.xyz*color, alpha); } } ); const GLchar * pick_color = GLSL( in vec4 vert_color; out uvec4 fragment_color; void main() { fragment_color = uvec4(vert_color); } ); const GLchar * string_vertex = GLSL( uniform mat4 mvp; uniform mat4 un_view; uniform mat4 text_proj; uniform vec4 viewp; uniform vec4 pos_shift; in vec2 vert; in vec2 tcoord; in vec3 offset; out float angle; out vec2 text_coords; mat4 translate_this (in vec3 coord) { mat4 translate; translate[0] = vec4(1.0, 0.0, 0.0, 0.0); translate[1] = vec4(0.0, 1.0, 0.0, 0.0); translate[2] = vec4(0.0, 0.0, 1.0, 0.0); translate[3][0] = coord.x; translate[3][1] = coord.y; translate[3][2] = coord.z; translate[3][3] = 1.0; return translate; } vec4 project (in vec3 coord) { mat4 n_mvp = ((mvp * translate_this (coord)) * un_view) * translate_this (pos_shift.xyz); vec4 res = n_mvp * vec4(vec3(0.0), 1.0); if (res.w != 0.0) { res.w = 1.0 / res.w; res.x = res.w * res.x + 1.0; res.y = res.w * res.y + 1.0; res.z = res.w * res.z + 1.0; return vec4 (res.x*viewp.z+viewp.x, res.y*viewp.w+viewp.y, pos_shift.w*res.z, 1.0); } else { return vec4 (0.0, 0.0, -1.0, 0.0); } } void main() { text_coords = tcoord; vec4 pos = project (offset) + vec4(vert, 0.0, 1.0); gl_Position = text_proj * pos; } ); const GLchar * angstrom_vertex = GLSL( uniform mat4 mvp; uniform mat4 un_view; uniform mat4 text_proj; uniform vec4 viewp; uniform vec4 pos_shift; uniform int tilted; in vec2 vert; in vec2 tcoord; in vec3 offset; in vec3 at_a; in vec3 at_b; out vec2 text_coords; float angle2d (in vec2 at, in vec2 bt, in vec2 ct) { vec2 ab = bt - at; vec2 bc = bt - ct; float theta = dot(ab,bc) / (length(ab) * length(bc)); if (theta < -1.0) { return acos (-2.0 - theta); } else if (theta > 1.0) { return acos (2.0 - theta); } else { return acos (theta); } } mat4 rotate_this_z (in float theta) { return mat4 ( vec4( cos(theta), sin(theta), 0.0, 0.0), vec4(-sin(theta), cos(theta), 0.0, 0.0), vec4( 0.0, 0.0, 1.0, 0.0), vec4( 0.0, 0.0, 0.0, 1.0)); } mat4 translate_this (in vec3 coord) { mat4 translate; translate[0] = vec4(1.0, 0.0, 0.0, 0.0); translate[1] = vec4(0.0, 1.0, 0.0, 0.0); translate[2] = vec4(0.0, 0.0, 1.0, 0.0); translate[3][0] = coord.x; translate[3][1] = coord.y; translate[3][2] = coord.z; translate[3][3] = 1.0; return translate; } vec4 project (in vec3 coord, vec4 shift) { mat4 n_mvp = mvp * translate_this (coord) * un_view; vec4 res = n_mvp * vec4(vec3(0.0), 1.0); res = translate_this (vec3(shift.x/viewp.z, shift.y/viewp.w, shift.z)) * res; if (res.w != 0.0) { res.w = 1.0 / res.w; res.x = res.w * res.x + 1.0; res.y = res.w * res.y + 1.0; res.z = res.w * res.z + 1.0; return vec4 (res.x*viewp.z+viewp.x, res.y*viewp.w+viewp.y, shift.w*res.z, 1.0); } else { return vec4 (0.0, 0.0, -1.0, 0.0); } } void main() { text_coords = tcoord; float rot_angle = 0.0; vec4 shift = pos_shift; if (tilted > 0) { vec3 pos_a = project (at_a, vec4(0.0)).xyz; vec3 pos_b = project (at_b, vec4(0.0)).xyz; vec2 pa; vec2 pb; vec2 pc; pa.y = max(pos_a.y, pos_b.y); if (pa.y == pos_a.y) { pa.x = pos_a.x; pb.x = pos_b.x; pb.y = pos_b.y; } else { pa.x = pos_b.x; pb.x = pos_a.x; pb.y = pos_a.y; } pc.x = pa.x; pc.y = pb.y; rot_angle = - angle2d (pa, pb, pc); if (pa.x < pb.x) { rot_angle = -rot_angle; shift.x = -shift.x; } } vec4 pos; if (rot_angle != 0.0) { pos = project(offset, shift) + vec4(vert, 0.0, 1.0) * rotate_this_z(rot_angle); } else { pos = project(offset, shift) + vec4(vert, 0.0, 1.0); } gl_Position = text_proj * pos; } ); const GLchar * degree_vertex = GLSL( uniform mat4 mvp; uniform mat4 un_view; uniform mat4 text_proj; uniform vec4 viewp; uniform vec4 pos_shift; uniform int tilted; in vec2 vert; in vec2 tcoord; in vec3 offset; in vec3 at_a; in vec3 at_b; in vec3 at_c; const float PI = 3.14159265359; out vec2 text_coords; float angle2d (in vec2 at, in vec2 bt, in vec2 ct) { vec2 ab = bt - at; vec2 bc = bt - ct; float theta = dot(ab,bc) / (length(ab) * length(bc)); if (theta < -1.0) { return acos (-2.0 - theta); } else if (theta > 1.0) { return acos (2.0 - theta); } else { return acos (theta); } } mat4 rotate_this_z (in float theta) { return mat4 ( vec4( cos(theta), sin(theta), 0.0, 0.0), vec4(-sin(theta), cos(theta), 0.0, 0.0), vec4( 0.0, 0.0, 1.0, 0.0), vec4( 0.0, 0.0, 0.0, 1.0)); } mat4 translate_this (in vec3 coord) { mat4 translate; translate[0] = vec4(1.0, 0.0, 0.0, 0.0); translate[1] = vec4(0.0, 1.0, 0.0, 0.0); translate[2] = vec4(0.0, 0.0, 1.0, 0.0); translate[3][0] = coord.x; translate[3][1] = coord.y; translate[3][2] = coord.z; translate[3][3] = 1.0; return translate; } vec4 project (in vec3 coord, vec4 shift) { mat4 n_mvp = mvp * translate_this (coord) * un_view; vec4 res = n_mvp * vec4(vec3(0.0), 1.0); res = translate_this (vec3(shift.x/viewp.z, shift.y/viewp.w, shift.z)) * res; if (res.w != 0.0) { res.w = 1.0 / res.w; res.x = res.w * res.x + 1.0; res.y = res.w * res.y + 1.0; res.z = res.w * res.z + 1.0; return vec4 (res.x*viewp.z+viewp.x, res.y*viewp.w+viewp.y, shift.w*res.z, 1.0); } else { return vec4 (0.0, 0.0, -1.0, 0.0); } } void main() { text_coords = tcoord; float rot_angle = 0.0; vec4 shift = pos_shift; vec3 pos_a = project (at_a, vec4(0.0)).xyz; vec3 pos_b = project (at_b, vec4(0.0)).xyz; vec3 pos_c = project (at_c, vec4(0.0)).xyz; vec2 pa = pos_a.xy; vec2 pb = pos_b.xy; vec2 pc = pos_c.xy; vec2 pd; float theta = angle2d (pa, pb, pc); pd.x = pb.x + 100.0; pd.y = pb.y; float alpha; float beta; float gamma; vec2 sign; sign.x = 1.0; sign.y = 1.0; beta = angle2d (pa, pb, pd); alpha = angle2d (pc, pb, pd); if (pa.y > pb.y && pc.y > pb.y) { gamma = min (alpha, beta); } else if (pa.y < pb.y && pc.y < pb.y) { gamma = min (-alpha, -beta); } else { vec2 pe; vec2 pf; pe.y = max(pa.y, pc.y); if (pe.y == pa.y) { pe.x = pa.x; pf.y = pc.y; pf.x = pc.x; } else { pe.x = pc.x; pf.y = pa.y; pf.x = pa.x; } beta = angle2d (pe, pb, pd); gamma = beta; alpha = angle2d (pf, pb, pd); if (beta + alpha < PI) { gamma -= theta; } } rot_angle = PI/2.0 - gamma - theta/2.0; vec3 a = at_b + ((at_a - at_b)/3.0 + (at_c - at_b)/3.0)/2.0; vec4 b = project (a, shift); float dist = min(length(pb-pa), length(pb-pc)) / 3.0; float x = pb.x + (shift.x+dist) * sin(rot_angle); float y = pb.y + (shift.y+dist) * cos(rot_angle); if (pa.y < pb.y && pc.y < pb.y) { gamma = - max (alpha, beta); } else if (pa.y > pb.y || pc.y > pb.y) { gamma += PI; } rot_angle = PI/2.0 - gamma - theta/2.0; vec3 c = vec3(x, y, b.z); vec4 pos = vec4(c, 1.0); if (tilted > 0) { rot_angle += PI; pos += vec4(vert, 0.0, 1.0) * rotate_this_z(rot_angle); } else { pos += vec4(vert, 0.0, 1.0); } gl_Position = text_proj * pos; } ); const GLchar * string_color = GLSL( uniform sampler2DRect tex; uniform vec4 vert_color; uniform vec4 viewp; uniform int tilted; in vec2 text_coords; out vec4 fragment_color; void main() { vec2 coords = text_coords; fragment_color = vert_color * vec4(1.0, 1.0, 1.0, texture (tex, text_coords).r); } ); const GLchar * string_color_2d = GLSL( uniform sampler2DRect tex; uniform vec4 vert_color; in vec2 text_coords; out vec4 fragment_color; void main() { vec4 sampled = vec4(1.0, 1.0, 1.0, texture (tex, text_coords).r); fragment_color = vert_color * sampled; } ); Atomes-GNU-1.1.14/src/opengl/ogl_shading.c000066400000000000000000001160471457665371200202030ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file ogl_shading.c * @short Functions to create GLSL programs \n Functions to manage GLSL programs * @author Sébastien Le Roux */ /* * This file: 'ogl_shading.c' * * Contains: * - The functions to create GLSL programs - The functions to manage GLSL programs * * * List of functions: GLuint create_shader (int type, const GLchar * src); GLuint * alloc_shader_pointer (GLuint * pointer, int shaders); GLuint * glsl_add_lights (glsl_program * glsl); gboolean in_md_shaders (project * this_proj, int id); gboolean glsl_disable_cull_face (glsl_program * glsl); void set_light_uniform_location (GLuint * lightning, int id, int j, int k, char * string); void glsl_bind_points (glsl_program * glsl, object_3d * obj); void glsl_bind_spheres (glsl_program * glsl, object_3d * obj); void glsl_bind_lines (glsl_program * glsl, object_3d * obj); void glsl_bind_cylinders (glsl_program * glsl, object_3d * obj); void glsl_bind_caps (glsl_program * glsl, object_3d * obj); void glsl_bind_polyhedra (glsl_program * glsl, object_3d * obj); void update_string_instances (glsl_program * glsl, object_3d * obj); void glsl_bind_string (glsl_program * glsl, object_3d * obj); void re_create_all_md_shaders (glwin * view); void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj); void cleaning_shaders (glwin * view, int shader); void recreate_all_shaders (glwin * view); void init_default_shaders (glwin * view); void init_shaders (glwin * view); void set_lights_data (glsl_program * glsl); void shading_glsl_text (glsl_program * glsl); void render_this_shader (glsl_program * glsl, int ids); void draw_vertices (int id); glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj); object_3d * duplicate_object_3d (object_3d * old_obj); */ #include "global.h" #include "interface.h" #include "glview.h" #include "ogl_shading.h" /* Create and compile a shader */ /*! \fn GLuint create_shader (int type, const GLchar * src) \brief create an OpenGL GLSL shader \param type type of the shader \param src name of the shader */ GLuint create_shader (int type, const GLchar * src) { GLuint shader; int status; shader = glCreateShader (type); glShaderSource (shader, 1, & src, NULL); glCompileShader (shader); glGetShaderiv (shader, GL_COMPILE_STATUS, & status); if (status == GL_FALSE) { int log_len; char *buffer; glGetShaderiv (shader, GL_INFO_LOG_LENGTH, & log_len); buffer = g_malloc (log_len + 1); glGetShaderInfoLog (shader, log_len, NULL, buffer); g_warning ("Compile failure in %s shader:\n%s", type == GL_VERTEX_SHADER ? "vertex" : "fragment", buffer); g_free (buffer); glDeleteShader (shader); return 0; } return shader; } /*! \fn GLuint * alloc_shader_pointer (GLuint * pointer, int shaders) \brief allocate GLuint data pointer, ensure that it is clean \param pointer the data pointer to allocate \param shaders the data size to allocate */ GLuint * alloc_shader_pointer (GLuint * pointer, int shaders) { if (pointer != NULL) { g_free (pointer); pointer = NULL; } return allocgluint(shaders); } #define LIGHT_INFO 3 #define MATERIAL_DATA 6 #define FOG_DATA 5 #define LIGHT_DATA 10 /*! \fn void set_light_uniform_location (GLuint * lightning, int id, int j, int k, char * string) \brief set lightning uniform location \param lightning \param id shader id \param j light id \param k uniform id \param string uniform string */ void set_light_uniform_location (GLuint * lightning, int id, int j, int k, char * string) { lightning[LIGHT_INFO+MATERIAL_DATA+FOG_DATA+LIGHT_DATA*j+k] = glGetUniformLocation (id, g_strdup_printf ("AllLights[%d].%s", j, string)); } /*! \fn GLuint * glsl_add_lights (glsl_program * glsl) \brief add lightning to an OpenGL shader program \param glsl the target glsl */ GLuint * glsl_add_lights (glsl_program * glsl) { int tot = MATERIAL_DATA + plot -> lights * LIGHT_DATA + LIGHT_INFO + FOG_DATA; GLuint * lightning = allocgluint(tot); lightning[0] = glGetUniformLocation (glsl -> id, "m_view"); lightning[1] = glGetUniformLocation (glsl -> id, "lights_on"); lightning[2] = glGetUniformLocation (glsl -> id, "mat.albedo"); lightning[3] = glGetUniformLocation (glsl -> id, "mat.metallic"); lightning[4] = glGetUniformLocation (glsl -> id, "mat.roughness"); lightning[5] = glGetUniformLocation (glsl -> id, "mat.back_light"); lightning[6] = glGetUniformLocation (glsl -> id, "mat.gamma"); lightning[7] = glGetUniformLocation (glsl -> id, "mat.alpha"); lightning[8] = glGetUniformLocation (glsl -> id, "fog.mode"); lightning[9] = glGetUniformLocation (glsl -> id, "fog.based"); lightning[10] = glGetUniformLocation (glsl -> id, "fog.density"); lightning[11] = glGetUniformLocation (glsl -> id, "fog.depth"); lightning[12] = glGetUniformLocation (glsl -> id, "fog.color"); lightning[13] = glGetUniformLocation (glsl -> id, "numLights"); int j; for (j=0; j lights; j++) { set_light_uniform_location (lightning, glsl -> id, j, 0, "type"); set_light_uniform_location (lightning, glsl -> id, j, 1, "position"); set_light_uniform_location (lightning, glsl -> id, j, 2, "direction"); set_light_uniform_location (lightning, glsl -> id, j, 3, "intensity"); set_light_uniform_location (lightning, glsl -> id, j, 4, "constant"); set_light_uniform_location (lightning, glsl -> id, j, 5, "linear"); set_light_uniform_location (lightning, glsl -> id, j, 6, "quadratic"); set_light_uniform_location (lightning, glsl -> id, j, 7, "cone_angle"); set_light_uniform_location (lightning, glsl -> id, j, 8, "spot_inner"); set_light_uniform_location (lightning, glsl -> id, j, 9, "spot_outer"); } return lightning; } /*! \fn void glsl_bind_points (glsl_program * glsl, object_3d * obj) \brief bind a 3D object point to an OpenGL shader program \param glsl the target glsl \param obj the 3D object point to bind */ void glsl_bind_points (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "size"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "vertColor"); // The points vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The instances (pos + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); } /*! \fn void glsl_bind_spheres (glsl_program * glsl, object_3d * obj) \brief bind a 3D object sphere to an OpenGL shader program \param glsl the target glsl \param obj the 3D object sphere to bind */ void glsl_bind_spheres (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "radius"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "vertColor"); // The sphere vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The sphere indices glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, obj -> num_indices*sizeof(GLint), obj -> indices, GL_STATIC_DRAW); // The instances (pos + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[2]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); } /*! \fn void glsl_bind_lines (glsl_program * glsl, object_3d * obj) \brief bind a 3D object line to an OpenGL shader program \param glsl the target glsl \param obj the 3D object line to bind */ void glsl_bind_lines (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "vertColor"); // The line vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size *sizeof(GLfloat), (GLvoid*) 0); glEnableVertexAttribArray(glsl -> array_pointer[1]); glVertexAttribPointer(glsl -> array_pointer[1], 4, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size *sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); if (glsl -> object == MEASU) { glsl -> uniform_loc[1] = glGetUniformLocation (glsl -> id, "factor"); glsl -> uniform_loc[2] = glGetUniformLocation (glsl -> id, "pattern"); glsl -> uniform_loc[3] = glGetUniformLocation (glsl -> id, "text_proj"); glsl -> uniform_loc[4] = glGetUniformLocation (glsl -> id, "un_view"); glsl -> uniform_loc[5] = glGetUniformLocation (glsl -> id, "viewp"); glsl -> uniform_loc[6] = glGetUniformLocation (glsl -> id, "depth"); } } /*! \fn void glsl_bind_cylinders (glsl_program * glsl, object_3d * obj) \brief bind a 3D object cylinder to an OpenGL shader program \param glsl the target glsl \param obj the 3D object, cylinder to bind */ void glsl_bind_cylinders (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "height"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "radius"); glsl -> array_pointer[4] = glGetAttribLocation (glsl -> id, "quat"); glsl -> array_pointer[5] = glGetAttribLocation (glsl -> id, "vertColor"); // The cylinder vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The cylinder indices glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, obj -> num_indices*sizeof(GLint), obj -> indices, GL_STATIC_DRAW); // The instances (pos + lenght, + rad + rot + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[2]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); glEnableVertexAttribArray (glsl -> array_pointer[4]); glVertexAttribPointer (glsl -> array_pointer[4], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (5*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[4], 1); glEnableVertexAttribArray (glsl -> array_pointer[5]); glVertexAttribPointer (glsl -> array_pointer[5], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (9*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[5], 1); } /*! \fn void glsl_bind_caps (glsl_program * glsl, object_3d * obj) \brief bind a 3D object cylinder cap to an OpenGL shader program \param glsl the target glsl \param obj the 3D object, cylinder cap to bind */ void glsl_bind_caps (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "offset"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "radius"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "quat"); glsl -> array_pointer[4] = glGetAttribLocation (glsl -> id, "vertColor"); // The cylinder vertices glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); // The cylinder indices glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ELEMENT_ARRAY_BUFFER, obj -> num_indices*sizeof(GLint), obj -> indices, GL_STATIC_DRAW); // The instances (pos + length, + rad + rot + col) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[2]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[1]); glVertexAttribPointer (glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[1], 1); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 1, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[2], 1); glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (4*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); glEnableVertexAttribArray (glsl -> array_pointer[4]); glVertexAttribPointer (glsl -> array_pointer[4], 4, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (8*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[4], 1); } /*! \fn void glsl_bind_polyhedra (glsl_program * glsl, object_3d * obj) \brief bind a 3D object polyhedra to an OpenGL shader program \param glsl the target glsl \param obj the 3D object polyhedra to bind */ void glsl_bind_polyhedra (glsl_program * glsl, object_3d * obj) { glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "vertNormal"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "vertColor"); // The polyhedra vertices (triangles + normal orientation) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glEnableVertexAttribArray(glsl -> array_pointer[1]); glVertexAttribPointer(glsl -> array_pointer[1], 3, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glEnableVertexAttribArray(glsl -> array_pointer[2]); glVertexAttribPointer(glsl -> array_pointer[2], 4, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) (6*sizeof(GLfloat))); } /*! \fn void update_string_instances (glsl_program * glsl, object_3d * obj) \brief Update OpenGL string texture instances \param glsl the target glsl \param obj */ void update_string_instances (glsl_program * glsl, object_3d * obj) { // The instances (pos) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[1]); glBufferData(GL_ARRAY_BUFFER, obj -> inst_buffer_size * obj -> num_instances * sizeof(GLfloat), obj -> instances, GL_STATIC_DRAW); glEnableVertexAttribArray (glsl -> array_pointer[2]); glVertexAttribPointer (glsl -> array_pointer[2], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glVertexAttribDivisor (glsl -> array_pointer[2], 1); if (glsl -> object == MEASU) { glEnableVertexAttribArray (glsl -> array_pointer[3]); glVertexAttribPointer (glsl -> array_pointer[3], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (3*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[3], 1); glEnableVertexAttribArray (glsl -> array_pointer[4]); glVertexAttribPointer (glsl -> array_pointer[4], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (6*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[4], 1); if (obj -> inst_buffer_size == 12) { glEnableVertexAttribArray (glsl -> array_pointer[5]); glVertexAttribPointer (glsl -> array_pointer[5], 3, GL_FLOAT, GL_FALSE, obj -> inst_buffer_size*sizeof(GLfloat), (GLvoid*) (9*sizeof(GLfloat))); glVertexAttribDivisor (glsl -> array_pointer[5], 1); } } } /*! \fn void glsl_bind_string (glsl_program * glsl, object_3d * obj) \brief bind a 3D object text string to an OpenGL shader program \param glsl the target glsl \param obj the 3D object text string to bind */ void glsl_bind_string (glsl_program * glsl, object_3d * obj) { glActiveTexture(GL_TEXTURE0); glBindTexture (ogl_texture, obj -> texture); glsl -> uniform_loc[1] = glGetUniformLocation (glsl -> id, "tex"); glUniform1i (glsl -> uniform_loc[1], 0); glsl -> uniform_loc[2] = glGetUniformLocation (glsl -> id, "text_proj"); glsl -> uniform_loc[3] = glGetUniformLocation (glsl -> id, "un_view"); glsl -> uniform_loc[4] = glGetUniformLocation (glsl -> id, "viewp"); glsl -> uniform_loc[5] = glGetUniformLocation (glsl -> id, "pos_shift"); glsl -> uniform_loc[6] = glGetUniformLocation (glsl -> id, "vert_color"); glsl -> array_pointer[1] = glGetAttribLocation (glsl -> id, "tcoord"); glsl -> array_pointer[2] = glGetAttribLocation (glsl -> id, "offset"); if (glsl -> object == MEASU) { glsl -> uniform_loc[7] = glGetUniformLocation (glsl -> id, "tilted"); glsl -> array_pointer[3] = glGetAttribLocation (glsl -> id, "at_a"); glsl -> array_pointer[4] = glGetAttribLocation (glsl -> id, "at_b"); if (obj -> inst_buffer_size == 12) glsl -> array_pointer[5] = glGetAttribLocation (glsl -> id, "at_c"); } // The string (rendered using triangles and textures + colors) glBindBuffer(GL_ARRAY_BUFFER, glsl -> vbo[0]); glBufferData(GL_ARRAY_BUFFER, obj -> vert_buffer_size * obj -> num_vertices*sizeof(GLfloat), obj -> vertices, GL_STATIC_DRAW); glEnableVertexAttribArray(glsl -> array_pointer[0]); glVertexAttribPointer(glsl -> array_pointer[0], 2, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) 0); glEnableVertexAttribArray(glsl -> array_pointer[1]); glVertexAttribPointer(glsl -> array_pointer[1], 2, GL_FLOAT, GL_FALSE, obj -> vert_buffer_size*sizeof(GLfloat), (GLvoid*) (2*sizeof(GLfloat))); update_string_instances (glsl, obj); } /*! \fn object_3d * duplicate_object_3d (object_3d * old_obj) \brief create a copy of an object_3d data structure \param old_obj the data structure to copy */ object_3d * duplicate_object_3d (object_3d * old_obj) { object_3d * new_obj = g_malloc0 (sizeof*new_obj); new_obj -> quality = old_obj -> quality; // Vertices new_obj -> num_vertices = old_obj -> num_vertices; new_obj -> vert_buffer_size = old_obj -> vert_buffer_size; new_obj -> vertices = duplicate_float (new_obj -> num_vertices*old_obj -> vert_buffer_size, old_obj -> vertices); // Indices new_obj -> num_indices = old_obj -> num_indices; new_obj -> ind_buffer_size = old_obj -> ind_buffer_size; if (old_obj -> indices != NULL) { new_obj -> indices = duplicate_int (new_obj -> num_indices*old_obj -> ind_buffer_size, old_obj -> indices); } // Instances new_obj -> num_instances = old_obj -> num_instances; new_obj -> inst_buffer_size = old_obj -> inst_buffer_size; if (old_obj -> instances != NULL) { new_obj -> instances = duplicate_float (new_obj -> num_instances*old_obj -> inst_buffer_size, old_obj -> instances); } new_obj -> texture = old_obj -> texture; int i; for (i=0; i<5; i++) new_obj -> shift[i] = old_obj -> shift[i]; return new_obj; } /*! \fn glsl_program * init_shader_program (int object, int object_id, * const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, * GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj) \brief create an OpenGL shader program \param object shader id (in enum shaders) \param object_id shader type in: GLSL_SPHERES, GLSL_POINTS, GLSL_LINES, GLSL_CYLINDERS, GLSL_CAPS, GLSL_POLYEDRA, GLSL_STRING \param vertex general shader: in the shaders defined in 'ogl_shaders.c' \param geometry geometry shader, if any: in the shaders defined in 'ogl_shaders.c' \param fragment color shader, if any: in the shaders defined in 'ogl_shaders.c' \param type_of_vertices type of vertices in: GL_POINTS, GL_LINES, GL_TRIANGLE GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP \param narray number of vertices to allocate \param nunif number of uniform location(s) to allocate \param lightning use lightning (1/0) \param obj the object 3D to bind to the shader */ glsl_program * init_shader_program (int object, int object_id, const GLchar * vertex, const GLchar * geometry, const GLchar * fragment, GLenum type_of_vertices, int narray, int nunif, gboolean lightning, object_3d * obj) { glsl_program * glsl = g_malloc0 (sizeof * glsl); glsl -> id = glCreateProgram (); glsl -> object = object; glsl -> draw_type = object_id; glsl -> vertex_shader = create_shader (GL_VERTEX_SHADER, vertex); glAttachShader (glsl -> id, glsl -> vertex_shader); if (geometry != NULL) { glsl -> geometry_shader = create_shader (GL_GEOMETRY_SHADER, geometry); glAttachShader (glsl -> id, glsl -> geometry_shader); } glsl -> fragment_shader = create_shader (GL_FRAGMENT_SHADER, fragment); glAttachShader (glsl -> id, glsl -> fragment_shader); glBindFragDataLocation (glsl -> id, 0, "fragment_color"); glLinkProgram(glsl -> id); glsl -> vert_type = type_of_vertices; glGenVertexArrays (1, & glsl -> vao); glBindVertexArray (glsl -> vao); glsl -> array_pointer = alloc_shader_pointer (glsl -> array_pointer, narray); glsl -> uniform_loc = alloc_shader_pointer (glsl -> uniform_loc, nunif); // Always the MVP matrix as uniform 0 glsl -> uniform_loc[0] = glGetUniformLocation (glsl -> id, "mvp"); // and always the vertices as array 0 glsl -> array_pointer[0] = glGetAttribLocation (glsl -> id, "vert"); glsl -> light_uniform = NULL; if (lightning) glsl -> light_uniform = glsl_add_lights (glsl); glsl -> obj = duplicate_object_3d (obj); glsl -> draw_instanced = FALSE; int nvbo = 1; if (glsl -> obj -> num_indices > 0) nvbo ++; if (glsl -> obj -> num_instances > 0) { nvbo ++; if (glsl -> obj -> num_instances > 1) glsl -> draw_instanced = TRUE; } glsl -> vbo = allocgluint (nvbo); glGenBuffers (nvbo, glsl -> vbo); switch (object_id) { case GLSL_SPHERES: // narray = 4 glsl_bind_spheres (glsl, glsl -> obj); break; case GLSL_POINTS: // narray = 4 glsl_bind_points (glsl, glsl -> obj); break; case GLSL_LINES: // narray = 3 glsl_bind_lines (glsl, glsl -> obj); break; case GLSL_CYLINDERS: // narray = 6 glsl_bind_cylinders (glsl, glsl -> obj); break; case GLSL_CAPS: // narray = 5 glsl_bind_caps (glsl, glsl -> obj); break; case GLSL_POLYEDRA: glsl_bind_polyhedra (glsl, glsl -> obj); break; case GLSL_STRING: glsl_bind_string (glsl, glsl -> obj); break; } glDetachShader (glsl -> id,glsl -> vertex_shader); if (geometry != NULL) glDetachShader (glsl -> id, glsl -> geometry_shader); glDetachShader (glsl -> id, glsl -> fragment_shader); return glsl; } /*! \fn gboolean in_md_shaders (project * this_proj, int id) \brief is this shader MD dependent ? \param this_proj the target project \param id the shader id */ gboolean in_md_shaders (project * this_proj, int id) { if (id == ATOMS) return TRUE; if (id == BONDS) return TRUE; if (id == POLYS) return TRUE; if (id == RINGS) return TRUE; if (id == SELEC) return TRUE; if (id == MDBOX) return this_proj -> cell.npt; if (id == VOLMS) return TRUE; return FALSE; } /*! \fn void re_create_all_md_shaders (glwin * view) \brief re-initialize all MD dependent OpenGL shaders \param view the target glwin */ void re_create_all_md_shaders (glwin * view) { int i, j; project * this_proj = get_project_by_id(view -> proj); for (i=0; i steps; j++) view -> n_shaders[i][j] = -1; } } } /*! \fn void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj) \brief re-initialize some MD dependent OpenGL shaders \param nshaders the number of shader(s) to initialize \param shaders the list of shaders \param this_proj the target project */ void re_create_md_shaders (int nshaders, int shaders[nshaders], project * this_proj) { int i, j, k; for (i=0; i modelgl -> create_shaders[k] = TRUE; for (j=0; j steps; j++) { this_proj -> modelgl -> n_shaders[k][j] = -1; } } } /*! \fn void cleaning_shaders (glwin * view, int shader) \brief re-initialize an OpenGL shader \param view the target glwin \param shader the shader to initialize */ void cleaning_shaders (glwin * view, int shader) { int i = (in_md_shaders(get_project_by_id(view -> proj), shader)) ? step : 0; if (view -> ogl_glsl[shader][i] != NULL) { g_free (view -> ogl_glsl[shader][i]); view -> ogl_glsl[shader][i] = NULL; } view -> n_shaders[shader][i] = (in_md_shaders(get_project_by_id(view -> proj), shader)) ? -1 : 0; } /*! \fn void recreate_all_shaders (glwin * view) \brief re-initialize all OpenGL shaders \param view the target glwin */ void recreate_all_shaders (glwin * view) { int i; for (i=0; i create_shaders[i] = TRUE; } } /*! \fn void init_default_shaders (glwin * view) \brief re-initialize the default OpenGL shaders \param view the target glwin */ void init_default_shaders (glwin * view) { int shaders[6] = {ATOMS, BONDS, SELEC, POLYS, RINGS, VOLMS}; re_create_md_shaders (6, shaders, get_project_by_id (view -> proj)); view -> create_shaders[LABEL] = TRUE; view -> create_shaders[PICKS] = TRUE; view -> create_shaders[MEASU] = TRUE; update (view); int i; if (is_atom_win_active(view) || (view -> mode == EDITION && (view -> anim -> last -> img -> selected[1] -> selected || view -> selection_mode == 5))) { if (view -> measure_win != NULL) { for (i=0; i<3; i++) { if (view -> measure_win -> selection_tree[i] != NULL) update_selection_tree (view, 1, i); } } } } /*! \fn void init_shaders (glwin * view) \brief initialize all the OpenGL shaders \param view the target glwin */ void init_shaders (glwin * view) { int i, j; project * this_proj = get_project_by_id (view -> proj); for (i=0; i ogl_glsl[i] = NULL; if (in_md_shaders (this_proj, i)) { view -> ogl_glsl[i] = g_malloc0 (this_proj -> steps*sizeof*view -> ogl_glsl[i]); view -> n_shaders[i] = allocint (this_proj -> steps); for (j=0; j steps; j++) { view -> n_shaders[i][j] = -1; } } else { j = (i == MEASU) ? 2 : 1; view -> ogl_glsl[i] = g_malloc0 (j*sizeof*view -> ogl_glsl[i]); view -> ogl_glsl[i][0] = NULL; view -> n_shaders[i] = allocint (j); } view -> create_shaders[i] = TRUE; } } /*! \fn gboolean glsl_disable_cull_face (glsl_program * glsl) \brief Disable or enable cull face for OpenGL rendering \param glsl the target glsl */ gboolean glsl_disable_cull_face (glsl_program * glsl) { if (glsl -> draw_type == GLSL_POINTS) { return FALSE; } else if (glsl -> draw_type == GLSL_LINES) { return FALSE; } else if (glsl -> draw_type == GLSL_LIGHT) { return FALSE; } else { return TRUE; } } /*! \fn void set_lights_data (glsl_program * glsl) \brief set lightning data for an OpenGL progam \param glsl the target glsl */ void set_lights_data (glsl_program * glsl) { int j, k; vec3_t l_pos, l_dir; k = (glsl -> draw_type == GLSL_LIGHT) ? 0 : plot -> m_terial.param[0]; glUniformMatrix4fv (glsl -> light_uniform[0], 1, GL_FALSE, & wingl -> model_view_matrix.m00); glUniform1i (glsl -> light_uniform[1], k); glUniform3f (glsl -> light_uniform[2], plot -> m_terial.albedo.x, plot -> m_terial.albedo.y, plot -> m_terial.albedo.z); for (j=0; j<5; j++) glUniform1f (glsl -> light_uniform[3+j], plot -> m_terial.param[j+1]); glUniform1i (glsl -> light_uniform[8], plot -> f_g.mode); glUniform1i (glsl -> light_uniform[9], plot -> f_g.based); glUniform1f (glsl -> light_uniform[10], plot -> f_g.density); glUniform2f (glsl -> light_uniform[11], plot -> f_g.depth[0]*plot -> p_depth/100.0 + plot -> p_depth, plot -> f_g.depth[1]*plot -> p_depth/100.0+ plot -> p_depth); glUniform3f (glsl -> light_uniform[12], plot -> f_g.color.x, plot -> f_g.color.y, plot -> f_g.color.z); glUniform1i (glsl -> light_uniform[13], plot -> lights); for (j=0; j lights; j++) { k = j*LIGHT_DATA + LIGHT_INFO + MATERIAL_DATA + FOG_DATA; glUniform1i (glsl -> light_uniform[k], plot -> l_ght[j].type); if (plot -> l_ght[j].fix == 0) { l_pos = m4_mul_pos (wingl -> model_matrix, plot -> l_ght[j].position); } else { l_pos = m4_mul_pos (wingl -> model_view_matrix, plot -> l_ght[j].position); } glUniform3f (glsl -> light_uniform[k+1], l_pos.x, l_pos.y, l_pos.z); if (plot -> l_ght[j].fix == 0) { l_dir = m4_mul_pos (wingl -> model_matrix, plot -> l_ght[j].direction); } else { l_dir = m4_mul_pos (wingl -> model_view_matrix, plot -> l_ght[j].direction); } glUniform3f (glsl -> light_uniform[k+2], l_dir.x, l_dir.y, l_dir.z); glUniform3f (glsl -> light_uniform[k+3], plot -> l_ght[j].intensity.x, plot -> l_ght[j].intensity.y, plot -> l_ght[j].intensity.z); glUniform1f (glsl -> light_uniform[k+4], plot -> l_ght[j].attenuation.x); glUniform1f (glsl -> light_uniform[k+5], plot -> l_ght[j].attenuation.y); glUniform1f (glsl -> light_uniform[k+6], plot -> l_ght[j].attenuation.z); glUniform1f (glsl -> light_uniform[k+7], cos(plot -> l_ght[j].spot_data.x*pi/180.0)); glUniform1f (glsl -> light_uniform[k+8], cos(plot -> l_ght[j].spot_data.y*pi/180.0)); glUniform1f (glsl -> light_uniform[k+9], cos(plot -> l_ght[j].spot_data.z*pi/180.0)); } } uint16_t stipple_pattern[NDOTS]={ 0xAAAA, 0x1111, 0x0000, 0x55FF, 0x24FF, 0x3F3F, 0x33FF, 0x27FF}; /*! \fn void shading_glsl_text (glsl_program * glsl) \brief Render text in OpenGL \param glsl the target glsl */ void shading_glsl_text (glsl_program * glsl) { wingl -> label_projection_matrix = create_label_matrices (); glUniformMatrix4fv (glsl -> uniform_loc[2], 1, GL_FALSE, & wingl -> label_projection_matrix.m00); glUniformMatrix4fv (glsl -> uniform_loc[3], 1, GL_FALSE, & wingl -> un_view_matrix.m00); glUniform4f (glsl -> uniform_loc[4], wingl -> view_port.w, wingl -> view_port.x, wingl -> view_port.y, wingl -> view_port.z); glUniform4f (glsl -> uniform_loc[5], glsl -> obj -> shift[0], glsl -> obj -> shift[1], glsl -> obj -> shift[2], glsl -> obj -> shift[3]); glUniform4f (glsl -> uniform_loc[6], glsl -> col -> red, glsl -> col -> green, glsl -> col -> blue, glsl -> col -> alpha); if (glsl -> object == MEASU) glUniform1i (glsl -> uniform_loc[7], (plot -> mtilt) ? 1 : 0); } /*! \fn void render_this_shader (glsl_program * glsl, int ids) \brief render an OpenGL shader \param glsl the target glsl \param ids */ void render_this_shader (glsl_program * glsl, int ids) { int j, k; if (glsl -> object == MAXIS) { j = 0; if (is_atom_win_active(wingl)) { k = wingl -> atom_win -> active; if (wingl -> atom_win -> show_axis[k]) { j = wingl -> atom_win -> axis[k]; } } wingl -> axis_proj_model_view_matrix = create_axis_matrices (j); glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> axis_proj_model_view_matrix.m00); j = (plot -> box_axis[AXIS] == WIREFRAME) ? 1 : 3; if (ids > j) shading_glsl_text (glsl); } else if (glsl -> object == LABEL) { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); shading_glsl_text (glsl); } else if (glsl -> object == MEASU) { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); if (glsl -> vert_type == GL_TRIANGLE_STRIP) { shading_glsl_text (glsl); } else { glUniform1i (glsl -> uniform_loc[1], plot -> mfactor); glUniform1ui (glsl -> uniform_loc[2], stipple_pattern[plot -> mpattern]); if (glsl -> vert_type == GL_TRIANGLES) { wingl -> label_projection_matrix = create_label_matrices (); glUniformMatrix4fv (glsl -> uniform_loc[3], 1, GL_FALSE, & wingl -> label_projection_matrix.m00); } glUniformMatrix4fv (glsl -> uniform_loc[4], 1, GL_FALSE, & wingl -> un_view_matrix.m00); glUniform4f (glsl -> uniform_loc[5], wingl -> view_port.w, wingl -> view_port.x, wingl -> view_port.y, wingl -> view_port.z); if (plot -> rep == PERSPECTIVE) { glUniform1f (glsl -> uniform_loc[6], 1.0); } else { glUniform1f (glsl -> uniform_loc[6], plot -> p_depth); } } } else if (glsl -> object == LIGHT) { if (plot -> light_loc[ids]) { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_matrix.m00); } else { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); } } else { glUniformMatrix4fv (glsl -> uniform_loc[0], 1, GL_FALSE, & wingl -> proj_model_view_matrix.m00); } if (glsl -> line_width != 0.0) glLineWidth (glsl -> line_width); if (glsl -> light_uniform != NULL) set_lights_data (glsl); glBindVertexArray (glsl -> vao); if (glsl_disable_cull_face (glsl)) glDisable (GL_CULL_FACE); if (plot -> render == LINE) { glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); glLineWidth (1.0); } else if (plot -> render == PTS) { glPolygonMode (GL_FRONT_AND_BACK, GL_POINT); } else { glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); } if (glsl -> draw_type == GLSL_SPHERES || glsl -> draw_type == GLSL_CYLINDERS || glsl -> draw_type == GLSL_CAPS) { if (glsl -> draw_instanced) { glDrawElementsInstanced (glsl -> vert_type, glsl -> obj -> num_indices, GL_UNSIGNED_INT, 0, glsl -> obj -> num_instances); } else { glDrawElements (glsl -> vert_type, glsl -> obj -> num_indices, GL_UNSIGNED_INT, 0); } } else if (glsl -> draw_type == GLSL_POINTS || glsl -> draw_type == GLSL_LINES || glsl -> draw_type == GLSL_STRING) { if (glsl -> draw_type == GLSL_STRING) { glEnable (ogl_texture); glActiveTexture (GL_TEXTURE0); glBindTexture (ogl_texture, glsl -> obj -> texture); } if (glsl -> draw_instanced) { j = (glsl -> draw_type == GLSL_STRING) ? 4 : 3*(glsl -> draw_type+1); glDrawArraysInstanced (glsl -> vert_type, 0, j, glsl -> obj -> num_instances); } else { glDrawArrays (glsl -> vert_type, 0, glsl -> obj -> num_vertices); } } else { glDrawArrays (glsl -> vert_type, 0, glsl -> obj -> num_vertices); } if (glsl_disable_cull_face (glsl)) glEnable (GL_CULL_FACE); glBindVertexArray (0); } /*! \fn void draw_vertices (int id) \brief Draw OpenGL shader program \param id the ID of the program to render */ void draw_vertices (int id) { int i, j; glsl_program * glsl; i = (in_md_shaders(proj_gl, id)) ? step : 0; for (j=0; j n_shaders[id][i]; j++) { if (wingl -> ogl_glsl[id][i][j]) { glsl = wingl -> ogl_glsl[id][i][j]; glUseProgram (glsl -> id); render_this_shader (glsl, j); } } } Atomes-GNU-1.1.14/src/opengl/ogl_shading.h000066400000000000000000000121171457665371200202010ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file ogl_shading.h * @short Variable declarations related to GLSL programs \n Data structure declarations related to GLSL programs * @author Sébastien Le Roux */ /* * This header file: 'ogl_shading.h' * * Contains: - Variable declarations related to GLSL programs - Data structure declarations related to GLSL programs */ #ifndef OGL_SHADING_H_ #define OGL_SHADING_H_ /*! \enum glsl_styles */ enum glsl_styles { GLSL_POINTS = 0, /*!< 0 */ GLSL_SPHERES = 1, /*!< 1 */ GLSL_LINES = 2, /*!< 2 */ GLSL_CYLINDERS = 3, /*!< 3 */ GLSL_CAPS = 4, /*!< 4 */ GLSL_POLYEDRA = 5, /*!< 5 */ GLSL_STRING = 6, /*!< 6 */ GLSL_LIGHT = 7 /*!< 7 */ }; #define POLY_BUFF_SIZE 10 // p(x,y,z), n(x,y,z), color (r,g,b,a) #define LINE_BUFF_SIZE 7 // p(x,y,z), color (r,g,b,a) #define CYLI_BUFF_SIZE 13 // p(x,y,z), length, rad, quat(w,x,y,z), color (r,g,b,a) #define CAPS_BUFF_SIZE 12 // p(x,y,z), rad, quat(w,x,y,z), color (r,g,b,a) #define ATOM_BUFF_SIZE 8 // p(x,y,z), rad, color (r,g,b,a) #define CHAR_BUFF_SIZE 4 // p(x,y), t(x,y) // Points extern const GLchar * point_vertex; extern const GLchar * point_color; // Basic lines extern const GLchar * line_vertex; extern const GLchar * line_color; extern const GLchar * line_stipple; extern const GLchar * line_stipple_color; extern const GLchar * angle_vertex; extern const GLchar * angle_stipple; extern const GLchar * angle_color; extern const GLchar * angstrom_vertex; extern const GLchar * degree_vertex; // Triangles: Multiple lights + Materials + Transparency shaders extern const GLchar * full_vertex; extern const GLchar * full_color; // Sphere extern const GLchar * sphere_vertex; // Cylinder and caps extern const GLchar * cylinder_vertex; extern const GLchar * cone_vertex; extern const GLchar * cap_vertex; extern const GLchar * axis_sphere_vertex; extern const GLchar * axis_cylinder_geom; extern const GLchar * axis_line_vertex; // Cylinder in geometry shader extern const GLchar * gs_cylinder_vertex; extern const GLchar * gs_cylinder_geom; extern const GLchar * polyedron_vertex; extern const GLchar * polyedron_geom; extern const GLchar * polyedron_color; extern const GLchar * axis_cylinder_geom; extern const GLchar * pick_color; extern const GLchar * string_vertex; extern const GLchar * string_color; extern const GLchar * string_color_2d; /*! \typedef object_3d */ typedef struct object_3d object_3d; struct object_3d { int quality; /*!< OpenGL rendering quality */ int num_vertices; /*!< Number of vertices to render, if any */ int vert_buffer_size; /*!< Buffer size for the vertices, if any */ float * vertices; /*!< Vertices to render, if any */ int num_indices; /*!< Number of indices, if any */ int ind_buffer_size; /*!< Buffer size for the indices, if any */ int * indices; /*!< Indices to render, if any */ int num_instances; /*!< Number of instances, if any */ int inst_buffer_size; /*!< Buffer size for the instances, if any */ float * instances; /*!< Instances to render, if any */ GLuint texture; /*!< Texture ID, if any */ float shift[4]; /*!< 0 to 2, texture position shift, if any: \n (0 = x_shift, 1 = y_shift, 2 = z_shift), \n 3 visibility (0 = normal, 1 = always) */ }; /*! \typedef glsl_program */ typedef struct glsl_program glsl_program; struct glsl_program { int id; /*!< The GLSL program ID */ int object; /*!< The number of 3D object(s) to render */ GLuint vertex_shader; /*!< The vertex shader ID */ GLuint geometry_shader; /*!< The geometry shader ID */ GLuint fragment_shader; /*!< The fragement shader ID */ GLenum vert_type; /*!< The type of vertex */ int draw_type; /*!< In \enum glsl_styles */ gboolean draw_instanced; /*!< 0 = single instance, 1 = multiple instances */ GLuint vao; /*!< Vertex object array ID */ GLuint * vbo; /*!< Binding buffer(s) */ GLuint * array_pointer; /*!< Vertex pointer(s) */ GLuint * uniform_loc; /*!< Uniform location pointer(s) */ GLuint * light_uniform; /*!< Light(s) uniform */ object_3d * obj; /*!< The 3D object(s) to render */ float line_width; /*!< Wireframe line width */ ColRGBA * col; /*!< String color */ }; #endif Atomes-GNU-1.1.14/src/opengl/ogl_utils.c000066400000000000000000000162051457665371200177210ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file ogl_utils.c * @short 2D and 3D calculations utilities for distances and angles * @author Sébastien Le Roux */ /* * This file: 'ogl_utils.c' * * Contains: * - 2D and 3D calculations utilities for distances and angles * * List of functions: double arc_cos (double val); distance distance_2d (atom * at, atom * bt); distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); angle angle_2d (atom * at, atom * bt, atom * ct); angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct); angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt); */ #include "global.h" #include "interface.h" #include "glview.h" #include "dlp_field.h" extern gboolean field_color; extern ColRGBA init_color (int id, int numid); /*! \fn distance distance_2d (atom * at, atom * bt) \brief distance between atom a and b in 2D \param at atom a \param bt atom b */ distance distance_2d (atom * at, atom * bt) { distance dist; dist.pbc = FALSE; dist.x = at -> x - bt -> x; dist.y = at -> y - bt -> y; dist.z = 0.0; dist.length = sqrt(dist.x*dist.x + dist.y*dist.y); return dist; } /*! \fn distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt) \brief distance between atom a and b in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b */ distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt) { distance dist; double tmp; vec3_t dij; dist.pbc = FALSE; dist.x = at -> x - bt -> x; dist.y = at -> y - bt -> y; dist.z = at -> z - bt -> z; dist.length = sqrt(dist.x*dist.x + dist.y*dist.y + dist.z*dist.z); if (cell -> pbc) { if (cell -> box[mdstep].param[1][0] == 90.0 && cell -> box[mdstep].param[1][1] == 90.0 && cell -> box[mdstep].param[1][2] == 90.0) { dij.x = dist.x - round((at -> x-bt -> x)/cell -> box[mdstep].param[0][0]) * cell -> box[mdstep].param[0][0]; dij.y = dist.y - round((at -> y-bt -> y)/cell -> box[mdstep].param[0][1]) * cell -> box[mdstep].param[0][1]; dij.z = dist.z - round((at -> z-bt -> z)/cell -> box[mdstep].param[0][2]) * cell -> box[mdstep].param[0][2]; } else { vec3_t a = vec3(at -> x, at -> y, at -> z); vec3_t b = vec3(bt -> x, bt -> y, bt -> z); vec3_t af = m4_mul_coord (cell -> box[mdstep].cart_to_frac, a); vec3_t bf = m4_mul_coord (cell -> box[mdstep].cart_to_frac, b); vec3_t nij = v3_sub(af, bf); nij.x -= round(nij.x); nij.y -= round(nij.y); nij.z -= round(nij.z); dij = m4_mul_coord (cell -> box[mdstep].frac_to_cart, nij); } tmp = v3_length(dij); if (dist.length - tmp > 0.001) { dist.pbc = TRUE; dist.x = dij.x; dist.y = dij.y; dist.z = dij.z; dist.length = tmp; } } return dist; } /*! \fn double arc_cos (double val) \brief compute arc cosinus \param val the angle */ double arc_cos (double val) { if (val < -1.0) { return acos(-2.0 - val) * 180.0 / pi; } else if (val > 1.0) { return acos(2.0 - val) * 180.0 / pi; } else { return acos(val) * 180.0 / pi; } } /*! \fn angle angle_2d (atom * at, atom * bt, atom * ct) \brief angle between atom a, b and c in 2D \param at atom a \param bt atom b \param ct atom c */ angle angle_2d (atom * at, atom * bt, atom * ct) { angle theta; distance dist_a = distance_2d (bt, at); distance dist_b = distance_2d (bt, ct); theta.pbc = FALSE; double v = 0.0; v = dist_a.x*dist_b.x + dist_a.y*dist_b.y; theta.angle = arc_cos(v/(dist_a.length*dist_b.length)); return theta; } /*! \fn angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct) \brief angle between atom a, b and c in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b \param ct atom c */ angle angle_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct) { angle theta; distance dist_a = distance_3d (cell, mdstep, bt, at); distance dist_b = distance_3d (cell, mdstep, bt, ct); theta.pbc = FALSE; if (dist_a.pbc || dist_b.pbc) theta.pbc = TRUE; double v = 0.0; v = dist_a.x*dist_b.x + dist_a.y*dist_b.y + dist_a.z*dist_b.z; theta.angle = arc_cos(v/(dist_a.length*dist_b.length)); return theta; } /*! \fn angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) \brief dihedral between atom a, b, c and d in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b \param ct atom c \param dt atom d */ angle dihedral_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) { angle phi; distance dist_a = distance_3d (cell, mdstep, at, bt); distance dist_b = distance_3d (cell, mdstep, bt, ct); distance dist_c = distance_3d (cell, mdstep, ct, dt); vec3_t u, v; if (dist_a.pbc || dist_b.pbc || dist_c.pbc) phi.pbc = TRUE; u = vec3(dist_a.y*dist_b.z - dist_a.z*dist_b.y, dist_a.z*dist_b.x - dist_a.x*dist_b.z, dist_a.x*dist_b.y - dist_a.y*dist_b.x); v = vec3(dist_b.y*dist_c.z - dist_b.z*dist_c.y, dist_b.z*dist_c.x - dist_b.x*dist_c.z, dist_b.x*dist_c.y - dist_b.y*dist_c.x); if (v3_length(u) == 0.0 || v3_length(v) == 0.0) { phi.angle = 0.0; } else { phi.angle = arc_cos(v3_dot(u, v)/(v3_length(u)*v3_length(v))); } return phi; } /*! \fn angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) \brief inversion angle between atom a, b, c and d in 3D \param cell unit cell \param mdstep the MD step \param at atom a \param bt atom b \param ct atom c \param dt atom d */ angle inversion_3d (cell_info * cell, int mdstep, atom * at, atom * bt, atom * ct, atom * dt) { angle inv; distance dist_a = distance_3d (cell, mdstep, bt, at); distance dist_b = distance_3d (cell, mdstep, ct, at); distance dist_c = distance_3d (cell, mdstep, at, dt); vec3_t u, v, w, x; if (dist_a.pbc || dist_b.pbc || dist_c.pbc) inv.pbc = TRUE; u = vec3(dist_b.x, dist_b.y, dist_b.z); v = vec3(dist_c.x, dist_c.y, dist_c.z); w = v3_cross (u, v); x = vec3(dist_a.x, dist_a.y, dist_a.z); if (v3_length(w) == 0.0 || v3_length(x) == 0.0) { inv.angle = 0.0; } else { inv.angle = fabs(90.0 - arc_cos(v3_dot(w, x)/(v3_length(w)*v3_length(x)))); } return inv; } Atomes-GNU-1.1.14/src/opengl/selection.c000066400000000000000000000517171457665371200177140ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file selection.c * @short Functions handling the atom and bond selection process in the OpenGL window * @author Sébastien Le Roux */ /* * This file: 'selection.c' * * Contains: * - The functions handling the atom and bond selection process in the OpenGL window * * List of functions: int find_bond_in_bonds (project * this_proj, int i, int j, int b, int id); int find_selected_bond (project * this_proj, int id); int find_selected_atom (project * this_proj, int id); int num_bonds (int i); int num_angles (int i); int num_dihedrals (int i); void save_dihedral_selection (glwin * view, int pi); void update_dihedral_selection (glwin * view, int pi); void save_angle_selection (glwin * view, int pi); void update_angle_selection (glwin * view, int pi); void save_bond_selection (glwin * view, int pi); void update_bond_selection (glwin * view, int pi); void save_all_selections (glwin * view, int pi); void update_all_selections (glwin * view, int pi); void update_selection_list (atom_selection * at_list, atom * at, gboolean add); void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi); void process_selection (project * this_proj, glwin * view, int id, int ac, int pi); void process_the_hits (glwin * view, gint event_button, double ptx, double pty); atom_in_selection * new_atom_in_selection (int id, int sp); */ #include "global.h" #include "interface.h" #include "glview.h" #include "atom_edit.h" extern G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); extern void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void update_label_selection (glwin * view, int pi); extern int selected_aspec; extern int get_to_be_selected (glwin * view); /*! \fn int find_bond_in_bonds (project * this_proj, int i, int j, int b, int id) \brief Find for a bond ID in the bond list using the atoms in the bond \param this_proj the target project \param i id tracker \param j the MD step \param b 0 = normal, 1 = clones \param id the id-th visible bond to find */ int find_bond_in_bonds (project * this_proj, int i, int j, int b, int id) { int k, l, m; for (k=0; k < this_proj -> modelgl -> bonds[j][b]; k++) { l = this_proj -> modelgl -> bondid[j][b][k][0]; m = this_proj -> modelgl -> bondid[j][b][k][1]; if (this_proj -> atoms[j][l].show[b]) i ++; if (i == id) return k; if (b) { if (this_proj -> atoms[j][l].show[b]) i ++; if (i == id) return k; } if (this_proj -> atoms[j][m].show[b]) i ++; if (i == id) return k; if (b) { if (this_proj -> atoms[j][m].show[b]) i ++; if (i == id) return k; } } return -i; } /*! \fn int find_selected_bond (project * this_proj, int id) \brief find the selected bond based of the picked color id \param this_proj the target project \param id the id-th visible bond to find */ int find_selected_bond (project * this_proj, int id) { int i, j, k; i = this_proj -> modelgl -> clones_to_be_picked - 1; j = this_proj -> modelgl -> anim -> last -> img -> step; k = find_bond_in_bonds (this_proj, i, j, 0, id); if (k < 0 && this_proj -> modelgl -> anim -> last -> img -> draw_clones) { k = find_bond_in_bonds (this_proj, -k, j, 1, id); if (k < 0) { return -1; } else { return k; } } else if (k < 0) { return -1; } else { return k; } } /*! \fn int find_selected_atom (project * this_proj, int id) \brief find the selected atom based of the picked color id \param this_proj the target project \param id the id-th visible atom or clone to find */ int find_selected_atom (project * this_proj, int id) { int i, j, k, l, m; i = -1; j = this_proj -> modelgl -> anim -> last -> img -> step; for (k=0; k natomes; k++) { if (this_proj -> atoms[j][k].show[0]) i++; if (i == id) return k; } if (this_proj -> modelgl -> anim -> last -> img -> draw_clones) { for (k=0; k < this_proj -> modelgl -> bonds[j][1]; k++) { l = this_proj -> modelgl -> bondid[step][1][k][0]; m = this_proj -> modelgl -> bondid[step][1][k][1]; if (this_proj -> atoms[j][l].show[1]) i++; if (i == id) return l; if (this_proj -> atoms[j][m].show[1]) i++; if (i == id) return m; } } return -1; } /*! \fn int num_bonds (int i) \brief number of distinct pair(s) of atoms in selection \param i the number of atom(s) in selection */ int num_bonds (int i) { return i*(i-1)/2; } /*! \fn int num_angles (int i) \brief number of distinct triplet(s) of atoms in selection \param i the number of atom(s) in selection */ int num_angles (int i) { return i*(i-1)*(i-2)/2; } /*! \fn int num_dihedrals (int i) \brief number of distinct quadruplet(s) of atoms in selection \param i the number of atom(s) in selection */ int num_dihedrals (int i) { return i*(i-1)*(i-2)*(i-3)/2; } int objects[3] = {0, 0, 0}; int * object_was_selected[3] = {NULL, NULL, NULL}; int ** tmp_object_id[3] = {NULL, NULL, NULL}; /*! \fn void save_dihedral_selection (glwin * view, int pi) \brief save the dihedral selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_dihedral_selection (glwin * view, int pi) { int i, j; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 3 && img -> selected[pi] -> selected < MAX_IN_SELECTION-10) { objects[2] = i = num_dihedrals (img -> selected[pi] -> selected); tmp_object_id[2] = allocdint (i, 4); object_was_selected[2] = allocint(i); for (j=0; j selected[pi] -> selected_dihedrals[j]; dihedrals_loop (view, -2, pi, NULL); g_free (img -> selected[pi] -> selected_dihedrals); } else { objects[2] = 0; } } /*! \fn void update_dihedral_selection (glwin * view, int pi) \brief update the dihedral selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_dihedral_selection (glwin * view, int pi) { int i; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 3 && img -> selected[pi] -> selected < MAX_IN_SELECTION-10) { i = num_dihedrals (img -> selected[pi] -> selected); img -> selected[pi] -> selected_dihedrals = allocint (i); dihedrals_loop (view, -1, pi, NULL); } } /*! \fn void save_angle_selection (glwin * view, int pi) \brief save the angle selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_angle_selection (glwin * view, int pi) { int i, j; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { objects[1] = i = num_angles (img -> selected[pi] -> selected); tmp_object_id[1] = allocdint (i, 3); object_was_selected[1] = allocint(i); for (j=0; j selected[pi] -> selected_angles[j]; angles_loop (view, -2, pi, NULL); g_free (img -> selected[pi] -> selected_angles); } else { objects[1] = 0; } } /*! \fn void update_angle_selection (glwin * view, int pi) \brief update the angle selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_angle_selection (glwin * view, int pi) { int i; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { i = num_angles (img -> selected[pi] -> selected); img -> selected[pi] -> selected_angles = allocint (i); angles_loop (view, -1, pi, NULL); } } /*! \fn void save_bond_selection (glwin * view, int pi) \brief save the bond selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_bond_selection (glwin * view, int pi) { int i, j; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 1 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { objects[0] = i = num_bonds (img -> selected[pi] -> selected); tmp_object_id[0] = allocdint (i, 2); object_was_selected[0] = allocint(i); for (j=0; j selected[pi] -> selected_bonds[j]; bonds_loop (view, -2, pi, NULL); g_free (img -> selected[pi] -> selected_bonds); } else { objects[0] = 0; } } /*! \fn void update_bond_selection (glwin * view, int pi) \brief update the bond selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_bond_selection (glwin * view, int pi) { int i; image * img = view -> anim -> last -> img; if (img -> selected[pi] -> selected > 1 && img -> selected[pi] -> selected < MAX_IN_SELECTION) { i = num_bonds (img -> selected[pi] -> selected); img -> selected[pi] -> selected_bonds = allocint (i); bonds_loop (view, -1, pi, NULL); } if (view -> measure_win != NULL) { if (view -> measure_win -> selection_tree[0] != NULL) { update_selection_tree (view, pi, 0); } } } /*! \fn void save_all_selections (glwin * view, int pi) \brief save all selection data \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void save_all_selections (glwin * view, int pi) { save_bond_selection (view, pi); save_angle_selection (view, pi); save_dihedral_selection (view, pi); } /*! \fn void update_all_selections (glwin * view, int pi) \brief update the selection data: bonds, angles and dihedrals \param view the target glwin \param pi selection mode (0 = normal mode, 1 = edition mode) */ void update_all_selections (glwin * view, int pi) { update_bond_selection (view, pi); update_angle_selection (view, pi); update_dihedral_selection (view, pi); if (view -> measure_win != NULL) update_label_selection (view, pi); int i; for (i=0; i<3; i++) { if (objects[i] > 0) { if (object_was_selected[i]) { g_free (object_was_selected[i]); object_was_selected[i] = NULL; } if (tmp_object_id[i]) { g_free (tmp_object_id[i]); tmp_object_id[i] = NULL; } } objects[i] = 0; if (view -> measure_win != NULL) { if (view -> measure_win -> selection_tree[i] != NULL) { update_selection_tree (view, pi, i); } } } } /*! \fn atom_in_selection * new_atom_in_selection (int id, int sp) \brief create a selected atom \param id atom id \param sp atom species */ atom_in_selection * new_atom_in_selection (int id, int sp) { atom_in_selection * new_sel = g_malloc0 (sizeof*new_sel); new_sel -> id = id; new_sel -> sp = sp; return new_sel; } /*! \fn void update_selection_list (atom_selection * at_list, atom * at, gboolean add) \brief update the selection list adding or removing an atom \param at_list target atom selection \param at atom \param add add or remove (1/0) */ void update_selection_list (atom_selection * at_list, atom * at, gboolean add) { int i; atom_in_selection * selection = at_list -> first; if (add) { selection = at_list -> last; if (at_list -> selected == 0) { at_list -> first = new_atom_in_selection (at -> id, at -> sp); at_list -> last = at_list -> first; } else { selection -> next = new_atom_in_selection (at -> id, at -> sp); selection -> next -> prev = selection; at_list -> last = selection -> next; } } else { selection = at_list -> first; for (i=0; i selected; i++) { if (selection -> id == at -> id) { if (i == 0 && at_list -> selected == 1) { at_list -> last = NULL; at_list -> first = NULL; } else if (i == 0) { at_list -> first = at_list -> first -> next; at_list -> first -> prev = NULL; } else { if (i == at_list -> selected-1) { at_list -> last = selection -> prev; at_list -> last -> next = NULL; } else { selection -> next -> prev = selection -> prev; selection -> prev -> next = selection -> next; } } break; } if (selection -> next != NULL) selection = selection -> next; } } } /*! \fn void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi) \brief process selected atom \param this_proj the target project \param view the target glwin \param id the atom id \param ac atom or clone (0/1) \param se set to 0 to ensure to remove a selected atom from the list and not to add label \param pi selection mode (0 = normal mode, 1 = edition mode) */ void process_selected_atom (project * this_proj, glwin * view, int id, int ac, int se, int pi) { int i; i = view -> anim -> last -> img -> step; if (this_proj -> atoms[i][id].pick[pi]) { if (! se) { this_proj -> atoms[i][id].pick[pi] = FALSE; update_selection_list (view -> anim -> last -> img -> selected[pi], & this_proj -> atoms[i][id], FALSE); view -> anim -> last -> img -> selected[pi] -> selected --; view -> prepare_motion = TRUE; } else if (this_proj -> atoms[i][id].label[ac]) { this_proj -> atoms[i][id].pick[pi] = FALSE; this_proj -> atoms[i][id].label[ac] = FALSE; view -> labelled = check_label_numbers (this_proj, 2); update_selection_list (view -> anim -> last -> img -> selected[pi], & this_proj -> atoms[i][id], FALSE); view -> anim -> last -> img -> selected[pi] -> selected --; view -> prepare_motion = TRUE; } else { this_proj -> atoms[i][id].label[ac] = TRUE; view -> labelled = check_label_numbers (this_proj, 2); } } else { this_proj -> atoms[i][id].pick[pi] = TRUE; update_selection_list (view -> anim -> last -> img -> selected[pi], & this_proj -> atoms[i][id], TRUE); view -> anim -> last -> img -> selected[pi] -> selected ++; view -> prepare_motion = TRUE; } } /*! \fn void process_selection (project * this_proj, glwin * view, int id, int ac, int pi) \brief process selection \param this_proj the target project \param view the target glwin \param id the atom id \param ac atom or clone (0/1) \param pi selection mode (0 = normal mode, 1 = edition mode) */ void process_selection (project * this_proj, glwin * view, int id, int ac, int pi) { int i, j, k; j = view -> anim -> last -> img -> step; k = this_proj -> atoms[j][id].pick[pi]; for (i=0; i steps; i++) { if (i == j) { process_selected_atom (this_proj, view, id, ac, 1, pi); } else { this_proj -> atoms[i][id].pick[pi] = ! k; } } } /*! \fn void process_the_hits (glwin * view, gint event_button, double ptx, double pty) \brief process a mouse click \param view the target glwin \param event_button the event button \param ptx x position \param pty y position */ void process_the_hits (glwin * view, gint event_button, double ptx, double pty) { int i, j, k, l, m, n, o, p, q; view -> picked = FALSE; GLubyte pixel[4]; GLint viewport[4]; int scale = gtk_widget_get_scale_factor (view -> win); glGetIntegerv (GL_VIEWPORT, viewport); glPixelStorei (GL_UNPACK_ALIGNMENT, 1); glReadPixels (scale * view -> mouseX, viewport[3] - scale * view -> mouseY, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel); int picked_id = pixel[0] + 256*pixel[1] + 256*256*pixel[2]; for (i=0; i to_be_picked; i++) { if (picked_id == view -> color_to_pick[i]) { j = i; view -> picked = TRUE; break; } } to_pop.action = 0; to_pop.x = 0.0; to_pop.y = 0.0; to_pop.pts[0] = to_pop.pts[1] = to_pop.pts[2] = to_pop.pts[3] = to_pop.pts[4] = -1; if (view -> picked) { project * this_proj = get_project_by_id(view -> proj); k = (is_atom_win_active(view) || (view -> mode == EDITION && view -> selection_mode == NSELECTION-1)) ? 1 : 0; l = view -> anim -> last -> img -> step; if (j < view -> clones_to_be_picked) { m = find_selected_atom (this_proj, j); n = (j < view -> atoms_to_be_picked) ? 0 : 1; o = m; p = -1; q = this_proj -> atoms[l][m].pick[k]; } else { m = find_selected_bond (this_proj, j); n = (j < view -> bonds_to_be_picked) ? 0 : 1; o = view -> bondid[l][n][m][0]; p = view -> bondid[l][n][m][1]; q = 0; if (this_proj -> atoms[l][o].pick[k] || this_proj -> atoms[l][p].pick[k]) q = 1; } if (m != -1) { if (event_button == 1) { if (view -> selection_mode == ATOMS || view -> selection_mode == NSELECTION-1 || is_atom_win_active(view)) { save_all_selections (view, k); if (j < view -> clones_to_be_picked) { process_selection (this_proj, view, m, n, k); } else { if (this_proj -> atoms[l][o].show[n]) process_selection (this_proj, view, o, n, k); if (this_proj -> atoms[l][p].show[n]) process_selection (this_proj, view, p, n, k); } update_all_selections (view, k); } else if (view -> selection_mode == 1) { opengl_project_changed (view -> proj); if (j < view -> clones_to_be_picked) { selected_status = ! this_proj -> atoms[l][m].pick[get_to_be_selected (view)]; #ifdef GTK4 select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(m)); #else select_unselect_this_atom (NULL, GINT_TO_POINTER(m)); #endif } else { selected_status = ! this_proj -> atoms[l][o].pick[get_to_be_selected (view)]; #ifdef GTK4 select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(o)); select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(p)); #else select_unselect_this_atom (NULL, GINT_TO_POINTER(o)); select_unselect_this_atom (NULL, GINT_TO_POINTER(p)); #endif } } else { opengl_project_changed (view -> proj); if (view -> selection_mode > 3) { p = view -> selection_mode-2; } else { p = view -> selection_mode; } if (j < view -> clones_to_be_picked) { n = this_proj -> atoms[l][m].coord[p]; o = this_proj -> atoms[l][m].pick[0]; } else { n = this_proj -> atoms[l][o].coord[p]; o = this_proj -> atoms[l][o].pick[0]; } if (view -> selection_mode > 3) { selected_aspec = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & view -> colorp[0][0]); #else select_unselect_atoms (NULL, & view -> colorp[0][0]); #endif } tint pointer; pointer.a = p; pointer.b = n; pointer.c = ! o; #ifdef GTK4 select_unselect_coord (NULL, NULL, & pointer); #else select_unselect_coord (NULL, & pointer); #endif } if (view -> mode == EDITION) { init_coordinates (this_proj, 1, FALSE, TRUE); view -> baryc[1] = get_bary (this_proj, 1); } int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, this_proj); view -> create_shaders[LABEL] = TRUE; view -> create_shaders[MEASU] = TRUE; update (view); // if (view -> anim -> last -> img -> m_is_pressed && gtk_accelerator_get_default_mod_mask() == GDK_CONTROL_MASK) window_measures (NULL, view); } else if (event_button == 3) { to_pop.action = 2; to_pop.x = ptx; to_pop.y = pty; to_pop.pts[0] = q; to_pop.pts[1] = k; to_pop.pts[2] = o; to_pop.pts[3] = p; to_pop.pts[4] = n; // popup_selection (view, ptx, pty, q, k, o, p, n); } } } else if (event_button == 3) { to_pop.action = 1; to_pop.x = ptx; to_pop.y = pty; // popup_main_menu (view, ptx, pty); } } Atomes-GNU-1.1.14/src/opengl/win/000077500000000000000000000000001457665371200163455ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/opengl/win/color_box.c000066400000000000000000000365251457665371200205120ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file color_box.c * @short Functions to create the color palettes for the menus of the OpenGL window \n Callbacks to set the color using the color palettes * @author Sébastien Le Roux */ /* * This file: 'color_box.c' * * Contains: * - The functions to create the color palettes for the menus of the OpenGL window - The callbacks to set the color using the color palettes * * List of functions: void get_color (ColRGBA * but, int cid); void color_box (glwin * view, int ideo, int spec, int geo); G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data); GtkWidget * color_box (glwin * view, int ideo, int spec, int geo); GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "color_box.h" #include "glview.h" /*! \fn void get_color (ColRGBA * but, int cid) \brief get color from the color palette id \param but the color to prepare \param cid the color palette id, in [0-63] */ void get_color (ColRGBA * but, int cid) { int rid = cid / 4; int bid = cid - rid*4; but -> red = (rid < 6) ? 0.0 : (rid < 11) ? 0.2 * (rid - 5) : 1.0; but -> green = (rid < 6) ? 0.2*rid : (rid < 11) ? 1.0 - 0.2 * (rid - 5) : 0.2 * (rid - 10); but -> blue = bid * 0.333; if (bid == 3) but -> blue = 1.0; } /*! \fn cairo_surface_t * col_surface (double r, double g, double b, int x, int y) \brief create a cairo sufrace painted with the appropriate color \param r red value \param g green value \param b blue value \param x surface x size \param y surface y size */ cairo_surface_t * col_surface (double r, double g, double b, int x, int y) { cairo_surface_t * cst; cairo_t * tcst; cst = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, x, y); tcst = cairo_create (cst); cairo_set_source_rgb (tcst, r, g, b); cairo_paint (tcst); cairo_destroy (tcst); return cst; } /*! \fn G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data) \brief set background color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_back_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> backcolor, col -> b); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data) \brief set box color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_box_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> box_color, col -> b); this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data) \brief set atomic species color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_at_color (GtkWidget * widg, gpointer data) { tint * col = (tint *) data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> at_color[col -> c], col -> b); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 0) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data) \brief set ring polyhedra color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rings_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[4+col -> b][0][col -> c], col -> d); int shaders[1] = {RINGS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data) \brief set total coordination color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_total_coord_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[0][col -> b][col -> c], col -> d); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 1) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data) \brief set partial coordination color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_partial_coord_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[1][col -> b][col -> c], col -> d); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 2) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data) \brief set fragment color \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_frag_mol_color (GtkWidget * widg, gpointer data) { qint * col = (qint *)data; project * this_proj = get_project_by_id(col -> a); get_color (& this_proj -> modelgl -> anim -> last -> img -> spcolor[col -> b][0][col -> c], col -> d); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == col -> b + 1) this_proj -> modelgl -> create_shaders[POLYS] = TRUE; update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn void color_box (glwin * view, int ideo, int spec, int geo) \brief create the color palette menus data pointers GTK4 \param view the target glwin \param ideo geometry id or else \param spec species or else \param geo geometry or else */ void color_box (glwin * view, int ideo, int spec, int geo) #else /*! \fn GtkWidget * color_box (glwin * view, int ideo, int spec, int geo) \brief create the color palette pointers and menus GTK3 version \param view the target glwin \param ideo geometry id or else \param spec species or else \param geo geometry or else */ GtkWidget * color_box (glwin * view, int ideo, int spec, int geo) #endif { int l, m, n, p; p = view -> proj; #ifdef GTK3 GtkWidget * but; GtkWidget * coltable; // #ifdef GTK3 coltable = gtk_menu_new (); // #else // coltable = gtk_grid_new (); // #endif ColRGBA but_col; #endif project * this_proj = get_project_by_id(p); l = 0; for (l=0; l<64; l++) { #ifdef GTK3 get_color (& but_col, l); cairo_surface_t * surface = col_surface (but_col.red, but_col.green, but_col.blue, 12, 12); // #ifdef GTK3 but = gtk3_menu_item (NULL, NULL, IMG_SURFACE, (gpointer)surface, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, FALSE); /* #else GtkWidget * but_img = create_image_from_data (IMG_SURFACE, surface); gtk_widget_show (but_img); but = gtk_button_new (); add_container_child (CONTAINER_BUT, but, but_img); gtk_button_set_has_frame ((GtkButton *)but, FALSE); gtk_widget_show (but); #endif */ cairo_surface_destroy (surface); #endif if (ideo < -2) { view -> gcid[4+spec][geo][l].a = p; view -> gcid[4+spec][geo][l].b = spec; view -> gcid[4+spec][geo][l].c = geo; view -> gcid[4+spec][geo][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_rings_color), & view -> gcid[4+spec][geo][l]); #endif } else if (ideo == -2) { #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_back_color), & view -> colorp[l][0]); #endif } else if (ideo == -1) { #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_box_color), & view -> colorp[l][0]); #endif } else if (ideo < this_proj -> nspec*2) { #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_at_color), & view -> colorp[l][ideo]); #endif } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0]) { n = ideo - 2*this_proj -> nspec; view -> gcid[0][n][l].a = p; view -> gcid[0][n][l].b = spec; view -> gcid[0][n][l].c = geo; view -> gcid[0][n][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_total_coord_color), & view -> gcid[0][n][l]); #endif } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1]) { n = ideo - 2*this_proj -> nspec - this_proj -> coord -> totcoord[0]; view -> gcid[1][n][l].a = p; view -> gcid[1][n][l].b = spec; view -> gcid[1][n][l].c = geo; view -> gcid[1][n][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_partial_coord_color), & view -> gcid[1][n][l]); #endif } else { n = ideo - 2*this_proj -> nspec; for (m= 0; m coord -> totcoord[m]; } view -> gcid[spec][n][l].a = p; view -> gcid[spec][n][l].b = spec; view -> gcid[spec][n][l].c = geo; view -> gcid[spec][n][l].d = l; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_frag_mol_color), & view -> gcid[spec][n][l]); #endif } m = l/4; #ifdef GTK3 gtk_menu_attach (GTK_MENU(coltable), but, l-m*4, l+1-m*4, m, m+1); // #else // gtk_grid_attach (GTK_GRID(coltable), but, l-m*4, m, 1, 1); #endif } #ifdef GTK3 but = create_menu_item (FALSE, "More colors ..."); gtk_menu_shell_append ((GtkMenuShell *)coltable, but); // #endif if (ideo < -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[4+spec][geo][4+spec]); } else if (ideo == -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(to_run_back_color_window), view); } else if (ideo == -1) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(to_run_box_color_window), view); } else if (ideo < this_proj -> nspec*2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(to_run_atom_color_window), & view -> colorp[0][ideo]); } else if (ideo < this_proj -> nspec*2 + this_proj -> coord -> totcoord[0]) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[0][n][0]); } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1]) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[1][n][1]); } else { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(window_color_coord), & view -> gcid[spec][n][spec]); } show_the_widgets (coltable); return coltable; #endif } #ifdef GTK4 /*! \fn GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo) \brief create the color palette menus GTK4 version \param view the target glwin \param ideo geometry id or else \param spec species or else \param geo geometry or else */ GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo) { int l, m, n, p; p = view -> proj; GtkWidget * but; GtkWidget * coltable = gtk_grid_new (); ColRGBA but_col; project * this_proj = get_project_by_id(p); l = 0; for (l=0; l<64; l++) { get_color (& but_col, l); cairo_surface_t * surface = col_surface (but_col.red, but_col.green, but_col.blue, 12, 12); GtkWidget * but_img = create_image_from_data (IMG_SURFACE, surface); gtk_widget_show (but_img); but = gtk_button_new (); add_container_child (CONTAINER_BUT, but, but_img); gtk_button_set_has_frame ((GtkButton *)but, FALSE); gtk_widget_show (but); cairo_surface_destroy (surface); if (ideo < -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_rings_color), & view -> gcid[4+spec][geo][l]); } else if (ideo == -2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_back_color), & view -> colorp[l][0]); } else if (ideo == -1) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_box_color), & view -> colorp[l][0]); } else if (ideo < this_proj -> nspec*2) { g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_at_color), & view -> colorp[l][ideo]); } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0]) { n = ideo - 2*this_proj -> nspec; g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_total_coord_color), & view -> gcid[0][n][l]); } else if (ideo < 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1]) { n = ideo - 2*this_proj -> nspec - this_proj -> coord -> totcoord[0]; g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_partial_coord_color), & view -> gcid[1][n][l]); } else { n = ideo - 2*this_proj -> nspec; for (m= 0; m coord -> totcoord[m]; } g_signal_connect (G_OBJECT (but), "activate", G_CALLBACK(set_frag_mol_color), & view -> gcid[spec][n][l]); } m = l/4; gtk_grid_attach (GTK_GRID(coltable), but, l-m*4, m, 1, 1); } show_the_widgets (coltable); return coltable; } #endif Atomes-GNU-1.1.14/src/opengl/win/color_box.h000066400000000000000000000042361457665371200205110ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file color_box.h * @short Structure definitions for color management \n Function declarations for color management * @author Sébastien Le Roux */ /* * This header file: 'color_box.h' * * Contains: - Structure definitions for color management - Function declarations for color management */ typedef struct { double red; double green; double blue; } color; extern color colorp[64]; #ifdef GTK4 extern void color_box (glwin * view, int ideo, int spec, int geo); extern G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern GtkWidget * color_box (glwin * view, int ideo, int spec, int geo); extern G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data); #endif extern G_MODULE_EXPORT void window_color_total_poly (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_color_partial_poly (GtkWidget * widg, gpointer data); Atomes-GNU-1.1.14/src/opengl/win/glwindow.c000066400000000000000000001463301457665371200203520ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file glwindow.c * @short Functions to create a project OpenGL window * @author Sébastien Le Roux */ /* * This file: 'glwindow.c' * * Contains: * - The functions to create a project OpenGL window * * List of functions: gboolean create_3d_model (int p, gboolean load); G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data); G_MODULE_EXPORT gboolean on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data); void update_all_menus (glwin * view, int nats); void menu_items_opengl (GtkWidget * menu, glwin * view, int pop); void menu_items_model (GtkWidget * menu, glwin * view, int pop); void menu_items_view (GtkWidget * menu, glwin * view, int popm); void prepare_opengl_menu_bar (glwin * view); void change_color_map (glwin * view, int col); void set_motion (glwin * view, int axis, int da, int db, gboolean UpDown, GdkModifierType state); void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view); void glwin_key_pressed (guint keyval, GdkModifierType state, gpointer data); void prep_model (int p); G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void on_win_realize (GtkWidget * widg, gpointer data); GtkWidget * prep_rings_menu (glwin * view, int id); GtkWidget * coord_menu (glwin * view); GtkWidget * menu_opengl (glwin * view, int pop); GtkWidget * menu_model (glwin * view, int pop); GtkWidget * menu_view (glwin * view, int popm); mat4_t insert_projection (glwin * view); vec3_t get_insertion_coordinates (glwin * view); */ #include "global.h" #include "project.h" #include "calc.h" #include "glview.h" #include "initcoord.h" #include "submenus.h" #include "color_box.h" extern G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_render (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); extern void set_sensitive_coord_menu (glwin * view, gboolean status); extern void set_color_map_sensitive (glwin * view); extern G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data); extern gboolean spin (gpointer data); extern G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data); extern G_MODULE_EXPORT void spin_go (GtkWidget * widg, gpointer data); extern void update_menus (glwin * view); extern G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data); extern void window_encode (glwin * view, gboolean video); extern GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln); extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); #ifdef GTK4 extern void update_menu_bar (glwin * view); extern G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern void prep_all_coord_menus (glwin * view); extern G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data); #endif extern void save_rotation_quaternion (glwin * view); extern void rotate_x_y (glwin * view, double angle_x, double angle_y); extern void translate (project * this_proj, int status, int axis, vec3_t trans); extern int selected_aspec; extern int is_selected; extern int is_labelled; extern G_MODULE_EXPORT void on_create_new_project (GtkWidget * widg, gpointer data); extern gchar * action_atoms[3]; extern int get_selection_type (glwin * view); atomic_object * copied_object = NULL; #ifdef GTK3 /*! \fn GtkWidget * prep_rings_menu (glwin * view, int id) \brief create the 'Rings' submenu GTK3 \param view the target glwin \param id atoms in ring(s) (0) or polyhedra from rings (1) */ GtkWidget * prep_rings_menu (glwin * view, int id) { if (id == 0) { return menu_rings (view, 0); } else { return menupoly (view, 0, 2, NULL); } } /*! \fn GtkWidget * coord_menu (glwin * view) \brief create the 'Coordination' submenu GTK3 \param view the target glwin */ GtkWidget * coord_menu (glwin * view) { int i, j, k; GtkWidget * widg; for (j=4; j<10; j++) { if (j<9) { if (view -> ogl_poly[0][j] != NULL) { for (k=0; k proj) -> coord -> totcoord[j]; k++) { if (view -> ogl_poly[0][j][k] != NULL) { if (GTK_IS_WIDGET(view -> ogl_poly[0][j][k])) { widg = gtk_widget_get_parent (view -> ogl_poly[0][j][k]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_poly[0][j][k]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_poly[0][j][k]); } } } } } } if (view -> ogl_geom[0][j] != NULL) { for (k=0; k proj) -> coord -> totcoord[j]; k++) { if (view -> ogl_geom[0][j][k] != NULL) { if (GTK_IS_WIDGET(view -> ogl_geom[0][j][k])) { widg = gtk_widget_get_parent (view -> ogl_geom[0][j][k]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_geom[0][j][k]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_geom[0][j][k]); } } } } } } if (view -> ogl_chains[0]) view -> ogl_chains[0] = destroy_this_widget (view -> ogl_chains[0]); for (i=0; i<2; i++) { for (j=2; j<4; j++) { detach_frag_mol_menu (view, i, j); } } for (i=1; i ogl_coord[i] = destroy_this_widget (view -> ogl_coord[i]); } for (i=0; i<2; i++) { view -> ogl_rings[i*6] = menu_item_new_with_submenu ("Ring(s)", view -> rings, prep_rings_menu (view, i*6)); } view -> ogl_chains[0] = menu_item_new_with_submenu ("Chain(s)", view -> chains, add_menu_coord (view, 0, 9)); view -> ogl_coord[1] = menu_coord (view, 0); view -> ogl_coord[2] = menu_item_new_with_submenu ("Polyhedra", TRUE, menu_poly (view, 0)); view -> ogl_coord[3] = menu_item_new_with_submenu ("Fragment(s)", get_project_by_id(view -> proj) -> coord -> totcoord[2], add_menu_coord (view, 0, 2)); view -> ogl_coord[4] = menu_item_new_with_submenu ("Molecule(s)", get_project_by_id(view -> proj) -> coord -> totcoord[3], add_menu_coord (view, 0, 3)); GtkWidget * menu = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[1]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[2]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_rings[0]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_chains[0]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[3]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_coord[4]); gtk3_menu_item (menu, "Advanced", IMG_NONE, NULL, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); // add_advanced_item (menu, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK); return menu; } #endif /*! \fn void update_all_menus (glwin * view, int nats) \brief update all menus of the OpenGL window \param view the target glwin \param nats the total number of atoms */ void update_all_menus (glwin * view, int nats) { #ifdef GTK3 int i, j, k, l; i = view -> anim -> last -> img -> style; j = (nats <= 1000) ? BALL_AND_STICK : DEFAULT_STYLE; if (i != j) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[j], FALSE); if (i != SPACEFILL) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[i], TRUE); set_style (view -> ogl_styles[i], & view -> colorp[i][0]); } else { i = view -> anim -> last -> img -> filled_type; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> filled_styles[i], TRUE); set_style (view -> filled_styles[i], & view -> colorp[OGL_STYLES+i][0]); } } i = view -> anim -> last -> img -> render; j = FILL; if (i != j) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_render[j], FALSE); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_render[i], TRUE); set_render (view -> ogl_render[i], & view -> colorp[i][0]); } update_menus (view); for (i=0; i<2; i++) { widget_set_sensitive (view -> ogl_box[i], active_cell -> ltype); if (view -> anim -> last -> img -> box_axis[i] == NONE) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[i][0], FALSE); set_box_axis_style (view -> ogl_box_axis[i][0], & view -> colorp[0][i]); } else { j = (view -> anim -> last -> img -> box_axis[i] == WIREFRAME) ? 1 : 2; k = j*j; l = (view -> anim -> last -> img -> box_axis[i] == WIREFRAME) ? CYLINDERS : WIREFRAME; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[i][0], TRUE); set_box_axis_style (view -> ogl_box_axis[i][0], & view -> colorp[0][i]); view -> anim -> last -> img -> box_axis[i] = l; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[i][j], TRUE); set_box_axis_style (view -> ogl_box_axis[i][j], & view -> colorp[k][i]); } } gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_rep[view -> anim -> last -> img -> rep], TRUE); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_rep[! view -> anim -> last -> img -> rep], FALSE); for (i=0; i<5; i++) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+i], FALSE); if (view -> anim -> last -> img -> axispos != CUSTOM) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+view -> anim -> last -> img -> axispos], TRUE); } set_advanced_bonding_menus (view); widget_set_sensitive (view -> ogl_clones[0], view -> allbonds[1]); update_rings_menus (view); update_chains_menus (view); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[0], view -> anim -> last -> img -> draw_clones); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[5], view -> anim -> last -> img -> cloned_poly); int * cmap = save_color_map (view); set_color_map_sensitive (view); if (view -> color_styles[0]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[0], TRUE); set_color_map (view -> color_styles[0], & view -> colorp[0][0]); } if (view -> color_styles[ATOM_MAPS]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[ATOM_MAPS], TRUE); set_color_map (view -> color_styles[ATOM_MAPS], & view -> colorp[ATOM_MAPS][0]); } restore_color_map (view, cmap); g_free (cmap); gtk_range_set_value (GTK_RANGE(view -> ogl_quality), view -> anim -> last -> img -> quality); #else update_menu_bar (view); #endif } /*! \fn G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data) \brief render image from the OpenGL window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; window_encode (view, FALSE); } #ifdef GTK3 /*! \fn void menu_items_opengl (GtkWidget * menu, glwin * view, int pop) \brief create the 'OpenGL' submenu items GTK3 \param menu the GtkWidget sending the signal \param view the target glwin \param pop main app (0) or popup (1) */ void menu_items_opengl (GtkWidget * menu, glwin * view, int pop) { GtkWidget * style = gtk3_menu_item (menu, "Style", IMG_FILE, (gpointer)PACKAGE_MOL, NULL, NULL, FALSE, 0, 0, FALSE, FALSE, get_project_by_id(view -> proj) -> nspec); gtk_menu_item_set_submenu ((GtkMenuItem *)style, menu_style(view, pop)); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Color Scheme(s)", get_project_by_id(view -> proj) -> nspec, menu_map(view, pop))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Render", get_project_by_id(view -> proj) -> nspec, menu_render(view, pop))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Quality", get_project_by_id(view -> proj) -> nspec, menu_quality(view, pop))); gtk3_menu_item (menu, "Material And Light(s)", IMG_NONE, NULL, G_CALLBACK(opengl_advanced), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Render Image", IMG_FILE, (gpointer)PACKAGE_IMG, G_CALLBACK(render_gl_image), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } /*! \fn GtkWidget * menu_opengl (glwin * view, int pop) \brief create the 'OpenGL' submenu GTK3 \param view the target glwin \param pop main app (0) or popup (1) */ GtkWidget * menu_opengl (glwin * view, int pop) { GtkWidget * menu = gtk_menu_new (); menu_items_opengl (menu, view, pop); return menu; } /*! \fn void menu_items_model (GtkWidget * menu, glwin * view, int pop) \brief create the 'Model' submenu items GTK3 \param menu the GtkWidget sending the signal \param view the target glwin \param pop main app (0) or popup (1) */ void menu_items_model (GtkWidget * menu, glwin * view, int pop) { if (get_project_by_id(view -> proj) -> nspec) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Atom(s)", TRUE, menu_atoms (view, pop, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Bond(s)", TRUE, menu_bonds (view, pop, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Clone(s)", TRUE, menu_clones (view, pop))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_box_axis (view, 0, 0)); } } /*! \fn GtkWidget * menu_model (glwin * view, int pop) \brief create the 'Model' submenu GTK3 \param view the target glwin \param pop main app (0) or popup (1) */ GtkWidget * menu_model (glwin * view, int pop) { GtkWidget * menu = gtk_menu_new (); menu_items_model (menu, view, pop); return menu; } /*! \fn void menu_items_view (GtkWidget * menu, glwin * view, int popm) \brief create the 'View' menu items GTK3 \param menu the GtkWidget sending the signal \param view the target glwin \param popm main app (0) or popup (1) */ void menu_items_view (GtkWidget * menu, glwin * view, int popm) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Representation", TRUE, menu_rep (view, popm))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Projection", TRUE, menu_proj (view))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Background", TRUE, menu_back (view))); if (get_project_by_id(view -> proj) -> nspec) gtk_menu_shell_append ((GtkMenuShell *)menu, menu_box_axis (view, popm, 1)); if (! popm) { add_menu_separator (menu); gtk3_menu_item (menu, "Reset view", IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_reset_view), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Center molecule", IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_center_this_molecule), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); add_menu_separator (menu); gtk3_menu_item (menu, "Fullscreen", IMG_STOCK, (gpointer)FULLSCREEN, G_CALLBACK(set_full_screen), (gpointer)view, TRUE, GDK_KEY_f, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } } /*! \fn GtkWidget * menu_view (glwin * view, int popm) \brief create the 'View' submenu GTK3 \param view the target glwin \param popm main app (0) or popup (1) */ GtkWidget * menu_view (glwin * view, int popm) { GtkWidget * menu = gtk_menu_new (); menu_items_view (menu, view, popm); return menu; } #endif /*! \fn void prepare_opengl_menu_bar (glwin * view) \brief update the OpenGL window menu bar \param view the target glwin */ void prepare_opengl_menu_bar (glwin * view) { #ifdef GTK3 view -> ogl_coord[0] = destroy_this_widget (view -> ogl_coord[0]); #endif view -> menu_bar = destroy_this_widget (view -> menu_bar); #ifdef GTK3 view -> menu_bar = gtk_menu_bar_new (); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu ("OpenGL", TRUE, menu_opengl(view, 0))); project * this_proj = get_project_by_id (view -> proj); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu ("Model", this_proj -> nspec, menu_model(view, 0))); view -> ogl_coord[0] = create_menu_item (FALSE, "Chemistry"); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, view -> ogl_coord[0]); widget_set_sensitive (view -> ogl_coord[0], this_proj -> nspec); if (this_proj -> nspec) { gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_coord[0], coord_menu (view)); } gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu ("Tools", TRUE, menu_tools(view, 0))); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_item_new_with_submenu ("View", TRUE, menu_view(view, 0))); gtk_menu_shell_append ((GtkMenuShell *)view -> menu_bar, menu_anim (view, 0)); show_the_widgets (view -> menu_bar); if (this_proj -> nspec) update_all_menus (view, this_proj -> natomes); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> menu_box, view -> menu_bar, TRUE, TRUE, 0); show_the_widgets (view -> menu_bar); #else update_menu_bar (view); #endif } /*! \fn void change_color_map (glwin * view, int col) \brief change atom / polyhedra color map \param view the target glwin \param col the color id */ void change_color_map (glwin * view, int col) { int i, j; i = ATOM_MAPS-1; if (view -> custom_map) i++; if (view -> anim -> last -> img -> color_map[col] < i-1) { if (view -> anim -> last -> img -> color_map[col] < 2) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else if (view -> anim -> last -> img -> color_map[col] == 2 && view -> adv_bonding[0]) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else if (view -> anim -> last -> img -> color_map[col] == 3 && view -> adv_bonding[1]) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else if (view -> anim -> last -> img -> color_map[col] == 4 && get_project_by_id(view -> proj) -> force_field[0]) { j = col*ATOM_MAPS + view -> anim -> last -> img -> color_map[col] + 1; } else { j = col*ATOM_MAPS + ((view -> custom_map) ? 6 : 0); } } else { j = col*ATOM_MAPS; } gboolean was_input = reading_input; reading_input = TRUE; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); set_color_map (view -> color_styles[j], & view -> colorp[j][0]); #else gchar * variant = g_strdup_printf ("set-%s.%d.0", (col) ? "pmap" : "amap", j); g_action_group_activate_action ((GActionGroup *)view -> action_group, (col) ? "set-pmap" : "set-amap", g_variant_new_string((const gchar *)variant)); g_free (variant); #endif reading_input = was_input; } /*! \fn void set_motion (glwin * view, int axis, int da, int db, gboolean UpDown, GdkModifierType state) \brief handle keyboard motion event on the OpenGL window \param view the target glwin \param axis axis \param da direction (-1/1) \param db zoom out (1) or zoom in (3) \param UpDown up or down key motion (TRUE), or else (FALSE) \param state keyboard modifier */ void set_motion (glwin * view, int axis, int da, int db, gboolean UpDown, GdkModifierType state) { if (state & GDK_CONTROL_MASK) { if (view -> mode == EDITION) { vec3_t trans; if (axis) { trans = vec3(view -> anim -> last -> img -> p_depth*(double) da / view -> pixels[axis], 0.0, 0.0); } else { trans = vec3(0.0, view -> anim -> last -> img -> p_depth*(double) da / view -> pixels[axis], 0.0); } translate (get_project_by_id(view -> proj), 1, 1, trans); init_default_shaders (view); update (view); } else if (state & GDK_SHIFT_MASK) { spin_go (NULL, & view -> colorp[db][axis]); } else { view -> anim -> last -> img -> c_shift[! axis] += (double) da / view -> pixels[axis]; if (view -> camera_widg[! axis + 5]) { if (GTK_IS_WIDGET(view -> camera_widg[! axis + 5])) { gtk_spin_button_set_value ((GtkSpinButton *)view -> camera_widg[! axis + 5], - view -> anim -> last -> img -> c_shift[! axis]); } } update (view); } } else if ((state & GDK_SHIFT_MASK) && UpDown) { if (db == 1 && view -> anim -> last -> img -> zoom > ZOOM_MAX) zoom (view, -1); if (db == 3) zoom (view, 1); update (view); } else if (state != GDK_SHIFT_MASK) { save_rotation_quaternion (view); double cameraAngle[2] = {0.0, 0.0}; cameraAngle[axis] = 0.5*da; rotate_x_y (view, cameraAngle[0], cameraAngle[1]); update (view); } } /*! \fn mat4_t insert_projection (glwin * view) \brief calculate the insertion projection matrix to insert object in the 3D window \param view the target glwin */ mat4_t insert_projection (glwin * view) { GLdouble w, h; GLdouble dw, dh; double gleft, gright, gbottom, gtop; double zoom = view -> anim -> last -> img -> zoom; zoom *= (view -> anim -> last -> img -> p_depth / view -> anim -> last -> img -> gnear); dw = view -> anim -> last -> img -> c_shift[0]*2.0*zoom; dh = view -> anim -> last -> img -> c_shift[1]*2.0*zoom; double aspect = (double)view -> pixels[0] / (double)view -> pixels[1]; if (aspect > 1.0) { w = zoom * aspect; h = zoom; } else { w = zoom; h = zoom / aspect; } gleft = -w + dw; gright = w + dw; gbottom = -h + dh; gtop = h + dh; return m4_ortho (gleft, gright, gbottom, gtop, -view -> anim -> last -> img -> gfar, view -> anim -> last -> img -> gfar); } /*! \fn vec3_t get_insertion_coordinates (glwin * view) \brief get the insertion coordinates to insert object in the 3D window \param view the target glwin */ vec3_t get_insertion_coordinates (glwin * view) { vec3_t pos; mat4_t insert_pmv_matrix; insert_pmv_matrix = m4_mul (insert_projection (view), view -> model_view_matrix); pos = vec3 (view -> mouseX, view -> mouseY, 0.75); return v3_un_project (pos, view -> view_port, insert_pmv_matrix); } /*! \fn void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view) \brief the keyboard shortcut actions for the OpenGL window \param action_string the variant string \param action_name the action name \param view the target glwin */ void activate_glwin_action (gchar * action_string, gchar * action_name, glwin * view) { GVariant * action_state = g_variant_new_string (action_string); g_action_group_activate_action ((GActionGroup *)view -> action_group, action_name, action_state); // g_variant_unref (action_state); } /*! \fn void glwin_key_pressed (guint keyval, GdkModifierType state, gpointer data) \brief the keyboard shortcut actions for the OpenGL window \param keyval the key pressed \param state the keyboard modifier \param data the associated data pointer */ void glwin_key_pressed (guint keyval, GdkModifierType state, gpointer data) { glwin * view = (glwin *)data; int i; switch (keyval) { case GDK_KEY_Escape: if (view -> fullscreen) { #ifdef GTK4 set_full_screen (NULL, NULL, view); #else set_full_screen (NULL, view); #endif } break; case GDK_KEY_Delete: if (get_project_by_id(view -> proj) -> natomes && ! is_atom_win_active(view) && get_project_by_id(view -> proj) -> steps == 1 && view -> mode == EDITION) { opengl_project_changed (view -> proj); is_selected = 1; selected_aspec = -1; #ifdef GTK4 remove_the_atoms (NULL, NULL, & cut_sel); #else remove_the_atoms (NULL, & cut_sel); #endif } break; case GDK_KEY_space: if (get_project_by_id(view -> proj) -> natomes) { if (view -> spin[0] || view -> spin[1]) { for (i=0; i<2; i++) { view -> spin[i+2] = view -> spin[i]; view -> spin_speed[i+2] = view -> spin_speed[i]; view -> spin[i] = FALSE; } } else if (view -> spin[2] || view -> spin[3]) { for (i=0; i<2; i++) { view -> spin[i] = view -> spin[i+2]; view -> spin_speed[i] = view -> spin_speed[i+2]; g_timeout_add (REFRESH, (GSourceFunc) spin, & view -> colorp[0][i]); view -> spin[i+2] = FALSE; view -> spin_speed[i+2] = 0; } } } break; case GDK_KEY_a: if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) { opengl_project_changed (view -> proj); selected_aspec = -1; i = get_selection_type (view); if (view -> anim -> last -> img -> selected[i] -> selected == opengl_project -> natomes) { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & view -> colorp[0][0]); #else select_unselect_atoms (NULL, & view -> colorp[0][0]); #endif } else { #ifdef GTK4 select_unselect_atoms (NULL, NULL, & view -> colorp[0][1]); #else select_unselect_atoms (NULL, & view -> colorp[0][1]); #endif } } #ifdef GTK4 else if (state & GDK_ALT_MASK) #else else if (state & GDK_MOD1_MASK) #endif { if (view -> mode == EDITION) { #ifdef GTK4 activate_glwin_action ("set-mouse-mode.0.0", "set-mouse-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_mode[0], TRUE); set_mode (view -> ogl_mode[0], & view -> colorp[0][0]); #endif } } else if (get_project_by_id(view -> proj) -> natomes) { change_color_map (view, 0); update (view); } break; case GDK_KEY_A: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.0.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[0], TRUE); set_selection_mode (view -> ogl_smode[0], & view -> colorp[0][0]); #endif } break; case GDK_KEY_b: if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 activate_glwin_action ("set-style.0.0", "set-style", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[BALL_AND_STICK], TRUE); set_style (view -> ogl_styles[BALL_AND_STICK], & view -> colorp[BALL_AND_STICK][0]); #endif } break; case GDK_KEY_c: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { if (view -> anim -> last -> img -> selected[0] -> selected) { opengl_project_changed (view -> proj); selected_aspec = -1; is_selected = 1; view -> nth_copy = 1; view -> insert_coords = get_insertion_coordinates (view); #ifdef GTK4 copy_the_atoms (NULL, NULL, & cut_sel); #else copy_the_atoms (NULL, & cut_sel); #endif update_insert_combos (); } else { if (copied_object) { g_free (copied_object); copied_object = NULL; } } } else { #ifdef GTK4 activate_glwin_action ("set-style.8.0", "set-style", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[CYLINDERS], TRUE); set_style (view -> ogl_styles[CYLINDERS], & view -> colorp[CYLINDERS][0]); #endif } } break; case GDK_KEY_C: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.1.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[1], TRUE); set_selection_mode (view -> ogl_smode[1], & view -> colorp[1][0]); #endif } break; case GDK_KEY_d: if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 activate_glwin_action ("set-style.9.0", "set-style", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[PUNT], TRUE); set_style (view -> ogl_styles[PUNT], & view -> colorp[PUNT][0]); #endif } break; case GDK_KEY_e: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { coord_properties (NULL, & view -> colorp[30][0]); } #ifdef GTK4 else if (state & GDK_ALT_MASK) #else else if (state & GDK_MOD1_MASK) #endif { if (view -> mode == ANALYZE && get_project_by_id(view -> proj) -> steps == 1) { #ifdef GTK4 activate_glwin_action ("set-mouse-mode.1.0", "set-mouse-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_mode[1], TRUE); set_mode (view -> ogl_mode[1], & view -> colorp[1][0]); #endif } } } break; case GDK_KEY_f: #ifdef GTK4 if (state & GDK_CONTROL_MASK) set_full_screen (NULL, NULL, view); #else if (state & GDK_CONTROL_MASK) set_full_screen (NULL, view); #endif break; case GDK_KEY_F: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.2.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[2], TRUE); set_selection_mode (view -> ogl_smode[2], & view -> colorp[2][0]); #endif } break; case GDK_KEY_i: if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 activate_glwin_action ("set-style.3.0", "set-style", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> filled_styles[1], TRUE); set_style (view -> filled_styles[1], & view -> colorp[OGL_STYLES+1][0]); #endif } break; case GDK_KEY_l: if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) { opengl_project_changed (view -> proj); selected_aspec = is_selected = -1; if (view -> labelled == opengl_project -> natomes*opengl_project -> steps) { #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & cut_lab); #else label_unlabel_atoms (NULL, & cut_lab); #endif } else { #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & cut_sel); #else label_unlabel_atoms (NULL, & cut_sel); #endif } } break; case GDK_KEY_m: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { view -> anim -> last -> img -> m_is_pressed = 0; window_measures (NULL, view); } else if (view -> anim -> last -> img -> m_is_pressed < 2) { view -> anim -> last -> img -> m_is_pressed ++; } else { view -> anim -> last -> img -> m_is_pressed = 0; } view -> create_shaders[MEASU] = TRUE; update (view); } break; case GDK_KEY_M: if (get_project_by_id(view -> proj) -> natomes) { // selection mode to coordination sphere #ifdef GTK4 activate_glwin_action ("set-sel-mode.3.0", "set-sel-mode", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_smode[3], TRUE); set_selection_mode (view -> ogl_smode[3], & view -> colorp[3][0]); #endif } break; case GDK_KEY_n: if (state & GDK_CONTROL_MASK) on_create_new_project (NULL, NULL); break; case GDK_KEY_o: if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 activate_glwin_action ("set-style.2.0", "set-style", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> filled_styles[0], TRUE); set_style (view -> filled_styles[0], & view -> colorp[OGL_STYLES][0]); #endif } break; case GDK_KEY_p: if (get_project_by_id(view -> proj) -> natomes) change_color_map (view, 1); break; case GDK_KEY_r: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { window_recorder (NULL, (gpointer)view); } else { #ifdef GTK4 activate_glwin_action ("set-style.5.0", "set-style", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> filled_styles[3], TRUE); set_style (view -> filled_styles[3], & view -> colorp[OGL_STYLES+3][0]); #endif } } break; if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) window_recorder (NULL, (gpointer)view); break; case GDK_KEY_s: if (get_project_by_id(view -> proj) -> natomes) { if (state & GDK_CONTROL_MASK) { spin_stop (NULL, data); } else { #ifdef GTK4 activate_glwin_action ("set-style.7.0", "set-style", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[SPHERES], TRUE); set_style (view -> ogl_styles[SPHERES], & view -> colorp[SPHERES][0]); #endif } } break; case GDK_KEY_v: if (state & GDK_CONTROL_MASK) { if (copied_object && ! is_atom_win_active(view) && get_project_by_id(view -> proj) -> steps == 1 && view -> mode == EDITION) { //i = (! get_project_by_id(view -> proj) -> natomes) ? 1 : 0; opengl_project_changed (view -> proj); #ifdef GTK4 add_object (NULL, NULL, & view -> colorp[0][0]); #else add_object (NULL, & view -> colorp[0][0]); #endif view -> nth_copy ++; /*if (i) { i = activep; active_project_changed (view -> proj); frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; bonds_update = 1; on_calc_bonds_released (NULL, NULL); active_project_changed (i); }*/ } } else if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 activate_glwin_action ("set-style.4.0", "set-style", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> filled_styles[2], TRUE); set_style (view -> filled_styles[2], & view -> colorp[OGL_STYLES+2][0]); #endif } break; case GDK_KEY_w: if (get_project_by_id(view -> proj) -> natomes) { #ifdef GTK4 activate_glwin_action ("set-style.1.0", "set-style", view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_styles[WIREFRAME], TRUE); set_style (view -> ogl_styles[WIREFRAME], & view -> colorp[WIREFRAME][0]); #endif } break; case GDK_KEY_x: if ((state & GDK_CONTROL_MASK) && get_project_by_id(view -> proj) -> natomes) { if (! is_atom_win_active(view) && get_project_by_id(view -> proj) -> steps == 1 && view -> mode == EDITION) { if (view -> anim -> last -> img -> selected[0] -> selected) { opengl_project_changed (view -> proj); selected_aspec = -1; is_selected = 1; #ifdef GTK4 copy_the_atoms (NULL, NULL, & cut_sel); remove_the_atoms (NULL, NULL, & cut_sel); #else copy_the_atoms (NULL, & cut_sel); remove_the_atoms (NULL, & cut_sel); #endif } } } break; case GDK_KEY_Right: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 1, 1, 1, FALSE, state); break; case GDK_KEY_Left: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 1, -1, 3, FALSE, state); break; case GDK_KEY_Up: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 0, 1, 3, TRUE, state); break; case GDK_KEY_Down: if (get_project_by_id(view -> proj) -> natomes) set_motion (view, 0, -1, 1, TRUE, state); break; } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) \brief keyboard key press event for the OpenGL window GTK3 \param widg the GtkWidget sending the signal \param event the GdkEventKey triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_key_pressed (GtkWidget * widg, GdkEventKey * event, gpointer data) { if (event -> type == GDK_KEY_PRESS) { glwin_key_pressed (event -> keyval, event -> state, data); } return FALSE; } #else /*! \fn G_MODULE_EXPORT gboolean on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) \brief keyboard key press event for the OpenGL window GTK4 \param self the GtkEventControllerKey sending the signal \param keyval number of times it was pressed \param keycode the key pressed \param state the keyboard modifier \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_glwin_key_pressed (GtkEventControllerKey * self, guint keyval, guint keycode, GdkModifierType state, gpointer data) { glwin_key_pressed (keyval, state, data); return TRUE; } #endif /*! \fn G_MODULE_EXPORT void on_win_realize (GtkWidget * widg, gpointer data) \brief realize event for the OpenGL window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_win_realize (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; int * pix = get_project_by_id(view -> proj) -> tmp_pixels; int shift = 0; if (GTK_IS_WIDGET(view -> menu_bar)) shift = gtk_widget_get_allocated_height (view -> menu_bar); if (pix[0] > 0 && pix[1] > 0) { resize_this_window (view -> win, pix[0], pix[1]+shift); pix[0] = pix[1] = -1; } else { resize_this_window (view -> win, 500, 500); } } #ifdef GTK3 #ifndef G_OS_WIN32 /*! \fn void gtk_window_change_gdk_visual (GtkWidget * win) \brief change the Gdk visual \param win the GtkWidget sending the signal */ void gtk_window_change_gdk_visual (GtkWidget * win) { // GTK+ > 3.15.1 uses an X11 visual optimized for GTK+'s OpenGL stuff // since revid dae447728d: https://github.com/GNOME/gtk/commit/dae447728d // However, in some cases it simply cannot start an OpenGL context. // This changes to the default X11 visual instead the GTK's default. GdkScreen * screen = gdk_screen_get_default (); GList * visuals = gdk_screen_list_visuals (screen); // printf("n visuals: %u\n", g_list_length(visuals)); GdkX11Screen* x11_screen = GDK_X11_SCREEN (screen); g_assert (x11_screen != NULL); Visual * default_xvisual = DefaultVisual (GDK_SCREEN_XDISPLAY(x11_screen), GDK_SCREEN_XNUMBER(x11_screen)); GdkVisual * default_visual = NULL; // int i = 0; while (visuals != NULL) { GdkVisual * visual = GDK_X11_VISUAL (visuals -> data); if (default_xvisual -> visualid == gdk_x11_visual_get_xvisual(GDK_X11_VISUAL (visuals -> data)) -> visualid) { // printf("Default visual %d\n", i); default_visual = visual; } // i++; visuals = visuals -> next; } gtk_widget_set_visual (win, default_visual); } #endif #endif gboolean create_3d_model (int p, gboolean load) { project * this_proj = get_project_by_id (p); #ifndef GTKGLAREA if (! glXQueryExtension (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), NULL, NULL)) { g_warning ("Sorry OpenGL is not supported !"); return FALSE; } else #endif { if (this_proj -> modelgl) { g_free (this_proj -> modelgl); this_proj -> modelgl = NULL; } this_proj -> modelgl = g_malloc0 (sizeof*this_proj -> modelgl); this_proj -> modelgl -> init = FALSE; this_proj -> modelgl -> proj = this_proj -> id; GtkWidget * gl_vbox; if (load) { gchar * str = g_strdup_printf ("%s - 3D view - [%s mode]", this_proj -> name, mode_name[0]); this_proj -> modelgl -> win = create_win (str, MainWindow, FALSE, TRUE); #ifdef GTK3 #ifdef GTKGLAREA #ifndef G_OS_WIN32 if (! atomes_visual) gtk_window_change_gdk_visual (this_proj -> modelgl -> win); #endif #endif #endif // this_proj -> modelgl -> accel_group = gtk_accel_group_new (); // gtk_window_add_accel_group (GTK_WINDOW (this_proj -> modelgl -> win), this_proj -> modelgl -> accel_group); g_free (str); gl_vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, this_proj -> modelgl -> win, gl_vbox); this_proj -> modelgl -> menu_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, gl_vbox, this_proj -> modelgl -> menu_box, FALSE, FALSE, 0); #ifdef GTK3 this_proj -> modelgl -> menu_bar = gtk_menu_bar_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, this_proj -> modelgl -> menu_box, this_proj -> modelgl -> menu_bar, TRUE, TRUE, 0); #endif } #ifdef GTKGLAREA this_proj -> modelgl -> plot = gtk_gl_area_new (); #else this_proj -> modelgl -> plot = gtk_drawing_area_new (); #endif gtk_widget_set_size_request (this_proj -> modelgl -> plot, 100, 100); #ifndef GTKGLAREA gtk_widget_set_double_buffered (this_proj -> modelgl -> plot, FALSE); this_proj -> modelgl -> glcontext = NULL; #endif gtk_widget_set_hexpand (this_proj -> modelgl -> plot, TRUE); gtk_widget_set_vexpand (this_proj -> modelgl -> plot, TRUE); #ifdef GTKGLAREA #ifdef GTK3 gtk_widget_add_events (GTK_WIDGET (this_proj -> modelgl -> plot), GDK_SCROLL_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); #endif #else gtk_widget_add_events (GTK_WIDGET (this_proj -> modelgl -> plot), GDK_SMOOTH_SCROLL_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK); #endif #ifdef GTK4 if (load) { add_widget_gesture_and_key_action (this_proj -> modelgl -> win, NULL, NULL, NULL, NULL, NULL, NULL, "glwin-key-pressed", G_CALLBACK(on_glwin_key_pressed), this_proj -> modelgl, NULL, NULL, NULL, NULL, NULL, NULL); add_widget_gesture_and_key_action (this_proj -> modelgl -> plot, "glwin-button-pressed", G_CALLBACK(on_glwin_button_pressed), this_proj -> modelgl, "glwin-button-released", G_CALLBACK(on_glwin_button_released), this_proj -> modelgl, NULL, NULL, NULL, "glwin-pointer-motion", G_CALLBACK(on_glwin_pointer_motion), this_proj -> modelgl, "glwin-pointer-scroll", G_CALLBACK(on_glwin_pointer_scoll), this_proj -> modelgl); } else { add_widget_gesture_and_key_action (this_proj -> modelgl -> plot, "glwin-button-pressed", G_CALLBACK(on_lib_button_pressed), this_proj -> modelgl, "glwin-button-released", G_CALLBACK(on_lib_button_released), this_proj -> modelgl, NULL, NULL, NULL, "glwin-pointer-motion", G_CALLBACK(on_glwin_pointer_motion), this_proj -> modelgl, NULL, NULL, NULL); } // add_window_gesture_action (window, "opengl-context-click", "pressed", G_CALLBACK(on_pressed_gl), NULL); #else g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "motion-notify-event", G_CALLBACK(on_motion), this_proj -> modelgl); g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "button-release-event", G_CALLBACK(on_glwin_button_event), this_proj -> modelgl); if (load) { g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "button-press-event", G_CALLBACK(on_glwin_button_event), this_proj -> modelgl); g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "scroll-event", G_CALLBACK(on_scrolled), this_proj -> modelgl); } else { g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "button-press-event", G_CALLBACK(on_lib_pressed), this_proj -> modelgl); } #endif if (load) { add_box_child_start (GTK_ORIENTATION_VERTICAL, gl_vbox, this_proj -> modelgl -> plot, FALSE, TRUE, 0); #ifdef GTK3 g_signal_connect (G_OBJECT (this_proj -> modelgl -> win), "key-press-event", G_CALLBACK(on_key_pressed), this_proj -> modelgl); #endif g_signal_connect (G_OBJECT (this_proj -> modelgl -> win), "realize", G_CALLBACK(on_win_realize), this_proj -> modelgl); add_gtk_close_event (this_proj -> modelgl -> win, G_CALLBACK(hide_this_window), NULL); } g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "realize", G_CALLBACK(on_realize), this_proj -> modelgl); #ifdef GTKGLAREA g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "render", G_CALLBACK(on_expose), this_proj -> modelgl); #else g_signal_connect (G_OBJECT (this_proj -> modelgl -> plot), "draw", G_CALLBACK(on_expose), this_proj -> modelgl); #endif return TRUE; } } /*! \fn void prep_model (int p) \brief prepare, or display, the OpenGL model window \param p the project id */ void prep_model (int p) { project * this_proj = get_project_by_id (p); gboolean rendering = FALSE; gboolean adv_bonding[2]; if (this_proj -> modelgl == NULL) { if (create_3d_model (p, TRUE)) { /*GtkWidget * dummy = create_menu_item (FALSE, "Dummy"); gtk_menu_shell_append ((GtkMenuShell *)this_proj -> modelgl -> menu_bar, dummy); show_the_widgets (this_proj -> modelgl -> win); destroy_this_widget (dummy);*/ show_the_widgets (this_proj -> modelgl -> win); #ifdef GTK3 #ifdef GTKGLAREA #ifndef G_OS_WIN32 if (atomes_visual == 0 && ! this_proj -> initgl) { this_proj -> modelgl -> plot = destroy_this_widget (this_proj -> modelgl -> plot); this_proj -> modelgl -> menu_bar = destroy_this_widget (this_proj -> modelgl -> menu_bar); this_proj -> modelgl -> win = destroy_this_widget (this_proj -> modelgl -> win); create_3d_model (p, TRUE); show_the_widgets (this_proj -> modelgl -> win); } #endif // G_OS_WIN32 #endif // GTKGLAREA #endif // GTK3 if (atomes_visual < 0) { this_proj -> modelgl -> plot = destroy_this_widget (this_proj -> modelgl -> plot); this_proj -> modelgl -> menu_bar = destroy_this_widget (this_proj -> modelgl -> menu_bar); this_proj -> modelgl -> win = destroy_this_widget (this_proj -> modelgl -> win); } else { rendering = TRUE; } } if (rendering) { if (this_proj -> initgl) { active_project_changed (p); #ifdef GTK3 // GTK3 Menu Action To Check active_glwin -> ogl_box_axis[0] = g_malloc0 (OGL_BOX*sizeof*active_glwin -> ogl_box_axis[0]); active_glwin -> ogl_box_axis[1] = g_malloc0 (OGL_AXIS*sizeof*active_glwin -> ogl_box_axis[1]); #endif prepare_opengl_menu_bar (active_glwin); if (reading_input) { adv_bonding[0] = (active_project -> natomes > ATOM_LIMIT) ? 0 : tmp_adv_bonding[0]; adv_bonding[1] = (active_project -> steps > STEP_LIMIT) ? 0 : tmp_adv_bonding[1]; frag_update = (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; } else { frag_update = (force_mol) ? 1 : (active_project -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (force_mol) ? 1 : (frag_update) ? ((active_project -> steps > STEP_LIMIT) ? 0 : 1) : 0; adv_bonding[0] = adv_bonding[1] = TRUE; } if (active_project -> natomes && adv_bonding[0] && adv_bonding[1]) { bonds_update = 1; active_project -> runc[0] = FALSE; on_calc_bonds_released (NULL, NULL); } } } } else { if (gtk_widget_get_visible(this_proj -> modelgl -> win)) { gtk_widget_hide (this_proj -> modelgl -> win); } else { gtk_widget_show (this_proj -> modelgl -> win); } } } Atomes-GNU-1.1.14/src/opengl/win/glwindow.h000066400000000000000000000031331457665371200203500ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file glwindow.h * @short Function declarations for the creation of the OpenGL window * @author Sébastien Le Roux */ /* * This header file: 'glwindow.h' * * Contains: - Function declarations for the creation of the OpenGL window */ extern void prep_model (int p); extern void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive); #ifdef GTK4 extern G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data); #endif Atomes-GNU-1.1.14/src/opengl/win/initchain.c000066400000000000000000000060211457665371200204560ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file initchain.c * @short Functions collecting chain(s) data from Fortran90 \n Functions allocating chain(s) data from Fortran90 * @author Sébastien Le Roux */ /* * This file: 'initchain.c' * * Contains: * - The functions collecting chain(s) data from Fortran90 - The functions allocating chain(s) data from Fortran90 * * List of functions: void send_chains_opengl_ (int * st, int * ta, int * ri, int nchain[* ta]); void send_atom_chains_id_opengl_ (int * st, int * at, int * ta, int * num, int nchain[* num]); void allocate_all_chains_ (int * st, int * ta, int * nring); */ #include "global.h" #include "interface.h" #include "bind.h" #include "color_box.h" #include "glwindow.h" /*! \fn void send_chains_opengl_ (int * st, int * ta, int * ri, int nchain[* ta]) \brief getting the chain data elemnts from Fortran90 \param st the MD step \param ta the chain size \param ri the chain id \param nchain the chain element(s) */ void send_chains_opengl_ (int * st, int * ta, int * ri, int nchain[* ta]) { int i; for (i=0; i< * ta; i++) { active_glwin -> all_chains[* st][* ta - 1][* ri][i] = nchain[i] - 1; } } /*! \fn void send_atom_chains_id_opengl_ (int * st, int * at, int * ta, int * num, int nchain[*num]) \brief allocate atom chains data from Fortran90 information \param st the MD step \param at the atom id \param ta the chain size \param num the number of chain(s) \param nchain the chain id(s) */ void send_atom_chains_id_opengl_ (int * st, int * at, int * ta, int * num, int nchain[* num]) { if (nchain != NULL) { int i; active_project -> atoms[* st][* at].chain[* ta - 1] = allocint(* num + 1); active_project -> atoms[* st][* at].chain[* ta - 1][0] = * num; for (i=0; i < * num; i++) { active_project -> atoms[* st][* at].chain[* ta - 1][i+1] = nchain[i] - 1; } } } /*! \fn void allocate_all_chains_ (int * st, int * ta, int * nring) \brief allocate chains data from Fortran90 information \param st the MD step \param ta the number of chain size(s) \param nring the number of chain(s) of that size */ void allocate_all_chains_ (int * st, int * ta, int * nring) { active_glwin -> all_chains[* st][* ta - 1] = allocdint (* nring, * ta); active_glwin -> num_chains[* st][* ta - 1] = * nring; } Atomes-GNU-1.1.14/src/opengl/win/initcoord.c000066400000000000000000000551611457665371200205130ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file initcoord.c * @short Coordinations and polyhedra menus initialization \n Coordinations and polyhedra GTK3 menus and menu items creation \n Initialization of coordinations and polyhedra related data from Fortran90 information * @author Sébastien Le Roux */ /* * This file: 'initcoord.c' * * Contains: * - Coordinations and polyhedra menu initialization - Coordinations and polyhedra GTK3 menus and menu items creation - Initialization of coordinations and polyhedra related data from Fortran90 information * * List of functions: void gcid_spcolor_setup (int sp, int id); void set_color_map_sensitive (glwin * view); void set_advanced_bonding_menus (glwin * view); void prep_all_coord_menus (glwin * view); void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]); void allocate_partial_geo_ (int * sp, int * ngsp); void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[* ngsp]); void init_menu_fragmol_ (int * id); void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[* ngsp], int * init); void init_opengl_coords (int id, int nt, int init); void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[* num]); GtkWidget * coord_view_setup (int * sp, int id, int jd); GtkWidget * coord_color_setup (int * sp, int id, int jd); GtkWidget * poly_show_setup (int * sp, int id, int jd); GtkWidget * create_coord_menu (int p, char * name, gboolean va, GtkWidget * menu, qint * data); ColRGBA init_color (int id, int numid); */ #include "global.h" #include "interface.h" #include "bind.h" #include "color_box.h" #include "glwindow.h" #include "glview.h" extern GtkWidget * coord_menu (glwin * view); extern cairo_surface_t * col_surface (double r, double g, double b, int x, int y); extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); extern void setup_molecules (); extern int * duplicate_int (int num, int * old_val); int ** idgeo = NULL; /*! \fn ColRGBA init_color (int id, int numid) \brief initialize color based id number over total number of elements \param id the id number \param numid the total number of elements */ ColRGBA init_color (int id, int numid) { float a, b; ColRGBA col; if (numid > 5) { a = (float)id; b = (float)numid / 4.0; if (a < b) { col.red = 1.0; col.green = a / b; col.blue = 0.0; } else if (a < 2*b) { col.red = 1.0 - (1.0 * (a-b)/b); col.green = 1.0; col.blue = 0.0; } else if (a < 3*b) { col.red = 0.0; col.green = 1.0; col.blue = (1.0 * (a-2.0*b)/b); } else { col.red = 0.0; col.green = 1.0 - (1.0 * (a-3.0*b)/b); col.blue = 1.0; } col.alpha = 1.0; } else { col = std[id]; col.alpha = 1.0; } return col; } /*! \fn void gcid_spcolor_setup (int sp, int id) \brief prepare color pointers \param sp the chemical species \param id the coordination id */ void gcid_spcolor_setup (int sp, int id) { int i; if (active_glwin -> gcid[id] == NULL) { active_glwin -> gcid[id] = g_malloc0 (active_coord -> totcoord[id]*sizeof*active_glwin -> gcid[id]); for (i=0; i totcoord[id]; i++) { active_glwin -> gcid[id][i] = g_malloc0 (64*sizeof*active_glwin -> gcid[id][i]); } } active_image -> spcolor[id][sp] = g_malloc0 (active_coord -> totcoord[id]*sizeof*active_image -> spcolor[id][sp]); } #ifdef GTK3 // GTK3 Menu Action To Check /*! \fn void set_color_map_sensitive (glwin * view) \brief set color map menu items sensitivity GTK3 \param view the target glwin */ void set_color_map_sensitive (glwin * view) { int i, j; for (i=0; i color_styles[i], 1); if (j == 3) widget_set_sensitive (view -> color_styles[i], view -> adv_bonding[0]); if (j == 4) widget_set_sensitive (view -> color_styles[i], view -> adv_bonding[1]); if (j == 5) widget_set_sensitive (view -> color_styles[i], (get_project_by_id(view -> proj) -> force_field[0]) ? 1 : 0); if (j == 6) widget_set_sensitive (view -> color_styles[i], (! (i/ATOM_MAPS) || view -> custom_map) ? 1 : 0); } } /*! \fn void set_advanced_bonding_menus (glwin * view) \brief set sensitivity of advanced bonding menus GTK3 \param view the target glwin */ void set_advanced_bonding_menus (glwin * view) { int i; for (i=0; i<2; i++) { widget_set_sensitive (view -> ogl_smode[2*i+2], view -> adv_bonding[0]); widget_set_sensitive (view -> ogl_smode[2*i+3], view -> adv_bonding[1]); widget_set_sensitive (view -> ogl_mode[2+i+NINPUTS], view -> adv_bonding[1]); } } /*! \fn void prep_all_coord_menus (glwin * view) \brief prepare coordination menus GTK3 \param view the target glwin */ void prep_all_coord_menus (glwin * view) { // GTK3 Menu Action To Check set_color_map_sensitive (view); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_coord[0], coord_menu (view)); widget_set_sensitive (view -> ogl_coord[3], view -> adv_bonding[0]); widget_set_sensitive (view -> ogl_coord[4], view -> adv_bonding[1]); show_the_widgets (view -> ogl_coord[0]); set_advanced_bonding_menus (view); } /*! \fn GtkWidget * coord_view_setup (int * sp, int id, int jd) \brief create coordination menu elements GTK3 \param sp the chemical species \param id the coordination (0=total, 1=partial, >1 rings) \param jd pop menu or main app menu */ GtkWidget * coord_view_setup (int * sp, int id, int jd) { GtkWidget * menuv = gtk_menu_new (); if (id < 2) { active_glwin -> oglmv[jd][id][* sp] = NULL; active_glwin -> oglmv[jd][id][* sp] = create_menu_item (TRUE, active_chem -> label[* sp]); gtk_menu_item_set_submenu ((GtkMenuItem *)active_glwin -> oglmv[jd][id][* sp], menuv); } return menuv; } /*! \fn GtkWidget * coord_color_setup (int * sp, int id, int jd) \brief create coordination color menu elements GTK3 \param sp the chemical species \param id the coordination (0=total, 1=partial, >1 rings) \param jd pop menu or main app menu */ GtkWidget * coord_color_setup (int * sp, int id, int jd) { if (! jd) gcid_spcolor_setup (* sp, id); GtkWidget * menuc = NULL; menuc = gtk_menu_new (); if (id < 2) { active_glwin -> oglmc[jd][id][* sp] = NULL; active_glwin -> oglmc[jd][id][* sp] = create_menu_item (TRUE, active_chem -> label[* sp]); gtk_menu_item_set_submenu ((GtkMenuItem *)active_glwin -> oglmc[jd][id][* sp], menuc); } return menuc; } /*! \fn GtkWidget * poly_show_setup (int * sp, int id, int jd) \brief create polyhedra menu item elements GTK3 \param sp the chemical species \param id the coordination (0=total, 1=partial, >1 rings) \param jd pop menu or main app menu */ GtkWidget * poly_show_setup (int * sp, int id, int jd) { GtkWidget * menup = gtk_menu_new (); active_glwin -> oglmpv[jd][id][* sp] = NULL; if (id < 2) { active_glwin -> oglmpv[jd][id][* sp] = create_menu_item (TRUE, active_chem -> label[* sp]); } else { active_glwin -> oglmpv[jd][id][* sp] = create_menu_item (TRUE, "_Show/Hide"); } gtk_menu_item_set_submenu ((GtkMenuItem *)active_glwin -> oglmpv[jd][id][* sp], menup); return menup; } /*! \fn GtkWidget * create_coord_menu (int p, char * name, gboolean va, GtkWidget * menu, qint * data) \brief create coordination/polyhedra menu widget GTK3 \param p coordination (0), or polyhedra (1) \param name text of the menu item \param va status, coordination or polyhedra visible or not (1/0) \param menu the GtkWidget menu to attach the menu item to \param data the associated data pointer */ GtkWidget * create_coord_menu (int p, char * name, gboolean va, GtkWidget * menu, qint * data) { GtkWidget * coord_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, NULL, NULL, FALSE, 0, 0, TRUE, FALSE, va); if (p == 0) { g_signal_connect (G_OBJECT (coord_widget), "activate", G_CALLBACK(show_hide_coord), data); } else { g_signal_connect (G_OBJECT (coord_widget), "activate", G_CALLBACK(show_hide_poly), data); } return coord_widget; } #endif /*! \fn void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]) \brief partial coordination data from Fortran90 \param sp the chemical species \param id the partial coordination id \param ngsp the number of chemical species \param coord the list of partial coordination(s) for that chemical species and coordination id */ void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]) { active_coord -> partial_geo[* sp][* id] = duplicate_int (* ngsp, coord); } /*! \fn void allocate_partial_geo_ (int * sp, int * ngsp) \brief allocate partial coordination(s) data \param sp the chemical species \param ngsp the number of distinct coordination(s) for that chemical species */ void allocate_partial_geo_ (int * sp, int * ngsp) { if (active_coord -> partial_geo[* sp] != NULL) { g_free (active_coord -> partial_geo[* sp]); active_coord -> partial_geo[* sp] = NULL; } active_coord -> partial_geo[* sp] = g_malloc (* ngsp * sizeof*active_coord -> partial_geo[* sp]); } /*! \fn void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[*ngsp]) \brief getting atomic coordinations data from Fortran90, and related GTK3 menu elements creation \param id 0 for total coordination(s), 1 for partial coordination(s) \param sp the chemical species \param ngsp the number of distinct coordination(s) for that chemical species \param coordt the list of coordination(s) for that chemical species */ void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[* ngsp]) { int i, j, k, l, m, n, o; #ifdef GTK3 // GTK3 Menu Action To Check gchar * str; GtkWidget * spm; GtkWidget * menupv; GtkWidget * menuc; GtkWidget * menuv; #endif i = 0; for (j=0; j < * sp; j++) { i += active_coord -> ntg[* id][j]; } j = 2*active_project -> nspec; for (l=0; l < * id; l++) { j += active_coord -> totcoord[l]; } k = i + j; if (active_coord -> geolist[* id][* sp] != NULL) { g_free (active_coord -> geolist[* id][* sp]); active_coord -> geolist[* id][* sp] = NULL; } active_coord -> geolist[* id][* sp] = duplicate_int (* ngsp, coordt); active_coord -> ntg[* id][* sp] = * ngsp; l = 0; for (m=0; m < * ngsp; m++) { if (* id) { n = 0; for (o=0; o nspec; o++) { n += active_coord -> partial_geo[* sp][m][o]; } } else { n = coordt[m]; } if (n > 2) { l ++; active_image -> show_poly[* id][m+i] = TRUE; } else { active_image -> show_poly[* id][m+i] = FALSE; } } #ifdef GTK4 gcid_spcolor_setup (* sp, * id); for (m=0; m < * ngsp; m++) { active_image -> show_coord[* id][m+i] = TRUE; active_coord -> geolist[* id][* sp][m] = coordt[m]; if (* id) { active_image -> spcolor[* id][* sp][m] = init_color (m+i, active_coord -> totcoord[* id]); } else { active_image -> spcolor[* id][* sp][m] = init_color (coordt[m]-active_coord -> cmin, active_coord -> cmax-active_coord -> cmin); } active_image -> show_poly[* id][m+i] = FALSE; active_image -> spcolor[* id][* sp][m].alpha = DEFAULT_ALPHA; color_box (active_glwin, k+m, * sp, m); } #else // GTK3 Menu Action To Check for (m=0; m<2; m++) { menuc = coord_color_setup (sp, * id, m); menuv = coord_view_setup (sp, * id, m); if (l > 0) { menupv = poly_show_setup (sp, * id, m); } else { active_glwin -> oglmpv[m][* id][* sp] = NULL; } for (n=0; n < * ngsp; n++) { if (* id) { str = exact_name(env_name (active_project, n, * sp, 1, NULL)); spm = create_menu_item_from_widget (markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); } else { str = g_strdup_printf ("%d", coordt[n]); spm = create_menu_item (TRUE, str); } if (! m) { active_image -> show_coord[* id][n+i] = TRUE; active_coord -> geolist[* id][* sp][n] = coordt[n]; if (* id) { active_image -> spcolor[* id][* sp][n] = init_color (n+i, active_coord -> totcoord[* id]); } else { active_image -> spcolor[* id][* sp][n] = init_color (coordt[n]-active_coord -> cmin, active_coord -> cmax-active_coord -> cmin); } active_image -> spcolor[* id][* sp][n].alpha = DEFAULT_ALPHA; } active_glwin -> ogl_geom[m][* id][n+i] = create_coord_menu (0, str, TRUE, menuv, & active_glwin -> gcid[* id][n+i][* id]); gtk_menu_shell_append ((GtkMenuShell *)menuc, spm); gtk_menu_item_set_submenu ((GtkMenuItem *)spm, color_box (active_glwin, k+n, * sp, n)); if (active_image -> show_poly[* id][n+i]) { // The polyhedra show/hide menu active_glwin -> ogl_poly[m][* id][n+i] = create_coord_menu (1, str, FALSE, menupv, & active_glwin -> gcid[* id][n+i][* id]); if (m) active_image -> show_poly[* id][n+i] = FALSE; } g_free (str); } } #endif } /*! \fn void init_menu_fragmol_ (int * id) \brief getting fragment(s)/molecule(s) data from Fortran90, and related GTK3 menu elements creation \param id 2 for fragments, 3 for molecules */ void init_menu_fragmol_ (int * id) { #ifdef DEBUG gchar * keyw[2] = {"fragment(s)", "molecule(s)"}; if (active_project -> steps > 1) { gchar * str = g_strdup_printf ("Maximum number of %s per MD step: %d", keyw[* id -2], active_coord -> totcoord[* id]); g_debug ("%s", str); } #endif // DEBUG if (* id == 3) { active_image -> show_coord[3] = allocbool (active_coord -> totcoord[3]); #ifdef GTK3 // GTK3 Menu Action To Check if (active_coord -> totcoord[3] <= COORD_MAX_MENU) { active_glwin -> ogl_geom[0][3] = g_malloc (active_coord -> totcoord[3]*sizeof*active_glwin -> ogl_geom[0][3]); active_glwin -> ogl_geom[1][3] = g_malloc (active_coord -> totcoord[3]*sizeof*active_glwin -> ogl_geom[1][3]); } #endif } int i, j; j = 2 * active_project -> nspec; for (i=0; i < * id; i++) { j += active_coord -> totcoord[i]; } #ifdef GTK4 gcid_spcolor_setup (0, * id); for (i=0; i < active_coord -> totcoord[* id]; i++) { color_box (active_glwin, j+i, * id, i); active_image -> spcolor[* id][0][i] = init_color (i, active_coord -> totcoord[* id]); active_image -> spcolor[* id][0][i].alpha = DEFAULT_ALPHA; active_image -> show_coord[* id][i] = TRUE; } #else int k; gchar * str; GtkWidget * spm; for (k=0; k<2; k++) { i = 0; active_glwin -> oglmv[k][* id][0] = coord_view_setup (& i, * id, k); active_glwin -> oglmc[k][* id][0] = coord_color_setup (& i, * id, k); if (! k) g_debug ("active_project -> name= %s, id= %d, totcoord[%d]= %d", active_project -> name, * id, * id, active_coord -> totcoord[* id]); for (i=0; i < active_coord -> totcoord[* id]; i++) { if (! k) active_image -> show_coord[* id][i] = TRUE; if (active_coord -> totcoord[* id] <= COORD_MAX_MENU) { if (* id == 2) { str = g_strdup_printf ("Fragment N°%d", i+1); } else { str = g_strdup_printf ("Molecule N°%d", i+1); } active_glwin -> ogl_geom[k][* id][i] = create_coord_menu (0, str, TRUE, active_glwin -> oglmv[k][* id][0], & active_glwin -> gcid[* id][i][* id]); spm = create_menu_item (TRUE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)active_glwin -> oglmc[k][* id][0], spm); gtk_menu_item_set_submenu ((GtkMenuItem *)spm, color_box (active_glwin, j+i, * id, i)); } else { active_glwin -> gcid[* id][i][* id].a = active_glwin -> proj; active_glwin -> gcid[* id][i][* id].b = * id; active_glwin -> gcid[* id][i][* id].c = i; active_glwin -> gcid[* id][i][* id].d = * id; } active_image -> spcolor[* id][0][i] = init_color (i, active_coord -> totcoord[* id]); active_image -> spcolor[* id][0][i].alpha = DEFAULT_ALPHA; } } #endif } /*! \fn void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[*ngsp], int * init) \brief getting rings statistics data from Fortran90, and related GTK3 menu elements creation \param coo the coord type \param ids the ring(s) type in [0-4], or 0 for the chains \param ngsp the total number of distinct ring size(s) \param coordt the list of ring size(s) with rings \param init initialize some visual information (1/0) */ void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[* ngsp], int * init) { int j; if (active_coord -> geolist[* coo][0] != NULL) { g_free (active_coord -> geolist[* coo][0]); active_coord -> geolist[* coo][0] = NULL; } active_coord -> geolist[* coo][0] = allocint (* ngsp); #ifdef GTK4 gcid_spcolor_setup (0, * coo); for ( j=0 ; j < * ngsp ; j++ ) { active_coord -> geolist[* coo][0][j] = coordt[j]; active_image -> show_coord[* coo][j] = TRUE; if ( * coo < 9) { color_box (active_glwin, -3, * ids, j); if (* init) active_image -> show_poly[* coo][j] = FALSE; active_image -> spcolor[* coo][0][j] = init_color (coordt[j]-3, active_glwin -> ring_max[* ids]); active_image -> spcolor[* coo][0][j].alpha = DEFAULT_ALPHA; } else { active_glwin -> gcid[9][j][9].a = active_glwin -> proj; active_glwin -> gcid[9][j][9].b = 0; active_glwin -> gcid[9][j][9].c = j; active_glwin -> gcid[9][j][9].d = 9; } } #else gchar * str; GtkWidget * spm; GtkWidget * allt; int i; for (i=0 ; i < 2 ; i++) { j = 0; active_glwin -> oglmc[i][* coo][j] = NULL; active_glwin -> oglmc[i][* coo][j] = coord_color_setup (& j, * coo, i); if (! * init) active_glwin -> ogl_poly[i][* coo] = g_malloc0 (*ngsp*sizeof*active_glwin -> ogl_poly[i][* coo]); for ( j=0 ; j < * ngsp ; j++ ) { if (i == 0) { active_image -> show_coord[* coo][j] = TRUE; if (* coo < 9) { if (* init) active_image -> show_poly[* coo][j] = FALSE; active_image -> spcolor[* coo][0][j] = init_color (coordt[j]-3, active_glwin -> ring_max[* ids]); active_image -> spcolor[* coo][0][j].alpha = DEFAULT_ALPHA; } active_coord -> geolist[* coo][0][j] = coordt[j]; } str = g_strdup_printf ("%d", coordt[j]); spm = create_menu_item (TRUE, str); active_glwin -> ogl_geom[i][* coo][j] = create_coord_menu (0, str, TRUE, NULL, & active_glwin -> gcid[* coo][j][* coo]); gtk_menu_shell_append ((GtkMenuShell *)active_glwin -> oglmc[i][* coo][0], spm); if (* coo < 9) { gtk_menu_item_set_submenu ((GtkMenuItem *)spm, color_box (active_glwin, -3, * ids, j)); active_glwin -> ogl_poly[i][* coo][j] = create_coord_menu (1, str, active_image -> show_poly[* coo][j], NULL, & active_glwin -> gcid[* coo][j][* coo]); } else { active_glwin -> gcid[9][j][9].a = active_glwin -> proj; active_glwin -> gcid[9][j][9].b = 0; active_glwin -> gcid[9][j][9].c = j; active_glwin -> gcid[9][j][9].d = 9; } g_free (str); } allt = create_menu_item (TRUE, "_All"); g_signal_connect (G_OBJECT (allt), "activate", G_CALLBACK(coord_properties), & active_glwin -> colorp[* coo][1]); gtk_menu_shell_append ((GtkMenuShell *)active_glwin -> oglmc[i][* coo][0], allt); } #endif } /*! \fn void init_opengl_coords (int id, int nt, int init) \brief initialize data to store the coordination data \param id the geometry id, in: [0-9] \param nt total number of distinct coordination \param init initialize some visual information (1/0) */ void init_opengl_coords (int id, int nt, int init) { int k; active_coord -> species = active_project -> nspec; active_coord -> totcoord[id] = nt; active_image -> show_coord[id] = allocbool (nt); #ifdef GTK3 int i, j; for (i=0; i<2; i++) { if (active_glwin -> ogl_geom[i][id]) g_free (active_glwin -> ogl_geom[i][id]); active_glwin -> ogl_geom[i][id] = g_malloc0 (nt*sizeof*active_glwin -> ogl_geom[i][id]); for (j=0; j < nt; j++) { active_glwin -> ogl_geom[i][id][j] = NULL; } } #endif if (id < 2 || id > 3) { k = (id > 3) ? 1 : active_project -> nspec; if (active_coord -> ntg[id]) g_free (active_coord -> ntg[id]); active_coord -> ntg[id] = g_malloc0 (k*sizeof*active_coord -> ntg[id]); if (id > 3) active_coord -> ntg[id][0] = nt; if (id < 9) { if (! init) { if (active_image -> show_poly[id]) g_free (active_image -> show_poly[id]); active_image -> show_poly[id] = allocbool (nt); } #ifdef GTK3 for (i=0; i<2; i++) { if (active_glwin -> ogl_poly[i][id]) g_free (active_glwin -> ogl_poly[i][id]); active_glwin -> ogl_poly[i][id] = g_malloc0 (nt*sizeof*active_glwin -> ogl_poly[i][id]); for (j=0; j < nt; j++) { active_glwin -> ogl_poly[i][id][j] = NULL; } } #endif } } } /*! \fn void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[*num]) \brief coordination information from Fortran90 \param id the geometry id, in: [0-9] \param num number of atom(s) \param cmin min value for the total coordination \param cmax max value for the total coordination \param nt total number of distinct coordination \param coord the values for each atom */ void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[* num]) { int i, j, k; if (* nt) init_opengl_coords (* id, * nt, 0); if (* id < 2) { if (* id == 0) { // Total coordination active_coord -> cmax = * cmax; active_coord -> cmin = * cmin; } if (coord != NULL) { for (i=0, k=0; i < active_project -> steps; i++) { for (j=0; j < active_project -> natomes; j++, k++) { active_project -> atoms[i][j].coord[* id] = coord[k] - 1; } } } } } Atomes-GNU-1.1.14/src/opengl/win/initcoord.h000066400000000000000000000031651457665371200205150ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file initcoord.h * @short Function declarations to handle the atomic coordination data * @author Sébastien Le Roux */ /* * This header file: 'initcoord.h' * * Contains: - Function declarations to handle the atomic coordination data */ #ifdef GTK3 void prep_all_coord_menus (glwin * view); void prep_all_ring_menus (glwin * view); #endif // GTK3 void set_advanced_bonding_menus (glwin * view); void partial_geo_out_ (int * sp, int * id, int * ngsp, int coord[* ngsp]); void allocate_partial_geo_ (int * sp, int * ngsp); void init_menu_coordinations_ (int * id, int * sp, int * ngsp, int coordt[* ngsp]); void init_menu_fragmol_ (int * id); void init_menurings_ (int * coo, int * ids, int * ngsp, int coordt[* ngsp], int * init); void init_opengl_coords (int id, int nt, int init); void send_coord_opengl_ (int * id, int * num, int * cmin, int * cmax, int * nt, int coord[* num]); Atomes-GNU-1.1.14/src/opengl/win/initmol.c000066400000000000000000000431461457665371200201740ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file initmol.c * @short Functions to retrieve fragments data from Fortran90 \n Functions to retrieve molecules data from Fortran90 \n Functions to analyze molecule topology * @author Sébastien Le Roux */ /* * This file: 'initmol.c' * * Contains: * - The functions to retrieve fragments data from Fortran90 - The functions to retrieve molecules data from Fortran90 - The functions to analyze molecule topology * * List of functions: int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]); gboolean are_identical_molecules (search_molecule * mol_a, search_molecule * mol_b); void duplicate_molecule (molecule * new_mol, search_molecule * old_mol); void allocate_mol_for_step_ (int * sid, int * mol_in_step); void allocate_mol_data_ (); void send_mol_neighbors_ (int * stp, int * mol, int * aid, int * nvs, int neigh[* nvs]); void update_mol_details (search_molecule * mol, int sp, int cp); void send_mol_details_ (int * stp, int * mol, int * ats, int * sps, int spec_in_mol[* sps], int atom_in_mol[* ats]); void free_search_molecule_data (search_molecule * smol); void setup_molecules_ (int * stepid); void setup_menu_molecules_ (); void setup_fragments_ (int * sid, int coord[active_project -> natomes]); search_molecule * duplicate_search_molecule (search_molecule * old_mol); */ #include "global.h" #include "interface.h" #include "bind.h" #include "color_box.h" #include "glwindow.h" #include "initcoord.h" typedef struct search_molecule search_molecule; struct search_molecule { int id; // Molecule id number int md; // MD step int multiplicity; // Multiplicity int * fragments; // Fragments list int natoms; // Number of atoms int * atoms; // Temporary atom list int nspec; // Number of chemical species int * species; // Number of atom by species int nbonds; // Number of chemical bonds int ** pbonds; // Number of chemical bonds by geometries int nangles; // Number of bond angles int *** pangles; // Number of bond angles by geometries int ** lgeo; // list of coordination spheres (by species) search_molecule * next; search_molecule * prev; }; int * pgeo; search_molecule * tmp_search = NULL; search_molecule ** in_calc_mol = NULL; extern molecule * tmp_mol; /*! \fn void duplicate_molecule (molecule * new_mol, search_molecule * old_mol) \brief create a copy of a molecule data structure \param new_mol the new molecule \param old_mol the molecule to copy */ void duplicate_molecule (molecule * new_mol, search_molecule * old_mol) { new_mol -> id = old_mol -> id; new_mol -> md = old_mol -> md; new_mol -> multiplicity = old_mol -> multiplicity; new_mol -> fragments = duplicate_int (old_mol -> multiplicity, old_mol -> fragments); new_mol -> natoms = old_mol -> natoms; new_mol -> nspec = old_mol -> nspec; new_mol -> species = duplicate_int (active_project -> nspec, old_mol -> species); } /*! \fn search_molecule * duplicate_search_molecule (search_molecule * old_mol) \brief create a copy of a search molecule data structure \param old_mol the search molecule data structure to copy */ search_molecule * duplicate_search_molecule (search_molecule * old_mol) { search_molecule * new_mol = g_malloc0(sizeof*new_mol); new_mol -> id = old_mol -> id; new_mol -> md = old_mol -> md; new_mol -> multiplicity = old_mol -> multiplicity; new_mol -> fragments = duplicate_int (old_mol -> multiplicity, old_mol -> fragments); new_mol -> natoms = old_mol -> natoms; new_mol -> nspec = old_mol -> nspec; new_mol -> species = duplicate_int (active_project -> nspec, old_mol -> species); int j, k; new_mol -> pbonds = g_malloc0 (active_project -> coord -> totcoord[1]*sizeof*new_mol -> pbonds); new_mol -> pangles = g_malloc0 (active_project -> coord -> totcoord[1]*sizeof*new_mol -> pangles); if (old_mol -> atoms) { new_mol -> atoms = duplicate_int (old_mol -> natoms*old_mol -> multiplicity, old_mol -> atoms); } new_mol -> nbonds = old_mol -> nbonds; if (new_mol -> nbonds) { for (j=0; j coord -> totcoord[1]; j++) { new_mol -> pbonds[j] = duplicate_int (active_project -> coord -> totcoord[1], old_mol -> pbonds[j]); } new_mol -> nangles = old_mol -> nangles; if (new_mol -> nangles) { for (j=0; j coord -> totcoord[1]; j++) { new_mol -> pangles[j] = g_malloc0 (active_project -> coord -> totcoord[1]*sizeof*new_mol -> pangles[j]); for (k=0; k coord -> totcoord[1]; k++) { new_mol -> pangles[j][k] = duplicate_int (active_project -> coord -> totcoord[1], old_mol -> pangles[j][k]); } } } } new_mol -> lgeo = g_malloc0 (active_project -> nspec*sizeof*new_mol -> lgeo); for (j=0; j nspec; j++) { new_mol -> lgeo[j] = duplicate_int (active_project -> coord -> totcoord[1], old_mol -> lgeo[j]); } return new_mol; } /*! \fn void allocate_mol_for_step_ (int * sid, int * mol_in_step) \brief allocate the data to store molecule information for a MD step \param sid the MD step \param mol_in_step the number of molecule(s) for this MD step */ void allocate_mol_for_step_ (int * sid, int * mol_in_step) { in_calc_mol[* sid -1] = g_malloc0(* mol_in_step*sizeof*in_calc_mol[* sid -1]); active_project -> modelfc -> mol_by_step[* sid - 1] = * mol_in_step; } /*! \fn void allocate_mol_data_ () \brief allocate data to store molecule information */ void allocate_mol_data_ () { int i; if (active_project -> modelfc != NULL) { if (active_project -> modelfc -> mols != NULL) { g_free (active_project -> modelfc -> mols); active_project -> modelfc -> mols = NULL; } active_project -> modelfc = NULL; } in_calc_mol = g_malloc0(active_project -> steps*sizeof*in_calc_mol); active_project -> modelfc = g_malloc0 (sizeof*active_project -> modelfc); active_project -> modelfc -> mols = g_malloc0(active_project -> steps*sizeof*active_project -> modelfc -> mols); active_project -> modelfc -> mol_by_step = allocint (active_project -> steps); for (i=0; i<2; i++) { if (active_project -> force_field[i]) g_free (active_project -> force_field[i]); active_project -> force_field[i] = NULL; } pgeo = g_malloc0 ((active_project -> nspec+1)*sizeof*pgeo); for (i=1; i nspec+1; i++) { pgeo[i] = pgeo[i-1] + active_coord -> ntg[1][i-1]; } } /*! \fn void send_mol_neighbors_ (int * stp, int * mol, int * aid, int * nvs, int neigh[*nvs]) \brief update molecule typology information from Fortran90 \param stp the MD step \param mol the molecule id \param aid the atom id \param nvs the number of neighbor(s) for this atom \param neigh the list of neighbor(s) for this atom */ void send_mol_neighbors_ (int * stp, int * mol, int * aid, int * nvs, int neigh[* nvs]) { int i, j, k, l, m, n, o, p, q, r, s, t, u; search_molecule * tmp_mol = & in_calc_mol[* stp - 1][* mol - 1]; i = active_project -> atoms[* stp - 1][* aid - 1].sp; j = active_project -> atoms[* stp - 1][* aid - 1].coord[1]; k = pgeo[i] + j; for (l=0; l < * nvs; l++) { m = neigh[l]-1; n = active_project -> atoms[tmp_mol -> md][m].sp; o = active_project -> atoms[tmp_mol -> md][m].coord[1]; p = pgeo[n] + o; tmp_mol -> pbonds[k][p] ++; } if (* nvs > 1) { for (l=0; l<*nvs-1; l++) { m = neigh[l]-1; n = active_project -> atoms[tmp_mol -> md][m].sp; o = active_project -> atoms[tmp_mol -> md][m].coord[1]; p = pgeo[n] + o; for (q= l+1; q<*nvs; q++) { r = neigh[q]-1; s = active_project -> atoms[tmp_mol -> md][r].sp; t = active_project -> atoms[tmp_mol -> md][r].coord[1]; u = pgeo[s] + t; tmp_mol -> pangles[p][k][u] ++; tmp_mol -> pangles[u][k][p] ++; } } } } /*! \fn void update_mol_details (search_molecule * mol, int sp, int cp) \brief update molecule information \param mol the molecule to update \param sp the chemical species \param cp the partial coordination id */ void update_mol_details (search_molecule * mol, int sp, int cp) { int i, j, k, l, m; for (i=0; i nspec; i++) { j = active_coord -> partial_geo[sp][cp][i]; mol -> nbonds += j; if (j) { for (k=0; k nspec; k++) { l = active_coord -> partial_geo[sp][cp][k]; if (k != i || l > 1) { m = (j+l)*((j+l)-1)/2; mol -> nangles += m; } } } } } /*! \fn void send_mol_details_ (int * stp, int * mol, int * ats, int * sps, int spec_in_mol[*sps], int atom_in_mol[*ats]) \brief overall molecule information from Fortran90 \param stp the MD step \param mol the molecule id \param ats the number of atom(s) in the molecule \param sps the number of chemical species in the molecule \param spec_in_mol the number of atom(s) by chemical species in the molecule \param atom_in_mol the list of atom(s) in the molecule */ void send_mol_details_ (int * stp, int * mol, int * ats, int * sps, int spec_in_mol[* sps], int atom_in_mol[* ats]) { int i, j, k, l; search_molecule * tmp_mol = & in_calc_mol[* stp - 1][* mol - 1]; tmp_mol -> id = * mol - 1; tmp_mol -> md = * stp - 1; tmp_mol -> multiplicity = 1; tmp_mol -> fragments = allocint(1); tmp_mol -> fragments[0] = * mol - 1; tmp_mol -> natoms = * ats; tmp_mol -> lgeo = allocdint (active_project -> nspec, active_coord -> totcoord[1]); tmp_mol -> pbonds = allocdint (active_coord -> totcoord[1], active_coord -> totcoord[1]); tmp_mol -> pangles = alloctint (active_coord -> totcoord[1], active_coord -> totcoord[1], active_coord -> totcoord[1]); tmp_mol -> atoms = duplicate_int (* ats, atom_in_mol); for (i=0; i< * ats; i++) { j = atom_in_mol[i]-1; k = active_project -> atoms[0][j].sp; l = active_project -> atoms[* stp - 1][j].coord[1]; tmp_mol -> lgeo[k][pgeo[k]+l] ++; update_mol_details (tmp_mol, k, l); } j = 0; for (i=0; i nspec; i++) { if (spec_in_mol[i] > 0) j++; } tmp_mol -> nspec = j; tmp_mol -> species = duplicate_int (active_project -> nspec, spec_in_mol); tmp_mol -> nbonds /= 2; tmp_mol -> nangles /= 2; } /*! \fn gboolean are_identical_molecules (search_molecule * mol_a, search_molecule * mol_b) \brief test if 2 molecules are identicals \param mol_a the 1st molecule \param mol_b the 2nd molecule */ gboolean are_identical_molecules (search_molecule * mol_a, search_molecule * mol_b) { int i, j, k; /*#ifdef DEBUG g_debug ("AID:: mol_a -> id= %d, mol_b-> id= %d", mol_a -> id, mol_b -> id); g_debug ("AID:: mol_a -> natoms= %d, mol_b-> natoms= %d", mol_a -> natoms, mol_b -> natoms); g_debug ("AID:: mol_a -> nspec= %d, mol_b-> nspec= %d", mol_a -> nspec, mol_b -> nspec); g_debug ("AID:: mol_a -> nbonds= %d, mol_b-> nbonds= %d", mol_a -> nbonds, mol_b -> nbonds); g_debug ("AID:: mol_a -> nangles= %d, mol_b-> nangles= %d", mol_a -> nangles, mol_b -> nangles); #endif*/ if (mol_a -> md != mol_b -> md) return FALSE; if (mol_a -> natoms != mol_b -> natoms) return FALSE; if (mol_a -> nspec != mol_b -> nspec) return FALSE; for (i=0; i < active_project -> nspec; i++) { if (mol_a -> species[i] != mol_b -> species[i]) return FALSE; } if (mol_a -> nbonds != mol_b -> nbonds) return FALSE; if (mol_a -> nangles != mol_b -> nangles) return FALSE; for (i=0; i < active_project -> nspec; i++) { for (j=0; j< active_coord -> totcoord[1]; j++) { if (mol_a -> lgeo[i][j] != mol_b -> lgeo[i][j]) return FALSE; } } if (mol_a -> nbonds > 1) { for (i=0; i < active_coord -> totcoord[1]; i++) { for (j=0; j < active_coord -> totcoord[1]; j++) { if (mol_a -> pbonds[i][j] != mol_b -> pbonds[i][j]) return FALSE; } } if (mol_a -> nangles > 1) { for (i=0; i < active_coord -> totcoord[1]; i++) { for (j=0; j < active_coord -> totcoord[1]; j++) { for (k=0; k < active_coord -> totcoord[1]; k++) { if (mol_a -> pangles[i][j][k] != mol_b -> pangles[i][j][k]) return FALSE; } } } } } return TRUE; } /*! \fn int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]) \brief merge molecule a and molecule b data \param val_a multiplicity for molecule a \param val_b multiplicity for molecule b \param table_a the list of molecular fragment(s) for molecule a \param table_b the list of molecular fragment(s) for molecule b */ int * merge_mol_data (int val_a, int val_b, int table_a[val_a], int table_b[val_b]) { int * p_data; int i; p_data = allocint (val_a + val_b); for (i=0; i atoms); if (smol -> nbonds) { for (i=0; i totcoord[1]; i++) g_free (smol -> pbonds[i]); g_free (smol -> pbonds); } if (smol -> nangles) { for (i=0; i totcoord[1]; i++) { for (j=0; j totcoord[1]; j++) g_free (smol -> pangles[i][j]); g_free (smol -> pangles[i]); } g_free (smol -> pangles); } for (i=0; i nspec; i++) g_free (smol -> lgeo[i]); g_free (smol -> lgeo); g_free (smol -> species); g_free (smol -> fragments); } /*! \fn void setup_molecules_ (int * stepid) \brief setup molecule data \param stepid the MD step */ void setup_molecules_ (int * stepid) { int i, j, k, l, m, n; search_molecule * mtmp_at, * mtmp_bt; search_molecule * first_mol = NULL; search_molecule * tmp_mol; gboolean add_it; i = * stepid -1; j = 0; for (k=0; k modelfc -> mol_by_step[i]; k++) { mtmp_bt = & in_calc_mol[i][k]; add_it = TRUE; mtmp_at = first_mol; while (mtmp_at) { if (are_identical_molecules (mtmp_at, mtmp_bt)) { mtmp_at -> fragments = merge_mol_data (mtmp_at -> multiplicity, mtmp_bt -> multiplicity, mtmp_at -> fragments, mtmp_bt -> fragments); mtmp_at -> atoms = merge_mol_data (mtmp_at -> natoms*mtmp_at -> multiplicity, mtmp_bt -> natoms*mtmp_bt -> multiplicity, mtmp_at -> atoms, mtmp_bt -> atoms); mtmp_at -> multiplicity ++; add_it = FALSE; break; } mtmp_at = mtmp_at -> next; } if (add_it) { if (first_mol) { mtmp_at = first_mol; while (mtmp_at -> next) mtmp_at = mtmp_at -> next; mtmp_at -> next = duplicate_search_molecule (mtmp_bt); mtmp_at -> next -> prev = mtmp_at; } else { first_mol = duplicate_search_molecule (mtmp_bt); } j ++; } free_search_molecule_data (mtmp_bt); } g_free (in_calc_mol[i]); in_calc_mol[i] = NULL; active_project -> modelfc -> mol_by_step[i] = j; active_project -> modelfc -> mols[i] = g_malloc0(j*sizeof*active_project -> modelfc -> mols[i]); tmp_mol = first_mol; for (k=0; k natoms*tmp_mol -> multiplicity; for (m=0; m atoms[m] - 1; active_project -> atoms[i][n].coord[3] = k; } duplicate_molecule (& active_project -> modelfc -> mols[i][k], tmp_mol); active_project -> modelfc -> mols[i][k].id = k; free_search_molecule_data (tmp_mol); if (k < j-1) tmp_mol = tmp_mol -> next; } while (tmp_mol -> prev) { tmp_mol = tmp_mol -> prev; g_free (tmp_mol -> next); } g_free (first_mol); } /*! \fn void setup_menu_molecules_ () \brief prepare the menu elements related to molecule(s) */ void setup_menu_molecules_ () { int i, j; g_free (in_calc_mol); in_calc_mol = NULL; g_free (pgeo); pgeo = NULL; i = 0; for (j=0; j steps; j++) { i = max (i, active_project -> modelfc -> mol_by_step[j]); } active_coord -> totcoord[3] = i; i = 3; init_menu_fragmol_ (& i); } /*! \fn void setup_fragments_ (int * sid, int coord[active_project->natomes]) \brief atom(s) fragment(s) information from Fortran90 \param sid the MD step \param coord the fragment(s) information */ void setup_fragments_ (int * sid, int coord[active_project -> natomes]) { int i; for (i=0; i < active_project -> natomes; i++) { active_project -> atoms[* sid-1][i].coord[2] = coord[i] - 1; } } Atomes-GNU-1.1.14/src/opengl/win/initring.c000066400000000000000000000062371457665371200203440ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file initring.c * @short Functions to retrieve rings data from Fortran90 * @author Sébastien Le Roux */ /* * This file: 'initring.c' * * Contains: * - The functions to retrieve rings data from Fortran90 * * List of functions: void send_rings_opengl_ (int * id, int * st, int * ta, int * ri, int nring[* ta+1]); void send_atom_rings_id_opengl_ (int * st, int * at, int * id, int * ta, int * num, int ring[* num]); void allocate_all_rings_ (int * id, int * st, int * ta, int * nring); */ #include "global.h" #include "glwindow.h" /*! \fn void send_rings_opengl_ (int * id, int * st, int * ta, int * ri, int nring[*ta+1]) \brief get single ring data for the glwin from Fortran90 \param id type of ring \param st the MD step \param ta size of the ring \param ri ring size id \param nring ring's atom list */ void send_rings_opengl_ (int * id, int * st, int * ta, int * ri, int nring[* ta+1]) { int i; active_glwin -> show_rpoly[* id][* st][* ta][* ri] = FALSE; for (i=0; i< * ta+1; i++) { active_glwin -> all_rings[* id][* st][* ta][* ri][i] = nring[i] - 1; } } /*! \fn void send_atom_rings_id_opengl_ (int * st, int * at, int * id, int * ta, int * num, int ring[*num]) \brief get rings data for an atom from Fortran90 \param st the MD step \param at atom id \param id type of ring \param ta size of the ring \param num number of ring(s) of that size \param ring the list(s) of atoms of the(these) ring(s) */ void send_atom_rings_id_opengl_ (int * st, int * at, int * id, int * ta, int * num, int ring[* num]) { if (ring != NULL) { int i; active_project -> atoms[* st][* at].rings[* id][* ta] = allocint(* num + 1); active_project -> atoms[* st][* at].rings[* id][* ta][0] = * num; for (i=0; i < * num; i++) { active_project -> atoms[* st][* at].rings[* id][* ta][i+1] = ring[i] - 1; } } } /*! \fn void allocate_all_rings_ (int * id, int * st, int * ta, int * nring) \brief allocate data to store ring statistics results for the glwin \param id the type of ring \param st the MD step \param ta the size of the ring \param nring the number of ring(s) of that size */ void allocate_all_rings_ (int * id, int * st, int * ta, int * nring) { active_glwin -> all_rings[* id][* st][* ta - 1] = allocdint (* nring, * ta); active_glwin -> show_rpoly[* id][* st][* ta - 1] = allocint (* nring); active_glwin -> num_rings[* id][* st][* ta - 1] = * nring; } Atomes-GNU-1.1.14/src/opengl/win/m_anim.c000066400000000000000000000122161457665371200177530ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_anim.c * @short Functions to create the 'Animate' submenu * @author Sébastien Le Roux */ /* * This file: 'm_anim.c' * * Contains: * - The functions to create the 'Animate' submenu * * List of functions: G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_anim (glwin * view, int id); GMenu * menu_anim (glwin * view, int popm); */ #include "global.h" #include "glwindow.h" extern G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data); #ifdef GTK3 /*! \fn GtkWidget * menu_anim (glwin * view, int id) \brief create the 'Animate' submenu elements GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_anim (glwin * view, int id) { GtkWidget * menuanim = create_menu_item (FALSE, "Animate"); GtkWidget * menua = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)menuanim, menua); if (id == 0) { view -> ogl_anim[0] = gtk3_menu_item (menua, "Spin", IMG_STOCK, (gpointer)MEDIA_LOOP, G_CALLBACK(window_spinner), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } else { gtk3_menu_item (menua, "Spin", IMG_STOCK, (gpointer)MEDIA_LOOP, G_CALLBACK(window_spinner), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } GtkWidget * item = gtk3_menu_item (menua, "Sequencer", IMG_STOCK, (gpointer)MEDIA_PLAY, G_CALLBACK(window_sequencer), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); if (get_project_by_id(view -> proj) -> steps == 1) { widget_set_sensitive (item, 0); } if (id == 0) { view -> ogl_anim[1] = gtk3_menu_item (menua, "Recorder", IMG_STOCK, (gpointer)RECORD, G_CALLBACK(window_recorder), (gpointer)view, TRUE, GDK_KEY_r, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } else { gtk3_menu_item (menua, "Recorder", IMG_STOCK, (gpointer)RECORD, G_CALLBACK(window_recorder), (gpointer)view, TRUE, GDK_KEY_r, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } widget_set_sensitive (menuanim, get_project_by_id(view -> proj) -> natomes); return (menuanim); } #else /*! \fn G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the spinner window creation signal \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_spin (GSimpleAction * action, GVariant * parameter, gpointer data) { window_spinner (NULL, data); } /*! \fn G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the sequencer window creation signal \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_seq (GSimpleAction * action, GVariant * parameter, gpointer data) { window_sequencer (NULL, data); } /*! \fn G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the recorder window creation signal \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_rec (GSimpleAction * action, GVariant * parameter, gpointer data) { window_recorder (NULL, data); } /*! \fn GMenu * menu_anim (glwin * view, int popm) \brief create the 'Animate' submenu elements \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_anim (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "Spin", "spin", popm, popm, NULL, IMG_STOCK, (gpointer)MEDIA_LOOP, FALSE, G_CALLBACK(to_spin), (gpointer)view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, "Sequencer", "seq", popm, popm, NULL, IMG_STOCK, (gpointer)MEDIA_PLAY, FALSE, G_CALLBACK(to_seq), (gpointer)view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, "Recorder", "rec", popm, popm, "R", IMG_STOCK, (gpointer)RECORD, FALSE, G_CALLBACK(to_rec), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_atoms.c000066400000000000000000000673121457665371200201610ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_atoms.c * @short Functions to create the 'Model -> Atom(s)' submenu * @author Sébastien Le Roux */ /* * This file: 'm_atoms.c' * * Contains: * - The functions to create the 'Model -> Atom(s)' submenu * * List of functions: gchar * label_atpts (project * this_proj, glwin * view, int id); G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_all_atom_labels (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_all_atom_labels (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_spec_menu (char * name, gboolean va, gboolean vb, GtkWidget * menu, GCallback handler, tint * data); GtkWidget * create_atom_layout_widget (gchar * str, GtkWidget * widg, tint * data); GtkWidget * show_atoms_submenu (glwin * view, int id, int at); GtkWidget * color_atoms_submenu (glwin * view, int id, int at); GtkWidget * label_atoms_submenu (glwin * view, int id, int at); GtkWidget * menu_atoms (glwin * view, int id, int at); GMenu * label_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive); GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive); GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive); GMenu * menu_atoms (glwin * view, int popm, int at); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" extern G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data); /*! \fn gchar * label_atpts (project * this_proj, glwin * view, int id) \brief prepare the text of a menu item in the 'Model -> Atom(s)' submenu \param this_proj the target project \param view the target glwin \param id the type of label to prepare */ gchar * label_atpts (project * this_proj, glwin * view, int id) { int i; gchar * mot; gchar * tmp; gchar * str; for (i=0; i < this_proj -> nspec; i++) { switch (id) { case 0: str = g_strdup_printf ("%s [ %f Å ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> sphererad[i]); break; case 1: str = g_strdup_printf ("%s [ %f pts ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> pointrad[i]); break; case 2: str = g_strdup_printf ("%s [ %f pts ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> sphererad[i+this_proj -> nspec]); break; case 3: str = g_strdup_printf ("%s [ %f pts ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> pointrad[i+this_proj -> nspec]); break; default: str = g_strdup_printf ("%s [ %f Å ]", this_proj -> chemistry -> label[i], view -> anim -> last -> img -> atomicrad[i]); break; } if (i == 0) { mot = g_strdup_printf ("%s", str); } else { tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); } g_free (str); } return mot; } #ifdef GTK3 extern G_MODULE_EXPORT void set_show_hide_all_atom_labels (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data); /*! \fn G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data) \brief handle the show / hide atomic species signal \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_atoms (GtkWidget * widg, gpointer data) { tint * the_data = (tint *) data; int j = the_data -> b; int k = the_data -> c; int l, m; project * this_proj = get_project_by_id(the_data -> a); gboolean v = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != this_proj -> modelgl -> ogl_spec[j][k]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[j][k], v); } for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) this_proj -> atoms[l][m].show[j] = v; } } this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k] = v; init_default_shaders (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data) \brief handle the show / hide atomic species label signal \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_labels (GtkWidget * widg, gpointer data) { int l, m; tint * id = (tint *) data; int j = id -> b; int k = id -> c; project * this_proj = get_project_by_id(id -> a); gboolean v = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != this_proj -> modelgl -> ogl_lab[j][k]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[j][k], v); } for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { if (this_proj -> atoms[l][m].label[j] != v) { this_proj -> atoms[l][m].label[j] = v; } } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, j); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void show_hide_all_atom_labels (GtkWidget * widg, gpointer data) \brief handle the show / hide all atomic labels signal \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_all_atom_labels (GtkWidget * widg, gpointer data) { tint * id = (tint *) data; int j = id -> b; int k; gboolean show = TRUE; project * this_proj = get_project_by_id(id -> a); for (k=0; k nspec; k++) { if (plot -> show_label[j][k]) show = FALSE; } for (k=0; k nspec; k++) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[j][k], show); } } /*! \fn GtkWidget * create_spec_menu (char * name, gboolean va, gboolean vb, GtkWidget * menu, GCallback handler, tint * data) \brief create a chemical species related check menu item GTK3 \param name menu item name \param va check menu item status \param vb menu item sensitivity \param menu the GtkWidget sending the signal \param handler the associated callback \param data the associated data pointer */ GtkWidget * create_spec_menu (char * name, gboolean va, gboolean vb, GtkWidget * menu, GCallback handler, tint * data) { GtkWidget * spec_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, handler, data, FALSE, 0, 0, TRUE, FALSE, va); widget_set_sensitive (spec_widget, vb); return spec_widget; } /*! \fn GtkWidget * create_atom_layout_widget (gchar * str, GtkWidget * widg, tint * data) \brief create a 'Model -> Atom(s)' menu item GTK3 \param str the label for the menu item \param widg the menu GtkWidget to attach the menu item to \param data the associated data pointer */ GtkWidget * create_atom_layout_widget (gchar * str, GtkWidget * widg, tint * data) { GtkWidget * menu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menu); GtkWidget * layout = create_menu_item (TRUE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(set_atom_parameter), data); return layout; } /*! \fn GtkWidget * show_atoms_submenu (glwin * view, int id, int at) \brief create the 'Atom(s) -> show' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * show_atoms_submenu (glwin * view, int id, int at) { GtkWidget * mshow = gtk_menu_new (); gchar * str; gboolean sensitive = (! at) ? TRUE : view -> anim -> last -> img -> draw_clones; project * this_proj = get_project_by_id (view -> proj); if (id == 0) { view -> ogl_spec[at] = g_malloc (this_proj -> nspec*sizeof*view -> ogl_spec[at]); } int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } if (id == 0) { view -> ogl_spec[at][i] = create_spec_menu (str, view -> anim -> last -> img -> show_atom[at][i], sensitive, mshow, G_CALLBACK(show_hide_atoms), & view -> colorp[at][i]); } else { create_spec_menu (str, view -> anim -> last -> img -> show_atom[at][i], sensitive, mshow, G_CALLBACK(show_hide_atoms), & view -> colorp[at][i]); } g_free (str); } return mshow; } /*! \fn GtkWidget * color_atoms_submenu (glwin * view, int id, int at) \brief create the 'Atom(s) -> Color(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * color_atoms_submenu (glwin * view, int id, int at) { GtkWidget * menuc = gtk_menu_new (); project * this_proj = get_project_by_id (view -> proj); gchar * str; GtkWidget * sp; int i, j; if (at == 0) { j = 0; } else { j = this_proj -> nspec; } for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } sp = create_menu_item (FALSE, str); g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menuc, sp); gtk_menu_item_set_submenu ((GtkMenuItem *)sp, color_box(view, i+j, 0, 0)); } if (at == 1) widget_set_sensitive (menuc, view -> anim -> last -> img -> draw_clones); return menuc; } /*! \fn GtkWidget * label_atoms_submenu (glwin * view, int id, int at) \brief create the 'Atom(s) -> Label(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * label_atoms_submenu (glwin * view, int id, int at) { GtkWidget * menul = gtk_menu_new (); GtkWidget * all = create_menu_item (FALSE, "Show/Hide all"); g_signal_connect (G_OBJECT (all), "activate", G_CALLBACK(show_hide_all_atom_labels), & view -> colorp[at][0]); gtk_menu_shell_append ((GtkMenuShell *)menul, all); GtkWidget * l_show = create_menu_item (FALSE, "Show"); gtk_menu_shell_append ((GtkMenuShell *)menul, l_show); GtkWidget * mshow = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)l_show, mshow); project * this_proj = get_project_by_id (view -> proj); gchar * str; gboolean sensitive = (! at) ? TRUE : view -> anim -> last -> img -> draw_clones; if (id == 0) { view -> ogl_lab[at] = g_malloc (this_proj -> nspec*sizeof*view -> ogl_lab[at]); } int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } if (id == 0) { view -> ogl_lab[at][i] = create_spec_menu (str, view -> anim -> last -> img -> show_label[at][i], sensitive, mshow, G_CALLBACK(show_hide_labels), & view -> colorp[at][i]); } else { create_spec_menu (str, view -> anim -> last -> img -> show_label[at][i], sensitive, mshow, G_CALLBACK(show_hide_labels), & view -> colorp[at][i]); } } if (at == 0 || id == 1) { GtkWidget * l_sel = create_menu_item (FALSE, "Select atom(s)"); gtk_menu_shell_append ((GtkMenuShell *)menul, l_sel); g_signal_connect (G_OBJECT (l_sel), "activate",G_CALLBACK(atom_properties), & view -> colorp[at][2]); if (id == 1) widget_set_sensitive (l_sel, sensitive); GtkWidget * l_adv = add_advanced_item (menul, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][1], FALSE, 0, 0); if (id == 1) widget_set_sensitive (l_adv, sensitive); } else { view -> ogl_clones[2] = create_menu_item (FALSE, "Select atom(s)"); gtk_menu_shell_append ((GtkMenuShell *)menul, view -> ogl_clones[2]); g_signal_connect (G_OBJECT (view -> ogl_clones[2]), "activate",G_CALLBACK(atom_properties), & view -> colorp[at][2]); widget_set_sensitive (view -> ogl_clones[2], sensitive); view -> ogl_clones[3] = add_advanced_item (menul, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][1], FALSE, 0, 0); widget_set_sensitive (view -> ogl_clones[3], sensitive); } return menul; } /*! \fn GtkWidget * menu_atoms (glwin * view, int id, int at) \brief create the 'Atom(s)' submenu elements GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * menu_atoms (glwin * view, int id, int at) { int i; GtkWidget * widg; gchar * str; project * this_proj = get_project_by_id(view -> proj); GtkWidget * menua = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu ("Show", TRUE, show_atoms_submenu (view, id, at))); if (at == 1 && id == 0) { view -> ogl_clones[1] = color_atoms_submenu (view, id, at); gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu ("Color(s)", ! (view -> anim -> last -> img -> color_map[0] != 0), view -> ogl_clones[1])); } else { gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu ("Color(s)", ! (view -> anim -> last -> img -> color_map[0] != 0), color_atoms_submenu (view, id, at))); } gtk_menu_shell_append ((GtkMenuShell *)menua, menu_item_new_with_submenu ("Label(s)", TRUE, label_atoms_submenu (view, id, at))); i = view -> anim -> last -> img -> style; str = label_atpts (this_proj, view, 2*at); if (id == 0) { view -> ogl_atoms[4*at] = create_menu_item(FALSE, "Radius(ii)"); gtk_menu_shell_append ((GtkMenuShell *)menua, view -> ogl_atoms[4*at]); view -> ogl_atoms[4*at+1] = create_atom_layout_widget (str, view -> ogl_atoms[4*at], & view -> colorp[at][0]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_atoms[4*at+1], 0); } } else if (i == SPHERES || i == BALL_AND_STICK) { widg = create_menu_item (FALSE, "Radius(ii)"); gtk_menu_shell_append ((GtkMenuShell *)menua, widg); widg = create_atom_layout_widget (str, widg, & view -> colorp[at][0]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } g_free (str); str = label_atpts (this_proj, view, 1+2*at); if (id == 0) { view -> ogl_atoms[4*at+2] = create_menu_item(FALSE, "Point size(s)"); gtk_menu_shell_append ((GtkMenuShell *)menua, view -> ogl_atoms[4*at+2]); view -> ogl_atoms[4*at+3] = create_atom_layout_widget (str, view -> ogl_atoms[4*at+2], & view -> colorp[at][1]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_atoms[4*at+3], 0); } } else if (i == WIREFRAME || i == PUNT) { widg = create_menu_item (FALSE, "Point size(s)"); gtk_menu_shell_append ((GtkMenuShell *)menua, widg); widg = create_atom_layout_widget (str, widg, & view -> colorp[at][1]); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } g_free (str); if (id == 0 && at == 1) { view -> ogl_clones[4] = add_advanced_item (menua, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][0], FALSE, 0, 0); if (at == 1) { widget_set_sensitive (view -> ogl_clones[4], view -> anim -> last -> img -> draw_clones); } } else { GtkWidget * advanced = add_advanced_item (menua, G_CALLBACK(atom_properties), (gpointer)& view -> colorp[at][0], FALSE, 0, 0); if (at == 1) { widget_set_sensitive (advanced, view -> anim -> last -> img -> draw_clones); } } return menua; } #else extern G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * state, gpointer data); /*! \fn G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the show/hide signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *) data; int j = the_data -> b; int k = the_data -> c; int l, m; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id (the_data -> a); GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * atom = g_action_get_name ((GAction *)action); int lgt = strlen (atom); gchar * name = g_strdup_printf ("%c%c", atom[lgt-2], atom[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, atom); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k]; } if (doit) { for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) this_proj -> atoms[l][m].show[j] = show; } } this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k] = show; init_default_shaders (this_proj -> modelgl); if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } } } /*! \fn G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the show/hide label signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_labels (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *) data; int j = the_data -> b; int k = the_data -> c; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id (the_data -> a); GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * label = g_action_get_name ((GAction *)action); int lgt = strlen (label); gchar * name = g_strdup_printf ("%c%c", label[lgt-2], label[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, label); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = ! this_proj -> modelgl -> anim -> last -> img -> show_label[j][k]; } if (doit) { int l, m; for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { if (this_proj -> atoms[l][m].label[j] != show) { this_proj -> atoms[l][m].label[j] = show; } } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, j); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } } } /*! \fn G_MODULE_EXPORT void show_hide_all_atom_labels (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the show/hide all labels GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_all_atom_labels (GSimpleAction * action, GVariant * parameter, gpointer data) { // Neither check, nor radio tint * id = (tint *) data; int i, j, k; project * this_proj = get_project_by_id(id -> a); i = id -> b; gboolean show = ! this_proj -> atoms[0][0].label[i]; for (j=0; j steps; j++) { for (k=0; k natomes; k++) { this_proj -> atoms[j][k].label[i] = show; } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, i); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); update_menu_bar (this_proj -> modelgl); } /*! \fn GMenu * label_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) \brief create the 'Atom(s) -> Label(s)' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) \param sensitive menu item sensitivity */ GMenu * label_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "Show/Hide All", (at) ? "clones-labels-all" : "atoms-labels-all", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_all_atom_labels), & view -> colorp[at][0], FALSE, FALSE, FALSE, sensitive); GMenu * smenu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); gchar * str; int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } append_opengl_item (view, smenu, str, (! at) ? "atom-label" : "clone-label", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_labels), & view -> colorp[at][i], TRUE, view -> anim -> last -> img -> show_label[at][i], FALSE, sensitive); } append_submenu (menu, "Show", smenu); append_opengl_item (view, menu, "Select atom(s)", (! at) ? "atom-select" : "clone-select", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(atom_properties), & view -> colorp[at][2], FALSE, FALSE, FALSE, sensitive); append_opengl_item (view, menu, "Advanced", (! at) ? "atom-lab-adv" : "clone-lab-adv", popm, i, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(atom_properties), & view -> colorp[at][1], FALSE, FALSE, FALSE, sensitive); return menu; } /*! \fn GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) \brief create the 'Atom(s) -> Color(s)' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) \param sensitive menu item sensitivity */ GMenu * color_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); GMenu * menuc; project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i; for (i=0; i< this_proj -> nspec; i++) { if (at == 0) { stra = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { stra = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } strb = g_strdup_printf ("%s", (! at) ? "atom-color" : "clone-color"); menuc = g_menu_new (); append_opengl_item (view, menuc, strb, strb, popm, i, NULL, IMG_NONE, NULL, TRUE, NULL, NULL, FALSE, FALSE, FALSE, FALSE); append_opengl_item (view, menuc, "More colors ...", strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_run_atom_color_window), & view -> colorp[0][i+at*this_proj -> nspec], FALSE, FALSE, FALSE, sensitive); append_submenu (menu, stra, menuc); g_free (stra); g_free (strb); g_object_unref (menuc); } return menu; } /*! \fn GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) \brief create the 'Atom(s) -> Show' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) \param sensitive menu item sensitivity */ GMenu * show_atoms_submenu (glwin * view, int popm, int at, gboolean sensitive) { GMenu * menu = g_menu_new (); gchar * str; project * this_proj = get_project_by_id (view -> proj); int i; for (i=0; i nspec; i++) { if (at == 0) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s*", this_proj -> chemistry -> label[i]); } append_opengl_item (view, menu, str, (! at) ? "show-atom" : "show-clone", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_atoms), & view -> colorp[at][i], TRUE, view -> anim -> last -> img -> show_atom[at][i], FALSE, sensitive); g_free (str); } return menu; } /*! \fn GMenu * menu_atoms (glwin * view, int popm, int at) \brief create the 'Atom(s)' submenu elements \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) */ GMenu * menu_atoms (glwin * view, int popm, int at) { int i = view -> anim -> last -> img -> style; gboolean sensitive = (at) ? view -> anim -> last -> img -> draw_clones : TRUE; GMenu * menu = g_menu_new (); append_submenu (menu, "Show", show_atoms_submenu(view, popm, at, sensitive)); append_submenu (menu, "Color(s)", color_atoms_submenu (view, popm, at, sensitive)); append_submenu (menu, "Label(s)", label_atoms_submenu (view, popm, at, sensitive)); GMenuItem * item; if (i == SPHERES || i == BALL_AND_STICK) { item = g_menu_item_new ("Radius(ii)", (sensitive) ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", (at) ? "clone-radii" : "atom-radii", NULL); g_menu_append_item (menu, item); } if (i == WIREFRAME || i == PUNT) { item = g_menu_item_new ("Point size(s)", (sensitive) ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", (at) ? "clone-pts" : "atom-pts", NULL); g_menu_append_item (menu, item); } append_opengl_item (view, menu, "Advanced", (! at) ? "atom-advanced" : "clone-advanced", popm, popm, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(atom_properties), & view -> colorp[at][0], FALSE, FALSE, FALSE, sensitive); return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_axis.c000066400000000000000000000254271457665371200200030ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_axis.c * @short Functions to create the 'View -> Axis' submenu * @author Sébastien Le Roux */ /* * This file: 'm_axis.c' * * Contains: * - The functions to create the 'View -> Axis' submenu * * List of functions: void menu_axis (GtkWidget * menu_ab, glwin * view, int id); void menu_axis (GMenu * menu_ab, glwin * view, int popm); G_MODULE_EXPORT void set_axis_template_pos (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_axis_pos_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * axis_position_submenu (glwin * view, int id); GMenu * position_submenu (glwin * view, int popm, int pos); GMenu * axis_position_submenu (glwin * view, int popm); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" #ifdef GTK4 extern G_MODULE_EXPORT void axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data); #endif extern GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data); #ifdef GTK3 /*! \fn G_MODULE_EXPORT void set_axis_template_pos (GtkWidget * widg, gpointer data) \brief handle change axis position signal GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_template_pos (GtkWidget * widg, gpointer data) { /* TOP_RIGHT = 0, TOP_LEFT = 1, BOTTOM_RIGHT = 2, BOTTOM_LEFT = 3, CENTER = 4 */ tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> anim -> last -> img -> axispos; int j = the_data -> b; if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg) && i != j) { this_proj -> modelgl -> anim -> last -> img -> axispos = NONE; if (i != CUSTOM) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[1][8+i], FALSE); } if (widg != this_proj -> modelgl -> ogl_box_axis[1][8+j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[1][8+j], TRUE); } this_proj -> modelgl -> anim -> last -> img -> axispos = j; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); } else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { if (i != CUSTOM) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[1][8+i], TRUE); } } } /*! \fn GtkWidget * axis_position_submenu (glwin * view, int id) \brief create the 'Axis -> Position' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * axis_position_submenu (glwin * view, int id) { int i, j, k; GtkWidget * menup = gtk_menu_new (); GtkWidget * ud, * udm, * widg; gchar * udlab[2] = {"Top", "Bottom"}; gchar * lrlab[2] = {"Right Corner", "Left Corner"}; i = 0; for (j=0; j<2; j++) { ud = create_menu_item (FALSE, udlab[j]); gtk_menu_shell_append ((GtkMenuShell *)menup, ud); udm = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)ud, udm); for (k=0; k<2; k++) { if (id == 0) { view -> ogl_box_axis[1][8+i] = gtk3_menu_item (udm, lrlab[k], IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> axispos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> box_axis[AXIS] == NONE) widget_set_sensitive (view -> ogl_box_axis[1][8+i], 0); } else { widg = gtk3_menu_item (udm, lrlab[k], IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> axispos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> box_axis[AXIS] == NONE) widget_set_sensitive (widg, 0); } i += 1; } } if (id == 0) { view -> ogl_box_axis[1][8+i] = gtk3_menu_item (menup, "Center", IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> axispos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> box_axis[AXIS] == NONE) widget_set_sensitive (view -> ogl_box_axis[1][8+i], 0); } else { widg = gtk3_menu_item (menup, "Center", IMG_NONE, NULL, G_CALLBACK(set_axis_template_pos), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (view -> anim -> last -> img -> axispos == i) ? TRUE: FALSE); if (view -> anim -> last -> img -> box_axis[AXIS] == NONE) widget_set_sensitive (widg, 0); } return menup; } /*! \fn void menu_axis (GtkWidget * menu_ab, glwin * view, int id) \brief create 'Axis' menu GTK3 \param menu_ab the GtkWidget sending the signal \param view the target glwin \param id main app (0) or popup (1) */ void menu_axis (GtkWidget * menu_ab, glwin * view, int id) { GtkWidget * widg = create_menu_item (FALSE, "Length"); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); GtkWidget * menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menul); gchar * str = g_strdup_printf (" Length [ %f Å ]", view -> anim -> last -> img -> axis_length); if (id == 0) { view -> ogl_box_axis[1][7] = create_layout_widget (str, menul, view -> anim -> last -> img -> box_axis[AXIS], & view -> colorp[0][AXIS]); if (view -> anim -> last -> img -> box_axis[AXIS] == NONE) { widget_set_sensitive (view -> ogl_box_axis[1][7], 0); } } else { widg = create_layout_widget (str, menul, view -> anim -> last -> img -> box_axis[AXIS], & view -> colorp[0][AXIS]); if (view -> anim -> last -> img -> box_axis[AXIS] == NONE) { widget_set_sensitive (widg, 0); } } g_free (str); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, menu_item_new_with_submenu ("Position", TRUE, axis_position_submenu(view, id))); add_advanced_item (menu_ab, G_CALLBACK(axis_advanced), (gpointer)view, FALSE, 0, 0); } #else /*! \fn G_MODULE_EXPORT void change_axis_pos_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle change axis position signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void change_axis_pos_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { /* TOP_RIGHT = 0, TOP_LEFT = 1, BOTTOM_RIGHT = 2, BOTTOM_LEFT = 3, CENTER = 4 */ tint * the_data = (tint *)data; glwin * view = get_project_by_id(the_data -> a) -> modelgl; const gchar * pos = g_variant_get_string (parameter, NULL); int lgt = strlen (pos); gchar * name = g_strdup_printf ("%c%c", pos[lgt-2], pos[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, pos); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-axis-pos", g_variant_new_string((const gchar *)name)); g_free (name); } else { int i; gchar * pos_name = NULL; for (i=0; i<5; i++) { pos_name = g_strdup_printf ("set-axis-pos.%d.0", i); if (g_strcmp0(pos, (const gchar *)pos_name) == 0) { view -> anim -> last -> img -> axispos = i; g_free (pos_name); pos_name = NULL; break; } g_free (pos_name); pos_name = NULL; } g_action_change_state (G_ACTION (action), parameter); view -> create_shaders[MAXIS] = TRUE; update (view); g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * position_submenu (glwin * view, int popm, int pos) \brief create elements of the 'Axis -> Position' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param pos position id */ GMenu * position_submenu (glwin * view, int popm, int pos) { GMenu * menu = g_menu_new (); gchar * lrlab[2] = {"Right Corner", "Left Corner"}; int i, j; i = pos*2; for (j=0; j<2; j++) { append_opengl_item (view, menu, lrlab[j], "axis-pos", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_axis_pos_radio), & view -> colorp[i][0], FALSE, (view -> anim -> last -> img -> axispos == i) ? TRUE: FALSE, TRUE, TRUE); i ++; } return menu; } /*! \fn GMenu * axis_position_submenu (glwin * view, int popm) \brief create the 'Axis -> Position' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * axis_position_submenu (glwin * view, int popm) { int i; GMenu * menu = g_menu_new (); gchar * udlab[2] = {"Top", "Bottom"}; for (i=0; i<2; i++) { append_submenu (menu, udlab[i], position_submenu(view, popm, i)); } append_opengl_item (view, menu, "Center", "axis-pos", popm, 4, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_axis_pos_radio), & view -> colorp[4][0], FALSE, (view -> anim -> last -> img -> axispos == 4) ? TRUE: FALSE, TRUE, TRUE); return menu; } /*! \fn void menu_axis (GMenu * menu_ab, glwin * view, int popm) \brief create the 'Axis' submenu GTK4 \param menu_ab the menu to attach the new menu to \param view the target glwin \param popm main app (0) or popup (1) */ void menu_axis (GMenu * menu_ab, glwin * view, int popm) { GMenuItem * item = g_menu_item_new ("Length", (view -> anim -> last -> img -> box_axis[AXIS]) != NONE ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", "axis-length", NULL); g_menu_item_set_submenu (item, (GMenuModel *)axis_box_param (view, popm, AXIS, NONE)); g_menu_append_item (menu_ab, item); append_submenu (menu_ab, "Position", axis_position_submenu(view, popm)); append_opengl_item (view, menu_ab, "Advanced", "axis-advanced", popm, popm, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(axis_advanced), (gpointer)view, FALSE, FALSE, FALSE, TRUE); } #endif Atomes-GNU-1.1.14/src/opengl/win/m_back.c000066400000000000000000000042231457665371200177260ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_back.c * @short Function to create the background color menu item * @author Sébastien Le Roux */ /* * This file: 'm_back.c' * * Contains: * - The function to create the background color menu item * * List of functions: GtkWidget * menu_back (glwin * view); GMenu * menu_back (glwin * view, int popm); */ #include "global.h" #include "color_box.h" #include "glwindow.h" #ifdef GTK3 /*! \fn GtkWidget * menu_back (glwin * view) \brief create the background color menu item GTK3 \param view the target glwin */ GtkWidget * menu_back (glwin * view) { GtkWidget * menub = gtk_menu_new (); GtkWidget * bc = create_menu_item (FALSE, "Color"); gtk_menu_shell_append ((GtkMenuShell *)menub, bc); gtk_menu_item_set_submenu ((GtkMenuItem *)bc, color_box(view, -2, 0, 0)); return menub; } #else /*! \fn GMenu * menu_back (glwin * view, int popm) \brief create the background color menu item GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_back (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "back-color", "back-color", popm, popm, NULL, IMG_NONE, NULL, TRUE, NULL, NULL, FALSE, FALSE, FALSE, FALSE); append_opengl_item (view, menu, "More colors ...", "back-color", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_run_back_color_window), view, FALSE, FALSE, FALSE, TRUE); return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_bonds.c000066400000000000000000000316261457665371200201420ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_bonds.c * @short Functions to create the 'Model -> Bond(s)' submenu * @author Sébastien Le Roux */ /* * This file: 'm_bonds.c' * * Contains: * - The functions to create the 'Model -> Bond(s)' submenu * * List of functions: gchar * label_cutrab (project * this_proj, glwin * view, int id); GtkWidget * create_bond_menu_item (gchar * str, GtkWidget * menu); GtkWidget * create_bond_layout_widget (gchar * str, GtkWidget * widg, int va, tint * data); GtkWidget * menu_bonds (glwin * view, int id, int at); GMenu * create_bond_layout_section (glwin * view, gchar * str, gchar * key, int popm, int id, GCallback handler, gpointer data, gboolean sensitive); GMenu * menu_bonds (glwin * view, int popm, int at); */ #include "global.h" #include "glview.h" #include "glwindow.h" #ifdef GTK4 extern G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data); #endif /*! \fn gchar * label_cutrab (project * this_proj, glwin * view, int id) \brief prepare the text of a menu item in the 'Model -> Bond(s)' submenu \param this_proj the target project \param view the target glwin \param id the type of label to prepare */ gchar * label_cutrab (project * this_proj, glwin * view, int id) { int i, j, k, m; gchar * mot; gchar * tmp; gchar * str; chemical_data * chem = this_proj -> chemistry; k = 0; m = this_proj -> nspec; for (i=0; i < m; i++) { if (id == 0) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[i], chem -> cutoffs[i][i]); } else { if (id == 1) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> bondrad[i][i]); } else if (id == 2) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> bondrad[i+m][i+m]); } else if (id == 3) { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> linerad[i][i]); } else { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[i], view -> anim -> last -> img -> linerad[i+m][i+m]); } } if (i == 0) { mot = g_strdup_printf ("%s", str); } else { tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); } g_free (str); k+=1; } for (i=0; i < m-1; i++) { for (j=i+1; j < m; j++) { if (id == 0) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[j], chem -> cutoffs[i][j]); } else { if (id == 1) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> bondrad[i][j]); } else if (id == 2) { str = g_strdup_printf ("%s-%s [ %f Å ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> bondrad[i+m][j+m]); } else if (id == 3) { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> linerad[i][j]); } else { str = g_strdup_printf ("%s-%s [ %f pts ]", chem -> label[i], chem -> label[j], view -> anim -> last -> img -> linerad[i+m][j+m]); } } if (k == 0) { mot = g_strdup_printf ("%s", str); } else { tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); } g_free (str); k += 1; } } if (id == 0) { str = g_strdup_printf ("Total [ %f Å ]", chem -> grtotcutoff); tmp = g_strdup_printf ("%s", mot); g_free (mot); mot = g_strdup_printf ("%s\n%s", tmp, str); g_free (tmp); g_free (str); } return mot; } #ifdef GTK3 /*! \fn GtkWidget * create_bond_menu_item (gchar * str, GtkWidget * menu) \brief create a menu item, and attach it to menu \param str the label of the menu item \param menu the GtkWidget menu to attach the menu item to */ GtkWidget * create_bond_menu_item (gchar * str, GtkWidget * menu) { GtkWidget * layout = create_menu_item (FALSE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); return layout; } /*! \fn GtkWidget * create_bond_layout_widget (gchar * str, GtkWidget * widg, int va, tint * data) \brief create a 'Model -> Bond(s)' menu item GTK3 \param str the menu item name \param widg the menu GtkWidget to attach the menu item to \param va the type of bond item to set the appropriate action \param data the associated data pointer */ GtkWidget * create_bond_layout_widget (gchar * str, GtkWidget * widg, int va, tint * data) { GtkWidget * menu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menu); GtkWidget * layout = create_menu_item (FALSE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); switch (va) { case 0: g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(window_bonds), data); break; case 1: g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(set_bond_parameter), data); break; default: g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(window_cuts), data); break; } return layout; } /*! \fn GtkWidget * menu_bonds (glwin * view, int id, int at) \brief create the 'Bond(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param at atoms (0) or clones (1) */ GtkWidget * menu_bonds (glwin * view, int id, int at) { GtkWidget * widg; gchar * str; int i; GtkWidget * menub = gtk_menu_new (); i = view -> anim -> last -> img -> style; if (id == 0) { if (at == 0) { str = g_strdup_printf ("Cylinder(s) [ %f Å ]", view -> anim -> last -> img -> radall[0]); } else { str = g_strdup_printf ("Cylinder(s) [ %f Å ]", view -> anim -> last -> img -> radall[1]); } view -> ogl_bonds[8*at] = create_bond_menu_item ("Radius", menub); view -> ogl_bonds[1+8*at] = create_bond_layout_widget (str, view -> ogl_bonds[8*at], 0, & view -> colorp[2+at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_bonds[1+8*at], 0); } } else if (i == CYLINDERS) { if (at == 0) { str = g_strdup_printf ("Cylinder(s) [ %f Å ]", view -> anim -> last -> img -> radall[0]); } else { str = g_strdup_printf ("Cylinder(s) [ %f Å ]", view -> anim -> last -> img -> radall[1]); } widg = create_bond_menu_item ("Cylinder Radius(ii)", menub); widg = create_bond_layout_widget (str, widg, 0, & view -> colorp[2+at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } if (id == 0) { str = label_cutrab (get_project_by_id(view -> proj), view, 1+at); view -> ogl_bonds[2+8*at] = create_bond_menu_item ("Radius(ii)", menub); view -> ogl_bonds[3+8*at] = create_bond_layout_widget (str, view -> ogl_bonds[2+8*at], 1, & view -> colorp[at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_bonds[3+8*at], 0); } } else if (i == BALL_AND_STICK) { str = label_cutrab (get_project_by_id(view -> proj), view, 1+at); widg = create_bond_menu_item ("Radius(ii)", menub); widg = create_bond_layout_widget (str, widg, 1, & view -> colorp[at][0]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } if (id == 0) { str = label_cutrab (get_project_by_id(view -> proj), view, 3+at); view -> ogl_bonds[4+8*at] = create_bond_menu_item ("Line Width(s)", menub); view -> ogl_bonds[5+8*at] = create_bond_layout_widget (str, view -> ogl_bonds[4+8*at], 1, & view -> colorp[at][1]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (view -> ogl_bonds[5+8*at], 0); } } else if (i == WIREFRAME) { str = label_cutrab (get_project_by_id(view -> proj), view, 3+at); widg = create_bond_menu_item ("Line Width(s)", menub);; widg = create_bond_layout_widget (str, widg, 1, & view -> colorp[at][1]); g_free (str); if (at == 1 && ! view -> anim -> last -> img -> draw_clones) { widget_set_sensitive (widg, 0); } } if (at == 0) { str = label_cutrab (get_project_by_id(view -> proj), view, 0); if (id == 0) { view -> ogl_bonds[6] = create_bond_menu_item ("Cutoff(s)", menub); view -> ogl_bonds[7] = create_bond_layout_widget (str, view -> ogl_bonds[6], 2, & view -> colorp[at][0]); } else { widg = create_bond_menu_item ("Cutoff(s)", menub); widg = create_bond_layout_widget (str, widg, 2, & view -> colorp[at][0]); } g_free (str); } return menub; } #else /*! \fn GMenu * create_bond_layout_section (glwin * view, gchar * str, gchar * key, int popm, int id, GCallback handler, gpointer data, gboolean sensitive) \brief create a bond menu item GTK4 \param view the target glwin \param str menu item name \param key menu item action key \param popm main app (0) or popup (1) \param id menu item action id \param handler the associated callback \param data the associated data pointer \param sensitive menu item sensitivity */ GMenu * create_bond_layout_section (glwin * view, gchar * str, gchar * key, int popm, int id, GCallback handler, gpointer data, gboolean sensitive) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, str, key, popm, id, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, sensitive); return menu; } /*! \fn GMenu * menu_bonds (glwin * view, int popm, int at) \brief create the 'Bond(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param at atoms (0) or clones (1) */ GMenu * menu_bonds (glwin * view, int popm, int at) { gchar * str; gboolean sensitive = (at == 1 && ! view -> anim -> last -> img -> draw_clones) ? FALSE : TRUE; GMenu * menu = g_menu_new (); switch (view -> anim -> last -> img -> style) { case CYLINDERS: if (at == 0) { str = g_strdup_printf ("Cylinder(s) [ %f Å ]", view -> anim -> last -> img -> radall[0]); } else { str = g_strdup_printf ("Cylinder(s) [ %f Å ]", view -> anim -> last -> img -> radall[1]); } append_submenu (menu, "Cylinder Radius(ii)", create_bond_layout_section (view, str, (at) ? "clone-cyl-rad" : "atom-cyl-rad", popm, at, G_CALLBACK(window_bonds), & view -> colorp[2+at][0], sensitive)); g_free (str); break; case BALL_AND_STICK: str = label_cutrab (get_project_by_id(view -> proj), view, 1+at); append_submenu (menu, "Radius(ii)", create_bond_layout_section (view, str, (at) ? "clone-rad" : "atom-rad", popm, at+1, G_CALLBACK(set_bond_parameter), & view -> colorp[at][0], sensitive)); g_free (str); break; case WIREFRAME: str = label_cutrab (get_project_by_id(view -> proj), view, 3+at); append_submenu (menu, "Line Width(s)", create_bond_layout_section (view, str, (at) ? "clone-line" : "atom-line", popm, at+2, G_CALLBACK(set_bond_parameter), & view -> colorp[at][1], sensitive)); g_free (str); break; } if (! at) { str = label_cutrab (get_project_by_id(view -> proj), view, 0); append_submenu (menu, "Cutoff(s)", create_bond_layout_section (view, str, "bond-cutoffs", popm, at+3, G_CALLBACK(window_cuts), & view -> colorp[at][0], sensitive)); g_free (str); } return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_box.c000066400000000000000000000454461457665371200176320ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_box.c * @short Functions to create the 'Model -> Box' submenu * @author Sébastien Le Roux */ /* * This file: 'm_box.c' * * Contains: * - The functions to create the 'Model -> Box' submenu * * List of functions: G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_box_axis (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void change_box_axis_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_box_axis_menu (char * name, int val, int box, GtkWidget * menu, tint * data); GtkWidget * create_color_widget (GtkWidget * widg, glwin * view, int va); GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data); GtkWidget * menu_box_axis (glwin * view, int id, int ab); GMenuItem * menu_box_axis (glwin * view, int popm, int ab); GMenu * axis_box_style (glwin * view, int popm, int ab, int abs); GMenu * axis_box_param (glwin * view, int popm, int ab, int style); GMenuItem * menu_box_axis (glwin * view, int popm, int ab); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" #include "submenus.h" #ifdef GTK4 G_MODULE_EXPORT void box_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); #else G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_lines (GtkWidget * widg, gpointer data); #endif #ifdef GTK3 // GTK3 Menu Action To Check /*! \fn G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data) \brief set box/axis style \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_box_axis_style (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; int j, k, o; j = the_data -> b; o = the_data -> c; project * this_proj = get_project_by_id(the_data -> a); k = this_proj -> modelgl -> anim -> last -> img -> box_axis[o]; int dim[2]={OGL_BOX, OGL_AXIS}; int i, m, l; l = (k == NONE) ? 2 : (j == WIREFRAME) ? 2 : 1; m = (k == NONE) ? 0 : (j == WIREFRAME) ? 1 : 2; if (k != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { this_proj -> modelgl -> anim -> last -> img -> box_axis[o] = NONE - 1; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[o][l], FALSE); gtk_widget_show (this_proj -> modelgl -> ogl_box_axis[o][3+2*(m-1)]); gtk_widget_hide (this_proj -> modelgl -> ogl_box_axis[o][3+2*(l-1)]); if (widg != this_proj -> modelgl -> ogl_box_axis[o][(k == NONE) ? 1 : m]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[o][(k == NONE) ? 1 : m], TRUE); } for (i=1; i modelgl -> ogl_box_axis[o][i], 1); this_proj -> modelgl -> anim -> last -> img -> box_axis[o] = (k == NONE) ? WIREFRAME : j; } else if (k == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[o][(k == NONE) ? 1 : m], TRUE); } else if (j == 0) { for (i=1; i<3; i++) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[o][i], FALSE); widget_set_sensitive (this_proj -> modelgl -> ogl_box_axis[o][i], 0); widget_set_sensitive (this_proj -> modelgl -> ogl_box_axis[o][i], 0); } widget_set_sensitive (this_proj -> modelgl -> ogl_box_axis[o][4], 0); for (i=6; i modelgl -> ogl_box_axis[o][i], 0); } if (widg != this_proj -> modelgl -> ogl_box_axis[o][0]) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_box_axis[o][0], FALSE); this_proj -> modelgl -> anim -> last -> img -> box_axis[o] = NONE; } this_proj -> modelgl -> create_shaders[o+MDBOX] = TRUE; update (this_proj -> modelgl); } /*! \fn GtkWidget * create_box_axis_menu (char * name, int val, int box, GtkWidget * menu, tint * data) \brief create a menu item for box/axis style \param name the new menu item label \param val box/axis active style \param box menu item style type \param menu the GtkMenu to attach the new item to \param data the pointer associated with the callback */ GtkWidget * create_box_axis_menu (char * name, int val, int box, GtkWidget * menu, tint * data) { GtkWidget * box_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, G_CALLBACK(set_box_axis_style), data, FALSE, 0, 0, TRUE, (data -> b != 0) ? TRUE : FALSE, (box == val && val != NONE) ? TRUE : FALSE); if (data -> b != 0) { if (val == NONE) { widget_set_sensitive (box_widget, 0); } } return box_widget; } /*! \fn GtkWidget * create_color_widget (GtkWidget * widg, glwin * view, int va) \brief create box color selection menu item \param widg the GtkMenuItem to attach the color palette to \param view the target glwin \param va box style */ GtkWidget * create_color_widget (GtkWidget * widg, glwin * view, int va) { GtkWidget * color_widget = color_box(view, -1, 0, 0); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, color_widget); if (va == NONE) { widget_set_sensitive (color_widget, 0); } return color_widget; } /*! \fn GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data) \brief create box/axis style menu widget \param str menu item label \param menu the GtkMenu to attach the new item to \param vab box/axis style \param data the associated data pointer */ GtkWidget * create_layout_widget (gchar * str, GtkWidget * menu, int vab, gpointer data) { GtkWidget * layout = create_menu_item (TRUE, str); gtk_menu_shell_append ((GtkMenuShell *)menu, layout); g_signal_connect (G_OBJECT (layout), "activate", G_CALLBACK(window_bonds), data); if (vab == NONE) widget_set_sensitive (layout, 0); return layout; } /*! \fn GtkWidget * menu_box_axis (glwin * view, int id, int ab) \brief create the 'Model -> Box' and 'View -> Axis' submenus GTK3 \param view the target glwin \param id main app (0) or popup (1) \param ab box (0) or axis (1) */ GtkWidget * menu_box_axis (glwin * view, int id, int ab) { GtkWidget * widg; gchar * menu_title[2]={"Box", "Axis"}; GtkWidget * ab_menu; GtkWidget * menu_ab = gtk_menu_new (); if (id == 0 && ab == 0) { view -> ogl_box[0] = create_menu_item (TRUE, menu_title[ab]); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_box[0], menu_ab); widget_set_sensitive (view -> ogl_box[0], get_project_by_id(view -> proj) -> cell.ltype); } else { ab_menu = create_menu_item (TRUE, menu_title[ab]); gtk_menu_item_set_submenu ((GtkMenuItem *)ab_menu, menu_ab); if (ab == 0) widget_set_sensitive (ab_menu, get_project_by_id(view -> proj) -> cell.ltype); } GtkWidget * menul; int i = view -> anim -> last -> img -> box_axis[ab]; if (id == 0) { view -> ogl_box_axis[ab][0] = create_box_axis_menu ("Show/_Hide", i, i, menu_ab, & view -> colorp[0][ab]); } else { widg = create_box_axis_menu ("Show/Hide", i, i, menu_ab, & view -> colorp[0][ab]); } widg = create_menu_item (FALSE, "Style"); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); GtkWidget * menus = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menus); gchar * str; str = g_strdup_printf ("Width [ %f pts ]", view -> anim -> last -> img -> box_axis_line[ab]); if (id == 0) { view -> ogl_box_axis[ab][1] = create_box_axis_menu (text_styles[1], i, 1, menus, & view -> colorp[1][ab]); view -> ogl_box_axis[ab][2] = create_box_axis_menu (text_styles[4], i, 4, menus, & view -> colorp[4][ab]); view -> ogl_box_axis[ab][3] = create_menu_item (TRUE, "_Lines"); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, view -> ogl_box_axis[ab][3]); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_box_axis[ab][3], menul); view -> ogl_box_axis[ab][4] = create_layout_widget (str, menul, view -> anim -> last -> img -> box_axis[ab], & view -> colorp[WIREFRAME][ab]); } else { create_box_axis_menu (text_styles[1], i, 1, menus, & view -> colorp[1][ab]); create_box_axis_menu (text_styles[4], i, 4, menus, & view -> colorp[4][ab]); if (i == WIREFRAME) { widg = create_menu_item (FALSE, "Lines"); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menul); widg = create_layout_widget (str, menul, view -> anim -> last -> img -> box_axis[ab], & view -> colorp[WIREFRAME][ab]); } } g_free (str); str = g_strdup_printf ("Radius [ %f Å ]", view -> anim -> last -> img -> box_axis_rad[ab]); if (id == 0) { view -> ogl_box_axis[ab][5] = create_menu_item (FALSE, "Cylinders"); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, view -> ogl_box_axis[ab][5]); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_box_axis[ab][5], menul); view -> ogl_box_axis[ab][6] = create_layout_widget (str, menul, view -> anim -> last -> img -> box_axis[ab], & view -> colorp[CYLINDERS][ab]); } else if (i == CYLINDERS) { widg = create_menu_item (FALSE, "Cylinders"); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); menul = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menul); widg = create_layout_widget (str, menul, view -> anim -> last -> img -> box_axis[ab], & view -> colorp[CYLINDERS][ab]); } g_free (str); if (ab == 0) { widg = create_menu_item (FALSE, "Color"); gtk_menu_shell_append ((GtkMenuShell *)menu_ab, widg); if (id == 0) { view -> ogl_box_axis[ab][7] = create_color_widget (widg, view, i); } else { widg = create_color_widget (widg, view, i); } add_advanced_item (menu_ab, G_CALLBACK(box_advanced), (gpointer)view, FALSE, 0, 0); } else { menu_axis (menu_ab, view, id); } if (id == 0 && ab == 0) { return view -> ogl_box[0]; } else { return ab_menu; } } #else /*! \fn G_MODULE_EXPORT void show_hide_box_axis (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle the 'box/axis' show/hide signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_box_axis (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *)data; glwin * view = get_project_by_id(the_data -> a) -> modelgl; const gchar * name = g_action_get_name ((GAction *)action); int lgt = strlen (name); gchar * str = g_strdup_printf ("%c%c", name[lgt-2], name[lgt-1]); if (g_strcmp0(str, ".1") == 0) { g_free (str); str = g_strdup_printf ("%.*s.0.0", lgt-4, name); g_action_group_activate_action ((GActionGroup *)view -> action_group, (const gchar *)str, NULL); g_free (str); } else { GVariant * state; gboolean show; state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); if (show) { view -> anim -> last -> img -> box_axis[the_data -> c] = WIREFRAME; } else { view -> anim -> last -> img -> box_axis[the_data -> c] = NONE; } view -> create_shaders[the_data -> c+MDBOX] = TRUE; update (view); g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } } /*! \fn G_MODULE_EXPORT void change_box_axis_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief handle a box/axis radio menu item signal GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void change_box_axis_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * the_data = (tint *)data; int i, j; i = the_data -> c; glwin * view = get_project_by_id (the_data -> a) -> modelgl; const gchar * style = g_variant_get_string (parameter, NULL); int lgt = strlen (style); gchar * name = g_strdup_printf ("%c%c", style[lgt-2], style[lgt-1]); if (g_strcmp0(name, ".1") == 0) { name = g_strdup_printf ("%.*s.0", lgt-2, style); gchar * str = g_strdup_printf ("set-%s-style", (i) ? "axis" : "box"); g_action_group_activate_action ((GActionGroup *)view -> action_group, (const gchar *)str, g_variant_new_string((const gchar *)name)); g_free (str); g_free (name); } else { gchar * style_name = NULL; gchar * str = g_strdup_printf ("set-%s-style", (i) ? "axis" : "box"); for (j=0; j<2; j++) { style_name = g_strdup_printf ("%s.%d.0", str, j); if (g_strcmp0(style, (const gchar *)style_name) == 0) { view -> anim -> last -> img -> box_axis[i] = (j == 0) ? WIREFRAME : CYLINDERS; view -> create_shaders[i+MDBOX] = TRUE; update (view); g_free (style_name); style_name = NULL; break; } g_free (style_name); style_name = NULL; } g_free (str); g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * axis_box_style (glwin * view, int popm, int ab, int abs) \brief create the box/axis '-> Style' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param ab box (0) or axis (1) \param abs the active box/axis style */ GMenu * axis_box_style (glwin * view, int popm, int ab, int abs) { GMenu * menu = g_menu_new (); gchar * str = g_strdup_printf ("%s-style", (ab) ? "axis" : "box"); append_opengl_item (view, menu, text_styles[1], str, popm, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_box_axis_radio), & view -> colorp[1][ab], FALSE, (abs == WIREFRAME) ? TRUE : FALSE, TRUE, (abs != NONE) ? TRUE : FALSE); g_free (str); str = g_strdup_printf ("%s-style", (ab) ? "axis" : "box"); append_opengl_item (view, menu, text_styles[4], str, popm, 1, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_box_axis_radio), & view -> colorp[4][ab], FALSE, (abs == CYLINDERS) ? TRUE : FALSE, TRUE, (abs != NONE) ? TRUE : FALSE); g_free (str); return menu; } /*! \fn GMenu * axis_box_param (glwin * view, int popm, int ab, int style) \brief create the box/axis '-> Length/Width/Radius' submenus GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param ab box (0) or axis (1) \param style the active box/axis style */ GMenu * axis_box_param (glwin * view, int popm, int ab, int style) { gchar * str, * key; if (style == WIREFRAME) { str = g_strdup_printf ("Width [ %f pts ]", view -> anim -> last -> img -> box_axis_line[ab]); key = g_strdup_printf ("%s-width", (ab) ? "axis" : "box"); } else if (style == CYLINDERS) { str = g_strdup_printf ("Radius [ %f Å ]", view -> anim -> last -> img -> box_axis_rad[ab]); key = g_strdup_printf ("%s-radius", (ab) ? "axis" : "box"); } else { str = g_strdup_printf (" length [ %f Å ]", view -> anim -> last -> img -> axis_length); key = g_strdup_printf ("axis-legnth"); } GMenu * menu = g_menu_new (); append_opengl_item (view, menu, str, key, popm, ab, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(window_bonds), & view -> colorp[style][ab], FALSE, FALSE, FALSE, TRUE); g_free (str); g_free (key); return menu; } /*! \fn GMenuItem * menu_box_axis (glwin * view, int popm, int ab) \brief create the 'Model -> Box' and 'View -> Axis' submenus GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param ab box (0) or axis (1) */ GMenuItem * menu_box_axis (glwin * view, int popm, int ab) { GMenuItem * ab_item = g_menu_item_new ((ab) ? "Axis" : "Box", (ab) ? NULL : (get_project_by_id(view -> proj) -> cell.ltype) ? NULL : "None"); int i = view -> anim -> last -> img -> box_axis[ab]; GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "Show/Hide", (ab) ? "show-axis" : "show-box", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_box_axis), & view -> colorp[0][ab], TRUE, (i != NONE) ? TRUE : FALSE, FALSE, (ab) ? TRUE : get_project_by_id(view -> proj) -> cell.ltype); append_submenu (menu, "Style", axis_box_style (view, popm, ab, i)); GMenuItem * item ; if (i == WIREFRAME) { item = g_menu_item_new ("Lines", (view -> anim -> last -> img -> box_axis[ab]) != NONE ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", (ab) ? "axis-lines" : "box-lines", NULL); g_menu_item_set_submenu (item, (GMenuModel *)axis_box_param (view, popm, ab, WIREFRAME)); g_menu_append_item (menu, item); } if (i == CYLINDERS) { item = g_menu_item_new ("Cylinders", (view -> anim -> last -> img -> box_axis[ab]) != NONE ? NULL : "None"); g_menu_item_set_attribute (item, "custom", "s", (ab) ? "axis-cylinders" : "box-cylinders", NULL); g_menu_item_set_submenu (item, (GMenuModel *)axis_box_param (view, popm, ab, CYLINDERS)); g_menu_append_item (menu, item); } if (ab == 0) { GMenu * menuc = g_menu_new (); append_opengl_item (view, menuc, "box-color", "box-color", popm, popm, NULL, IMG_NONE, NULL, TRUE, NULL, NULL, FALSE, FALSE, FALSE, FALSE); append_opengl_item (view, menuc, "More colors ...", "box-color", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_run_box_color_window), view, FALSE, FALSE, FALSE, get_project_by_id(view -> proj) -> cell.ltype); append_submenu (menu, "Color", menuc); g_object_unref (menuc); append_opengl_item (view, menu, "Advanced", "box-advanced", popm, popm, NULL, IMG_STOCK, DPROPERTIES, FALSE, G_CALLBACK(box_advanced), (gpointer)view, FALSE, FALSE, FALSE, TRUE); } else { menu_axis (menu, view, popm); } g_menu_item_set_submenu (ab_item, (GMenuModel *)menu); return ab_item; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_clones.c000066400000000000000000000142311457665371200203110ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_clones.c * @short Functions to create the 'Model -> Clone(s)' submenu * @author Sébastien Le Roux */ /* * This file: 'm_clones.c' * * Contains: * - The functions to create the 'Model -> Clone(s)' submenu * * List of functions: G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_clone_widget (char * name, gboolean clone, GtkWidget * menu, glwin * view); GtkWidget * menu_clones (glwin * view, int id); GMenu * menu_clones (glwin * view, int popm); */ #include "global.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" #ifdef GTK3 /*! \fn G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data) \brief show/hide clone(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_clones (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; gboolean j; j = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != view -> ogl_clones[0]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[0], j); } view -> anim -> last -> img -> draw_clones = j; widget_set_sensitive (view -> ogl_atoms[5], j); widget_set_sensitive (view -> ogl_atoms[7], j); widget_set_sensitive (view -> ogl_bonds[9], j); widget_set_sensitive (view -> ogl_bonds[11], j); widget_set_sensitive (view -> ogl_bonds[13], j); widget_set_sensitive (view -> ogl_clones[1], j); widget_set_sensitive (view -> ogl_clones[2], j); widget_set_sensitive (view -> ogl_clones[3], j); widget_set_sensitive (view -> ogl_clones[4], j); int i; for (i=0; i proj) -> nspec; i++) { widget_set_sensitive (view -> ogl_spec[1][i], j); widget_set_sensitive (view -> ogl_lab[1][i], j); } init_default_shaders (view); update (view); } /*! \fn GtkWidget * create_clone_widget (char * name, gboolean clone, GtkWidget * menu, glwin * view) \brief create the 'Show/hide clone(s)' menu item GTK3 \param name label of the new menu item \param clone draw clones (1) or not (0) \param menu the GtkMenu to attach the new item to \param view the target glwin */ GtkWidget * create_clone_widget (char * name, gboolean clone, GtkWidget * menu, glwin * view) { GtkWidget * clone_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, G_CALLBACK(show_hide_clones), view, FALSE, 0, 0, TRUE, FALSE, clone); widget_set_sensitive (clone_widget, view -> allbonds[1]); return clone_widget; } /*! \fn GtkWidget * menu_clones (glwin * view, int id) \brief create the 'Clone(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_clones (glwin * view, int id) { GtkWidget * menu = gtk_menu_new (); if (id == 0) { view -> ogl_clones[0] = create_clone_widget ("Show/Hide", view -> anim -> last -> img -> draw_clones, menu, view); } else { create_clone_widget ("Show/Hide", view -> anim -> last -> img -> draw_clones, menu, view); } gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Atom(s)", TRUE, menu_atoms (view, id, 1))); if ((id == 0) || (view -> anim -> last -> img -> style != SPHERES && view -> anim -> last -> img -> style != PUNT)) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Bond(s)", TRUE, menu_bonds (view, id, 1))); } return menu; } #else /*! \fn G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show/hide clones menu item callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_clones (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * name = g_action_get_name ((GAction *)action); if (g_strcmp0(name, "set-show-clones.1.1") == 0) { g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-show-clones.0.0", NULL); } else { GVariant * state; gboolean show; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); } else { show = ! view -> anim -> last -> img -> draw_clones; } view -> anim -> last -> img -> draw_clones = show; init_default_shaders (view); update (view); // Update the menu bar is reqiured to udpate the clone(s) submenus update_menu_bar (view); if (action) { g_variant_unref (state); } } } /*! \fn GMenu * menu_clones (glwin * view, int popm) \brief create the 'Clone(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_clones (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "Show/Hide", "show-clones", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_clones), (gpointer)view, TRUE, view -> anim -> last -> img -> draw_clones, FALSE, (view -> allbonds[1]) ? TRUE : FALSE); append_submenu (menu, "Atom(s)", menu_atoms(view, popm, 1)); if (view -> anim -> last -> img -> style != SPHERES && view -> anim -> last -> img -> style != PUNT) { append_submenu (menu, "Bonds(s)", menu_bonds(view, popm, 1)); } return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_coord.c000066400000000000000000000526701457665371200201450ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_coord.c * @short Functions to create the 'Chemistry -> Coordination' submenu * @author Sébastien Le Roux */ /* * This file: 'm_coord.c' * * Contains: * - The functions to create the 'Chemistry -> Coordination' submenu * * List of functions: gboolean is_coord_in_menu (int id, project * this_proj); void detach_frag_mol_menu (glwin * view, int id, int jd); G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * add_menu_coord (glwin * view, int id, int jd); GtkWidget * menu_coord (glwin * view, int id); GtkWidget * menu_rings (glwin * view, int id); GMenu * color_item (glwin * view, gchar * act, int popm, int id, GCallback handler, gpointer data); GMenu * menu_show_coord (glwin * view, int popm, int id, int mid); GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid); GMenu * menu_show_rings (glwin * view, int popm, int id, int mid); GMenu * add_menu_coord (glwin * view, int popm, int id); GMenu * menu_coord (glwin * view, int popm); GMenu * menu_rings (glwin * view, int popm); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); #endif /*! \fn gboolean is_coord_in_menu (int id, project * this_proj) \brief is this coordination in a menu ? \param id the coordination type \param this_proj the target project */ gboolean is_coord_in_menu (int id, project * this_proj) { if (((id == 2 || id == 3) && this_proj -> coord -> totcoord[id] <= COORD_MAX_MENU) || id < 2 || id > 3) { return TRUE; } else { return FALSE; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show/hide coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data) \brief show/hide coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_coord (GtkWidget * widg, gpointer data) #endif { qint * cid = (qint *)data; int i, j, k; int c, g, s; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; j = 0; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } j += c; #ifdef GTK3 show = (widg) ? gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg) : this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j]; #else GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * coord = g_action_get_name ((GAction *)action); int lgt = strlen (coord); gchar * name = g_strdup_printf ("%c%c", coord[lgt-2], coord[lgt-1]); if (g_strcmp0(name, ".1") == 0) { name = g_strdup_printf ("%.*s.0", lgt-2, coord); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j]; } #endif #ifdef DEBUG g_debug ("SHOW_HIDE_COORD:: p= %d, s= %d, c= %d, g= %d, show= %d", this_proj -> id, s, c, g, show); #endif #ifdef GTK3 // GTK3 Menu Action To Check if (is_coord_in_menu(g, this_proj)) { for (i=0; i<2; i++) { if (widg != this_proj -> modelgl -> ogl_geom[i][g][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[i][g][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[i][g][j]) != show) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[i][g][j], show); } } } } } #endif if (doit) { this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j] = show; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (g < 2) { if (this_proj -> atoms[i][j].sp == s && this_proj -> atoms[i][j].coord[g] == c) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } else if (g < 4) { if (this_proj -> atoms[i][j].coord[g] == c) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } else if (g < 9) { k = this_proj -> coord -> geolist[g][0][c] - 1; if (this_proj -> atoms[i][j].rings[s][k] != NULL) { if (this_proj -> atoms[i][j].rings[s][k][0]) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } } else { k = this_proj -> coord -> geolist[g][0][c] - 1; if (this_proj -> atoms[i][j].chain[k] != NULL) { if (this_proj -> atoms[i][j].chain[k][0]) { this_proj -> atoms[i][j].show[0] = this_proj -> atoms[i][j].show[1] = show; } } } } } init_default_shaders (this_proj -> modelgl); #ifdef GTK4 if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } #endif } } #ifdef GTK3 /*! \fn void detach_frag_mol_menu (glwin * view, int id, int jd) \brief create a fragment/molecule type submenu \param view the target glwin \param id main app (0) or popup (1) \param jd coordination type */ void detach_frag_mol_menu (glwin * view, int id, int jd) { GtkWidget * widg; if (view -> oglmc[id][jd] != NULL) { if (view -> oglmc[id][jd][0] != NULL) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][0])) { widg = gtk_menu_get_attach_widget (GTK_MENU(view -> oglmc[id][jd][0])); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmc[id][jd][0]); gtk_menu_detach (GTK_MENU(view -> oglmc[id][jd][0])); } } } } if (view -> oglmv[id][jd] != NULL) { if (view -> oglmv[id][jd][0] != NULL) { if (GTK_IS_WIDGET(view -> oglmv[id][jd][0])) { widg = gtk_menu_get_attach_widget (GTK_MENU(view -> oglmv[id][jd][0])); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmv[id][jd][0]); gtk_menu_detach (GTK_MENU(view -> oglmv[id][jd][0])); } } } } } /*! \fn GtkWidget * add_menu_coord (glwin * view, int id, int jd) \brief create a coordination type submenu \param view the target glwin \param id main app (0) or popup (1) \param jd coordination type */ GtkWidget * add_menu_coord (glwin * view, int id, int jd) { int i, j; GtkWidget * widg; GtkWidget * menucts; project * this_proj = get_project_by_id (view -> proj); GtkWidget * menuct = gtk_menu_new (); if (is_coord_in_menu(jd, this_proj)) { if (jd == 2 || jd == 3) detach_frag_mol_menu(view, id, jd); GtkWidget * colt = create_menu_item (TRUE, "_Show/Hide"); gtk_menu_shell_append ((GtkMenuShell *)menuct, colt); if (jd < 2 || jd > 3) { menucts = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)colt, menucts); if (jd > 3) { if (jd == 9) { colt = create_menu_item (FALSE, "Atoms in chain(s) of size"); } else { colt = create_menu_item (FALSE, "Atoms in ring(s) of size"); } gtk_menu_shell_append ((GtkMenuShell *)menucts, colt); menucts = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)colt, menucts); } j = (jd < 2) ? this_proj -> nspec : this_proj -> coord -> totcoord[jd]; for (i=0; i oglmv[id][jd]) { if (GTK_IS_WIDGET(view -> oglmv[id][jd][i])) { widg = gtk_widget_get_parent (view -> oglmv[id][jd][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmv[id][jd][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> oglmv[id][jd][i]); } gtk_menu_shell_append ((GtkMenuShell *)menucts, view -> oglmv[id][jd][i]); } } } else { if (view -> ogl_geom[id][jd]) { if (GTK_IS_WIDGET(view -> ogl_geom[id][jd][i])) { widg = gtk_widget_get_parent (view -> ogl_geom[id][jd][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_geom[id][jd][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_geom[id][jd][i]); } gtk_menu_shell_append ((GtkMenuShell *)menucts, view -> ogl_geom[id][jd][i]); } } } } } else if ((jd == 2 && view -> adv_bonding[0]) || (jd == 3 && view -> adv_bonding[1])) { if (view -> oglmv[id][jd]) { gtk_menu_item_set_submenu ((GtkMenuItem *)colt, view -> oglmv[id][jd][0]); } } if (jd != 9) { colt = create_menu_item (FALSE, "Color(s)"); gtk_menu_shell_append ((GtkMenuShell *)menuct, colt); } if (jd < 2) { menucts = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)colt, menucts); if (view -> oglmc[id][jd]) { for (i=0; i nspec; i++) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][i])) { widg = gtk_widget_get_parent (view -> oglmc[id][jd][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmc[id][jd][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> oglmc[id][jd][i]); } gtk_menu_shell_append ((GtkMenuShell *)menucts, view -> oglmc[id][jd][i]); } } } } else if ((jd == 2 && view -> adv_bonding[0]) || (jd == 3 && view -> adv_bonding[1])) { if (view -> oglmc[id][jd]) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][0])) { gtk_menu_item_set_submenu ((GtkMenuItem *)colt, view -> oglmc[id][jd][0]); } } } else if ((jd > 3 && jd < 9) && view -> rings) { if (view -> oglmc[id][jd]) { if (GTK_IS_WIDGET(view -> oglmc[id][jd][0])) { widg = gtk_menu_get_attach_widget (GTK_MENU(view -> oglmc[id][jd][0])); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmc[id][jd][0]); gtk_menu_detach (GTK_MENU(view -> oglmc[id][jd][0])); } gtk_menu_item_set_submenu ((GtkMenuItem *)colt, view -> oglmc[id][jd][0]); } } } } add_advanced_item (menuct, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[jd][1], FALSE, 0, 0); return menuct; } /*! \fn GtkWidget * menu_coord (glwin * view, int id) \brief create the 'Coordination' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_coord (glwin * view, int id) { GtkWidget * menuco = create_menu_item (FALSE, "Coordination"); GtkWidget * menuc = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)menuco, menuc); gtk_menu_shell_append ((GtkMenuShell *)menuc, menu_item_new_with_submenu ("Total(s)", TRUE, add_menu_coord(view, id, 0))); gtk_menu_shell_append ((GtkMenuShell *)menuc, menu_item_new_with_submenu ("Partial(s)", TRUE, add_menu_coord(view, id, 1))); return menuco; } /*! \fn GtkWidget * menu_rings (glwin * view, int id) \brief create the 'Ring(s)' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_rings (glwin * view, int id) { GtkWidget * menuco = gtk_menu_new (); if (view -> rings) { int i; for (i=0; i<5; i++) { if (view -> ring_max[i]) { if (id == 0) { view -> ogl_rings[i+1] = menu_item_new_with_submenu (rings_type[i], TRUE, add_menu_coord (view, id, 4+i)); gtk_menu_shell_append ((GtkMenuShell *)menuco, view -> ogl_rings[i+1]); } else { gtk_menu_shell_append ((GtkMenuShell *)menuco, menu_item_new_with_submenu (rings_type[i], TRUE, add_menu_coord (view, id, 4+i))); } } } } return menuco; } #else /*! \fn GMenu * color_item (glwin * view, gchar * act, int popm, int id, GCallback handler, gpointer data) \brief create a submenu to attach a color palette \param view the target glwin \param act the custom attribute to attach a widget \param popm main app (0) or popup (1) \param id id number \param handler the associated callback \param data the associated data pointer */ GMenu * color_item (glwin * view, gchar * act, int popm, int id, GCallback handler, gpointer data) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, act, act, popm, id, NULL, IMG_NONE, NULL, TRUE, NULL, NULL, FALSE, FALSE, FALSE, FALSE); append_opengl_item (view, menu, "More colors ...", act, popm, id, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_show_coord (glwin * view, int popm, int id, int mid) \brief create the coordination 'Show' or 'Color' submenus \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type \param mid 0 = show, 1 = color */ GMenu * menu_show_coord (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); GMenu * menus; project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i, j, k; for (i=0; i nspec; i++) { menus = g_menu_new (); if (this_proj -> coord) { if (this_proj -> coord -> ntg[id]) { j = 0; for (k=0; k coord -> ntg[id][k]; } for (k=0; k < this_proj -> coord -> ntg[id][i]; k++) { if (id) { stra = exact_name (env_name (this_proj, k, i, 1, NULL)); } else { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][i][k]); } if (! mid) { strb = g_strdup_printf ("%s-s", stra); append_opengl_item (view, menus, stra, strb, popm, k+j, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_coord), & view -> gcid[id][k+j][id], TRUE, view -> anim -> last -> img -> show_coord[id][k+j], FALSE, TRUE); } else { strb = g_strdup_printf ("%s-c", stra); append_submenu (menus, stra, color_item(view, strb, popm, k+j, G_CALLBACK(window_color_coord), & view -> gcid[id][k+j][id])); } g_free (stra); g_free (strb); } } } append_submenu (menu, this_proj -> chemistry -> label[i], menus); g_object_unref (menus); } return menu; } /*! \fn G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open advancedd coordination properties GTK4 callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data) { coord_properties (NULL, data); } /*! \fn GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid) \brief create a fragment/molecule coordination submenu \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type \param mid 0 = show, 1 = color */ GMenu * menu_show_frag_mol (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); if (active_coord -> totcoord[id] <= COORD_MAX_MENU) { gchar * stra, * strb; int i; for (i=0; i < this_proj -> coord -> totcoord[id]; i++) { stra = g_strdup_printf ("%s N°%d", (id == 2) ? "Fragment" : "Molecule", i+1); strb = g_strdup_printf ("%s-%d", (id == 2) ? "frag" : "mol", i+1); if (! mid) { append_opengl_item (view, menu, stra, strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_coord), & view -> gcid[id][i][id], TRUE, view -> anim -> last -> img -> show_coord[id][i], FALSE, TRUE); } else { append_submenu (menu, stra, color_item(view, (id == 2) ? "fcol": "mcol", popm, i, G_CALLBACK(window_color_coord), & view -> gcid[id][i][id])); } g_free (stra); g_free (strb); } } // append_opengl_item (view, menu, "All", "all-fm", popm, id, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[id][1], FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_show_rings (glwin * view, int popm, int id, int mid) \brief create a ring coordination submenu \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type \param mid 0 = show, 1 = color */ GMenu * menu_show_rings (glwin * view, int popm, int id, int mid) { GMenu * menu = g_menu_new (); GMenu * menus; if (! mid) { menus = g_menu_new (); append_submenu (menu, (id < 9) ? "Atoms In Ring(s) of Size " : "Atoms In Chain(s) of Size ", menus); } project * this_proj = get_project_by_id (view -> proj); gchar * rin = g_strdup_printf ("rcol-%d", id); gchar * str; int i; for (i=0; i < this_proj -> coord -> totcoord[id]; i++) { str = g_strdup_printf ("rshow-%d", this_proj -> coord -> geolist[id][0][i]); if (! mid) { append_opengl_item (view, menus, str, str, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_coord), & view -> gcid[id][i][id], TRUE, view -> anim -> last -> img -> show_coord[id][i], FALSE, TRUE); } else { append_submenu (menu, str, color_item(view, rin, popm, i, G_CALLBACK(window_color_coord), & view -> gcid[id][i][id])); } g_free (str); } g_free (rin); if (! mid) g_object_unref (menus); return menu; } /*! \fn GMenu * add_menu_coord (glwin * view, int popm, int id) \brief create a coordination type submenu \param view the target glwin \param popm main app (0) or popup (1) \param id coordination type */ GMenu * add_menu_coord (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); gchar * menu_name[2] = {"Show/Hide", "Color"}; if (is_coord_in_menu(id, this_proj)) { int i; for (i=0; i<2; i++) { if (id < 2) { append_submenu (menu, menu_name[i], menu_show_coord(view, popm, id, i)); } else if (id < 4) { append_submenu (menu, menu_name[i], menu_show_frag_mol(view, popm, id, i)); } else if (id < 10) { append_submenu (menu, menu_name[i], menu_show_rings(view, popm, id, i)); } } append_opengl_item (view, menu, "Advanced", "adv-c", popm, id, NULL, IMG_STOCK, (gpointer)DPROPERTIES, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[id][1], FALSE, FALSE, FALSE, TRUE); } return menu; } /*! \fn GMenu * menu_coord (glwin * view, int popm) \brief create the 'Coordination' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_coord (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, "Total(s)", add_menu_coord(view, popm, 0)); append_submenu (menu, "Partial(s)", add_menu_coord(view, popm, 1)); return menu; } /*! \fn GMenu * menu_rings (glwin * view, int popm) \brief create the 'Ring(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_rings (glwin * view, int popm) { GMenu * menu = g_menu_new (); if (view -> rings) { int i; for (i=0; i<5; i++) { if (view -> ring_max[i]) { append_submenu (menu, rings_type[i], add_menu_coord (view, popm, 4+i)); } } } return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_edit.c000066400000000000000000000276071457665371200177660ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_edit.c * @short Functions to create the 'Tools -> Edit' submenu * @author Sébastien Le Roux */ /* * This file: 'm_edit.c' * * Contains: * - The functions to create the 'Tools -> Edit' submenu * * List of functions: G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_run_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_cell_edit (glwin * view , int id, int j); GtkWidget * menu_edit (glwin * view, int id); GMenu * menu_cell_edit (glwin * view, int popm, int sensitive); GMenu * menu_atom_edit (glwin * view, int popm); GMenu * extract_section (glwin * view, int popm); GMenu * menu_edit (glwin * view, int popm); */ #include "cell_edit.h" #include "atom_edit.h" #ifdef GTK4 extern G_MODULE_EXPORT void crystal_window (GSimpleAction * action, GVariant * parameter, gpointer data); extern G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void crystal_window (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data); #endif #ifdef GTK4 /*! \fn G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief wrapp coordinates callback \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void wrapping_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data) \brief wrapp coordinates callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void wrapping_coord (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; wrapping (view); } #ifdef GTK3 /*! \fn GtkWidget * menu_cell_edit (glwin * view , int id, int j) \brief create the 'Edit -> Cell' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) \param j menu items sensitivity (cell + single MD step) */ GtkWidget * menu_cell_edit (glwin * view , int id, int j) { int i, k, l; GtkWidget * menu = gtk_menu_new (); if (id == 0) { for (i=0; i<6; i++) { view -> ogl_box[2+i] = create_menu_item (FALSE, edit_names[i]); if (i == 0) { g_signal_connect (G_OBJECT (view -> ogl_box[2+i]), "activate", G_CALLBACK(wrapping_coord), view); } else if (i == 3) { g_signal_connect (G_OBJECT (view -> ogl_box[2+i]), "activate", G_CALLBACK(super_cell), view); } else { k = (i < 3) ? i-1 : i-2; g_signal_connect (G_OBJECT (view -> ogl_box[2+i]), "activate", G_CALLBACK(edition_win), & view -> colorp[k][0]); } if (i > 2) widget_set_sensitive (view -> ogl_box[2+i], j); if (i == 0) widget_set_sensitive (view -> ogl_box[2+i], ! view -> wrapped); if (i == 3) { k = 0; for (l=0; l<3; l++) k += view -> anim -> last -> img-> extra_cell[l]; widget_set_sensitive (view -> ogl_box[2+i], k); } gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_box[2+i]); } } else { for (i=0; i<6; i++) { GtkWidget * widg = create_menu_item (FALSE, edit_names[i]); if (i == 0) { g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(wrapping_coord), view); } else if (i == 3) { g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(super_cell), view); } else { k = (i < 3) ? i-1 : i-2; g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(edition_win), & view -> colorp[k][0]); } if (i > 2) widget_set_sensitive (widg, j); if (i == 0) widget_set_sensitive (widg, ! view -> wrapped); if (i == 3) { k = 0; for (l=0; l<3; l++) k += view -> anim -> last -> img-> extra_cell[l]; widget_set_sensitive (widg, k); } gtk_menu_shell_append ((GtkMenuShell *)menu, widg); } } return menu; } /*! \fn GtkWidget * menu_edit (glwin * view, int id) \brief create the 'Edit' submenu GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_edit (glwin * view, int id) { int i, j; project * this_proj = get_project_by_id(view -> proj); GtkWidget * menu = gtk_menu_new (); GtkWidget * widg; if (id == 0) { view -> cbuilder = create_menu_item (FALSE, "Crystal Builder"); g_signal_connect (G_OBJECT (view -> cbuilder), "activate", G_CALLBACK(crystal_window), & view -> colorp[0][0]); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> cbuilder); } else { widg = create_menu_item (FALSE, "Crystal Builder"); g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(crystal_window), & view -> colorp[0][0]); gtk_menu_shell_append ((GtkMenuShell *)menu, widg); } j = (this_proj -> cell.ltype && this_proj -> steps == 1) ? 1 : 0; if (id == 0) { view -> ogl_box[1] = menu_item_new_with_submenu ("Cell", (this_proj -> natomes) ? this_proj -> cell.ltype : 0, menu_cell_edit(view, id, j)); gtk_menu_shell_append ((GtkMenuShell *)menu, view -> ogl_box[1]); } else { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Cell", (this_proj -> natomes) ? this_proj -> cell.ltype : 0, menu_cell_edit(view, id, j))); } GtkWidget * ats = create_menu_item (FALSE, "Atoms"); gtk_menu_shell_append ((GtkMenuShell *)menu, ats); GtkWidget * menua = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)ats, menua); j = (this_proj -> steps == 1) ? 1 : 0; for (i=0; i<5; i++) { widg = create_menu_item (TRUE, action_name[i]); g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(action_window), & view -> colorp[i][0]); gtk_menu_shell_append ((GtkMenuShell *)menua, widg); widget_set_sensitive (widg, this_proj -> nspec); widget_set_sensitive (widg, (i == 3) ? j : (this_proj -> natomes) ? j : 0); } if (id == 0) { gchar * rtext[2] = {"Extract/Rebuild on Motion", "Extract/Rebuild on Copy"}; for (i=0; i<2; i++) { view -> rbuild[i] = gtk3_menu_item (menu, rtext[i], IMG_STOCK, (gpointer)ECUT, G_CALLBACK(turn_rebuild), & view -> colorp[i][0], FALSE, 0, 0, TRUE, FALSE, view -> rebuild[i][0]); widget_set_sensitive (view -> rbuild[i], (this_proj -> steps == 1) ? 1 : 0); } } return menu; } #else /*! \fn GMenu * menu_cell_edit (glwin * view, int popm, int sensitive) \brief create the 'Edit -> Cell' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param sensitive menu items sensitivity (cell + single MD step) */ GMenu * menu_cell_edit (glwin * view, int popm, int sensitive) { GMenu * menu = g_menu_new (); gboolean sens; GCallback edit_handler[3] = {G_CALLBACK(wrapping_coord), G_CALLBACK(super_cell), G_CALLBACK(edition_win)}; int i, j, k, l; gchar * act; for (i=0; i<6; i++) { j = (i == 0) ? i : (i == 3) ? 1 : 2; if (i > 2) sens = sensitive; if (i == 0) sens = ! view -> wrapped; if (i == 3) { k = 0; for (l=0; l<3; l++) k += view -> anim -> last -> img-> extra_cell[l]; sens = k; } act = g_strdup_printf ("ceed-%d", i); if (i == 0 || i == 3) { append_opengl_item (view, menu, edit_names[i], act, popm, i, NULL, IMG_NONE, NULL, FALSE, edit_handler[j], (gpointer)view, FALSE, FALSE, FALSE, sens); } else { k = (i < 3) ? i-1 : i-2; append_opengl_item (view, menu, edit_names[i], act, popm, i, NULL, IMG_NONE, NULL, FALSE, edit_handler[j], & view -> colorp[k][0], FALSE, FALSE, FALSE, sens); } g_free (act); } return menu; } /*! \fn GMenu * menu_atom_edit (glwin * view, int popm) \brief create the 'Edit -> Atom(s)' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_atom_edit (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * act; int i, j; project * this_proj = get_project_by_id(view -> proj); j = (this_proj -> steps == 1) ? 1 : 0; for (i=0; i<5; i++) { act = g_strdup_printf ("ated-%d", i); append_opengl_item (view, menu, action_name[i], act, popm, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(action_window), & view -> colorp[i][0], FALSE, FALSE, FALSE, (i == 3) ? j : (this_proj -> natomes) ? j : 0); g_free (act); } return menu; } /*! \fn G_MODULE_EXPORT void to_run_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) \brief Extract/Rebuild menu items callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_run_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) { tint * dat =(tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; gboolean doit = TRUE; GVariant * state = g_action_get_state (G_ACTION (action)); const gchar * rebuild = g_action_get_name ((GAction *)action); int lgt = strlen (rebuild); gchar * name = g_strdup_printf ("%c%c", rebuild[lgt-2], rebuild[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, rebuild); g_action_group_activate_action ((GActionGroup *)view -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } if (doit) { turn_rebuild (NULL, NULL, data); g_action_change_state (G_ACTION (action), g_variant_new_boolean (! g_variant_get_boolean (state))); g_variant_unref (state); } } /*! \fn GMenu * extract_section (glwin * view, int popm) \brief create the 'Extract/Rebuild' menu items GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * extract_section (glwin * view, int popm) { int i; project * this_proj = get_project_by_id(view -> proj); GMenu * menu = g_menu_new (); gchar * rtext[2] = {"Extract/Rebuild on Motion", "Extract/Rebuild on Copy"}; for (i=0; i<2; i++) { append_opengl_item (view, menu, rtext[i], "aext", popm, i, NULL, IMG_STOCK, (gpointer)ECUT, FALSE, G_CALLBACK(to_run_rebuild), & view -> colorp[i][0], TRUE, view -> rebuild[i][0], FALSE, (this_proj -> steps == 1) ? 1 : 0); } return menu; } /*! \fn GMenu * menu_edit (glwin * view, int popm) \brief create the 'Edit' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_edit (glwin * view, int popm) { project * this_proj = get_project_by_id(view -> proj); GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "Crystal Builder", "cbuilder", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(crystal_window), & view -> colorp[0][0], FALSE, FALSE, FALSE, TRUE); append_submenu (menu, "Cell", menu_cell_edit(view, popm, (this_proj -> cell.ltype && this_proj -> steps == 1) ? 1 : 0)); append_submenu (menu, "Atom(s)", menu_atom_edit(view, popm)); if (! popm) g_menu_append_section (menu, NULL, (GMenuModel*)extract_section(view, popm)); return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_map.c000066400000000000000000001260361457665371200176120ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_map.c * @short Functions to create the 'OpenGL -> Color Scheme(s)' submenus \n Functions to handle custom color maps * @author Sébastien Le Roux */ /* * This file: 'm_map.c' * * Contains: * - The functions to create the 'OpenGL -> Color Scheme(s)' submenus - The functions to handle custom color maps * * List of functions: gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init); gboolean open_save_map (FILE * fp, int act, project * this_proj); gboolean use_custom_color_map (int p); void init_map_range (colormap * map, int pts); void update_color_map (); void fill_map_model (GtkTreeStore * store, project * this_proj); G_MODULE_EXPORT void set_point_position (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_point_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_cmin_max (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_custom_mize_map (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data); G_MODULE_EXPORT void edit_map_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data); G_MODULE_EXPORT void run_edit_data_map (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data); G_MODULE_EXPORT void run_open_save_data_map (GtkNativeDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void run_open_save_data_map (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void open_save_data_map (GtkWidget * but, gpointer data); G_MODULE_EXPORT void run_use_color_map (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_color_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_css_color_bar (colormap * map); GtkWidget * create_map_buttons (); GtkWidget * create_map_tree (project * this_proj); GtkWidget * mapw (glwin * view, int m, int mi, int mid, int cid, gchar * str); GtkWidget * menump (glwin * view, gchar * ncm, int mid, int id, int cid); GtkWidget * menu_map (glwin * view, int id); GMenu * menump (glwin * view, int popm, int mid, int cid); GMenu * menu_map (glwin * view, int popm); colormap * allocate_color_map (int pts, project * this_proj); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" extern const gchar * dfi[2]; gboolean cmap_changed = FALSE; GtkWidget * map_but[3]; GtkTreeStore * map_model; colormap * the_map; colormap * tmp_map; GtkWidget * vcbox; GtkWidget * vbbox; GtkWidget * color_fix; GtkWidget * color_bar; float * tmp_data; /*! \fn GtkWidget * create_css_color_bar (colormap * map) \brief create the custom color map visualization widget \param map the custom color map to visualize */ GtkWidget * create_css_color_bar (colormap * map) { GtkWidget * colob; gchar * tmp; tmp = g_strdup_printf ("rgba(%d,%d,%d,%d) 0%%", (int)(map -> values[0].red*255.0), (int)(map -> values[0].green*255.0), (int)(map -> values[0].blue*255.0), (int)map -> values[0].alpha); int i, j, k; j = (map -> positions[0] < map -> cmax) ? 0 : 1; for (i=j; i points; i++) { k = (int)(100.0*(1.0 - (map -> positions[i] - map -> cmin)/(map -> cmax - map -> cmin))); k = (i == map -> points-1 && map -> positions[i] == map -> cmin) ? 100 : k; tmp = g_strdup_printf ("%s, rgba(%d,%d,%d,%d) %d%%", tmp, (int)(map -> values[i].red*255.0), (int)(map -> values[i].green*255.0), (int)(map -> values[i].blue*255.0), (int)map -> values[i].alpha, k); } if (map -> positions[i-1] < map -> cmin) { tmp = g_strdup_printf ("%s, rgba(%d,%d,%d,%d) %d%%", tmp, (int)(map -> values[i-1].red*255.0), (int)(map -> values[i-1].green*255.0), (int)(map -> values[i-1].blue*255.0), (int)map -> values[i-1].alpha, 100); } gchar * gradient = g_strdup_printf ("image#gradient {\n" " background-image: linear-gradient(to bottom, %s);\n" " min-width: 50px;\n" " min-height: 400px;\n" "}", tmp); g_free (tmp); provide_gtk_css (gradient); colob = gtk_image_new (); gtk_widget_set_name (colob, "gradient"); gtk_widget_show (colob); //gtk_widget_set_size_request (colob, 100, 400); g_free (gradient); return colob; } /*! \fn void init_map_range (colormap * map, int pts) \brief initialize custom color map \param map the custom color map \param pts number of point(s) in the custom color map */ void init_map_range (colormap * map, int pts) { map -> points = pts; if (map -> positions != NULL) { g_free (map -> positions); map -> positions = NULL; } if (map -> values != NULL) { g_free (map -> values); map -> values = NULL; } map -> positions = allocfloat (pts); map -> values = g_malloc (pts*sizeof*map -> values); int i; for (i=0; i positions[i] = map -> cmax - i*(map -> cmax - map -> cmin)/(pts - 1.0); map -> values[i].red = 1.0 - i / (pts - 1.0); map -> values[i].green = 0.0; map -> values[i].blue = i / (pts - 1.0); map -> values[i].alpha = 1.0; } } /*! \fn colormap * allocate_color_map (int pts, project * this_proj) \brief allocate custom color map data \param pts the number of data point(s) to create \param this_proj the target project */ colormap * allocate_color_map (int pts, project * this_proj) { colormap * map = g_malloc0 (sizeof*map); map -> data = g_malloc (this_proj -> steps*sizeof*map -> data); map -> colors = g_malloc (this_proj -> steps*sizeof*map -> colors); int i; for (i=0; i steps; i++) { map -> data[i] = g_malloc0 (this_proj -> natomes*sizeof*map -> data[i]); map -> colors[i] = g_malloc0 (this_proj -> natomes*sizeof*map -> colors[i]); } return map; } /*! \fn gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init) \brief prepare the custom color map data \param data data value(s) if any \param this_proj the target project \param init initialize color map (0= no, 1= yes) */ gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init) { int i, j, k; gboolean action; float cmin, cmax; float delta; if (data != NULL) { k = 0; cmin = cmax = data[0]; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { cmin = min(cmin, data[k]); cmax = max(cmax, data[k]); k ++; } } } if (init) { gchar * str = g_strdup_printf ("Range: [min-max] = %f - %f", cmin, cmax); action = ask_yes_no ("Use this data set ?", str, GTK_MESSAGE_QUESTION, NULL); } else { action = TRUE; } if (action) { if (init) { this_proj -> modelgl -> custom_map = allocate_color_map (2, this_proj); this_proj -> modelgl -> custom_map -> points = 2; } the_map = this_proj -> modelgl -> custom_map; if (data != NULL) { the_map -> cmin = cmin; the_map -> cmax = cmax; init_map_range (the_map, the_map -> points); k = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { the_map -> data[i][j] = data[k]; k ++; } } } gboolean done; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { done = FALSE; for (k=0; k points-1; k++) { if (the_map -> data[i][j] <= the_map -> positions[k] && the_map -> data[i][j] > the_map -> positions[k+1]) { delta = (the_map -> data[i][j]-the_map -> positions[k])/(the_map -> positions[k] - the_map -> positions[k+1]); the_map -> colors[i][j].red = the_map -> values[k].red + delta * (the_map -> values[k].red - the_map -> values[k+1].red); the_map -> colors[i][j].green = the_map -> values[k].green + delta * (the_map -> values[k].green - the_map -> values[k+1].green); the_map -> colors[i][j].blue = the_map -> values[k].blue + delta * (the_map -> values[k].blue - the_map -> values[k+1].blue); the_map -> colors[i][j].alpha = 1.0; done = TRUE; } } if (! done) { if (the_map -> data[i][j] > the_map -> positions[0]) { the_map -> colors[i][j].red = the_map -> values[0].red; the_map -> colors[i][j].green = the_map -> values[0].green; the_map -> colors[i][j].blue = the_map -> values[0].blue; the_map -> colors[i][j].alpha = 1.0; } else if (the_map -> data[i][j] < the_map -> positions[the_map -> points-1]) { the_map -> colors[i][j].red = the_map -> values[the_map -> points-1].red; the_map -> colors[i][j].green = the_map -> values[the_map -> points-1].green; the_map -> colors[i][j].blue = the_map -> values[the_map -> points-1].blue; the_map -> colors[i][j].alpha = 1.0; } } } } } return action; } /*! \fn G_MODULE_EXPORT void set_point_position (GtkSpinButton * res, gpointer data) \brief update color map point position \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_point_position (GtkSpinButton * res, gpointer data) { int pts = GPOINTER_TO_INT (data); float pos = (float) gtk_spin_button_get_value (res); gboolean update = FALSE; if (pos >= tmp_map -> cmin && pos <= tmp_map -> cmax) { if (pos != tmp_map -> positions[pts]) { if (pts == 0) { update = (pos > tmp_map -> positions[1]) ? TRUE : FALSE; } else if (pts == tmp_map -> points-1) { update = (pos < tmp_map -> positions[pts-1]) ? TRUE : FALSE; } else { update = (pos < tmp_map -> positions[pts-1] && pos > tmp_map -> positions[pts+1]) ? TRUE : FALSE; } if (update) tmp_map -> positions[pts] = pos; } } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), tmp_map -> positions[pts]); destroy_this_widget (color_bar); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); } /*! \fn G_MODULE_EXPORT void set_point_color (GtkColorChooser * colob, gpointer data) \brief select color map point color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_point_color (GtkColorChooser * colob, gpointer data) { int pts = GPOINTER_TO_INT (data); tmp_map -> values[pts] =get_button_color (colob); destroy_this_widget (color_bar); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); } /*! \fn GtkWidget * create_map_buttons () \brief create custom color map position and color buttons */ GtkWidget * create_map_buttons () { GtkWidget * vbox = create_vbox(5); int i; GtkWidget * hbox; GtkWidget * fixed; for (i=0; i points; i++) { hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 0); gtk_fixed_put (GTK_FIXED(fixed), color_button(tmp_map -> values[i], FALSE, 100, 25, G_CALLBACK(set_point_color), GINT_TO_POINTER(i)), 0, 0); fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 0); gtk_fixed_put (GTK_FIXED(fixed), spin_button (G_CALLBACK(set_point_position), tmp_map -> positions[i], tmp_map -> cmin, tmp_map -> cmax, 0.01, 3, 100, GINT_TO_POINTER(i)), 0, 0); } return vbox; } /*! \fn void update_color_map () \brief update color map visualization widget */ void update_color_map () { destroy_this_widget (vbbox); vbbox = create_map_buttons (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vcbox, vbbox, FALSE, FALSE, 0); show_the_widgets (vbbox); destroy_this_widget (color_bar); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); } /*! \fn G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data) \brief add point to the custom color map \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_map_points (GtkSpinButton * res, gpointer data) { //project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); int id = gtk_spin_button_get_value_as_int (res); if (id >= 2 && id != tmp_map -> points) { init_map_range (tmp_map, id); update_color_map (); } gtk_spin_button_set_value (GTK_SPIN_BUTTON(res), tmp_map -> points); } /*! \fn G_MODULE_EXPORT void update_cmin_max (GtkEntry * res, gpointer data) \brief update color map min / max \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_cmin_max (GtkEntry * res, gpointer data) { int i; i = GPOINTER_TO_INT(data); const gchar * m = entry_get_text (res); double v = atof(m); gboolean update_cmap = FALSE; switch (i) { case 0: if (v > tmp_map -> cmin && v != tmp_map -> cmax) { tmp_map -> cmax = v; update_cmap = TRUE; } v = tmp_map -> cmax; break; case 1: if (v < tmp_map -> cmax && v != tmp_map -> cmin) { tmp_map -> cmin = v; update_cmap = TRUE; } v = tmp_map -> cmin; break; } update_entry_double(res, v); if (update_cmap) { //init_map_range (tmp_map, tmp_map -> points); update_color_map (); } } /*! \fn G_MODULE_EXPORT void run_custom_mize_map (GtkDialog * win, gint response_id, gpointer data) \brief customize the color map - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_custom_mize_map (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { project * this_proj = (project *)data; the_map -> cmax = tmp_map -> cmax; the_map -> cmin = tmp_map -> cmin; the_map -> points = tmp_map -> points; g_free (the_map -> positions); the_map -> positions = duplicate_float (the_map -> points, tmp_map -> positions); g_free (the_map -> values); the_map -> values = duplicate_color (the_map -> points, tmp_map -> values); setup_custom_color_map (NULL, this_proj, FALSE); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data) \brief customize the color map - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void custom_mize_map (GtkWidget * but, gpointer data) { project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); GtkWidget * win = dialogmodal ("Edit color map", GTK_WINDOW(this_proj -> modelgl -> win)); gtk_dialog_add_button (GTK_DIALOG(win), "Apply", GTK_RESPONSE_APPLY); gtk_widget_set_size_request (win, 300, -1); GtkWidget * vbox = dialog_get_content_area (win); tmp_map = g_malloc0 (sizeof*tmp_map); tmp_map -> cmin = the_map -> cmin; tmp_map -> cmax = the_map -> cmax; tmp_map -> points = the_map -> points; tmp_map -> positions = duplicate_float (the_map -> points, the_map -> positions); tmp_map -> values = duplicate_color (tmp_map -> points, the_map -> values); // Button for number of colors GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Number of color points for the gradient: ", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spin_button (G_CALLBACK(add_map_points), tmp_map -> points, 2, 100, 1, 0, 150, data), FALSE, FALSE, 25); // Max hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Initial value (overall max): ", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); GtkWidget * entry = create_entry (G_CALLBACK(update_cmin_max), 100, 15, FALSE, GINT_TO_POINTER(0)); update_entry_double (GTK_ENTRY(entry), (double)tmp_map -> cmax); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 25); // Min hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Final value (overall min): ", 200, -1, 0.0, 0.5), FALSE, FALSE, 5); entry = create_entry (G_CALLBACK(update_cmin_max), 100, 15, FALSE, GINT_TO_POINTER(1)); update_entry_double (GTK_ENTRY(entry), (double)tmp_map -> cmin); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 25); hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); vcbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vcbox, FALSE, FALSE, 5); vbbox = create_map_buttons (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vcbox, vbbox, FALSE, FALSE, 0); color_fix = gtk_fixed_new (); color_bar = create_css_color_bar (tmp_map); gtk_fixed_put (GTK_FIXED(color_fix), color_bar, 50, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, color_fix, FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_custom_mize_map), this_proj); } /*void map_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; j = GPOINTER_TO_INT(data); gtk_tree_model_get (mod, iter, 0, & i, -1); if (i > 0) { if (j == 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else { if (j == 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_cell_renderer_set_visible (renderer, 1); } } }*/ /*! \fn void fill_map_model (GtkTreeStore * store, project * this_proj) \brief fill color map tree strore \param store the GtkTreeStore to fill \param this_proj the target project */ void fill_map_model (GtkTreeStore * store, project * this_proj) { GtkTreeIter step_level, atom_level; int h, i, j; if (this_proj -> steps > 1) { for (h=0; h < this_proj -> steps; h++) { gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, h+1, 1, 0, 2, 0, 3, 0, -1); for (i=0; i < this_proj -> natomes; i++) { gtk_tree_store_append (store, & atom_level, & step_level); j = this_proj -> atoms[h][i].sp; gtk_tree_store_set (store, & atom_level, 0, -h-1, 1, this_proj -> chemistry -> label[j] , 2, i+1, 3, the_map -> data[h][i], -1); } } } else { for (i=0; i < this_proj -> natomes; i++) { gtk_tree_store_append (store, & atom_level, NULL); j = this_proj -> atoms[0][i].sp; gtk_tree_store_set (store, & atom_level, 0, this_proj -> chemistry -> label[j] , 1, i+1, 2, the_map -> data[0][i], -1); } } } /*! \fn G_MODULE_EXPORT void edit_map_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) \brief render color map tree store cell \param cell the GtkCellRendererText to render \param path_string the path in the tree store \param new_text \param data the associated data pointer */ G_MODULE_EXPORT void edit_map_cell (GtkCellRendererText * cell, gchar * path_string, gchar * new_text, gpointer data) { int i, j; project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (path_string); gtk_tree_model_get_iter (GTK_TREE_MODEL(map_model), & iter, path); if (this_proj -> steps > 1) { gtk_tree_model_get (GTK_TREE_MODEL(map_model), & iter, 0, & i, -1); gtk_tree_model_get (GTK_TREE_MODEL(map_model), & iter, 2, & j, -1); } else { i = -1; gtk_tree_model_get (GTK_TREE_MODEL(map_model), & iter, 1, & j, -1); } tmp_data[(-i-1)*this_proj -> natomes + j - 1] = atof(new_text); if (this_proj -> steps > 1) { gtk_tree_store_set (map_model, & iter, 3, tmp_data[(-i-1)*this_proj -> natomes + j - 1], -1); } else { gtk_tree_store_set (map_model, & iter, 2, tmp_data[(-i-1)*this_proj -> natomes + j - 1], -1); } } /*! \fn GtkWidget * create_map_tree (project * this_proj) \brief create color map tree view \param this_proj the target project */ GtkWidget * create_map_tree (project * this_proj) { int i, j, k; GtkTreeViewColumn * map_col[4]; GtkCellRenderer * map_cell[4]; gchar * ctitle[4]={"MD. step", "Element", "Id.", "Value"}; gchar * ctype[4]={"text", "text", "text", "text"}; GType col_type[2][4]= {{G_TYPE_STRING, G_TYPE_INT, G_TYPE_FLOAT}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_INT, G_TYPE_FLOAT}}; j = (this_proj -> steps > 1) ? 1: 0; k = (this_proj -> steps > 1) ? 0: 1; map_model = gtk_tree_store_newv (3+j, col_type[j]); fill_map_model (map_model, this_proj); GtkWidget * map_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(map_model)); for (i=0; i<3+j; i++) { map_cell[i] = gtk_cell_renderer_text_new (); map_col[i] = gtk_tree_view_column_new_with_attributes (ctitle[i+k], map_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(map_tree), map_col[i]); gtk_tree_view_column_set_alignment (map_col[i], 0.5); //gtk_tree_view_column_set_cell_data_func (map_col[i], map_cell[i], map_set_visible, GINT_TO_POINTER(i), NULL); if (i == 2+j) { g_object_set (map_cell[i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(map_cell[i]), "edited", G_CALLBACK(edit_map_cell), GINT_TO_POINTER(this_proj -> id)); } } return map_tree; } /*! \fn G_MODULE_EXPORT void run_edit_data_map (GtkDialog * win, gint response_id, gpointer data) \brief edit color map - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_edit_data_map (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); setup_custom_color_map (tmp_data, this_proj, FALSE); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } g_free (tmp_data); destroy_this_dialog (win); } /*! \fn G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data) \brief edit color map - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_data_map (GtkWidget * but, gpointer data) { project * this_proj = get_project_by_id(GPOINTER_TO_INT(data)); GtkWidget * win = dialogmodal ("Edit color map data", GTK_WINDOW(this_proj -> modelgl -> win)); gtk_dialog_add_button (GTK_DIALOG(win), "Apply", GTK_RESPONSE_APPLY); gtk_widget_set_size_request (win, 250, 600); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * maps = create_scroll(NULL, -1, -1, GTK_SHADOW_NONE); tmp_data = allocfloat(this_proj -> natomes*this_proj -> steps); int i, j, k; k = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { tmp_data[k] = the_map -> data[i][j]; k ++; } } add_container_child (CONTAINER_SCR, maps, create_map_tree (this_proj)); gtk_widget_set_size_request (maps, -1, 550); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, maps, FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_edit_data_map), data); } /*! \fn gboolean open_save_map (FILE * fp, int act, project * this_proj) \brief open or save a custom color map to file \param fp the file pointer \param act action (0 = read, 1 = write) \param this_proj the target project */ gboolean open_save_map (FILE * fp, int act, project * this_proj) { int i, j; if (act == 0) { float * tmp_map = allocfloat(this_proj -> natomes*this_proj -> steps); rewind (fp); for (i=0; i natomes*this_proj -> steps; i++) { if (fscanf (fp, "%f", & tmp_map[i]) != 1) { show_error ("Wrong file format !\n Expecting only a single column file\n" " with Ns x Na lines, with:\n" " - Ns = number of MD steps\n" " - Na = number of atoms", 0, this_proj -> modelgl -> win); g_free (tmp_map); cmap_changed = FALSE; return FALSE; } } cmap_changed = setup_custom_color_map (tmp_map, this_proj, TRUE); g_free (tmp_map); widget_set_sensitive (map_but[1], cmap_changed); widget_set_sensitive (map_but[2], cmap_changed); return TRUE; } else { cmap_changed = FALSE; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (fprintf (fp, "%f\n", this_proj -> modelgl -> custom_map -> data[i][j]) < 0) { show_error ("Error while saving custom color map", 0, this_proj -> modelgl -> win); return FALSE; } } } return TRUE; } } dint osmap; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void run_open_save_data_map (GtkNativeDialog * info, gint response_id, gpointer data) \brief open / save color map data - running the dialog GTK4 \param info the GtkNativeDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_open_save_data_map (GtkNativeDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkFileChooserNative *)info); #else /*! \fn G_MODULE_EXPORT void run_open_save_data_map (GtkDialog * info, gint response_id, gpointer data) \brief open / save color map data - running the dialog GTK3 \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_open_save_data_map (GtkDialog * info, gint response_id, gpointer data) { GtkFileChooser * chooser = GTK_FILE_CHOOSER((GtkWidget *)info); #endif gboolean status = FALSE; gchar * datafile; FILE * fp; switch (response_id) { case GTK_RESPONSE_ACCEPT: datafile = file_chooser_get_file_name (chooser); fp = fopen (datafile, dfi[osmap.b]); if (fp != NULL) { status = open_save_map (fp, osmap.b, get_project_by_id(osmap.a)); } else { status = FALSE; } fclose (fp); break; default: status = TRUE; break; } if (status) { #ifdef GTK4 destroy_this_native_dialog (info); #else destroy_this_dialog (info); #endif } } /*! \fn G_MODULE_EXPORT void open_save_data_map (GtkWidget * but, gpointer data) \brief open / save color map data - creating the dialog \param but the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void open_save_data_map (GtkWidget * but, gpointer data) { GtkFileFilter * filter1, * filter2; const gchar * res[2] = {"Open", "Save"}; GtkFileChooserAction act[2] = {GTK_FILE_CHOOSER_ACTION_OPEN, GTK_FILE_CHOOSER_ACTION_SAVE}; gchar * title[2] = {"Opening custom map for ", "Saving custom map for "}; osmap.a = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id(osmap.a); gchar * str; gboolean open_save = FALSE; if (the_map != NULL) { str = g_strdup_printf ("Do you want to save the color map data"); open_save = ask_yes_no ("Save color map data to file ?", str, GTK_MESSAGE_QUESTION, this_proj -> modelgl -> win); g_free (str); if (open_save) { osmap.b = 1; } else { str = g_strdup_printf ("Do you want to read new color map data"); open_save = ask_yes_no ("Read color map data from file ?", str, GTK_MESSAGE_QUESTION, this_proj -> modelgl -> win); g_free (str); osmap.b = 0; } } else { osmap.b = 0; open_save = TRUE; } if (open_save) { #ifdef GTK4 GtkFileChooserNative * info; #else GtkWidget * info; #endif str = g_strdup_printf ("%s%s", title[osmap.b], prepare_for_title(this_proj -> name)); info = create_file_chooser (str, GTK_WINDOW(MainWindow), act[osmap.b], res[osmap.b]); GtkFileChooser * chooser = GTK_FILE_CHOOSER(info); g_free (str); #ifdef GTK3 if (osmap.b == 1) gtk_file_chooser_set_do_overwrite_confirmation (chooser, TRUE); #endif file_chooser_set_current_folder (chooser); filter1 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter1), "Raw data (*.dat)"); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter1), "*.dat"); gtk_file_chooser_add_filter (chooser, filter1); filter2 = gtk_file_filter_new(); gtk_file_filter_set_name (GTK_FILE_FILTER(filter2), "All files (*)"); gtk_file_filter_add_pattern (GTK_FILE_FILTER(filter2), "*"); gtk_file_chooser_add_filter (chooser, filter2); #ifdef GTK4 run_this_gtk_native_dialog ((GtkNativeDialog *)info, G_CALLBACK(run_open_save_data_map), NULL); #else run_this_gtk_dialog (info, G_CALLBACK(run_open_save_data_map), NULL); #endif } } gboolean res_use_map; /*! \fn G_MODULE_EXPORT void run_use_color_map (GtkDialog * win, gint response_id, gpointer data) \brief use custom color map - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_use_color_map (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { res_use_map = (cmap_changed || the_map != NULL) ? TRUE : FALSE; } else { res_use_map = the_map != NULL ? TRUE : FALSE; } destroy_this_dialog (win); } /*! \fn gboolean use_custom_color_map (int p) \brief use custom color map - creating the dialog \param p the target project id */ gboolean use_custom_color_map (int p) { project * this_proj = get_project_by_id(p); GtkWidget * win = dialogmodal ("Custom color map settings", GTK_WINDOW(this_proj -> modelgl -> win)); gtk_dialog_add_button (GTK_DIALOG(win), "Apply", GTK_RESPONSE_APPLY); GtkWidget * vbox = dialog_get_content_area (win); gchar * btitle[3] = {"Import / Save data", "Edit data", "Customize color map"}; gchar * bimage[3] = {FOPEN, EDITA, EDITA}; GCallback handlers[3] = {G_CALLBACK(open_save_data_map), G_CALLBACK(edit_data_map), G_CALLBACK(custom_mize_map)}; int i; for (i=0; i<3; i++) { map_but[i] = create_button (btitle[i], IMG_STOCK, bimage[i], 150, 50, GTK_RELIEF_NORMAL, handlers[i], GINT_TO_POINTER(p)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, map_but[i], FALSE, FALSE, 10); if (i > 0 && the_map == NULL) { widget_set_sensitive (map_but[i], 0); } } run_this_gtk_dialog (win, G_CALLBACK(run_use_color_map), NULL); // res_use_map is updated when running the dialog return res_use_map; } /*! \fn G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data) \brief set color map callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data) { tint * the_data = (tint *) data; project * this_proj = get_project_by_id(the_data -> a); the_map = this_proj -> modelgl -> custom_map; int i, j, k, l; j = the_data -> b; k = j / ATOM_MAPS; i = this_proj -> modelgl -> anim -> last -> img -> color_map[k]; l = j - k*ATOM_MAPS; #ifdef GTK3 if (i != l && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #else if (i != l) #endif { gboolean change_map = TRUE; gboolean didit = FALSE; if (j == 6 && ! the_map && ! k) { change_map = use_custom_color_map (the_data -> a); didit = TRUE; } else if (j == 6 && k && ! the_map) { change_map = FALSE; } if (change_map) { this_proj -> modelgl -> anim -> last -> img -> color_map[k] = NONE; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[k*ATOM_MAPS+i], FALSE); if (j == 6) widget_set_sensitive (this_proj -> modelgl -> color_styles[ATOM_MAPS+POLY_MAPS-1], TRUE); if (widg != this_proj -> modelgl -> color_styles[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> color_map[k] = l; if (k == 0) { int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } else { int shaders[1] = {POLYS}; re_create_md_shaders (1, shaders, this_proj); } update (this_proj -> modelgl); if (j == 6 && ! didit && ! reading_input && ! k) use_custom_color_map (the_data -> a); } } #ifdef GTK3 else if (k*ATOM_MAPS+i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> color_styles[j], TRUE); } #endif } #ifdef GTK3 /*! \fn GtkWidget * mapw (glwin * view, int m, int mi, int mid, int cid, gchar * str) \brief create a color map menu item \param view the target glwin \param m main app (0) or popup (1) \param mi the object (0 = atoms, 1 = polyhedra) \param mid the menu item id in [0, ATOM_MAPS-1] \param cid the active color map for object \param str the label of the menu item */ GtkWidget * mapw (glwin * view, int m, int mi, int mid, int cid, gchar * str) { int v = mi*ATOM_MAPS + mid; if (m == 0) { view -> color_styles[v] = gtk3_menu_item (NULL, str, IMG_NONE, NULL, G_CALLBACK(set_color_map), & view -> colorp[v][0], FALSE, 0, 0, TRUE, TRUE, (cid == mid) ? TRUE : FALSE); if ((mi && (! view -> bonding || ! view -> custom_map)) || (mid == 3 && ! view -> adv_bonding[0]) || (mid == 4 && ! view -> adv_bonding[1]) || (mid == 5 && ! get_project_by_id(view -> proj) -> force_field[0])) { widget_set_sensitive (view -> color_styles[v], 0); } return view -> color_styles[v]; } else { GtkWidget * ats = gtk3_menu_item (NULL, str, IMG_NONE, NULL, G_CALLBACK(set_color_map), & view -> colorp[v][0], FALSE, 0, 0, TRUE, TRUE, (cid == mid) ? TRUE : FALSE); if ((mi && (! view -> bonding || ! view -> custom_map)) || (mid == 3 && ! view -> adv_bonding[0]) || (mid == 4 && ! view -> adv_bonding[1]) || (mid == 5 && ! get_project_by_id(view -> proj) -> force_field[0])) { widget_set_sensitive (ats, 0); } return ats; } } /*! \fn GtkWidget * menump (glwin * view, gchar * ncm, int mid, int id, int cid) \brief create the 'Color Scheme(s) - > *' submenus - GTK3 \param view the target glwin \param ncm menu item label for object \param mid the object (0 = atoms, 1 = polyhedra) \param id main app (0) or popup (1) \param cid the active color map for object */ GtkWidget * menump (glwin * view, gchar * ncm, int mid, int id, int cid) { GtkWidget * map = create_menu_item (TRUE, ncm); GtkWidget * mapm = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)map, mapm); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 0, cid, "Atomic Species")); GtkWidget * cp = create_menu_item (FALSE, "Atomic Coordination"); gtk_menu_shell_append ((GtkMenuShell *)mapm, cp); GtkWidget * mapn = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)cp, mapn); gtk_menu_shell_append ((GtkMenuShell *)mapn, mapw(view, mid, id, 1, cid, "Total")); gtk_menu_shell_append ((GtkMenuShell *)mapn, mapw(view, mid, id, 2, cid, "Partial")); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 3, cid, "Fragment(s)")); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 4, cid, "Molecule(s)")); gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 5, cid, "Force Field (DL_POLY)")); if (id == 0) { gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 6, cid, "Custom")); } else { gtk_menu_shell_append ((GtkMenuShell *)mapm, mapw(view, mid, id, 6, cid, "Use Atom(s) Custom Map")); } return map; } /*! \fn GtkWidget * menu_map (glwin * view, int id) \brief create the 'OpenGL -> Color Scheme(s)' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_map (glwin * view, int id) { GtkWidget * menum = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menum, menump(view, "Atoms & bonds", id, 0, view -> anim -> last -> img -> color_map[0])); gtk_menu_shell_append ((GtkMenuShell *)menum, menump(view, "Polyhedra", id, 1, view -> anim -> last -> img -> color_map[1])); widget_set_sensitive (menum, get_project_by_id(view -> proj) -> nspec); return menum; } #else /*! \fn G_MODULE_EXPORT void change_color_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change color map callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void change_color_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * color = g_variant_get_string (parameter, NULL); int lgt = strlen (color); gchar * name = g_strdup_printf ("%c%c", color[lgt-2], color[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s", 8, color); if (g_strcmp0(name, "set-amap") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, color); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-amap", g_variant_new_string((const gchar *)name)); } else { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, color); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-pmap", g_variant_new_string((const gchar *)name)); } g_free (name); } else { int i; gchar * dot = g_strdup_printf ("%c", color[lgt-4]); gchar * col; if (g_strcmp0(dot, ".") == 0) { col = g_strdup_printf ("%c", color[lgt-3]); } else { col = g_strdup_printf ("%c%c", color[lgt-4], color[lgt-3]); } i = (int)atof(col); set_color_map (NULL, & view -> colorp[i][0]); g_free (dot); g_free (col); g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * menump (glwin * view, int popm, int mid, int cid) \brief create the 'Color Scheme(s) - > *' submenus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param mid the object (0 = atoms, 1 = polyhedra) \param cid the active color map for object */ GMenu * menump (glwin * view, int popm, int mid, int cid) { gchar * mapname[2] = {"amap", "pmap"}; gboolean sensitive; GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "Atomic Species", mapname[mid], popm, mid*ATOM_MAPS, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 0) ? TRUE : FALSE, TRUE, TRUE); GMenu * menuf = g_menu_new (); append_opengl_item (view, menuf, "Total(s)", mapname[mid], popm, mid*ATOM_MAPS+1, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 1) ? TRUE : FALSE, TRUE, TRUE); append_opengl_item (view, menuf, "Partial(s)", mapname[mid], popm, mid*ATOM_MAPS+2, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 2) ? TRUE : FALSE, TRUE, TRUE); append_submenu (menu, "Atomic Coordinations", menuf); g_object_unref (menuf); sensitive = view -> adv_bonding[0]; append_opengl_item (view, menu, "Fragment(s)", mapname[mid], popm, mid*ATOM_MAPS+3, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 3) ? TRUE : FALSE, TRUE, sensitive); sensitive = view -> adv_bonding[1]; append_opengl_item (view, menu, "Molecule(s)", mapname[mid], popm, mid*ATOM_MAPS+4, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 4) ? TRUE : FALSE, TRUE, sensitive); sensitive = (get_project_by_id(view -> proj) -> force_field[0]) ? TRUE : FALSE; append_opengl_item (view, menu, "Force Field (DL_POLY)", mapname[mid], popm, mid*ATOM_MAPS+5, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 5) ? TRUE : FALSE, TRUE, sensitive); sensitive = (! mid) ? TRUE : (view -> custom_map) ? TRUE : FALSE; append_opengl_item (view, menu, (! mid) ? "Custom" : "Use Atom(s) Custom Map", mapname[mid], popm, mid*ATOM_MAPS+6, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_color_radio), (gpointer)view, FALSE, (cid == 6) ? TRUE : FALSE, TRUE, sensitive); return menu; } /*! \fn GMenu * menu_map (glwin * view, int popm) \brief create the 'OpenGL -> Color Scheme(s)' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_map (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, "Atoms & Bonds", menump(view, popm, 0, view -> anim -> last -> img -> color_map[0])); append_submenu (menu, "Polyhedra", menump(view, popm, 1, view -> anim -> last -> img -> color_map[1])); return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_poly.c000066400000000000000000000367271457665371200200270ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_poly.c * @short Functions to create the 'Chemistry -> Polyhedra' submenus * @author Sébastien Le Roux */ /* * This file: 'm_poly.c' * * Contains: * - The functions to create the 'Chemistry -> Polyhedra' submenus * * List of functions: G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data); GtkWidget * mpoly (glwin * view, int jd, int id); GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln); GtkWidget * menu_poly (glwin * view, int id); GMenu * menu_show_coord_poly (glwin * view, int popm, int id); GMenu * menu_show_rings_poly (glwin * view, int popm, int id); GMenu * add_menu_poly (glwin * view, int popm, int aid); GMenu * menu_poly_rings (glwin * view, int popm); GMenu * menu_poly (glwin * view, int popm); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data); /*! \fn G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide polyhedra callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_poly (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data) \brief show / hide polyhedra callback - GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_poly (GtkWidget * widg, gpointer data) #endif { qint * obj = (qint *)data; int i, j; gboolean doit = TRUE; gboolean show; project * this_proj = get_project_by_id(obj -> a); int s = obj -> b; int c = obj -> c; int g = obj -> d; j = c; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } #ifdef DEBUG g_debug ("SHOW_HIDE_POLY:: p= %d, s= %d, c= %d, g= %d", this_proj -> id, s, c, g); #endif #ifdef GTK4 GVariant * state; if (action) { state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); const gchar * poly = g_action_get_name ((GAction *)action); int lgt = strlen (poly); gchar * name = g_strdup_printf ("%c%c", poly[lgt-2], poly[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, poly); g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); doit = FALSE; } } else { show = this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j]; } #else show = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); #endif #ifdef GTK3 // GTK3 Menu Action To Check if (is_coord_in_menu(g, this_proj)) { for (i=0; i<2; i++) { if (widg != this_proj -> modelgl -> ogl_poly[i][g][j]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_poly[i][g][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[i][g][j]) != show) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[i][g][j], show); } } } } } #endif if (doit) { this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j] = show; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); #ifdef GTK4 if (action) { g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); } #endif } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data) \brief cloned polyehdra callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void cloned_poly (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data) \brief cloned polyehdra callback - GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; gboolean doit = TRUE; gboolean show; #ifdef GTK4 const gchar * name = g_action_get_name ((GAction *)action); if (g_strcmp0(name, "set-cloned-poly.1.1") == 0) { g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-cloned-poly.0.0", NULL); doit = FALSE; } #endif if (doit) { #ifdef GTK4 GVariant * state; state = g_action_get_state (G_ACTION (action)); show = ! g_variant_get_boolean (state); #else show = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); if (widg != view -> ogl_clones[5]) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[5], show); #endif view -> anim -> last -> img -> cloned_poly = show; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, get_project_by_id(view -> proj)); update (view); #ifdef GTK4 g_action_change_state (G_ACTION (action), g_variant_new_boolean (show)); g_variant_unref (state); #endif } } #ifdef GTK3 /*! \fn GtkWidget * mpoly (glwin * view, int jd, int id) \brief update the 'Polyhedra -> * -> Show/Hide' subemnus - GTK3 \param view the target glwin \param jd main app (0) or popup (1) \param id the type of coordination */ GtkWidget * mpoly (glwin * view, int jd, int id) { int i, j; project * this_proj = get_project_by_id(view -> proj); GtkWidget * menup = gtk_menu_new (); if (is_coord_in_menu(id, this_proj)) { GtkWidget * pshow = create_menu_item (FALSE, "Show/Hide"); GtkWidget * widg; gtk_menu_shell_append ((GtkMenuShell *)menup, pshow); GtkWidget * menus = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)pshow, menus); j = (id < 2) ? this_proj -> nspec : this_proj -> coord -> totcoord[id]; for (i=0; i oglmpv[jd][id][i])) { widg = gtk_widget_get_parent (view -> oglmpv[jd][id][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> oglmpv[jd][id][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> oglmpv[jd][id][i]); } gtk_menu_shell_append ((GtkMenuShell *)menus, view -> oglmpv[jd][id][i]); } } else { if (GTK_IS_WIDGET(view -> ogl_poly[jd][id][i])) { widg = gtk_widget_get_parent (view -> ogl_poly[jd][id][i]); if (GTK_IS_WIDGET(widg)) { g_object_ref (view -> ogl_poly[jd][id][i]); gtk_container_remove (GTK_CONTAINER(widg), view -> ogl_poly[jd][id][i]); } gtk_menu_shell_append ((GtkMenuShell *)menus, view -> ogl_poly[jd][id][i]); } } } } add_advanced_item (menup, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[id][0], FALSE, 0, 0); return menup; } /*! \fn GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln) \brief update the polyhedra submenus - GTK3 \param view the target glwin \param jd main app (0) or popup (1) \param id the type of coordination: total (0), partial (1), rings (2) \param poln the label of the menu item */ GtkWidget * menupoly (glwin * view, int jd, int id, gchar * poln) { int i; GtkWidget * item; if (id > 1) { GtkWidget * menui = gtk_menu_new (); if (view -> rings) { for (i=0; i<5; i++) { if (view -> ring_max[i]) { if (jd == 0) { view -> ogl_rings[7+i] = create_menu_item (TRUE, rings_type[i]); gtk_menu_item_set_submenu ((GtkMenuItem *)view -> ogl_rings[7+i], mpoly(view, jd, 4+i)); gtk_menu_shell_append ((GtkMenuShell *)menui, view -> ogl_rings[7+i]); } else { item = create_menu_item (TRUE, rings_type[i]); gtk_menu_shell_append ((GtkMenuShell *)menui, item); gtk_menu_item_set_submenu ((GtkMenuItem *)item, mpoly(view, jd, 4+i)); } } } } return menui; } else { GtkWidget * poly = create_menu_item (TRUE, poln); gtk_menu_item_set_submenu ((GtkMenuItem *)poly, mpoly (view, jd, id)); return poly; } } /*! \fn GtkWidget * menu_poly (glwin * view, int id) \brief create the 'Chemistry -> Polyehdra' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_poly (glwin * view, int id) { GtkWidget * menup = gtk_menu_new (); gtk_menu_shell_append ((GtkMenuShell *)menup, menupoly(view, id, 0, "Total Coordination(s)")); gtk_menu_shell_append ((GtkMenuShell *)menup, menupoly(view, id, 1, "Partial Coordination(s)")); if (id == 0) { gtk_menu_shell_append ((GtkMenuShell *)menup, view -> ogl_rings[6]); widget_set_sensitive (view -> ogl_rings[6], view -> rings); view -> ogl_clones[5] = gtk3_menu_item (menup, "Cloned Polyhedra", IMG_NONE, NULL, G_CALLBACK(cloned_poly), view, FALSE, 0, 0, TRUE, FALSE, view -> anim -> last -> img -> cloned_poly); } else { GtkWidget * item = create_menu_item (FALSE, "Ring(s)"); gtk_menu_item_set_submenu ((GtkMenuItem *)item, menupoly(view, id, 2, NULL)); gtk_menu_shell_append ((GtkMenuShell *)menup, item); widget_set_sensitive (item, view -> rings); GtkWidget * cloned_p = gtk3_menu_item (menup, "Cloned Polyhedra", IMG_NONE, NULL, G_CALLBACK(cloned_poly), view, FALSE, 0, 0, TRUE, FALSE, view -> anim -> last -> img -> cloned_poly); widget_set_sensitive ((cloned_p), get_project_by_id(view -> proj) -> cell.pbc); } return menup; } #else /*! \fn GMenu * menu_show_coord_poly (glwin * view, int popm, int id) \brief create the 'Polyedra -> Coordination -> Show/Hide' submenus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param id the coordination type: total (0) or partial (1) */ GMenu * menu_show_coord_poly (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); GMenu * menus; project * this_proj = get_project_by_id (view -> proj); gchar * stra, * strb; int i, j, k; for (i=0; i nspec; i++) { j = 0; menus = g_menu_new (); if (this_proj -> coord) { if (this_proj -> coord -> ntg[id]) { for (k=0; k coord -> ntg[id][k]; } for (k=0; k < this_proj -> coord -> ntg[id][i]; k++) { if (id) { stra = exact_name (env_name (this_proj, k, i, 1, NULL)); } else { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][i][k]); } strb = g_strdup_printf ("%s-%d-p", stra, id); append_opengl_item (view, menus, stra, strb, popm, k+j, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_poly), & view -> gcid[id][k+j][id], TRUE, view -> anim -> last -> img -> show_poly[id][k+j], FALSE, TRUE); g_free (stra); g_free (strb); } } } append_submenu (menu, this_proj -> chemistry -> label[i], menus); g_object_unref (menus); } return menu; } /*! \fn GMenu * menu_show_rings_poly (glwin * view, int popm, int id) \brief create the 'Rings(s) -> Show/Hide' subemnus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param id the ring(s) type */ GMenu * menu_show_rings_poly (glwin * view, int popm, int id) { GMenu * menu = g_menu_new (); project * this_proj = get_project_by_id (view -> proj); if (this_proj -> coord) { int i; gchar * stra, * strb; for (i=0; i coord -> totcoord[id]; i++) { stra = g_strdup_printf ("%d", this_proj -> coord -> geolist[id][0][i]); strb = g_strdup_printf ("%s-p", stra); append_opengl_item (view, menu, stra, strb, popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(show_hide_poly), & view -> gcid[id][i][id], TRUE, view -> anim -> last -> img -> show_poly[id][i], FALSE, TRUE); g_free (stra); g_free (strb); } } return menu; } /*! \fn GMenu * add_menu_poly (glwin * view, int popm, int aid) \brief create the 'Show/Hide' polyhedra subemnus - GTK4 \param view the target glwin \param popm main app (0) or popup (1) \param aid coordination id */ GMenu * add_menu_poly (glwin * view, int popm, int aid) { GMenu * menu = g_menu_new (); if (aid < 2) { append_submenu (menu, "Show/Hide", menu_show_coord_poly (view, popm, aid)); } else { append_submenu (menu, "Show/Hide", menu_show_rings_poly (view, popm, aid)); } append_opengl_item (view, menu, "Advanced", "adv-p", popm, aid, NULL, IMG_STOCK, (gpointer)DPROPERTIES, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[aid][0], FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_poly_rings (glwin * view, int popm) \brief create the 'Polyhedra -> Ring(s)' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_poly_rings (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i; for (i=0; i<5; i++) { if (view -> ring_max[i]) { append_submenu (menu, rings_type[i], add_menu_poly(view, popm, 4+i)); } } return menu; } /*! \fn GMenu * menu_poly (glwin * view, int popm) \brief create the 'Chemistry -> Polyehdra' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_poly (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, "Total Coordination(s)", add_menu_poly (view, popm, 0)); append_submenu (menu, "Partial Coordination(s)", add_menu_poly (view, popm, 1)); if (view -> rings) { append_submenu (menu, "Rings(s)", menu_poly_rings (view, popm)); } else { append_menu_item (menu, "Ring(s)", "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } append_opengl_item (view, menu, "Cloned Polyhedra", "cloned-poly", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(cloned_poly), view, TRUE, view -> anim -> last -> img -> cloned_poly, FALSE, view -> allbonds[1]); return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_proj.c000066400000000000000000000123471457665371200200060ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_proj.c * @short Functions to create the 'View -> Projection' submenu * @author Sébastien Le Roux */ /* * This file: 'm_proj.c' * * Contains: * - The functions to create the 'View -> Projection' submenu * * List of functions: G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_proj (glwin * view); GMenu * menu_proj (glwin * view, int popm); */ #include "global.h" #include "glview.h" #include "glwindow.h" /*! \enum position */ enum position { RIGHT = 0, /*!< 0 */ LEFT = 1, /*!< 1 */ TOP = 2, /*!< 2 */ BOTTOM = 3, /*!< 3 */ FRONT = 4, /*!< 4 */ BACK = 5 /*!< 5 */ }; /*! \fn G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data) \brief set camera position callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_camera_pos (GtkWidget * widg, gpointer data) { tint * id = (tint *)data; double angle_x, angle_y; switch (id -> b) { case RIGHT: angle_x = 0.0; angle_y = -90.0; break; case LEFT: angle_x = 0.0; angle_y = 90.0; break; case TOP: angle_x = 90.0; angle_y = 0.0; break; case BOTTOM: angle_x = -90.0; angle_y = 0.0; break; case FRONT: angle_x = 0.0; angle_y = 0.0; break; case BACK: angle_x = 0.0; angle_y = 180.0; break; } vec4_t q_a, q_b; vec3_t axis; axis.x = 0.0; axis.y = 1.0; axis.z = 0.0; q_a = axis_to_quat (axis, -pi*angle_y/180.0); axis.x = 1.0; axis.y = 0.0; axis.z = 0.0; q_b = axis_to_quat (axis, -pi*angle_x/180.0); get_project_by_id(id -> a) -> modelgl -> anim -> last -> img -> rotation_quaternion = q4_mul (q_a, q_b); update (get_project_by_id(id -> a) -> modelgl); } #ifdef GTK3 /*! \fn GtkWidget * menu_proj (glwin * view) \brief create the 'View -> Projection' submenu - GTK3 \param view the target glwin */ GtkWidget * menu_proj (glwin * view) { GtkWidget * menup = gtk_menu_new (); GtkWidget * r = create_menu_item (FALSE, "Right [1, 0, 0]"); g_signal_connect (G_OBJECT (r), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[RIGHT][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, r); GtkWidget * l = create_menu_item (FALSE, "Left [-1, 0, 0]"); g_signal_connect (G_OBJECT (l), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[LEFT][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, l); GtkWidget * t = create_menu_item (FALSE, "Top [0, 1, 0]"); g_signal_connect (G_OBJECT (t), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[TOP][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, t); GtkWidget * b = create_menu_item (FALSE, "Bottom [0, -1, 0]"); g_signal_connect (G_OBJECT (b), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[BOTTOM][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, b); GtkWidget * f = create_menu_item (FALSE, "Front [0, 0, 1]"); g_signal_connect (G_OBJECT (f), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[FRONT][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, f); GtkWidget * a = create_menu_item (FALSE, "Back [0, 0, -1]"); g_signal_connect (G_OBJECT (a), "activate", G_CALLBACK(set_camera_pos), & view -> colorp[BACK][0]); gtk_menu_shell_append ((GtkMenuShell *)menup, a); return menup; } #else /*! \fn G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data) \brief set camera position callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_set_camera_pos (GSimpleAction * action, GVariant * parameter, gpointer data) { set_camera_pos (NULL, data); } /*! \fn GMenu * menu_proj (glwin * view, int popm) \brief create the 'View -> Projection' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_proj (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * projection[6]={"Right [1, 0, 0]", "Left [-1, 0, 0]", "Top [0, 1, 0]", "Bottom [0, -1, 0]", "Front [0, 0, 1]", "Back [0, 0, -1]"}; int i; for (i=0; i<6; i++) { append_opengl_item (view, menu, projection[i], "proj", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_set_camera_pos), & view -> colorp[i][0], FALSE, FALSE, FALSE, TRUE); } return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_quality.c000066400000000000000000000131441457665371200205200ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_quality.c * @short Functions to create the 'OengGL -> Quality' submenu * @author Sébastien Le Roux */ /* * This file: 'm_quality.c' * * Contains: * - The functions to create the 'OengGL -> Quality' submenu * * List of functions: void set_quality (int q, glwin * view); G_MODULE_EXPORT void set_quality_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void window_quality (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_window_quality (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_quality (glwin * view, int id); GMenu * menu_quality (glwin * view, int popm); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" /*! \fn void set_quality (int q, glwin * view) \brief set OpenGL quality \param q new OpenGL quality \param view the target glwin */ void set_quality (int q, glwin * view) { view -> anim -> last -> img -> quality = q; init_default_shaders (view); view -> create_shaders[MDBOX] = TRUE; view -> create_shaders[MAXIS] = TRUE; update (view); #ifdef GTK3 gtk_range_set_value (GTK_RANGE(view -> ogl_quality), view -> anim -> last -> img -> quality); #endif } /*! \fn G_MODULE_EXPORT void set_quality_spin (GtkSpinButton * res, gpointer data) \brief set quality spin button callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_quality_spin (GtkSpinButton * res, gpointer data) { glwin * view = (glwin *)data; set_quality (gtk_spin_button_get_value_as_int(res), view); update_entry_int (GTK_ENTRY(res), view -> anim -> last -> img -> quality); } /*! \fn G_MODULE_EXPORT void window_quality (GtkWidget * widg, gpointer data) \brief adjust OpenGL quality - creating the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_quality (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; GtkWidget * win = dialogmodal ("Render Quality", GTK_WINDOW(view -> win)); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new ("Quality [2-1000]: "), TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, spin_button (G_CALLBACK(set_quality_spin), view -> anim -> last -> img -> quality, 2.0, 1000.0, 1.0, 0, 100, data), FALSE, FALSE, 10); add_gtk_close_event (win, G_CALLBACK(destroy_this_window), NULL); show_the_widgets (vbox); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); #ifdef GTK3 // GTK3 Menu Action To Check gtk_range_set_value (GTK_RANGE(view -> ogl_quality), view -> anim -> last -> img -> quality); #else update_menu_bar (view); #endif } #ifdef GTK3 /*! \fn GtkWidget * menu_quality (glwin * view, int id) \brief create the 'OpenGL -> Quality' menu item - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_quality (glwin * view, int id) { GtkWidget * menuq = gtk_menu_new (); GtkWidget * fixed = gtk_fixed_new (); if (id == 0) { view -> ogl_quality = create_hscale (2.0, 1000.0, 1.0, view -> anim -> last -> img -> quality, GTK_POS_RIGHT, 0, 100, NULL, NULL, NULL); gtk_fixed_put (GTK_FIXED(fixed), view -> ogl_quality, 0, 0); } else { GtkWidget * qscale = create_hscale (2.0, 1000.0, 1.0, view -> anim -> last -> img -> quality, GTK_POS_RIGHT, 0, 100, NULL, NULL, NULL); gtk_fixed_put (GTK_FIXED(fixed), qscale, 0, 0); } GtkWidget * qs = create_menu_item_from_widget (fixed, FALSE, FALSE, FALSE); g_signal_connect (G_OBJECT (qs), "activate", G_CALLBACK(window_quality), view); gtk_menu_shell_append ((GtkMenuShell *)menuq, qs); return menuq; } #else /*! \fn G_MODULE_EXPORT void to_window_quality (GSimpleAction * action, GVariant * parameter, gpointer data) \brief quality callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_window_quality (GSimpleAction * action, GVariant * parameter, gpointer data) { window_quality (NULL, data); } /*! \fn GMenu * menu_quality (glwin * view, int popm) \brief create the 'OpenGL -> Quality' menu item - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_quality (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * str = g_strdup_printf ("Quality: %d", view -> anim -> last -> img -> quality); append_opengl_item (view, menu, str, "quality", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_window_quality), (gpointer)view, FALSE, FALSE, FALSE, TRUE); g_free (str); return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_render.c000066400000000000000000000137151457665371200203130ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_render.c * @short Functions to create the 'OpenGL -> Render' submenu * @author Sébastien Le Roux */ /* * This file: 'm_render.c' * * Contains: * - The functions to create the 'OpenGL -> Render' submenu * * List of functions: G_MODULE_EXPORT void set_render (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_render_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_render (glwin * view, int id); GMenu * menu_render (glwin * view, int popm); */ #include "global.h" #include "glview.h" #include "glwindow.h" gchar * text_renders[OGL_RENDERS] = {"Filled", "Lines", "Points"}; /*! \fn G_MODULE_EXPORT void set_render (GtkWidget * widg, gpointer data) \brief set OpenGL rendering mode callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_render (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> anim -> last -> img -> render; int j = the_data -> b; #ifdef GTK3 if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #else if (i != j) #endif { this_proj -> modelgl -> anim -> last -> img -> render = NONE; #ifdef GTK3 gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_render[i], FALSE); if (widg != this_proj -> modelgl -> ogl_render[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_render[j], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> render = j; this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); } #ifdef GTK3 else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_render[j], TRUE); } #endif } #ifdef GTK3 /*! \fn GtkWidget * menu_render (glwin * view, int id) \brief create the 'OpenGL -> Render' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_render (glwin * view, int id) { int i, j; GtkWidget * menur = gtk_menu_new (); j = view -> anim -> last -> img -> render; if (id == 0) { for (i=0; i ogl_render[i] = gtk3_menu_item (menur, text_renders[i], IMG_NONE, NULL, G_CALLBACK(set_render), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == j) ? TRUE : FALSE); widget_set_sensitive (view -> ogl_render[i], 0); if (view -> anim -> last -> img -> style != WIREFRAME) { widget_set_sensitive (view -> ogl_render[i], 1); } } } else { GtkWidget * widg; for (i=0; i colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == j) ? TRUE : FALSE); widget_set_sensitive (widg, 0); if (view -> anim -> last -> img -> style != WIREFRAME) { widget_set_sensitive (widg, 1); } } } return menur; } #else /*! \fn G_MODULE_EXPORT void change_render_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief set OpenGL rendering mode callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void change_render_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * render = g_variant_get_string (parameter, NULL); int lgt = strlen (render); gchar * name = g_strdup_printf ("%c%c", render[lgt-2], render[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, render); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-render", g_variant_new_string((const gchar *)name)); g_free (name); } else { gchar * render_name = NULL; int i; for (i=0; i colorp[i][0]); g_free (render_name); render_name = NULL; break; } g_free (render_name); render_name = NULL; } g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * menu_render (glwin * view, int popm) \brief create the 'OpenGL -> Render' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_render (glwin * view, int popm) { int i; GMenu * menu = g_menu_new (); // gboolean sensitive = (view -> anim -> last -> img -> style == WIREFRAME || view -> anim -> last -> img -> style == PUNT) ? FALSE : TRUE; for (i=0; i anim -> last -> img -> render == i) ? TRUE : FALSE, TRUE, TRUE); } return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_rep.c000066400000000000000000000462141457665371200176220ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_rep.c * @short Functions to create the 'View -> Representation' submenu * @author Sébastien Le Roux */ /* * This file: 'm_rep.c' * * Contains: * - The functions to create the 'View -> Representation' submenu * * List of functions: G_MODULE_EXPORT gboolean scroll_set_camera (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean on_rep_delete (GtkWidget * widg, GdkEvent * event, gpointer data); void update_labels (glwin * view); void camera_has_changed (gdouble value, gpointer data); G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data); G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_camera_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_rep_radio (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_center_molecule (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_rep (glwin * view, int id); GMenu * menu_rep (glwin * view, int popm); GMenu * menu_reset (glwin * view, int popm); GMenu * menu_fullscreen (glwin * view, int popm); GMenu * menu_view (glwin * view, int popm); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" extern void save_rotation_quaternion (glwin * view); extern void rotate_x_y (glwin * view, double angle_x, double angle_y); #ifdef GTK4 extern G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data); #else extern G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data); #endif gchar * text_reps[OGL_REPS] = {"Orthographic", "Perspective"}; /*! \fn void update_labels (glwin * view) \brief update labels (on representation data update) \param view the target glwin */ void update_labels (glwin * view) { int i; for (i=0; i<2; i++) if (view -> anim -> last -> img -> labels_scale[i]) view -> create_shaders[LABEL] = TRUE; if (view -> anim -> last -> img -> labels_scale[2]) view -> create_shaders[MAXIS] = TRUE; if (view -> anim -> last -> img -> labels_scale[3]) view -> create_shaders[MEASU] = TRUE; } /*! \fn void camera_has_changed (gdouble value, gpointer data) \brief update camera data \param value the new value \param data the associated data pointer */ void camera_has_changed (gdouble value, gpointer data) { tint * cid = (tint *)data; project * this_proj = get_project_by_id(cid -> a); double v; switch (cid -> b) { case 0: this_proj -> modelgl -> anim -> last -> img -> zoom = 2.0*(1.0-value); // gtk_spin_button_set_increments ((GtkSpinButton *)this_proj -> modelgl -> camera_widg[0], this_proj -> modelgl -> zoom_factor, this_proj -> modelgl -> zoom_factor); break; case 1: // > camera depth if (value > this_proj -> modelgl -> anim -> last -> img -> gnear) { this_proj -> modelgl -> anim -> last -> img -> p_depth = value; } else { this_proj -> modelgl -> anim -> last -> img -> p_depth = this_proj -> modelgl -> anim -> last -> img -> gnear + 0.01; gtk_spin_button_set_value ((GtkSpinButton *)this_proj -> modelgl -> camera_widg[1], this_proj -> modelgl -> anim -> last -> img -> p_depth); } break; case 2: // < perspective depth if (value < this_proj -> modelgl -> anim -> last -> img -> p_depth) { this_proj -> modelgl -> anim -> last -> img -> gnear = value; } else { this_proj -> modelgl -> anim -> last -> img -> gnear = this_proj -> modelgl -> anim -> last -> img -> p_depth - 0.01; gtk_spin_button_set_value ((GtkSpinButton *)this_proj -> modelgl -> camera_widg[2], this_proj -> modelgl -> anim -> last -> img -> gnear); } break; default: if (cid -> b < 5) { if (value != this_proj -> modelgl -> anim -> last -> img -> c_angle[cid -> b - 3]) { v = this_proj -> modelgl -> anim -> last -> img -> c_angle[cid -> b - 3] - value; save_rotation_quaternion (this_proj -> modelgl); if (cid -> b == 3) { rotate_x_y (this_proj -> modelgl, v, 0.0); } else { rotate_x_y (this_proj -> modelgl, 0.0, v); } } } else { this_proj -> modelgl -> anim -> last -> img -> c_shift[cid -> b - 5] = (value == 0.0) ? value : - value; } break; } update_labels (this_proj -> modelgl); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data) \brief reset view callback \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void reset_view (GtkButton * but, gpointer data) { glwin * view = (glwin *)data; int i = view -> mode; view -> mode = ANALYZE; init_camera (get_project_by_id(view -> proj), FALSE); view -> mode = i; update_labels (view); update (view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data) \brief reset view callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_reset_view (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data) \brief reset view callback - GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_reset_view (GtkWidget * widg, gpointer data) #endif { reset_view (NULL, data); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_camera (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update camera data callback - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_camera (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { camera_has_changed (value, data); return FALSE; } /*! \fn G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data) \brief update camera data callback - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_camera (GtkRange * range, gpointer data) { camera_has_changed (gtk_range_get_value (range), data); } /*! \fn G_MODULE_EXPORT void set_camera_spin (GtkSpinButton * res, gpointer data) \brief update camera data callback - spin button \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_camera_spin (GtkSpinButton * res, gpointer data) { camera_has_changed (gtk_spin_button_get_value(res), data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data) \brief representation window delete event - GTK4 \param widg \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_rep_delete (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_rep_delete (GtkWidget * widg, GdkEvent * event, gpointer data) \brief representation window delete event - GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_rep_delete (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *)data; int i; for (i=0; i<7; i++) { if (view -> camera_widg[i]) view -> camera_widg[i] = destroy_this_widget(view -> camera_widg[i]); } destroy_this_widget ((GtkWidget *)widg); return TRUE; } /*! \fn G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data) \brief open advanced representation dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void representation_advanced (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; gchar * cam_opts[7]={"Zoom:", "Perspective depth:", "Camera depth:", "Camera pitch:", "Camera heading:", "Camera right/left", "Camera up/down"}; gchar * str; double smax[7] = {1.0, 100.0, 100.0, 180.0, 180.0, 100.0, 100.0}; double smin[7] = {-2.0, 0.0, 0.0, -180.0, -180.0, -100.0, -100.0}; double sdel[7] = {0.001, 0.01, 0.01, 0.1, 0.1, 0.01, 0.01}; int sdig[7] = {3, 2, 2, 1, 1, 2, 2}; int i; double v; str = g_strdup_printf ("OpenGL camera set-up - %s", get_project_by_id(view -> proj)->name); GtkWidget * arep = create_win (str, view -> win, FALSE, FALSE); g_free (str); GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, arep, vbox); GtkWidget * box; for (i=0; i<7; i++) { box = abox (vbox, cam_opts[i], 0); switch (i) { case 0: v = 1.0-0.5*view -> anim -> last -> img -> zoom; break; case 1: v = view -> anim -> last -> img -> p_depth; break; case 2: v = view -> anim -> last -> img -> gnear; break; default: if (i < 5) { v = view -> anim -> last -> img -> c_angle[i-3]; } else { v = (view -> anim -> last -> img -> c_shift[i-5] == 0.0) ? 0.0 : - view -> anim -> last -> img -> c_shift[i-5]; } break; } if (view -> camera_widg[i]) view -> camera_widg[i] = destroy_this_widget(view -> camera_widg[i]); view -> camera_widg[i] = spin_button (G_CALLBACK(set_camera_spin), v, smin[i], smax[i], sdel[i], sdig[i], 150, & view -> colorp[i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, view -> camera_widg[i], FALSE, FALSE, 10); if (i > 2 || i == 0) { str = g_strdup_printf ("in [%.1f, %.1f]", smin[i], smax[i]); } else if (i == 1) { str = g_strdup_printf ("in [C. depth, %.1f]", smax[i]); } else { str = g_strdup_printf ("in [%.1f, P. depth]", smin[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label(str, 25, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); if(i < 3 && view -> anim -> last -> img -> rep == ORTHOGRAPHIC) widget_set_sensitive (view -> camera_widg[i], 0); } box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, box, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, create_button("Reset view", IMG_NONE, NULL, 100, 25, GTK_RELIEF_NORMAL, G_CALLBACK(reset_view), view), FALSE, FALSE, 200); add_gtk_close_event (arep, G_CALLBACK(on_rep_delete), view); show_the_widgets (arep); } /*! \fn G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data) \brief change representation callback - GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_rep (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i, j; i = this_proj -> modelgl -> anim -> last -> img -> rep; j = the_data -> b; #ifdef GTK4 if (i != j) #else if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #endif { this_proj -> modelgl -> anim -> last -> img -> rep = NONE; #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_rep[i], FALSE); if (widg != this_proj -> modelgl -> ogl_rep[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_rep[j], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> rep = j; #ifdef GTK3 // GTK3 Menu Action To Check for (i=2; i<4; i++) { if (this_proj -> modelgl -> camera_widg[i]) { if (GTK_IS_WIDGET(this_proj -> modelgl -> camera_widg[i])) { widget_set_sensitive (this_proj -> modelgl -> camera_widg[i], j); } } } #endif this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; update (this_proj -> modelgl); } #ifdef GTK3 // GTK3 Menu Action To Check else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_rep[j], TRUE); } #endif } #ifdef GTK3 /*! \fn GtkWidget * menu_rep (glwin * view, int id) \brief create the 'View' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_rep (glwin * view, int id) { int i, j; GtkWidget * menur = gtk_menu_new (); j = view -> anim -> last -> img -> rep; if (id == 0) { for (i=0; i ogl_rep[i] = gtk3_menu_item (menur, text_reps[i], IMG_NONE, NULL, G_CALLBACK(set_rep), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == j) ? TRUE : FALSE); } } else { for (i=0; i colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == j) ? TRUE : FALSE); } } add_advanced_item (menur, G_CALLBACK(representation_advanced), (gpointer)view, FALSE, 0, 0); return menur; } #else /*! \fn G_MODULE_EXPORT void change_rep_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change representation radio items callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void change_rep_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * rep = g_variant_get_string (parameter, NULL); int lgt = strlen (rep); gchar * name = g_strdup_printf ("%c%c", rep[lgt-2], rep[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, rep); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-rep", g_variant_new_string((const gchar *)name)); g_free (name); } else { const gchar * rep = g_variant_get_string (parameter, NULL); gchar * rep_name = NULL; int i; for (i=0; i colorp[i][0]); g_free (rep_name); rep_name = NULL; break; } g_free (rep_name); rep_name = NULL; } g_action_change_state (G_ACTION (action), parameter); } } /*! \fn G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change representation callback - GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_rep_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { representation_advanced (NULL, data); } /*! \fn GMenu * menu_rep (glwin * view, int popm) \brief create 'View -> Representation' submenu items - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_rep (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i, j; i = view -> anim -> last -> img -> rep; for (j=0; jF", IMG_STOCK, (gpointer)FULLSCREEN, FALSE, G_CALLBACK(set_full_screen), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * menu_view (glwin * view, int popm) \brief create the 'View' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_view (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, "Representation", menu_rep(view, popm)); append_submenu (menu, "Projection", menu_proj(view, popm)); append_submenu (menu, "Background", menu_back(view, popm)); if (get_project_by_id(view -> proj) -> nspec) g_menu_append_item (menu, menu_box_axis (view, popm, 1)); if (! popm) { g_menu_append_section (menu, NULL, (GMenuModel*)menu_reset(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)menu_fullscreen(view, popm)); } return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_style.c000066400000000000000000000353011457665371200201670ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_style.c * @short Functions to create the 'OpenGL -> Style' submenu * @author Sébastien Le Roux */ /* * This file: 'm_style.c' * * Contains: * - The functions to create the 'OpenGL -> Style' submenu * * List of functions: void clean_atom_style (project * this_proj); void update_menus (glwin * view); G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_style_radio (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, guint accel, GtkWidget * menu, tint * data); GtkWidget * menu_style (glwin * view, int id); GMenu * menu_style (glwin * view, int popm); */ #include "global.h" #include "bind.h" #include "project.h" #include "glview.h" #include "glwindow.h" extern gchar * label_atpts (project * this_proj, glwin * view, int id); char * text_styles[OGL_STYLES] = {"Ball and stick", "Wireframe", "Spacefilled", "Spheres", "Cylinders", "Dots"}; char * text_filled[FILLED_STYLES] = {"Covalent radius", "Ionic radius", "van Der Waals radius", "In crystal radius"}; /*! \fn void clean_atom_style (project * this_proj) \brief clean all atom(s) possible alternative rendering styles \param this_proj the target project */ void clean_atom_style (project * this_proj) { int i, j; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { this_proj -> atoms[i][j].style = NONE; } } } #ifdef GTK3 // GTK3 Menu Action To Check /*! \fn void update_menus (glwin * view) \brief update GTK3 menus of style has changed \param view the target glwin */ void update_menus (glwin * view) { int i, j; int s = view -> anim -> last -> img -> style; gchar * str; for (i=0; i<2; i++) { for (j=0; j<6; j+=2) { gtk_widget_hide (view -> ogl_bonds[j+8*i]); if (j<4) gtk_widget_hide (view -> ogl_atoms[4*i+j]); } } switch (s) { case CYLINDERS: for (i=0; i<2; i++) gtk_widget_show (view -> ogl_bonds[8*i]); break; case WIREFRAME: for (i=0; i<2; i++) { gtk_widget_show (view -> ogl_bonds[4+8*i]); str = label_atpts (get_project_by_id(view -> proj), view, 1+2*i); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); gtk_widget_show (view -> ogl_atoms[4*i+2]); } break; case SPACEFILL: for (i=0; i<2; i++) { str = label_atpts (get_project_by_id(view -> proj), view, 4); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); gtk_widget_show (view -> ogl_atoms[4*i]); } break; case PUNT: for (i=0; i<2; i++) { str = label_atpts (get_project_by_id(view -> proj), view, 2*i+1); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); gtk_widget_show (view -> ogl_atoms[4*i+2]); } break; case SPHERES: for (i=0; i<2; i++) { str = label_atpts (get_project_by_id(view -> proj), view, 2*i); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); gtk_widget_show (view -> ogl_atoms[4*i]); } break; default: for (i=0; i<2; i++) { gtk_widget_show (view -> ogl_bonds[2+8*i]); str = label_atpts (get_project_by_id(view -> proj), view, 2*i); gtk_menu_item_set_label (GTK_MENU_ITEM(view -> ogl_atoms[4*i+1]), str); g_free (str); gtk_widget_show (view -> ogl_atoms[4*i]); } break; } } #endif /*! \fn G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data) \brief set style callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_style (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int s = the_data -> b; int st = (s >= OGL_STYLES) ? SPACEFILL : s; int ft = (s >= OGL_STYLES) ? s - OGL_STYLES * (s/OGL_STYLES) : NONE; int old_style = this_proj -> modelgl -> anim -> last -> img -> style; int old_filled = this_proj -> modelgl -> anim -> last -> img -> filled_type; int i, j, k; #ifdef GTK3 if ((old_style != st || old_filled != ft) && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #else if (old_style != st || old_filled != ft) #endif { i = old_style; j = old_filled; this_proj -> modelgl -> anim -> last -> img -> style = NONE; this_proj -> modelgl -> anim -> last -> img -> filled_type = NONE; #ifdef GTK3 if (old_style == SPACEFILL) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> filled_styles[j], FALSE); } else { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_styles[i], FALSE); } #endif if (s >= OGL_STYLES) { j = this_proj -> nspec; for (i=0; i chemistry -> chem_prop[CHEM_Z][i]; this_proj -> modelgl -> anim -> last -> img -> atomicrad[i] = this_proj -> modelgl -> anim -> last -> img -> atomicrad[i+j] = set_radius_ (& k, & ft); } #ifdef GTK3 if (widg != this_proj -> modelgl -> filled_styles[ft]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> filled_styles[ft], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> filled_type = ft; this_proj -> modelgl -> anim -> last -> img -> style = SPACEFILL; } else { #ifdef GTK3 if (widg != this_proj -> modelgl -> ogl_styles[st]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_styles[st], TRUE); } #endif this_proj -> modelgl -> anim -> last -> img -> style = st; } clean_atom_style (this_proj); if (st == WIREFRAME || st == PUNT) { j = 0; } else { j = 1; } #ifdef GTK3 for (i=0; i modelgl -> ogl_render[i], j); } update_menus (this_proj -> modelgl); #else #endif init_default_shaders (this_proj -> modelgl); } /*else if (st != SPACEFILL && old_style != NONE && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_styles[st], TRUE); } else if (old_style != NONE && old_filled != NONE && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> filled_styles[ft], TRUE); }*/ } #ifdef GTK3 /*! \fn GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, guint accel, GtkWidget * menu, tint * data) \brief create style menu item GTK3 \param name the menu item label \param val active style \param style style value for this menu item \param vbl active filled style if any \param filled filled value for this menu item \param accel keyboard accelerator \param menu the menu to attach the new menu item to \param data the associated data pointer */ GtkWidget * create_style_menu (char * name, int val, int style, int vbl, int filled, guint accel, GtkWidget * menu, tint * data) { GtkWidget * style_widget = gtk3_menu_item (menu, name, IMG_NONE, NULL, G_CALLBACK(set_style), data, (accel != -1) ? TRUE : FALSE, accel, 0, TRUE, TRUE, (style == val && filled == vbl) ? TRUE : FALSE); return style_widget; } /*! \fn GtkWidget * menu_style (glwin * view, int id) \brief create the 'OpenGL -> Style' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_style (glwin * view, int id) { int i, j; GtkWidget * widg; GtkWidget * menus = gtk_menu_new (); guint accels[OGL_STYLES-1]={GDK_KEY_b, GDK_KEY_w, GDK_KEY_s, GDK_KEY_c, GDK_KEY_d}; guint accelf[FILLED_STYLES]={GDK_KEY_o, GDK_KEY_i, GDK_KEY_v, GDK_KEY_r}; if (id == 0) { for (i=0; i ogl_styles[i] = create_style_menu (text_styles[i], i, view -> anim -> last -> img -> style, i, i, accels[(i < SPACEFILL) ? i : i-1], menus, & view -> colorp[i][0]); } else { widg = create_menu_item (FALSE, "Spacefilled"); gtk_menu_shell_append ((GtkMenuShell *)menus, widg); GtkWidget * menuf = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuf); for (j=0; j < FILLED_STYLES; j++) { view -> filled_styles[j] = create_style_menu (text_filled[j], SPACEFILL, view -> anim -> last -> img -> style, j, view -> anim -> last -> img -> filled_type, accelf[j], menuf, & view -> colorp[OGL_STYLES + j][0]); } } } } else { for (i=0; i anim -> last -> img -> style, i, i, accels[(i < SPACEFILL) ? i : i-1], menus, & view -> colorp[i][0]); } else { widg = create_menu_item (FALSE, "Spacefilled"); gtk_menu_shell_append ((GtkMenuShell *)menus, widg); GtkWidget * menuf = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuf); for (j=0; j < FILLED_STYLES; j++) { widg = create_style_menu (text_filled[j], SPACEFILL, view -> anim -> last -> img -> style, j, view -> anim -> last -> img -> filled_type, accelf[j], menuf, & view -> colorp[OGL_STYLES + j][0]); } } } } return menus; } #else /*! \fn G_MODULE_EXPORT void change_style_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change style callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void change_style_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * style = g_variant_get_string (parameter, NULL); int lgt = strlen (style); gchar * name = g_strdup_printf ("%c%c", style[lgt-2], style[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, style); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-style", g_variant_new_string((const gchar *)name)); g_free (name); } else { gchar * style_name = NULL; int i; for (i=0; i colorp[i][0]); } else if (i < SPACEFILL + FILLED_STYLES) { i -= SPACEFILL; set_style (NULL, & view -> colorp[OGL_STYLES+i][0]); } else { i -= FILLED_STYLES; set_style (NULL, & view -> colorp[i][0]); } g_free (style_name); style_name = NULL; break; } g_free (style_name); style_name = NULL; } g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * menu_style (glwin * view, int popm) \brief create the 'OpenGL -> Style' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_style (glwin * view, int popm) { int i, j, k; GMenu * menu = g_menu_new (); gchar * accels[OGL_STYLES-1]={"b", "w", "s", "c", "d"}; gchar * accelf[FILLED_STYLES]={"o", "i", "v", "r"}; k = 0; for (i=0; i anim -> last -> img -> style == i) ? TRUE : FALSE, TRUE, TRUE); } else { GMenu * menus = g_menu_new (); for (j=0; j < FILLED_STYLES; j++, k++) { append_opengl_item (view, menus, text_filled[j], "style", popm, k, accelf[j], IMG_NONE, NULL, FALSE, G_CALLBACK(change_style_radio), (gpointer)view, FALSE, (view -> anim -> last -> img -> style == SPACEFILL && view -> anim -> last -> img -> filled_type == j) ? TRUE : FALSE, TRUE, TRUE); } append_submenu (menu, "Spacefilled", menus); } } return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/m_tools.c000066400000000000000000000636531457665371200202020ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file m_tools.c * @short Functions to create the 'Tools' submenu * @author Sébastien Le Roux */ /* * This file: 'm_tools.c' * * Contains: * - The functions to create the 'Tools' submenu * * List of functions: void set_motion_sensitive (glwin * view, int status); void invert_visible (project * this_proj); G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * menu_tools (glwin * view, int id); GMenu * measure_section (glwin * view, int popm); GMenu * volume_section (glwin * view, int popm); GMenu * edit_section (glwin * view, int popm); GMenu * mouse_mode_menu (glwin * view, int popm); GMenu * selection_mode_menu (glwin * view, int popm); GMenu * modes_section (glwin * view, int popm); GMenu * md_menu (glwin * view, int popm); GMenu * inv_menu (glwin * view, int popm); GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men); GMenu * menu_tools (glwin * view, int popm); */ #include "cell_edit.h" #include "atom_edit.h" #include "submenus.h" extern G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void create_field (GtkWidget * widg, gpointer data); extern gboolean spin (gpointer data); extern void check_hidden_visible (project * this_proj); char * input_types[NINPUTS] = {"Classical: DL-POLY", "Classical: LAMMPS", "First-Principles: CPMD", "First-Principles: CP2K", "QM-MM: CPMD - [Soon]", "QM-MM: CP2K - [Soon]"}; gchar * modes[3]={"Analysis", "Edition", "Input(s)"}; gchar * smodes[NSELECTION]={"Atom/Bond", "Coordination Sphere", "Fragment", "Molecule", "Single Fragment", "Single Molecule", "Measures (Edition Mode Only)"}; gchar * invl[2]={"Selection", "Visible/Hidden"}; /*! \fn void set_motion_sensitive (glwin * view, int status) \brief change motion parameters following a change in the mouse mode \param view the target glwin \param status initialize or restore spin */ void set_motion_sensitive (glwin * view, int status) { int i; #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) widget_set_sensitive (view -> ogl_anim[i], status); #endif if (view -> player != NULL) widget_set_sensitive (view -> player -> win, status); if (view -> spiner != NULL) widget_set_sensitive (view -> spiner -> win, status); if (view -> rec != NULL) widget_set_sensitive (view -> rec -> win, status); if (! status) { if (view -> spin[0] || view -> spin[1]) { for (i=0; i<2; i++) { view -> spin[i+2] = view -> spin[i]; view -> spin_speed[i+2] = view -> spin_speed[i]; view -> spin[i] = FALSE; } } } else if (view -> spin[2] || view -> spin[3]) { for (i=0; i<2; i++) { view -> spin[i] = view -> spin[i+2]; view -> spin_speed[i] = view -> spin_speed[i+2]; g_timeout_add (REFRESH, (GSourceFunc) spin, & view -> colorp[0][i]); view -> spin[i+2] = FALSE; view -> spin_speed[i+2] = 0; } } } /*! \fn G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data) \brief set selection mode callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_selection_mode (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> selection_mode; int j = the_data -> b; #ifdef GTK4 if (i != j) { #else // GTK3 Menu Action To Check if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { this_proj -> modelgl -> selection_mode = NONE; gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[i], FALSE); if (widg != this_proj -> modelgl -> ogl_smode[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[j], TRUE); } #endif this_proj -> modelgl -> selection_mode = j; } #ifdef GTK3 // GTK3 Menu Action To Check else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[j], TRUE); } #endif } /*! \fn G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data) \brief set mouse mode callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_mode (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); int i = this_proj -> modelgl -> mode; int j = the_data -> b; if (! (j == EDITION && is_atom_win_active(this_proj -> modelgl))) { #ifdef GTK4 if (i != j) #else if (i != j && gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) #endif { this_proj -> modelgl -> mode = NONE; #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[i], FALSE); if (widg != this_proj -> modelgl -> ogl_mode[j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[j], TRUE); } #endif this_proj -> modelgl -> mode = j; if (this_proj -> modelgl -> mode == EDITION) { for (i=1; i<3; i++) init_coordinates (this_proj, i, FALSE, TRUE); set_motion_sensitive (this_proj -> modelgl, 0); } else { for (i=1; i<3; i++) { if (this_proj -> modelgl -> saved_coord[i] != NULL) { g_free (this_proj -> modelgl -> saved_coord[i]); this_proj -> modelgl -> saved_coord[i] = NULL; } } set_motion_sensitive (this_proj -> modelgl, 1); if (this_proj -> modelgl -> selection_mode == NSELECTION-1) { #ifdef GTK4 set_selection_mode (NULL, & this_proj -> modelgl -> colorp[0][0]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_smode[0], TRUE); set_selection_mode (this_proj -> modelgl -> ogl_smode[0], & this_proj -> modelgl -> colorp[0][0]); #endif } } i = activep; active_project_changed (this_proj -> id); active_project_changed (i); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (this_proj -> modelgl -> ogl_smode[NSELECTION-1], (this_proj -> modelgl -> mode == EDITION) ? 1 : 0); #endif i = (this_proj -> modelgl -> mode == EDITION) ? EDITION : ANALYZE; gchar * str = g_strdup_printf ("%s - 3D view - [%s mode]", prepare_for_title(this_proj -> name), mode_name[i]); gtk_window_set_title (GTK_WINDOW (this_proj -> modelgl -> win), str); g_free (str); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } #ifdef GTK3 // GTK3 Menu Action To Check else if (i == j && ! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_mode[j], TRUE); } #endif } } /*! \fn void invert_visible (project * this_proj) \brief invert visible atom(s) \param this_proj the target project */ void invert_visible (project * this_proj) { int i, j, k; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { for (k=0; k<2; k++) this_proj -> atoms[i][j].show[k] = ! this_proj -> atoms[i][j].show[k]; } } check_hidden_visible (this_proj); init_default_shaders (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data) \brief invert selection or visible callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void invert_this (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; project * this_proj = get_project_by_id(the_data -> a); switch (the_data -> b) { case 0: invert_selection (this_proj); init_default_shaders (this_proj -> modelgl); break; case 1: invert_visible (this_proj); break; } } #ifdef GTK3 extern G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data); /*! \fn GtkWidget * menu_tools (glwin * view, int id) \brief create the 'Tools' submenu - GTK3 \param view the target glwin \param id main app (0) or popup (1) */ GtkWidget * menu_tools (glwin * view, int id) { int i; GtkWidget * menut = gtk_menu_new (); gtk3_menu_item (menut, "Measures", IMG_NONE, NULL, G_CALLBACK(window_measures), (gpointer)view, TRUE, GDK_KEY_m, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); GtkWidget * widg = gtk3_menu_item (menut, "Volumes", IMG_NONE, NULL, G_CALLBACK(window_volumes), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); add_menu_separator (menut); gtk_menu_shell_append ((GtkMenuShell *)menut, menu_item_new_with_submenu("Edit", TRUE, menu_edit(view, id))); add_menu_separator (menut); widg = create_menu_item (FALSE, "Mouse Mode"); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); GtkWidget * menum = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menum); guint accel[3]={GDK_KEY_a, GDK_KEY_e, GDK_KEY_i}; guint acces[4]={GDK_KEY_A, GDK_KEY_C, GDK_KEY_F, GDK_KEY_M}; if (id == 0) { for (i=0; i<2; i++) { view -> ogl_mode[i] = gtk3_menu_item (menum, modes[i], IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[i][0], TRUE, accel[i], GDK_MOD1_MASK, TRUE, TRUE, (i == view -> mode) ? TRUE : FALSE); widget_set_sensitive (view -> ogl_mode[i], (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); } } else { for (i=0; i<2; i++) { widg = gtk3_menu_item (menum, modes[i], IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[i][0], TRUE, accel[i], GDK_MOD1_MASK, TRUE, TRUE, (i == view -> mode) ? TRUE : FALSE); widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); } } /*widg = create_menu_item (TRUE, modes[2]); gtk_menu_shell_append ((GtkMenuShell *)menum, widg); GtkWidget * menui = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menui); widget_set_sensitive (widg, (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1); if (id == 0) { for (i=0; i ogl_mode[i+2] = gtk3_menu_item (menum, modes[i], IMG_NONE, NULL, G_CALLBACK(set_mode), & view -> colorp[2+i][0], FALSE, 0, 0, TRUE, TRUE, (i+2 == view -> mode) ? TRUE : FALSE); widget_set_sensitive (view -> ogl_mode[i+2], 0); } } else { for (i=0; i colorp[2+i][0], FALSE, 0, 0, TRUE, TRUE, (i+2 == view -> mode) ? TRUE : FALSE); widget_set_sensitive (widg, 0); } }*/ widg = create_menu_item (FALSE, "Selection Mode"); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); GtkWidget * menusm = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menusm); if (id == 0) { for (i=0; i ogl_smode[i] = gtk3_menu_item (menusm, smodes[i], IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0], TRUE, acces[i], GDK_SHIFT_MASK, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } else { view -> ogl_smode[i] = gtk3_menu_item (menusm, smodes[i], IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } if (i == NSELECTION-1) widget_set_sensitive (view -> ogl_smode[i], (view -> mode == EDITION) ? 1 : 0); } } else { for (i=0; i colorp[i][0], TRUE, acces[i], GDK_SHIFT_MASK, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } else { widg = gtk3_menu_item (menusm, smodes[i], IMG_NONE, NULL, G_CALLBACK(set_selection_mode), & view -> colorp[i][0], FALSE, 0, 0, TRUE, TRUE, (i == view -> selection_mode) ? TRUE : FALSE); } if (i == NSELECTION-1) widget_set_sensitive (widg, (view -> mode == EDITION) ? 1 : 0); } } add_menu_separator (menut); GtkWidget * menuf = NULL; widg = create_menu_item (FALSE, "Molecular Dynamics"); widget_set_sensitive (widg, get_project_by_id(view -> proj) -> nspec); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); menuf = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuf); if (id == 0) { for (i=0; i ogl_mode[i+2+NINPUTS] = create_menu_item (TRUE, input_types[i]); gtk_menu_shell_append ((GtkMenuShell *)menuf, view -> ogl_mode[i+2+NINPUTS]); g_signal_connect (G_OBJECT (view -> ogl_mode[i+2+NINPUTS]), "activate", G_CALLBACK(create_field), & view -> colorp[i][0]); if (i > 3) widget_set_sensitive (view -> ogl_mode[i+2+NINPUTS], 0); } set_advanced_bonding_menus (view); } else { for (i=0; i colorp[i][0]); // if (i < 2 || i > 3) widget_set_sensitive (widg, view -> adv_bonding[1]); if (i < 2) widget_set_sensitive (widg, view -> adv_bonding[1]); if (i > 3) widget_set_sensitive (widg, 0); } } add_menu_separator (menut); GtkWidget * menuin = NULL; widg = create_menu_item (FALSE, "Invert"); gtk_menu_shell_append ((GtkMenuShell *)menut, widg); menuin = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)widg, menuin); for (i=0; i<2; i++) { widg = create_menu_item (FALSE, invl[i]); gtk_menu_shell_append ((GtkMenuShell *)menuin, widg); g_signal_connect (G_OBJECT (widg), "activate", G_CALLBACK(invert_this), & view -> colorp[i][0]); } return menut; } #else /*! \fn G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open the measurement window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_window_measures (GSimpleAction * action, GVariant * parameter, gpointer data) { window_measures (NULL, data); } /*! \fn GMenu * measure_section (glwin * view, int popm) \brief create the 'Tools -> Measures' menu item GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * measure_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "Measures", "measures", popm, popm, "M", IMG_NONE, NULL, FALSE, G_CALLBACK(to_window_measures), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open the volumes window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_window_volumes (GSimpleAction * action, GVariant * parameter, gpointer data) { window_volumes (NULL, data); } /*! \fn GMenu * volume_section (glwin * view, int popm) \brief create the 'Tools -> Volumes' menu item GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * volume_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_opengl_item (view, menu, "Volumes", "volumes", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_window_volumes), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * edit_section (glwin * view, int popm) \brief create the 'Tools -> Edit' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * edit_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, "Edit", menu_edit(view, popm)); return menu; } /*! \fn G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change mouse radio menu item callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void change_mouse_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * mode = g_variant_get_string (parameter, NULL); int lgt = strlen (mode); gchar * name = g_strdup_printf ("%c%c", mode[lgt-2], mode[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, mode); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-mouse-mode", g_variant_new_string((const gchar *)name)); g_free (name); } else { gchar * mode_name = NULL; int i; for (i=0; i<2; i++) { mode_name = g_strdup_printf ("set-mouse-mode.%d.0", i); if (g_strcmp0(mode, (const gchar *)mode_name) == 0) { set_mode (NULL, & view -> colorp[i][0]); g_free (mode_name); mode_name = NULL; break; } g_free (mode_name); mode_name = NULL; } // Update the menu bar is required to activate / deactivate the selection mode option update_menu_bar (view); } } /*! \fn GMenu * mouse_mode_menu (glwin * view, int popm) \brief create the 'Tools -> Mouse Mode' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * mouse_mode_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * accel[3] = {"A", "E", "I"}; int i, j; j = (get_project_by_id(view -> proj) -> steps > 1) ? 0 : 1; for (i=0; i<2; i++) { append_opengl_item (view, menu, modes[i], "mouse-mode", popm, i, accel[i], IMG_NONE, NULL, FALSE, G_CALLBACK(change_mouse_mode_radio), (gpointer)view, FALSE, (i == view -> mode) ? TRUE : FALSE, TRUE, j); } return menu; } /*! \fn G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change selection mode callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void change_sel_mode_radio (GSimpleAction * action, GVariant * parameter, gpointer data) { glwin * view = (glwin *)data; const gchar * mode = g_variant_get_string (parameter, NULL); int lgt = strlen (mode); gchar * name = g_strdup_printf ("%c%c", mode[lgt-2], mode[lgt-1]); if (g_strcmp0(name, ".1") == 0) { g_free (name); name = g_strdup_printf ("%.*s.0", lgt-2, mode); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-sel-mode", g_variant_new_string((const gchar *)name)); g_free (name); } else { gchar * mode_name = NULL; int i; for (i=0; i colorp[i][0]); g_free (mode_name); mode_name = NULL; break; } g_free (mode_name); mode_name = NULL; } g_action_change_state (G_ACTION (action), parameter); } } /*! \fn GMenu * selection_mode_menu (glwin * view, int popm) \brief create the 'Tools -> Selection Mode' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * selection_mode_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); gchar * acces[4]={"A", "C", "F", "M"}; gchar * str; int i, j; for (i=0; i mode == EDITION) ? 1 : 0 : TRUE; if (i < 4) { str = g_strdup_printf ("%s", acces[i]); append_opengl_item (view, menu, smodes[i], "sel-mode", popm, i, str, IMG_NONE, NULL, FALSE, G_CALLBACK(change_sel_mode_radio), (gpointer)view, FALSE, (i == view -> selection_mode) ? TRUE : FALSE, TRUE, j); g_free (str); } else { append_opengl_item (view, menu, smodes[i], "sel-mode", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(change_sel_mode_radio), (gpointer)view, FALSE, (i == view -> selection_mode) ? TRUE : FALSE, TRUE, j); } } return menu; } /*! \fn GMenu * modes_section (glwin * view, int popm) \brief create the 'Tools -> * Modes' submenus GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * modes_section (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, "Mouse Mode", mouse_mode_menu(view, popm)); append_submenu (menu, "Selection Mode", selection_mode_menu(view, popm)); return menu; } /*! \fn G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data) \brief run MD input assistant callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_create_field (GSimpleAction * action, GVariant * parameter, gpointer data) { create_field (NULL, data); } /*! \fn GMenu * md_menu (glwin * view, int popm) \brief create the 'Molecular Dynamics' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * md_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i; for (i=0; i colorp[i][0], FALSE, FALSE, FALSE, (i < 2) ? view -> adv_bonding[1] : (i > 3) ? FALSE : TRUE); } return menu; } /*! \fn G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data) \brief invert this callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_invert_this (GSimpleAction * action, GVariant * parameter, gpointer data) { invert_this (NULL, data); } /*! \fn GMenu * inv_menu (glwin * view, int popm) \brief create the 'Tools -> Invert' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * inv_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); int i; for (i=0; i<2; i++) { append_opengl_item (view, menu, invl[i], "inv", popm, i, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_invert_this), & view -> colorp[i][0], FALSE, FALSE, FALSE, TRUE); } return menu; } /*! \fn GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men) \brief append a new menu item with a new submenu \param view the target glwin \param item_name the new menu item label \param men the menu item new submenu */ GMenu * add_section_item_with_menu (glwin * view, gchar * item_name, GMenu * men) { GMenu * menu = g_menu_new (); append_submenu (menu, item_name, men); return menu; } /*! \fn GMenu * menu_tools (glwin * view, int popm) \brief create the 'Tools' submenu - GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * menu_tools (glwin * view, int popm) { GMenu * menu = g_menu_new (); g_menu_append_section (menu, NULL, (GMenuModel*)measure_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)volume_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)edit_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)modes_section(view, popm)); g_menu_append_section (menu, NULL, (GMenuModel*)add_section_item_with_menu(view, "Molecular Dynamics", md_menu(view, popm))); g_menu_append_section (menu, NULL, (GMenuModel*)add_section_item_with_menu(view, "Invert", inv_menu(view, popm))); return menu; } #endif Atomes-GNU-1.1.14/src/opengl/win/menu_bar.c000066400000000000000000000356461457665371200203170ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file menu_bar.c * @short Functions to create the menu bar of the OpenGL window \n Functions to create the menu items for the menu bar and the pop up menu * @author Sébastien Le Roux */ /* * This file: 'menu_bar.c' * * Contains: * - The functions to create the menu bar of the OpenGL window - The functions to create the menu items for the menu bar and the pop up menu * * List of functions: void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, const gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive); void menu_bar_attach_color_palettes (glwin * view, GtkWidget * menu_bar); void update_menu_bar (glwin * view); G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * opengl_window_create_menu_bar (glwin * view); GMenu * prepare_opengl_menu (glwin * view, int popm); GMenu * prepare_model_menu (glwin * view, int popm); GMenu * prepare_coord_menu (glwin * view, int popm); GMenu * opengl_menu_bar (glwin * view); */ #include "global.h" #include "interface.h" #include "project.h" #include "calc.h" #include "glview.h" #include "initcoord.h" #include "submenus.h" #include "color_box.h" #ifdef GTK4 extern GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); extern G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void to_coord_properties (GSimpleAction * action, GVariant * parameter, gpointer data); GSimpleActionGroup * view_pop_actions; /*! \fn G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief open OpenGL advanced configuration window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_opengl_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) { opengl_advanced (NULL, data); } /*! \fn G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data) \brief render image from OpenGL window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_render_gl_image (GSimpleAction * action, GVariant * parameter, gpointer data) { render_gl_image (NULL, data); } /*! \fn void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, const gchar * key, int mpop, int item_id, * gchar * accel, int image_format, gpointer icon, * gboolean custom, GCallback handler, gpointer data, * gboolean check, gboolean status, gboolean radio, gboolean sensitive) \brief generic function to create menu item for the OpenGL menu bar / pop up menu \param view the target glwin \param menu the menu to attach the new menu item to \param name the new menu item label, if any \param key the new menu item action key \param mpop main app (0) or popup (1) \param item_id the new menu item action id \param accel keyboard accelerator for the new menu item, if any (NULL otherwise) \param image_format the image format (in enum ImageFormats) \param icon the image data if any (or NULL) \param custom custom menu item (1= yes, 0 = no), to insert a widget later on \param handler the new menu item callback (or NULL) \param data the associated data pointer (or NULL) \param check is the new menu item a check menu item ? \param status is 'check' then what is the status of the new check menu item ? \param radio is the new menu item a radio menu item ? \param sensitive new menu item sensitivity */ void append_opengl_item (glwin * view, GMenu * menu, const gchar * name, const gchar * key, int mpop, int item_id, gchar * accel, int image_format, gpointer icon, gboolean custom, GCallback handler, gpointer data, gboolean check, gboolean status, gboolean radio, gboolean sensitive) { gchar * str_a, * str_b, * str_c; str_a = g_strdup_printf ("set-%s", key); str_b = g_strdup_printf ("%s.%d.%d", str_a, item_id, mpop); str_c = (sensitive) ? g_strdup_printf ("gl-%d.%s", view -> action_id, (radio) ? str_a : str_b) : g_strdup_printf ("None"); append_menu_item (menu, name, (const gchar *) str_c, accel, (custom) ? (const gchar *) str_b : NULL, image_format, icon, check, status, radio, (radio) ? (const gchar *)str_b : NULL); if (handler) { if (! radio || (radio && status)) { if (! opengl_project) { widget_add_action (view -> action_group, (radio) ? (const gchar *)str_a : (const gchar *)str_b, handler, data, check, status, radio, (const gchar *)str_b); } else { widget_add_action (view_pop_actions, (radio) ? (const gchar *)str_a : (const gchar *)str_b, handler, data, check, status, radio, (const gchar *)str_b); } } } g_free (str_a); g_free (str_b); g_free (str_c); } /*! \fn GMenu * prepare_opengl_menu (glwin * view, int popm) \brief create the 'OpenGL' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * prepare_opengl_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, "Style", menu_style(view, popm)); GMenuItem * item = g_menu_item_new ("Color Scheme(s)", (get_project_by_id(view -> proj) -> nspec) ? NULL : "None"); g_menu_item_set_submenu (item, (GMenuModel*)menu_map(view, popm)); g_menu_append_item (menu, item); append_submenu (menu, "Render", menu_render(view, popm)); append_submenu (menu, "Quality", menu_quality(view, popm)); append_opengl_item (view, menu, "Material And Lights", "material", popm, popm, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(to_opengl_advanced), (gpointer)view, FALSE, FALSE, FALSE, TRUE); append_opengl_item (view, menu, "Render Image", "image", popm, popm, "I", IMG_FILE, PACKAGE_IMG, FALSE, G_CALLBACK(to_render_gl_image), (gpointer)view, FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * prepare_model_menu (glwin * view, int popm) \brief create the 'Model' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * prepare_model_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, "Atom(s)", menu_atoms(view, popm, 0)); append_submenu (menu, "Bond(s)", menu_bonds(view, popm, 0)); append_submenu (menu, "Clone(s)", menu_clones(view, popm)); g_menu_append_item (menu, menu_box_axis (view, popm, 0)); return menu; } /*! \fn GMenu * prepare_coord_menu (glwin * view, int popm) \brief create the 'Chemistry' submenu GTK4 \param view the target glwin \param popm main app (0) or popup (1) */ GMenu * prepare_coord_menu (glwin * view, int popm) { GMenu * menu = g_menu_new (); append_submenu (menu, "Coordination", menu_coord (view, popm)); append_submenu (menu, "Polyhedra", menu_poly (view, popm)); if (view -> rings) { append_submenu (menu, "Rings(s)", menu_rings (view, popm)); } else { append_menu_item (menu, "Ring(s)", "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } if (view -> chains) { append_submenu (menu, "Chain(s)", add_menu_coord (view, popm, 9)); } else { append_menu_item (menu, "Chain(s)", "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } if (view -> adv_bonding[0]) { append_submenu (menu, "Fragment(s)", add_menu_coord (view, popm, 2)); } else { append_menu_item (menu, "Fragment(s)", "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } if (view -> adv_bonding[1]) { append_submenu (menu, "Molecule(s)", add_menu_coord (view, popm, 3)); } else { append_menu_item (menu, "Molecule(s)", "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } append_opengl_item (view, menu, "Advanced", "adv-all", popm, popm, "E", IMG_STOCK, (gpointer)DPROPERTIES, FALSE, G_CALLBACK(to_coord_properties), & view -> colorp[30][0], FALSE, FALSE, FALSE, TRUE); return menu; } /*! \fn GMenu * opengl_menu_bar (glwin * view) \brief create OpenGL window menu GTK4 \param view the target glwin */ GMenu * opengl_menu_bar (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, "OpenGL", prepare_opengl_menu(view, 0)); if (get_project_by_id(view -> proj) -> natomes) { append_submenu (menu, "Model", prepare_model_menu(view, 0)); append_submenu (menu, "Chemistry", prepare_coord_menu(view, 0)); } else { append_menu_item (menu, "Model", "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); append_menu_item (menu, "Chemistry", "None", NULL, NULL, IMG_NONE, NULL, FALSE, FALSE, FALSE, NULL); } append_submenu (menu, "Tools", menu_tools(view, 0)); append_submenu (menu, "View", menu_view(view, 0)); append_submenu (menu, "Animate", menu_anim(view, 0)); return menu; } /*! \fn void menu_bar_attach_color_palettes (glwin * view, GtkWidget * menu_bar) \brief menu bar attach color palettes GTK4 \param view the target glwin \param menu_bar the GtkWidget sending the signal */ void menu_bar_attach_color_palettes (glwin * view, GtkWidget * menu_bar) { /* Here we need to attached color palettes for: - Box - Atoms - Clones - Total coordination(s) - Partial coordination(s) - Fragment(s) and molecule(s) - Ring(s) - Background This is a work in progress since the 'gtk_popover_menu_bar_add_child' to use to insert widget is bugged: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955 */ int i, j, k, l, m; gchar * str; project * this_proj = get_project_by_id (view -> proj); // Box if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, -1, -1, -1), "set-box-color.0")) { g_debug ("Color palette error: box - custom= set-box-color.0"); } // Atom(s) and clone(s) for (i=0; i<2; i++) { for (j=0; j nspec; j++) { str = g_strdup_printf ("set-%s.%d", (! i) ? "atom-color" : "clone-color", j); if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, i*this_proj -> nspec+j, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - %d - custom= %s", (! i) ? "atom-color" : "clone-color", j+1, str); } g_free (str); } } // Coordinations for (i=0; i<2; i++) { if (this_proj -> coord -> ntg[i]) { for (j=0; j nspec; j++) { for (k=0; k coord -> ntg[i][j]; k++) { m = 0; for (l=0; l coord -> ntg[i][l]; } if (i) { str = g_strdup_printf ("set-%s-c.%d", exact_name (env_name (this_proj, k, j, 1, NULL)), m); } else { str = g_strdup_printf ("set-%d-c.%d", this_proj -> coord -> geolist[i][j][k], m); } m += (i) ? this_proj -> coord -> totcoord[0] : 0; if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, 2*this_proj -> nspec+m, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - spec= %d - coord= %d, custom= %s", (! i) ? "total-coord" : "partial-coord", j+1, k+1, str); } g_free (str); } } } } // Fragment(s) and molecule(s) for (i=2; i<4; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-%s-%d", (i == 2) ? "fcol" : "mcol", j); k = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + j; if (i == 3) k += this_proj -> coord -> totcoord[2]; if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, k, i, 0), (const gchar *)str)) { g_debug ("Color palette error: %s - %d, custom= %s", (i == 2) ? "fragment" : "molecule", j+1, str); } g_free (str); } } // Rings for (i=4; i<9; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-rcol-%d-%d", i, j); if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, -3, i-4, 0), (const gchar *)str)) { g_debug ("Color palette error: rings - %d - %d, custom= %s", i, j+1, str); } g_free (str); } } // Background if (! gtk_popover_menu_bar_add_child ((GtkPopoverMenuBar *)menu_bar, color_palette (view, -2, -1, -1), "set-back-color.0")) { g_debug ("Color palette error: background - custom= set-back-color.0"); } } /*! \fn GtkWidget * opengl_window_create_menu_bar (glwin * view) \brief create the OpenGL window menu bar widget GTK4 \param view the target glwin */ GtkWidget * opengl_window_create_menu_bar (glwin * view) { view -> menu_bar = destroy_this_widget (view -> menu_bar); if (view -> action_group) g_object_unref (view -> action_group); view -> action_group = g_simple_action_group_new (); opengl_project = NULL; GtkWidget * menu_bar = gtk_popover_menu_bar_new_from_model ((GMenuModel *)opengl_menu_bar(view)); menu_bar_attach_color_palettes (view, menu_bar); opengl_project_changed (activev); gchar * str = g_strdup_printf ("gl-%d", view -> action_id); gtk_widget_insert_action_group (menu_bar, str, G_ACTION_GROUP(view -> action_group)); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> menu_box, menu_bar, FALSE, FALSE, 0); show_the_widgets (menu_bar); return menu_bar; } /*! \fn void update_menu_bar (glwin * view) \brief update the OpenGL window menu bar GTK4 \param view the target glwin */ void update_menu_bar (glwin * view) { view -> menu_bar = opengl_window_create_menu_bar (view); } #endif Atomes-GNU-1.1.14/src/opengl/win/popup.c000066400000000000000000004374751457665371200177000ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file popup.c * @short Functions to create the OpenGL window popup menus: - The main popup menu \n - The contextual, atom or bond related, popup menus * @author Sébastien Le Roux */ /* * This file: 'popup.c' * * Contains: * - The functions to create the OpenGL window popup menus: - The main popup menu - The contextual, atom or bond related, popup menus * * List of functions: int get_to_be_selected (glwin * view); int get_style (gchar * str); int check_label_numbers (project * this_proj, int types); gchar * get_object_from_action (GSimpleAction * action); void to_remove_this_object (int type, gpointer data); void to_replace_this_object (int type, GSimpleAction * action, gpointer data); void to_replace_this_object (int type, GtkWidget * widg, gpointer data); void copy_bond_selection (); void remove_object (); void insert_object (int action, gpointer data); void check_hidden_visible (project * this_proj); void create_new_project_using_data (atom_selection * selection); void add_style_sub_menu (GtkWidget * item, GCallback handler, gpointer data); void add_edition_sub_menu (GtkWidget * item, GCallback handler, gpointer data); void create_selection_item (GMenu * menu, glwin * view, gchar * str, gchar * act, int aid, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data); void analyze_popup_attach_color_palettes (glwin * view, GtkWidget * menu, int ato, int spc, int totc, int parc, int frag, int mol); void popup_selection (glwin * view, double ptx, double pty, int spe, int mmod, int ati, int bti, int aoc); void analyze_menu_attach_color_palettes (glwin * view, GtkWidget * menu); void popup_main_menu (glwin * view, double ptx, double pty); G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_add_object (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void replace_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void replace_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void copy_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void style_this_atom (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_others (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void style_the_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void remove_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void replace_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void replace_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void copy_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void style_the_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_action_for_all (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_action_for_this_bond (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void select_action_for_all_bonds (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void reset_coords (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data); GtkWidget * create_selection_item (glwin * view, gchar * str, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data); GtkWidget * selection_menu (glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c); GMenu * add_edition_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data); GMenu * add_style_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data); GMenu * selection_menu (int aid, glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c); GMenu * tools_section (glwin * view); GMenu * anim_section (glwin * view); atom_search * free_this_search_data (atom_search * this_search); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "workspace.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include "submenus.h" #include "color_box.h" #include "bind.h" #include "atom_edit.h" #define CONTEXTACT 12 extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern void check_all_trees (project * this_proj); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); extern G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void render_gl_image (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); extern void apply_project (gboolean showtools); extern GtkWidget * field_atom_menu (int p, int s, int a, int f); extern void reset_coordinates (project * this_proj, int status); extern vec3_t get_bary (project * this_proj, int status); extern void prepare_to_instert (gchar * key, project * this_proj, atom_search * asearch, gboolean visible); extern insertion_menu mol[]; extern atom_in_selection * new_atom_in_selection (int id, int sp); extern int inserted_from_lib; extern void duplicate_material_and_lightning (image * new_img, image * old_img); #ifdef GTK4 extern GSimpleActionGroup * view_pop_actions; extern G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data); extern GtkWidget * color_palette (glwin * view, int ideo, int spec, int geo); #endif atom_search * remove_search = NULL; atom_search * insert_search = NULL; int selected_atom; int selected_btom; int selected_aspec; int selected_bspec; int is_selected; int is_labelled; int is_filled; atom_selection * bond_selection = NULL; tint atoid[CONTEXTACT][4]; dint btoid; /*! \fn int get_to_be_selected (glwin * view) \brief find which atom(s) are to be selected \param view the target glwin */ int get_to_be_selected (glwin * view) { if (view -> atom_win && ! column_label) { return (view -> atom_win -> visible || view -> selection_mode == NSELECTION-1) ? 1 : 0; } else { return 0; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data) \brief set full screen callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void set_full_screen (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data) \brief set full screen callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_full_screen (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; if (! view -> fullscreen) { gtk_window_fullscreen (GTK_WINDOW(view -> win)); gtk_widget_hide (view -> menu_bar); view -> fullscreen = TRUE; } else { gtk_window_unfullscreen (GTK_WINDOW(view -> win)); gtk_widget_show (view -> menu_bar); view -> fullscreen = FALSE; } } /*! \fn int get_style (gchar * str) \brief get OpenGL rendering style id \param str */ int get_style (gchar * str) { int i; is_filled = NONE; #ifdef GTK4 i = strlen (str); return (int) atof ((const gchar *)g_strdup_printf ("%c", str[i-1])); #else for (i=0; i proj); g_free (this_search); clean_other_window_after_edit (this_proj); if (this_proj -> modelgl -> atom_win) { if (! this_proj -> modelgl -> atom_win -> visible) { if (! this_proj -> modelgl -> cell_win || ! this_proj -> modelgl -> cell_win -> slab_passivate) { g_free (this_proj -> modelgl -> atom_win); this_proj -> modelgl -> atom_win = NULL; } } } return NULL; } /*! \fn void to_remove_this_object (int type, gpointer data) \brief remove a type of object \param type the type of object to remove (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) \param data the associated data pointer */ void to_remove_this_object (int type, gpointer data) { int i, j; atom_in_selection * selat; tint * sel; prepare_atom_edition (& opengl_project -> modelgl -> colorp[0][0], FALSE); remove_search = allocate_atom_search (opengl_project -> id, REMOVE, REMOVE, opengl_project -> natomes); switch (type) { case 0: i = GPOINTER_TO_INT(data); remove_search -> todo[i] = 1; break; case 1: sel = (tint * )data; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { remove_search -> todo[j] = 1; } } else { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { remove_search -> todo[j] = 1; } } } break; case 2: sel = (tint * )data; i = opengl_project -> modelgl -> anim -> last -> img -> step; gboolean doit; for (j=0; j natomes; j++) { doit = FALSE; if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> a) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } else if (sel -> a == 2) { doit = TRUE; } else if (opengl_project -> atoms[i][j].label[0] == is_labelled) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } if (doit) { remove_search -> todo[j] = 1; } } } break; case 3: selat = bond_selection -> first; for (i=0; i selected ; i++) { j = selat -> id; remove_search -> todo[j] = 1; selat = selat -> next; } break; } } /*! \fn gchar * get_object_from_action (GSimpleAction * action) \brief get object name from action name GTK4 \param action the GAction sending the signal */ gchar * get_object_from_action (GSimpleAction * action) { int i, j, k; const gchar * act = g_action_get_name(G_ACTION(action)); gchar * act_end; gchar * str; k = strlen (act); if (strstr(act, "set-mol-ins")) { act_end = g_strdup_printf ("%c%c", act[k-4], act[k-3]); for (i=0; mol[i].type || mol[i].object; i++) { if (mol[i].object) { str = (i < 10) ? g_strdup_printf (".%d", i) : g_strdup_printf ("%d", i); if (g_strcmp0(str, act_end) == 0) { g_free (str); g_free (act_end); return g_strdup_printf ("%s", mol[i].object); break; } g_free (str); } } g_free (act_end); } if (strstr(act, "set-ifp")) { act_end = g_strdup_printf ("%c%c%c%c", act[k-6], act[k-5], act[k-4], act[k-3]); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { for (j=0; j<3; j++) { str = g_strdup_printf ("-%d.%d", j, i); if (g_strcmp0(str, act_end) == 0) { g_free (str); g_free (act_end); return g_strdup_printf ("%s in %s", action_atoms[j], g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1)); } g_free (str); } } } g_free (act_end); } return NULL; } #ifdef GTK4 /*! \fn void to_replace_this_object (int type, GSimpleAction * action, gpointer data) \brief replace a type of object GTK4 \param type the type of object to replace (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) \param action the GAction sending the signal \param data the associated data pointer */ void to_replace_this_object (int type, GSimpleAction * action, gpointer data) #else /*! \fn void to_replace_this_object (int type, GtkWidget * widg, gpointer data) \brief replace a type of object GTK3 \param type the type of object to replace (0= atom, 1= coordination type, 2= atom selection, 3= bond selection) \param widg the GtkWidget sending the signal \param data the associated data pointer */ void to_replace_this_object (int type, GtkWidget * widg, gpointer data) #endif { int h, i, j; atom_in_selection * selat; tint * sel; gboolean replace = TRUE; if (opengl_project -> modelgl -> cell_win) { if (opengl_project -> modelgl -> cell_win -> cut_this_slab) replace = FALSE; } if (replace) { prepare_atom_edition (& opengl_project -> modelgl -> colorp[0][0], FALSE); insert_search = allocate_atom_search (opengl_project -> id, REPLACE, REPLACE, opengl_project -> natomes); } else { insert_search = opengl_project -> modelgl -> search_widg[8]; } gchar * lab; #ifdef GTK4 if (action != NULL) { lab = get_object_from_action (action); } #else if (widg != NULL) { lab = g_strdup_printf ("%s", gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); } #endif else { lab = g_strdup_printf ("Copied Data"); } h = get_selected_object_id (FALSE, opengl_project -> id, lab, insert_search); g_free (lab); if (h != 0) { switch (type) { case 0: i = GPOINTER_TO_INT(data); to_insert_in_project (h, i, opengl_project, insert_search, FALSE); insert_search -> todo[i] = 1; break; case 1: sel = (tint * )data; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; } } else if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; } } break; case 2: sel = (tint * )data; gboolean doit; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { doit = FALSE; if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> a) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } else if (sel -> a == 2) { doit = TRUE; } else if (opengl_project -> atoms[i][j].label[0] == is_labelled) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) doit = TRUE; } if (doit) { to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; } } } break; case 3: selat = bond_selection -> first; for (i=0; i selected ; i++) { j = selat -> id; to_insert_in_project (h, j, opengl_project, insert_search, FALSE); insert_search -> todo[j] = 1; selat = selat -> next; } break; } } } /*! \fn void copy_bond_selection () \brief copy bond selection */ void copy_bond_selection () { if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); atom_in_selection * selat = bond_selection -> first; while (selat) { pasted_todo[selat -> id] = 1; selat = selat -> next; } copied_object = create_object_from_selection (opengl_project); } /*! \fn void remove_object () \brief remove object using 'remove_search' */ void remove_object () { gchar * str; gboolean vis = (opengl_project -> modelgl -> atom_win) ? opengl_project -> modelgl -> atom_win -> visible : FALSE; int i = action_atoms_from_project (opengl_project, remove_search, vis); remove_search = free_this_search_data (remove_search); if (! opengl_project -> modelgl -> cell_win || ! opengl_project -> modelgl -> cell_win -> slab_passivate) { if (! i) { str = g_strdup_printf ("No atoms to be removed !"); } else { str = g_strdup_printf ("%d atom(s) removed !", i); } show_info (str, 0, opengl_project -> modelgl -> win); g_free (str); } else { opengl_project -> modelgl -> search_widg[8] -> int_b = i; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void remove_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void remove_this_atom (GtkWidget * widg, gpointer data) \brief remove this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_this_atom (GtkWidget * widg, gpointer data) #endif { to_remove_this_object (0, data); remove_object (); } /*! \fn void insert_object (int action, gpointer data) \brief insert object \param action the action to perform (replace = 1 or insert only = 3) \param data the associated data pointer */ void insert_object (int action, gpointer data) { int i, j; gchar * str; gboolean vis = (opengl_project -> modelgl -> atom_win) ? opengl_project -> modelgl -> atom_win -> visible : FALSE; if (insert_search -> in_selection) { if (action == 1 && remove_search != NULL) { i = action_atoms_from_project (opengl_project, remove_search, vis); } j = action_atoms_from_project (opengl_project, insert_search, vis); if (action == 1) { str = g_strdup_printf ("%d atom(s) removed !\n%d atom(s) inserted !", i, j); } else { str = g_strdup_printf ("%d atom(s) inserted !", (inserted_from_lib) ? inserted_from_lib : j); inserted_from_lib = 0; } clean_other_window_after_edit (opengl_project); show_info (str, 0, opengl_project -> modelgl -> win); g_free (str); } insert_search = free_this_search_data (insert_search); } gboolean insert_this_object; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data) \brief add object call back GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void add_object (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data) \brief add object call back GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_object (GtkWidget * widg, gpointer data) #endif { prepare_atom_edition (data, FALSE); insert_search = allocate_atom_search (opengl_project -> id, INSERT, INSERT, 0); if (insert_this_object) { gchar * lab = NULL; #ifdef GTK4 if (action != NULL) { lab = get_object_from_action (action); } #else if (widg != NULL) { lab = g_strdup_printf ("%s", gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); } #endif else { lab = g_strdup_printf ("Copied Data"); } allocate_todo (insert_search, 1); insert_search -> todo[0] = 1; prepare_to_instert (lab, opengl_project, insert_search, FALSE); g_free (lab); } else if (copied_object) { tint ul = ulam_coord (opengl_project -> modelgl); opengl_project -> modelgl -> atom_win -> to_be_inserted[1] = duplicate_atomic_object (copied_object); atomic_object * object = opengl_project -> modelgl -> atom_win -> to_be_inserted[1]; int i; for (i=0; i atoms; i++) { object -> at_list[i].x += opengl_project -> modelgl -> insert_coords.x + object -> dim*ul.a; object -> at_list[i].y += opengl_project -> modelgl -> insert_coords.y + object -> dim*ul.b; object -> at_list[i].z += opengl_project -> modelgl -> insert_coords.z + object -> dim*ul.c; } allocate_todo (insert_search, 1); insert_search -> todo[0] = 1; insert_search -> in_selection ++; } insert_object (3, data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to add object callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_add_object (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_add_object (GtkWidget * widg, gpointer data) \brief to add object callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_add_object (GtkWidget * widg, gpointer data) #endif { insert_this_object = TRUE; #ifdef GTK4 add_object (action, parameter, data); #else add_object (widg, data); #endif insert_this_object = FALSE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void replace_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief replace this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void replace_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) { to_replace_this_object (0, action, data); #else /*! \fn G_MODULE_EXPORT void replace_this_atom (GtkWidget * widg, gpointer data) \brief replace this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void replace_this_atom (GtkWidget * widg, gpointer data) { to_replace_this_object (0, widg, data); #endif to_remove_this_object (0, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief copy this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void copy_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void copy_this_atom (GtkWidget * widg, gpointer data) \brief copy this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void copy_this_atom (GtkWidget * widg, gpointer data) #endif { int i; if (pasted_todo) { g_free (pasted_todo); pasted_todo = NULL; } if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); i = GPOINTER_TO_INT(data); pasted_todo[i] = 1; copied_object = create_object_from_selection (opengl_project); } /*! \fn void check_hidden_visible (project * this_proj) \brief check how many atom(s) are visible \param this_proj the target project */ void check_hidden_visible (project * this_proj) { int i, j, k, l, m; int ** num; int * numc[4]; int * numv[4]; int * numg[2]; k = 2; num = allocdint (2, this_proj -> nspec); for (i=0; i<2; i++) if (this_proj -> modelgl -> adv_bonding[i]) k ++; for (i=0; i coord -> totcoord[i]); numv[i] = allocint (this_proj -> coord -> totcoord[i]); if (i < 2) { numg[i] = allocint (this_proj -> nspec); for (j=1; j nspec; j++) { numg[i][j] = this_proj -> coord -> ntg[i][j-1] + numg[i][j-1]; } } } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { for (l=0; l<2; l++) if (this_proj -> atoms[i][j].show[l]) num[l][this_proj -> atoms[i][j].sp] ++; for (l=0; l atoms[i][j].coord[l]; if (l < 2 && this_proj -> atoms[i][j].sp > 0) m += numg[l][this_proj -> atoms[i][j].sp]; numc[l][m] ++; if (this_proj -> atoms[i][j].show[0]) numv[l][m] ++; } } } #ifdef GTK4 gboolean update_bar = FALSE; #endif for (i=0; i<2; i++) { for (j=0; j nspec; j++) { if (num[i][j] > 0) { if (num[i][j] == this_proj -> chemistry -> nsps[j]*this_proj -> steps) { #ifdef GTK4 if (! this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j]) update_bar = TRUE; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j], TRUE); #endif this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j] = TRUE; } } else if (this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j]) { #ifdef GTK4 update_bar = TRUE; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j], FALSE); #endif this_proj -> modelgl -> anim -> last -> img -> show_atom[i][j] = FALSE; } } } l = 0; for (i=0; i coord -> totcoord[i]; j++) { if (numv[i][j] > 0) { if (numc[i][j] == numv[i][j]) { #ifdef GTK4 if (! this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]) update_bar = TRUE; #else // GTK3 Menu Action To Check for (l=0; l<2; l++) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[l][i][j], TRUE); #endif } this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = TRUE; } else if (this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]) { #ifdef GTK4 update_bar = TRUE; #else // GTK3 Menu Action To Check for (l=0; l<2; l++) gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[l][i][j], FALSE); #endif this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = FALSE; } } } else { for (j=0; j coord -> totcoord[i]; j++) { if (numv[i][j] > 0) { this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = TRUE; } else if (this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j]) { this_proj -> modelgl -> anim -> last -> img -> show_coord[i][j] = FALSE; } } } } for (i=0; i<2; i++) g_free (num[i]); g_free (num); for (i=0; i modelgl); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data) \brief show / hide this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_this_atom (GtkWidget * widg, gpointer data) #endif { int i; int id = GPOINTER_TO_INT (data); for (i=0; i steps; i++) { opengl_project -> atoms[i][id].show[0] = ! opengl_project -> atoms[i][id].show[0]; } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } /*! \fn int check_label_numbers (project * this_proj, int types) \brief check how many atom label(s) are visible \param this_proj the target project \param types 0 = atoms, 1 = clones, 2 = all */ int check_label_numbers (project * this_proj, int types) { int h, i, j, k, l; int start, end; int * naid = allocint (this_proj -> nspec); int * nlid = allocint (this_proj -> nspec); start = (types == 0 || types == 2) ? 0 : 1; end = (types == 1 || types == 2) ? 2 : 1; l = 0; #ifdef GTK4 gboolean update_bar = FALSE; #endif for (h=start; h nspec; i++) naid[i] = nlid[i] = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { k = this_proj -> atoms[i][j].sp; naid[k] ++; if (this_proj -> atoms[i][j].label[h]) nlid[k] ++; } } if (h==types || (h == 0 && types == 2)) l = 0; for (i=0; i nspec; i++) { // g_debug ("h= %d, i= %d, nlid[%d]= %d, naid[%d]= %d", h, i+1, i+1, nlid[i], i+1, naid[i]); if (nlid[i] == naid[i]) { #ifdef GTK4 if (! this_proj -> modelgl -> anim -> last -> img -> show_label[h][i]) update_bar = TRUE; #else if (! gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i], 1); } #endif this_proj -> modelgl -> anim -> last -> img -> show_label[h][i] = TRUE; } else { if (nlid[i] == 0) { #ifdef GTK4 if (this_proj -> modelgl -> anim -> last -> img -> show_label[h][i]) update_bar = TRUE; #else if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i])) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[h][i], 0); } #endif } this_proj -> modelgl -> anim -> last -> img -> show_label[h][i] = FALSE; } if (h==types || (h == 0 && types == 2)) l += nlid[i]; } } g_free (naid); g_free (nlid); check_all_trees (this_proj); #ifdef GTK4 if (update_bar) update_menu_bar (this_proj -> modelgl); #endif return l; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief label / unlabel this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data) \brief label / unlabel this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_this_atom (GtkWidget * widg, gpointer data) #endif { int i, j, k, l, m; int id = GPOINTER_TO_INT (data); i = opengl_project -> modelgl -> anim -> last -> img -> step; j = opengl_project -> atoms[i][id].label[0]; for (k=0; k steps; k++) { opengl_project -> atoms[k][id].label[0] = ! j; opengl_project -> atoms[k][id].label[1] = ! j; if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[k][id].numv; l++) { m = opengl_project -> atoms[k][id].vois[l]; opengl_project -> atoms[k][m].label[0] = ! j; opengl_project -> atoms[k][m].label[1] = ! j; } } } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (check_label) { opengl_project -> modelgl -> labelled = check_label_numbers (opengl_project, 2); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select / unselect this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data) \brief select / unselect this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_this_atom (GtkWidget * widg, gpointer data) #endif { int h, i, j, k, l, m; int id = GPOINTER_TO_INT (data); h = get_to_be_selected (opengl_project -> modelgl); j = opengl_project -> modelgl -> anim -> last -> img -> step; save_all_selections (opengl_project -> modelgl, h); k = opengl_project -> atoms[j][id].pick[h]; for (i=0; i steps; i++) { if (i == j) { if (! opengl_project -> modelgl -> selection_mode || opengl_project -> atoms[i][id].pick[h] != selected_status) { process_selected_atom (opengl_project, opengl_project -> modelgl, id, 0, 0, h); } if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[j][id].numv; l++) { m = opengl_project -> atoms[i][id].vois[l]; if (opengl_project -> atoms[i][m].pick[h] != opengl_project -> atoms[i][id].pick[h]) { process_selected_atom (opengl_project, opengl_project -> modelgl, m, 0, 0, h); } } } } else { if (! opengl_project -> modelgl -> selection_mode || opengl_project -> atoms[i][id].pick[h] != selected_status) { opengl_project -> atoms[i][id].pick[h] = ! k; } if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[j][id].numv; l++) { m = opengl_project -> atoms[j][id].vois[l]; opengl_project -> atoms[i][m].pick[h] = opengl_project -> atoms[i][id].pick[h]; } } } } update_all_selections (opengl_project -> modelgl, h); int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, opengl_project); opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (opengl_project -> modelgl -> mode == EDITION) { if (opengl_project -> modelgl -> rebuild[0][1]) opengl_project -> modelgl -> rebuild[0][0] = TRUE; if (opengl_project -> modelgl -> rebuild[1][1]) opengl_project -> modelgl -> rebuild[1][0] = TRUE; } update (opengl_project -> modelgl); } gboolean wait_for_style = FALSE; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change OpenGL rendering style for this atom callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void style_this_atom (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void style_this_atom (GtkWidget * widg, gpointer data) \brief change OpenGL rendering style for this atom callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void style_this_atom (GtkWidget * widg, gpointer data) #endif { int i, j; int id = GPOINTER_TO_INT (data); #ifdef GTK4 j = get_style ((gchar *)g_action_get_name (G_ACTION(action))); #else j = get_style ((char *)gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); #endif for (i=0; i steps; i++) { opengl_project -> atoms[i][id].style = j; } if (! wait_for_style) { init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove selected atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data) \brief remove selected atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_atoms (GtkWidget * widg, gpointer data) #endif { to_remove_this_object (2, data); remove_object (); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief replace selected atom(s) callback GTK3 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) { to_replace_this_object (2, action, data); #else /*! \fn G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data) \brief replace selected atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_atoms (GtkWidget * widg, gpointer data) { to_replace_this_object (2, widg, data); #endif to_remove_this_object (2, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); remove_search = free_this_search_data (remove_search); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief copy selected atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data) \brief copy selected atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint *)data; int h, i, j; if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); h = 0; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> a || opengl_project -> atoms[i][j].label[0] == is_labelled) { if (opengl_project -> atoms[i][j].pick[0] == is_selected || is_selected == -1) { pasted_todo[j] = 1; h = 1; } } } } if (h) { copied_object = create_object_from_selection (opengl_project); } else { g_free (pasted_todo); pasted_todo = NULL; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show all hidden / hide all visible atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_others (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_others (GtkWidget * widg, gpointer data) \brief show all hidden / hide all visible atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_others (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j, k; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { for (k=0; k<2; k++) { if (opengl_project -> atoms[i][j].show[k] == sel -> c) { opengl_project -> atoms[i][j].show[k] = ! sel -> c; } } } } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_the_atoms (GtkWidget * widg, gpointer data) \brief show / hide a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j; h = get_to_be_selected (opengl_project -> modelgl); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (sel -> a == 2 || (opengl_project -> atoms[i][j].pick[h] == is_selected || is_selected == -1)) { if (sel -> a || opengl_project -> atoms[i][j].label[0] == is_labelled) { opengl_project -> atoms[i][j].show[0] = sel -> c; opengl_project -> atoms[i][j].show[1] = sel -> c; } } } } } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief label / unlabel a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data) \brief label / unlabel a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j; h = get_to_be_selected (opengl_project -> modelgl); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (sel -> a == 2 || (opengl_project -> atoms[i][j].pick[h] == is_selected || is_selected == -1)) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; } } } } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (check_label) { opengl_project -> modelgl -> labelled = check_label_numbers (opengl_project, 2); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select / unselect a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data) \brief select / unselect a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_atoms (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint *)data; int h, i, j; h = get_to_be_selected (opengl_project -> modelgl); save_all_selections (opengl_project -> modelgl, h); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (! sel -> b || opengl_project -> atoms[i][j].label[0] == is_labelled) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) { process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } } else { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } } } } update_all_selections (opengl_project -> modelgl, h); int shaders[1] = {SELEC}; re_create_md_shaders (1, shaders, opengl_project); opengl_project -> modelgl -> create_shaders[MEASU] = TRUE; opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (opengl_project -> modelgl -> mode == EDITION) { if (opengl_project -> modelgl -> rebuild[0][1]) opengl_project -> modelgl -> rebuild[0][0] = TRUE; if (opengl_project -> modelgl -> rebuild[1][1]) opengl_project -> modelgl -> rebuild[1][0] = TRUE; } update (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change the OpenGL rendering style of a type of atom(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void style_the_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void style_the_atoms (GtkWidget * widg, gpointer data) \brief change the OpenGL rendering style of a type of atom(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void style_the_atoms (GtkWidget * widg, gpointer data) #endif { int h, i, j, k; tint * sel = (tint *)data; h = get_to_be_selected (opengl_project -> modelgl); #ifdef GTK4 k = get_style ((gchar *)g_action_get_name(G_ACTION(action))); #else k = get_style ((char *)gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); #endif for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (opengl_project -> atoms[i][j].sp == selected_aspec || selected_aspec == -1) { if (sel -> a == 2 || (opengl_project -> atoms[i][j].pick[h] == is_selected || is_selected == -1)) { if (sel -> a || opengl_project -> atoms[i][j].label[0] == is_labelled) { opengl_project -> atoms[i][j].style = k; } } } } } init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief remove a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void remove_the_coord (GtkWidget * widg, gpointer data) \brief remove a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_the_coord (GtkWidget * widg, gpointer data) #endif { to_remove_this_object (1, data); remove_object (); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void replace_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief replace a coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) { to_replace_this_object (1, action, data); #else /*! \fn G_MODULE_EXPORT void replace_the_coord (GtkWidget * widg, gpointer data) \brief replace a coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void replace_the_coord (GtkWidget * widg, gpointer data) { to_replace_this_object (1, widg, data); #endif to_remove_this_object (1, data); insert_object (1, data); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief copy a coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void copy_the_coord (GtkWidget * widg, gpointer data) \brief copy a coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void copy_the_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint *)data; int h, i, j; if (copied_object) { g_free (copied_object); copied_object = NULL; } pasted_todo = allocint (opengl_project -> natomes); h = 0; i = opengl_project -> modelgl -> anim -> last -> img -> step; for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { pasted_todo[j] = 1; h = 1; } } else { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { pasted_todo[j] = 1; h = 1; } } } if (h) { copied_object = create_object_from_selection (opengl_project); } else { g_free (pasted_todo); pasted_todo = NULL; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief show / hide a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data) \brief show / hide a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_hide_the_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j, k; for (i=0; i steps; i++) { k = 0; for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].show[0] = sel -> c; opengl_project -> atoms[i][j].show[1] = sel -> c; } } else { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].show[0] = sel -> c; opengl_project -> atoms[i][j].show[1] = sel -> c; k ++; } } } } check_hidden_visible (opengl_project); init_default_shaders (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief label / unlabel a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data) \brief label / unlabel a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void label_unlabel_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j, k, l, m; if (sel -> a > 3) k = opengl_project -> coord -> geolist[sel -> a][0][sel -> b] - 1; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; if (opengl_project -> modelgl -> selection_mode == 1) { for (l=0; l atoms[i][j].numv; l++) { m = opengl_project -> atoms[i][j].vois[l]; opengl_project -> atoms[i][m].label[0] = sel -> c; opengl_project -> atoms[i][m].label[1] = sel -> c; } } } } else if (sel -> a < 4) { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; } } else { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k]) { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k][0]) { opengl_project -> atoms[i][j].label[0] = sel -> c; opengl_project -> atoms[i][j].label[1] = sel -> c; } } } } } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; if (check_label) { opengl_project -> modelgl -> labelled = check_label_numbers (opengl_project, 2); update (opengl_project -> modelgl); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select / unselect a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data) \brief select / unselect a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_unselect_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j, k; h = get_to_be_selected (opengl_project -> modelgl); save_all_selections (opengl_project -> modelgl, h); if (sel -> a > 3) k = opengl_project -> coord -> geolist[sel -> a][0][sel -> b] - 1; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } else { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } else if (sel -> a < 4) { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } else { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } else { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k]) { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k][0]) { if (i == opengl_project -> modelgl -> anim -> last -> img -> step) { if (opengl_project -> atoms[i][j].pick[h] != sel -> c) process_selected_atom (opengl_project, opengl_project -> modelgl, j, 0, 0, h); } else { opengl_project -> atoms[i][j].pick[h] = sel -> c; } } } } } } update_all_selections (opengl_project -> modelgl, h); int shader[1] = {SELEC}; re_create_md_shaders (1, shader, opengl_project); opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; opengl_project -> modelgl -> create_shaders[MEASU] = TRUE; if (opengl_project -> modelgl -> mode == EDITION) { if (opengl_project -> modelgl -> rebuild[0][1]) opengl_project -> modelgl -> rebuild[0][0] = TRUE; if (opengl_project -> modelgl -> rebuild[1][1]) opengl_project -> modelgl -> rebuild[1][0] = TRUE; } update (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief change OpenGL rendering style for a type of coordination callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void style_the_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void style_the_coord (GtkWidget * widg, gpointer data) \brief change OpenGL rendering style for a type of coordination callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void style_the_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j, k, l; if (sel -> a > 3) k = opengl_project -> coord -> geolist[sel -> a][0][sel -> b] - 1; #ifdef GTK4 l = get_style ((gchar *)g_action_get_name(G_ACTION(action))); #else l = get_style ((char *)gtk_menu_item_get_label (GTK_MENU_ITEM(widg))); #endif for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (sel -> a < 2) { if (opengl_project -> atoms[i][j].sp == selected_aspec && opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].style = l; } } else if (sel -> a < 4) { if (opengl_project -> atoms[i][j].coord[sel -> a] == sel -> b) { opengl_project -> atoms[i][j].style = l; } } else { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k]) { if (opengl_project -> atoms[i][j].rings[sel -> a-4][k][0]) { opengl_project -> atoms[i][j].style = l; } } } } } init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); } /*! \fn void create_new_project_using_data (atom_selection * selection) \brief create new project using an atom selection \param selection the atom selection to use */ void create_new_project_using_data (atom_selection * selection) { int i, j, k, l; int nspec = 0; int * pos_sp, * specs; atom_in_selection * tmp; pos_sp = allocint (opengl_project -> nspec); specs = allocint (opengl_project -> nspec); for (i=0; i nspec; i++) { specs[i] = 0; pos_sp[i] = -1; } tmp = selection -> first; j = -1; for (i=0; i selected; i++) { specs[tmp -> sp] ++; if (pos_sp[tmp -> sp] < 0) { j ++; pos_sp[tmp -> sp] = j; } if (tmp -> next != NULL) tmp = tmp -> next; } for (i=0; i nspec; i++) if (specs[i] > 0) nspec ++; init_project (TRUE); active_project -> nspec = nspec; active_project -> natomes = selection -> selected; active_project -> steps = 1; alloc_proj_data (active_project, 1); active_chem = active_project -> chemistry; if (active_project -> natomes == opengl_project -> natomes) { active_cell -> ltype = opengl_project -> cell.ltype; active_cell -> pbc = opengl_project -> cell.pbc; k = (active_cell -> npt) ? opengl_project -> modelgl -> anim -> last -> img -> step : 0; for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) active_box -> param[i][j] = opengl_project -> cell.box[k].param[i][j]; active_box -> vect[i][j] = opengl_project -> cell.box[k].vect[i][j]; } } } for (i=0; i nspec; i++) { if (pos_sp[i] > -1) { k = pos_sp[i]; active_chem -> label[k] = g_strdup_printf ("%s", opengl_project -> chemistry -> label[i]); active_chem -> element[k] = g_strdup_printf ("%s", opengl_project -> chemistry -> element[i]); active_chem -> nsps[k] = specs[i]; for (j=0; j chem_prop[j][k] = opengl_project -> chemistry -> chem_prop[j][i]; for (j=0; j nspec; j++) { if (pos_sp[j] > -1) { l = pos_sp[j]; active_chem -> cutoffs[k][l] = opengl_project -> chemistry -> cutoffs[i][j]; } } } } active_chem -> grtotcutoff = opengl_project -> chemistry -> grtotcutoff; tmp = selection -> first; for (i=0; i steps; i++) { tmp = selection -> first; for (j=0; j natomes; j++) { k = tmp -> id; active_project -> atoms[i][j].id = j; active_project -> atoms[i][j].sp = pos_sp[tmp -> sp]; active_project -> atoms[i][j].x = opengl_project -> atoms[i][k].x; active_project -> atoms[i][j].y = opengl_project -> atoms[i][k].y; active_project -> atoms[i][j].z = opengl_project -> atoms[i][k].z; active_project -> atoms[i][j].show[0] = TRUE; active_project -> atoms[i][j].show[1] = TRUE; active_project -> atoms[i][j].label[0] = FALSE; active_project -> atoms[i][j].label[1] = FALSE; active_project -> atoms[i][j].pick[0] = FALSE; active_project -> atoms[i][j].cloned = FALSE; // Next line for style, to initialize style use: NONE active_project -> atoms[i][j].style = opengl_project -> atoms[i][k].style; if (tmp -> next != NULL) tmp = tmp -> next; } } active_project -> runok[BD] = TRUE; active_project -> runok[RI] = TRUE; active_project -> runok[CH] = TRUE; active_project -> runok[SP] = TRUE; active_project_changed (activep); add_project_to_workspace (); i = opengl_project -> modelgl -> anim -> last -> img -> style; apply_project (FALSE); active_image -> style = i; update_all_menus (active_glwin, active_project -> natomes); g_free (pos_sp); g_free (specs); // Duplicate lightning and material duplicate_material_and_lightning (active_image, opengl_project -> modelgl -> anim -> last -> img); update (active_glwin); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create new project using selection callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void edit_in_new_project (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data) \brief create new project using selection callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_in_new_project (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int h, i, j; atom_selection * selected; atom_in_selection * tmp_a; selected = g_malloc0 (sizeof*selected); h = get_to_be_selected (opengl_project -> modelgl); if (! sel -> b) { if (sel -> c) { selected = opengl_project -> modelgl -> anim -> last -> img -> selected[h]; } else { selected -> selected = opengl_project -> natomes - opengl_project -> modelgl -> anim -> last -> img -> selected[h] -> selected; j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { if (! opengl_project -> atoms[j][i].pick[h]) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } } } } } else { selected -> selected = (is_labelled) ? opengl_project -> modelgl -> labelled : opengl_project -> natomes - opengl_project -> modelgl -> labelled; j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { if (opengl_project -> atoms[j][i].label[0] == is_labelled) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } } } } if (selected -> selected > 0) create_new_project_using_data (selected); selected = NULL; g_free (selected); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create new project using coordination type and id callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void edit_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data) \brief create new project using coordination type and id callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_coord (GtkWidget * widg, gpointer data) #endif { tint * sel = (tint * )data; int i, j; atom_selection * selected; atom_in_selection * tmp_a; gboolean save_it; selected = g_malloc0 (sizeof*selected); j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { save_it = FALSE; if (sel -> a < 2) { if (opengl_project -> atoms[j][i].sp == selected_aspec && opengl_project -> atoms[j][i].coord[sel -> a] == sel -> b) { save_it = TRUE; } } else { if (opengl_project -> atoms[j][i].coord[sel -> a] == sel -> b) { save_it = TRUE; } } if (save_it) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } selected -> selected ++; } } if (selected -> selected > 0) create_new_project_using_data (selected); g_free (selected); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create new project using atomic species callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void edit_atoms (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data) \brief create new project using atomic species callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void edit_atoms (GtkWidget * widg, gpointer data) #endif { int i, j; atom_selection * selected; atom_in_selection * tmp_a; selected = g_malloc0 (sizeof*selected); j = opengl_project -> modelgl -> anim -> last -> img -> step; for (i=0; i natomes; i++) { if (opengl_project -> atoms[j][i].sp == selected_aspec || selected_aspec == -1) { if (selected -> first) { tmp_a -> next = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = tmp_a -> next; } else { selected -> first = new_atom_in_selection (i, opengl_project -> atoms[j][i].sp); tmp_a = selected -> first; } selected -> selected ++; } } if (selected -> selected > 0) create_new_project_using_data (selected); g_free (selected); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select action for all object(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_action_for_all (GtkWidget * widg, gpointer data) \brief select action for all object(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all (GtkWidget * widg, gpointer data) #endif { int i = GPOINTER_TO_INT(data); selected_aspec = -1; #ifdef DEBUG g_debug ("Action for All= %d", i); #endif // DEBUG #ifdef GTK4 switch (i) { case 0: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][1]); break; case 1: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); break; case 2: label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][1]); break; case 3: label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][0]); break; case 4: show_hide_the_atoms (NULL, NULL, & atoid[0][0]); break; case 5: show_hide_the_atoms (NULL, NULL, & atoid[1][1]); break; case 6: style_the_atoms (action, NULL, & atoid[0][1]); break; // No case 7 = color case 8: edit_in_new_project (NULL, NULL, & opengl_project -> modelgl -> colorp[0][is_selected]); break; case 9: remove_the_atoms (action, NULL, & cut_sel); break; case 10: replace_the_atoms (action, NULL, & cut_sel); break; case 11: copy_the_atoms (action, NULL, & cut_sel); break; case CONTEXTACT: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+1: select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[1][0]); break; case CONTEXTACT+2: is_selected = -1; label_unlabel_atoms (NULL, NULL, & atoid[0][0]); break; case CONTEXTACT+3: is_selected = -1; label_unlabel_atoms (NULL, NULL, & atoid[1][0]); break; case CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[0][0]); break; case CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[1][0]); break; case CONTEXTACT+6: is_selected = -1; style_the_atoms (action, NULL, & atoid[0][0]); break; case CONTEXTACT+8: is_selected = -1; edit_in_new_project (NULL, NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+9: is_selected = -1; remove_the_atoms (action, NULL, & cut_sel); break; case CONTEXTACT+10: is_selected = -1; replace_the_atoms (action, NULL, & cut_sel); break; case CONTEXTACT+11: is_selected = -1; copy_the_atoms (action, NULL, & cut_sel); break; case 2*CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[0][1]); break; case 2*CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, NULL, & atoid[1][1]); break; } #else switch (i) { case 0: select_unselect_atoms (widg, & opengl_project -> modelgl -> colorp[0][1]); break; case 1: select_unselect_atoms (widg, & opengl_project -> modelgl -> colorp[0][0]); break; case 2: label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][1]); break; case 3: label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][0]); break; case 4: show_hide_the_atoms (NULL, & atoid[0][0]); break; case 5: show_hide_the_atoms (NULL, & atoid[1][1]); break; case 6: style_the_atoms (widg, & atoid[0][1]); break; // No case 7 = color case 8: edit_in_new_project (NULL, & opengl_project -> modelgl -> colorp[0][is_selected]); break; case 9: remove_the_atoms (widg, & cut_sel); break; case 10: replace_the_atoms (widg, & cut_sel); break; case 11: copy_the_atoms (widg, & cut_sel); break; case CONTEXTACT: select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+1: select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[1][0]); break; case CONTEXTACT+2: is_selected = -1; label_unlabel_atoms (NULL, & atoid[0][0]); break; case CONTEXTACT+3: is_selected = -1; label_unlabel_atoms (NULL, & atoid[1][0]); break; case CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, & atoid[0][0]); break; case CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, & atoid[1][0]); break; case CONTEXTACT+6: is_selected = -1; style_the_atoms (widg, & atoid[0][0]); break; case CONTEXTACT+8: is_selected = -1; edit_in_new_project (NULL, & opengl_project -> modelgl -> colorp[1][1]); break; case CONTEXTACT+9: is_selected = -1; remove_the_atoms (widg, & cut_sel); break; case CONTEXTACT+10: is_selected = -1; replace_the_atoms (widg, & cut_sel); break; case CONTEXTACT+11: is_selected = -1; copy_the_atoms (widg, & cut_sel); break; case 2*CONTEXTACT+4: is_selected = -1; show_hide_the_atoms (NULL, & atoid[0][1]); break; case 2*CONTEXTACT+5: is_selected = -1; show_hide_the_atoms (NULL, & atoid[1][1]); break; } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data) \brief selection action for this bond callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_this_bond (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_action_for_this_bond (GtkWidget * widg, gpointer data) \brief selection action for this bond callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_this_bond (GtkWidget * widg, gpointer data) #endif { int i, s; i = GPOINTER_TO_INT(data); #ifdef GTK4 switch (i) { case 0: select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 1: select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 2: label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 3: label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 4: show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 5: show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(selected_btom)); break; case 6: style_this_atom (action, NULL, GINT_TO_POINTER(selected_atom)); style_this_atom (action, NULL, GINT_TO_POINTER(selected_btom)); break; default: // 8 = create project // 9 = remove // 10 = replace // 11 = copy bond_selection = g_malloc0(sizeof*bond_selection); s = opengl_project -> modelgl -> anim -> last -> img -> step; bond_selection -> first = new_atom_in_selection (selected_atom, opengl_project -> atoms[s][selected_atom].sp); bond_selection -> selected ++; bond_selection -> first -> next = new_atom_in_selection (selected_btom, opengl_project -> atoms[s][selected_btom].sp); bond_selection -> selected ++; switch (i) { case 8: create_new_project_using_data (bond_selection); break; case 9: to_remove_this_object (3, NULL); remove_object (); break; case 10: to_replace_this_object (3, action, data); to_remove_this_object (3, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); remove_search = free_this_search_data (remove_search); break; case 11: copy_bond_selection (); break; } break; g_free (bond_selection); bond_selection = NULL; } #else switch (i) { case 0: select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 1: select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_atom)); select_unselect_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 2: label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 3: label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_atom)); label_unlabel_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 4: show_hide_this_atom (NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 5: show_hide_this_atom (NULL, GINT_TO_POINTER(selected_atom)); show_hide_this_atom (NULL, GINT_TO_POINTER(selected_btom)); break; case 6: style_this_atom (widg, GINT_TO_POINTER(selected_atom)); style_this_atom (widg, GINT_TO_POINTER(selected_btom)); break; default: // 8 = create project // 9 = remove // 10 = replace // 11 = copy bond_selection = g_malloc0(sizeof*bond_selection); s = opengl_project -> modelgl -> anim -> last -> img -> step; bond_selection -> first = new_atom_in_selection (selected_atom, opengl_project -> atoms[s][selected_atom].sp); bond_selection -> selected ++; bond_selection -> first -> next = new_atom_in_selection (selected_btom, opengl_project -> atoms[s][selected_btom].sp); bond_selection -> selected ++; switch (i) { case 8: create_new_project_using_data (bond_selection); break; case 9: to_remove_this_object (3, NULL); remove_object (); break; case 10: to_replace_this_object (3, widg, data); to_remove_this_object (3, data); insert_object (1, & opengl_project -> modelgl -> colorp[0][0]); remove_search = free_this_search_data (remove_search); break; case 11: copy_bond_selection (); break; } break; g_free (bond_selection); bond_selection = NULL; } #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) \brief select action for all bonds based on menu item id callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void select_action_for_all_bonds (GtkWidget * widg, gpointer data) \brief select action for all bonds based on menu item id callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void select_action_for_all_bonds (GtkWidget * widg, gpointer data) #endif { int g, h, i, j, k, l, m, n, o; int mid = GPOINTER_TO_INT(data); int s = opengl_project -> modelgl -> anim -> last -> img -> step; g = get_to_be_selected (opengl_project -> modelgl); gboolean doit; gboolean eqtc, eqpc; bond_selection = NULL; atom_in_selection * tmp_a; if (mid == 6 || mid == 6+CONTEXTACT || mid == 6+2*CONTEXTACT) wait_for_style = TRUE; for (h=0; h<2; h++) { for (i=0; i modelgl -> bonds[s][h]; i++) { doit = FALSE; k = opengl_project -> modelgl -> bondid[s][h][i][0]; j = opengl_project -> modelgl -> bondid[s][h][i][1]; l = opengl_project -> atoms[s][k].coord[0]; m = opengl_project -> atoms[s][j].coord[0]; n = opengl_project -> atoms[s][k].coord[1]; o = opengl_project -> atoms[s][j].coord[1]; if ((opengl_project -> atoms[s][j].sp == selected_aspec && opengl_project -> atoms[s][k].sp == selected_bspec) || (opengl_project -> atoms[s][k].sp == selected_aspec && opengl_project -> atoms[s][j].sp == selected_bspec)) doit = TRUE; if (doit) { if (opengl_project -> atoms[s][j].sp == selected_aspec && opengl_project -> atoms[s][k].sp == selected_bspec) { eqtc = ((l == atoid[0][0].b && m == btoid.a) || (l == btoid.a && m == atoid[0][0].b)) ? TRUE : FALSE; eqpc = ((n == atoid[0][1].b && o == btoid.b) || (n == btoid.b && o == atoid[0][1].b)) ? TRUE : FALSE; } else { eqtc = ((l == atoid[0][0].b && m == btoid.a) || (l == btoid.a && m == atoid[0][0].b)) ? TRUE : FALSE; eqpc = ((n == atoid[0][1].b && o == btoid.b) || (n == btoid.b && o == atoid[0][1].b)) ? TRUE : FALSE; } #ifdef GTK4 if (mid == 0 || (mid == CONTEXTACT && eqtc) || (mid == 2*CONTEXTACT && eqpc)) { if (! opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 1 || (mid == CONTEXTACT+1 && eqtc) || (mid == 2*CONTEXTACT+1 && eqpc)) { if (opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 2 || (mid == CONTEXTACT+2 && eqtc) || (mid == 2*CONTEXTACT+2 && eqpc)) { if (! opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 3 || (mid == CONTEXTACT+3 && eqtc) || (mid == 2*CONTEXTACT+3 && eqpc)) { if (opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 4 || (mid == CONTEXTACT+4 && eqtc) || (mid == 2*CONTEXTACT+4 && eqpc)) { if (! opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 5 || (mid == CONTEXTACT+5 && eqtc) || (mid == 2*CONTEXTACT+5 && eqpc)) { if (opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(k)); } else if (mid == 6 || (mid == CONTEXTACT+6 && eqtc) || (mid == 2*CONTEXTACT+6 && eqpc)) { style_this_atom (action, NULL, GINT_TO_POINTER(j)); style_this_atom (action, NULL, GINT_TO_POINTER(k)); } #else if (mid == 0 || (mid == CONTEXTACT && eqtc) || (mid == 2*CONTEXTACT && eqpc)) { if (! opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 1 || (mid == CONTEXTACT+1 && eqtc) || (mid == 2*CONTEXTACT+1 && eqpc)) { if (opengl_project -> atoms[s][j].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].pick[g]) select_unselect_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 2 || (mid == CONTEXTACT+2 && eqtc) || (mid == 2*CONTEXTACT+2 && eqpc)) { if (! opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 3 || (mid == CONTEXTACT+3 && eqtc) || (mid == 2*CONTEXTACT+3 && eqpc)) { if (opengl_project -> atoms[s][j].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].label[0]) label_unlabel_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 4 || (mid == CONTEXTACT+4 && eqtc) || (mid == 2*CONTEXTACT+4 && eqpc)) { if (! opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(j)); if (! opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 5 || (mid == CONTEXTACT+5 && eqtc) || (mid == 2*CONTEXTACT+5 && eqpc)) { if (opengl_project -> atoms[s][j].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(j)); if (opengl_project -> atoms[s][k].show[0]) show_hide_this_atom (NULL, GINT_TO_POINTER(k)); } else if (mid == 6 || (mid == CONTEXTACT+6 && eqtc) || (mid == 2*CONTEXTACT+6 && eqpc)) { style_this_atom (widg, GINT_TO_POINTER(j)); style_this_atom (widg, GINT_TO_POINTER(k)); } #endif else if ((mid == 8 || (mid == CONTEXTACT+8 && eqtc) || (mid == 2*CONTEXTACT+8 && eqpc)) || (mid == 9 || (mid == CONTEXTACT+9 && eqtc) || (mid == 2*CONTEXTACT+9 && eqpc)) || (mid == 10 || (mid == CONTEXTACT+10 && eqtc) || (mid == 2*CONTEXTACT+10 && eqpc)) || (mid == 11 || (mid == CONTEXTACT+11 && eqtc) || (mid == 2*CONTEXTACT+11 && eqpc))) { if (! bond_selection) { bond_selection = g_malloc0 (sizeof*bond_selection); bond_selection -> first = new_atom_in_selection (j, opengl_project -> atoms[s][j].sp); tmp_a = bond_selection -> first; } else { tmp_a -> next = new_atom_in_selection (j, opengl_project -> atoms[s][j].sp); tmp_a = tmp_a -> next; } bond_selection -> selected ++; tmp_a -> next = new_atom_in_selection (k, opengl_project -> atoms[s][k].sp); tmp_a = tmp_a -> next; bond_selection -> selected ++; } } } } if (mid == 6 || mid == CONTEXTACT+6 || mid == 2*CONTEXTACT+6) { init_default_shaders (opengl_project -> modelgl); update (opengl_project -> modelgl); wait_for_style = FALSE; } else if (mid == 8 || mid == CONTEXTACT+8 || mid == 2*CONTEXTACT+8) { if (bond_selection -> selected > 0) create_new_project_using_data (bond_selection); g_free (bond_selection); bond_selection = NULL; } else if (mid == 9 || mid == CONTEXTACT+9 || mid == 2*CONTEXTACT+9) { if (bond_selection) { to_remove_this_object (3, data); remove_object (); g_free (bond_selection); bond_selection = NULL; } } else if (mid == 10 || mid == CONTEXTACT+10 || mid == 2*CONTEXTACT+10) { if (bond_selection) { #ifdef GTK4 to_replace_this_object (3, action, data); #else to_replace_this_object (3, widg, data); #endif to_remove_this_object (3, data); insert_object (1, data); g_free (bond_selection); bond_selection = NULL; } } else if (mid == 11 || mid == CONTEXTACT+11 || mid == 2*CONTEXTACT+11) { if (bond_selection) { copy_bond_selection (); g_free (bond_selection); bond_selection = NULL; } } } #ifdef GTK4 /*! \fn GMenu * add_edition_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) \brief add edition submenu to the popup menu GTK4 \param view the target glwin \param act the action name \param aid the action id \param handler the associated callback \param data the associated data pointer */ GMenu * add_edition_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) { GMenu * menu = g_menu_new (); GMenu * menus; gchar * word, * name, * str; gchar * eact = g_strdup_printf ("mol-ins-%s-%d", act, aid); int i, j; for (i=0; mol[i].type || mol[i].object; i++) { if (mol[i].type) { menus = g_menu_new (); append_submenu (menu, mol[i].type, menus); } if (mol[i].object) { append_opengl_item (view, menus, mol[i].object, eact, 1, i, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); } } g_free (eact); gboolean doit = FALSE; for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { doit = TRUE; break; } } if (doit) { GMenu * menup = g_menu_new (); GMenu * menups; eact = g_strdup_printf ("ifp-%s-%d", act, aid); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { name = g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1); menups = g_menu_new (); for (j=0; j<3; j++) { word = g_strdup_printf ("%s in %s", action_atoms[j], name); str = g_strdup_printf ("%s-%d", eact, j); append_opengl_item (view, menups, word, str, 1, i, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); g_free (word); g_free (str); } append_submenu (menup, name, menups); g_object_unref (menups); g_free (name); } } g_free (eact); append_submenu (menu, "Import From Project", menup); g_object_unref (menup); } eact = g_strdup_printf ("cp-%s-%d", act, aid); append_opengl_item (view, menu, "Copied Data", eact, 1, 0, "V", IMG_NONE, NULL, FALSE, G_CALLBACK(add_object), data, FALSE, FALSE, FALSE, (copied_object) ? TRUE : FALSE); g_free (eact); return menu; } /*! \fn GMenu * add_style_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) \brief create style submenu and insert to menu item GTK4 \param view the target glwin \param act the action name \param aid the action id \param handler the associated callback \param data the associated data pointer */ GMenu * add_style_sub_menu (glwin * view, gchar * act, int aid, GCallback handler, gpointer data) { GMenu * menu = g_menu_new (); gchar * actc = g_strdup_printf ("%s-%d", act, aid); int i; for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { doit = TRUE; break; } } if (doit) { titem = create_menu_item (TRUE, "Import From Project"); gtk_menu_shell_append ((GtkMenuShell *)menu, titem); smenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)titem, smenu); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { name = g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1); sitem = create_menu_item_from_widget (markup_label(name, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); //child = gtk_bin_get_child (GTK_BIN (sitem)); //gtk_label_set_use_markup (GTK_LABEL(child), 1); //g_signal_connect (G_OBJECT (sitem), "activate", handler, data); gtk_menu_shell_append ((GtkMenuShell *)smenu, sitem); pmenu = gtk_menu_new (); gtk_menu_item_set_submenu ((GtkMenuItem *)sitem, pmenu); for (j=0; j<3; j++) { word = g_strdup_printf ("%s in %s", action_atoms[j], name); gtk3_menu_item (pmenu, word, IMG_NONE, NULL, handler, data, FALSE, 0, 0, FALSE, FALSE, FALSE); g_free (word); } g_free (name); } } } GtkWidget * pastem = gtk3_menu_item (menu, "Copied Data", IMG_NONE, NULL, G_CALLBACK(add_object), data, TRUE, GDK_KEY_v, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); if (! copied_object) widget_set_sensitive (pastem, 0); } #endif #ifdef GTK4 /*! \fn void create_selection_item (GMenu * menu, glwin * view, gchar * str, gchar * act, int aid, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) \brief append new menu item to popup menu GTK4 \param menu the menu to append the new menu item to \param view the target glwin \param str the new menu item label \param act the new menu item action \param aid the action id \param mid menu item id \param gid coordination type \param cid coordination id \param aoc atom (0) or clone (1) \param handler the associated callback \param data the associated data pointer */ void create_selection_item (GMenu * menu, glwin * view, gchar * str, gchar * act, int aid, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) { gchar * actc = g_strdup_printf ("%s-%d", act, aid); #else /*! \fn GtkWidget * create_selection_item (glwin * view, gchar * str, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) \brief create new menu item for the popup menu GTK3 \param view the target glwin \param str the new menu item label \param mid menu item id \param gid coordination type \param cid coordination id \param aoc atom (0) or clone (1) \param handler the associated callback \param data the associated data pointer */ GtkWidget * create_selection_item (glwin * view, gchar * str, int mid, int gid, int cid, int aoc, GCallback handler, gpointer data) { GtkWidget * sel_item = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); #endif int i, j; if (mid == 6) { #ifdef GTK4 append_submenu (menu, str, add_style_sub_menu (view, act, aid, handler, data)); #else add_style_sub_menu (sel_item, handler, data); #endif } else if (mid == 7) { if (cid < 0) { i = get_project_by_id (view -> proj) -> nspec; #ifdef GTK4 append_submenu (menu, str, color_item(view, actc, mid, G_CALLBACK(to_run_atom_color_window), & view -> colorp[0][selected_aspec+aoc*i])); #else gtk_menu_item_set_submenu ((GtkMenuItem *)sel_item, color_box(view, selected_aspec+aoc*i, 0, 0)); #endif } else { #ifdef GTK4 i = cid; if (gid < 2) { for (j=0; j coord -> ntg[gid][j]; } append_submenu (menu, str, color_item(view, actc, mid, G_CALLBACK(window_color_coord), & view -> gcid[gid][i][gid])); #else int k; j = 2*opengl_project -> nspec; for (i=0; i < gid; i++) { j += opengl_project -> coord -> totcoord[i]; } if (gid < 2) { for (i=0; i coord -> ntg[gid][i]; } k = selected_aspec; } else { k = gid; } gtk_menu_item_set_submenu ((GtkMenuItem *)sel_item, color_box(view, j+cid, k, cid)); #endif } } else if (mid == 10) { #ifdef GTK4 append_submenu (menu, str, add_edition_sub_menu (view, act, aid, handler, data)); #else add_edition_sub_menu (sel_item, handler, data); #endif } else { #ifdef GTK4 append_opengl_item (view, menu, str, actc, 1, 0, NULL, IMG_NONE, NULL, FALSE, handler, data, FALSE, FALSE, FALSE, TRUE); #else g_signal_connect (G_OBJECT (sel_item), "activate", handler, data); #endif } #ifdef GTK4 g_free (actc); #else return sel_item; #endif } gchar * mot[2][2]={{"All Non-Selected Atom(s)/Bond(s)", "All Selected Atom(s)/Bond(s)"}, {"All Non-Labelled Atom(s)/Bond(s)", "All Labelled Atom(s)/Bond(s)"}}; #ifdef GTK4 /*! \fn GMenu * selection_menu (int aid, glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) \brief create popup submenu GTK4 \param aid action id \param view the target glwin \param ati 1st atom \param bti 2nd atom, if any \param aoc atom (0) or clone (1) \param mid menu id \param handler_a 1st callback - this object \param handler_b 2nd callback - coordination(s) \param handler_c 3rd callback - atom(s) */ GMenu * selection_menu (int aid, glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) #else /*! \fn GtkWidget * selection_menu (glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) \brief create popup submenu GTK3 \param view the target glwin \param ati 1st atom \param bti 2nd atom, if any \param aoc atom (0) or clone (1) \param mid menu id \param handler_a 1st callback - this object \param handler_b 2nd callback - coordination(s) \param handler_c 3rd callback - atom(s) */ GtkWidget * selection_menu (glwin * view, int ati, int bti, int aoc, int mid, GCallback handler_a, GCallback handler_b, GCallback handler_c) #endif { int p = view -> proj; int s = view -> anim -> last -> img -> step; int spa, spb; int i, j, k; gchar * str; #ifdef GTK4 gchar * strb; GMenu * menu = g_menu_new (); #else GtkWidget * sel; GtkWidget * menu = gtk_menu_new (); #endif project * this_proj = get_project_by_id(p); spa = this_proj -> atoms[s][ati].sp; if (bti > -1) spb = this_proj -> atoms[s][bti].sp; if (bti < 0 && (((mid == 5 || mid == 6) && this_proj -> atoms[s][ati].show[aoc]) || (mid == 0 && ! is_selected) || (mid == 1 && is_selected) || (mid == 2 && ! is_labelled) || (mid == 3 && is_labelled) || (mid > 8 && mid < 11))) { str = g_strdup_printf ("This Atom: %s%d", exact_name(this_proj -> chemistry -> label[spa]), ati+1); #ifdef GTK4 if (mid == 6) { append_submenu (menu, str, add_style_sub_menu (view, "tas", aid, handler_a, GINT_TO_POINTER(ati))); } else if (mid == 10) { append_submenu (menu, str, add_edition_sub_menu (view, "tae", aid, handler_a, GINT_TO_POINTER(ati))); } else { strb = g_strdup_printf ("act-%d-%d", aid, mid); append_opengl_item (view, menu, str, strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, handler_a, GINT_TO_POINTER(ati), FALSE, FALSE, FALSE, TRUE); g_free (strb); } #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); if (mid == 6) { add_style_sub_menu (sel, handler_a, GINT_TO_POINTER(ati)); } else if (mid == 10) { add_edition_sub_menu (sel, handler_a, GINT_TO_POINTER(ati)); } else { g_signal_connect (G_OBJECT (sel), "activate", handler_a, GINT_TO_POINTER(ati)); } #endif } else if (bti > -1 && mid != 4 && mid != 7) { str = g_strdup_printf ("This Bond: %s%d - %s%d", exact_name(this_proj -> chemistry -> label[spa]), ati+1, exact_name(this_proj -> chemistry -> label[spb]), bti+1); #ifdef GTK4 if (mid == 6) { append_submenu (menu, str, add_style_sub_menu (view, "tb-s", aid, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid))); } else if (mid == 10) { append_submenu (menu, str, add_edition_sub_menu (view, "tb-e", aid, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid))); } else { strb = g_strdup_printf ("act-%d-%d", aid, mid); append_opengl_item (view, menu, str, strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid), FALSE, FALSE, FALSE, TRUE); g_free (strb); } #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); if (mid == 6) { add_style_sub_menu (sel, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid)); } else if (mid == 10) { add_edition_sub_menu (sel, G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid)); } else { g_signal_connect (G_OBJECT (sel), "activate", G_CALLBACK(select_action_for_this_bond), GINT_TO_POINTER(mid)); } gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } if (mid != 7) { k = 0; for (j=0; j<2; j++) { if (mid<2 && j==0) { i = mid; } else if ((mid > 1 && mid < 4) && j==1) { i = mid - 2; } else { i = (j) ? is_labelled : is_selected; } #ifdef GTK4 if (mid == 6) { append_submenu (menu, mot[j][i], add_style_sub_menu (view, "all-s", aid, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k))); } else if (mid == 10) { append_submenu (menu, mot[j][i], add_edition_sub_menu (view, "all-e", aid, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k))); } else { strb = g_strdup_printf ("act-all-%d-%d", aid, mid+k); append_opengl_item (view, menu, mot[j][i], strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k), FALSE, FALSE, FALSE, TRUE); g_free (strb); } #else sel = create_menu_item_from_widget (markup_label (mot[j][i], -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); if (mid == 6) { add_style_sub_menu (sel, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k)); } else if (mid == 10) { add_edition_sub_menu (sel, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k)); } else { g_signal_connect (G_OBJECT (sel), "activate", G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+k)); } gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif k = CONTEXTACT; } } for (i=0; i<2; i++) { if (this_proj -> modelgl -> adv_bonding[i]) { j = this_proj -> atoms[s][ati].coord[2+i]; str = (! i) ? g_strdup_printf ("Fragment N°:\t%d", j+1) : g_strdup_printf ("Molecule N°:\t%d", j+1); #ifdef GTK4 create_selection_item (menu, view, str, (! i) ? "afm" : "amo", aid, mid, 2+i, j, aoc, handler_b, & atoid[mid][2+i]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item (view, str, mid, 2+i, j, aoc, handler_b, & atoid[mid][2+i])); #endif g_free (str); } } if (bti < 0) { if (this_proj -> atoms[s][ati].coord[0] > -1) { i = this_proj -> atoms[s][ati].coord[0]; str = g_strdup_printf ("All %d Fold %s Atoms", this_proj -> coord -> geolist[0][spa][i], exact_name(this_proj -> chemistry -> label[spa])); #ifdef GTK4 create_selection_item (menu, view, str, "atc", aid, mid, 0, i, aoc, handler_b, & atoid[mid][0]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, 0, i, aoc, handler_b, & atoid[mid][0])); #endif g_free (str); } if (this_proj -> atoms[s][ati].coord[1] > -1) { i = this_proj -> atoms[s][ati].coord[1]; str = g_strdup_printf ("All %s Coordinations", env_name (this_proj, i, spa, 1, NULL)); #ifdef GTK4 create_selection_item (menu, view, str, "apc", aid, mid, 1, i, aoc, handler_b, & atoid[mid][1]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, 1, i, aoc, handler_b, & atoid[mid][1])); #endif g_free (str); } if (! aoc) { str = g_strdup_printf ("All %s Atoms", exact_name(this_proj -> chemistry -> label[spa])); } else { str = g_strdup_printf ("All %s* Clones", exact_name(this_proj -> chemistry -> label[spa])); } #ifdef GTK4 create_selection_item (menu, view, str, "asp", aid, mid, 0, -1, aoc, handler_c, & atoid[mid][2]); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, 0, -1, aoc, handler_c, & atoid[mid][2])); #endif g_free (str); } else { if (this_proj -> atoms[s][ati].coord[0] > -1 && this_proj -> atoms[s][bti].coord[0] > -1) { i = this_proj -> atoms[s][ati].coord[0]; j = this_proj -> atoms[s][bti].coord[0]; str = g_strdup_printf ("All %s %d - %s %d Bonds", exact_name(this_proj -> chemistry -> label[spa]), this_proj -> coord -> geolist[0][spa][i], exact_name(this_proj -> chemistry -> label[spb]), this_proj -> coord -> geolist[0][spb][j]); #ifdef GTK4 create_selection_item (menu, view, str, "atcb", aid, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+CONTEXTACT)); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+CONTEXTACT))); #endif g_free (str); } if (this_proj -> atoms[s][ati].coord[1] > -1 && this_proj -> atoms[s][bti].coord[1] > -1) { i = this_proj -> atoms[s][ati].coord[1]; j = this_proj -> atoms[s][bti].coord[1]; str = g_strdup_printf ("All %s - %s Bonds", env_name (this_proj, i, spa, 1, NULL), env_name (this_proj, j, spb, 1, NULL)); #ifdef GTK4 create_selection_item (menu, view, str, "apcb", aid, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+2*CONTEXTACT)); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid+2*CONTEXTACT))); #endif g_free (str); } str = g_strdup_printf ("All %s - %s Bonds", exact_name(this_proj -> chemistry -> label[spa]), exact_name(this_proj -> chemistry -> label[spb])); #ifdef GTK4 create_selection_item (menu, view, str, "acb", aid, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid)); #else gtk_menu_shell_append ((GtkMenuShell *)menu, create_selection_item(view, str, mid, -1, -1, aoc, G_CALLBACK(select_action_for_all_bonds), GINT_TO_POINTER(mid))); #endif g_free (str); } if (mid > 3 && mid < 6) { gchar * mat[2]={"All Hidden Atom(s)/Bond(s)", "All Visible Atom(s)/Bond(s)"}; #ifdef GTK4 strb = g_strdup_printf ("all-hv-%d-%d", aid, mid); append_opengl_item (view, menu, mat[mid%2], strb, 1, 0, NULL, IMG_NONE, NULL, FALSE, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+2*CONTEXTACT), FALSE, FALSE, FALSE, TRUE); g_free (strb); #else gtk3_menu_item (menu, mat[mid%2], IMG_NONE, NULL, G_CALLBACK(select_action_for_all), GINT_TO_POINTER(mid+2*CONTEXTACT), FALSE, 0, 0, FALSE, FALSE, FALSE); #endif } return menu; } #ifdef GTK4 /*! \fn void analyze_popup_attach_color_palettes (glwin * view, GtkWidget * menu, int ato, int spc, int totc, int parc, int frag, int mol) \brief contextual popup menu attach color palettes GTK4 \param view the target glwin \param menu the GtkWidget sending the signal \param ato the picked atom \param spc the picked chemical species \param totc the total coordination of ato \param parc the partial coordination of ato \param frag the fragment of ato \param mol the molecule of ato */ void analyze_popup_attach_color_palettes (glwin * view, GtkWidget * menu, int ato, int spc, int totc, int parc, int frag, int mol) { /* Here we need to attached color palettes for: - The chemical species of the atom in selection - The total coordination of the atom in selection - The partial coordination of the atom in selection - The fragment of the atom in selection - The molecule of the atom in selection This is a work in progress since the 'gtk_popover_menu_bar_add_child' to use to insert widget is bugged: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955 */ int i, j; project * this_proj = get_project_by_id (view -> proj); // The chemical species of the atom in selection if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, ato*this_proj -> nspec+spc, -1, -1), "set-asp-7.7")) { g_debug ("Color palette error: species in selection - custom= set-asp-7.7"); } // The total coordination i = 0; for (j=0; j coord -> ntg[0][j]; } if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, 2*this_proj -> nspec+i, -1, -1), "set-atc-7.7")) { g_debug ("Color palette error: total coordination in selection - custom= set-atc-7.7"); } // The partial coordination i = this_proj -> coord -> totcoord[0]; for (j=0; j coord -> ntg[1][j]; } if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, 2*this_proj -> nspec+i, -1, -1), "set-apc-7.7")) { g_debug ("Color palette error: partial coordination in selection - custom= set-apc-7.7"); } if (view -> adv_bonding[0]) { // The fragment of the atom in selection i = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + frag; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, i, 2, 0), "set-afm-7.7")) { g_debug ("Color palette error: fragment in selection - custom= set-afm-7.7"); } } if (view -> adv_bonding[1]) { // The molecule of the atom in selection i = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + this_proj -> coord -> totcoord[2] + mol; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, i, 3, 0), "set-amo-7.7")) { g_debug ("Color palette error: fragment in selection - custom= set-amo-7.7"); } } } #endif /*! \fn void popup_selection (glwin * view, double ptx, double pty, int spe, int mmod, int ati, int bti, int aoc) \brief create the contextual popup menu, right click on atom or bond \param view the target glwin \param ptx x position \param pty y position \param spe the picked chemical \param mmod mouse mode: 0 = analysis, 1 = edition \param ati 1st atom \param bti 2nd atom, if any \param aoc atom (0) or clone (1) */ void popup_selection (glwin * view, double ptx, double pty, int spe, int mmod, int ati, int bti, int aoc) { int p = view -> proj; int s = view -> anim -> last -> img -> step; int i, j; gchar * str, * strp; gchar * menu_names[CONTEXTACT] = {"Select", "Unselect", "Label", "Unlabel", "Show", "Hide", "Style", "Color", "Edit as New Project", "Remove", "Replace", "Copy"}; GCallback handlers[CONTEXTACT][3] = {{G_CALLBACK(select_unselect_this_atom), G_CALLBACK(select_unselect_coord), G_CALLBACK(select_unselect_atoms)}, {G_CALLBACK(select_unselect_this_atom), G_CALLBACK(select_unselect_coord), G_CALLBACK(select_unselect_atoms)}, {G_CALLBACK(label_unlabel_this_atom), G_CALLBACK(label_unlabel_coord), G_CALLBACK(label_unlabel_atoms)}, {G_CALLBACK(label_unlabel_this_atom), G_CALLBACK(label_unlabel_coord), G_CALLBACK(label_unlabel_atoms)}, {G_CALLBACK(show_hide_this_atom), G_CALLBACK(show_hide_the_coord), G_CALLBACK(show_hide_the_atoms)}, {G_CALLBACK(show_hide_this_atom), G_CALLBACK(show_hide_the_coord), G_CALLBACK(show_hide_the_atoms)}, {G_CALLBACK(style_this_atom), G_CALLBACK(style_the_coord), G_CALLBACK(style_the_atoms)}, {NULL, NULL, NULL}, {NULL, G_CALLBACK(edit_coord), G_CALLBACK(edit_atoms)}, {G_CALLBACK(remove_this_atom), G_CALLBACK(remove_the_coord), G_CALLBACK(remove_the_atoms)}, {G_CALLBACK(replace_this_atom), G_CALLBACK(replace_the_coord), G_CALLBACK(replace_the_atoms)}, {G_CALLBACK(copy_this_atom), G_CALLBACK(copy_the_coord), G_CALLBACK(copy_the_atoms)}}; #ifdef GTK4 if (view_pop_actions) g_object_unref (view_pop_actions); view_pop_actions = g_simple_action_group_new (); GMenu * gmenu = g_menu_new (); #else GtkWidget * menu = gtk_menu_new (); GtkWidget * sel; #endif #ifdef DEBUG g_debug ("POP_SEL:: spe= %d, ati= %d, bti= %d, aoc= %d", spe, ati, bti, aoc); #endif // DEBUG opengl_project_changed (p); selected_atom = ati; selected_btom = bti; selected_aspec = opengl_project -> atoms[s][ati].sp; selected_bspec = -1; selected_status = ! opengl_project -> atoms[s][ati].pick[get_to_be_selected (view)]; is_selected = opengl_project -> atoms[s][ati].pick[mmod]; is_labelled = opengl_project -> atoms[s][ati].label[aoc]; #ifdef DEBUG if (is_selected != spe) g_debug ("Something is wrong in popup"); #endif // DEBUG for (i=0; i atoms[s][ati].coord[j]; atoid[i][j].c = ((i-2*(i/2)) == 0 ? 1 : 0); /*#ifdef DEBUG g_debug ("atoid[%d][%d].a= %d, atoid[%d][%d].b= %d, atoid[%d][%d].c= %d", i, j, atoid[i][j].a, i, j, atoid[i][j].b, i, j, atoid[i][j].c); #endif*/ } } if (bti > -1) { btoid.a = opengl_project -> atoms[s][bti].coord[0]; btoid.b = opengl_project -> atoms[s][bti].coord[1]; selected_bspec = opengl_project -> atoms[s][bti].sp; distance dist = distance_3d (& opengl_project -> cell, (opengl_project -> cell.npt) ? s : 0, & opengl_project -> atoms[s][ati], & opengl_project -> atoms[s][bti]); if (aoc == 0) { str = g_strdup_printf ("%s%d - %s%d", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1, exact_name(opengl_project -> chemistry -> label[selected_bspec]), bti+1); } else { str = g_strdup_printf ("%s%d - %s%d", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1, exact_name(opengl_project -> chemistry -> label[selected_bspec]), bti+1); } if (dist.pbc) { strp = g_strdup_printf ("%s \t d= %.3f Å (PBC)", str, dist.length); } else { strp = g_strdup_printf ("%s \t d= %.3f Å", str, dist.length); } #ifdef GTK4 append_opengl_item (view, gmenu, strp, "w-dist", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (strp, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (strp); for (i=0; i<2; i++) { if (view -> adv_bonding[i]) { j = opengl_project -> atoms[s][ati].coord[2+i] + 1; str = (! i) ? g_strdup_printf ("Fragment N°:\t%d", j) : g_strdup_printf ("Molecule N°:\t%d", j); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-dist-fm", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } } } else { if (aoc == 0) { str = g_strdup_printf ("%s%d", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1); } else { str = g_strdup_printf ("%s%d*", exact_name(opengl_project -> chemistry -> label[selected_aspec]), ati+1); } #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-ac", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); str = g_strdup_printf ("\tx : %f\n\ty : %f\n\tz : %f", opengl_project -> atoms[s][ati].x, opengl_project -> atoms[s][ati].y, opengl_project -> atoms[s][ati].z); #ifdef GTK4 append_opengl_item (view, gmenu, str, "xyz", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); if (opengl_project -> atoms[s][ati].coord[0] > -1) { i = opengl_project -> atoms[s][ati].coord[0]; str = g_strdup_printf ("Total Coordination: %d", opengl_project -> coord -> geolist[0][selected_aspec][i]); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-tc", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); i = opengl_project -> atoms[s][ati].coord[1]; str = g_strdup_printf ("Partial Coordination: %s", env_name (opengl_project, i, selected_aspec, 1, NULL)); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-pc", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } for (i=0; i<2; i++) { if (view -> adv_bonding[i]) { j = opengl_project -> atoms[s][ati].coord[2+i] + 1; str = (! i) ? g_strdup_printf ("Fragment N°:\t%d", j) : g_strdup_printf ("Molecule N°:\t%d", j); #ifdef GTK4 append_opengl_item (view, gmenu, str, "w-fm", 1, 0, NULL, IMG_NONE, NULL, FALSE, NULL, NULL, FALSE, FALSE, FALSE, TRUE); #else sel = create_menu_item_from_widget (markup_label (str, -1, -1, 0.0, 0.5), FALSE, FALSE, FALSE); gtk_menu_shell_append ((GtkMenuShell *)menu, sel); #endif g_free (str); } } } //if (fc) //{ // gtk_menu_shell_append ((GtkMenuShell *)menu, sel); // add_menu_separator (menu); // atoms menu //gtk_menu_shell_append ((GtkMenuShell *)menu, field_atom_menu(p, s, ati, fc-2)); // bonds menu, if ati involved in bonding, or bti > -1 //gtk_menu_shell_append ((GtkMenuShell *)menu, field_bond_menu(p, s, ati, bti)); // angles menu, if ati involved in bonding with more than 2 neighbors //gtk_menu_shell_append ((GtkMenuShell *)menu, field_angle_menu(p, s, ati, bti)); //} #ifdef GTK4 GMenu * menua = g_menu_new (); g_menu_append_section (gmenu, NULL, (GMenuModel *)menua); #else add_menu_separator (menu); #endif gboolean go; for (i=0; i<12; i++) { go = TRUE; if (i < 9 && view -> mode == EDITION) go = FALSE; if ((i > 8 && i < 11) && view -> mode == ANALYZE) go = FALSE; if (i == 0 && view -> anim -> last -> img -> selected[mmod] -> selected == opengl_project -> natomes) go = FALSE; if (i == 1 && view -> anim -> last -> img -> selected[mmod] -> selected == 0) go = FALSE; if (i == 2 && view -> labelled == opengl_project -> natomes*opengl_project -> steps) go = FALSE; if (i == 3 && view -> labelled == 0) go = FALSE; if (bti > -1 && i == 7) go = FALSE; j = (i == 8 && view -> mode == ANALYZE) ? 11 : (i == 11 && view -> mode == ANALYZE) ? 8 : i; if (go) { #ifdef GTK4 append_submenu (menua, menu_names[j], selection_menu (i, view, ati, bti, aoc, j, handlers[j][0], handlers[j][1], handlers[j][2])); #else gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu(menu_names[j], TRUE, selection_menu (view, ati, bti, aoc, j, handlers[j][0], handlers[j][1], handlers[j][2]))); #endif } } #ifdef GTK4 GtkWidget * menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)gmenu, GTK_POPOVER_MENU_NESTED); // Color palettes here if (view -> mode == ANALYZE) analyze_popup_attach_color_palettes (view, menu, aoc, selected_aspec, atoid[0][0].b, atoid[0][1].b, atoid[0][2].b, atoid[0][3].b); gtk_widget_set_parent (menu, view -> win); str = g_strdup_printf ("gl-%d", view -> action_id); gtk_widget_insert_action_group (menu, str, G_ACTION_GROUP(view_pop_actions)); g_free (str); i = (view -> mode == ANALYZE) ? (is_selected) ? 385 : 355 : 230; i += (view -> adv_bonding[0] && bti < 0) ? 30 : 0; i += (view -> adv_bonding[1] && bti < 0) ? 30 : 0; if (bti > -1) i -= (view -> mode == ANALYZE) ? 70 : 50; gtk_widget_set_size_request (menu, -1, i); pop_menu_at_pointer (menu, ptx, pty); #else pop_menu_at_pointer (menu, NULL); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data) \brief reset coordinates menu item callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void reset_coords (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void reset_coords (GtkWidget * widg, gpointer data) \brief reset coordinates menu item callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void reset_coords (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; reset_coordinates (get_project_by_id(view -> proj), 2); int shaders[5] = {ATOMS, BONDS, POLYS, RINGS, SELEC}; re_create_md_shaders (5, shaders, get_project_by_id(view -> proj)); view -> create_shaders[MEASU] = TRUE; view -> create_shaders[PICKS] = TRUE; init_coordinates (get_project_by_id(view -> proj), 1, FALSE, TRUE); update (view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) \brief rebuild menu items callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data) \brief rebuild menu items callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void turn_rebuild (GtkWidget * widg, gpointer data) #endif { tint * dat =(tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; #ifdef GTK4 view -> rebuild[dat -> b][0] = ! view -> rebuild[dat -> b][0]; view -> rebuild[dat -> b][1] = view -> rebuild[dat -> b][0]; update_menu_bar (view); #else view -> rebuild[dat -> b][0] = gtk_check_menu_item_get_active ((GtkCheckMenuItem *)widg); view -> rebuild[dat -> b][1] = view -> rebuild[dat -> b][0]; if (widg != view -> rbuild[dat -> b]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> rbuild[dat -> b], view -> rebuild[dat -> b][0]); } #endif } /*! \fn G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data) \brief center this molecule menu item callback GTK4 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_center_this_molecule (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; gboolean center = ! get_project_by_id(view -> proj) -> cell.crystal ? TRUE : ask_yes_no ("Center crystal atom(s)", "Are you sure, this can affect the visual representation of the unit cell ?", GTK_MESSAGE_QUESTION, view -> win); if (center) center_this_molecule (view); } #ifdef GTK4 /*! \fn GMenu * tools_section (glwin * view) \brief insert the 'Tools' section to the popmenu GTK4 \param view the target glwin */ GMenu * tools_section (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, "Tools", menu_tools(view, 1)); return menu; } /*! \fn GMenu * anim_section (glwin * view) \brief insert the 'Animate' section to the popmenu GTK4 \param view the target glwin */ GMenu * anim_section (glwin * view) { GMenu * menu = g_menu_new (); append_submenu (menu, "Animate", menu_anim(view, 1)); return menu; } /*! \fn void analyze_menu_attach_color_palettes (glwin * view, GtkWidget * menu) \brief attach the color palettes to the corresponding custom menu items GTK4 \param view the target glwin \param menu the GtkWidget sending the signal */ void analyze_menu_attach_color_palettes (glwin * view, GtkWidget * menu) { /* Here we need to attached color palettes for: - Box - Atoms - Clones - Total coordination(s) - Partial coordination(s) - Fragment(s) and molecule(s) - Ring(s) - Background This is a work in progress since the 'gtk_popover_menu_bar_add_child' to use to insert widget is bugged: https://gitlab.gnome.org/GNOME/gtk/-/issues/5955 */ int i, j, k, l, m; gchar * str; project * this_proj = get_project_by_id (view -> proj); // Box if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, -1, -1, -1), "set-box-color.0")) { g_debug ("Color palette error: box - custom= set-box-color.0"); } // Atom(s) and clone(s) for (i=0; i<2; i++) { for (j=0; j nspec; j++) { str = g_strdup_printf ("set-%s.%d", (! i) ? "atom-color" : "clone-color", j); if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, i*this_proj -> nspec+j, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - %d - custom= %s", (! i) ? "atom-color" : "clone-color", j+1, str); } g_free (str); } } // Coordinations for (i=0; i<2; i++) { if (this_proj -> coord -> ntg[i]) { for (j=0; j nspec; j++) { for (k=0; k coord -> ntg[i][j]; k++) { m = 0; for (l=0; l coord -> ntg[i][l]; } if (i) { str = g_strdup_printf ("set-%s-c.%d", exact_name (env_name (this_proj, k, j, 1, NULL)), m); } else { str = g_strdup_printf ("set-%d-c.%d", this_proj -> coord -> geolist[i][j][k], m); } m += (i) ? this_proj -> coord -> totcoord[0] : 0; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, 2*this_proj -> nspec+m, -1, -1), (const gchar *)str)) { g_debug ("Color palette error: %s - spec= %d - coord= %d, custom= %s", (! i) ? "total-coord" : "partial-coord", j+1, k+1, str); } g_free (str); } } } } // Fragment(s) and molecule(s) for (i=2; i<4; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-%s-%d", (i == 2) ? "fcol" : "mcol", j); k = 2*this_proj -> nspec + this_proj -> coord -> totcoord[0] + this_proj -> coord -> totcoord[1] + j; if (i == 3) k += this_proj -> coord -> totcoord[2]; if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, k, i, 0), (const gchar *)str)) { g_debug ("Color palette error: %s - %d, custom= %s", (i == 2) ? "fragment" : "molecule", j+1, str); } g_free (str); } } // Rings for (i=4; i<9; i++) { for (j=0; j coord -> totcoord[i]; j++) { str = g_strdup_printf ("set-rcol-%d-%d", i, j); if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, -3, i-4, 0), (const gchar *)str)) { g_debug ("Color palette error: rings - %d - %d, custom= %s", i, j+1, str); } g_free (str); } } // Background if (! gtk_popover_menu_add_child ((GtkPopoverMenu *)menu, color_palette (view, -2, -1, -1), "set-back-color.0")) { g_debug ("Color palette error: background - custom= set-back-color.0"); } } #endif /*! \fn void popup_main_menu (glwin * view, double ptx, double pty) \brief create the OpenGL window popup menu \param view the target glwin \param ptx x position \param pty y position */ void popup_main_menu (glwin * view, double ptx, double pty) { GtkWidget * menu; opengl_project_changed (view -> proj); #ifdef GTK4 if (view_pop_actions) g_object_unref (view_pop_actions); view_pop_actions = g_simple_action_group_new (); GMenu * gmenu = g_menu_new (); if (view -> mode == ANALYZE) { g_menu_append_section (gmenu, NULL, (GMenuModel *)prepare_opengl_menu(view, 1)); if (get_project_by_id(view -> proj) -> natomes) { g_menu_append_section (gmenu, NULL, (GMenuModel *)prepare_model_menu(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel *)prepare_coord_menu(view, 1)); } g_menu_append_section (gmenu, NULL, (GMenuModel *)tools_section(view)); g_menu_append_section (gmenu, NULL, (GMenuModel *)menu_view(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel *)anim_section(view)); } else { g_menu_append_section (gmenu, NULL, (GMenuModel *)tools_section(view)); append_submenu (gmenu, "Insert", add_edition_sub_menu (view, "ins", 0, G_CALLBACK(to_add_object), & view -> colorp[0][0])); if (opengl_project -> steps == 1) g_menu_append_section (gmenu, NULL, (GMenuModel *)extract_section(view, 1)); append_opengl_item (view, gmenu, "Reset Motion", "res-mot", 1, 0, NULL, IMG_STOCK, MEDIA_LOOP, FALSE, G_CALLBACK(reset_coords), view, FALSE, FALSE, FALSE, TRUE); } g_menu_append_section (gmenu, NULL, (GMenuModel*)menu_reset(view, 1)); g_menu_append_section (gmenu, NULL, (GMenuModel*)menu_fullscreen(view, 1)); menu = gtk_popover_menu_new_from_model_full ((GMenuModel *)gmenu, GTK_POPOVER_MENU_NESTED); if (view -> mode == ANALYZE) analyze_menu_attach_color_palettes (view, menu); gtk_popover_present ((GtkPopover *)menu); gchar * str = g_strdup_printf ("gl-%d", view -> action_id); gtk_widget_insert_action_group (menu, str, G_ACTION_GROUP(view_pop_actions)); g_free (str); gtk_widget_set_parent (menu, view -> win); gtk_widget_set_size_request (menu, -1, (view -> mode == ANALYZE) ? 742 : 242); pop_menu_at_pointer (menu, ptx, pty); #else menu = gtk_menu_new (); GtkWidget * item; if (view -> mode == ANALYZE) { menu_items_opengl (menu, view, 1); add_menu_separator (menu); if (get_project_by_id(view -> proj) -> nspec) { gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Atom(s)", TRUE, menu_atoms (view, 1, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Bond(s)", TRUE, menu_bonds (view, 1, 0))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Clone(s)", TRUE, menu_clones (view, 1))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_box_axis (view, 1, 0)); add_menu_separator (menu); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_coord (view, 1)); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Polyhedra", TRUE, menu_poly (view, 1))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Rings", view -> rings, menu_rings (view, 1))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Chain(s)", view -> chains, add_menu_coord (view, 1, 9))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Fragment(s)", opengl_project -> coord -> totcoord[2], add_menu_coord (view, 1, 2))); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Molecule(s)", opengl_project -> coord -> totcoord[3], add_menu_coord (view, 1, 3))); gtk3_menu_item (menu, "Advanced", IMG_NONE, NULL, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); // add_advanced_item (menu, G_CALLBACK(coord_properties), (gpointer)& view -> colorp[30][0], TRUE, GDK_KEY_e, GDK_CONTROL_MASK); add_menu_separator (menu); } gtk_menu_shell_append ((GtkMenuShell *)menu, menu_item_new_with_submenu ("Tools", TRUE, menu_tools(view, 1))); add_menu_separator (menu); menu_items_view (menu, view, 1); add_menu_separator (menu); gtk_menu_shell_append ((GtkMenuShell *)menu, menu_anim (view, 1)); } else { item = create_menu_item (TRUE, "Tools"); gtk_menu_item_set_submenu ((GtkMenuItem *)item, menu_tools(view, 1)); gtk_menu_shell_append ((GtkMenuShell *)menu, item); add_menu_separator (menu); item = create_menu_item (TRUE, "Insert"); add_edition_sub_menu (item, G_CALLBACK(to_add_object), & view -> colorp[0][0]); gtk_menu_shell_append ((GtkMenuShell *)menu, item); add_menu_separator (menu); if (opengl_project -> steps == 1) { gtk3_menu_item (menu, "Extract/Rebuild on Motion", IMG_STOCK, (gpointer)ECUT, G_CALLBACK(turn_rebuild), & view -> colorp[0][0], FALSE, 0, 0, TRUE, FALSE, view -> rebuild[0][0]); gtk3_menu_item (menu, "Extract/Rebuild on Copy", IMG_STOCK, (gpointer)ECUT, G_CALLBACK(turn_rebuild), & view -> colorp[1][0], FALSE, 0, 0, TRUE, FALSE, view -> rebuild[1][0]); } gtk3_menu_item (menu, "Reset Motion", IMG_STOCK, (gpointer)MEDIA_LOOP, G_CALLBACK(reset_coords), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); } add_menu_separator (menu); gtk3_menu_item (menu, "Reset View", IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_reset_view), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); gtk3_menu_item (menu, "Center Molecule", IMG_STOCK, (gpointer)FITBEST, G_CALLBACK(to_center_this_molecule), (gpointer)view, FALSE, 0, 0, FALSE, FALSE, FALSE); add_menu_separator (menu); if (! view -> fullscreen) { gtk3_menu_item (menu, "Fullscreen", IMG_STOCK, (gpointer)FULLSCREEN, G_CALLBACK(set_full_screen), (gpointer)view, TRUE, GDK_KEY_f, GDK_CONTROL_MASK, FALSE, FALSE, FALSE); } else { gtk3_menu_item (menu, "Exit Fullscreen", IMG_STOCK, (gpointer)FULLSCREEN, G_CALLBACK(set_full_screen), (gpointer)view, TRUE, GDK_KEY_Escape, 0, FALSE, FALSE, FALSE); } pop_menu_at_pointer (menu, NULL); #endif } Atomes-GNU-1.1.14/src/opengl/win/submenus.h000066400000000000000000000077011457665371200203640ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file submenus.h * @short Function declarations for the creation of the OpenGL window menus * @author Sébastien Le Roux */ /* * This header file: 'submenus.h' * * Contains: - Function declarations for the creation of the OpenGL window menus */ #ifndef SUBMENUS_H_ #define SUBMENUS_H_ #ifdef GTK3 extern void menu_items_opengl (GtkWidget * menu, glwin * view, int popm); extern GtkWidget * menu_style (glwin * view, int id); extern GtkWidget * menu_map (glwin * view, int id); extern GtkWidget * menu_render (glwin * view, int id); extern GtkWidget * menu_quality (glwin * view, int id); extern GtkWidget * menu_atoms ( glwin * view, int id, int at); extern GtkWidget * menu_bonds (glwin * view, int id, int at); extern GtkWidget * menu_clones (glwin * view, int id); extern GtkWidget * menu_box_axis (glwin * view, int id, int ab); extern void detach_frag_mol_menu (glwin * view, int id, int jd); extern GtkWidget * menu_coord (glwin * view, int id); extern GtkWidget * add_menu_coord (glwin * view, int id, int jd); extern GtkWidget * menu_poly (glwin * view, int id); extern GtkWidget * menu_rings (glwin * view, int id); extern GtkWidget * menu_edit (glwin * view, int id); extern GtkWidget * menu_tools (glwin * view, int id); extern GtkWidget * menu_rep (glwin * view, int id); extern GtkWidget * menu_proj (glwin * view); extern GtkWidget * menu_back (glwin * view); extern void menu_axis (GtkWidget * menu_ab, glwin * view, int id); extern GtkWidget * menu_anim (glwin * view, int id); extern void menu_items_view (GtkWidget * menu, glwin * view, int popm); #else extern GMenu * menu_style (glwin * view, int popm); extern GMenu * menu_map (glwin * view, int popm); extern GMenu * menu_render (glwin * view, int popm); extern GMenu * menu_quality (glwin * view, int popm); extern GMenu * menu_atoms ( glwin * view, int popm, int at); extern GMenu * menu_bonds (glwin * view, int popm, int at); extern GMenu * menu_clones (glwin * view, int popm); extern GMenu * axis_box_param (glwin * view, int popm, int ab, int style); extern GMenuItem * menu_box_axis (glwin * view, int popm, int ab); extern GMenu * color_item (glwin * view, gchar * act, int id, GCallback handler, gpointer data); extern GMenu * menu_coord (glwin * view, int popm); extern GMenu * add_menu_coord (glwin * view, int popm, int id); extern GMenu * menu_poly (glwin * view, int popm); extern GMenu * menu_rings (glwin * view, int popm); extern GMenu * extract_section (glwin * view, int popm); extern GMenu * menu_edit (glwin * view, int popm); extern GMenu * menu_tools (glwin * view, int popm); extern GMenu * menu_reset (glwin * view, int popm); extern GMenu * menu_fullscreen (glwin * view, int popm); extern GMenu * menu_rep (glwin * view, int popm); extern GMenu * menu_proj (glwin * view, int popm); extern GMenu * menu_back (glwin * view, int popm); extern void menu_axis (GMenu * menu, glwin * view, int popm); extern void menu_items_view (GMenu * menu, glwin * view, int popm); extern GMenu * prepare_opengl_menu (glwin * view, int popm); extern GMenu * prepare_model_menu (glwin * view, int popm); extern GMenu * prepare_coord_menu (glwin * view, int popm); extern GMenu * menu_view (glwin * view, int id); extern GMenu * menu_anim (glwin * view, int popm); #endif #endif Atomes-GNU-1.1.14/src/opengl/win/w_advance.c000066400000000000000000001514741457665371200204540ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_advance.c * @short Functions to create the OpenGL parameters edition window * @author Sébastien Le Roux */ /* * This file: 'w_advance.c' * * Contains: * - The functions to create the OpenGL parameters edition window * * List of functions: int * light_source_to_be_removed (int val, image * img, opengl_edition * ogl_edit); G_MODULE_EXPORT gboolean scroll_scale_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_set_fog_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data); G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data); void print_light_source (Light source, int i); void show_active_light_data (opengl_edition * ogl_win, int lid, int tid); void update_light_data (int li, opengl_edition * ogl_win); void create_lights_combo (image * this_image, opengl_edition * ogl_win); void add_remove_lights (int val, gpointer data); void set_data_pos (vec3_t * vect, int pos, double v); void param_has_changed (gpointer data, double val); void fog_param_changed (gpointer data, GLfloat u, GtkRange * range); void setup_fog_dialogs (glwin * view, int fid); void close_advanced_opengl (gpointer data); G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_delete_ligth (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void run_light_source_to_be_removed (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void show_light_param (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_nlights_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_nlights (GtkEntry * res, gpointer data); G_MODULE_EXPORT void update_light_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_object_pos (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_light_type (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_light_fix (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void show_this_light (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_use_template_toggle (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_template (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_l_model (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void update_mat_param (GtkEntry * res, gpointer data); G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data); G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_fog_param (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_fog_type (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_fog_mode (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data); GtkWidget * adv_box (GtkWidget * box, char * lab, int size, float xalign); GtkWidget * create_setting_pos (int pid, int lid, float * values, opengl_edition * ogl_win); GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit); GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit); GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit); Light init_light_source (int type, float val, float vbl); Light copy_light_source (Light old_sp); Light * copy_light_sources (int dima, int dimb, Light * old_sp); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #define TEMPLATES 7 extern void set_quality (int q, glwin * view); gchar * material_template[TEMPLATES] = {"Opaque", "Brushed metal", "Shiny metal", "Plastic", "Transparent", "Translucent", "Diffuse"}; GLfloat template_parameters[TEMPLATES][5] ={{0.50, 0.50, 0.90, 1.00, 1.00}, // Ok {0.90, 0.60, 1.00, 1.50, 1.00}, // Ok {0.80, 0.40, 1.00, 1.00, 1.00}, // Ok {0.35, 0.15, 1.00, 1.50, 1.00}, // Ok {0.50, 0.50, 0.50, 1.00, 0.50}, // {0.50, 0.50, 0.50, 1.00, 0.75}, // {0.35, 0.80, 1.00, 1.50, 1.00}}; // Ok float mat_min_max[5][2] = {{0.0, 1.0}, {0.0, 1.0}, {0.0, 10.0}, {0.0, 10.0}, {0.0, 1.0}}; gchar * settings[3][10] = {{"Albedo:", "Metallic:", "Roughness:", "Ambient occlusion:", "Gamma correction:", "Opacity:"}, {"Position:", "Direction:", "Intensity:", "Constant attenuation:", "Linear attenuation:", "Quadratic attenuation:", "Cone angle", "Inner cutoff:", "Outer cutoff:" "Type:"}, {"Color:"}}; gchar * lpos[3] = {"x", "y", "z"}; gchar * cpos[3] = {"r", "g", "b"}; /*! \fn GtkWidget * adv_box (GtkWidget * box, char * lab, int size, float xalign) \brief create a box with markup label \param box the GtkWidget sending the signal \param lab label \param size size \param xalign x alignement */ GtkWidget * adv_box (GtkWidget * box, char * lab, int size, float xalign) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, hbox, TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(lab, size, -1, xalign, 0.5), FALSE, FALSE, 5); return hbox; } GtkWidget * d_close; int status; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data) \brief toggle delete light callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_delete_ligth (GtkCheckButton * but, gpointer data) { if (gtk_check_button_get_active (but)) #else /*! \fn G_MODULE_EXPORT void toggled_delete_ligth (GtkToggleButton * but, gpointer data) \brief toggle delete light callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_delete_ligth (GtkToggleButton * but, gpointer data) { if (gtk_toggle_button_get_active (but)) #endif { status --; } else { status ++; } if (status == 0) { widget_set_sensitive (d_close, 1); } else { widget_set_sensitive (d_close, 0); } } int * light_list; GtkWidget ** light_but; /*! \fn G_MODULE_EXPORT void run_light_source_to_be_removed (GtkDialog * win, gint response_id, gpointer data) \brief remove light source(s) - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_light_source_to_be_removed (GtkDialog * win, gint response_id, gpointer data) { image * img = (image *)data; int i, j; j = 0; for (i=0; i lights; i++) { #ifdef GTK4 if (gtk_check_button_get_active (GTK_CHECK_BUTTON(light_but[i]))) #else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(light_but[i]))) #endif { light_list[j] = i; j ++; } } destroy_this_dialog (win); } /*! \fn int * light_source_to_be_removed (int val, image * img, opengl_edition * ogl_edit) \brief remove light source(s) - creating the dialog \param val number of light(s) to remove \param img the target image \param ogl_edit the target OpenGL edition window */ int * light_source_to_be_removed (int val, image * img, opengl_edition * ogl_edit) { int i; gchar * str; status = val; GtkWidget * win = dialogmodal ("Remove light source(s)", GTK_WINDOW(ogl_edit -> win)); GtkWidget * vbox = dialog_get_content_area (win); d_close = gtk_dialog_get_widget_for_response (GTK_DIALOG (win), GTK_RESPONSE_CLOSE); widget_set_sensitive (d_close, 0); if (val > 1) { str = g_strdup_printf ("Please select the %d light sources to be removed: ", val); } else { str = g_strdup_printf ("Please select the %d light source to be removed: ", val); } bbox (vbox, str); g_free (str); light_but = g_malloc (img -> lights * sizeof*light_but); for (i=0; i lights; i++) { str = g_strdup_printf ("Light N°%d", i+1); light_but[i] = check_button (str, -1, 40, FALSE, G_CALLBACK(toggled_delete_ligth), (gpointer)GINT_TO_POINTER(i)); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, light_but[i], TRUE, TRUE, 0); g_free (str); } light_list = allocint(val); run_this_gtk_dialog (win, G_CALLBACK(run_light_source_to_be_removed), img); return light_list; } /*! \fn void print_light_source (Light source, int i) \brief print light source data \param source the light source \param i the light source id */ void print_light_source (Light source, int i) { g_debug ("\n"); g_debug ("Light N°%d", i); g_debug ("Type= %d", source.type); g_debug ("Pos_x= %f, Pos_y= %f, Pos_z= %f", source.position.x, source.position.y, source.position.z); g_debug ("Dir_x= %f, Dir_y= %f, Dir_z= %f", source.direction.x, source.direction.y, source.direction.z); g_debug ("Int_r= %f, Int_g= %f, Int_b= %f", source.intensity.x, source.intensity.y, source.intensity.z); g_debug ("Att_c= %f, Att_l= %f, Att_q= %f", source.attenuation.x, source.attenuation.y, source.attenuation.z); g_debug ("Spo_a= %f, Spo_i= %f, Spo_o= %f", source.spot_data.x, source.spot_data.y, source.spot_data.z); g_debug ("\n"); } /* Light attenuation table (from Ogre3D): Distance(to object) Constant Linear Quadratic 7 1.0 0.7 1.8 13 1.0 0.35 0.44 20 1.0 0.22 0.20 32 1.0 0.14 0.07 50 1.0 0.09 0.032 65 1.0 0.07 0.017 100 1.0 0.045 0.0075 160 1.0 0.027 0.0028 200 1.0 0.022 0.0019 325 1.0 0.014 0.0007 600 1.0 0.007 0.0002 3250 1.0 0.0014 0.000007 */ /*! \fn Light init_light_source (int type, float val, float vbl) \brief initialize a light source \param type the type of light \param val \param vbl */ Light init_light_source (int type, float val, float vbl) { Light new_light; new_light.type = type; new_light.fix = (type != 1) ? 0 : 1; new_light.show = 0; new_light.direction = vec3(0.0, 0.0, 0.0); double intensity = (type == 1) ? 100.0*DEFAULT_INTENSITY : DEFAULT_INTENSITY; // double intensity = DEFAULT_INTENSITY; if (val != vbl) { intensity *= exp (val/vbl); } if (vbl <= 50.0) intensity *= vbl / 100.0; new_light.intensity = vec3 (intensity, intensity, intensity); new_light.attenuation = vec3 (1.0, 0.14, 0.07); new_light.spot_data = vec3 (20.0, 20.0, 20.0); if (type == 0) { new_light.position = vec3 (0.0, 0.0, 0.0); new_light.direction = vec3 (0.0, 0.0, -1.0); } else { new_light.position = vec3 (vbl*1.5, 0.0, 0.0); if (type == 2) { new_light.intensity = v3_muls (new_light.intensity, 100.0); float tan = (val * sqrt(2.0) / 2.0) / (vbl - val); float tetha = fabs(atanf (tan)) * 90.0 / pi; new_light.spot_data = vec3 (tetha, tetha, tetha); } } return new_light; } /*! \fn Light copy_light_source (Light old_sp) \brief create a copy of a light source \param old_sp the light source to copy */ Light copy_light_source (Light old_sp) { Light new_sp; new_sp.type = old_sp.type; new_sp.fix = old_sp.fix; new_sp.show = old_sp.show; new_sp.position = old_sp.position; new_sp.direction = old_sp.direction; new_sp.intensity = old_sp.intensity; new_sp.attenuation = old_sp.attenuation; new_sp.spot_data = old_sp.spot_data; return new_sp; } /*! \fn Light * copy_light_sources (int dima, int dimb, Light * old_sp) \brief create a copy of a list of light sources \param dima new list size \param dimb old list size to duplicate \param old_sp old light sources */ Light * copy_light_sources (int dima, int dimb, Light * old_sp) { int j; Light * new_sp = g_malloc (dima*sizeof * new_sp); for (j=0; j proj) -> modelgl -> anim -> last -> img -> l_ght[lid]; this_light -> type = tid; int i; for (i=0; i<2; i++) { if (is_the_widget_visible(ogl_win -> light_b_coord[i])) gtk_widget_hide (ogl_win -> light_b_coord[i]); if (is_the_widget_visible(ogl_win -> light_b_entry[i])) gtk_widget_hide (ogl_win -> light_b_entry[i]); if ((i == 0 && this_light -> type != 0) || (i == 1 && this_light -> type != 1)) { gtk_widget_show (ogl_win -> light_b_coord[i]); } } if (this_light -> type > 0) gtk_widget_show (ogl_win -> light_b_entry[0]); if (this_light -> type > 1) gtk_widget_show (ogl_win -> light_b_entry[1]); if (is_the_widget_visible(ogl_win -> light_show)) gtk_widget_hide (ogl_win -> light_show); if (is_the_widget_visible(ogl_win -> advanced_light_box)) gtk_widget_hide (ogl_win -> advanced_light_box); widget_set_sensitive (ogl_win -> light_type, lid); if (this_light -> type != 0) { gtk_widget_show (ogl_win -> advanced_light_box); gtk_widget_show (ogl_win -> light_show); } } /*! \fn void update_light_data (int li, opengl_edition * ogl_win) \brief update light data \param li the light id \param ogl_win the target OpenGL edition window */ void update_light_data (int li, opengl_edition * ogl_win) { Light * this_light = & get_project_by_id(ogl_win -> proj) -> modelgl -> anim -> last -> img -> l_ght[li]; gtk_combo_box_set_active (GTK_COMBO_BOX(ogl_win -> light_type), this_light -> type); gtk_combo_box_set_active (GTK_COMBO_BOX(ogl_win -> light_fix), this_light -> fix); show_active_light_data (ogl_win, li, this_light -> type); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[0]), this_light -> attenuation.x); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[1]), this_light -> attenuation.y); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[2]), this_light -> attenuation.z); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[3]), this_light -> spot_data.x); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[4]), this_light -> spot_data.y); update_entry_double (GTK_ENTRY(ogl_win -> light_entry[5]), this_light -> spot_data.z); update_entry_double (GTK_ENTRY(ogl_win -> entogl[1][0]), this_light -> position.x); update_entry_double (GTK_ENTRY(ogl_win -> entogl[1][1]), this_light -> position.y); update_entry_double (GTK_ENTRY(ogl_win -> entogl[1][2]), this_light -> position.z); update_entry_double (GTK_ENTRY(ogl_win -> entogl[2][0]), this_light -> direction.x); update_entry_double (GTK_ENTRY(ogl_win -> entogl[2][1]), this_light -> direction.y); update_entry_double (GTK_ENTRY(ogl_win -> entogl[2][2]), this_light -> direction.z); update_entry_double (GTK_ENTRY(ogl_win -> entogl[3][0]), this_light -> intensity.x); update_entry_double (GTK_ENTRY(ogl_win -> entogl[3][1]), this_light -> intensity.y); update_entry_double (GTK_ENTRY(ogl_win -> entogl[3][2]), this_light -> intensity.z); #ifdef GTK4 gtk_check_button_set_active (GTK_CHECK_BUTTON(ogl_win -> light_show), this_light -> show); #else gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(ogl_win -> light_show), this_light -> show); #endif } /*! \fn G_MODULE_EXPORT void show_light_param (GtkComboBox * box, gpointer data) \brief update light parameters based on light id in combo box \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_light_param (GtkComboBox * box, gpointer data) { int li = gtk_combo_box_get_active (box); update_light_data (li, (opengl_edition *)data); } /*! \fn void create_lights_combo (image * this_image, opengl_edition * ogl_win) \brief create light combo box \param this_image the target image parameters \param ogl_win the target OpenGL edition window */ void create_lights_combo (image * this_image, opengl_edition * ogl_win) { ogl_win -> lights = create_combo (); int i; gchar * str; for (i=0; i lights; i++) { str = g_strdup_printf ("Light N°%d", i+1); combo_text_append (ogl_win -> lights, str); g_free (str); } gtk_widget_set_size_request (ogl_win -> lights, 100, -1); g_signal_connect (G_OBJECT (ogl_win -> lights), "changed", G_CALLBACK(show_light_param), ogl_win); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ogl_win -> lights_box, ogl_win -> lights, FALSE, FALSE, 10); } /*! \fn void add_remove_lights (int val, gpointer data) \brief add or remove lights \param val total number of light(s) \param data the associated data pointer */ void add_remove_lights (int val, gpointer data) { int i, j, k, m; glwin * view = (glwin *)data; project * this_proj = get_project_by_id(view -> proj); image * this_image = view -> anim -> last -> img; gboolean delete_ligth; i = this_image -> lights; Light * old_spots; if (val > i) { #ifdef DEBUG g_debug ("ADDING_LIGHT_SOURCE:: val= %d, i= %d", val, i); #endif // Adding light source(s) old_spots = copy_light_sources (i, i, this_image -> l_ght); g_free (this_image -> l_ght); this_image -> l_ght = copy_light_sources (val, i, old_spots); this_image -> lights = val; float pos = (this_proj -> cell.box[0].param[0][0] == 0.0) ? 20.0 : this_proj -> cell.box[0].param[0][0]; for (j=i; j l_ght[j] = init_light_source (0, pos, this_proj -> modelgl -> p_moy); // Init directional by default } //free (old_spots); } else if (val < i) { // We need to remove a light #ifdef DEBUG g_debug ("REMOVING_LIGHT_SOURCE:: val= %d, i= %d", val, i); #endif int * ltr = light_source_to_be_removed (i-val, this_image, view -> opengl_win); if (ltr != NULL) { old_spots = copy_light_sources (i, i, this_image -> l_ght); for (k=0; k < i-val; k++) { #ifdef DEBUG g_debug ("REMOVING_LIGHT_SOURCES:: k= %d, ltr[%d]= %d", k, k, ltr[k]); #endif } g_free (this_image -> l_ght); this_image -> l_ght = g_malloc (val*sizeof*this_image -> l_ght); m = -1; for (j=0; j l_ght[m] = copy_light_source (old_spots[j]); } } g_free (old_spots); this_image -> lights = val; #ifdef DEBUG g_debug ("LIGHT(s) HAVE BEEN REMOVED:: NEW_LIGHTS_NUM= %d", val); #endif } } //this_light = this_image -> l_ght; view -> create_shaders[LIGHT] = TRUE; view -> opengl_win -> lights = destroy_this_widget (view -> opengl_win -> lights); create_lights_combo (this_image, view -> opengl_win); gtk_widget_show (view -> opengl_win -> lights); gtk_combo_box_set_active (GTK_COMBO_BOX(view -> opengl_win -> lights), 0); update_light_data (0, view -> opengl_win); update (view); } /*! \fn G_MODULE_EXPORT void set_nlights_spin (GtkSpinButton * res, gpointer data) \brief change the number of light(s) - spin button \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_nlights_spin (GtkSpinButton * res, gpointer data) { add_remove_lights (gtk_spin_button_get_value_as_int(res), data); } /*! \fn G_MODULE_EXPORT void set_nlights (GtkEntry * res, gpointer data) \brief change the number of light(s) - entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_nlights (GtkEntry * res, gpointer data) { int i; const gchar * m; m = entry_get_text (res); i = (int) atof(m); add_remove_lights (i, data); } /*! \fn G_MODULE_EXPORT void update_light_param (GtkEntry * res, gpointer data) \brief update light parameter \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_light_param (GtkEntry * res, gpointer data) { dint * lid = (dint *)data; glwin * view = get_project_by_id(lid -> a) -> modelgl; if (view -> opengl_win) { int li = gtk_combo_box_get_active (GTK_COMBO_BOX(view -> opengl_win -> lights)); Light * this_light = & view -> anim -> last -> img -> l_ght[li]; const gchar * m = entry_get_text (res); double v = atof(m); switch (lid -> b) { case 0: this_light -> attenuation.x = v; break; case 1: this_light -> attenuation.y = v; break; case 2: this_light -> attenuation.z = v; break; case 3: this_light -> spot_data.x = v; break; case 4: this_light -> spot_data.y = v; break; case 5: this_light -> spot_data.z = v; break; } update_entry_double (res, v); if (this_light -> show) view -> create_shaders[LIGHT] = TRUE; } update (view); } /*! \fn void set_data_pos (vec3_t * vect, int pos, double v) \brief modify a vector component \param vect vector to adjust \param pos position to adjust \param v new value */ void set_data_pos (vec3_t * vect, int pos, double v) { switch (pos) { case 0: vect -> x = v; break; case 1: vect -> y = v; break; case 2: vect -> z = v; break; } } /*! \fn G_MODULE_EXPORT void set_object_pos (GtkEntry * res, gpointer data) \brief set object position \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_object_pos (GtkEntry * res, gpointer data) { tint * id = (tint *)data; const gchar * m = entry_get_text (res); double v = atof(m); glwin * view = get_project_by_id(id -> a) -> modelgl; image * this_image = view -> anim -> last -> img; if (id -> b == 0) { set_data_pos (& this_image -> m_terial.albedo, id -> c, v); } else if (id -> b == 4) { set_data_pos (& this_image -> f_g.color, id -> c, v); } else if (id -> b > 0 && view -> opengl_win) { int li = gtk_combo_box_get_active (GTK_COMBO_BOX(view -> opengl_win -> lights)); switch (id -> b) { case 1: set_data_pos (& this_image -> l_ght[li].position, id -> c, v); break; case 2: set_data_pos (& this_image -> l_ght[li].direction, id -> c, v); break; case 3: set_data_pos (& this_image -> l_ght[li].intensity, id -> c, v); break; } if (this_image -> l_ght[li].show) view -> create_shaders[LIGHT] = TRUE; } if (view -> opengl_win) update_entry_double (res, v); update (view); } /*! \fn G_MODULE_EXPORT void set_light_type (GtkComboBox * box, gpointer data) \brief set light type callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_light_type (GtkComboBox * box, gpointer data) { opengl_edition * ogl_win = (opengl_edition *)data; int li = gtk_combo_box_get_active (GTK_COMBO_BOX(ogl_win -> lights)); int ti = gtk_combo_box_get_active (box); show_active_light_data (ogl_win, li, ti); } /*! \fn G_MODULE_EXPORT void set_light_fix (GtkComboBox * box, gpointer data) \brief set light fix callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_light_fix (GtkComboBox * box, gpointer data) { opengl_edition * ogl_win = (opengl_edition *)data; glwin * view = get_project_by_id(ogl_win -> proj) -> modelgl; int li = gtk_combo_box_get_active (GTK_COMBO_BOX(ogl_win -> lights)); view -> anim -> last -> img -> l_ght[li].fix = gtk_combo_box_get_active (box); view -> create_shaders[LIGHT] = TRUE; update (view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data) \brief show / hide this light callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_this_light (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_this_light (GtkToggleButton * but, gpointer data) \brief show / hide this light callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_this_light (GtkToggleButton * but, gpointer data) #endif { opengl_edition * ogl_win = (opengl_edition *)data; glwin * view = get_project_by_id(ogl_win -> proj) -> modelgl; int li = gtk_combo_box_get_active (GTK_COMBO_BOX(ogl_win -> lights)); #ifdef GTK4 view -> anim -> last -> img -> l_ght[li].show = gtk_check_button_get_active (but); #else view -> anim -> last -> img -> l_ght[li].show = gtk_toggle_button_get_active (but); #endif view -> create_shaders[LIGHT] = TRUE; update (view); } /*! \fn GtkWidget * create_setting_pos (int pid, int lid, float * values, opengl_edition * ogl_win) \brief create OpenGL setting entries table \param pid parameter id (0 = material, 1 = light direction, 2 = light position, 3 = light intensity, 4 = fog) \param lid parameter label id \param values target parameter values \param ogl_win the target OpenGL edition window */ GtkWidget * create_setting_pos (int pid, int lid, float * values, opengl_edition * ogl_win) { int i; GtkWidget * setting_pos = create_vbox (5); if (pid != 0) abox (setting_pos, settings[(pid < 4) ? 1 : 2][lid], 0); GtkWidget * box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, setting_pos, box, FALSE, FALSE, 0); for (i=0; i<3; i++) { ogl_win -> pos_pointer[pid][i].a = ogl_win -> proj; ogl_win -> pos_pointer[pid][i].b = pid; ogl_win -> pos_pointer[pid][i].c = i; if (pid > 0 && pid < 3) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, gtk_label_new (lpos[i]), FALSE, FALSE, 20); } else { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, gtk_label_new (cpos[i]), FALSE, FALSE, 20); } ogl_win -> entogl[pid][i] = create_entry (G_CALLBACK(set_object_pos), 80, 10, FALSE, & ogl_win -> pos_pointer[pid][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, ogl_win -> entogl[pid][i], FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(ogl_win -> entogl[pid][i]), values[i]); } if (pid == 1) { ogl_win -> light_show = check_button ("Show light", -1, -1, FALSE, G_CALLBACK(show_this_light), ogl_win); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, ogl_win -> light_show, FALSE, FALSE, 15); } return setting_pos; } /*! \fn GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit) \brief OpenGL light(s) parameters tab \param view the target glwin \param ogl_edit the target OpenGL edition window */ GtkWidget * lights_tab (glwin * view, opengl_edition * ogl_edit) { int i, j, k; image * this_image = view -> anim -> last -> img; GtkWidget * vbox; GtkWidget * hbox, * lhbox; GtkWidget * layout = create_layout (-1, 300); vbox = add_vbox_to_layout (layout, 480, -1); GtkWidget * box = abox (vbox, "Number of light sources:\n(add or remove lights - up to 10 sources)", 10); gtk_widget_set_size_request (box, -1, 65); GtkWidget * nlights = spin_button (G_CALLBACK(set_nlights_spin), this_image -> lights, 1.0, 10.0, 1.0, 0, 100, view); gtk_widget_set_size_request (nlights, 25, -1); GtkWidget * fix = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, fix, FALSE, FALSE, 20); gtk_fixed_put (GTK_FIXED (fix), nlights, 0, 10); box = abox (vbox, "Configure light source:", 0); ogl_edit -> lights_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, ogl_edit -> lights_box, FALSE, FALSE, 10); create_lights_combo (this_image, ogl_edit); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_label_new ("Note: it is mandatory for light N°1 to be a directional light"), FALSE, FALSE, 10); box = abox (vbox, "Light configuration: ", 0); hbox = adv_box (vbox, settings[1][9], 170, 0.0); ogl_edit -> light_type = create_combo (); gchar * ltype[3] = {"Directional", "Point", "Spot"}; for (i=0; i<3; i++) { combo_text_append (ogl_edit -> light_type, ltype[i]); } g_signal_connect (G_OBJECT (ogl_edit -> light_type), "changed", G_CALLBACK(set_light_type), ogl_edit); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> light_type, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new("Fixed by respect to: "), FALSE, FALSE, 10); ogl_edit -> light_fix = create_combo(); gchar * lfix[2] = {"The viewer", "The model"}; for (i=0; i<2; i++) { combo_text_append (ogl_edit -> light_fix, lfix[i]); } g_signal_connect (G_OBJECT (ogl_edit -> light_fix), "changed", G_CALLBACK(set_light_fix), ogl_edit); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> light_fix, FALSE, FALSE, 10); float values[3] = {0.0, 0.0, 0.0}; // Direction ogl_edit -> light_b_coord[0] = create_setting_pos (1, 0, values, ogl_edit); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> light_b_coord[0], FALSE, FALSE, 0); // Position ogl_edit -> light_b_coord[1] = create_setting_pos (2, 1, values, ogl_edit); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> light_b_coord[1], FALSE, FALSE, 0); // Intensity add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, create_setting_pos (3, 2, values, ogl_edit), FALSE, FALSE, 0); ogl_edit -> advanced_light_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> advanced_light_box, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> advanced_light_box, markup_label("Advanced parameters:", -1, -1, 0.1, 0.65), FALSE, FALSE, 25); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> advanced_light_box, hbox, FALSE, FALSE, 0); k = 0; for (i=0; i<2; i++) { ogl_edit -> light_b_entry[i] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> light_b_entry[i], FALSE, FALSE, 0); for (j=0; j<3; j++) { ogl_edit -> light_entry[k] = create_entry (G_CALLBACK(update_light_param), 100, 15, FALSE, &ogl_edit -> pointer[k]); lhbox = adv_box (ogl_edit -> light_b_entry[i], settings[1][k+3], 170, 0.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, lhbox, ogl_edit -> light_entry[k], FALSE, FALSE, 10); if (i == 1) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, lhbox, gtk_label_new("°"), FALSE, FALSE, 5); k ++; } } show_the_widgets (layout); gtk_combo_box_set_active (GTK_COMBO_BOX(ogl_edit -> lights), 0); return layout; } // ***************** MATERIAL ******************* // #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data) \brief use or not OpenGL material template callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_use_template_toggle (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_use_template_toggle (GtkToggleButton * but, gpointer data) \brief use or not OpenGL material template callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_use_template_toggle (GtkToggleButton * but, gpointer data) #endif { int i, j, k; glwin * view = (glwin *)data; i = gtk_combo_box_get_active (GTK_COMBO_BOX(view -> opengl_win -> templates)); #ifdef GTK4 j = gtk_check_button_get_active (but); #else j = gtk_toggle_button_get_active (but); #endif if (j) { if (i == -1) i = 3; for (k=0; k<5; k++) view -> anim -> last -> img -> m_terial.param[k+1] = template_parameters[i][k]; gtk_combo_box_set_active (GTK_COMBO_BOX(view -> opengl_win -> templates), i); k = i+1; } else { k = 0; } view -> anim -> last -> img -> m_terial.predefine = k; widget_set_sensitive (view -> opengl_win -> templates, view -> anim -> last -> img -> m_terial.predefine); widget_set_sensitive (view -> opengl_win -> param_mat, ! view -> anim -> last -> img -> m_terial.predefine); update (view); } /*! \fn G_MODULE_EXPORT void set_template (GtkComboBox * box, gpointer data) \brief change the OpenGL material template \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_template (GtkComboBox * box, gpointer data) { int i, j; glwin * view = (glwin *)data; Material * mat = & view -> anim -> last -> img -> m_terial; i = gtk_combo_box_get_active (box); //gtk_range_set_value (GTK_RANGE(shiny), template_parameters[i][0]); for (j=0; j<5; j++) { #ifdef DEBUG g_debug ("SET_TEMPLATES:: j= %d, val= %f", j, template_parameters[i][j]); #endif //gtk_range_set_value (GTK_RANGE(base_ogl[0][j]), template_parameters[i][j+1]); } mat -> predefine = i + 1; for (j=0; j<5; j++) mat -> param[j+1] = template_parameters[i][j]; update (view); } /*! \fn G_MODULE_EXPORT void set_l_model (GtkComboBox * box, gpointer data) \brief change OpenGL lightning model \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_l_model (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; view -> anim -> last -> img -> m_terial.param[0] = gtk_combo_box_get_active (box); update (view); } /*! \fn void param_has_changed (gpointer data, double val) \brief update OpenGL material parameter \param data the associated data pointer \param val the new value */ void param_has_changed (gpointer data, double val) { dint * mid = (dint *)data; glwin * view = get_project_by_id(mid -> a) -> modelgl; Material * mat = & view -> anim -> last -> img -> m_terial; if (mat_min_max[mid -> b][0] >= 0.0 && val <= mat_min_max[mid -> b][1]) mat -> param[mid -> b + 1] = val; if (view -> opengl_win) { update_entry_double (GTK_ENTRY(view -> opengl_win -> m_entry[mid -> b]), mat -> param[mid -> b + 1]); gtk_range_set_value (GTK_RANGE(view -> opengl_win -> m_scale[mid -> b]), mat -> param[mid -> b + 1]); } update (view); } /*! \fn G_MODULE_EXPORT void update_mat_param (GtkEntry * res, gpointer data) \brief update OpenGL material parameter - entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_mat_param (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = atof(m); param_has_changed (data, v); } /*! \fn G_MODULE_EXPORT gboolean scroll_scale_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update OpenGL material parameter - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_scale_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { param_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data) \brief update OpenGL material parameter - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void scale_param (GtkRange * range, gpointer data) { param_has_changed (data, gtk_range_get_value (range)); } /*! \fn G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update OpenGL quality - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_scale_quality (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { set_quality ((int)value, data); #ifdef GTK4 update_menu_bar ((glwin *)data); #endif return FALSE; } /*! \fn G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data) \brief update OpenGL quality - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void scale_quality (GtkRange * range, gpointer data) { set_quality ((int)gtk_range_get_value (range), data); #ifdef GTK4 update_menu_bar ((glwin *)data); #endif } /*! \fn GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit) \brief OpenGL material parameters tab \param view the target glwin \param ogl_edit the target OpenGL edition window */ GtkWidget * materials_tab (glwin * view, opengl_edition * ogl_edit) { GtkWidget * layout = create_layout (-1, 300); GtkWidget * vbox = add_vbox_to_layout (layout, 650, -1); int i; Material * this_material = & view -> anim -> last -> img -> m_terial; GtkWidget * box = adv_box (vbox, "Quality: ", 100, 1.0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, create_hscale (2, 500, 1, view -> anim -> last -> img -> quality, GTK_POS_TOP, 1, 150, G_CALLBACK(scale_quality), G_CALLBACK(scroll_scale_quality), view), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, markup_label("Lightning model: ", 100, -1, 0.0, 0.5), FALSE, FALSE, 10); GtkWidget * lmodel = create_combo (); GtkWidget * fix = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, fix, FALSE, FALSE, 0); gtk_fixed_put (GTK_FIXED (fix), lmodel, 0, 10); char * l_model[6] = {"None", "Phong", "Blinn", "Cook-Torrance-Blinn", "Cook-Torrance-Beckmann", "Cook-Torrance-GCX"}; for (i=0; i<6; i++) { combo_text_append (lmodel, l_model[i]); } g_signal_connect (G_OBJECT (lmodel), "changed", G_CALLBACK(set_l_model), view); gtk_widget_set_size_request (lmodel, 100, -1); gtk_combo_box_set_active (GTK_COMBO_BOX(lmodel), this_material -> param[0]); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button ("Use template", 100, 40, this_material -> predefine, G_CALLBACK(set_use_template_toggle), view), FALSE, FALSE, 0); box = abox (vbox, "Templates: ", 0); ogl_edit -> templates = create_combo (); for (i=0; i templates, material_template[i]); } gtk_combo_box_set_active (GTK_COMBO_BOX(ogl_edit -> templates), this_material -> predefine-1); g_signal_connect (G_OBJECT (ogl_edit -> templates), "changed", G_CALLBACK(set_template), view); gtk_widget_set_size_request (ogl_edit -> templates, 100, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, ogl_edit -> templates, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, gtk_separator_new (GTK_ORIENTATION_HORIZONTAL), FALSE, FALSE, 10); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); ogl_edit -> param_mat = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ogl_edit -> param_mat, FALSE, FALSE, 50); #ifdef GTK4 box = abox (ogl_edit -> param_mat, "Material properties: ", 0); #else box = abox (ogl_edit -> param_mat, "Material properties: ", 5); #endif GtkWidget * m_fixed; for (i=0; i<5; i++) { box = adv_box (ogl_edit -> param_mat, settings[0][i+1], 130, 0.0); ogl_edit -> m_scale[i] = create_hscale (mat_min_max[i][0], mat_min_max[i][1], 0.001, this_material -> param[i+1], GTK_POS_TOP, 3, 200, G_CALLBACK(scale_param), G_CALLBACK(scroll_scale_param), & ogl_edit -> pointer[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, ogl_edit -> m_scale[i], FALSE, FALSE, 10); ogl_edit -> m_entry[i] = create_entry (G_CALLBACK(update_mat_param), 100, 15, FALSE, & ogl_edit -> pointer[i]); update_entry_double(GTK_ENTRY(ogl_edit -> m_entry[i]), this_material -> param[i+1]); m_fixed = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED(m_fixed), ogl_edit -> m_entry[i], 0, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, m_fixed, FALSE, FALSE, 15); } float values[] = {this_material -> albedo.x, this_material -> albedo.y, this_material -> albedo.z}; adv_box (ogl_edit -> param_mat, settings[0][0], 130, 0.0); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> param_mat, create_setting_pos (0, 0, values, ogl_edit), FALSE, FALSE, 5); show_the_widgets (layout); widget_set_sensitive (ogl_edit -> templates, this_material -> predefine); widget_set_sensitive (ogl_edit -> param_mat, ! this_material -> predefine); return layout; } // ***************** FOG ******************* // /*! \fn void fog_param_changed (gpointer data, GLfloat u, GtkRange * range) \brief update OpenGL fog parameter \param data the associated data pointer \param u the new value \param range the GtkRange to udapte if needed */ void fog_param_changed (gpointer data, GLfloat u, GtkRange * range) { dint * fid = (dint *)data; glwin * view = get_project_by_id (fid -> a) -> modelgl; Fog * this_fog = & view -> anim -> last -> img -> f_g; GLfloat v, w; if (fid -> b > 0) { v = this_fog -> depth[0]; w = this_fog -> depth[1]; if (fid -> b == 1 && u < w) { this_fog -> depth[0] = u; } else if (fid -> b == 2 && u > v) { this_fog -> depth[1] = u; } else if (view -> opengl_win) { if (fid -> b == 1) { gtk_range_set_value (range, (gdouble) (w-0.1)); } else { gtk_range_set_value (range, (gdouble) (v+0.1)); } } } else { this_fog -> density = u; } update (view); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_fog_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief update OpenGL fog parameter - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_fog_param (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { fog_param_changed (data, (GLfloat) value, range); return FALSE; } /*! \fn G_MODULE_EXPORT void set_fog_param (GtkRange * range, gpointer data) \brief update OpenGL fog parameter - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_fog_param (GtkRange * range, gpointer data) { fog_param_changed (data, (GLfloat) gtk_range_get_value (range), range); } /*! \fn G_MODULE_EXPORT void set_fog_type (GtkWidget * widg, gpointer data) \brief set OpenGL fog type \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_fog_type (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; Fog * this_fog = & view -> anim -> last -> img -> f_g; this_fog -> based = gtk_combo_box_get_active (GTK_COMBO_BOX(widg)); update (view); } /*! \fn void setup_fog_dialogs (glwin * view, int fid) \brief update OpenGL fog tab based of fog type \param view the target glwin \param fid the fog mode */ void setup_fog_dialogs (glwin * view, int fid) { Fog * this_fog = & view -> anim -> last -> img -> f_g; this_fog -> mode = fid; if (this_fog -> mode) { gtk_widget_show (view -> opengl_win -> param_fog); if (this_fog -> mode == 1) { gtk_widget_show (view -> opengl_win -> depth_box); gtk_widget_hide (view -> opengl_win -> dens_box); } else { gtk_widget_hide (view -> opengl_win -> depth_box); gtk_widget_show (view -> opengl_win -> dens_box); } } else { gtk_widget_hide (view -> opengl_win -> param_fog); } } /*! \fn G_MODULE_EXPORT void set_fog_mode (GtkWidget * widg, gpointer data) \brief set fog mode callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_fog_mode (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; setup_fog_dialogs (view, gtk_combo_box_get_active (GTK_COMBO_BOX(widg))); update (view); } /*! \fn GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit) \brief OpenGL fog parameters tab \param view the target glwin \param ogl_edit the target OpenGL edition window */ GtkWidget * fog_tab (glwin * view, opengl_edition * ogl_edit) { Fog * this_fog = & view -> anim -> last -> img -> f_g; GtkWidget * layout = create_layout (480, -1); GtkWidget * vbox = add_vbox_to_layout (layout, 480, -1); GtkWidget * box = abox (vbox, "Select fog mode:", 10); GtkWidget * fogmod = create_combo (); combo_text_append (fogmod, "None"); combo_text_append (fogmod, "Linear"); combo_text_append (fogmod, "Exponential"); combo_text_append (fogmod, "Exponential squared"); gtk_widget_set_size_request (fogmod, 100, -1); gtk_combo_box_set_active (GTK_COMBO_BOX(fogmod), this_fog -> mode); g_signal_connect (G_OBJECT (fogmod), "changed", G_CALLBACK(set_fog_mode), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, fogmod, FALSE, FALSE, 0); ogl_edit -> param_fog = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, ogl_edit -> param_fog, FALSE, FALSE, 5); box = abox (ogl_edit -> param_fog, " Fog type: ", 0.0); GtkWidget * fogtype = create_combo (); combo_text_append (fogtype, "Plane based"); combo_text_append (fogtype, "Range based"); gtk_widget_set_size_request (fogtype, 100, -1); gtk_combo_box_set_active (GTK_COMBO_BOX(fogtype), this_fog -> based); g_signal_connect (G_OBJECT (fogtype), "changed", G_CALLBACK(set_fog_type), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, fogtype, FALSE, FALSE, 0); ogl_edit -> dens_box = abox (ogl_edit -> param_fog, " Fog density: ", 0.0); ogl_edit -> fog_range[0] = create_hscale (0.0, 1.0, 0.0001, this_fog -> density, GTK_POS_LEFT, 5, 250, G_CALLBACK(set_fog_param), G_CALLBACK(scroll_set_fog_param), & ogl_edit -> pointer[0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, ogl_edit -> dens_box, ogl_edit -> fog_range[0], FALSE, FALSE, 0); char * depthfog[2] = {"\t depth* start: ", "\t depth* end: "}; ogl_edit -> depth_box = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> param_fog, ogl_edit -> depth_box, FALSE, FALSE, 0); box = abox (ogl_edit -> depth_box, " Fog depth: ", 0.0); int i; for (i=0; i<2; i++) { box = adv_box (ogl_edit -> depth_box, depthfog[i], 170, 0.0); ogl_edit -> fog_range[i+1] = create_hscale (0.0, 100.0, 0.1, this_fog -> depth[i], GTK_POS_LEFT, 2, 250, G_CALLBACK(set_fog_param), G_CALLBACK(scroll_set_fog_param), & ogl_edit -> pointer[i+1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, ogl_edit -> fog_range[i+1], FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> depth_box, markup_label("* % of the OpenGL model depth.", -1, -1, 0.5, 0.5) , FALSE, FALSE, 5); float values[] = {this_fog -> color.x, this_fog -> color.y, this_fog -> color.z}; add_box_child_start (GTK_ORIENTATION_VERTICAL, ogl_edit -> param_fog, create_setting_pos (4, 0, values, ogl_edit), FALSE, FALSE, 5); show_the_widgets (layout); return layout; } /*! \fn void close_advanced_opengl (gpointer data) \brief close OpenGL rendering window free data \param data the associated data pointer */ void close_advanced_opengl (gpointer data) { glwin * view = (glwin *)data; view -> opengl_win -> win = destroy_this_widget (view -> opengl_win -> win); g_free (view -> opengl_win); view -> opengl_win = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data) \brief close OpenGL rendering advanced window callback GTK4 \param window the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_advanced (GtkWidget * window, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data) \brief close OpenGL rendering advanced window callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_advanced (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_advanced_opengl (data); return FALSE; } /*! \fn G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data) \brief create OpenGL rendering advanced window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void opengl_advanced (GtkWidget * widg, gpointer data) { glwin * view = (glwin *)data; if (view -> opengl_win == NULL) { view -> opengl_win = g_malloc0 (sizeof*view -> opengl_win); view -> opengl_win -> proj = view -> proj; int i; for (i=0; i<6; i++) { view -> opengl_win -> pointer[i].a = view -> proj; view -> opengl_win -> pointer[i].b = i; } gchar * str = g_strdup_printf ("OpenGL material aspect and light settings - %s", get_project_by_id(view -> proj) -> name); view -> opengl_win -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); #ifdef DEBUG gtk_window_set_resizable (GTK_WINDOW (view -> opengl_win -> win), TRUE); #endif GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, view -> opengl_win -> win, vbox); #ifdef GTK4 gtk_widget_set_size_request (vbox, 650 , 650); #else gtk_widget_set_size_request (vbox, 650 , 630); #endif GtkWidget * notebook = gtk_notebook_new (); gtk_widget_show (notebook); #ifdef GTK4 gtk_widget_set_vexpand (notebook, TRUE); #endif add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, TRUE, TRUE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), materials_tab (view, view -> opengl_win), markup_label("Material aspect", -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), lights_tab (view, view -> opengl_win), markup_label("Configure light sources", -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), fog_tab (view, view -> opengl_win), markup_label("Configure fog", -1, -1, 0.0, 0.5)); add_gtk_close_event (view -> opengl_win -> win, G_CALLBACK(close_advanced), view); } show_the_widgets (view -> opengl_win -> win); update_light_data (0, view -> opengl_win); setup_fog_dialogs (view, view -> anim -> last -> img -> f_g.mode); } Atomes-GNU-1.1.14/src/opengl/win/w_atoms.c000066400000000000000000000511661457665371200201730ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_atoms.c * @short Functions to create the atom(s) / clone(s) advanced configuration window * @author Sébastien Le Roux */ /* * This file: 'w_atoms.c' * * Contains: * - The functions to create the atom(s) / clone(s) advanced configuration window * * List of functions: G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_event_model (GtkWidget * widg, GdkEvent * event, gpointer data); void atoms_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double * val); G_MODULE_EXPORT void update_atom_size (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_show_hide_atom (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void toggled_show_hide_label (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data); G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * parameter, gpointer data); GtkWidget * prop_tab (glwin * view, int aoc); GtkWidget * advance_atom_notebook (glwin * view, int atom_or_clone); GtkWidget * advanced_atom_properties (int atom_or_clone, glwin * view); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" extern atom_search * allocate_atom_search (int proj, int action, int searchid, int tsize); extern gchar * label_atpts (project * this_proj, glwin * view, int id); extern GtkWidget * labels_tab (glwin * view, int id); extern GtkWidget * selection_tab (atom_search * asearch, int nats); extern GtkTreeStore * atom_model; /*! \fn G_MODULE_EXPORT void update_atom_size (GtkEntry * res, gpointer data) \brief update atom radius callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_atom_size (GtkEntry * res, gpointer data) { int j; gchar * str; tint * the_data = (tint *)data; int a, t; a = the_data -> c; project * this_proj = get_project_by_id (the_data -> a); j = this_proj -> modelgl -> anim -> last -> img -> style; const gchar * m = entry_get_text (res); double v = atof(m); int s = this_proj -> nspec; if (j == WIREFRAME || j == PUNT) { if (v > 0.0) { this_proj -> modelgl -> anim -> last -> img -> pointrad[a] = v; int shaders[2] = {ATOMS, SELEC}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[PICKS] = TRUE; this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } v = this_proj -> modelgl -> anim -> last -> img -> pointrad[a]; t = PUNT; } else { if (v > 0.0) { this_proj -> modelgl -> anim -> last -> img -> sphererad[a] = v; int shaders[2] = {ATOMS, SELEC}; re_create_md_shaders (2, shaders, this_proj); this_proj -> modelgl -> create_shaders[PICKS] = TRUE; this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } v = this_proj -> modelgl -> anim -> last -> img -> sphererad[a]; t = SPHERES; } update_entry_double (res, v); if (a < s) { str = label_atpts (this_proj, this_proj -> modelgl, t/PUNT); #ifdef GTK3 gtk_menu_item_set_label (GTK_MENU_ITEM(this_proj -> modelgl -> ogl_atoms[t-2]), str); #endif } else { str = label_atpts (opengl_project, opengl_project -> modelgl, 2+t/PUNT); #ifdef GTK3 gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_atoms[t+2]), str); #endif } g_free (str); update (this_proj -> modelgl); } /*! \fn void atoms_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double * val) \brief prepare atom radii entry list \param win the GtkWidget sending the signal \param this_proj the target project \param nspec total number of chemical species \param aoc atom(s) (0) or clone(s) (1) \param val radii list */ void atoms_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double * val) { int i, j, k; GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbo; GtkWidget * rad; gchar * dim[2]={" pts"," Å "}; gchar * str; if (this_proj -> modelgl -> anim -> last -> img -> style == WIREFRAME || this_proj -> modelgl -> anim -> last -> img -> style == PUNT) { k = 0; } else { k = 1; } for (i=0; i chemistry -> label[i]); } else { str = g_strdup_printf (" %s*", this_proj -> chemistry -> label[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.2, 0.5), FALSE, FALSE, 0); g_free (str); j = i + aoc*nspec; rad = create_entry (G_CALLBACK(update_atom_size), 120, 15, FALSE, (gpointer)& this_proj -> modelgl -> colorp[0][j]); update_entry_double (GTK_ENTRY(rad), val[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, rad, FALSE, FALSE, 0); if (this_proj -> modelgl -> anim -> last -> img -> style == SPACEFILL) widget_set_sensitive (rad, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(dim[k], 30, -1, 0.0, 0.5), FALSE, FALSE, 0); } show_the_widgets (vbox); } /*! \fn G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data) \brief set atom parameter - creating the dialog \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom_parameter (GtkWidget * widg, gpointer data) { tint * the_data = (tint *)data; gchar * title[2][2] = {{"Adjust atom sphere radius", "Adjust clone sphere radius"}, {"Adjust atom point size", "Adjust clone point size"}}; opengl_project_changed (the_data -> a); int s = opengl_project -> nspec; double * val; int id = the_data -> b; int jd = the_data -> c; if (jd) { val = opengl_project -> modelgl -> anim -> last -> img -> pointrad; } else if (opengl_project -> modelgl -> anim -> last -> img -> style == SPACEFILL) { val = opengl_project -> modelgl -> anim -> last -> img -> atomicrad; } else { val = opengl_project -> modelgl -> anim -> last -> img -> sphererad; } GtkWidget * win = dialogmodal (title[jd][id], GTK_WINDOW(opengl_project -> modelgl -> win)); atoms_input_win (win, opengl_project, s, id, val); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data) \brief set atom color callback \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom_color (GtkColorChooser * colob, gpointer data) { tint * the_data = (tint *)data; int a; project * this_proj = get_project_by_id(the_data -> a); a = the_data -> c; this_proj -> modelgl -> anim -> last -> img -> at_color[a] = get_button_color (colob); int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data) \brief toggle show/hide atom(s) callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_atom (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_atom (GtkToggleButton * but, gpointer data) \brief toggle show/hide atom(s) callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_atom (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *)data; int i, j, k; i = id -> a; j = id -> b; k = id -> c; gboolean show; #ifdef GTK4 project * this_proj = get_project_by_id (i); int l, m; show = gtk_check_button_get_active (but); for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { this_proj -> atoms[l][m].show[j] = show; } } } this_proj -> modelgl -> anim -> last -> img -> show_atom[j][k] = show; init_default_shaders (this_proj -> modelgl); update_menu_bar (this_proj -> modelgl); #else show = gtk_toggle_button_get_active (but); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)get_project_by_id(i) -> modelgl -> ogl_spec[j][k], show); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data) \brief toggle show/hide label(s) callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_label (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_label (GtkToggleButton * but, gpointer data) \brief toggle show/hide label(s) callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_label (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *)data; int i, j, k; i = id -> a; j = id -> b; k = id -> c; gboolean show; project * this_proj = get_project_by_id (i); #ifdef GTK4 int l, m; show = gtk_check_button_get_active (but); for (l=0; l steps; l++) { for (m=0; m natomes; m++) { if (this_proj -> atoms[l][m].sp == k) { this_proj -> atoms[l][m].label[j] = show; } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, j); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); update_menu_bar (this_proj -> modelgl); #else // GTK3 Menu Action To Check show = gtk_toggle_button_get_active (but); gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[j][k], show); #endif } /*! \fn GtkWidget * prop_tab (glwin * view, int aoc) \brief create atom(s)/clone(s) properties tab \param view the target glwin \param aoc atom(s) (0) or clone(s) (1) */ GtkWidget * prop_tab (glwin * view, int aoc) { int i, j, k; gchar * str; GtkWidget * lab; GtkWidget * prop_box; GtkWidget * hbox; GtkWidget * but; GtkWidget * entry; project * this_proj = get_project_by_id(view -> proj); gchar * col[5] = {"Color", "Radius [Å]", "Show", "Label", "Size [pts]"}; int csize[5] = {60, 0, 25, 0, 0}; GtkWidget * prop = create_layout (-1, -1); GtkWidget * vbox = add_vbox_to_layout (prop, -1, -1); k = view -> anim -> last -> img -> style; prop_box = create_hbox (0); gtk_widget_set_size_request (prop_box, -1, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, prop_box, FALSE, TRUE, 0); for (i=0; i<4; i++) { if (i == 1 && (k == WIREFRAME || k == PUNT)) { lab = markup_label(col[4], -1, -1, 0.0, 0.0); } else { lab = markup_label (col[i], -1, -1, 0.0, 0.0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, prop_box, lab, FALSE, FALSE, csize[i]); } for (i=0; i< this_proj -> nspec; i++) { hbox = create_hbox (0); //gtk_widget_set_size_request (hbox, -1, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 0); j = i + aoc * this_proj -> nspec; if (aoc == 0) { str = g_strdup_printf (" %s", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf (" %s*", this_proj -> chemistry -> label[i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 30, -1, 0.0, 0.5), FALSE, FALSE, 10); g_free (str); but = color_button (view -> anim -> last -> img -> at_color[j], TRUE, 80, -1, G_CALLBACK(set_atom_color), & view -> colorp[0][j]); if (aoc == 0) { str = g_strdup_printf ("%s atom(s) color", this_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s clone(s) color", this_proj -> chemistry -> label[i]); } gtk_color_button_set_title (GTK_COLOR_BUTTON(but), str); g_free (str); if (this_proj -> modelgl -> anim -> last -> img -> color_map[0] != 0) { widget_set_sensitive (but, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); // Raduis entry entry = create_entry (G_CALLBACK(update_atom_size), 80, 10, FALSE, (gpointer)& this_proj -> modelgl -> colorp[0][j]); if (k == WIREFRAME || k == PUNT) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> pointrad[j]); } else if (k == BALL_AND_STICK || k == SPHERES) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> sphererad[j]); } else if (k == SPACEFILL) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> atomicrad[j]); widget_set_sensitive (entry, 0); } else { if (k == CYLINDERS) { update_entry_double (GTK_ENTRY(entry), view -> anim -> last -> img -> radall[aoc]); } widget_set_sensitive (entry, 0); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); // Show/Hide check button add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, view -> anim -> last -> img -> show_atom[aoc][i], G_CALLBACK(toggled_show_hide_atom), & view -> colorp[aoc][i]), FALSE, FALSE, 30); // Show/Hide label check button add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, check_button (NULL, -1, -1, view -> anim -> last -> img -> show_label[aoc][i], G_CALLBACK(toggled_show_hide_label), & view -> colorp[aoc][i]), FALSE, FALSE, 5); } return prop; } /*! \fn G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data) \brief free 'model_win' data \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_model (GtkButton * but, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); this_proj -> modelgl -> model_win[dat -> b] -> win = destroy_this_widget (this_proj -> modelgl -> model_win[dat -> b] -> win); g_free (this_proj -> modelgl -> model_win[dat -> b]); this_proj -> modelgl -> model_win[dat -> b] = NULL; g_free (this_proj -> modelgl -> search_widg[dat -> b]); this_proj -> modelgl -> search_widg[dat -> b] = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data) \brief close event callback GTK4 \param widg the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_model (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_event_model (GtkWidget * widg, GdkEvent * event, gpointer data) \brief close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_model (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_model (NULL, data); return FALSE; } /*! \fn GtkWidget * advance_atom_notebook (glwin * view, int atom_or_clone) \brief create atom(s) advanced properties notebook \param view the target glwin \param atom_or_clone atom(s) (0) or clone(s) (1) */ GtkWidget * advance_atom_notebook (glwin * view, int atom_or_clone) { GtkWidget * notebook = gtk_notebook_new (); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), prop_tab (view, atom_or_clone), gtk_label_new ("Display properties")); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), labels_tab (view, atom_or_clone), gtk_label_new ("Label properties")); if (view -> search_widg[atom_or_clone] == NULL) { view -> search_widg[atom_or_clone] = allocate_atom_search (view -> proj, atom_or_clone, atom_or_clone, get_project_by_id(view -> proj) -> natomes); } gtk_notebook_append_page (GTK_NOTEBOOK(notebook), selection_tab (view -> search_widg[atom_or_clone], get_project_by_id(view -> proj) -> natomes), gtk_label_new ((atom_or_clone) ? "Clone(s) selection" : "Atom(s) selection")); return notebook; } /*! \fn GtkWidget * advanced_atom_properties (int atom_or_clone, glwin * view) \brief create atom advanced properties window 'model_win' \param atom_or_clone atom(s) (0) or clone(s) (1) \param view the target glwin */ GtkWidget * advanced_atom_properties (int atom_or_clone, glwin * view) { GtkWidget * aprop; gchar * win_title[2]={"Atom(s) configuration - ", "Clone(s) configuration - "}; gchar * str = g_strdup_printf ("%s%s", win_title[atom_or_clone], prepare_for_title(get_project_by_id(view -> proj)->name)); aprop = create_win (str, view -> win, FALSE, FALSE); int i = (get_project_by_id(view -> proj)-> natomes > 10000) ? 170 : 0; gtk_widget_set_size_request (aprop, -1, 580+i); GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, aprop, vbox); view -> model_win[atom_or_clone] -> notebook = advance_atom_notebook (view, atom_or_clone); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> model_win[atom_or_clone] -> notebook, TRUE, TRUE, 0); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * but = create_button ("Close", IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_model), & view -> colorp[atom_or_clone][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 5); add_gtk_close_event (aprop, G_CALLBACK(close_event_model), & view -> colorp[atom_or_clone][0]); return aprop; } #ifdef GTK3 /*! \fn G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data) \brief atom(s) propery callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void atom_properties (GtkWidget * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * parameter, gpointer data) \brief atom(s) propery callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void atom_properties (GSimpleAction * action, GVariant * parameter, gpointer data) #endif { tint * the_data = (tint *) data; int atom_or_clone = the_data -> b; project * this_proj = get_project_by_id (the_data -> a); if (this_proj -> modelgl -> model_win[atom_or_clone] == NULL) { this_proj -> modelgl -> model_win[atom_or_clone] = g_malloc0 (sizeof*this_proj -> modelgl -> model_win[atom_or_clone]); this_proj -> modelgl -> model_win[atom_or_clone] -> win = advanced_atom_properties (atom_or_clone, this_proj -> modelgl); show_the_widgets (this_proj -> modelgl -> model_win[atom_or_clone] -> win); if (this_proj -> natomes < 10000) { gtk_widget_hide (this_proj -> modelgl -> search_widg[atom_or_clone] -> info[1]); } else { gtk_widget_hide (this_proj -> modelgl -> search_widg[atom_or_clone] -> id_box); } } if (GTK_IS_WIDGET(this_proj -> modelgl -> model_win[atom_or_clone] -> win)) { gtk_notebook_set_current_page (GTK_NOTEBOOK (this_proj -> modelgl -> model_win[atom_or_clone] -> notebook), the_data -> c); } else { show_warning (g_strdup_printf ("Error impossible to display the model window for %s !", (atom_or_clone) ? "clones" : "atomes"), this_proj -> modelgl -> win); } } Atomes-GNU-1.1.14/src/opengl/win/w_axis.c000066400000000000000000000602741457665371200200140ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_axis.c * @short Functions to create the axis parameters edition window * @author Sébastien Le Roux */ /* * This file: 'w_axis.c' * * Contains: * - The functions to create the axis parameters edition window * * List of functions: G_MODULE_EXPORT gboolean scroll_set_axis_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void activate_pos_box (glwin * view, gboolean val); void init_axis_colors (glwin * view); void axis_position_has_changed (gpointer data, double v); G_MODULE_EXPORT void set_axis_template (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_axis_combo_style (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_positions (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void use_axis_default_colors (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_axis_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_axis_position (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_axis_labels (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_axis_title (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #define AXIS_STYLES 2 #define AXIS_TEMPLATES 5 gchar * axis[3] = {"X", "Y", "Z"}; gchar * axis_style[AXIS_STYLES] = {"Wireframe", "Cylinders"}; gchar * al[3] = {"% of the window width", "% of the window height", "% of the window depth"}; gchar * axis_template[AXIS_TEMPLATES] = {"Top Right Corner *", "Top Left Corner *", "Bottom Right Corner *", "Bottom Left Corner *", "Center **"}; double axis_init_color[3][3] = {{0.0, 0.0, 1.0},{0.0, 1.0, 0.0},{1.0, 0.0, 0.0}}; double axis_range[3][2] = {{0.0,100.0}, {0.0, 100.0}, {0.0, 100.0}}; extern G_MODULE_EXPORT void set_labels_render (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data); #ifdef GTK4 extern G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data); #else extern G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data); #endif extern G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data); GtkWidget * axis_data = NULL; GtkWidget * axis_position_box; GtkWidget * templates; GtkWidget * styles = NULL; GtkWidget * width_box; GtkWidget * radius_box; GtkWidget * axis_color_title[3]; GtkWidget * ax_title[3]; /*! \fn void activate_pos_box (glwin * view, gboolean val) \brief update axis position data \param view the target glwin \param val template widget sensitivy */ void activate_pos_box (glwin * view, gboolean val) { int i; if (val) { i = view -> anim -> last -> img -> axispos; } else { i = NONE; } gtk_combo_box_set_active (GTK_COMBO_BOX(templates), i); widget_set_sensitive (templates, val); } /*! \fn G_MODULE_EXPORT void set_axis_template (GtkComboBox * box, gpointer data) \brief set axis position callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_template (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; int i = gtk_combo_box_get_active (box); #ifdef GTK4 view -> anim -> last -> img -> axispos = i; view -> create_shaders[MAXIS] = TRUE; update (view); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][8+i], TRUE); #endif } /*! \fn G_MODULE_EXPORT void set_axis_combo_style (GtkComboBox * box, gpointer data) \brief set axis style callback \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_combo_style (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; switch (gtk_combo_box_get_active (box)) { case 0: view -> anim -> last -> img -> box_axis[1] = WIREFRAME; if (is_the_widget_visible(radius_box)) gtk_widget_hide (radius_box); if (! is_the_widget_visible(width_box)) gtk_widget_show (width_box); #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][1], TRUE); #endif break; case 1: view -> anim -> last -> img -> box_axis[1] = CYLINDERS; if (is_the_widget_visible(width_box)) gtk_widget_hide (width_box); if (! is_the_widget_visible(radius_box)) gtk_widget_show (radius_box); #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][2], TRUE); #endif break; } #ifdef GTK4 view -> create_shaders[MAXIS] = TRUE; update (view); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data) \brief show / hide axis callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_axis_toggle (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data) \brief show / hide axis callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_axis_toggle (GtkToggleButton * but, gpointer data) #endif { gboolean val; glwin * view = (glwin *)data; #ifdef GTK4 val = gtk_check_button_get_active (but); #else val = gtk_toggle_button_get_active (but); #endif if (val) { #ifdef GTK4 // set_box_axis_style ? then what about the menu items ... refresh the menu ! view -> anim -> last -> img -> box_axis[1] = WIREFRAME; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], TRUE); #endif if (GTK_IS_WIDGET(styles) && styles != NULL) gtk_combo_box_set_active (GTK_COMBO_BOX(styles), WIREFRAME-1); } else { #ifdef GTK4 // set_box_axis_style ? then what about the menu items ... refresh the menu ! view -> anim -> last -> img -> box_axis[1] = NONE; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][0], FALSE); #endif if (GTK_IS_WIDGET(styles) && styles != NULL) gtk_combo_box_set_active (GTK_COMBO_BOX(styles), NONE); } widget_set_sensitive (axis_data, val); #ifdef GTK4 view -> create_shaders[MAXIS] = TRUE; update (view); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data) \brief use axis default colors callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_positions (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void use_axis_default_positions (GtkToggleButton * but, gpointer data) \brief use axis default colors callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_positions (GtkToggleButton * but, gpointer data) #endif { gboolean val; glwin * view = (glwin *)data; #ifdef GTK4 val = gtk_check_button_get_active (but); #else val = gtk_toggle_button_get_active (but); #endif widget_set_sensitive (axis_position_box, ! val); if (val) { #ifdef GTK4 view -> anim -> last -> img -> axispos = 2; #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_box_axis[1][10], TRUE); #endif } else { view -> anim -> last -> img -> axispos = CUSTOM; int i; for (i=8; i ogl_box_axis[1][i], FALSE); #endif } } activate_pos_box (view, val); view -> create_shaders[MAXIS] = TRUE; update (view); // Update menu_bar } /*! \fn void init_axis_colors (glwin * view) \brief initialize axis colors \param view the target glwin */ void init_axis_colors (glwin * view) { int i; for (i = 0; i < 3; i++) { view -> anim -> last -> img -> axis_color[i].red = axis_init_color[i][0]; view -> anim -> last -> img -> axis_color[i].green = axis_init_color[i][1]; view -> anim -> last -> img -> axis_color[i].blue = axis_init_color[i][2]; view -> anim -> last -> img -> axis_color[i].alpha = 1.0; GdkRGBA col = colrgba_togtkrgba (view -> anim -> last -> img -> axis_color[i]); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(axis_color_title[i]), & col); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data) \brief use axis default color callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_colors (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void use_axis_default_colors (GtkToggleButton * but, gpointer data) \brief use axis default color callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_axis_default_colors (GtkToggleButton * but, gpointer data) #endif { int i; gboolean val; #ifdef GTK4 val = gtk_check_button_get_active (but); #else val = gtk_toggle_button_get_active (but); #endif glwin * view = (glwin *)data; if (val) { if (view -> anim -> last -> img -> axis_color != NULL) { init_axis_colors (view); g_free (view -> anim -> last -> img -> axis_color); } view -> anim -> last -> img -> axis_color = NULL; } else { view -> anim -> last -> img -> axis_color = g_malloc (3*sizeof*view -> anim -> last -> img -> axis_color); init_axis_colors (view); } for (i=0; i<3; i++) widget_set_sensitive (axis_color_title[i], ! val); view -> create_shaders[MAXIS] = TRUE; update (view); } /*! \fn G_MODULE_EXPORT void set_axis_color (GtkColorChooser * colob, gpointer data) \brief change axis color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_color (GtkColorChooser * colob, gpointer data) { tint * dat = (tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; view -> anim -> last -> img -> axis_color[dat -> b] = get_button_color (colob); view -> create_shaders[MAXIS] = TRUE; update (view); } /*! \fn void axis_position_has_changed (gpointer data, double v) \brief change axis position \param data the associated data pointer \param v the new value */ void axis_position_has_changed (gpointer data, double v) { tint * dat = (tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; if (v >= 0.0 && v <= 100.0) view -> anim -> last -> img -> axis_pos[dat -> b] = v; view -> create_shaders[MAXIS] = TRUE; update (view); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_axis_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change axis position - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_axis_position (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { axis_position_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_axis_position (GtkRange * range, gpointer data) \brief change axis position - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_position (GtkRange * range, gpointer data) { axis_position_has_changed (data, gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data) \brief set axis labels callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_labels (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_axis_labels (GtkToggleButton * but, gpointer data) \brief set axis labels callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_labels (GtkToggleButton * but, gpointer data) #endif { int i; gboolean val; glwin * view = (glwin *)data; #ifdef GTK4 val = gtk_check_button_get_active (but); #else val = gtk_toggle_button_get_active (but); #endif view -> anim -> last -> img -> axis_labels = val; for (i=0; i<3; i++) widget_set_sensitive (ax_title[i], val); view -> create_shaders[MAXIS] = TRUE; update (view); } /*! \fn G_MODULE_EXPORT void set_axis_title (GtkEntry * entry, gpointer data) \brief set axis title callback \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_axis_title (GtkEntry * entry, gpointer data) { tint * dat = (tint *)data; glwin * view = get_project_by_id(dat ->a) -> modelgl; const gchar * m = entry_get_text (entry); g_free (view -> anim -> last -> img -> axis_title[dat -> b]); view -> anim -> last -> img -> axis_title[dat -> b] = g_strdup_printf ("%s", m); view -> create_shaders[MAXIS] = TRUE; update (view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create the axis advanced parameters window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void axis_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data) \brief create the axis advanced parameters window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void axis_advanced (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *)data; opengl_project_changed (view -> proj); GtkWidget * win = dialogmodal ("Advanced axis settings", GTK_WINDOW(view -> win)); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * box; int i; gboolean ac; if (view -> anim -> last -> img -> box_axis[AXIS] != NONE) { ac = TRUE; } else { ac = FALSE; } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button ("Show / hide axis", 100, 40, ac, G_CALLBACK(set_show_axis_toggle), data), FALSE, FALSE, 0); axis_data = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, axis_data, TRUE, TRUE, 0); widget_set_sensitive (axis_data, ac); GtkWidget * pos_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axis_data, pos_box, FALSE, FALSE, 0); //add_box_child_start (GTK_ORIENTATION_VERTICAL, axis_data, pos_box, TRUE, TRUE, 0); if (view -> anim -> last -> img -> axispos != CUSTOM) { ac = TRUE; } else { ac = FALSE; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, pos_box, check_button ("Use template positions:", 120, 40, ac, G_CALLBACK(use_axis_default_positions), data), FALSE, FALSE, 0); templates = create_combo (); for (i=0; i < AXIS_TEMPLATES; i++) { combo_text_append (templates, axis_template[i]); } activate_pos_box (view, ac); gtk_widget_set_size_request (templates, 150, -1); g_signal_connect (G_OBJECT (templates), "changed", G_CALLBACK(set_axis_template), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, pos_box, templates, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, axis_data, markup_label("\t\t* In front of the atomic model", -1, -1, 0.0, 0.5), FALSE, TRUE, 3); add_box_child_start (GTK_ORIENTATION_VERTICAL, axis_data, markup_label("\t\t** Inside the atomic model", -1, -1, 0.0, 0.5), FALSE, TRUE, 3); GtkWidget * chbox; GtkWidget * ax_name; axis_position_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, axis_data, axis_position_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axis_position_box, markup_label("Please choose axis position:", -1, -1, 0.0, 0.5), FALSE, TRUE, 5); // use custom position for (i=0; i<2; i++) { chbox = create_hbox (0); ax_name = gtk_label_new (axis[i]); gtk_widget_set_size_request (ax_name, 20, -1); gtk_label_align (ax_name, 0.5, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, ax_name, FALSE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, create_hscale (axis_range[i][0], axis_range[i][1], 1.0, view -> anim -> last -> img -> axis_pos[i], GTK_POS_LEFT, 0, 170, G_CALLBACK(set_axis_position), G_CALLBACK(scroll_set_axis_position), & view -> colorp[i][0]), FALSE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, axis_position_box, chbox, FALSE, TRUE, 5); ax_name = gtk_label_new (al[i]); gtk_label_align (ax_name, -1, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, ax_name, FALSE, TRUE, 0); } widget_set_sensitive (axis_position_box, ! ac); box = abox (axis_data, "Length [Å]: ", 0); GtkWidget * length = create_entry (G_CALLBACK(update_bond_parameter), 150, 10, FALSE, (gpointer)GINT_TO_POINTER(-5)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, length, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(length), view -> anim -> last -> img -> axis_length); box = abox (axis_data, "Style: ", 0); styles = create_combo (); for (i=0; i anim -> last -> img -> box_axis[AXIS] == NONE) i = NONE; if (view -> anim -> last -> img -> box_axis[AXIS] == WIREFRAME) i = 0; if (view -> anim -> last -> img -> box_axis[AXIS] == CYLINDERS) i = 1; gtk_combo_box_set_active (GTK_COMBO_BOX(styles), i); gtk_widget_set_size_request (styles, 150, -1); g_signal_connect (G_OBJECT (styles), "changed", G_CALLBACK(set_axis_combo_style), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, styles, FALSE, FALSE, 0); width_box = abox (axis_data, "Line width [pts]: ", 0); GtkWidget * width = create_entry (G_CALLBACK(update_bond_parameter), 100, 10, FALSE, (gpointer)GINT_TO_POINTER(-4)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, width_box, width, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(width), view -> anim -> last -> img -> box_axis_line[AXIS]); radius_box = abox (axis_data, "Cylinder radius [Å]: ", 0); GtkWidget * radius = create_entry (G_CALLBACK(update_bond_parameter), 100, 10, FALSE, (gpointer)GINT_TO_POINTER(-4)); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, radius_box, radius, FALSE, FALSE, 0); update_entry_double (GTK_ENTRY(radius), view -> anim -> last -> img -> box_axis_rad[AXIS]); // Labels box = abox (axis_data, "Labels:", 0); GtkWidget * lab_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, axis_data, lab_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, lab_box, check_button ("Label axis", 100, 40, view -> anim -> last -> img -> axis_labels, G_CALLBACK(set_axis_labels), data), FALSE, FALSE, 0); GtkWidget * axis_label_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, lab_box, axis_label_box, FALSE, FALSE, 0); box = abox (axis_label_box, "Rendering: ", 0); GtkWidget * config = create_combo (); combo_text_append (config, "Basic text"); combo_text_append (config, "Highlighted"); gtk_combo_box_set_active (GTK_COMBO_BOX(config), view -> anim -> last -> img -> labels_render[2]); gtk_widget_set_size_request (config, 150, -1); g_signal_connect (G_OBJECT (config), "changed", G_CALLBACK(set_labels_render), & view -> colorp[2][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, config, FALSE, FALSE, 0); box = abox (axis_label_box, "Font:", 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, font_button(view -> anim -> last -> img -> labels_font[2], 150, 30, G_CALLBACK(set_labels_font), & view -> colorp[2][0]), FALSE, FALSE, 0); // Size / scale box = abox (axis_label_box, "Size:", 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, check_button ("scale with zoom in/out", 150, -1, view -> anim -> last -> img -> labels_scale[2], G_CALLBACK(set_labels_scale), & view -> colorp[2][0]), FALSE, FALSE, 10); // Colors box = abox (axis_data, "Color:", 0); GtkWidget * col_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, axis_data, col_box, FALSE, FALSE, 0); if ( view -> anim -> last -> img -> axis_color == NULL) { ac = TRUE; } else { ac = FALSE; } add_box_child_start (GTK_ORIENTATION_VERTICAL, col_box, check_button ("Use base colors", 100, 40, ac, G_CALLBACK(use_axis_default_colors), data), FALSE, FALSE, 0); GtkWidget * axis_param_box = create_vbox (BSEP); for (i=0; i<3; i++) { chbox = create_hbox (0); ax_title[i] = create_entry (G_CALLBACK(set_axis_title), 80, 10, FALSE, & view -> colorp[i][0]); update_entry_text (GTK_ENTRY(ax_title[i]), view -> anim -> last -> img -> axis_title[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, ax_title[i], FALSE, FALSE, 20); widget_set_sensitive (ax_title[i], view -> anim -> last -> img -> axis_labels); if ( view -> anim -> last -> img -> axis_color != NULL) { axis_color_title[i] = color_button (view -> anim -> last -> img -> axis_color[i], TRUE, 80, -1, G_CALLBACK(set_axis_color), & view -> colorp[i][0]); } else { ColRGBA col; col.red = axis_init_color[i][0]; col.green = axis_init_color[i][1]; col.blue = axis_init_color[i][2]; col.alpha = 1.0; axis_color_title[i] = color_button (col, TRUE, 80, -1, G_CALLBACK(set_axis_color), & view -> colorp[i][0]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, axis_color_title[i], FALSE, FALSE, 0); widget_set_sensitive (axis_color_title[i], ! ac); add_box_child_start (GTK_ORIENTATION_VERTICAL, axis_param_box, chbox, FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, col_box, axis_param_box, FALSE, FALSE, 0); g_signal_connect (G_OBJECT(win), "response", G_CALLBACK(run_destroy_dialog), NULL); show_the_widgets (win); if (view -> anim -> last -> img -> box_axis[AXIS] == CYLINDERS) { gtk_widget_hide (width_box); } else { gtk_widget_hide (radius_box); } dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); #ifdef GTK4 update_menu_bar (view); #endif styles = NULL; axis_data = NULL; } Atomes-GNU-1.1.14/src/opengl/win/w_bonds.c000066400000000000000000000365741457665371200201630ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_bonds.c * @short Functions to create the bond (legnth/radius) edition window(s) * @author Sébastien Le Roux */ /* * This file: 'w_bonds.c' * * Contains: * - The functions to create the bond (legnth/radius) edition window(s) * * List of functions: void bonds_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double ** val) G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "color_box.h" extern gchar * label_cutrab (project * this_proj, glwin * view, int id); /*! \fn G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data) \brief update bond parameter callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data) { int id = GPOINTER_TO_INT(data); const gchar * n = entry_get_text (res); double v = atof(n); int j, k, l, m; int a, b, s; s = opengl_project -> nspec; #ifdef GTK3 // GTK3 Menu Action To Check int c; gchar * str; #endif switch (id) { case -5: if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> axis_length = v; v = opengl_project -> modelgl -> anim -> last -> img -> axis_length; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf ("_Axis length [ %f Å ]", v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[1][7]), str); g_free (str); #endif opengl_project -> modelgl -> create_shaders[MAXIS] = TRUE; break; case -4: if (opengl_project -> modelgl -> anim -> last -> img -> box_axis[AXIS] == CYLINDERS) { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> box_axis_rad[AXIS] = v; v = opengl_project -> modelgl -> anim -> last -> img -> box_axis_rad[AXIS]; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf ("_Radius [ %f Å ]", v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[1][6]), str); g_free (str); #endif } else { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> box_axis_line[AXIS] = v; v = opengl_project -> modelgl -> anim -> last -> img -> box_axis_line[AXIS]; #ifdef GTK3 str = g_strdup_printf ("_Width [ %f pts ]", v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[1][4]), str); g_free (str); #endif } opengl_project -> modelgl -> create_shaders[MAXIS] = TRUE; break; case -3: if (opengl_project -> modelgl -> anim -> last -> img -> box_axis[BOX] == CYLINDERS) { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> box_axis_rad[BOX] = v; v = opengl_project -> modelgl -> anim -> last -> img -> box_axis_rad[BOX]; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf ("_Radius [ %f Å ]", v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[0][6]), str); g_free (str); #endif } else { if (v > 0.0) opengl_project -> modelgl -> anim -> last -> img -> box_axis_line[BOX] = v; v = opengl_project -> modelgl -> anim -> last -> img -> box_axis_line[BOX]; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf ("_Width [ %f pts ]", v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_box_axis[0][4]), str); g_free (str); #endif } opengl_project -> modelgl -> create_shaders[MDBOX] = TRUE; break; case -2: if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> radall[1] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> radall[1]; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf ("Cylinder(s) [ %f Å ]", v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[8]), str); g_free (str); #endif init_default_shaders (opengl_project -> modelgl); break; case -1: if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> radall[0] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> radall[0]; #ifdef GTK3 // GTK3 Menu Action To Check str = g_strdup_printf ("Cylinder(s) [ %f Å ]", v); gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[1]), str); g_free (str); #endif init_default_shaders (opengl_project -> modelgl); break; default: k = s*(s + 1)/2; if (id < k) { j = id; m = 0; #ifdef GTK3 // GTK3 Menu Action To Check c = 0; #endif } else { j = id - k; m = s; #ifdef GTK3 // GTK3 Menu Action To Check c = 1; #endif } if (j < s) { a = j + m; b = j + m; } else { j -= s; for (k=0; k modelgl -> anim -> last -> img -> style == WIREFRAME) { if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> linerad[a][b] = opengl_project -> modelgl -> anim -> last -> img -> linerad[b][a] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> linerad[a][b]; #ifdef GTK3 // GTK3 Menu Action To Check gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[5+8*c]), label_cutrab (opengl_project, opengl_project -> modelgl, 3+c)); #endif } else { if (v > 0.0) { opengl_project -> modelgl -> anim -> last -> img -> bondrad[a][b] = opengl_project -> modelgl -> anim -> last -> img -> bondrad[b][a] = v; } v = opengl_project -> modelgl -> anim -> last -> img -> bondrad[a][b]; #ifdef GTK3 // GTK3 Menu Action To Check gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[3+8*c]), label_cutrab (opengl_project, opengl_project -> modelgl, 1+c)); #endif } init_default_shaders (opengl_project -> modelgl); break; } update_entry_double (res, v); update (opengl_project -> modelgl); } /*! \fn void bonds_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double ** val) \brief prepare bond property entry list \param win the GtkWidget sending the signal \param this_proj the target project \param nspec total number of chemical species \param aoc atom(s) (0) or clone(s) (1) \param val the list of value(s) to display */ void bonds_input_win (GtkWidget * win, project * this_proj, int nspec, int aoc, double ** val) { int i, j, k, l, m, n; gchar * dim[2]={" pts"," Å "}; GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbo; GtkWidget * rad; gchar * str; if (this_proj -> modelgl -> anim -> last -> img -> style == WIREFRAME) { n = 0; } else { n = 1; } for (i=0, k=aoc*nspec; i chemistry -> label[i], this_proj -> chemistry -> label[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.2, 0.5), FALSE, FALSE, 0); g_free (str); rad = create_entry (G_CALLBACK(update_bond_parameter), 120, 15, FALSE, (gpointer)GINT_TO_POINTER(j)); update_entry_double (GTK_ENTRY(rad), val[k][k]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, rad, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(dim[n], 40, -1, 0.0, 0.5), FALSE, FALSE, 0); } k = j+1; for (i=0; i chemistry -> label[i], this_proj -> chemistry -> label[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.2, 0.5), FALSE, FALSE, 0); g_free (str); rad = create_entry (G_CALLBACK(update_bond_parameter), 120, 15, FALSE, (gpointer)GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(rad), val[l][m]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, rad, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(dim[n], 40, -1, 0.0, 0.5), FALSE, FALSE, 0); } } show_the_widgets (vbox); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data) \brief update bond parameter callback - creating the dialog GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void set_bond_parameter (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data) \brief update bond parameter callback - creating the dialog GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_bond_parameter (GtkWidget * widg, gpointer data) #endif { tint * the_data = (tint *)data; gchar * title[2][2] = {{"Adjust atomic bond radius(ii)", "Adjust clone bond radius(ii)"}, {"Adjust atomic line width(s)", "Adjust clone line width(s)"}}; int p = the_data -> a; opengl_project_changed (p); int s = opengl_project -> nspec; double ** val; int id = the_data -> b; int jd = the_data -> c; if (jd) { val = opengl_project -> modelgl -> anim -> last -> img -> linerad; } else { val = opengl_project -> modelgl -> anim -> last -> img -> bondrad; } GtkWidget * win = dialogmodal (title[jd][id], GTK_WINDOW(opengl_project -> modelgl -> win)); bonds_input_win (win, opengl_project, s, id, val); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); #ifdef GTK4 update_menu_bar (opengl_project -> modelgl); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create bond(s) configuration window(s) callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void window_bonds (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data) \brief create bond(s) configuration window(s) callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_bonds (GtkWidget * widg, gpointer data) #endif { int id; tint * bid = (tint *)data; gchar * obj[4] = {"box", "axis", "bond", "clone bond"}; gchar * Nobj[4] = {"Box", "Axis", "Bond", "Clone bond"}; gchar * str; switch (bid -> b) { case 0: id = -5; str = g_strdup_printf ("Adjust axis length"); break; case 1: id = -3 - bid -> c; str = g_strdup_printf ("Adjust %s line width", obj[bid -> c]); break; case 4: id = -3 - bid -> c; str = g_strdup_printf ("Adjust %s cylinders radius", obj[bid -> c]); break; default: id = - bid -> b + 1; str = g_strdup_printf ("Adjust %s cylinders radius", obj[bid -> b]); break; } opengl_project_changed (bid -> a); GtkWidget * win = dialogmodal (str, GTK_WINDOW(opengl_project -> modelgl -> win)); g_free (str); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); switch (bid -> b) { case 0: str = g_strdup_printf ("Axis length"); break; case 1: str = g_strdup_printf ("%s line width", Nobj[bid -> c]); break; case 4: str = g_strdup_printf ("%s cylinders radius", Nobj[bid -> c]); break; default: str = g_strdup_printf ("%s cylinders radius", Nobj[bid -> b]); break; } GtkWidget * label = gtk_label_new (str); g_free (str); gtk_widget_set_size_request (label, 150, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, label, FALSE, FALSE, 0); GtkWidget * rad = create_entry (G_CALLBACK(update_bond_parameter), 120, -1, FALSE, GINT_TO_POINTER(id)); switch (bid -> b) { case 0: update_entry_double (GTK_ENTRY(rad), opengl_project -> modelgl -> anim -> last -> img -> axis_length); break; case 1: update_entry_double (GTK_ENTRY(rad), opengl_project -> modelgl -> anim -> last -> img -> box_axis_line[bid -> c]); break; case 4: update_entry_double (GTK_ENTRY(rad), opengl_project -> modelgl -> anim -> last -> img -> box_axis_rad[bid -> c]); break; default: update_entry_double (GTK_ENTRY(rad), opengl_project -> modelgl -> anim -> last -> img -> radall[bid -> b-2]); break; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rad, FALSE, FALSE, 0); switch (bid -> b) { case 1: add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" [pts]", 40, -1, 0.0, 0.5), FALSE, FALSE, 0); break; default: add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(" [Å]", 30, -1, 0.0, 0.5), FALSE, FALSE, 0); break; } gtk_widget_set_size_request (win, 350, 100); show_the_widgets (vbox); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); #ifdef GTK4 update_menu_bar (opengl_project -> modelgl); #endif } Atomes-GNU-1.1.14/src/opengl/win/w_box.c000066400000000000000000000205401457665371200176300ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_box.c * @short Functions to create the box properties window * @author Sébastien Le Roux */ /* * This file: 'w_box.c' * * Contains: * - The functions to create the box properties window * * List of functions: G_MODULE_EXPORT void set_box_combo_style (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_show_box_toggle (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_color_box (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void box_advanced (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #define BOX_STYLES 2 extern G_MODULE_EXPORT void update_bond_parameter (GtkEntry * res, gpointer data); extern GtkWidget * styles; extern GtkWidget * width_box; extern GtkWidget * radius_box; gchar * box_style[BOX_STYLES] = {"Wireframe", "Cylinders"}; GtkWidget * box_data; /*! \fn G_MODULE_EXPORT void set_box_combo_style (GtkWidget * widg, gpointer data) \brief set box style callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_box_combo_style (GtkWidget * widg, gpointer data) { int i = gtk_combo_box_get_active (GTK_COMBO_BOX(widg)); #ifdef GTK4 opengl_project -> modelgl -> anim -> last -> img -> box_axis[0] = (i < 0) ? (NONE) : (i == 0) ? WIREFRAME : CYLINDERS; opengl_project -> modelgl -> create_shaders[MDBOX] = TRUE; update (opengl_project -> modelgl); #endif if (i == 1) { if (is_the_widget_visible(width_box)) gtk_widget_hide (width_box); if (! is_the_widget_visible(radius_box)) gtk_widget_show (radius_box); #ifdef GTK4 #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)opengl_project -> modelgl -> ogl_box_axis[0][2], TRUE); #endif } else if (i == 0) { if (is_the_widget_visible(radius_box)) gtk_widget_hide (radius_box); if (! is_the_widget_visible(width_box)) gtk_widget_show (width_box); #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)opengl_project -> modelgl -> ogl_box_axis[0][1], TRUE); #endif } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data) \brief toggle show / hide box callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_box_toggle (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_show_box_toggle (GtkToggleButton * but, gpointer data) \brief toggle show / hide box callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_show_box_toggle (GtkToggleButton * but, gpointer data) #endif { gboolean val; #ifdef GTK4 val = gtk_check_button_get_active (but); #else val = gtk_toggle_button_get_active (but); #endif if (val) { #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)opengl_project -> modelgl -> ogl_box_axis[0][0], TRUE); #endif gtk_combo_box_set_active (GTK_COMBO_BOX(styles), WIREFRAME-1); } else { #ifdef GTK3 // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)opengl_project -> modelgl -> ogl_box_axis[0][0], FALSE); #endif gtk_combo_box_set_active (GTK_COMBO_BOX(styles), NONE); } widget_set_sensitive (box_data, val); } /*! \fn G_MODULE_EXPORT void set_color_box (GtkColorChooser * colob, gpointer data) \brief set box color callback \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_box (GtkColorChooser * colob, gpointer data) { opengl_project -> modelgl -> anim -> last -> img -> box_color = get_button_color (colob); opengl_project -> modelgl -> create_shaders[MDBOX] = TRUE; update (opengl_project -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void box_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create the box edition window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void box_advanced (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data) \brief create the box edition window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void box_advanced (GtkWidget * widg, gpointer data) #endif { int i; glwin * view = (glwin *)data; opengl_project_changed (view -> proj); GtkWidget * win = dialogmodal ("Advanced box settings", GTK_WINDOW(view -> win)); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * box; gboolean ac; if (view -> anim -> last -> img -> box_axis[BOX] != NONE) { ac = TRUE; } else { ac = FALSE; } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button ("Show / hide box", 100, 40, ac, G_CALLBACK(set_show_box_toggle), (gpointer)data), FALSE, FALSE, 0); box_data = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, box_data, TRUE, TRUE, 10); widget_set_sensitive (box_data, ac); GtkWidget * pos_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, box_data, pos_box, TRUE, TRUE, 0); box = abox (box_data, "Style: ", 0); styles = create_combo (); for (i=0; i anim -> last -> img -> box_axis[BOX] == NONE) i = NONE; if (view -> anim -> last -> img -> box_axis[BOX] == WIREFRAME) i = 0; if (view -> anim -> last -> img -> box_axis[BOX] == CYLINDERS) i = 1; gtk_combo_box_set_active (GTK_COMBO_BOX(styles), i); gtk_widget_set_size_request (styles, 100, -1); g_signal_connect (G_OBJECT (styles), "changed", G_CALLBACK(set_box_combo_style), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, styles, TRUE, TRUE, 0); width_box = abox (box_data, "Line width [pts]: ", 0); GtkWidget * width = create_entry (G_CALLBACK(update_bond_parameter), 100, 10, FALSE, (gpointer)GINT_TO_POINTER(-3)); update_entry_double (GTK_ENTRY(width), view -> anim -> last -> img -> box_axis_line[BOX]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, width_box, width, FALSE, FALSE, 10); radius_box = abox (box_data, "Cylinder radius [Å]: ", 0); GtkWidget * radius = create_entry (G_CALLBACK(update_bond_parameter), 100, 10, FALSE, (gpointer)GINT_TO_POINTER(-3)); update_entry_double (GTK_ENTRY(radius), view -> anim -> last -> img -> box_axis_rad[BOX]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, radius_box, radius, FALSE, FALSE, 10); // Colors add_box_child_start (GTK_ORIENTATION_HORIZONTAL, abox (box_data, "Color:", 0), color_button(view -> anim -> last -> img -> box_color, TRUE, 100, -1, G_CALLBACK(set_color_box), NULL), FALSE, FALSE, 10); g_signal_connect (G_OBJECT(win), "response", G_CALLBACK(run_destroy_dialog), NULL); show_the_widgets (win); if (view -> anim -> last -> img -> box_axis[BOX] == CYLINDERS) { gtk_widget_hide (width_box); } else { gtk_widget_hide (radius_box); } dialog_id ++; Event_loop[dialog_id] = g_main_loop_new (NULL, FALSE); g_main_loop_run (Event_loop[dialog_id]); #ifdef GTK4 update_menu_bar (view); #endif } Atomes-GNU-1.1.14/src/opengl/win/w_chains.c000066400000000000000000000703541457665371200203150ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_chains.c * @short Functions to create the chain(s) tab for the advanced environments window * @author Sébastien Le Roux */ /* * This file: 'w_chains.c' * * Contains: * - The functions to create the chain(s) tab for the advanced environments window * * List of functions: int get_cmin (project * this_proj, int step); int get_cmax (project * this_proj, int step); void fill_chains_model (GtkTreeStore * store, project * this_proj); void add_this_chain_to_search_tree (project * this_proj); G_MODULE_EXPORT void on_select_chains (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void update_chains_search (GtkEntry * res, gpointer data); GtkWidget * create_chains_tree (project * this_proj, gboolean fill_this); GtkWidget * create_chains_search (project * this_proj); GtkWidget * chains_tab (glwin * view); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" extern void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); /*! \fn G_MODULE_EXPORT void on_select_chains (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select chain toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_select_chains (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { tint * dat = (tint * )data; gboolean saved_label[2]; int i, j, c, s, v, u, a, b; opengl_project_changed(dat -> a); coord_edition * coord = opengl_project -> modelgl -> coord_win; b = (opengl_project -> steps > 1) ? 1: 0; c = dat -> b; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { v = 0; } else { v = 1; } GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(coord -> chains_model), & iter, path); gtk_tree_store_set (coord -> chains_model, & iter, c, v, -1); if (b) { gtk_tree_model_get (GTK_TREE_MODEL(coord -> chains_model), & iter, 0, & s, -1); s = - s - 1; } else { s = 0; } gtk_tree_model_get (GTK_TREE_MODEL(coord -> chains_model), & iter, b, & i, -1); i = -i; gtk_tree_model_get (GTK_TREE_MODEL(coord -> chains_model), & iter, b+1, & j, -1); switch (c-b) { case 2: // Viz for (u=0; u modelgl -> all_chains[s][i-1][j-1][u]; #ifdef GTK4 if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 } break; case 3: // Label for (u=0; u modelgl -> all_chains[s][i-1][j-1][u]; opengl_project -> atoms[s][a].label[0] = opengl_project -> atoms[s][a].label[1] = v; } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; break; case 4: // Pick for (u=0; u modelgl -> all_chains[s][i-1][j-1][u]; saved_label[0] = opengl_project -> atoms[s][a].label[0]; saved_label[1] = opengl_project -> atoms[s][a].label[1]; #ifdef GTK4 if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 opengl_project -> atoms[s][a].label[0] = saved_label[0]; opengl_project -> atoms[s][a].label[1] = saved_label[1]; } break; } update (opengl_project -> modelgl); } /*! \fn void fill_chains_model (GtkTreeStore * store, project * this_proj) \brief fill the entire chain(s) tree store \param store the GtkTreeStore to fill \param this_proj the target project */ void fill_chains_model (GtkTreeStore * store, project * this_proj) { GtkTreeIter step_level, size_level, chain_level; int h, i, j, k, l; if (this_proj -> coord -> totcoord[9]) { for (h=0; h < this_proj -> steps; h++) { if (this_proj -> steps > 1) { gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, h+1, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); } for (i=0; i < this_proj -> coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; k = this_proj -> modelgl -> num_chains[h][j-1]; if (this_proj -> steps > 1 && k > 0) { gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, j, 2, 0, 3, 0, 4, 0, 5, 0, -1); } else if (this_proj -> steps == 1) { gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, j, 1, 0, 2, 0, 3, 0, 4, 0, -1); } for (l=0; l steps > 1) { gtk_tree_store_set (store, & chain_level, 0, -(h+1), 1, -j, 2, l+1, 3, FALSE, 4, FALSE, 5, FALSE, -1); } else { gtk_tree_store_set (store, & chain_level, 0, -j, 1, l+1, 2, FALSE, 3, FALSE, 4, FALSE, -1); } } } } } } /*! \fn GtkWidget * create_chains_tree (project * this_proj, gboolean fill_this) \brief create the chain(s) search tree store \param this_proj the target project \param fill_this 1 = yes, 0 = no */ GtkWidget * create_chains_tree (project * this_proj, gboolean fill_this) { int i, j, k; GtkTreeViewColumn * chains_col[7]; GtkCellRenderer * chains_cell[7]; gchar * ctitle[6]={"MD. step", "Chain(s) size", "Id.", "Show", "Label", "Pick"}; gchar * ctype[6]={"text", "text", "text", "active", "active", "active"}; GType col_type[6]={G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN}; coord_edition * coord = this_proj -> modelgl -> coord_win; j = (this_proj -> steps > 1) ? 1: 0; k = (this_proj -> steps > 1) ? 0: 1; coord -> chains_model = gtk_tree_store_newv (5+j, col_type); if (fill_this) fill_chains_model (coord -> chains_model, this_proj); GtkWidget * chains_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> chains_model)); for (i=0; i<5+j; i++) { if (i < 2+j) { chains_cell[i] = gtk_cell_renderer_text_new (); } else { chains_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(chains_cell[i]), "toggled", G_CALLBACK(on_select_chains), & this_proj -> modelgl -> colorp[i][0]); } gtk_cell_renderer_set_fixed_size (chains_cell[i], -1, 25); chains_col[i] = gtk_tree_view_column_new_with_attributes (ctitle[i+k], chains_cell[i], ctype[i+k], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(chains_tree), chains_col[i]); gtk_tree_view_column_set_alignment (chains_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (chains_col[i], chains_cell[i], rings_set_visible, & this_proj -> modelgl -> colorp[i][0], NULL); } return chains_tree; } /*! \fn void add_this_chain_to_search_tree (project * this_proj) \brief add chain in the search tree based on chain length and id \param this_proj the target project */ void add_this_chain_to_search_tree (project * this_proj) { GtkTreeIter step_level, size_level, chain_level; GtkTreeIter new_level; coord_edition * coord = this_proj -> modelgl -> coord_win; GtkTreeStore * store = (GtkTreeStore *) coord -> chains_model; GtkTreeModel * mod = GTK_TREE_MODEL(coord -> chains_model); gboolean valid; gboolean insert = TRUE; int g, h, i, j, k, l, m; int prepend = 0; if (this_proj -> steps > 1) { valid = gtk_tree_model_get_iter_first(mod, & step_level); while (valid) { gtk_tree_model_get (mod, & step_level, 0, & g, -1); if (g > coord -> cst) { prepend = 1; valid = FALSE; } else if (g == coord -> cst) { if (gtk_tree_model_iter_has_child (mod, &step_level)) { h = gtk_tree_model_iter_n_children (mod, &step_level); for (i=0; i coord -> csz) { prepend = 3; valid = FALSE; break; } else if (j == coord -> csz) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { k = gtk_tree_model_iter_n_children (mod, &size_level); for (l=0; l coord -> ch) { prepend = 5; valid = FALSE; break; } else if (m == coord -> ch) { insert = valid = FALSE; break; } } } if (valid) { prepend = 4; valid = FALSE; break; } } } } } if (valid) { prepend = 2; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { switch (prepend) { case 0: gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, coord -> cst, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & size_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & step_level); gtk_tree_store_set (store, & new_level, 0, coord -> cst, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & size_level, & new_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & size_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, -1); break; case 2: gtk_tree_store_insert_after (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & new_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, -1); break; case 3: gtk_tree_store_insert_before (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> csz, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & chain_level, & new_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, -1); break; case 4: gtk_tree_store_insert_after (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, -1); break; case 5: gtk_tree_store_insert_before (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> cst, 1, -coord -> csz, 2, coord -> ch, 3, FALSE, 4, FALSE, 5, FALSE, -1); break; } } } else { valid = gtk_tree_model_get_iter_first(mod, & size_level); while (valid) { gtk_tree_model_get (mod, & size_level, 0, & i, -1); if (i > coord -> csz) { prepend = 1; valid = FALSE; } else if (i == coord -> csz) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { j = gtk_tree_model_iter_n_children (mod, &size_level); for (k=0; k coord -> ch) { prepend = 2; valid = FALSE; break; } else if (l == coord -> ch) { insert = valid = FALSE; break; } } } if (valid) { prepend = 3; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { switch (prepend) { case 0: gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, coord -> csz, 1, 0, 2, 0, 3, 0, 4, 0, -1); gtk_tree_store_append (store, & chain_level, & size_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & size_level); gtk_tree_store_set (store, & new_level, 0, coord -> csz, 1, 0, 2, 0, 3, 0, 4, 0, -1); gtk_tree_store_append (store, & chain_level, & new_level); gtk_tree_store_set (store, & chain_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, -1); break; case 2: gtk_tree_store_insert_before (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, -1); break; case 3: gtk_tree_store_insert_after (store, & new_level, & size_level, & chain_level); gtk_tree_store_set (store, & new_level, 0, -coord -> csz, 1, coord -> ch, 2, FALSE, 3, FALSE, 4, FALSE, -1); break; } } } } /*! \fn int get_cmin (project * this_proj, int step) \brief get chain(s) min size for the MD step \param this_proj the target project \param step the MD step */ int get_cmin (project * this_proj, int step) { int i, j; for (i=0; i coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; if (this_proj -> modelgl -> num_chains[step-1][j-1]) break; } return j; } /*! \fn int get_cmax (project * this_proj, int step) \brief get chain(s) max size for the MD step \param this_proj the target project \param step the MD step */ int get_cmax (project * this_proj, int step) { int i, j; for (i=this_proj -> coord -> totcoord[9]-1; i>-1; i--) { j = this_proj -> coord -> geolist[9][0][i]; if (this_proj -> modelgl -> num_chains[step-1][j-1]) break; } return j; } /*! \fn int get_chain_size_index (project * this_proj, int s, int r) \brief NOT USED ! \param this_proj the target project \param s \param r * int get_chain_size_index (project * this_proj, int s, int r) { int i, j; for (i=0; i coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; if (j == r) break; } return i; } */ /*! \fn G_MODULE_EXPORT void update_chains_search (GtkEntry * res, gpointer data) \brief update the chain(s) search widget \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_chains_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; gchar * str; const gchar * m = entry_get_text (res); int i, j; int v = (int)atof(m); project * this_proj = get_project_by_id(dat -> a); coord_edition * coord = this_proj -> modelgl -> coord_win; switch (dat -> b) { case 0: if (v > 0 && v < this_proj -> steps+1) { if (v != coord -> cst) { coord -> cst = v; coord -> csz = coord -> ch = -1; for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> chlab[j]), ""); } } else { coord -> cst = coord -> csz = coord -> ch = -1; } if (coord -> cst > 0) { update_entry_int(res, coord -> cst); str = g_strdup_printf ("in [%d - %d]", get_cmin(this_proj, coord -> cst), get_cmax(this_proj, coord -> cst)); gtk_label_set_text (GTK_LABEL(coord -> chlab[1]), str); g_free (str); } else { update_entry_text (res, ""); for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> chlab[j]), ""); } break; case 1: if (coord -> cst > -1) { i = get_cmin(this_proj, coord -> cst); j = get_cmax(this_proj, coord -> cst); if (v >= i && v <= j) { if (v != coord -> csz) { if (this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]) { coord -> csz = v; coord -> ch = -1; gtk_label_set_text (GTK_LABEL(coord -> chlab[2]), ""); } else { coord -> csz = coord -> ch = -1; } } } } else { coord -> csz = coord -> ch = -1; } if (coord -> csz > 0) { update_entry_int(res, coord -> csz); str = g_strdup_printf ("in [1 - %d]", this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]); gtk_label_set_text (GTK_LABEL(coord -> chlab[2]), str); g_free (str); } else { update_entry_text (res, ""); gtk_label_set_text (GTK_LABEL(coord -> chlab[2]), ""); } break; case 2: if (coord -> cst > -1 && coord -> csz > -1) { if (v > 0 && v < this_proj -> modelgl -> num_chains[coord -> cst-1][coord -> csz-1]+1) { coord -> ch = v; } else { coord -> ch = -1; } } else { coord -> ch = -1; } if (coord -> ch > 0) { update_entry_int(res, coord -> ch); } else { update_entry_text (res, ""); } break; } if (coord -> cst > 0 && coord -> csz > 0 && coord -> ch > 0) { add_this_chain_to_search_tree (this_proj); } } /*! \fn GtkWidget * create_chains_search (project * this_proj) \brief create the chain(s) search widget \param this_proj the target project */ GtkWidget * create_chains_search (project * this_proj) { GtkWidget * chains_search = create_vbox (BSEP); gchar * str = g_strdup_printf ("Too many chains in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for chain(s) 'manually':\n"); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[3]={"MD step:", "Chain size:", "Chain ID:"}; int i, j; GtkWidget * hbox; GtkWidget * entry; j = (this_proj -> steps) > 1 ? 0 : 1; coord_edition * coord = this_proj -> modelgl -> coord_win; coord -> cst = 1; for (i=j; i<3; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(search_item[i], 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_chains_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); if (i==0) { str = g_strdup_printf ("in [1 - %d]", this_proj -> steps); coord -> chlab[i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else if (i == 1) { str = g_strdup_printf ("in [%d - %d]", get_cmin(this_proj, coord -> cst), get_cmax(this_proj, coord -> cst)); coord -> chlab[i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else { coord -> chlab[i] = markup_label("", 50, -1, 0.0, 0.5); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, coord -> chlab[i], FALSE, FALSE, 5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, markup_label("Search result(s)", 200, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, chains_search, create_chains_tree (this_proj, FALSE), FALSE, FALSE, 0); return chains_search; } /*! \fn GtkWidget * chains_tab (glwin * view) \brief create the chain(s) tab for the advanced environments window \param view the target glwin */ GtkWidget * chains_tab (glwin * view) { GtkWidget * chains = create_scroll(NULL, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (chains, TRUE); gtk_widget_set_vexpand (chains, TRUE); int h, i, j, k; project * this_proj = get_project_by_id(view -> proj); k = 0; for (h=0; h < this_proj -> steps; h++) { for (i=0; i < this_proj -> coord -> totcoord[9]; i++) { j = this_proj -> coord -> geolist[9][0][i]; k += this_proj -> modelgl -> num_chains[h][j-1]; } } if (k < 10000) { add_container_child (CONTAINER_SCR, chains, create_chains_tree (this_proj, TRUE)); } else { add_container_child (CONTAINER_SCR, chains, create_chains_search (this_proj)); } return chains; } Atomes-GNU-1.1.14/src/opengl/win/w_colors.c000066400000000000000000000253501457665371200203450ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_colors.c * @short Functions to create the color selection dialogs * @author Sébastien Le Roux */ /* * This file: 'w_colors.c' * * Contains: * - The functions to create the color selection dialogs * * List of functions: void window_color (project * this_proj, glwin * view, int wc_cid); G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void run_window_color_coord (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "project.h" #include "glwindow.h" #include "glview.h" #include "color_box.h" int wc_cid; /*! \fn G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data) \brief window color chooser - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_color (GtkDialog * win, gint response_id, gpointer data) { project * this_proj = (project *)data; if (response_id == GTK_RESPONSE_OK) { ColRGBA colo = get_window_color (GTK_WIDGET(win)); if (wc_cid == -2) { this_proj -> modelgl -> anim -> last -> img -> backcolor = colo; this_proj -> modelgl -> create_shaders[MEASU] = TRUE; } else if (wc_cid == -1) { this_proj -> modelgl -> anim -> last -> img -> box_color = colo; this_proj -> modelgl -> create_shaders[MDBOX] = TRUE; } else { this_proj -> modelgl -> anim -> last -> img -> at_color[wc_cid] = colo; int shaders[2] = {ATOMS, BONDS}; re_create_md_shaders (2, shaders, this_proj); int shader[1] = {POLYS}; if (this_proj -> modelgl -> anim -> last -> img -> color_map[1] == 0) re_create_md_shaders (1, shader, this_proj); } update (this_proj -> modelgl); } destroy_this_dialog (win); } /*! \fn void window_color (project * this_proj, glwin * view, int wc_cid) \brief window color chooser - creating the dialog \param this_proj the target project \param view the target glwin \param wc_cid the object to change color */ void window_color (project * this_proj, glwin * view, int wc_cid) { gchar * str; GdkRGBA col; if (wc_cid == -2) { str = g_strdup_printf ("Background color"); col = colrgba_togtkrgba (view -> anim -> last -> img -> backcolor); } else if (wc_cid == -1) { str = g_strdup_printf ("Model box color"); col = colrgba_togtkrgba (view -> anim -> last -> img -> box_color); } else { if (wc_cid < this_proj -> nspec) { str = g_strdup_printf ("%s - atom(s) color", this_proj -> chemistry -> label[wc_cid]); } else { str = g_strdup_printf ("%s* - clone(s) color", this_proj -> chemistry -> label[wc_cid-this_proj -> nspec]); } col = colrgba_togtkrgba (view -> anim -> last -> img -> at_color[wc_cid]); } GtkWidget * win = gtk_color_chooser_dialog_new (str, GTK_WINDOW(view -> win)); gtk_window_set_modal (GTK_WINDOW(win), TRUE); gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER(win), TRUE); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(win), & col); g_free (str); run_this_gtk_dialog (win, G_CALLBACK(run_window_color), this_proj); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run background color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_run_back_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data) \brief to run background color selection window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_run_back_color_window (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *) data; window_color (get_project_by_id(view -> proj), view, -2); update (view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run box color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_run_box_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data) \brief to run box color selection window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_run_box_color_window (GtkWidget * widg, gpointer data) #endif { glwin * view = (glwin *) data; window_color (get_project_by_id(view -> proj), view, -1); view -> create_shaders[MDBOX] = TRUE; update (view); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) \brief to run atom color selection window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void to_run_atom_color_window (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data) \brief to run atom color selection window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void to_run_atom_color_window (GtkWidget * widg, gpointer data) #endif { tint * id = (tint *) data; // g_debug ("Atom color:: proj= %d, id -> b= %d, id -> c= %d", id -> a, id -> b, id -> c); project * this_proj = get_project_by_id(id -> a); window_color (this_proj, this_proj -> modelgl, id -> c); int shaders[3] = {ATOMS, BONDS, SELEC}; re_create_md_shaders (3, shaders, this_proj); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void run_window_color_coord (GtkDialog * win, gint response_id, gpointer data) \brief window to select a color - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_color_coord (GtkDialog * win, gint response_id, gpointer data) { qint * cid = (qint *)data; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; if (response_id == GTK_RESPONSE_OK) { if (g > 1) s = 0; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c] = get_window_color (GTK_WIDGET(win)); int shaders[4] = {ATOMS, BONDS, POLYS, RINGS}; re_create_md_shaders (4, shaders, this_proj); update (this_proj -> modelgl); } destroy_this_dialog (win); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data) \brief create a window to select a color callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void window_color_coord (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data) \brief create a window to select a color callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_color_coord (GtkWidget * widg, gpointer data) #endif { qint * cid = (qint *)data; gchar * str; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; g_debug ("s= %d, c= %d, g= %d", s, c, g); switch (g) { case 0: str = g_strdup_printf ("%s atom(s) %d fold coordination sphere color", this_proj -> chemistry -> label[s], this_proj -> coord -> geolist[0][s][c]); break; case 1: str = g_strdup_printf ("%s - %s coordination sphere color", this_proj -> chemistry -> label[s], prepare_for_title(exact_name(env_name (this_proj, c, s, 1, NULL)))); break; case 2: str = g_strdup_printf ("Fragment N°%d color", c); g = s; s = 0; break; case 3: str = g_strdup_printf ("Molecule N°%d color", c); g = s; s = 0; break; case 9: str = g_strdup_printf ("%d atom chain(s) color", this_proj -> coord -> geolist[g][0][c]); s = 0; break; default: str = g_strdup_printf ("%s - %d atom ring(s) color", rings_type[s], this_proj -> coord -> geolist[g][0][c]); s = 0; break; } GtkWidget * win = gtk_color_chooser_dialog_new (str, GTK_WINDOW(this_proj -> modelgl -> win)); g_free (str); set_color_chooser_color (win, this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c]); gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER(win), TRUE); gtk_window_set_modal ((GtkWindow *)win, TRUE); run_this_gtk_dialog (win, G_CALLBACK(run_window_color_coord), data); } Atomes-GNU-1.1.14/src/opengl/win/w_coord.c000066400000000000000000001446411457665371200201570ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_coord.c * @short Functions to create the 'Environments configuration' window * @author Sébastien Le Roux */ /* * This file: 'w_coord.c' * * Contains: * - The functions to create the 'Environments configuration' window * * List of functions: int get_page_from_geo_coord (glwin * view, int geo, int coord); gboolean add_geo (int poly, project * this_proj, int g, int i, int j); G_MODULE_EXPORT gboolean scroll_set_poly_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_event_coord (GtkWidget * widg, GdkEvent * event, gpointer data); void poly_alpha_has_changed (gpointer data, GLfloat v); void set_frag_mol_cell_background (GtkListStore * store, GtkTreeIter iter, ColRGBA col); void add_this_frag_mol_to_search_tree (project * this_proj, int geo, int gid); void set_this_frag_mol_color (gpointer data, GtkTreePath * path); G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_show_hide_coord (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_select_unselect_coord (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data); G_MODULE_EXPORT void toggled_show_hide_poly (GtkToggleButton * widg, gpointer data); G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_poly_alpha (GtkRange * range, gpointer data); G_MODULE_EXPORT void on_select_frag_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void run_set_this_frag_mol_color (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void to_set_this_frag_mol_color (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data); G_MODULE_EXPORT void update_frag_mol_search (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_atom_color_map_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_poly_color_map_box (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data); G_MODULE_EXPORT void on_cloned_poly_toggled (GtkToggleButton * Button, gpointer data); G_MODULE_EXPORT void close_coord (GtkButton * but, gpointer data); G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data); GtkWidget * coord_tab (glwin * view, int geo, int poly); GtkWidget * create_frag_mol_tree (project * this_proj, int geo); GtkWidget * create_frag_mol_search (project * this_proj, int geo); GtkWidget * fragmol_tab (glwin * view, int geo); GtkWidget * param_tab (glwin * view); GtkWidget * advanced_coord_properties (glwin * view, int page); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #include "bind.h" extern cairo_surface_t * col_surface (double r, double g, double b, int x, int y); extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); extern G_MODULE_EXPORT void cloned_poly (GtkWidget * widg, gpointer data); extern int selected_aspec; extern GtkWidget * rings_tab (glwin * view, int g); extern GtkWidget * chains_tab (glwin * view); char * text_maps[ATOM_MAPS] = {"Atomic species", "Total", "Partial", "Fragment(s)", "Molecule(s)"}; int frag_mol_status; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data) \brief toggle show / hide coordination callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_coord (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_coord (GtkToggleButton * widg, gpointer data) \brief toggle show / hide coordination callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_coord (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; int i, j, k; int s, g, c; project * this_proj = get_project_by_id (the_data -> a); s = the_data -> b; g = the_data -> d; c = the_data -> c; #ifdef DEBUG g_debug ("Toggle show/hide coord:: s= %d, g= %d, c= %d", s, g, c); #endif j = 0; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } j += c; #ifdef GTK4 k = (widg) ? gtk_check_button_get_active (widg) : frag_mol_status; #else // GTK3 Menu Action To Check k = (widg) ? gtk_toggle_button_get_active (widg) : frag_mol_status; #endif if (k != this_proj -> modelgl -> anim -> last -> img -> show_coord[g][j]) { if (is_coord_in_menu(g, this_proj)) { #ifdef GTK4 gchar * name; gchar * str; if (g < 2) { if (g) { str = exact_name (env_name (this_proj, c, s, 1, NULL)); } else { str = g_strdup_printf ("%d", this_proj -> coord -> geolist[g][s][c]); } name = g_strdup_printf ("set-%s-s.%d.0", str, j); g_free (str); } else if (g > 1 && g < 4) { name = g_strdup_printf ("set-%s-%d.%d.0", (g == 2) ? "frag" : "mol", c+1, c); } else if (g > 3 && g < 9) { name = g_strdup_printf ("set-rshow-%d.%d.0", this_proj -> coord -> geolist[g][0][c], j); } g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); #else gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][g][j], k); #endif } else { tint pointer; pointer.a = g; pointer.b = c; pointer.c = k; opengl_project_changed (the_data -> a); #ifdef GTK4 show_hide_the_coord (NULL, NULL, & pointer); #else show_hide_the_coord (NULL, & pointer); #endif // GTK4 } } init_default_shaders (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data) \brief toggle label / unlabel coordination callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkToggleButton * widg, gpointer data) \brief toggle label / unlabel coordination callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_label_unlabel_coord (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; tint pointer; pointer.a = the_data -> d; pointer.b = the_data -> c; #ifdef GTK4 pointer.c = (widg) ? gtk_check_button_get_active (widg) : frag_mol_status; #else pointer.c = (widg) ? gtk_toggle_button_get_active (widg) : frag_mol_status; #endif selected_aspec = the_data -> b; #ifdef DEBUG g_debug ("Toggle label/unlabel coord:: s= %d, g= %d, c= %d, selec_sp= %d", pointer.a, pointer.b, pointer.c, selected_aspec); #endif opengl_project_changed (the_data -> a); #ifdef GTK4 label_unlabel_coord (NULL, NULL, & pointer); #else label_unlabel_coord (NULL, & pointer); #endif // GTK4 } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data) \brief toggle select / unselect coordination callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_select_unselect_coord (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_select_unselect_coord (GtkToggleButton * widg, gpointer data) \brief toggle select / unselect coordination callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_select_unselect_coord (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; tint pointer; pointer.a = the_data -> d; pointer.b = the_data -> c; #ifdef GTK4 pointer.c = (widg) ? gtk_check_button_get_active (widg) : frag_mol_status; #else pointer.c = (widg) ? gtk_toggle_button_get_active (widg) : frag_mol_status; #endif selected_aspec = the_data -> b; #ifdef DEBUG g_debug ("Toggle select/unselect coord:: s= %d, g= %d, c= %d, selec_sp= %d", pointer.a, pointer.b, pointer.c, selected_aspec); #endif opengl_project_changed (the_data -> a); #ifdef GTK4 select_unselect_coord (NULL, NULL, & pointer); #else select_unselect_coord (NULL, & pointer); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data) \brief toggle show / hide polyhedra callback GTK4 \param widg the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_poly (GtkCheckButton * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT void toggled_show_hide_poly (GtkToggleButton * widg, gpointer data) \brief toggle show / hide polyhedra callback GTK3 \param widg the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void toggled_show_hide_poly (GtkToggleButton * widg, gpointer data) #endif { qint * the_data = (qint *)data; int i, j, k; int s, g, c; project * this_proj = get_project_by_id(the_data -> a); s = the_data -> b; g = the_data -> d; c = the_data -> c; j = c; if (g < 2) { for (i=0; i coord -> ntg[g][i]; } } #ifdef GTK4 k = gtk_check_button_get_active (widg); if (k != this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j]) { gchar * str; gchar * name; if (g < 2) { if (g) { str = exact_name (env_name (this_proj, c, s, 1, NULL)); } else { str = g_strdup_printf ("%d", this_proj -> coord -> geolist[g][s][c]); } name = g_strdup_printf ("set-%s-%d-p.%d.0", str, g, j); g_free (str); } else if (g > 3 && g < 9) { name = g_strdup_printf ("set-%d-p.%d.0", this_proj -> coord -> geolist[g][0][c], j); } g_action_group_activate_action ((GActionGroup *)this_proj -> modelgl -> action_group, (const gchar *)name, NULL); g_free (name); } #else // GTK3 Menu Action To Check k = gtk_toggle_button_get_active (widg); if (is_coord_in_menu(g, this_proj)) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][g][j], k); } this_proj -> modelgl -> anim -> last -> img -> show_poly[g][j] = k; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); #endif } /*! \fn G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data) \brief set fragment or molecule color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_frag_mol (GtkColorChooser * colob, gpointer data) { qint * cid = (qint *)data; int c, g; project * this_proj = get_project_by_id(cid -> a); g = cid -> b; c = cid -> c; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][0][c] = get_button_color (colob); int shaders[4] = {ATOMS, BONDS, POLYS, RINGS}; re_create_md_shaders (4, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data) \brief set coordination color \param colob the GtkColorChosser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_color_coord (GtkColorChooser * colob, gpointer data) { qint * cid = (qint *)data; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; if (g > 3) s = 0; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c] = get_button_color (colob); int shaders[4] = {ATOMS, BONDS, POLYS, RINGS}; re_create_md_shaders (4, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn void poly_alpha_has_changed (gpointer data, GLfloat v) \brief change polyhedra opacity \param data the associated data pointer \param v the new opacity value */ void poly_alpha_has_changed (gpointer data, GLfloat v) { qint * cid = (qint *)data; int c, g, s; project * this_proj = get_project_by_id(cid -> a); s = cid -> b; c = cid -> c; g = cid -> d; if (g > 1) s = 0; this_proj -> modelgl -> anim -> last -> img -> spcolor[g][s][c].alpha = v; int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_poly_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief set polyhedra opacity - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_poly_alpha (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { poly_alpha_has_changed (data, (GLfloat) value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_poly_alpha (GtkRange * range, gpointer data) \brief set polyhedra opacity - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_poly_alpha (GtkRange * range, gpointer data) { poly_alpha_has_changed (data, (GLfloat) gtk_range_get_value (range)); } /*! \fn gboolean add_geo (int poly, project * this_proj, int g, int i, int j) \brief test add this geometry data to the tree store or not ? \param poly polyhedra (1 / 0) \param this_proj the target project \param g the target geometry, 0 = total coord, 1 = partial coord, 4-8 = ring(s), 9 = chain(s) \param i target chemical species or 0 \param j geometry id number */ gboolean add_geo (int poly, project * this_proj, int g, int i, int j) { if (! poly) { if (g == 0) { if (this_proj -> coord -> geolist[g][i][j] != -1) { return TRUE; } else { return FALSE; } } else if (g == 1) { return TRUE; } else { if (this_proj -> coord -> geolist[g][i][j]) { return TRUE; } else { return FALSE; } } } else { if (g == 0 || g > 3) { if (this_proj -> coord -> geolist[g][i][j] > 2) { return TRUE; } else { return FALSE; } } else { int l, m; m = 0; for (l=0; l nspec; l++) { m += this_proj -> coord -> partial_geo[i][j][l]; } if (m > 2) { return TRUE; } else { return FALSE; } } } } /*! \fn GtkWidget * coord_tab (glwin * view, int geo, int poly) \brief create coordination(s) and polyhedra tab \param view the target glwin \param geo the target geometry, 0 = total coord, 1 = partial coord, 4-8 = ring(s), 9 = chain(s) \param poly polyhedra (1 / 0) */ GtkWidget * coord_tab (glwin * view, int geo, int poly) { int i, j, k, l, m, n; int p = view -> proj; gchar * str; GtkWidget * wb; GtkWidget * but; gchar * col[15] = {" ", "Color", "Show", "Label", "Pick", "Alpha", "Color *", "Show **", "Label **", "Pick **", "Ring(s) size", "Chain(s) size", "Show *", "Label *", "Pick *"}; int scol[15] = {100, 70, 65, 40, 40, 150, 70, 75, 55, 55, 100, 100, 60, 50, 55}; GtkWidget * box = create_vbox (BSEP); GtkWidget * coord = create_scroll (box, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (coord, TRUE); gtk_widget_set_vexpand (coord, TRUE); n = 0; if (geo > 3 && ! poly) { n = (geo == 9) ? 11 : 10; gtk_widget_set_size_request (coord, -1, 475); if (geo < 9) { add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label(" * for the polyhedra only", -1, -1, 0.0, 0.5), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label("** affect all atoms that belong to ring(s) of this size", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, box, markup_label("* affect all atoms that belong to chain(s) of this size", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } } GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, coord, vbox); l = 0; if (poly) { l = 1; } wb = create_hbox (0); gtk_widget_set_size_request (wb, 350, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wb, FALSE, FALSE, 0); for (i=0; i<5-2*l-geo/9; i++) { if (geo == 9) { j = 11 + i; } else if (i == 0 && geo > 3) { j = 10; } else if (i > 0 && geo > 3 && ! poly) { j = i+5; } else if (i == 1 && poly) { j = 5; } else { j = i; } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, markup_label(col[j], scol[j], -1, 0.5, 0.5), FALSE, FALSE, 5); } k = 0; project * this_proj = get_project_by_id(p); m = (geo < 2) ? this_proj -> nspec : 1; if ((geo < 2 || (geo == 9 && view -> chain_max) || (geo > 3 && geo < 9 && view -> ring_max[geo-4])) && this_proj -> coord -> totcoord[geo] > 0) { for (i=0; i < m; i++) { if (geo == 0) { for (j=0 ; j < this_proj -> coord -> ntg[geo][i]; j++) { if (add_geo(poly, this_proj, geo, i, j)) { str = g_strdup_printf (" %s", this_proj -> chemistry -> label[i]); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); break; } } } for (j=0 ; j < this_proj -> coord -> ntg[geo][i]; j++, k++) { if (add_geo(poly, this_proj, geo, i, j)) { wb = create_hbox (0); gtk_widget_set_size_request (wb, 350, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wb, FALSE, FALSE, 0); if (geo == 0) { str = g_strdup_printf ("%d", this_proj -> coord -> geolist[geo][i][j]); } else if (geo == 1) { str = exact_name(env_name (this_proj, j, i, 1, NULL)); } else { str = g_strdup_printf ("%d atoms", this_proj -> coord -> geolist[geo][i][j]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, markup_label(str, scol[0], -1, 0.5, 0.5), FALSE, FALSE, 5); g_free (str); if (poly) { but = create_hscale (0.0, 1.0, 0.01, view -> anim -> last -> img -> spcolor[geo][i][j].alpha, GTK_POS_LEFT, 3, 160, G_CALLBACK(set_poly_alpha), G_CALLBACK(scroll_set_poly_alpha), & view -> gcid[geo][k][geo]); } else if (geo != 9) { ColRGBA col = view -> anim -> last -> img -> spcolor[geo][i][j]; col.alpha = 1.0; but = color_button (col, TRUE, 80, -1, G_CALLBACK(set_color_coord), & view -> gcid[geo][k][geo]); } if (poly || geo != 9) add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 5); if (poly) { but = check_button (NULL, -1, -1, view -> anim -> last -> img -> show_poly[geo][k], G_CALLBACK(toggled_show_hide_poly), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 20); } else { but = check_button (NULL, -1, -1, view -> anim -> last -> img -> show_coord[geo][k], G_CALLBACK(toggled_show_hide_coord), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 20); but = check_button (NULL, -1, -1, FALSE, G_CALLBACK(toggled_label_unlabel_coord), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 15+n); but = check_button (NULL, -1, -1, FALSE, G_CALLBACK(toggled_select_unselect_coord), & view -> gcid[geo][k][geo]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, but, FALSE, FALSE, 15+n/2); } } } } } return box; } /*! \fn G_MODULE_EXPORT void on_select_frag_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief tree store action on cell selection \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void on_select_frag_mol (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, g, v, act; tint * dat = (tint * )data; GtkTreeIter iter; opengl_project_changed(dat -> a); coord_edition * coord = opengl_project -> modelgl -> coord_win; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); g = (dat -> b < 30) ? 2 : 3; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { v = 0; } else { v = 1; } gtk_tree_model_get_iter (GTK_TREE_MODEL(coord -> frag_mol_model[g-2]), & iter, path); act = dat -> b - 10*g; gtk_list_store_set (coord -> frag_mol_model[g-2], & iter, act, v, -1); gtk_tree_model_get (GTK_TREE_MODEL(coord -> frag_mol_model[g-2]), & iter, 0, & i, -1); frag_mol_status = v; switch (act) { case 1: // Viz toggled_show_hide_coord (NULL, & opengl_project -> modelgl -> gcid[g][i-1][g]); break; case 3: // Label toggled_label_unlabel_coord (NULL, & opengl_project -> modelgl -> gcid[g][i-1][g]); break; case 4: // Pick toggled_select_unselect_coord (NULL, & opengl_project -> modelgl -> gcid[g][i-1][g]); break; } } /*! \fn void set_frag_mol_cell_background (GtkListStore * store, GtkTreeIter iter, ColRGBA col) \brief set tree store cell background color \param store the GtkListStore \param iter the GtkTreeIter target to update \param col the background color to set */ void set_frag_mol_cell_background (GtkListStore * store, GtkTreeIter iter, ColRGBA col) { cairo_surface_t * surface; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 70, 50); cairo_t * cr = cairo_create (surface); cairo_set_source_rgba (cr, col.red, col.green, col.blue, 1.0); cairo_paint (cr); GdkPixbuf * pix = convert_to_pixbuf (surface); cairo_surface_destroy (surface); cairo_destroy(cr); gtk_list_store_set (store, & iter, 2, pix, -1); } /*! \fn void add_this_frag_mol_to_search_tree (project * this_proj, int geo, int gid) \brief add fragment or molecule in the search tree \param this_proj the target project \param geo 2 = fragment(s) or 3 = molecule(s) \param gid fragment or molecule id number to add */ void add_this_frag_mol_to_search_tree (project * this_proj, int geo, int gid) { GtkTreeIter id_level; GtkTreeIter new_level; gboolean valid; int i; int prepend = 0; coord_edition * coord = this_proj -> modelgl -> coord_win; GtkListStore * store = (GtkListStore *) coord -> frag_mol_model[geo-2]; GtkTreeModel * mod = GTK_TREE_MODEL(coord -> frag_mol_model[geo-2]); valid = gtk_tree_model_get_iter_first(mod, & id_level); while (valid) { gtk_tree_model_get (mod, & id_level, 0, & i, -1); if (i > gid) { prepend = 1; valid = FALSE; } else if (i == gid) { prepend = 2; valid = FALSE; } else { valid = gtk_tree_model_iter_next(mod, & id_level); } } if (prepend < 2) { switch (prepend) { case 0: gtk_list_store_append (store, & id_level); gtk_list_store_set (store, & id_level, 0, gid, 1, this_proj -> modelgl -> anim -> last -> img -> show_coord[geo][gid-1], 3, FALSE, 4, FALSE, -1); set_frag_mol_cell_background (store, id_level, this_proj -> modelgl -> anim -> last -> img -> spcolor[geo][0][gid-1]); break; case 1: gtk_list_store_insert_before (store, & new_level, & id_level); gtk_list_store_set (store, & new_level, 0, gid, 1, this_proj -> modelgl -> anim -> last -> img -> show_coord[geo][gid-1], 3, FALSE, 4, FALSE, -1); set_frag_mol_cell_background (store, new_level, this_proj -> modelgl -> anim -> last -> img -> spcolor[geo][0][gid-1]); break; } } } /*! \fn G_MODULE_EXPORT void run_set_this_frag_mol_color (GtkDialog * win, gint response_id, gpointer data) \brief set fragment / molecule color - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_set_this_frag_mol_color (GtkDialog * win, gint response_id, gpointer data) { tint * dat = (tint * )data; int i, g; if (response_id == GTK_RESPONSE_OK) { g = (dat -> b < 30) ? 2 : 3; GtkTreeIter fm_iter; gtk_tree_model_get (GTK_TREE_MODEL(opengl_project -> modelgl -> coord_win -> frag_mol_model[g-2]), & fm_iter, 0, & i, -1); opengl_project -> modelgl -> anim -> last -> img -> spcolor[g][0][i-1] = get_window_color (GTK_WIDGET(win)); int shaders[3] = {ATOMS, BONDS, LABEL}; re_create_md_shaders (3, shaders, opengl_project); update (opengl_project -> modelgl); } destroy_this_dialog (win); } /*! \fn void set_this_frag_mol_color (gpointer data, GtkTreePath * path) \brief set fragment / molecule color - creating the dialog \param data the associated data pointer \param path the path in the tree view */ void set_this_frag_mol_color (gpointer data, GtkTreePath * path) { int i, g; tint * dat = (tint * )data; opengl_project_changed(dat -> a); g = (dat -> b < 30) ? 2 : 3; GtkTreeIter iter; gtk_tree_model_get_iter (GTK_TREE_MODEL(opengl_project -> modelgl -> coord_win -> frag_mol_model[g-2]), & iter, path); coord_edition * coord = opengl_project -> modelgl -> coord_win; gtk_tree_model_get (GTK_TREE_MODEL(coord -> frag_mol_model[g-2]), & iter, 0, & i, -1); gchar * ctitle[2] = {"Fragment", "Molecule"}; gchar * str = g_strdup_printf ("%s N°%d color", ctitle[g-2], i); GtkWidget * widg = gtk_color_chooser_dialog_new (str, GTK_WINDOW(coord -> win)); g_free (str); set_color_chooser_color (widg, opengl_project -> modelgl -> anim -> last -> img -> spcolor[g][0][i-1]); run_this_gtk_dialog (widg, G_CALLBACK(run_set_this_frag_mol_color), data); set_frag_mol_cell_background ((GtkListStore *) coord -> frag_mol_model[g-2], iter, opengl_project -> modelgl -> anim -> last -> img -> spcolor[g][0][i-1]); } /*! \fn G_MODULE_EXPORT void to_set_this_frag_mol_color (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) \brief set fragment/molecule color tree view callback \param tree_view the GtkTreeView sending the signal \param path the path in the tree view \param column the tree view column \param data the associated data pointer */ G_MODULE_EXPORT void to_set_this_frag_mol_color (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) { gchar * title; g_object_get (column, "title", & title, NULL, NULL); if (g_strcmp0(title, "Color") == 0) { set_this_frag_mol_color (data, path); } } /*! \fn GtkWidget * create_frag_mol_tree (project * this_proj, int geo) \brief create the fragment(s) / molecule(s) search tree store \param this_proj the target project \param geo 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * create_frag_mol_tree (project * this_proj, int geo) { int i; GtkTreeViewColumn * frag_mol_col[7]; GtkCellRenderer * frag_mol_cell[7]; gchar * ctitle[5]={"Id.", "Show", "Color", "Label", "Pick"}; gchar * ctype[5]={"text", "active", "pixbuf", "active", "active"}; GType col_type[5]={G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_OBJECT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN}; coord_edition * coord = this_proj -> modelgl -> coord_win; coord -> frag_mol_model[geo-2] = gtk_list_store_newv (5, col_type); GtkWidget * frag_mol_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> frag_mol_model[geo-2])); for (i=0; i<5; i++) { if (! i) { frag_mol_cell[i] = gtk_cell_renderer_text_new (); } else if (i == 2) { frag_mol_cell[i] = gtk_cell_renderer_pixbuf_new (); } else { frag_mol_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(frag_mol_cell[i]), "toggled", G_CALLBACK(on_select_frag_mol), & this_proj -> modelgl -> colorp[geo*10+i][0]); } gtk_cell_renderer_set_fixed_size (frag_mol_cell[i], 70, 25); frag_mol_col[i] = gtk_tree_view_column_new_with_attributes (ctitle[i], frag_mol_cell[i], ctype[i], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(frag_mol_tree), frag_mol_col[i]); gtk_tree_view_column_set_alignment (frag_mol_col[i], 0.5); } g_object_set (frag_mol_tree, "activate-on-single-click", TRUE, NULL, NULL); g_signal_connect (G_OBJECT(frag_mol_tree), "row-activated", G_CALLBACK(to_set_this_frag_mol_color), & this_proj -> modelgl -> colorp[geo*10+i][0]); return frag_mol_tree; } /*! \fn G_MODULE_EXPORT void update_frag_mol_search (GtkEntry * res, gpointer data) \brief update the fragment(s) / molecule(s) search widget \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_frag_mol_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; const gchar * m = entry_get_text (res); int v = (int)atof(m); project * this_proj = get_project_by_id(dat -> a); int g = dat -> b; if (v > 0 && v <= this_proj -> coord -> totcoord[g]) { add_this_frag_mol_to_search_tree (this_proj, g, v); } else { update_entry_text (res, ""); } } /*! \fn GtkWidget * create_frag_mol_search (project * this_proj, int geo) \brief create the frgament(s)/molecule(s) search widget \param this_proj the target project \param geo 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * create_frag_mol_search (project * this_proj, int geo) { GtkWidget * frag_mol_search = create_vbox (BSEP); gchar * obj[2] = {"fragment", "molecule"}; gchar * str = g_strdup_printf ("Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) 'manually':\n", obj[geo-2], obj[geo-2]); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[2]={"Fragment ID:", "Molecule ID:"}; GtkWidget * hbox; GtkWidget * entry; GtkWidget * label; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(search_item[geo-2], 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_frag_mol_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[geo][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); str = g_strdup_printf ("in [%d - %d]", 1, this_proj -> coord -> totcoord[geo]); label = markup_label (str, 50, -1, 0.0, 0.5); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, label, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, markup_label("Search result(s)", 200, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, create_frag_mol_tree (this_proj, geo), FALSE, FALSE, 0); return frag_mol_search; } /*! \fn GtkWidget * fragmol_tab (glwin * view, int geo) \brief create fragment(s) or molecule(s) tab \param view the target glwin \param geo 2 = fragment(s) or 3 = molecule(s) */ GtkWidget * fragmol_tab (glwin * view, int geo) { int i, j; GtkWidget * wb; gchar * str; int scol[5] = {70, 70, 65, 40, 40}; gchar * col[5] = {"Id", "Color", "Show", "Label", "Pick"}; GtkWidget * box = create_vbox (BSEP); GtkWidget * fragmol = create_scroll (box, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragmol, TRUE); gtk_widget_set_vexpand (fragmol, TRUE); project * this_proj = get_project_by_id(view -> proj); i = this_proj -> coord -> totcoord[geo]; if (i > 10000) { add_container_child (CONTAINER_SCR, fragmol, create_frag_mol_search(this_proj, geo)); } else { GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, fragmol, vbox); wb = create_hbox (0); gtk_widget_set_size_request (wb, 350, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, wb, FALSE, TRUE, 0); for (j=0; j<5; j++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, markup_label(col[j], scol[j], -1, 0.5, 0.5), FALSE, FALSE, 5); } for (j=0; j anim -> last -> img -> spcolor[geo][0][j]; col.alpha = 1.0; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, color_button (col, TRUE, 80, -1, G_CALLBACK(set_color_frag_mol), & view -> gcid[geo][j][0]), FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, check_button(NULL, -1, -1, view -> anim -> last -> img -> show_coord[geo][j], G_CALLBACK(toggled_show_hide_coord), & view -> gcid[geo][j][geo]), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, check_button(NULL, -1, -1, FALSE, G_CALLBACK(toggled_label_unlabel_coord), & view -> gcid[geo][j][geo]), FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, wb, check_button(NULL, -1, -1, FALSE, G_CALLBACK(toggled_select_unselect_coord), & view -> gcid[geo][j][geo]), FALSE, FALSE, 15); } } return box; } /*! \fn G_MODULE_EXPORT void set_atom_color_map_box (GtkComboBox * box, gpointer data) \brief change atom color map \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom_color_map_box (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; int i = gtk_combo_box_get_active (box); int j = view -> cmap[i]; #ifdef GTK4 gchar * variant = g_strdup_printf ("set-amap.%d.0", j); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-amap", g_variant_new_string((const gchar *)variant)); g_free (variant); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); #endif } /*! \fn G_MODULE_EXPORT void set_poly_color_map_box (GtkComboBox * box, gpointer data) \brief change polyhedra color map \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_poly_color_map_box (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; int i = gtk_combo_box_get_active (box); int j = view -> cmap[i] + ATOM_MAPS; #ifdef GTK4 gchar * variant = g_strdup_printf ("set-pmap.%d.0", j); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-pmap", g_variant_new_string((const gchar *)variant)); g_free (variant); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> color_styles[j], TRUE); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data) \brief toggle show / hide cloned polyhedra callback GTK4 \param Button the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cloned_poly_toggled (GtkCheckButton * Button, gpointer data) #else /*! \fn G_MODULE_EXPORT void on_cloned_poly_toggled (GtkToggleButton * Button, gpointer data) \brief toggle show / hide cloned polyhedra callback GTK3 \param Button the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_cloned_poly_toggled (GtkToggleButton * Button, gpointer data) #endif { glwin * view = (glwin *)data; #ifdef GTK4 view -> anim -> last -> img -> cloned_poly = gtk_check_button_get_active (Button); g_action_group_activate_action ((GActionGroup *)view -> action_group, "set-cloned-poly.0.0", NULL); /* int shaders[2] = {POLYS, RINGS}; re_create_md_shaders (2, shaders, get_project_by_id(view -> proj)); update (view); */ #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)view -> ogl_clones[5], gtk_toggle_button_get_active (Button)); #endif } /*! \fn GtkWidget * param_tab (glwin * view) \brief environments configuration window parameters tab \param view the target glwin */ GtkWidget * param_tab (glwin * view) { int i, j, k, l; GtkWidget * vbox = create_vbox (BSEP); /*gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(fragmol), vbox); */ GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 25); GtkWidget * lab = gtk_label_new ("Atom(s) and bond(s) color map:"); gtk_label_set_use_markup (GTK_LABEL(lab), 1); gtk_label_align (lab, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 20); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); GtkWidget * color_box = create_combo (); j = 0; for (i=0; i cmap[j] = i; combo_text_append (color_box, g_strdup_printf ("%s coordination(s)", text_maps[i])); j ++; } else if (i == 5 && get_project_by_id(view -> proj) -> force_field[0]) { view -> cmap[j] = i; combo_text_append (color_box, "Force field (DL_POLY)"); j ++; } else if (i == 6 && view -> custom_map != NULL) { view -> cmap[j] = i; combo_text_append (color_box, "Custom"); j ++; } else if (i == 0 || (i == 3 && view -> adv_bonding[0]) || (i == 4 && view -> adv_bonding[1])) { view -> cmap[j] = i; combo_text_append (color_box, text_maps[i]); j ++; } } l = 0; for (k=0; k anim -> last -> img -> color_map[0] == view -> cmap[k]) { l = k; break; } } gtk_combo_box_set_active (GTK_COMBO_BOX(color_box), l); g_signal_connect (G_OBJECT (color_box), "changed", G_CALLBACK(set_atom_color_map_box), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, color_box, FALSE, FALSE, 100); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 25); lab = gtk_label_new ("Polyhedra color map:"); gtk_label_set_use_markup (GTK_LABEL(lab), 1); gtk_label_align (lab, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 20); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); color_box = create_combo (); for (i=0; i adv_bonding[0]) || (i == 4 && view -> adv_bonding[1])) { combo_text_append (color_box, text_maps[i]); } else if (i == 5 && get_project_by_id(view -> proj) -> force_field[0]) { combo_text_append (color_box, "Force field (DL_POLY)"); } else if (i == 6 && view -> custom_map != NULL) { combo_text_append (color_box, "Use atom(s) custom map"); } } l = 0; for (k=0; k anim -> last -> img -> color_map[1] == view -> cmap[k]) { l = k; // + ATOM_MAPS; break; } } gtk_combo_box_set_active (GTK_COMBO_BOX(color_box), l); g_signal_connect (G_OBJECT (color_box), "changed", G_CALLBACK(set_poly_color_map_box), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, color_box, FALSE, FALSE, 100); widget_set_sensitive (color_box, view -> bonding); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("\nDisplay polyhedra at the edges of the model box\n" "using the PBC even if the clones are not shown:", -1, -1, 0.5, 0.5), FALSE, FALSE, 15); GtkWidget * cloned_p = check_button ("Cloned polyhedra", -1, 40, view -> anim -> last -> img -> cloned_poly, G_CALLBACK(on_cloned_poly_toggled), view); widget_set_sensitive ((cloned_p), get_project_by_id(view -> proj) -> cell.pbc); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, cloned_p, FALSE, FALSE, 50); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("This is automatic if the clones are shown.\n" "The clones are the replica of the atoms linked by PBC.", -1, -1, 0.5, 0.5), FALSE, FALSE, 5); return vbox; } /*! \fn G_MODULE_EXPORT void close_coord (GtkButton * but, gpointer data) \brief environments configuration window close button \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_coord (GtkButton * but, gpointer data) { glwin * view = (glwin *)data; view -> coord_win -> win = destroy_this_widget (view -> coord_win -> win); g_free (view -> coord_win); view -> coord_win = NULL; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data) \brief environments configuration window close event callback GTK4 \param widg the GtkWindow sending the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_coord (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_event_coord (GtkWidget * widg, GdkEvent * event, gpointer data) \brief environments configuration window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_event_coord (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { close_coord (NULL, data); return FALSE; } /*! \fn GtkWidget * advanced_coord_properties (glwin * view, int page) \brief create the environments configuration window \param view the target glwin \param page the page of the notebook to display */ GtkWidget * advanced_coord_properties (glwin * view, int page) { gchar * str = g_strdup_printf ("Environments configuration - %s", get_project_by_id(view -> proj)->name); GtkWidget * win = create_win (str, view -> win, FALSE, FALSE); g_free (str); char * rings_short[5] = {"AR", "KR", "GR", "PR", "SR"}; GtkWidget * vbox = create_vbox (5); add_container_child (CONTAINER_WIN, win, vbox); gtk_widget_set_size_request (win, 625, 600); view -> coord_win -> notebook = gtk_notebook_new (); gtk_notebook_set_scrollable (GTK_NOTEBOOK(view -> coord_win -> notebook), TRUE); gtk_notebook_set_tab_pos (GTK_NOTEBOOK(view -> coord_win -> notebook), GTK_POS_LEFT); gtk_widget_show (view -> coord_win -> notebook); gtk_widget_set_size_request (view -> coord_win -> notebook, 600, 550); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> coord_win -> notebook, FALSE, FALSE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), param_tab (view), gtk_label_new ("Parameters")); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 0, 0), markup_label("Total coordination(s) [TC]", -1, -1, 0.0, 0.5)); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 1, 0), markup_label("Partial coordination(s) [PC]", -1, -1, 0.0, 0.5)); int i, j, k; j = 2; k = 0; if (view -> rings) { for (i=0; i<5; i++) { if (view -> ring_max[i]) { j ++; k ++; str = g_strdup_printf ("%s ring(s) [%s]", rings_type[i], rings_short[i]); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, i+4, 0), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } } } if (view -> chains && view -> chain_max) { j ++; gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 9, 0), markup_label("Chain(s)", -1, -1, 0.0, 0.5)); } j ++; gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 0, 1), markup_label("Polyhedra from TC", -1, -1, 0.0, 0.5)); j ++; gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, 1, 1), markup_label("Polyhedra from PC", -1, -1, 0.0, 0.5)); if (view -> rings) { for (i=0; i<5; i++) { if (view -> ring_max[i]) { j ++; str = g_strdup_printf ("Polyhedra from %s", rings_short[i]); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), coord_tab (view, i+4, 1), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } } } if (view -> adv_bonding[0]) { j ++; gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), fragmol_tab (view, 2), markup_label ("Fragment(s)", -1, -1, 0.0, 0.5)); } if (view -> adv_bonding[1]) { j ++; gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), fragmol_tab (view, 3), markup_label ("Molecule(s)", -1, -1, 0.0, 0.5)); } if (view -> rings) { for (i=0; i<5; i++) { if (view -> ring_max[i]) { j ++; str = g_strdup_printf ("Isolated ring(s) from %s", rings_short[i]); gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), rings_tab (view, i), markup_label(str, -1, -1, 0.0, 0.5)); g_free (str); } } } if (view -> chains && view -> chain_max) { j ++; gtk_notebook_append_page (GTK_NOTEBOOK(view -> coord_win -> notebook), chains_tab (view), markup_label("Isolated chain(s)", -1, -1, 0.0, 0.5)); } GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, FALSE, 0); GtkWidget * but = create_button ("Close", IMG_STOCK, FCLOSE, -1, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_coord), view); add_box_child_end (hbox, but, FALSE, FALSE, 0); add_gtk_close_event (win, G_CALLBACK(close_event_coord), view); show_the_widgets (win); gtk_notebook_set_current_page (GTK_NOTEBOOK (view -> coord_win -> notebook), page); return win; } /*! \fn int get_page_from_geo_coord (glwin * view, int geo, int coord) \brief find the proper page to display in the notebook \param view the target glwin \param geo the type of environment \param coord coordination (1) or polyhedra (0) */ int get_page_from_geo_coord (glwin * view, int geo, int coord) { int i, j; if (geo == 30) return 0; if (! coord) { i = (geo < 2) ? 3 : 0; if (view -> rings) { for (j=0; j<5; j++) { if (view -> ring_max[j]) i ++; } } i = (geo < 2) ? i + geo : 4 + 2*i; } else { if (geo > 1) { i = 0; if (view -> rings) { for (j=0; j<5; j++) { if (view -> ring_max[j]) i ++; } } if (geo < 4) { i = 2*(i+2) + geo - 1; } else { i = 0; for (j=0; j<5; j++) { if (view -> ring_max[j]) { if (geo == 4 + j) break; i ++; } } i = 3 + i; } } else { i = geo + 1; } } return i; } /*! \fn G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data) \brief create the environments configuration window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void coord_properties (GtkWidget * widg, gpointer data) { tint * id = (tint *) data; glwin * view = get_project_by_id(id -> a) -> modelgl; int page = get_page_from_geo_coord(view, id -> b, id -> c); if (view -> coord_win == NULL) { view -> coord_win = g_malloc0 (sizeof*view -> coord_win); view -> coord_win -> win = advanced_coord_properties (view, page); } else if (GTK_IS_WIDGET(view -> coord_win -> win)) { gtk_widget_show (view -> coord_win -> win); gtk_notebook_set_current_page (GTK_NOTEBOOK (view -> coord_win -> notebook), page); } else { show_warning ("Error impossible to display the coordination window !", view -> win); } } Atomes-GNU-1.1.14/src/opengl/win/w_crystal.c000066400000000000000000000573231457665371200205320ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_crystal.c * @short Functions to create a crystal database window \n This is a project and not in use for the time being * @author Sébastien Le Roux */ /* * This file: 'w_crystal.c' * * Contains: * - The functions to create a crystal database window - This is a project and not in use for the time being * * List of functions: int cif_preview (const char * filetoread); int get_cgroup (gchar * str); int get_cif_files (); int get_num_cif (); int get_num_group (); int get_cif_info_from_cif_node (xmlNodePtr * cnode); int open_cif_database (gchar * filetoread); int prepare_data_base (int db); int build_crystal_from_cif_database (project * this_proj); void sort_crystal_files (int num_c); void fill_cif_tree (GtkListStore * store); void fill_group_tree (GtkListStore * store); void fill_symmetry_tree (GtkListStore * store); void fill_database_tree (GtkListStore * store); void insert_cif_preview (); void prepare_cif_preview (int id); void prepare_cif_list (int dba, int sym, int spg); GtkWidget * cif_tree (GtkListStore * store, int id, gchar * name); */ /* Crystal database window, project not in use for the time being */ #include "global.h" #include "interface.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include "bind.h" #define DATABASE 1 gchar * database_list[DATABASE] = {"American Mineralogist Crystal Structure Database"}; /*"Crystallography Open Database", "Database of Zeolite Structures"};*/ gchar * database_dir[DATABASE] = {"AMCSD"};//, "COD", "DZC"}; #define SYMMETRIES 8 gchar * sym_list[SYMMETRIES]= {"Triclinic", "Monoclinic", "Orthorhombic", "Tetragonal", "Trigonal", "Hexagonal"," Cubic", "Other"}; extern G_MODULE_EXPORT void on_calc_bonds_released (GtkWidget * widg, gpointer data); #ifdef GTK3 #ifndef G_OS_WIN32 extern void gtk_window_change_gdk_visual (GtkWidget * win); #endif // G_OS_WIN32 #endif // GTK3 extern gboolean create_3d_model (int p, gboolean load); extern G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); extern void init_camera (project * this_proj, gboolean get_depth); extern void alloc_proj_data (project * this_proj, int cid); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, int status, gboolean visible); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); extern void create_object_from_library (int p); GtkListStore * database_store; GtkTreeIter first_database_iter; GtkListStore * symmetry_store; GtkTreeIter first_symmetry_iter; GtkListStore * group_store; GtkTreeIter first_group_iter; GtkListStore * cif_store; GtkTreeIter first_cif_iter; GtkTreeSelection * cifselect[3]; int the_database; int the_symmetry; int the_group; gchar * the_crystal; gchar ** cif_file_name; gchar ** cif_name; GtkWidget * cif_preview_box = NULL; GtkWidget * cif_preview_plot = NULL; project * cif_proj = NULL; gchar * other_name[5]; int o_names; /*! \fn int cif_preview (const char * filetoread) \brief NOT USED ! \param filetoread */ int cif_preview (const char * filetoread) { int i, j, k; if (cif_proj != NULL) close_project (cif_proj); init_project (TRUE); cif_proj = active_project; cif_proj -> coordfile = g_strdup_print ("%s", filetoread); if (open_coordinate_file (6)) { // Cif error return 0; } return 1; } /*! \fn int get_cgroup (gchar * str) \brief NOT USED ! \param str */ int get_cgroup (gchar * str) { int i; for (i=0; i0) { str = g_strdup_printf ("%s", cif_name[i]); cif_name[i] = g_strdup_printf ("%s", cif_name[j]); cif_name[j] = g_strdup_printf ("%s", str); str = g_strdup_printf ("%s", cif_file_name[i]); cif_file_name[i] = g_strdup_printf ("%s", cif_file_name[j]); cif_file_name[j] = g_strdup_printf ("%s", str); } } } for(i=0;i d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); if (open_cif_file(str) != NULL) val ++; g_free (str); } } closedir(d); } #endif if (val > 0) { cif_file_name = calloc(val, sizeof*cif_file_name); cif_name = calloc(val, sizeof*cif_name); val = 0; #ifdef G_OS_WIN32 hFind = FindFirstFile (libwin32, & ffd); if (hFind != INVALID_HANDLE_VALUE) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fcif = open_cif_file(str); if (fcif != NULL) { cif_file_name[val] = g_strdup_printf ("%s", str); cif_name[val] = g_strdup_printf ("%s", fcif); val ++; g_free (fcif); } g_free (str); } while (FindNextFile(hFind, &ffd) != 0) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fcif = open_cif_file(str); if (fcif != NULL) { cif_file_name[val] = g_strdup_printf ("%s", str); cif_name[val] = g_strdup_printf ("%s", fcif); val ++; g_free (fcif); } g_free (str); } } FindClose(hFind); } #else d = opendir (libdir); if (d) { while ((dir = readdir(d)) != NULL) { if (dir -> d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); fcif = open_cif_file(str); if (fcif != NULL) { cif_file_name[val] = g_strdup_printf ("%s", str); cif_name[val] = g_strdup_printf ("%s", fcif); val ++; g_free (fcif); } g_free (str); } } closedir(d); } #endif sort_crystal_files (val); } return val; } /*! \fn int get_num_cif () \brief NOT USED ! */ int get_num_cif () { return num_cif[the_symmetry][the_group]; } /*! \fn int get_num_group () \brief NOT USED ! */ int get_num_group () { return num_group[the_symmetry]; } /*! \fn void fill_cif_tree (GtkListStore * store) \brief NOT USED ! \param store */ void fill_cif_tree (GtkListStore * store) { GtkTreeIter cif_level; int i; for (i=0; i modelgl -> plot, 0, 0, 4, 4); gtk_grid_attach (GTK_GRID (grid), markup_label("Formula:", 100, -1, 0.0, 0.5), 5, 1, 3, 1); int i; for (i=0; i nspec; i++) { if (i > 0) { str = g_strdup_printf ("%s %s", str, cif_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s", cif_proj -> chemistry -> label[i]); } if (cif_proj -> chemistry -> nsps[i] > 1) { str = g_strdup_printf ("%s%d", str, cif_proj -> chemistry -> nsps[i]); } str = g_strdup_printf ("%s", str); } gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 1, 3, 1); g_free (str); gtk_grid_attach (GTK_GRID (grid),markup_label("Density:", 100, -1, 0.0, 0.5), 5, 2, 3, 1); str = g_strdup_printf ("%.3f g/cm3", cif_proj -> density); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 2, 3, 1); g_free (str); gtk_grid_attach (GTK_GRID (grid), markup_label("Name:", 100, -1, 0.0, 0.5), 0, 5, 3, 1); str = g_strdup_printf ("%s", ); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, 30, 0.0, 0.5), 3, 5, 11, 1); gtk_widget_show_all (cif_preview_box); } /*! \fn void prepare_cif_preview (int id) \brief NOT USED ! \param id */ void prepare_cif_preview (int id) { if (cif_file_name != NULL) { if (cif_preview (cif_file_name[id])) { if (cif_preview_plot != NULL) gtk_widget_destroy (cif_preview_plot); cif_proj -> run = TRUE; active_project_changed (cif_proj -> id); create_3d_model (cif_proj -> id, FALSE); insert_cif_preview (); bonds_update = 0; active_glwin = cif_proj -> modelgl; active_glwin -> init = FALSE; active_image = & active_glwin -> anim -> last -> img; on_calc_bonds_released (NULL, NULL); cif_proj -> modelgl -> anim -> last -> img.quality = 30; cif_proj -> modelgl -> anim -> last -> img.rep = ORTHOGRAPHIC; gtk_widget_set_size_request (cif_proj -> modelgl -> plot, 150, 150); update (cif_proj -> modelgl); } } } /*! \fn int get_cif_info_from_cif_node (xmlNodePtr * cnode) \brief NOT USED ! \param cnode */ int get_cif_info_from_cif_node (xmlNodePtr * cnode) { return 1; } /*! \fn void prepare_cif_list (int dba, int sym, int spg) \brief NOT USED ! \param dba \param sym \param spg */ void prepare_cif_list (int dba, int sym, int spg) { #ifdef G_OS_WIN32 data_xml = g_strdup_printf ("%s\\crystals\\%s_list.xml", PACKAGE_LIB_DIR, database_dir[dba]); #else data_xml = = g_strdup_printf ("%s/crystals/%s_list.xml", PACKAGE_LIB_DIR, database_dir[dba]); #endif xmlDoc * doc; xmlTextReaderPtr reader; const xmlChar cif_base[8]="cif-database"; xmlChar * cdata; xmlNodePtr racine, node, sym_node, group_node, cif_node; reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return 0; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return 0; racine = xmlDocGetRootElement(doc); if (strcmp((char *)(racine -> name), (char *)cif_base) != 0) return clean_xml_data (doc, reader); node = findnode (racine -> children, "cif-list"); if (node == NULL) return clean_xml_data (doc, reader); sym_node = findnode (sym_node, sym_list[sym]); if (sym_node == NULL) return clean_xml_data (doc, reader); group_node = findnode (sym_node, group_names_by_sym[sym][spg]); cif_file_name = calloc(num_cif_by_sym_group[sym][spg], sizeof*cif_file_name); file_node = group_node -> properties; while (file_node) { cif_node = file_node -> children; if (cif_node == NULL) return clean_xml_data (doc, reader); if (! get_cif_info_from_cif_node (cif_node)) return 0; } xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); } } /*! \fn int open_cif_database (gchar * filetoread) \brief NOT USED ! \param filetoread */ int open_cif_database (gchar * filetoread) { xmlDoc * doc; xmlTextReaderPtr reader; const xmlChar cif_base[8]="cif-database"; xmlChar * cdata; xmlNodePtr racine, node, sym_node, group_node, cif_node; gchar * str; /* * build an xmlReader for that file */ reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return 0; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return 0; racine = xmlDocGetRootElement(doc); if (strcmp((char *)(racine -> name), (char *)cif_base) != 0) return clean_xml_data (doc, reader); node = racine -> children; node = findnode (racine -> children, "num-cif"); if (node == NULL) return clean_xml_data (doc, reader); total_num_cif = (int)atof((char *)xmlNodeGetContent(node)); sym_node = findnode (racine -> children, "sym-cif"); if (sym_node == NULL) return clean_xml_data (doc, reader); int i, j; for (i=0; i properties; while (group_spec) { cif_node = group_spec -> children; if (cif_node == NULL) return clean_xml_data (doc, reader); if (strcmp("num_cif", (char *)cif_node -> name) == 0) { num_cif_by_sym_group[i][j] = (int)atof((char *)xmlNodeGetContent(cif_node)); } } group_names_by_sym[i][j] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(group)); } } sym_node = findnode (racine -> children, "cif-list"); if (sym_node == NULL) return clean_xml_data (doc, reader); for (i=0; i modelgl -> win)); #ifdef GTK3 #ifdef GTKGLAREA #ifndef G_OS_WIN32 if (! atomes_visual) gtk_window_change_gdk_visual (clib); #endif // G_OS_WIN32 #endif // GTKGLAREA #endif // GTK3 gtk_dialog_add_button (GTK_DIALOG(clib), "Build", GTK_RESPONSE_APPLY); GtkWidget * vbox = gtk_dialog_get_content_area(GTK_DIALOG (clib)); GtkWidget * hbox = create_hbox (5); gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); cif_file_name = cif_name = NULL; database_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT, G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (database_store, 0, "Database"), FALSE, FALSE, 0); group_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT,G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (database_store, 1, "Symmetry"), FALSE, FALSE, 0); group_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT,G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (group_store, 2, "Group"), FALSE, FALSE, 0); cif_store = gtk_list_store_new (3, G_TYPE_INT, G_TYPE_INT,G_TYPE_STRING); gtk_box_pack_start (GTK_BOX(hbox), cif_tree (cif_store, 3, "Crystal"), FALSE, FALSE, 0); fill_database_store (database_store); cif_preview_box = create_hbox(0); gtk_box_pack_start (GTK_BOX(hbox), cif_preview_box, FALSE, FALSE, 0); cif_preview_plot = NULL; the_database = the_group = 0; gtk_tree_selection_select_iter (cifselect[0], & first_database_iter); gtk_tree_selection_select_iter (cifselect[1], & first_symmetry_iter); gtk_tree_selection_select_iter (cifselect[2], & first_group_iter); gtk_list_store_clear (cif_store); fill_cif_tree (cif_store); gtk_tree_selection_select_iter (cifselect[3], & first_cif_iter); gtk_widget_show_all (clib); prepare_cif_preview (0); this_proj -> modelgl -> nth_copy = 0; switch (gtk_dialog_run (GTK_DIALOG(clib))) { case GTK_RESPONSE_APPLY: gtk_widget_set_sensitive (vbox, 0); this_proj -> modelgl -> other_status = 2; create_object_from_library (cif_proj -> id); gtk_widget_set_sensitive (vbox, 1); break; default: res = 0; break; } gtk_widget_destroy (clib); active_project_changed (active); if (cif_file_name != NULL) free (cif_file_name); if (cif_name != NULL) free (cif_name); if (cif_proj != NULL) close_project (cif_proj); cif_proj = NULL; return res; } Atomes-GNU-1.1.14/src/opengl/win/w_cutoffs.c000066400000000000000000000226551457665371200205220ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_cutoffs.c * @short Functions to create the bond cutoffs update dialog * @author Sébastien Le Roux */ /* * This file: 'w_cutoffs.c' * * Contains: * - The functions to create the bond cutoffs update dialog * * List of functions: void update_cutoffs (project * this_proj); void cut_box (project * this_proj, GtkWidget * vbox); G_MODULE_EXPORT void set_cut (GtkEntry * res, gpointer data); G_MODULE_EXPORT void run_window_cuts (GtkDialog * win, gint response_id, gpointer data); G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data); G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "project.h" #include "glview.h" #include "glwindow.h" extern gchar * label_cutrab (project * this_proj, glwin * view, int id); double * tmpcut; /*! \fn void update_cutoffs (project * this_proj) \brief update bond cutoffs \param this_proj the target project */ void update_cutoffs (project * this_proj) { int i, j, k; k = 0; for (i=0; i nspec; i++, k++) { if (this_proj -> chemistry -> cutoffs[i][i] != tmpcut[k] && tmpcut[k] >= 0.0) { this_proj -> chemistry -> cutoffs[i][i] = tmpcut[k]; this_proj -> dmtx = FALSE; } } for (i=0; i nspec-1; i++) { for (j=i+1; j nspec; j++, k++) { if (this_proj -> chemistry -> cutoffs[i][j] != tmpcut[k] && tmpcut[k] >= 0.0) { this_proj -> chemistry -> cutoffs[i][j] = this_proj -> chemistry -> cutoffs[j][i] = tmpcut[k]; this_proj -> dmtx = FALSE; } } } if (this_proj -> chemistry -> grtotcutoff != tmpcut[k] && tmpcut[k] >= 0.0) { this_proj -> chemistry -> grtotcutoff = tmpcut[k]; this_proj -> dmtx = FALSE; } if (! this_proj -> dmtx && this_proj -> initgl) { if (this_proj -> modelgl -> rings) { this_proj -> modelgl -> rings = FALSE; for (j=0; j<5; j++) { clean_rings_data (j, this_proj -> modelgl); #ifdef GTK3 update_rings_menus (this_proj -> modelgl); #endif } } if (this_proj -> modelgl -> chains) { clean_chains_data (this_proj -> modelgl); #ifdef GTK3 update_chains_menus (this_proj -> modelgl); #endif } bonds_update = 1; frag_update = (this_proj -> natomes > ATOM_LIMIT) ? 0 : 1; mol_update = (frag_update) ? ((this_proj -> steps > STEP_LIMIT) ? 0 : 1) : 0; this_proj -> runc[0] = FALSE; if (this_proj -> id != activep) { k = activep; active_project_changed (this_proj -> id); on_calc_bonds_released (NULL, NULL); active_project_changed (k); } else { update_project (this_proj -> id); on_calc_bonds_released (NULL, NULL); } } } /*! \fn G_MODULE_EXPORT void set_cut (GtkEntry * res, gpointer data) \brief change cutoff entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_cut (GtkEntry * res, gpointer data) { const gchar * m; int id = GPOINTER_TO_INT(data); m = entry_get_text (res); double v = atof(m); if (v >= 0.0) { tmpcut[id] = (v < 0.5) ? 0.5 : v; } update_entry_double (res, tmpcut[id]); } /*! \fn void cut_box (project * this_proj, GtkWidget * vbox) \brief box cutoff entries \param this_proj the target project \param vbox the GtkWidget sending the signal */ void cut_box (project * this_proj, GtkWidget * vbox) { int i, j, k; GtkWidget * vbo, * hbo, * cut; gchar * str; i = 1 + this_proj -> nspec * (this_proj -> nspec + 1) / 2; j = (this_proj -> nspec > 4) ? 500 : i * 37; GtkWidget * cutscroll = create_scroll (vbox, 350, j, GTK_SHADOW_NONE); vbo = create_vbox (BSEP); tmpcut = allocdouble (i); k = 0; for (i=0; i nspec; i++, k++) { hbo = create_hbox (0); gtk_widget_set_size_request (hbo, 250, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbo, hbo, FALSE, FALSE, 1); str = g_strdup_printf ("%s - %s", exact_name(this_proj -> chemistry -> label[i]), exact_name(this_proj -> chemistry -> label[i])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); cut = create_entry (G_CALLBACK(set_cut), 120, 15, FALSE, GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(cut), this_proj -> chemistry -> cutoffs[i][i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, cut, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); tmpcut[k] = this_proj -> chemistry -> cutoffs[i][i]; } for (i=0; i nspec-1; i++) { for (j=i+1; j nspec; j++, k++) { hbo = create_hbox (0); gtk_widget_set_size_request (hbo, 250, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbo, hbo, FALSE, FALSE, 1); str = g_strdup_printf ("%s - %s", exact_name(this_proj -> chemistry -> label[i]), exact_name(this_proj -> chemistry -> label[j])); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); cut = create_entry (G_CALLBACK(set_cut), 120, 15, FALSE, (gpointer)GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(cut), this_proj -> chemistry -> cutoffs[i][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, cut, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); tmpcut[k] = this_proj -> chemistry -> cutoffs[i][j]; } } hbo = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbo, hbo, FALSE, FALSE, 1); gtk_widget_set_size_request (hbo, 250, -1); str = g_strdup_printf ("Total"); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 5); g_free (str); cut = create_entry (G_CALLBACK(set_cut), 120, 15, FALSE, (gpointer)GINT_TO_POINTER(k)); update_entry_double (GTK_ENTRY(cut), this_proj -> chemistry -> grtotcutoff); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, cut, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbo, markup_label("Å", 30, -1, 0.0, 0.5), FALSE, FALSE, 5); tmpcut[k] = this_proj -> chemistry -> grtotcutoff; add_container_child (CONTAINER_SCR, cutscroll, vbo); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Cutoff(s) must be ≥ 0.5 Å", -1, -1, 0.5, 0.5), FALSE, FALSE, 10); } /*! \fn G_MODULE_EXPORT void run_window_cuts (GtkDialog * win, gint response_id, gpointer data) \brief bond cutoffs window - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_cuts (GtkDialog * win, gint response_id, gpointer data) { if (response_id == GTK_RESPONSE_APPLY) { gboolean upc = FALSE; if (opengl_project -> modelgl -> rings || opengl_project -> modelgl -> chains) { upc = ask_yes_no ("Data can be lost !", "You will lose\n rings statistics and/or chains statistics data\nProceed anyway ?", GTK_MESSAGE_WARNING, GTK_WIDGET(win)); } else { upc = TRUE; } if (upc) { bonds_update = 1; update_cutoffs (opengl_project); #ifdef GTK3 gtk_menu_item_set_label (GTK_MENU_ITEM(opengl_project -> modelgl -> ogl_bonds[7]), label_cutrab (opengl_project, opengl_project -> modelgl, 0)); #endif } } destroy_this_dialog (win); if (tmpcut) { g_free (tmpcut); tmpcut = NULL; } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data) \brief adjust bond cutoffs window callback GTK4 \param action the GAction sending the signal \param parameter GVariant parameter of the GAction \param data the associated data pointer */ G_MODULE_EXPORT void window_cuts (GSimpleAction * action, GVariant * parameter, gpointer data) #else /*! \fn G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data) \brief adjust bond cutoffs window callback GTK3 \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_cuts (GtkWidget * widg, gpointer data) #endif { tint * the_data = (tint *)data; int p = the_data -> a; opengl_project_changed (p); gchar * str = g_strdup_printf ("Adjust cutoff radius(ii) - %s", prepare_for_title(opengl_project -> name)); GtkWidget * win = dialog_cancel_apply (str, opengl_project -> modelgl -> win, FALSE); g_free (str); cut_box (opengl_project, dialog_get_content_area (win)); run_this_gtk_dialog (win, G_CALLBACK(run_window_cuts), NULL); } Atomes-GNU-1.1.14/src/opengl/win/w_encode.c000066400000000000000000000354421457665371200203040ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_encode.c * @short Functions to create the encoding (image/video) window * @author Sébastien Le Roux */ /* * This file: 'w_encode.c' * * Contains: * - The functions to create the encoding (image/video) window * * List of functions: void clean_animation (glwin * view); void set_encoding_widget_sensitivity (gboolean video, int sensitivity); void window_encode (glwin * view, gboolean video); G_MODULE_EXPORT void set_video_frames (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_video_extra_frames (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_video_res (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk); G_MODULE_EXPORT void set_video_opengl_spin (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void set_video_bitrate (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_image_format (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void run_window_encode (GtkDialog * win ,gint response_id, gpointer data); */ #include "global.h" #include "interface.h" #include "glview.h" #include "movie.h" int video_res[2]; int framesec; int extraframes; int codec; int oglquality; int bitrate; extern char * codec_name[VIDEO_CODECS]; extern char * image_name[IMAGE_FORMATS]; extern gboolean spin (gpointer data); /*! \fn G_MODULE_EXPORT void set_video_frames (GtkEntry * res, gpointer data) \brief set number of frames \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_frames (GtkEntry * res, gpointer data) { const gchar * n; int frs; n = entry_get_text (res); frs = atof(n); if (frs > 0) { framesec = frs; } update_entry_int (res, framesec); } /*! \fn G_MODULE_EXPORT void set_video_extra_frames (GtkEntry * res, gpointer data) \brief set video extra frames \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_extra_frames (GtkEntry * res, gpointer data) { const gchar * n; int exf; n = entry_get_text (res); exf = atof(n); if (exf >= 0) { extraframes = exf; } update_entry_int (res, extraframes); } /*! \fn G_MODULE_EXPORT void set_video_res (GtkEntry * res, gpointer data) \brief set video / image resolution \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_res (GtkEntry * res, gpointer data) { const gchar * n; int vres; int id = GPOINTER_TO_INT(data); n = entry_get_text (res); vres = atof(n); if (vres > 0) { video_res[id] = vres; } update_entry_int (res, video_res[id]); } /*! \fn G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk) \brief change video codec \param *ComboBoxGtk the GtkComboBox sending the signal */ G_MODULE_EXPORT void set_video_codec (GtkComboBox *ComboBoxGtk) { codec = gtk_combo_box_get_active (ComboBoxGtk); } /*! \fn G_MODULE_EXPORT void set_video_opengl_spin (GtkSpinButton * res, gpointer data) \brief set encoding OpenGL quality callback - spin \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_opengl_spin (GtkSpinButton * res, gpointer data) { qual = gtk_spin_button_get_value_as_int(res); if (qual == 0 || (qual > 1 && qual <= 1000)) { oglquality = qual; } update_entry_int (GTK_ENTRY(res), oglquality); } /*! \fn G_MODULE_EXPORT void set_video_bitrate (GtkEntry * res, gpointer data) \brief set video bitrate entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_video_bitrate (GtkEntry * res, gpointer data) { const gchar * n; int bit; n = entry_get_text (res); bit = atof(n); if (bit > 0) { bitrate = bit; } update_entry_int (res, bitrate); } /*! \fn void clean_animation (glwin * view) \brief clean saved animation data \param view the target glwin */ void clean_animation (glwin * view) { int i; snapshot * shot = view -> anim -> first; snapshot * del; for (i=0; i < view -> anim -> frames-1; i++) { del = shot; shot = shot -> next; g_free (del); } view -> anim -> first = view -> anim -> last = shot; view -> anim -> frames = 0; for (i=0; i<5; i++) { if (view -> anim -> last -> img -> i_rings[i] != NULL) { g_free (view -> anim -> last -> img -> i_rings[i]); view -> anim -> last -> img -> i_rings[i] = NULL; } } } GtkWidget * resf; GtkWidget * rese; GtkWidget * resb; GtkWidget * res[2]; GtkWidget * cod; /*! \fn void set_encoding_widget_sensitivity (gboolean video, int sensitivity) \brief Adjust the sensitivity for the widgets of the encoding window \param video encoding video (yes / no) \param sensitivity sensitivity */ void set_encoding_widget_sensitivity (gboolean video, int sensitivity) { if (video) { widget_set_sensitive (resf, sensitivity); widget_set_sensitive (rese, sensitivity); widget_set_sensitive (resb, sensitivity); } widget_set_sensitive (res[0], sensitivity); widget_set_sensitive (res[1], sensitivity); widget_set_sensitive (cod, sensitivity); } GtkWidget * form; /*! \fn G_MODULE_EXPORT void set_image_format (GtkComboBox * box, gpointer data) \brief selecting the image format \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_image_format (GtkComboBox * box, gpointer data) { codec = gtk_combo_box_get_active (box); switch (codec) { case 0: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_PNG); break; case 1: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_JPG); break; case 2: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_TIFF); break; case 3: gtk_image_set_from_file (GTK_IMAGE(form), PACKAGE_BMP); break; } } GtkWidget * encoding_pb; gboolean encode_video; /*! \fn G_MODULE_EXPORT void run_window_encode (GtkDialog * win , gint response_id, gpointer data) \brief encoding a movie - running the dialog \param win the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_window_encode (GtkDialog * win , gint response_id, gpointer data) { glwin * view = (glwin *)data; if (response_id == GTK_RESPONSE_APPLY) { set_encoding_widget_sensitivity (encode_video, 0); video_options * vopts = g_malloc0(sizeof*vopts); vopts -> proj = view -> proj; vopts -> oglquality = oglquality; vopts -> video_res = duplicate_int (2, video_res); vopts -> codec = codec; if (encode_video) { vopts -> framesec = framesec; vopts -> extraframes = extraframes; vopts -> bitrate = bitrate; save_movie (view, vopts); gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(encoding_pb), 0.0); } else { render_image (view, vopts); } g_free (vopts -> video_res); g_free (vopts); set_encoding_widget_sensitivity (encode_video, 1); } else { destroy_this_dialog (win); } } /*! \fn void window_encode (glwin * view, gboolean video) \brief encoding a movie - creating the dialog \param view the target glwin \param video video (1) or image (0) */ void window_encode (glwin * view, gboolean video) { gchar * str; int i; if (video) { str = g_strdup_printf ("%s - movie encoding", prepare_for_title(get_project_by_id(view -> proj) -> name)); } else { str = g_strdup_printf ("%s - image rendering", prepare_for_title(get_project_by_id(view -> proj) -> name)); } GtkWidget * win = dialog_cancel_apply (str, view -> win, FALSE); g_free (str); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox; if (video) { gtk_widget_set_size_request (vbox, -1, 420); // Frames hbox = create_hbox (0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Frames recorded:", 350, -1, 0.0, 0.5), FALSE, FALSE, 0); str = g_strdup_printf ("%d", view -> anim -> frames); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); // Frames per second hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Frames per seconds:", 350, -1, 0.0, 0.5), FALSE, FALSE, 0); resf = create_entry (G_CALLBACK(set_video_frames), 100, 10, FALSE, NULL); framesec = 24; update_entry_int (GTK_ENTRY(resf), framesec); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, resf, FALSE, FALSE, 0); // Extra frames hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Extra frames every (frames):", 350, -1, 0.0, 0.5), FALSE, FALSE, 0); rese = create_entry (G_CALLBACK(set_video_extra_frames), 100, 10, FALSE, NULL); extraframes = 10; update_entry_int (GTK_ENTRY(rese), extraframes); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, rese, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Movie resolution (in pixels):", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } else { gtk_widget_set_size_request (vbox, -1, 230); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Image resolution (in pixels):", -1, -1, 0.0, 0.5), FALSE, FALSE, 10); } hbox = create_hbox (0); gtk_widget_set_size_request (hbox, 300, -1); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, (video) ? 10 : 0); gchar * ax[2]={"x: ", "y: "}; for (i=0; i<2; i++) { video_res[i] = view -> pixels[i]; add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(ax[i], 100, -1, 0.5, 0.5), FALSE, FALSE, 0); res[i] = create_entry (G_CALLBACK(set_video_res), 100, 10, FALSE, (gpointer)GINT_TO_POINTER(i)); update_entry_int (GTK_ENTRY(res[i]), video_res[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, res[i], FALSE, FALSE, 0); } cod = create_combo (); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, video ? 0 : 10); gtk_widget_set_size_request (hbox, 300, -1); if (video) { // Codec add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Video codec:", 300, -1, 0.0, 0.5), FALSE, FALSE, 0); for (i=0; i spin[0] || view -> spin[1]) { for (i=0; i<2; i++) { view -> spin[i+2] = view -> spin[i]; view -> spin_speed[i+2] = view -> spin_speed[i]; view -> spin[i] = FALSE; } } gboolean old_play, old_stop; old_play = view -> play; old_stop = view -> stop; view -> play = FALSE; view -> stop = TRUE; encode_video = video; run_this_gtk_dialog (win, G_CALLBACK(run_window_encode), view); clean_animation (view); update (view); if (view -> spin[2] || view -> spin[3]) { for (i=0; i<2; i++) { view -> spin[i] = view -> spin[i+2]; view -> spin_speed[i] = view -> spin_speed[i+2]; g_timeout_add (REFRESH, (GSourceFunc) spin, & view -> colorp[0][i]); view -> spin[i+2] = FALSE; view -> spin_speed[i+2] = 0; } } view -> play = old_play; view -> stop = old_stop; } Atomes-GNU-1.1.14/src/opengl/win/w_labels.c000066400000000000000000000644321457665371200203120ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_labels.c * @short Functions to create the 'atomic labels' tab of the atom(s) / clone(s) advanced configuration window \n Functions to create the measure labels window of the 'Measures' window * @author Sébastien Le Roux */ /* * This file: 'w_labels.c' * * Contains: * - The functions to create the 'atomic labels' tab of the atom(s) / clone(s) advanced configuration window - The functions to create the measure labels window of the 'Measures' window * * List of functions: G_MODULE_EXPORT gboolean scroll_set_label_shift (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_set_measure_factor (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); G_MODULE_EXPORT gboolean scroll_set_measure_width (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data); void init_labels_colors (image * img, int sp, int id); void label_shift_has_changed (gpointer data, double value); void mesure_factor_has_changed (gpointer data, double value); void measure_width_has_changed (gpointer data, double value); G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_labels_format (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_labels_render (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data); G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_label_shift (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_measure_factor (GtkRange * range, gpointer data); G_MODULE_EXPORT void set_measure_width (GtkRange * range, gpointer data); G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data); GtkWidget * labels_tab (glwin * view, int id); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" #define LABEL_FORMATS 4 gchar * lab_formats[LABEL_FORMATS] = {"Element name", "Atomic symbol", "Atomic symbol + ID number", "ID number"}; GtkWidget * atom_color_box; GtkWidget ** color_title; GtkWidget * tilt; /*! \fn G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data) \brief change measure style \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measure_style (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); this_proj -> modelgl -> anim -> last -> img -> mpattern = gtk_combo_box_get_active (box); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_labels_format (GtkComboBox * box, gpointer data) \brief change label(s) format \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_format (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; int i = gtk_combo_box_get_active (box); project * this_proj = get_project_by_id(id -> a); if (i != this_proj -> modelgl -> anim -> last -> img -> labels_format[id -> b]) { this_proj -> modelgl -> anim -> last -> img -> labels_format[id -> b] = i; if (id -> b < 2) this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } } /*! \fn G_MODULE_EXPORT void set_labels_render (GtkComboBox * box, gpointer data) \brief change label(s) rendering mode \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_render (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; int i = gtk_combo_box_get_active (box); project * this_proj = get_project_by_id(id -> a); if (i != this_proj -> modelgl -> anim -> last -> img -> labels_render[id -> b]) { this_proj -> modelgl -> anim -> last -> img -> labels_render[id -> b] = i; if (id -> b < 2) { this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } else if (id -> b == 2) { this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; } else if (id -> b == 3 || id -> b == 4) { gtk_combo_box_set_active (GTK_COMBO_BOX(tilt), this_proj -> modelgl -> anim -> last -> img -> mtilt); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; } update (this_proj -> modelgl); } } /*! \fn void init_labels_colors (image * img, int sp, int id) \brief initialize atomic labels colors \param img the target image \param sp the total number of chemical species \param id atom(s) 0 or clone(s) 1 */ void init_labels_colors (image * img, int sp, int id) { int i; for (i = 0; i < sp; i++) { img -> labels_color[id][i].red = img -> at_color[i+id*sp].red; img -> labels_color[id][i].green = img -> at_color[i+id*sp].green; img -> labels_color[id][i].blue = img -> at_color[i+id*sp].blue; img -> labels_color[id][i].alpha = 1.0; GdkRGBA col = colrgba_togtkrgba (img -> labels_color[id][i]); gtk_color_chooser_set_rgba (GTK_COLOR_CHOOSER(color_title[i]), & col); } } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data) \brief use default atom colors - toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_atom_default_colors (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data) \brief use default atom colors - toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void use_atom_default_colors (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); int b = id -> b; gboolean val; #ifdef GTK4 val = gtk_check_button_get_active (but); #else val = gtk_toggle_button_get_active (but); #endif if (val) { if (this_proj -> modelgl -> anim -> last -> img -> labels_color[b] != NULL) { init_labels_colors (this_proj -> modelgl -> anim -> last -> img, this_proj -> nspec, b); g_free (this_proj -> modelgl -> anim -> last -> img -> labels_color[b]); } this_proj -> modelgl -> anim -> last -> img -> labels_color[b] = NULL; } else { this_proj -> modelgl -> anim -> last -> img -> labels_color[b] = g_malloc (2*this_proj -> nspec *sizeof*this_proj -> modelgl -> anim -> last -> img -> labels_color[b]); init_labels_colors (this_proj -> modelgl -> anim -> last -> img, this_proj -> nspec, b); } widget_set_sensitive (atom_color_box, ! val); this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data) \brief change label(s) font \param fontb the GtkFontButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_font (GtkFontButton * fontb, gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); g_free (this_proj -> modelgl -> anim -> last -> img -> labels_font[id -> b]); this_proj -> modelgl -> anim -> last -> img -> labels_font[id -> b] = g_strdup_printf ("%s", gtk_font_chooser_get_font (GTK_FONT_CHOOSER(fontb))); if (id -> b < 2) { this_proj -> modelgl -> create_shaders[LABEL] = TRUE; } else if (id -> b == 2) { this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; } else if (id -> b == 3 || id -> b == 4) { this_proj -> modelgl -> create_shaders[MEASU] = TRUE; } update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data) \brief change label(s) color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_label_color (GtkColorChooser * colob, gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); this_proj -> modelgl -> anim -> last -> img -> labels_color[id -> b][id -> c] = get_button_color (colob); if (id -> b < 2) this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data) \brief change label(s) position \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_position (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); this_proj -> modelgl -> anim -> last -> img -> labels_position[id -> b] = gtk_combo_box_get_active (box); if (id -> b < 2) this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn void label_shift_has_changed (gpointer data, double value) \brief change label(s) shift \param data the associated data pointer \param value the new label(s) shift */ void label_shift_has_changed (gpointer data, double value) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); int i = id -> b / 10; int j = id -> b - i * 10; this_proj -> modelgl -> anim -> last -> img -> labels_shift[i][j] = value; if (id -> b < 2) this_proj -> modelgl -> create_shaders[LABEL] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_label_shift (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change label(s) shift - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_label_shift (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { label_shift_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_label_shift (GtkRange * range, gpointer data) \brief change label(s) shift - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_label_shift (GtkRange * range, gpointer data) { label_shift_has_changed (data, gtk_range_get_value (range)); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data) \brief change label(s) scale - toggle callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_scale (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data) \brief change label(s) scale - toggle callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_scale (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); #ifdef GTK4 this_proj -> modelgl -> anim -> last -> img -> labels_scale[id -> b] = gtk_check_button_get_active (but); #else this_proj -> modelgl -> anim -> last -> img -> labels_scale[id -> b] = gtk_toggle_button_get_active (but); #endif if (id -> b < 2) this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (id -> b == 2) this_proj -> modelgl -> create_shaders[MAXIS] = TRUE; if (id -> b == 3 || id -> b == 4) this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data) \brief change label(s) tilt \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_labels_tilt (GtkComboBox * box, gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); this_proj -> modelgl -> anim -> last -> img -> mtilt = gtk_combo_box_get_active (box); if (id -> b < 2) this_proj -> modelgl -> create_shaders[LABEL] = TRUE; if (id -> b == 3 || id -> b == 4) this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn void mesure_factor_has_changed (gpointer data, double value) \brief change measure scale factor \param data the associated data pointer \param value the new scale factor */ void mesure_factor_has_changed (gpointer data, double value) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); this_proj -> modelgl -> anim -> last -> img -> mfactor = (int)value; this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_measure_factor (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change measure scall factor - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_measure_factor (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { mesure_factor_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_measure_factor (GtkRange * range, gpointer data) \brief change measure scall factor - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measure_factor (GtkRange * range, gpointer data) { mesure_factor_has_changed (data, gtk_range_get_value (range)); } /*! \fn void measure_width_has_changed (gpointer data, double value) \brief change measure width \param data the associated data pointer \param value the new width value */ void measure_width_has_changed (gpointer data, double value) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); this_proj -> modelgl -> anim -> last -> img -> mwidth = value; this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT gboolean scroll_set_measure_width (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) \brief change measure width - scroll callback \param range the GtkRange sending the signal \param scroll the associated scroll type \param value the range value \param data the associated data pointer */ G_MODULE_EXPORT gboolean scroll_set_measure_width (GtkRange * range, GtkScrollType scroll, gdouble value, gpointer data) { measure_width_has_changed (data, value); return FALSE; } /*! \fn G_MODULE_EXPORT void set_measure_width (GtkRange * range, gpointer data) \brief change measure width - range callback \param range the GtkRange sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_measure_width (GtkRange * range, gpointer data) { measure_width_has_changed (data, gtk_range_get_value (range)); } GtkWidget * line_box; GtkWidget * lstyle; #ifdef GTK4 /*! \fn G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data) \brief toggle enable measure lines callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void enable_lines (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data) \brief toggle enable measure lines callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void enable_lines (GtkToggleButton * but, gpointer data) #endif { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); int i; #ifdef GTK4 i = gtk_check_button_get_active (but); #else i = gtk_toggle_button_get_active (but); #endif widget_set_sensitive (line_box, i); if (i) { this_proj -> modelgl -> anim -> last -> img -> mpattern = 0; } else { this_proj -> modelgl -> anim -> last -> img -> mpattern = -1; } gtk_combo_box_set_active (GTK_COMBO_BOX(lstyle), this_proj -> modelgl -> anim -> last -> img -> mpattern); this_proj -> modelgl -> create_shaders[MEASU] = TRUE; update (this_proj -> modelgl); } /*! \fn GtkWidget * labels_tab (glwin * view, int lid) \brief create atomic label(s) tab for the atom(s) / clone(s) window \param view the target glwin \param lid label type (0 = atoms, 1 = clones, 3 = analysis measures, 4 = edition mode measures) */ GtkWidget * labels_tab (glwin * view, int lid) { int i; gchar * lpos[3] = {"x", "y", "z"}; project * this_proj = get_project_by_id(view -> proj); GtkWidget * tbox = create_vbox (BSEP); GtkWidget * vbox = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, tbox, vbox, FALSE, FALSE, 5); GtkWidget * box; if (lid < 3) { box = abox (vbox, "Templates: ", 0); GtkWidget * formats = create_combo (); for (i=0; i anim -> last -> img -> labels_format[lid]); gtk_widget_set_size_request (formats, 220, -1); g_signal_connect (G_OBJECT (formats), "changed", G_CALLBACK(set_labels_format), & view -> colorp[lid][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, formats, FALSE, FALSE, 10); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Label(s):", -1, 40, 0.0, 0.5), FALSE, FALSE, 0); } // Rendering box = abox (vbox, "Rendering: ", 0); GtkWidget * config = create_combo (); combo_text_append (config, "Basic text"); combo_text_append (config, "Highlighted"); gtk_combo_box_set_active (GTK_COMBO_BOX(config), view -> anim -> last -> img -> labels_render[lid]); gtk_widget_set_size_request (config, 220, -1); g_signal_connect (G_OBJECT (config), "changed", G_CALLBACK(set_labels_render), & view -> colorp[lid][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, config, FALSE, FALSE, 10); // Font box = abox (vbox, "Font:", 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, font_button (view -> anim -> last -> img -> labels_font[lid], 220, -1, G_CALLBACK(set_labels_font), & view -> colorp[lid][0]), FALSE, FALSE, 10); if (lid == 3) { box = abox (vbox, "Font color:", 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, color_button(view -> anim -> last -> img -> labels_color[lid][0], TRUE, 220, -1, G_CALLBACK(set_label_color), & view -> colorp[lid][0]), FALSE, FALSE, 10); } // Position box = abox (vbox, "Position:", 0); GtkWidget * position = create_combo (); combo_text_append (position, "Always visible"); combo_text_append (position, "Normal"); gtk_combo_box_set_active (GTK_COMBO_BOX(position), view -> anim -> last -> img -> labels_position[lid]); gtk_widget_set_size_request (position, 220, -1); g_signal_connect (G_OBJECT (position), "changed", G_CALLBACK(set_labels_position), & view -> colorp[lid][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, position, FALSE, FALSE, 10); // Size / scale box = abox (vbox, "Size:", 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, check_button ("scale with zoom in/out", 220, -1, view -> anim -> last -> img -> labels_scale[lid], G_CALLBACK(set_labels_scale), & view -> colorp[lid][0]), FALSE, FALSE, 10); if (lid == 3) { // Tilt box = abox (vbox, "Tilt:", 0); tilt = create_combo (); combo_text_append (tilt, "None"); combo_text_append (tilt, "Adapted"); gtk_combo_box_set_active (GTK_COMBO_BOX(tilt), view -> anim -> last -> img -> mtilt); gtk_widget_set_size_request (tilt, 220, -1); g_signal_connect (G_OBJECT (tilt), "changed", G_CALLBACK(set_labels_tilt), & view -> colorp[lid][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, tilt, FALSE, FALSE, 10); } GtkWidget * chbox; if (lid < 3) { box = abox (vbox, "Distance to atom [Å]:", 0); chbox = create_hbox (0); for (i=0; i<2; i++) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, markup_label(lpos[i], 30, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, create_hscale(-5.0, 5.0, 0.01, view -> anim -> last -> img -> labels_shift[lid][i], GTK_POS_TOP, 3, 100, G_CALLBACK(set_label_shift), G_CALLBACK(scroll_set_label_shift), & view -> colorp[lid*10+i][0]), FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, chbox, FALSE, FALSE, 0); } // Colors gboolean ac; if (view -> anim -> last -> img -> labels_color[lid] == NULL) { ac = TRUE; } else { ac = FALSE; } if (lid < 3) { box = abox (vbox, "Color(s):", 0); GtkWidget * col_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, col_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, col_box, check_button ("Use atom colors", 100, 40, ac, G_CALLBACK(use_atom_default_colors), (gpointer)& view -> colorp[lid][0]), FALSE, FALSE, 0); atom_color_box = create_vbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, col_box, atom_color_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, atom_color_box, markup_label ("Please select atom label colors:", -1, -1, 0.25, 0.5), FALSE, FALSE, 5); color_title = g_malloc (this_proj -> nspec*sizeof*color_title); for (i=0; i< this_proj -> nspec; i++) { chbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, markup_label(this_proj -> chemistry -> label[i], 120, -1, 0.5, 0.5), FALSE, FALSE, 20); if (view -> anim -> last -> img -> labels_color[lid] == NULL) { color_title[i] = color_button(view -> anim -> last -> img -> at_color[i], TRUE, 80, -1, G_CALLBACK(set_label_color), & view -> colorp[lid][i]); } else { color_title[i] = color_button(view -> anim -> last -> img -> labels_color[lid][i], TRUE, 80, -1, G_CALLBACK(set_label_color), & view -> colorp[lid][i]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, chbox, color_title[i], FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, atom_color_box, chbox, FALSE, FALSE, 0); } widget_set_sensitive (atom_color_box, ! ac); } else { add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Line(s):", -1, 40, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, check_button ("Show / hide: ", -1, 40, view -> anim -> last -> img -> mpattern+1, G_CALLBACK(enable_lines), & view -> colorp[lid][0]), FALSE, FALSE, 0); line_box = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, line_box, TRUE, TRUE, 0); box = abox (line_box, "Pattern:", 0); GtkListStore * store = gtk_list_store_new (1, GDK_TYPE_PIXBUF); GtkTreeIter iter; for (i=0; i anim -> last -> img -> mpattern); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, lstyle, TRUE, TRUE, 10); gtk_widget_set_size_request (lstyle, 100, 35); g_signal_connect (G_OBJECT (lstyle), "changed", G_CALLBACK(set_measure_style), & view -> colorp[lid][0]); box = abox (line_box, "Factor:", 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, create_hscale(1.0, 10.0, 1.0, (double)view -> anim -> last -> img -> mfactor, GTK_POS_RIGHT, 0, 100, G_CALLBACK(set_measure_factor), G_CALLBACK(scroll_set_measure_factor), & view -> colorp[lid][0]), TRUE, TRUE, 0); box = abox (line_box, "Width:", 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, create_hscale(1.0, 10.0, 1.0, view -> anim -> last -> img -> mwidth, GTK_POS_RIGHT, 0, 100, G_CALLBACK(set_measure_width), G_CALLBACK(scroll_set_measure_width), & view -> colorp[lid][0]), TRUE, TRUE, 0); } return tbox; } Atomes-GNU-1.1.14/src/opengl/win/w_library.c000066400000000000000000001130261457665371200205060ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_library.c * @short Functions to create the molecular library \n Functions to read the 'Simple chemical XML' files * @author Sébastien Le Roux */ /* * This file: 'w_library.c' * * Contains: * - The functions to create the molecular library - The functions to read the 'Simple chemical XML' files * * List of functions: int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader); int sml_preview (const char * filetoread); int get_family (gchar * str); int get_sml_files (); int select_from_library (gboolean visible, project * this_proj, atom_search * asearch); int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch); double get_z_from_periodic_table (gchar * lab); gchar * replace_markup (char * init, char * key, char * rep); gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); gchar * check_xml_string (gchar * init); gchar * open_sml_file (const char * filetoread, int fam); void sort_files (int num_f); void fill_molecule_tree (GtkListStore * store); void fill_family_tree (GtkListStore * store); void insert_preview (); void prepare_preview (int active, int id, gboolean visible); G_MODULE_EXPORT void select_library_data (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data); G_MODULE_EXPORT void set_library_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void run_select_from_library (GtkDialog * lib, gint response_id, gpointer data); GtkWidget * library_tree (GtkListStore * store, int id, gchar * name); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include "glview.h" #include "glwindow.h" #include element_data periodic_table_info[] = { {"X", "Unknown", 0, 0}, {"H", "Hydrogen", 1, 1.008}, {"He", "Helium", 2, 4.003}, {"Li", "Lithium", 3, 6.94}, {"Be", "Beryllium", 4, 9.012}, {"B", "Boron", 5, 10.81}, {"C", "Carbon", 6, 12.011}, {"N", "Nitrogen", 7, 14.007}, {"O", "Oxygen", 8, 15.999}, {"F", "Fluorine", 9, 18.998}, {"Ne", "Neon", 10, 20.18}, {"Na", "Sodium", 11, 22.99}, {"Mg", "Magnesium", 12, 24.305}, {"Al", "Aluminium", 13, 26.982}, {"Si", "Silicon", 14, 28.085}, {"P", "Phosphorus", 15, 30.974}, {"S", "Sulfur", 16, 32.06}, {"Cl", "Chlorine", 17, 35.45}, {"Ar", "Argon", 18, 39.948}, {"K", "Potassium", 19, 39.098}, {"Ca", "Calcium", 20, 40.078}, {"Sc", "Scandium", 21, 44.956}, {"Ti", "Titanium", 22, 47.867}, {"V", "Vanadium", 23, 50.942}, {"Cr", "Chromium", 24, 51.996}, {"Mn", "Manganese", 25, 54.938}, {"Fe", "Iron", 26, 55.845}, {"Co", "Cobalt", 27, 58.933}, {"Ni", "Nickel", 28, 58.693}, {"Cu", "Copper", 29, 63.546}, {"Zn", "Zinc", 30, 65.38}, {"Ga", "Gallium", 31, 69.723}, {"Ge", "Germanium", 32, 72.63}, {"As", "Arsenic", 33, 74.922}, {"Se", "Selenium", 34, 78.971}, {"Br", "Bromine", 35, 79.904}, {"Kr", "Krypton", 36, 83.798}, {"Rb", "Rubidium", 37, 85.468}, {"Sr", "Strontium", 38, 87.62}, {"Y", "Yttrium", 39, 88.906}, {"Zr", "Zirconium", 40, 91.224}, {"Nb", "Niobium", 41, 92.906}, {"Mo", "Molybdenum", 42, 95.95}, {"Tc", "Technetium", 43, 98}, {"Ru", "Ruthenium", 44, 101.07}, {"Rh", "Rhodium", 45, 102.906}, {"Pd", "Palladium", 46, 106.42}, {"Ag", "Silver", 47, 107.868}, {"Cd", "Cadmium", 48, 112.414}, {"In", "Indium", 49, 114.818}, {"Sn", "Tin", 50, 118.71}, {"Sb", "Antimony", 51, 121.76}, {"Te", "Tellurium", 52, 127.6}, {"I", "Iodine", 53, 126.904}, {"Xe", "Xenon", 54, 131.293}, {"Cs", "Caesium", 55, 132.905}, {"Ba", "Barium", 56, 137.327}, {"La", "Lanthanum", 57, 138.905}, {"Ce", "Cerium", 58, 140.116}, {"Pr", "Praseodymium", 59, 140.908}, {"Nd", "Neodymium", 60, 144.242}, {"Pm", "Promethium", 61, 145}, {"Sm", "Samarium", 62, 150.36}, {"Eu", "Europium", 63, 151.964}, {"Gd", "Gadolinium", 64, 157.25}, {"Tb", "Terbium", 65, 158.925}, {"Dy", "Dysprosium", 66, 162.5}, {"Ho", "Holmium", 67, 164.93}, {"Er", "Erbium", 68, 167.259}, {"Tm", "Thulium", 69, 168.934}, {"Yb", "Ytterbium", 70, 173.045}, {"Lu", "Lutetium", 71, 174.967}, {"Hf", "Hafnium", 72, 178.49}, {"Ta", "Tantalum", 73, 180.948}, {"W", "Tungsten", 74, 183.84}, {"Re", "Rhenium", 75, 186.207}, {"Os", "Osmium", 76, 190.23}, {"Ir", "Iridium", 77, 192.217}, {"Pt", "Platinum", 78, 195.084}, {"Au", "Gold", 79, 196.967}, {"Hg", "Mercury", 80, 200.592}, {"Tl", "Thallium", 81, 204.38}, {"Pb", "Lead", 82, 207.2}, {"Bi", "Bismuth", 83, 208.98}, {"Po", "Polonium", 84, 209}, {"At", "Astatine", 85, 210}, {"Rn", "Radon", 86, 222}, {"Fr", "Francium", 87, 223}, {"Ra", "Radium", 88, 226}, {"Ac", "Actinium", 89, 227}, {"Th", "Thorium", 90, 232.038}, {"Pa", "Protactinium", 91, 231.036}, {"U", "Uranium", 92, 238.029}, {"Np", "Neptunium", 93, 237}, {"Pu", "Plutonium", 94, 244}, {"Am", "Americium", 95, 243}, {"Cm", "Curium", 96, 247}, {"Bk", "Berkelium", 97, 247}, {"Cf", "Californium", 98, 251}, {"Es", "Einsteinium", 99, 252}, {"Fm", "Fermium", 100, 257}, {"Md", "Mendelevium", 101, 258}, {"No", "Nobelium", 102, 258}, {"Lr", "Lawrencium", 103, 262}, {"Rf", "Rutherfordium", 104, 267}, {"Db", "Dubnium", 105, 268}, {"Sg", "Seaborgium", 106, 269}, {"Bh", "Bohrium", 107, 270}, {"Hs", "Hassium", 108, 277}, {"Mt", "Meitnerium", 109, 278}, {"Ds", "Darmstadtium", 110, 281}, {"Rg", "Roentgenium", 111, 282}, {"Cn", "Copernicium", 112, 285}, {"Nh", "Nihonium", 113, 286}, {"Fl", "Flerovium", 114, 289}, {"Mc", "Moscovium", 115, 289}, {"Lv", "Livermorium", 116, 293}, {"Ts", "Tennessine", 117, 294}, {"Og", "Oganesson", 118, 294}, {"D", "Deuterium", 1, 2.014000}}; insertion_menu mol[] = { { "Atom", NULL, -1, 0 }, { NULL, "H", 1, 1 }, { NULL, "B", 5, 1 }, { NULL, "C", 6, 1 }, { NULL, "N", 7, 1 }, { NULL, "O", 8, 1 }, { NULL, "F", 9, 1 }, { NULL, "S", 16, 1 }, { NULL, "Cl", 17, 1 }, { NULL, "Other ...", -1, 1 }, { "Library", NULL, -1, 0 }, { NULL, "H2O", -1, 3 }, { NULL, "CH4", -1, 5 }, { NULL, "Toluene", -1, 15 }, { NULL, "Cp", -1, 10 }, { NULL, "C60", -1, 60}, { NULL, "Ni-Phthalocyanine", -1, 57 }, { NULL, "More ...", -1, -1 }, { NULL, NULL, -1, 0 }}; #define FAMILY 26 gchar * family_list[FAMILY]={"Misc", "Alcohols", "Aldehydes", "Alkanes", "Alkenes", "Alkynes", "Amides", "Amines", "Amino acids", "Aromatics", "Carboxylic acids", "Cyclic alkanes", "Cyclic alkenes", "Ethers", "Fatty acids", "Fullerenes", "Heterocyclics", "Macrocycles", "Ketones", "Nitriles", "Nucleobases", "Steroids", "Sugars (Linears)", "Sugars (Cyclics)", "Sulfoxides", "Thiols"}; gchar * family_dir[FAMILY]={"Misc", "Alcohols", "Aldehydes", "Alkanes", "Alkenes", "Alkynes", "Amides", "Amines", "Amino_acids", "Aromatics", "Carboxylic_acids", "Cyclic_alkanes", "Cyclic_alkenes", "Ethers", "Fatty_acids", "Fullerenes", "Heterocyclics", "Macrocycles", "Ketones", "Nitriles", "Nucleobases", "Steroids", "Linear_sugars", "Cyclic_sugars", "Sulfoxides", "Thiols"}; #ifdef GTK3 #ifndef G_OS_WIN32 extern void gtk_window_change_gdk_visual (GtkWidget * win); #endif // G_OS_WIN32 #endif // GTK3 extern gboolean create_3d_model (int p, gboolean load); extern G_MODULE_EXPORT void on_realize (GtkGLArea * area, gpointer data); extern xmlNodePtr findnode (xmlNodePtr startnode, char * nname); extern int action_atoms_from_project (project * this_proj, atom_search * asearch, gboolean visible); extern void to_insert_in_project (int stat, int orig, project * this_proj, atom_search * asearch, gboolean visible); extern void create_object_from_library (int p); extern atom_search * remove_search; GtkListStore * family_store; GtkTreeIter first_family_iter; GtkListStore * molecule_store; GtkTreeIter first_mol_iter; GtkTreeSelection * libselect[2]; int the_family; gchar * the_molecule; gchar ** sml_file_name; gchar ** mol_name; GtkWidget * lib_preview_box = NULL; GtkWidget * lib_preview_plot = NULL; project * lib_proj = NULL; gchar * other_name[5]; int o_names; int inserted_from_lib; /*! \fn double get_z_from_periodic_table (gchar * lab) \brief get Z from atom label \param lab the atomic label */ double get_z_from_periodic_table (gchar * lab) { int i; for (i=0; i<120; i++) { if (g_strcmp0 (periodic_table_info[i].lab, lab) == 0) return periodic_table_info[i].Z; } return 0.0; } /*! \fn int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader) \brief free XML data \param doc the XML doc pointer to free \param reader the XML reader to free */ int clean_xml_data (xmlDoc * doc, xmlTextReaderPtr reader) { xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return 0; } /*! \fn gchar * replace_markup (char * init, char * key, char * rep) \brief replace pattern in string \param init the string \param key the pattern to replace \param rep the new pattern */ gchar * replace_markup (char * init, char * key, char * rep) { char * buffer = NULL; char * p = NULL; int inilen = strlen(init); int oldlen = strlen(key); int newlen = 0; if (rep) newlen = strlen(rep); // Is key in init if (!(p = strstr(init, key))) return init; buffer = g_malloc0((inilen+newlen-oldlen+1)*sizeof*buffer); strncpy (buffer + strlen(buffer), init, p - init); if (rep) { sprintf (buffer + strlen(buffer), "%s", rep); //strcpy (buffer + strlen(buffer), rep); } sprintf (buffer + strlen(buffer), "%s", p + oldlen); //strcpy (buffer + strlen(buffer), p + oldlen); return g_strdup_printf ("%s", buffer); } /*! \fn gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif) \brief substitute all patterns in string \param init the initial string \param o_motif the pattern to replace \param n_motif the new pattern */ gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif) { gchar * str_a, * str_b; str_a = g_strdup_printf ("%s", replace_markup (init, o_motif, n_motif)); str_b = g_strdup_printf ("%s", init); while (g_strcmp0 (str_a, str_b)) { str_b = g_strdup_printf ("%s", str_a); str_a = g_strdup_printf ("%s", replace_markup (str_a, o_motif, n_motif)); } g_free (str_b); return str_a; } /*! \fn gchar * check_xml_string (gchar * init) \brief check for, and correct tags in XML string \param init the XML string to check / correct */ gchar * check_xml_string (gchar * init) { gchar * str = g_strdup_printf ("%s", substitute_string (init, "--i--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--I--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--b--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--e--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--c--", "")); str = g_strdup_printf ("%s", substitute_string (str, "--f--", "")); return str; } /*! \fn int sml_preview (const char * filetoread) \brief retrieve preview information from 'Simple chemical library XML' file \param filetoread the name of the file to read */ int sml_preview (const char * filetoread) { int i, j, k; xmlDoc * doc; xmlTextReaderPtr reader; xmlNodePtr racine, name_node, chem_node; xmlNodePtr n_node, at_node, sp_node, coord_node; xmlNodePtr spec_node, lab_node, lot_node, pbc_node; xmlAttrPtr xspec; if (lib_proj != NULL) close_project (lib_proj); init_project (TRUE); lib_proj = active_project; reader = xmlReaderForFile(filetoread, NULL, 0); doc = xmlParseFile(filetoread); racine = xmlDocGetRootElement(doc); name_node = findnode (racine -> children, "names"); if (name_node == NULL) return clean_xml_data (doc, reader); n_node = findnode (name_node -> children, "library-name"); if (n_node == NULL) return clean_xml_data (doc, reader); lib_proj -> name = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(n_node)); lib_proj -> name = check_xml_string (lib_proj -> name); n_node = findnode (name_node -> children, "iupac-name"); if (n_node == NULL) return clean_xml_data (doc, reader); o_names = 0; other_name[0] = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(n_node)); o_names ++; n_node = findnode (name_node -> children, "other-names"); if (n_node == NULL) return clean_xml_data (doc, reader); n_node = n_node -> children; for (name_node = n_node; name_node && o_names < 5; name_node = name_node->next) { if (name_node -> type == XML_ELEMENT_NODE) { other_name[o_names] = g_strdup_printf ("%s", (gchar *)xmlNodeGetContent(name_node)); o_names ++; } } chem_node = findnode(racine -> children, "chemistry"); if (chem_node == NULL) return clean_xml_data (doc, reader); at_node = findnode (chem_node -> children, "atoms"); if (at_node == NULL) return clean_xml_data (doc, reader); lib_proj -> natomes = (int)atof((char *)xmlNodeGetContent(at_node)); sp_node = findnode (chem_node -> children, "species"); if (sp_node == NULL) return clean_xml_data (doc, reader); spec_node = sp_node -> properties -> children; if (spec_node == NULL) return clean_xml_data (doc, reader); lib_proj -> nspec = (int)atof((char *)xmlNodeGetContent(spec_node)); if (lib_proj -> natomes < 1 || lib_proj -> nspec < 1) return clean_xml_data (doc, reader); alloc_proj_data (lib_proj, 1); lab_node = sp_node -> children; if (lab_node == NULL) return clean_xml_data (doc, reader); j = 0; for (i=0; i nspec; i++) { lab_node = findnode (lab_node, "label"); if (lab_node == NULL) return clean_xml_data (doc, reader); lib_proj -> chemistry -> label[i] = g_strdup_printf ("%s", (char *)xmlNodeGetContent(lab_node)); xspec = lab_node -> properties; if (xspec == NULL) return clean_xml_data (doc, reader); while (xspec) { lot_node = xspec -> children; if (lot_node == NULL) return clean_xml_data (doc, reader); if (g_strcmp0 ("num",(char *)xspec -> name) == 0) { lib_proj -> chemistry -> nsps[i] = (int)atof((char *)xmlNodeGetContent(lot_node)); lib_proj -> chemistry -> chem_prop[CHEM_Z][i] = get_z_from_periodic_table (lib_proj -> chemistry -> label[i]); k = (int)lib_proj -> chemistry -> chem_prop[CHEM_Z][i]; lib_proj -> chemistry -> chem_prop[CHEM_M][i] = periodic_table_info[k].M; lib_proj -> chemistry -> chem_prop[CHEM_R][i] = set_radius_ (& k, & j); } xspec = xspec -> next; } lab_node = lab_node -> next; } active_chem = lib_proj -> chemistry; initcutoffs (active_chem, lib_proj -> nspec); at_node = findnode (racine -> children, "coordinates"); if (at_node == NULL) return clean_xml_data (doc, reader); coord_node = at_node -> children; if (coord_node == NULL) return clean_xml_data (doc, reader); for (i=0; i natomes; i++) { coord_node = findnode (coord_node, "atom"); if (coord_node == NULL) return clean_xml_data (doc, reader); xspec = coord_node -> properties; if (xspec == NULL) return clean_xml_data (doc, reader); while (xspec) { lot_node = xspec -> children; if (lot_node == NULL) return clean_xml_data (doc, reader); if (g_strcmp0 ("x",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].x = atof((char *)xmlNodeGetContent(lot_node)); } else if (g_strcmp0 ("y",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].y = atof((char *)xmlNodeGetContent(lot_node)); } else if (g_strcmp0 ("z",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].z = atof((char *)xmlNodeGetContent(lot_node)); } else if (g_strcmp0 ("sp",(char *)xspec -> name) == 0) { lib_proj -> atoms[0][i].sp = (int)atof((char *)xmlNodeGetContent(lot_node)); lib_proj -> atoms[0][i].show[0] = TRUE; } xspec = xspec -> next; } coord_node = coord_node -> next; } pbc_node = findnode (racine -> children, "lattice"); if (pbc_node != NULL) { } xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return 1; } /*! \fn gchar * open_sml_file (const char * filetoread, int fam) \brief open 'Simple chemical library XML' file \param filetoread the name of the file to open \param fam the molecular family */ gchar * open_sml_file (const char * filetoread, int fam) { xmlDoc * doc; xmlTextReaderPtr reader; const xmlChar sml[8]="scl-xml"; xmlChar * cdata; xmlNodePtr racine, node; /* * build an xmlReader for that file */ reader = xmlReaderForFile(filetoread, NULL, 0); if (reader == NULL) { return NULL; } else { doc = xmlParseFile(filetoread); if (doc == NULL) return NULL; racine = xmlDocGetRootElement(doc); if (g_strcmp0 ((char *)(racine -> name), (char *)sml) != 0) { clean_xml_data (doc, reader); return NULL; } node = racine -> children; node = findnode(node, "class"); cdata = xmlNodeGetContent(node); if (g_strcmp0 ((gchar *)cdata, family_list[fam]) != 0) { clean_xml_data (doc, reader); return NULL; } node = findnode (racine -> children, "names"); if (node == NULL) { clean_xml_data (doc, reader); return NULL; } node = findnode (node -> children, "library-name"); if (node == NULL) { clean_xml_data (doc, reader); return NULL; } cdata = xmlNodeGetContent(node); xmlFreeDoc(doc); xmlFreeTextReader(reader); xmlCleanupParser(); return (gchar *)cdata; } } /*! \fn int get_family (gchar * str) \brief get molecular family id \param str the moecular family */ int get_family (gchar * str) { int i; for (i=0; i0) { str = g_strdup_printf ("%s", mol_name[i]); mol_name[i] = g_strdup_printf ("%s", mol_name[j]); mol_name[j] = g_strdup_printf ("%s", str); str = g_strdup_printf ("%s", sml_file_name[i]); sml_file_name[i] = g_strdup_printf ("%s", sml_file_name[j]); sml_file_name[j] = g_strdup_printf ("%s", str); } } } for(i=0;i d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); if (open_sml_file(str, the_family) != NULL) val ++; g_free (str); } } closedir(d); } #endif if (val > 0) { sml_file_name = g_malloc0 (val*sizeof*sml_file_name); mol_name = g_malloc0 (val*sizeof*mol_name); val = 0; #ifdef G_OS_WIN32 hFind = FindFirstFile (libwin32, & ffd); if (hFind != INVALID_HANDLE_VALUE) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fsml = open_sml_file(str, the_family); if (fsml != NULL) { sml_file_name[val] = g_strdup_printf ("%s", str); mol_name[val] = g_strdup_printf ("%s", fsml); val ++; g_free (fsml); } g_free (str); } while (FindNextFile(hFind, &ffd) != 0) { if (ffd.dwFileAttributes != FILE_ATTRIBUTE_DIRECTORY) { str = g_strdup_printf ("%s\\%s", libdir, (char *)ffd.cFileName); fsml = open_sml_file(str, the_family); if (fsml != NULL) { sml_file_name[val] = g_strdup_printf ("%s", str); mol_name[val] = g_strdup_printf ("%s", fsml); val ++; g_free (fsml); } g_free (str); } } FindClose(hFind); } #else d = opendir (libdir); if (d) { while ((dir = readdir(d)) != NULL) { if (dir -> d_type == DT_REG) { str = g_strdup_printf ("%s/%s", libdir, dir -> d_name); fsml = open_sml_file(str, the_family); if (fsml != NULL) { sml_file_name[val] = g_strdup_printf ("%s", str); mol_name[val] = g_strdup_printf ("%s", fsml); val ++; g_free (fsml); } g_free (str); } } closedir(d); } #endif sort_files (val); } return val; } /*! \fn void fill_molecule_tree (GtkListStore * store) \brief fill molecule list store \param store the list store to fill */ void fill_molecule_tree (GtkListStore * store) { GtkTreeIter mol_level; int i; for (i=0; i modelgl -> plot, 0, 0, 4, 4); gtk_grid_attach (GTK_GRID (grid), markup_label("Formula:", 100, -1, 0.0, 0.5), 5, 1, 3, 1); int i; for (i=0; i nspec; i++) { if (i > 0) { str = g_strdup_printf ("%s %s", str, lib_proj -> chemistry -> label[i]); } else { str = g_strdup_printf ("%s", lib_proj -> chemistry -> label[i]); } if (lib_proj -> chemistry -> nsps[i] > 1) { str = g_strdup_printf ("%s%d", str, lib_proj -> chemistry -> nsps[i]); } str = g_strdup_printf ("%s", str); } gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 1, 3, 1); gtk_grid_attach (GTK_GRID (grid),markup_label("Molecular mass:", 100, -1, 0.0, 0.5), 5, 2, 3, 1); g_free (str); double mass = 0.0; for (i=0; i nspec; i++) { mass += (lib_proj -> chemistry -> nsps[i]*lib_proj -> chemistry -> chem_prop[CHEM_M][i]); } str = g_strdup_printf ("%.3f g/mol", mass); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, -1, 0.0, 0.5), 8, 2, 3, 1); g_free (str); gtk_grid_attach (GTK_GRID (grid), markup_label("IUPAC name:", 100, -1, 0.0, 0.5), 0, 5, 3, 1); str = g_strdup_printf ("%s", check_xml_string(other_name[0])); gtk_grid_attach (GTK_GRID (grid), markup_label(str, 100, 30, 0.0, 0.5), 3, 5, 11, 1); if (o_names > 1) { GtkWidget * hbox = create_hbox (0); gtk_fixed_put (GTK_FIXED(lib_preview_plot), hbox, 0, 230); GtkWidget * vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label("Other name(s):", 100, 30, 0.0, 0.5), FALSE, FALSE, 0); for (i=1; i 1) { str = g_strdup_printf ("%s\n%s", str, check_xml_string(other_name[i])); } else { str = g_strdup_printf ("%s", check_xml_string(other_name[i])); } } vbox = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vbox, FALSE, FALSE, 15); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, 100, 30+20*(o_names-2), 0.0, 0.5), FALSE, FALSE, 0); g_free (str); } show_the_widgets (lib_preview_box); } /*! \fn void prepare_preview (int active, int id, gboolean visible) \brief prepare library molecule preview \param active active project id \param id molecule id number \param visible is the 'model edition' window visible */ void prepare_preview (int active, int id, gboolean visible) { if (sml_file_name != NULL) { if (sml_preview (sml_file_name[id])) { lib_preview_plot = destroy_this_widget (lib_preview_plot); lib_proj -> run = TRUE; active_project_changed (lib_proj -> id); create_3d_model (lib_proj -> id, FALSE); if (visible) { insert_preview (); } else { on_realize (NULL, lib_proj -> modelgl); } bonds_update = 0; active_glwin = lib_proj -> modelgl; active_glwin -> init = FALSE; active_image = active_glwin -> anim -> last -> img; lib_proj -> runc[0] = TRUE; on_calc_bonds_released (NULL, NULL); lib_proj -> modelgl -> anim -> last -> img -> quality = 30; lib_proj -> modelgl -> anim -> last -> img -> rep = ORTHOGRAPHIC; lib_proj -> modelgl -> anim -> last -> img -> box_axis[AXIS] = NONE; lib_proj -> modelgl -> anim -> last -> img -> box_axis[BOX] = NONE; if (visible) { gtk_widget_set_size_request (lib_proj -> modelgl -> plot, 150, 150); update (lib_proj -> modelgl); } active_project_changed (active); } } } /*! \fn G_MODULE_EXPORT void select_library_data (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) \brief select library element callback \param tree_view the GtkTreeView sending the signal \param path the path in the tree view \param column the column in the tree view \param data the associated data pointer */ G_MODULE_EXPORT void select_library_data (GtkTreeView * tree_view, GtkTreePath * path, GtkTreeViewColumn * column, gpointer data) { GtkTreeIter row; GtkTreeModel * model = gtk_tree_view_get_model(tree_view); if (gtk_tree_model_get_iter (model, & row, path)) { GValue val = {0, }; GValue vbl = {0, }; gtk_tree_model_get_value (model, & row, 0, & val); gtk_tree_model_get_value (model, & row, 1, & vbl); int i = (int)g_value_get_int (& val); if (i > -1) { the_family = i; gtk_list_store_clear (molecule_store); fill_molecule_tree (molecule_store); gtk_tree_selection_select_iter (libselect[1], & first_mol_iter); prepare_preview (activep, 0, TRUE); } else { the_molecule = g_strdup_printf ("%s", (char *)g_value_get_string (& vbl)); prepare_preview (activep, -i-1, TRUE); } } } /*! \fn G_MODULE_EXPORT void set_library_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set font markup in the molecular library tree store \param col the target GtkTreeViewColumn \param renderer the target cell renderer \param mod the target tree model \param iter the target tree iter \param data the associated data pointer */ G_MODULE_EXPORT void set_library_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { gchar * str = NULL; gtk_tree_model_get (mod, iter, 1, & str, -1); g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } /*! \fn GtkWidget * library_tree (GtkListStore * store, int id, gchar * name) \brief create library tree store widget \param store the list store model to use \param id selection id (0 = family, 1 = molecule) \param name column label */ GtkWidget * library_tree (GtkListStore * store, int id, gchar * name) { GtkWidget * scrol = create_scroll (NULL, 150, 300, GTK_SHADOW_ETCHED_IN); GtkTreeViewColumn * datacol; GtkCellRenderer * datacel; GtkWidget * dataview = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store)); datacel = gtk_cell_renderer_text_new (); datacol = gtk_tree_view_column_new_with_attributes (name, datacel, "text", 1, NULL); gtk_tree_view_column_set_cell_data_func (datacol, datacel, set_library_markup, NULL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(dataview), datacol); gtk_tree_view_column_set_alignment (datacol, 0.5); gtk_tree_view_set_activate_on_single_click (GTK_TREE_VIEW(dataview), TRUE); g_signal_connect (G_OBJECT(dataview), "row-activated", G_CALLBACK(select_library_data), NULL); g_object_unref (store); libselect[id] = gtk_tree_view_get_selection (GTK_TREE_VIEW(dataview)); gtk_tree_selection_set_mode (libselect[id], GTK_SELECTION_SINGLE); add_container_child (CONTAINER_SCR, scrol, dataview); return scrol; } gboolean lib_res; gboolean lib_visible; /*! \fn G_MODULE_EXPORT void run_select_from_library (GtkDialog * lib, gint response_id, gpointer data) \brief select from library - running the dialog \param lib the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_select_from_library (GtkDialog * lib, gint response_id, gpointer data) { gboolean done = FALSE; atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id (asearch -> proj); GtkWidget * vbox; switch (response_id) { case GTK_RESPONSE_APPLY: vbox = dialog_get_content_area ((GtkWidget *)lib); widget_set_sensitive (vbox, FALSE); if (this_proj -> modelgl) this_proj -> modelgl -> other_status = 2; create_object_from_library (lib_proj -> id); active_project_changed (activep); if (asearch -> action == INSERT) { to_insert_in_project (FROM_LIBRARY, -1, this_proj, asearch, lib_visible); if (! lib_visible) { gboolean vis; if (this_proj -> modelgl) { vis = (this_proj -> modelgl -> atom_win) ? this_proj -> modelgl -> atom_win -> visible : FALSE; } else { vis = FALSE; } inserted_from_lib += action_atoms_from_project (this_proj, asearch, vis); } if (this_proj -> modelgl) this_proj -> modelgl -> nth_copy ++; } lib_res = FROM_LIBRARY; widget_set_sensitive (vbox, TRUE); if (asearch -> action == REPLACE) done = TRUE; break; default: if (this_proj -> modelgl) { if (this_proj -> modelgl -> mode == EDITION) asearch -> todo[0] = 0; } lib_res = 0; done = TRUE; break; } if (done) destroy_this_dialog (lib); } /*! \fn int select_from_library (gboolean visible, project * this_proj, atom_search * asearch) \brief select object to insert from the library \param visible is the 'model edition' window visible \param this_proj the target project \param asearch the target atom search */ int select_from_library (gboolean visible, project * this_proj, atom_search * asearch) { int active = activep; lib_visible = visible; GtkWidget * lib = dialogmodal ("Library", GTK_WINDOW((this_proj -> modelgl) ? this_proj -> modelgl -> win : MainWindow)); #ifdef GTK3 #ifdef GTKGLAREA #ifndef G_OS_WIN32 if (! atomes_visual) gtk_window_change_gdk_visual (lib); #endif // G_OS_WIN32 #endif // GTKGLAREA #endif // GTK3 gtk_dialog_add_button (GTK_DIALOG(lib), (asearch -> action == REPLACE) ? "Replace" : "Insert", GTK_RESPONSE_APPLY); GtkWidget * vbox = dialog_get_content_area (lib); GtkWidget * hbox = create_hbox (5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); sml_file_name = mol_name = NULL; family_store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING); fill_family_tree (family_store); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, library_tree (family_store, 0, "Family"), FALSE, FALSE, 0); molecule_store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, library_tree (molecule_store, 1, "Molecule"), FALSE, FALSE, 0); lib_preview_box = create_hbox(0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lib_preview_box, FALSE, FALSE, 0); lib_preview_plot = NULL; the_family = 0; gtk_tree_selection_select_iter (libselect[0], & first_family_iter); gtk_list_store_clear (molecule_store); fill_molecule_tree (molecule_store); gtk_tree_selection_select_iter (libselect[1], & first_mol_iter); show_the_widgets (lib); prepare_preview (active, 0, TRUE); if (this_proj -> modelgl) this_proj -> modelgl -> nth_copy = 0; inserted_from_lib = 0; run_this_gtk_dialog (lib, G_CALLBACK(run_select_from_library), asearch); active_project_changed (active); if (sml_file_name != NULL) g_free (sml_file_name); if (mol_name != NULL) g_free (mol_name); if (lib_proj != NULL) close_project (lib_proj); lib_proj = NULL; lib_preview_plot = NULL; return lib_res; } /*! \fn int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch) \brief insert object from the library \param id object id to insert \param visible is the 'model edition window' visible \param this_proj the target project \param asearch the target atom search */ int insert_this_project_from_lib (int id, gboolean visible, project * this_proj, atom_search * asearch) { sml_file_name = mol_name = NULL; int family[6] = {0, 3, 9, 9, 15, 17}; int molec[6] = {0, 8, 36, 21, 11, 0}; int active = activep; the_family = family[id]; if (get_sml_files ()) { prepare_preview (active, molec[id], FALSE); if (this_proj -> modelgl) this_proj -> modelgl -> other_status = 2; create_object_from_library (lib_proj -> id); if (asearch -> action == INSERT) { to_insert_in_project (FROM_LIBRARY, -1, this_proj, asearch, visible); } } active_project_changed (active); if (sml_file_name != NULL) g_free (sml_file_name); if (mol_name != NULL) g_free (mol_name); if (lib_proj != NULL) close_project (lib_proj); lib_proj = NULL; return FROM_LIBRARY; } Atomes-GNU-1.1.14/src/opengl/win/w_measures.c000066400000000000000000000730361457665371200206740ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_measures.c * @short Functions to create the measurement(s) window * @author Sébastien Le Roux */ /* * This file: 'w_measures.c' * * Contains: * - The functions to create the measurement(s) window * * List of functions: int get_selection_type (glwin * view); G_MODULE_EXPORT gboolean measure_tree_selection_event (GtkWidget * widget, GdkEventButton * event, gpointer data); G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data); G_MODULE_EXPORT gboolean close_measure_event (GtkWidget * widg, GdkEvent * event, gpointer data); gchar * create_measure_label (glwin * view, int sid); void measure_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void measure_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void dihedral_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void measure_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store); void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store); void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store); void update_selection_tree (glwin * view, int sid, int mid); void update_label_selection (glwin * view, int sid); G_MODULE_EXPORT void measure_tree_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data); G_MODULE_EXPORT void measure_tree_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data); G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data); G_MODULE_EXPORT void measure_labels (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data); GtkWidget * create_selection_tree (glwin * view, int sid, int mid); GtkWidget * measurment_tab (glwin * view, int sid, int mid); */ #include "global.h" #include "glview.h" extern void bonds_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void angles_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern void dihedrals_loop (glwin * view, int id, int pi, GtkTreeStore * store); extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); int bond_id; int angle_id; int dihedral_id; /*! \fn int get_selection_type (glwin * view) \brief get selection type \param view the target glwin */ int get_selection_type (glwin * view) { if (view -> mode == EDITION && view -> selection_mode == NSELECTION-1) { return 1; } else if (view -> atom_win) { return 1; } else { return 0; } } /*! \fn void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store) \brief fill bond tree store row \param p the project id \param a 1st atom id \param b 2nd atom id \param store the GtkTreeStore to fill */ void fill_bond_model_row (int p, int a, int b, GtkTreeStore * store) { GtkTreeIter bond_level; gchar * str_a, * str_b, * str_c; project * this_proj = get_project_by_id(p); atom * at, * bt; gboolean pbc = this_proj -> cell.pbc; distance dist; int s = this_proj -> modelgl -> anim -> last -> img -> step; at = & this_proj -> atoms[s][a]; bt = & this_proj -> atoms[s][b]; bond_id ++; dist = distance_3d (& this_proj -> cell, (this_proj -> cell.npt) ? s : 0, at, bt); str_a = g_strdup_printf("%s%d", this_proj -> chemistry -> label[at -> sp], a+1); str_b = g_strdup_printf("%s%d", this_proj -> chemistry -> label[bt -> sp], b+1); str_c = g_strdup_printf("%.3lf", dist.length); if (pbc) { gtk_tree_store_append (store, & bond_level, NULL); gtk_tree_store_set (store, & bond_level, 0, bond_id, 1, str_a, 2, str_b, 3, str_c, 4, dist.pbc, -1); } else { gtk_tree_store_append (store, & bond_level, NULL); gtk_tree_store_set (store, & bond_level, 0, bond_id, 1, str_a, 2, str_b, 3, str_c, -1); } g_free (str_a); g_free (str_b); g_free (str_c); } /*! \fn void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store) \brief fill angle tree store row \param p the project id \param a 1st atom id \param b 2nd atom id \param c 3rd atom id \param store the GtkTreeStore to fill */ void fill_angle_model_row (int p, int a, int b, int c, GtkTreeStore * store) { GtkTreeIter angle_level; gchar * str_a, * str_b, * str_c, * str_d; project * this_proj = get_project_by_id(p); atom * at, * bt, * ct; gboolean pbc = this_proj -> cell.pbc; angle theta; int s = this_proj -> modelgl -> anim -> last -> img -> step; at = & this_proj -> atoms[s][a]; bt = & this_proj -> atoms[s][b]; ct = & this_proj -> atoms[s][c]; angle_id ++; theta = angle_3d (& this_proj -> cell, (this_proj -> cell.npt) ? s : 0, at, bt, ct); str_a = g_strdup_printf("%s%d", this_proj -> chemistry -> label[at -> sp], a+1); str_b = g_strdup_printf("%s%d", this_proj -> chemistry -> label[bt -> sp], b+1); str_c = g_strdup_printf("%s%d", this_proj -> chemistry -> label[ct -> sp], c+1); str_d = g_strdup_printf("%.2lf", theta.angle); if (pbc) { gtk_tree_store_append (store, & angle_level, NULL); gtk_tree_store_set (store, & angle_level, 0, angle_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, 5, theta.pbc, -1); } else { gtk_tree_store_append (store, & angle_level, NULL); gtk_tree_store_set (store, & angle_level, 0, angle_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, -1); } g_free (str_a); g_free (str_b); g_free (str_c); g_free (str_d); } /*! \fn void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store) \brief fill dihedral tree store row \param p the project id \param a 1st atom id \param b 2nd atom id \param c 3rd atom id \param d 4th atom id \param store the GtkTreeStore to fill */ void fill_dihedral_model_row (int p, int a, int b, int c, int d, GtkTreeStore * store) { GtkTreeIter dihedral_level; gchar * str_a, * str_b, * str_c, * str_d, * str_e; project * this_proj = get_project_by_id(p); atom * at, * bt, * ct, * dt; gboolean pbc = this_proj -> cell.pbc; angle phi; int s = this_proj -> modelgl -> anim -> last -> img -> step; at = & this_proj -> atoms[s][a]; bt = & this_proj -> atoms[s][b]; ct = & this_proj -> atoms[s][c]; dt = & this_proj -> atoms[s][d]; dihedral_id ++; phi = dihedral_3d (& this_proj -> cell, (this_proj -> cell.npt) ? s : 0, at, bt, ct, dt); str_a = g_strdup_printf("%s%d", this_proj -> chemistry -> label[at -> sp], a+1); str_b = g_strdup_printf("%s%d", this_proj -> chemistry -> label[bt -> sp], b+1); str_c = g_strdup_printf("%s%d", this_proj -> chemistry -> label[ct -> sp], c+1); str_d = g_strdup_printf("%s%d", this_proj -> chemistry -> label[dt -> sp], d+1); str_e = g_strdup_printf("%.2lf", phi.angle); if (pbc) { gtk_tree_store_append (store, & dihedral_level, NULL); gtk_tree_store_set (store, & dihedral_level, 0, dihedral_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, 5, str_e, 6, phi.pbc, -1); } else { gtk_tree_store_append (store, & dihedral_level, NULL); gtk_tree_store_set (store, & dihedral_level, 0, dihedral_id, 1, str_a, 2, str_b, 3, str_c, 4, str_d, 5, str_e, -1); } g_free (str_a); g_free (str_b); g_free (str_c); g_free (str_d); g_free (str_e); } extern ColRGBA init_color (int id, int numid); /*! \fn void measure_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the measures tree store \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void measure_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i; tint * dat = (tint *)data; gtk_tree_model_get (mod, iter, dat -> b, & i, -1); gtk_cell_renderer_set_visible (renderer, i); } /*! \fn void measure_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief set renderer color in the measures tree store \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void measure_set_color (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; tint * dat = (tint *) data; gboolean docolor = FALSE; gtk_tree_model_get (mod, iter, 0, & i, -1); project * this_proj = get_project_by_id(dat -> a); image * img = this_proj -> modelgl -> anim -> last -> img; int pi = get_selection_type (this_proj -> modelgl); if (img -> selected[pi] -> selected) { if ((dat -> c == 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION-10) || (dat -> c < 2 && img -> selected[pi] -> selected < MAX_IN_SELECTION)) { switch (dat -> c) { case 0: j = num_bonds (img -> selected[pi] -> selected); if (img -> selected[pi] -> selected_bonds[i]) docolor = TRUE; break; case 1: j = num_angles (img -> selected[pi] -> selected); if (img -> selected[pi] -> selected_angles[i]) docolor = TRUE; break; case 2: j = num_dihedrals (img -> selected[pi] -> selected); if (img -> selected[pi] -> selected_dihedrals[i]) docolor = TRUE; break; } } } set_renderer_color (docolor, renderer, init_color (i, j)); } /*! \fn void dihedral_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void dihedral_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { tint * dat = (tint *)data; dat -> c = 2; measure_set_color (col, renderer, mod, iter, data); gchar * str = NULL; gtk_tree_model_get (mod, iter, dat -> b, & str, -1); g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } /*! \fn void measure_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void measure_set_color_and_markup (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { tint * dat = (tint *)data; measure_set_color (col, renderer, mod, iter, dat); gchar * str = NULL; gtk_tree_model_get (mod, iter, dat -> b, & str, -1); g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } GtkWidget * create_selection_tree (glwin * view, int sid, int mid); /*! \fn void update_selection_tree (glwin * view, int sid, int mid) \brief update measurements tree view \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) \param mid the type of measurement (0 = bonds, 1 = angles, 2 = dihedrals) */ void update_selection_tree (glwin * view, int sid, int mid) { GtkWidget * cont = gtk_widget_get_parent (view -> measure_win -> selection_tree[mid]); view -> measure_win -> selection_tree[mid] = destroy_this_widget (view -> measure_win -> selection_tree[mid]); view -> measure_win -> selection_tree[mid] = create_selection_tree (view, sid, mid); add_container_child (CONTAINER_SCR, cont, view -> measure_win -> selection_tree[mid]); show_the_widgets (cont); } /*! \fn G_MODULE_EXPORT void measure_tree_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) \brief measure tree button event \param widget the GtkWidget sending the signal \param event_x x position \param event_y y position \param event_button event buttton \param data the associated data pointer */ G_MODULE_EXPORT void measure_tree_button_event (GtkWidget * widget, double event_x, double event_y, guint event_button, gpointer data) { if (event_button == 1) { tint * dat = (tint *)data; glwin * view = get_project_by_id(dat -> a) -> modelgl; int pi = get_selection_type (view); GtkTreeModel * measure_model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget)); GtkTreePath * path; GtkTreeViewColumn * column; int i, j; #ifdef GTK4 int e_x, e_y; gtk_tree_view_convert_widget_to_bin_window_coords (GTK_TREE_VIEW(widget), event_x, event_y, & e_x, & e_y); if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(widget), e_x, e_y, & path, & column, & i, & j)) #else if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(widget), event_x, event_y, & path, & column, & i, & j)) #endif { GtkTreeIter row; if (gtk_tree_model_get_iter (measure_model, & row, path)) { gtk_tree_model_get (measure_model, & row, 0, & j, -1); // select bonds, angles or dihedraks: switch (dat -> c) { case 0: view -> anim -> last -> img -> selected[pi] -> selected_bonds[j] = ! view -> anim -> last -> img -> selected[pi] -> selected_bonds[j]; break; case 1: view -> anim -> last -> img -> selected[pi] -> selected_angles[j] = ! view -> anim -> last -> img -> selected[pi] -> selected_angles[j]; break; case 2: view -> anim -> last -> img -> selected[pi] -> selected_dihedrals[j] = ! view -> anim -> last -> img -> selected[pi] -> selected_dihedrals[j]; break; } } } view -> create_shaders[MEASU] = TRUE; update (view); } } #ifdef GTK3 /*! \fn G_MODULE_EXPORT gboolean measure_tree_selection_event (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief measures tree view button press callback GTK4 \param widget the GtkWidget sending the signal \param event the GtkEventButton triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean measure_tree_selection_event (GtkWidget * widget, GdkEventButton * event, gpointer data) { if (event -> type == GDK_BUTTON_PRESS) { GdkEventButton * bevent = (GdkEventButton*)event; measure_tree_button_event (widget, bevent -> x, bevent -> y, bevent -> button, data); } return FALSE; } #else /*! \fn G_MODULE_EXPORT void measure_tree_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief measures tree view button press callback GTK3 \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void measure_tree_button_pressed (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { measure_tree_button_event (gtk_event_controller_get_widget ((GtkEventController*)gesture), x, y, gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture), data); } #endif /*! \fn GtkWidget * create_selection_tree (glwin * view, int sid, int mid) \brief create the measurements selection tree \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) \param mid the type of measurement (0 = bonds, 1 = angles, 2 = dihedrals) */ GtkWidget * create_selection_tree (glwin * view, int sid, int mid) { int i, j; GtkTreeViewColumn * sel_col[7]; GtkCellRenderer * sel_cell[7]; GtkTreeStore * sel_model; gchar * ctitle[3][7]={{"Id", "Atom 1", "Atom 2", "Distance [Å]", "Using PBC", "NULL", "NULL"}, {"Id", "Atom 1", "Atom 2", "Atom 3", "θ [°]", "Using PBC", "NULL"}, {"Id", "Atom 1", "Atom 2", "Atom 3", "Atom 4", "ϕ [°]", "Using PBC"}}; gchar * ctype[3][7]={{"text", "text", "text", "text", "active", "text", "text"}, {"text", "text", "text", "text", "text", "active", "text"}, {"text", "text", "text", "text", "text", "text", "active"}}; int tree_dim[3]={4, 5, 6}; GType col_type[3][7]= {{G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN}}; if (get_project_by_id(view -> proj) -> cell.pbc) { sel_model = gtk_tree_store_newv (tree_dim[mid]+1, col_type[mid]); j = 1; } else { sel_model = gtk_tree_store_newv (tree_dim[mid], col_type[mid]); j = 0; } GtkWidget * selection_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(sel_model)); for (i=0; i<4+j+mid; i++) { if ((mid == 0 && i < 4) || (mid == 1 && i < 5) || (mid == 2 && i < 6)) { sel_cell[i] = gtk_cell_renderer_text_new(); sel_col[i] = gtk_tree_view_column_new_with_attributes (ctitle[mid][i], sel_cell[i], ctype[mid][i], i, NULL); if (i == 0) gtk_tree_view_column_set_visible (sel_col[i], FALSE); } else if ((mid == 0 && i == 4) || (mid == 1 && i == 5) || (mid == 2 && i == 6)) { sel_cell[i] = gtk_cell_renderer_toggle_new (); sel_col[i] = gtk_tree_view_column_new_with_attributes (ctitle[mid][i], sel_cell[i], ctype[mid][i], i, NULL); } gtk_tree_view_column_set_alignment (sel_col[i], 0.5); gtk_tree_view_append_column(GTK_TREE_VIEW(selection_tree), sel_col[i]); if (i > 0 && i < 4+mid) { if (mid < 2) { gtk_tree_view_column_set_cell_data_func (sel_col[i], sel_cell[i], measure_set_color_and_markup, & view -> colorp[i][mid], NULL); } else { gtk_tree_view_column_set_cell_data_func (sel_col[i], sel_cell[i], dihedral_set_color_and_markup, & view -> colorp[i][0], NULL); } } else if (i > 0) { gtk_tree_view_column_set_cell_data_func (sel_col[i], sel_cell[i], measure_set_visible, & view -> colorp[i][0], NULL); } } image * img = view -> anim -> last -> img; if (img -> selected[sid] -> selected < MAX_IN_SELECTION) { if ( (mid == 0 && img -> selected[sid] -> selected > 1) || (mid == 1 && img -> selected[sid] -> selected > 2) || (mid == 2 && img -> selected[sid] -> selected > 3 && img -> selected[sid] -> selected < MAX_IN_SELECTION-10)) { if (mid == 0) { bond_id = -1; bonds_loop (view, 2, sid, GTK_TREE_STORE(sel_model)); #ifdef GTK4 add_widget_gesture_and_key_action (selection_tree, "bond-tree-pressed", G_CALLBACK(measure_tree_button_pressed), & view -> colorp[0][mid], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(selection_tree), "button_press_event", G_CALLBACK(measure_tree_selection_event), & view -> colorp[0][mid]); #endif } else if (mid == 1) { angle_id = -1; angles_loop (view, 2, sid, GTK_TREE_STORE(sel_model)); #ifdef GTK4 add_widget_gesture_and_key_action (selection_tree, "angle-tree-pressed", G_CALLBACK(measure_tree_button_pressed), & view -> colorp[0][mid], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(selection_tree), "button_press_event", G_CALLBACK(measure_tree_selection_event), & view -> colorp[0][mid]); #endif } else if (mid == 2) { dihedral_id = -1; dihedrals_loop (view, 2, sid, GTK_TREE_STORE(sel_model)); /*#ifdef GTK4 add_widget_gesture_and_key_action (selection_tree, "dihedral-tree-pressed", G_CALLBACK(measure_tree_button_pressed), & view -> colorp[0][mid], NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #else g_signal_connect (G_OBJECT(selection_tree), "button_press_event", G_CALLBACK(measure_tree_selection_event), & view -> colorp[0][mid]); #endif*/ } } } GtkTreeSelection * selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(selection_tree)); gtk_tree_selection_set_mode (selection, GTK_SELECTION_NONE); gtk_tree_view_expand_all (GTK_TREE_VIEW(selection_tree)); return selection_tree; } /*! \fn GtkWidget * measurment_tab (glwin * view, int sid, mid) \brief create measurement tab \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) \param mid the type of measurement (0 = bonds, 1 = angles, 2 = dihedrals) */ GtkWidget * measurment_tab (glwin * view, int sid, int mid) { GtkWidget * scrollsets = create_scroll (NULL, 350+50*mid, 350, GTK_SHADOW_NONE); view -> measure_win -> selection_tree[mid] = create_selection_tree (view, sid, mid); add_container_child (CONTAINER_SCR, scrollsets, view -> measure_win -> selection_tree[mid]); return scrollsets; } /*! \fn gchar * create_measure_label (glwin * view, int sid) \brief create the text information for the number of atom(s) in selection \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) */ gchar * create_measure_label (glwin * view, int sid) { gchar * str; image * img = view -> anim -> last -> img; if (img -> selected[sid] -> selected < MAX_IN_SELECTION) { str = g_strdup_printf ("\tAtom(s) in selection* :\t%d", img -> selected[sid] -> selected); } else { str = g_strdup_printf ("\tSorry too many [%d] atoms in selection*", img -> selected[sid] -> selected); } return str; } /*! \fn void update_label_selection (glwin * view, int sid) \brief update the text information for the number of atoms/measures in selection \param view the target glwin \param sid the type of selection (0 = analysis mode, 1 = edition mode) */ void update_label_selection (glwin * view, int sid) { gtk_label_set_text (GTK_LABEL(view -> measure_win -> label), create_measure_label(view, sid)); gtk_label_set_use_markup (GTK_LABEL(view -> measure_win -> label), TRUE); } extern GtkWidget * labels_tab (glwin * view, int id); /*! \fn G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data) \brief measurements style edition window close button \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void close_ml (GtkButton * but, gpointer data) { destroy_this_widget (GTK_WIDGET(data)); } /*! \fn G_MODULE_EXPORT void measure_labels (GtkButton * but, gpointer data) \brief measurements style edition window \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void measure_labels (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; gchar * str = g_strdup_printf ("%s - measures - style", get_project_by_id(view -> proj) -> name); GtkWidget * win = create_win (str, view -> measure_win -> win, TRUE, FALSE); //gtk_widget_set_size_request (win, -1, -1480); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, win, vbox); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, labels_tab (view, (is_atom_win_active(view) || (view -> mode == EDITION && view -> selection_mode == NSELECTION-1)) ? 4 : 3), FALSE, FALSE, 0); GtkWidget * hbox = create_hbox (0); GtkWidget * close_but = create_button ("Close", IMG_NONE, NULL, 100, -1, GTK_RELIEF_NORMAL, G_CALLBACK(close_ml), win); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, close_but, FALSE, TRUE, 150); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 20); add_gtk_close_event (win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (win); gtk_window_set_resizable (GTK_WINDOW(win), FALSE); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data) \brief measurements window close event callback GTK4 \param data the associated data pointer \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_measure_event (GtkWindow * widg, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean close_measure_event (GtkWidget * widg, GdkEvent * event, gpointer data) \brief measurements window close event callback GTK3 \param widg the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean close_measure_event (GtkWidget * widg, GdkEvent * event, gpointer data) #endif { glwin * view = (glwin *) data; view -> measure_win -> win = destroy_this_widget (view -> measure_win -> win); int i; for (i=0; i<3; i++) { view -> measure_win -> selection_tree[i] = NULL; } g_free (view -> measure_win); view -> measure_win = NULL; return FALSE; } /*! \fn G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data) \brief create the measurements window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_measures (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> measure_win == NULL) { view -> measure_win = g_malloc0 (sizeof*view -> measure_win); gchar * str = g_strdup_printf ("%s - measures", get_project_by_id(view -> proj) -> name); int pi = get_selection_type (view); view -> measure_win -> win = create_win (str, view -> win, FALSE, FALSE); gtk_widget_set_size_request (view -> measure_win -> win, 450, 500); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, view -> measure_win -> win, vbox); GtkWidget * notebook = gtk_notebook_new (); view -> measure_win -> label = markup_label(create_measure_label(view, pi), -1, 50, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> measure_win -> label, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, FALSE, FALSE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), measurment_tab (view, pi, 0), gtk_label_new ("Distances")); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), measurment_tab (view, pi, 1), gtk_label_new ("Angles")); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), measurment_tab (view, pi, 2), gtk_label_new ("Dihedrals")); str = g_strdup_printf (" * You can select up to %d atoms for both inter-atomic distance(s) and angle(s),\n" " and up to %d atoms for dihedral angle(s) measurement(s)", MAX_IN_SELECTION-1, MAX_IN_SELECTION-11); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label(str, -1, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); GtkWidget * hbox = create_hbox (0); GtkWidget * but = create_button ("Font and style", IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(measure_labels), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, TRUE, 150); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 10); add_gtk_close_event (view -> measure_win -> win, G_CALLBACK(close_measure_event), view); show_the_widgets (view -> measure_win -> win); } else { gtk_widget_show (view -> measure_win -> win); } } Atomes-GNU-1.1.14/src/opengl/win/w_periodic.c000066400000000000000000000531171457665371200206440ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_periodic.c * @short Functions to create the periodic table of the elements \n Functions to select element from the periodic table * @author Sébastien Le Roux */ /* * This file: 'w_periodic.c' * * Contains: * - The functions to create the periodic table of the elements - The functions to select element from the periodic table * * List of functions: int is_in_table (int i, int j); int get_atom_id_from_periodic_table (atom_search * asearch); G_MODULE_EXPORT gboolean on_element_focus (GtkWidget * widget, GdkEvent * event, gpointer data); gchar * get_electronic_structure (int r, int c); G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data); G_MODULE_EXPORT void on_element_motion_enter (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data); G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data); G_MODULE_EXPORT void get_element (GtkButton * but, gpointer data); GtkWidget * create_el_preview (int p, int a, int r, int c); GtkWidget * el_preview (int p, int a); GtkWidget * create_css_button (int p, int id, int r, int c); GtkWidget * create_css_group (int p, int i); GtkWidget * css_element (int p, int i, int j); GtkWidget * periodic_table (int p, int a); */ #include "global.h" extern insertion_menu mol[]; atom_search * periodic_search; int element; dint table_p[118]; ColRGBA rtcolo[11] = {{142, 255, 142, 1.0}, // #8EFF8E {245, 255, 83, 1.0}, // #F5FF53 {255, 184, 83, 1.0}, // #FFB853 {255, 108, 125, 1.0}, // #FF6C7D {244, 167, 255, 1.0}, // #F4A7FF {64, 133, 56}, // #408538 {177, 94, 255}, // #B15EFF {142, 227, 255, 1.0}, // #8EE3FF {80, 93, 253, 1.0}, // #505DFD {126, 255, 235, 1.0}, // #7EFFEB {95, 192, 176, 1.0}}; // #5FC0B0 gchar * ptcolo[11] = {"#8EFF8E", "#F5FF53", "#FFB853", "#FF6C7D", "#F4A7FF", "#408538", "#B15EFF", "#8EE3FF", "#505DFD", "#7EFFEB", "#5FC0B0"}; /*! \fn gchar * get_electronic_structure (int r, int c) \brief get electronic structure for this (row,column) combination \param r row \param c column */ gchar * get_electronic_structure (int r, int c) { gchar * str = NULL; gchar * prev[10]={" ", "He", "Ne", "Ar", "Kr", "Xe", "Rn", " ", "Xe", "Rn"}; if (r == -1 && c == -1) return g_strdup_printf ("Electronic structure: [None]"); if (r > 0) { str = g_strdup_printf ("Electronic structure:\t [%s]", prev[r]); } else { str = g_strdup_printf ("Electronic structure:\t "); } if (c < 2) { str = g_strdup_printf ("%s %ds%d", str, r+1, c+1); } else { if (r < 3) { str = g_strdup_printf ("%s %ds%d %dp%d", str, r+1, 2, r+1, c-11); } else if (r < 5) { if (c == 5 || c == 10) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r, c, r+1, 1); } else if (r == 4 && (c == 4 || c == 7 ||c == 8)) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r, c, r+1, 1); } else if (r == 4 && c == 9) { str = g_strdup_printf ("%s %dd%d", str, r, 10); } else if (c < 12) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r, c-1, r+1, 2); } else { str = g_strdup_printf ("%s %dd%d %ds%d %dp%d", str, r, 10, r+1, 2, r+1, c-11); } } else if (r < 7) { if (c == 9 || c == 10) { str = g_strdup_printf ("%s %df%d %dd%d %ds%d", str, r-1, 14, r, c, r+1, 1); } else if (c < 12) { str = g_strdup_printf ("%s %df%d %dd%d %ds%d", str, r-1, 14, r, c-1, r+1, 2); } else { str = g_strdup_printf ("%s %df%d %dd%d %ds%d %dp%d", str, r-1, 14, r, 10, r+1, 2, r+1, c-11); } } else if (c == 3) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r-3, c-2, r-2, 2); } else if ((c > 7 && c < 10) || (c > 10 && c < 17)) { str = g_strdup_printf ("%s %df%d %ds%d", str, r-4, c-2, r-2, 2); } else if (r == 8) { if (c > 4 && c < 8) { str = g_strdup_printf ("%s %df%d %ds%d", str, r-4, c-2, r-2, 2); } else { str = g_strdup_printf ("%s 4f%d 5d1 6s2", str, c-3); } } else { if (c == 4) { str = g_strdup_printf ("%s %dd%d %ds%d", str, r-3, c-2, r-2, 2); } else if (c == 17) { str = g_strdup_printf ("%s %df%d %ds%d %dp%d", str, r-4, c-3, r-2, 2, r-2, 1); } else { str = g_strdup_printf ("%s %df%d %dd%d %ds%d", str, r-4, c-3, r-3, 1, r-2, 2); } } } return str; } /*! \fn int is_in_table (int i, int j) \brief is this (row,column) combination a chemical element ? \param i row \param j column */ int is_in_table (int i, int j) { if (i == 7) return 0; if (i == 0 && (j > 0 && j < 17)) return 0; if ((i == 1 || i == 2) && (j > 1 && j < 12)) return 0; if ((i == 5 || i == 6) && j ==2) return 0; if (i > 7 && j< 3) return 0; if (i > 2 && i < 5) return 19 + (i-3)*18 + j; if (i == 0) { if (j==0) { return 1; } else { return 2; } } if (i > 0 && i < 3) return 2 + j+1 - 10 * (j/11) + 8 * (i/2); if (i == 5 && j < 2) return 55 + j; if (i == 6 && j < 2) return 87 + j; if (i == 5 && j > 2) return 72 + j-3; if (i == 6 && j > 2) return 104 + j-3; if (i == 8) return 57 + j-3; if (i == 9) return 89 + j-3; return -1; } /*! \fn GtkWidget * create_el_preview (int p, int a, int r, int c) \brief create element preview \param p the target project id \param a target atom search id \param r row \param c column */ GtkWidget * create_el_preview (int p, int a, int r, int c) { GtkWidget * preview = create_vbox (5); GtkWidget * hbox; GtkWidget * lab[5]; int i, id; int size[5] = {125, 30, 15, 15, 15}; gchar * backcol; gchar * name; gchar * str; if (r < 0 && c < 0) { id = 0; } else { id = is_in_table (r, c); } for (i=0; i<5; i++) { backcol = g_strdup_printf ("label#prev-%d-%d-%d {\n" " color: black;\n" " font-weight: bold;\n" " font-size: %dpx;\n" "}\n", i, p, a, size[i]); provide_gtk_css (backcol); g_free (backcol); if (i == 2 || i == 4) hbox = create_hbox (0); name = g_strdup_printf ("prev-%d-%d-%d", i, p, a); switch (i) { case 0: lab[i] = gtk_label_new (periodic_table_info[id].lab); break; case 1: lab[i] = gtk_label_new (periodic_table_info[id].name); break; case 2: str = g_strdup_printf ("Z= %d", periodic_table_info[id].Z); lab[i] = gtk_label_new (str); g_free (str); break; case 3: str = g_strdup_printf ("M= %.3f g/mol", periodic_table_info[id].M); lab[i] = gtk_label_new (str); g_free (str); break; case 4: lab[i] = markup_label(get_electronic_structure (r, c), -1, -1, 0.0, 0.5); break; } gtk_widget_set_name (lab[i], name); g_free (name); if (i < 2) { add_box_child_start (GTK_ORIENTATION_VERTICAL, preview, lab[i], FALSE, FALSE, 0); } else { if (i == 2 || i == 4) add_box_child_start (GTK_ORIENTATION_VERTICAL, preview, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab[i], FALSE, FALSE, 30); } } show_the_widgets (preview); return preview; } /*! \fn GtkWidget * el_preview (int p, int a) \brief create element preview CSS widget \param p the target project id \param a target atom search id */ GtkWidget * el_preview (int p, int a) { GtkWidget * preview = create_vbox (BSEP); gchar * backcol = g_strdup_printf ("box#preview-%d-%d {\n" "border: 3px solid black;\n" "background-color: white;\n" "border-top-left-radius: 60px 90px;\n" "border-bottom-right-radius: 60px 90px;\n" #ifdef GTK3 "box-shadow: 5px 5px 5px 5px rgba(0,0,0,0.4), 2px 2px 0px 1px rgba(0,0,0,0.4) inset;\n" #endif // GTK3 "}\n", p, a); provide_gtk_css (backcol); g_free (backcol); gchar * str = g_strdup_printf ("preview-%d-%d", p, a); gtk_widget_set_name (preview, str); g_free (str); periodic_search -> preview[1] = create_el_preview (p, a, -1, -1); gtk_widget_set_size_request (preview, 400, 275); add_box_child_start (GTK_ORIENTATION_VERTICAL, preview, periodic_search -> preview[1], FALSE, FALSE, 0); return preview; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data) \brief periodic table focus event callback GTK4 \param focus the GtkEventControllerFocus sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void on_element_focus (GtkEventControllerFocus * focus, gpointer data) #else /*! \fn G_MODULE_EXPORT gboolean on_element_focus (GtkWidget * widget, GdkEvent * event, gpointer data) \brief periodic table focus event callback GTK3 \param widget the GtkWidget sending the signal \param event the GdkEvent triggering the signal \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_element_focus (GtkWidget * widget, GdkEvent * event, gpointer data) #endif { dint * id = (dint *)data; periodic_search -> preview[1] = destroy_this_widget (periodic_search -> preview[1]); periodic_search -> preview[1] = create_el_preview (periodic_search -> proj, periodic_search -> action, id -> a, id -> b); add_box_child_start (GTK_ORIENTATION_VERTICAL, periodic_search -> preview[0], periodic_search -> preview[1], FALSE, FALSE, 0); #ifdef GTK3 return FALSE; #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void on_element_motion_enter (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) \brief periodic table motion event callback GTK4 \param motion the GtkEventControllerMotion sending the signal \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void on_element_motion_enter (GtkEventControllerMotion * motion, gdouble x, gdouble y, gpointer data) { dint * id = (dint *)data; periodic_search -> preview[1] = destroy_this_widget (periodic_search -> preview[1]); periodic_search -> preview[1] = create_el_preview (periodic_search -> proj, periodic_search -> action, id -> a, id -> b); add_box_child_start (GTK_ORIENTATION_VERTICAL, periodic_search -> preview[0], periodic_search -> preview[1], FALSE, FALSE, 0); } #endif /*! \fn G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data) \brief periodic table - running the dialog \param info the GtkDialog sending the signal \param response_id the response id \param data the associated data pointer */ G_MODULE_EXPORT void run_periodic_table (GtkDialog * info, gint response_id, gpointer data) { destroy_this_dialog (info); } /*! \fn G_MODULE_EXPORT void get_element (GtkButton * but, gpointer data) \brief get element from periodic table button \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void get_element (GtkButton * but, gpointer data) { element = GPOINTER_TO_INT(data); run_periodic_table (GTK_DIALOG(get_top_level(GTK_WIDGET(but))), 0, NULL); // g_signal_emit_by_name (G_OBJECT(get_top_level(but)), "activate", data); } /*! \fn GtkWidget * create_css_button (int p, int id, int r, int c) \brief create CSS periodic table element button \param p the target project id \param id is element table (1 / 0) \param r row \param c column */ GtkWidget * create_css_button (int p, int id, int r, int c) { int i; switch (r) { case 8: i = 9; break; case 9: i = 10; break; default: switch (c) { case 1: i = 2; break; case 2: i = 3; break; case 11: i = 4; break; case 12: i = 4; if (r == 1) i = 7; if (r == 6) i = 6; break; case 17: i = 6; if (r < 6) i = 8; break; default: if ((r == 0 && c == 0) || (r==1 && (c > 13 && c < 17)) || ((r>1 && r <5) && c == 16)) { i = 0; } else if (c == 0) { i = 1; } else if (c > 2 && c < 8) { i = 3; } else if ((c > 7 && c <11) && r < 6) { i = 3; } else if (r==6 && ((c > 7 && c < 11) || c > 11)) { i = 6; } else if (c==13 && (r == 4 || r == 5)) { i = 4; } else if ((c == 14 || c == 15) && r == 5) { i = 4; } else if ((r==1 && c==13) || (r==2 && (c==14||c==15)) || (r==3 && c==15)) { i = 5; } else { i = 7; } break; } } if (c == 2 && r == 5) i = 9; if (c == 2 && r ==6) i = 10; GtkWidget * but; if (p != -1) { but = create_button (NULL, IMG_NONE, NULL, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(get_element), GINT_TO_POINTER(id)); } else { but = create_button (NULL, IMG_NONE, NULL, -1, -1, GTK_RELIEF_NONE, NULL, NULL); } gchar * butcol = g_strdup_printf ("button#element-%d-%d {\n" //" border-radius: 10px;\n" " background-color: %s;\n" " border-color: black;\n" " border-width: 1px;\n" " color: black;\n" " font-weight: bold;\n" "}\n" "button#element-%d-%d:hover {\n" " background-color: rgba(255,255,255,0.3);\n" " color: %s;\n" " font-weight: bold;\n" "}\n", p, id, ptcolo[i], p, id, ptcolo[i]); provide_gtk_css (butcol); g_free (butcol); gchar * str = g_strdup_printf ("element-%d-%d", p, id); gtk_widget_set_name (but, str); g_free (str); GtkWidget * lab; if (id > 0) { GtkWidget * vbox = create_vbox (BSEP); lab = gtk_label_new (periodic_table_info[id].lab); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, lab, FALSE, FALSE, 0); gchar * labcol = g_strdup_printf ("label#mass-%d-%d {\n" " font-size: 10px;" "}\n", p, id); str = g_strdup_printf ("%d", periodic_table_info[id].Z); lab = gtk_label_new (str); provide_gtk_css (labcol); g_free (labcol); str = g_strdup_printf ("mass-%d-%d", p, id); gtk_widget_set_name (lab, str); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, lab, FALSE, FALSE, 0); add_container_child (CONTAINER_BUT, but, vbox); table_p[id-1].a = r; table_p[id-1].b = c; #ifdef GTK3 g_signal_connect (G_OBJECT (but), "enter-notify-event", G_CALLBACK(on_element_focus), & table_p[id-1]); #endif } else { lab = gtk_label_new (" "); gtk_label_align (lab, 0.5, 0.5); add_container_child (CONTAINER_BUT, but, lab); } #ifdef GTK4 GtkEventController * focus = gtk_event_controller_focus_new (); g_signal_connect (G_OBJECT (focus), "enter", G_CALLBACK(on_element_focus), & table_p[id-1]); gtk_widget_add_controller (but, GTK_EVENT_CONTROLLER (focus)); GtkEventController * motion = gtk_event_controller_motion_new (); g_signal_connect (motion, "enter", G_CALLBACK(on_element_motion_enter), & table_p[id-1]); gtk_widget_add_controller (but, GTK_EVENT_CONTROLLER (motion)); #endif gtk_widget_show (but); return but; } /*! \fn GtkWidget * create_css_group (int p, int i) \brief create group CSS \param p the target project id \param i the group */ GtkWidget * create_css_group (int p, int i) { gchar * backcol = g_strdup_printf ("label#group-%d-%d {\n" " border-radius: 25px;\n" " border-color: black;\n" " border-width: 1px;\n" " background-color: %s;\n" " color: black;\n" " font-weight: bold;\n" "}\n", p, i, ptcolo[i]); provide_gtk_css (backcol); g_free (backcol); GtkWidget * lab = gtk_label_new (" "); gtk_widget_set_size_request (lab, 50, 40); gtk_label_align (lab, 0.5, 0.5); gchar * str = g_strdup_printf ("group-%d-%d", p, i); gtk_widget_set_name (lab, str); g_free (str); gtk_widget_show (lab); return lab; } /*! \fn GtkWidget * css_element (int p, int i, int j) \brief create CSS for the periodic table elements \param p target project id \param i row \param j column */ GtkWidget * css_element (int p, int i, int j) { int k = is_in_table (i, j); if (k) { return create_css_button (p, k, i, j); } else if (j == 2 && (i == 5 || i == 6)) { return create_css_button (p, i-7, i, j); } else { return gtk_label_new (" "); } } /*! \fn GtkWidget * periodic_table (int p, int a) \brief create periodic table \param p target project id \param a target atom search id */ GtkWidget * periodic_table (int p, int a) { GtkWidget * ptable = gtk_grid_new (); gtk_grid_set_row_homogeneous (GTK_GRID (ptable), TRUE); gtk_grid_set_column_homogeneous (GTK_GRID (ptable), TRUE); gtk_grid_set_row_spacing (GTK_GRID (ptable), 2); gtk_grid_set_column_spacing (GTK_GRID (ptable), 2); int i, j; periodic_search -> preview[0] = el_preview (p, a); gtk_grid_attach (GTK_GRID (ptable), periodic_search -> preview[0], 3, 0, 8, 5); for (i=0; i<10; i++) { for (j=0; j<18; j++) { gtk_grid_attach (GTK_GRID (ptable), css_element(p, i, j), j, i+3, 1, 1); } } gchar * groups[11] = {" Alkali metal", " Alkaline earth metal", " Lanthanide", " Actinide", " Transition metal", " Post-transition metal", " Metalloid", " Polyatomic non-metal", " Diatomic non-metal", " Noble gas", " Unknown"}; gtk_grid_attach (GTK_GRID (ptable), gtk_label_new (" "), 18, 0, 1, 1); int colid[11] = {1, 2, 9, 10, 3, 4, 7, 5, 0, 8, 6}; for (i=0; i<11; i++) { gtk_grid_attach (GTK_GRID (ptable), create_css_group (p, colid[i]), 19, 1+i, 1, 1); gtk_grid_attach (GTK_GRID (ptable), markup_label(groups[i], 120, -1, 0.0, 0.5), 20, 1+i, 3, 1); } return ptable; } /*! \fn int get_atom_id_from_periodic_table (atom_search * asearch) \brief get atom Z from selection in the periodic table \param asearch target atom search, if any */ int get_atom_id_from_periodic_table (atom_search * asearch) { GtkWidget * win = gtk_dialog_new (); gchar * str; if (asearch != NULL) { str = g_strdup_printf ("Element selection from the periodic table"); periodic_search = asearch; #ifdef GTK3 if (get_project_by_id (asearch -> proj) -> modelgl) { gtk_window_set_attached_to (GTK_WINDOW (win), get_project_by_id (asearch -> proj) -> modelgl -> win); } else { gtk_window_set_attached_to (GTK_WINDOW (win), MainWindow); } #endif } else { str = g_strdup_printf ("Periodic table of the elements"); periodic_search = g_malloc0 (sizeof*periodic_search); periodic_search -> proj = -1; periodic_search -> action = -1; #ifdef GTK3 gtk_window_set_attached_to (GTK_WINDOW (win), MainWindow); #endif } gtk_window_set_resizable (GTK_WINDOW (win), FALSE); gtk_window_set_title (GTK_WINDOW(win), str); g_free (str); gtk_window_set_modal (GTK_WINDOW (win), TRUE); GtkWidget * vbox = dialog_get_content_area (win); element = 0; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, periodic_table (periodic_search -> proj, periodic_search -> action), FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_periodic_table), NULL); if (asearch == NULL) g_free (periodic_search); periodic_search = NULL; return element; } Atomes-GNU-1.1.14/src/opengl/win/w_record.c000066400000000000000000000132401457665371200203150ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_record.c * @short Functions to create the recording window * @author Sébastien Le Roux */ /* * This file: 'w_record.c' * * Contains: * - The functions to create the recording window * * List of functions: void prepare_edition_windows (glwin * view, int status); G_MODULE_EXPORT void rec_start (GtkButton * but, gpointer data); G_MODULE_EXPORT void rec_stop (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data); */ #include "global.h" #include "glview.h" extern void window_encode (glwin * view, gboolean video); /*! \fn void prepare_edition_windows (glwin * view, int status) \brief update the sensitivity of the edition window(s) if any are opened \param view the target glwin \param status sensitity */ void prepare_edition_windows (glwin * view, int status) { GtkWidget * widg; int i; if (view -> atom_win != NULL) { if (view -> atom_win -> notebook != NULL) { if (GTK_IS_WIDGET(view -> atom_win -> notebook)) { for (i=0; i<5; i++) { widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> atom_win -> notebook), i); widget_set_sensitive (widg, status); } } } } if (view -> cell_win != NULL) { if (view -> cell_win -> notebook != NULL) { if (GTK_IS_WIDGET(view -> cell_win -> notebook)) { widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 0); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 1); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 3); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 4); widget_set_sensitive (widg, status); widg = gtk_notebook_get_nth_page (GTK_NOTEBOOK (view -> cell_win -> notebook), 5); widget_set_sensitive (widg, status); } } } } /*! \fn G_MODULE_EXPORT void rec_start (GtkButton * but, gpointer data) \brief start recording \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void rec_start (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (! view -> record) { button_set_image (GTK_BUTTON(view -> rec -> rec), NULL, IMG_STOCK, RECORD); show_the_widgets (view -> rec -> rec); widget_set_sensitive (view -> rec -> stop, 1); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (view -> ogl_mode[1], 0); #endif //gtk_widget_set_size_request (view -> plot, view -> pixels[0], view -> pixels[1]); //gtk_window_set_resizable (GTK_WINDOW (view -> win), FALSE); prepare_edition_windows (view, 0); view -> record = TRUE; } } /*! \fn G_MODULE_EXPORT void rec_stop (GtkButton * but, gpointer data) \brief stop recording \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void rec_stop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; view -> record = FALSE; button_set_image (GTK_BUTTON(view -> rec -> rec), NULL, IMG_STOCK, YES); show_the_widgets (view -> rec -> rec); window_encode (view, TRUE); widget_set_sensitive (view -> rec -> stop, 0); #ifdef GTK3 // GTK3 Menu Action To Check widget_set_sensitive (view -> ogl_mode[1], 1); #endif gtk_window_set_resizable (GTK_WINDOW (view -> win), TRUE); prepare_edition_windows (view, 1); } /*! \fn G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data) \brief create video recorder window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_recorder (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> rec == NULL) { view -> rec = g_malloc0 (sizeof*view -> rec); gchar * str = g_strdup_printf ("%s - record", get_project_by_id(view -> proj) -> name); view -> rec -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); GtkWidget * hbox = create_hbox (0); add_container_child (CONTAINER_WIN, view -> rec -> win, hbox); // Record view -> rec -> rec = create_button ("Record", IMG_STOCK, YES, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(rec_start), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> rec -> rec, TRUE, TRUE, 0); // Stop view -> rec -> stop = create_button ("Stop", IMG_STOCK, MEDIA_STOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(rec_stop), data); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> rec -> stop, TRUE, TRUE, 0); widget_set_sensitive (view -> rec -> stop, view -> record); add_gtk_close_event (view -> rec -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> rec -> win); } else { gtk_widget_show (view -> rec -> win); } } Atomes-GNU-1.1.14/src/opengl/win/w_rings.c000066400000000000000000001034021457665371200201610ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_rings.c * @short Functions to create the ring(s) tab for the advanced environments window * @author Sébastien Le Roux */ /* * This file: 'w_rings.c' * * Contains: * - The functions to create the ring(s) tab for the advanced environments window * * List of functions: int get_rmin (project * this_proj, int rid, int step); int get_rmax (project * this_proj, int rid, int step); void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void fill_rings_model (GtkTreeStore * store, project * this_proj, int rid); void add_this_ring_to_search_tree (project * this_proj, int rid); G_MODULE_EXPORT void on_select_rings (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void update_rings_search (GtkEntry * res, gpointer data); GtkWidget * create_rings_tree (project * this_proj, int rid, gboolean fill_this); GtkWidget * create_rings_search (project * this_proj, int rid); GtkWidget * rings_tab (glwin * view, int rid); */ #include "global.h" #include "interface.h" #include "glview.h" #include "glwindow.h" /*! \fn G_MODULE_EXPORT void on_select_rings (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief on select ring toggle callback \param cell_renderer the GtkCellRendererToggle sending the signal \param string_path the path in the tree store \param data the associated data pointer */ G_MODULE_EXPORT void on_select_rings (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { tint * dat = (tint * )data; gboolean saved_label[2]; int i, j, g, c, s, v, u, a, b; opengl_project_changed(dat -> a); coord_edition * coord = opengl_project -> modelgl -> coord_win; b = (opengl_project -> steps > 1) ? 1: 0; for (i=0; i<5; i++) { if (i*10 > dat -> b) break; } g = i - 1; for (i=2+b; i<5+b; i++) { if (10*g+i == dat -> b) break; } c = i; if (gtk_cell_renderer_toggle_get_active(cell_renderer)) { v = 0; } else { v = 1; } GtkTreeIter iter; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); gtk_tree_model_get_iter (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, path); gtk_tree_store_set (coord -> rings_model[g], & iter, c, v, -1); if (b) { gtk_tree_model_get (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, 0, & s, -1); s = - s - 1; } else { s = 0; } gtk_tree_model_get (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, b, & i, -1); i = -i; gtk_tree_model_get (GTK_TREE_MODEL(coord -> rings_model[g]), & iter, b+1, & j, -1); switch (c-b) { case 2: // Viz for (u=0; u modelgl -> all_rings[g][s][i-1][j-1][u]; #ifdef GTK4 if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].show[0] != v) show_hide_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 } break; case 3: // Show poly opengl_project -> modelgl -> show_rpoly[g][s][i-1][j-1] = v; int shaders[1] = {RINGS}; re_create_md_shaders (1, shaders, opengl_project); break; case 4: // Label for (u=0; u modelgl -> all_rings[g][s][i-1][j-1][u]; opengl_project -> atoms[s][a].label[0] = opengl_project -> atoms[s][a].label[1] = v; } opengl_project -> modelgl -> create_shaders[LABEL] = TRUE; break; case 5: // Pick for (u=0; u modelgl -> all_rings[g][s][i-1][j-1][u]; saved_label[0] = opengl_project -> atoms[s][a].label[0]; saved_label[1] = opengl_project -> atoms[s][a].label[1]; #ifdef GTK4 if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(a)); #else if (opengl_project -> atoms[s][a].pick[0] != v) select_unselect_this_atom (NULL, GINT_TO_POINTER(a)); #endif // GTK4 opengl_project -> atoms[s][a].label[0] = saved_label[0]; opengl_project -> atoms[s][a].label[1] = saved_label[1]; } break; } update (opengl_project -> modelgl); } /*! \fn void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer in the ring search tree store \param col the tree view column \param renderer the column renderer \param mod the tree model \param iter the tree it \param data the associated data pointer */ void rings_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { tint * id = (tint *)data; int i, j, k; project * this_proj = get_project_by_id(id -> a); i = id -> b; j = (this_proj -> steps > 1) ? 1: 0; gtk_tree_model_get (mod, iter, j, & k, -1); if (j) { gtk_tree_model_get (mod, iter, 0, & k, -1); if (i == 0) { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else if (k > 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_tree_model_get (mod, iter, j, & k, -1); if (i == 1) { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_cell_renderer_set_visible (renderer, 1); } } } } else { if (i == 0) { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 1); } else { gtk_cell_renderer_set_visible (renderer, 0); } } else { if (k > 0) { gtk_cell_renderer_set_visible (renderer, 0); } else { gtk_cell_renderer_set_visible (renderer, 1); } } } } /*! \fn void fill_rings_model (GtkTreeStore * store, project * this_proj, int rid) \brief fill the entire ring(s) tree store \param store the GtkTreeStore to fill \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ void fill_rings_model (GtkTreeStore * store, project * this_proj, int rid) { GtkTreeIter step_level, size_level, ring_level; int h, i, j, k, l; if (this_proj -> coord -> totcoord[rid+4]) { for (h=0; h < this_proj -> steps; h++) { if (this_proj -> steps > 1) { gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, h+1, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); } for (i=0; i < this_proj -> coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; k = this_proj -> modelgl -> num_rings[rid][h][j-1]; if (this_proj -> steps > 1 && k > 0) { gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, j, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); } else if (this_proj -> steps == 1) { gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, j, 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); } for (l=0; l steps > 1) { gtk_tree_store_set (store, & ring_level, 0, -(h+1), 1, -j, 2, l+1, 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][h][j-1][l], 5, FALSE, 6, FALSE, -1); } else { gtk_tree_store_set (store, & ring_level, 0, -j, 1, l+1, 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][h][j-1][l], 4, FALSE, 5, FALSE, -1); } } } } } } /*! \fn GtkWidget * create_rings_tree (project * this_proj, int rid, gboolean fill_this) \brief create the ring(s) search tree store \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong \param fill_this 1 = yes, 0 = no */ GtkWidget * create_rings_tree (project * this_proj, int rid, gboolean fill_this) { int i, j, k; GtkTreeViewColumn * rings_col[7]; GtkCellRenderer * rings_cell[7]; gchar * ctitle[7]={"MD. step", "Ring(s) size", "Id.", "Show", "Poly.", "Label", "Pick"}; gchar * ctype[7]={"text", "text", "text", "active", "active", "active", "active"}; GType col_type[7]={G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN}; coord_edition * coord = this_proj -> modelgl -> coord_win; j = (this_proj -> steps > 1) ? 1: 0; k = (this_proj -> steps > 1) ? 0: 1; coord -> rings_model[rid] = gtk_tree_store_newv (6+j, col_type); if (fill_this) fill_rings_model (coord -> rings_model[rid], this_proj, rid); GtkWidget * rings_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL(coord -> rings_model[rid])); for (i=0; i<6+j; i++) { if (i < 2+j) { rings_cell[i] = gtk_cell_renderer_text_new (); } else { rings_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(rings_cell[i]), "toggled", G_CALLBACK(on_select_rings), & this_proj -> modelgl -> colorp[rid*10+i][0]); } gtk_cell_renderer_set_fixed_size (rings_cell[i], -1, 25); rings_col[i] = gtk_tree_view_column_new_with_attributes (ctitle[i+k], rings_cell[i], ctype[i+k], i, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(rings_tree), rings_col[i]); gtk_tree_view_column_set_alignment (rings_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (rings_col[i], rings_cell[i], rings_set_visible, & this_proj -> modelgl -> colorp[i][0], NULL); } return rings_tree; } /*! \fn void add_this_ring_to_search_tree (project * this_proj, int rid) \brief add ring in the search tree based on ring size and id \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ void add_this_ring_to_search_tree (project * this_proj, int rid) { GtkTreeIter step_level, size_level, ring_level; GtkTreeIter new_level; coord_edition * coord = this_proj -> modelgl -> coord_win; GtkTreeStore * store = (GtkTreeStore *) coord -> rings_model[rid]; GtkTreeModel * mod = GTK_TREE_MODEL(coord -> rings_model[rid]); gboolean valid; gboolean insert = TRUE; int f, h, i, j, k, l, m; int prepend = 0; if (this_proj -> steps > 1) { valid = gtk_tree_model_get_iter_first(mod, & step_level); while (valid) { gtk_tree_model_get (mod, & step_level, 0, & f, -1); if (f > coord -> rst[rid]) { prepend = 1; valid = FALSE; } else if (f == coord -> rst[rid]) { if (gtk_tree_model_iter_has_child (mod, &step_level)) { h = gtk_tree_model_iter_n_children (mod, &step_level); for (i=0; i coord -> rsz[rid]) { prepend = 3; valid = FALSE; break; } else if (j == coord -> rsz[rid]) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { k = gtk_tree_model_iter_n_children (mod, &size_level); for (l=0; l coord -> ri[rid]) { prepend = 5; valid = FALSE; break; } else if (m == coord -> ri[rid]) { insert = valid = FALSE; break; } } } if (valid) { prepend = 4; valid = FALSE; break; } } } } } if (valid) { prepend = 2; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { switch (prepend) { case 0: gtk_tree_store_append (store, & step_level, NULL); gtk_tree_store_set (store, & step_level, 0, coord -> rst[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & size_level, & step_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & size_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & step_level); gtk_tree_store_set (store, & new_level, 0, coord -> rst[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & size_level, & new_level); gtk_tree_store_set (store, & size_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & size_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, -1); break; case 2: gtk_tree_store_insert_after (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & new_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, -1); break; case 3: gtk_tree_store_insert_before (store, & new_level, & step_level, & size_level); gtk_tree_store_set (store, & new_level, 0, 0, 1, coord -> rsz[rid], 2, 0, 3, 0, 4, 0, 5, 0, 6, 0, -1); gtk_tree_store_append (store, & ring_level, & new_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, -1); break; case 4: gtk_tree_store_insert_after (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, -1); break; case 5: gtk_tree_store_insert_before (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rst[rid], 1, -coord -> rsz[rid], 2, coord -> ri[rid], 3, FALSE, 4, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 5, FALSE, 6, FALSE, -1); break; } } } else { valid = gtk_tree_model_get_iter_first(mod, & size_level); while (valid) { gtk_tree_model_get (mod, & size_level, 0, & i, -1); if (i > coord -> rsz[rid]) { prepend = 1; valid = FALSE; } else if (i == coord -> rsz[rid]) { if (gtk_tree_model_iter_has_child (mod, &size_level)) { j = gtk_tree_model_iter_n_children (mod, &size_level); for (k=0; k coord -> ri[rid]) { prepend = 2; valid = FALSE; break; } else if (l == coord -> ri[rid]) { insert = valid = FALSE; break; } } } if (valid) { prepend = 3; valid = FALSE; } } } else { valid = gtk_tree_model_iter_next(mod, & step_level); } } if (insert) { switch (prepend) { case 0: gtk_tree_store_append (store, & size_level, NULL); gtk_tree_store_set (store, & size_level, 0, coord -> rsz[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & ring_level, & size_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, -1); break; case 1: gtk_tree_store_insert_before (store, & new_level, NULL, & size_level); gtk_tree_store_set (store, & new_level, 0, coord -> rsz[rid], 1, 0, 2, 0, 3, 0, 4, 0, 5, 0, -1); gtk_tree_store_append (store, & ring_level, & new_level); gtk_tree_store_set (store, & ring_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, -1); break; case 2: gtk_tree_store_insert_before (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, -1); break; case 3: gtk_tree_store_insert_after (store, & new_level, & size_level, & ring_level); gtk_tree_store_set (store, & new_level, 0, -coord -> rsz[rid], 1, coord -> ri[rid], 2, FALSE, 3, this_proj -> modelgl -> show_rpoly[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1][coord -> ri[rid]-1], 4, FALSE, 5, FALSE, -1); break; } } } } /*! \fn int get_rmin (project * this_proj, int rid, int step) \brief get ring(s) max size for the MD step \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong \param step the MD step */ int get_rmin (project * this_proj, int rid, int step) { int i, j; for (i=0; i coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; if (this_proj -> modelgl -> num_rings[rid][step-1][j-1]) break; } return j; } /*! \fn int get_rmax (project * this_proj, int rid, int step) \brief get ring(s) min size for the MD step \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong \param step the MD step */ int get_rmax (project * this_proj, int rid, int step) { int i, j; for (i=this_proj -> coord -> totcoord[rid+4]-1; i>-1; i--) { j = this_proj -> coord -> geolist[rid+4][0][i]; if (this_proj -> modelgl -> num_rings[rid][step-1][j-1]) break; } return j; } /*! \fn G_MODULE_EXPORT void update_rings_search (GtkEntry * res, gpointer data) \brief update the ring(s) search widget \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_rings_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; gchar * str; int i, j, k, v; int rid; const gchar * m = entry_get_text (res); v = (int)atof(m); project * this_proj = get_project_by_id(dat -> a); coord_edition * coord = this_proj -> modelgl -> coord_win; for (i=0; i<5; i++) { if (i*10 > dat -> b) break; } rid = i - 1; for (i=0; i<3; i++) { if (10*rid+i == dat -> b) break; } switch (i) { case 0: if (v > 0 && v < this_proj -> steps+1) { if (v != coord -> rst[rid]) { coord -> rst[rid] = v; coord -> rsz[rid] = coord -> ri[rid] = -1; for (j=1; j<3; j++) gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][j]), ""); } } else { coord -> rst[rid] = coord -> rsz[rid] = coord -> ri[rid] = -1; } if (coord -> rst[rid] > 0) { update_entry_int(res, coord -> rst[rid]); str = g_strdup_printf ("in [%d - %d]", get_rmin(this_proj, rid, coord -> rst[rid]), get_rmax(this_proj, rid, coord -> rst[rid])); gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][1]), str); g_free (str); } else { update_entry_text (res, ""); } break; case 1: if (coord -> rst[rid] > -1) { j = get_rmin(this_proj, rid, coord -> rst[rid]); k = get_rmax(this_proj, rid, coord -> rst[rid]); if (v >= j && v <= k) { if (v != coord -> rsz[rid]) { if (this_proj -> modelgl -> num_rings[rid][coord -> rst[rid]-1][v-1]) { coord -> rsz[rid] = v; coord -> ri[rid] = -1; } else { coord -> rsz[rid] = -1; } } } } else { coord -> rsz[rid] = coord -> ri[rid] = -1; } if (coord -> rsz[rid] > 0) { update_entry_int(res, coord -> rsz[rid]); str = g_strdup_printf ("in [1 - %d]", this_proj -> modelgl -> num_rings[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1]); gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][2]), str); g_free (str); } else { update_entry_text (res, ""); gtk_label_set_text (GTK_LABEL(coord -> rilab[rid][2]), ""); } break; case 2: if (coord -> rst[rid] > -1 && coord -> rsz[rid] > -1) { if (v > 0 && v < this_proj -> modelgl -> num_rings[rid][coord -> rst[rid]-1][coord -> rsz[rid]-1]+1) { coord -> ri[rid] = v; } else { coord -> ri[rid] = -1; } } else { coord -> ri[rid] = -1; } if (coord -> ri[rid] > 0) { update_entry_int(res, coord -> ri[rid]); } else { update_entry_text (res, ""); } break; } if (coord -> rst[rid] > 0 && coord -> rsz[rid] > 0 && coord -> ri[rid] > 0) { add_this_ring_to_search_tree (this_proj, rid); } } /*! \fn GtkWidget * create_rings_search (project * this_proj, int rid) \brief create the ring(s) search widget \param this_proj the target project \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ GtkWidget * create_rings_search (project * this_proj, int rid) { GtkWidget * rings_search = create_vbox (BSEP); gchar * str = g_strdup_printf ("Too many %s rings in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for ring(s) 'manually':\n", rings_type[rid]); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[3]={"MD step:", "Ring size:", "Ring ID:"}; int i, j; GtkWidget * hbox; GtkWidget * entry; j = (this_proj -> steps) > 1 ? 0 : 1; coord_edition * coord = this_proj -> modelgl -> coord_win; coord -> rst[rid] = 1; for (i=j; i<3; i++) { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(search_item[i], 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_rings_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[rid*10+i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); if (i==0) { str = g_strdup_printf ("in [1 - %d]", this_proj -> steps); coord -> rilab[rid][i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else if (i == 1) { str = g_strdup_printf ("in [%d - %d]", get_rmin(this_proj, rid, coord -> rst[rid]), get_rmax(this_proj, rid, coord -> rst[rid])); coord -> rilab[rid][i] = markup_label(str, 50, -1, 0.0, 0.5); g_free (str); } else { coord -> rilab[rid][i] = markup_label("", 50, -1, 0.0, 0.5); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, coord -> rilab[rid][i], FALSE, FALSE, 5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, markup_label("Search result(s)", 200, -1, 0.5, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_VERTICAL, rings_search, create_rings_tree (this_proj, rid, FALSE), FALSE, FALSE, 0); return rings_search; } /*! \fn GtkWidget * rings_tab (glwin * view, int rid) \brief create the ring(s) tab for the advanced environments window \param view the target glwin \param rid the type of ring(s), 0 = All, 1 = King, 2 = Guttman, 3 = Primtive, 4 = Strong */ GtkWidget * rings_tab (glwin * view, int rid) { GtkWidget * rings = create_scroll(NULL, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (rings, TRUE); gtk_widget_set_vexpand (rings, TRUE); int h, i, j, k; project * this_proj = get_project_by_id(view -> proj); k = 0; for (h=0; h < this_proj -> steps; h++) { for (i=0; i < this_proj -> coord -> totcoord[rid+4]; i++) { j = this_proj -> coord -> geolist[rid+4][0][i]; k += this_proj -> modelgl -> num_rings[rid][h][j-1]; } } if (k < 10000) { add_container_child (CONTAINER_SCR, rings, create_rings_tree (this_proj, rid, TRUE)); } else { add_container_child (CONTAINER_SCR, rings, create_rings_search (this_proj, rid)); } return rings; } Atomes-GNU-1.1.14/src/opengl/win/w_search.c000066400000000000000000004451121457665371200203130ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_search.c * @short Functions to create the object search widgets, for: - The atom(s) / clone(s) advanced window \n - The model edition window (move, remove, replace, insert, random move) \n - The crystal builder window * @author Sébastien Le Roux */ /* * This file: 'w_search.c' * * Contains: * - The functions to create the object search widgets, for: - The atom(s) / clone(s) advanced window - The model edition window (move, remove, replace, insert, random move) - The crystal builder window * * List of functions: int get_asearch_num_objects (atom_search * asearch); int get_asearch_object (atom_search * asearch); int get_asearch_filter (atom_search * asearch); int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch); int get_todo_size (atom_search * asearch); gboolean get_asearch_is_object (atom_search * asearch); gboolean fill_for_action (atom_search * asearch, int i, int j, project * this_proj); gboolean append (atom_search * asearch, project * this_proj, int i, int j); gboolean update_this_search (atom_search * asearch); gboolean remove_from_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); gboolean atom_is_in_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); gchar * adjust_picked (gchar * picked, atomic_object * object, gboolean init); gchar * get_node_name (int node, atom_search * asearch, project * this_proj); void check_tree_for_this_search (project * this_proj, atom_search * asearch); void check_all_trees (project * this_proj); void motion_to_zero (atom_search * asearch); void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id); void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, project * this_proj); void fill_atom_model (atom_search * asearch, project * this_proj); void update_search_tree (atom_search * asearch); void clear_fields (atom_search * asearch); void re_populate_tree_search (atom_search * asearch); void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status); void adjust_this_tree_branch (atom_search * asearch, project * this_proj, int oid, int sid, GtkTreeIter iter); void adjust_this_tree_leaf (atom_search * asearch, project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter); void adjust_data_model_to_replace (project * this_proj, atom_search * asearch, int sid, int vid); void search_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data); void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg); void allocate_todo (atom_search * asearch, int tsize); void clean_todo (atom_search * asearch); void clean_picked_and_labelled (atom_search * asearch); void add_random_column (atom_search * asearch); void prep_search_box (GtkWidget * vbox, GtkWidget * lab, GtkWidget * combo); G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void remove_atom (GtkButton * but, gpointer data); G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data); G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data); G_MODULE_EXPORT void select_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data); G_MODULE_EXPORT void changed_action_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data); G_MODULE_EXPORT void set_occupancy (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_i_coord (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_msd (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_action (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_max_msd_for_all (GtkEntry * res, gpointer data); G_MODULE_EXPORT void to_edit_coords (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data); G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data); G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data); G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void set_search_digit (GtkEntry * res, gpointer data); GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int nats); GtkWidget * prepare_box_too_much (atom_search * asearch); GtkWidget * selection_tab (atom_search * asearch, int nats); GtkTreeModel * replace_combo_tree (gboolean insert, int proj); atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid); */ #include "atom_edit.h" extern int check_label_numbers (project * this_proj, int types); extern int selected_aspec; extern int select_from_library (gboolean visible, project * this_proj, atom_search * asearch); extern atom_selection * preserve_ogl_selection (glwin * view); extern void create_slab_lists (project * this_proj); extern int get_to_be_selected (glwin * view); extern void restore_ogl_selection (glwin * view); /*! \fn int get_asearch_num_objects (atom_search * asearch) \brief the number of type of object(s) in this atom search \param asearch the target atom search */ int get_asearch_num_objects (atom_search * asearch) { int filter = get_asearch_filter (asearch); switch (filter) { case 0: return get_project_by_id (asearch -> proj) -> nspec; break; case 1: return get_project_by_id (asearch -> proj) -> coord -> cmax+1; break; default: return get_project_by_id (asearch -> proj) -> coord -> totcoord[filter -1]; break; } } /*! \fn int get_asearch_object (atom_search * asearch) \brief get the number of object(s) in this atom search \param asearch the target atom search */ int get_asearch_object (atom_search * asearch) { if (asearch -> object < 0) return 0; if (asearch -> mode) return asearch -> object; if (get_project_by_id(asearch -> proj) -> natomes >= 10000) { return (asearch -> object > 1) ? 2 : asearch -> object; } else { return asearch -> object; } } /*! \fn int get_asearch_filter (atom_search * asearch) \brief get asearch filter \param asearch the target atom search */ int get_asearch_filter (atom_search * asearch) { if (asearch -> object < 0 || asearch -> filter < 0) return 0; if (asearch -> mode) { return asearch -> object + asearch -> filter; } else if (get_project_by_id(asearch -> proj) -> natomes >= 10000) { return (asearch -> object > 1) ? 1 + asearch -> filter : asearch -> filter; } else { return asearch -> object + asearch -> filter; } } /*! \fn gboolean get_asearch_is_object (atom_search * asearch) \brief get asearch object \param asearch the target atom search */ gboolean get_asearch_is_object (atom_search * asearch) { if (asearch -> passivating) { return (asearch -> object > 1) ? TRUE : FALSE; } else { return (asearch -> object) ? TRUE : FALSE; } } /*! \fn void check_tree_for_this_search (project * this_proj, atom_search * asearch) \brief check, and adjust if needed, the tree construction for this atom search \param this_proj the target project \param asearch the target atom search */ void check_tree_for_this_search (project * this_proj, atom_search * asearch) { int j, k, l, m, n, o, p; double u, v; gchar * str; GtkTreeIter iter; GtkTreeIter child; GtkTreeModel * atom_model; gboolean dothis, dothat, is_first; int obj = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); int is_clone = (asearch -> action == 1) ? 1 : 0; int status = (asearch -> action < 2) ? 2 : asearch -> status; int val = get_asearch_num_objects (asearch); int step = this_proj -> modelgl -> anim -> last -> img -> step; atom_model = GTK_TREE_MODEL(asearch -> atom_model); if (gtk_tree_model_get_iter_first (atom_model, & iter)) { dothis = TRUE; if (! filter && status == 2) { while (dothis) { gtk_tree_model_get (atom_model, & iter, IDCOL, & j, -1); j = abs(j) -1; if (j > -1) { gtk_tree_store_set (asearch -> atom_model, & iter, TOLAB, this_proj -> modelgl -> anim -> last -> img -> show_label[is_clone][j], -1); if (gtk_tree_model_iter_children (atom_model, & child, & iter)) { dothat = is_first = TRUE; u = v = 0.0; l = 0; m = 1; while (dothat) { gtk_tree_model_get (atom_model, & child, IDCOL, & k, TOPIC, & l, -1); if (k > 0) { k --; if (asearch -> action == RANMOVE) { v = this_proj -> modelgl -> atom_win -> msd[k]; if (! is_first && u != v) v = 0.0; is_first = FALSE; u = v; } m = (l && m) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & child, TOLAB, this_proj -> atoms[step][k].label[is_clone], -1); if (asearch -> action == RANMOVE) { if (this_proj -> modelgl -> atom_win -> msd[k] > 0.0) { str = g_strdup_printf ("MSDmax= %f", this_proj -> modelgl -> atom_win -> msd[k]); } else { str = g_strdup_printf ("Set MSDmax for ..."); } gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+2, str, -1); g_free (str); } is_first = FALSE; } dothat = gtk_tree_model_iter_next (atom_model, & child); } asearch -> pick[j] = m; if (asearch -> action == RANMOVE) { if (v > 0.0) { str = g_strdup_printf ("For all: MSDmax= %f", v); } else { str = g_strdup_printf ("Set MSDmax for all ..."); } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); } } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC, asearch -> pick[j], -1); } dothis = gtk_tree_model_iter_next (atom_model, & iter); } } else { while (dothis) { gtk_tree_model_get (atom_model, & iter, IDCOL, & j, -1); j = abs(j) - 1; if (j > -1 && j < val) { k = l = 0; switch (filter) { case 0: for (m=0; m natomes; m++) { n = this_proj -> atoms[step][m].sp; if (n == j && (this_proj -> atoms[step][m].pick[is_clone] == status || status == 2)) { k ++; l += (this_proj -> atoms[step][m].label[is_clone]) ? 1 : 0; } } break; case 1: for (m=0; m natomes; m++) { n = this_proj -> atoms[step][m].sp; o = this_proj -> atoms[step][m].coord[filter-1]; if (this_proj -> atoms[step][m].numv == j && (this_proj -> atoms[step][m].pick[is_clone] == status || status == 2)) { k ++; l += (this_proj -> atoms[step][m].label[is_clone]) ? 1 : 0; } } break; default: for (m=0; m natomes; m++) { n = this_proj -> atoms[step][m].sp; o = this_proj -> atoms[step][m].coord[filter-1]; if (filter == 2) { for (p=0; p coord -> ntg[1][p]; } } if (o == j && (this_proj -> atoms[step][m].pick[is_clone] == status || status == 2)) { k ++; l += (this_proj -> atoms[step][m].label[is_clone]) ? 1 : 0; } } break; } gtk_tree_store_set (asearch -> atom_model, & iter, TOLAB, (k == l && k != 0) ? 1 : 0, -1); if (gtk_tree_model_iter_children (atom_model, & child, & iter)) { dothat = TRUE; u = v = 0.0; l = n = 0; m = o = 1; while (dothat) { gtk_tree_model_get (atom_model, & child, IDCOL, & k, TOPIC, & l, -1); if (asearch -> action == RANMOVE && obj) { gtk_tree_model_get (atom_model, & child, TOPIC+1, & n, -1); } if (k > 0) { k --; if (asearch -> action == RANMOVE) { v = this_proj -> modelgl -> atom_win -> msd[k]; if (! is_first && u != v) v = 0.0; is_first = FALSE; u = v; } m = (m && l) ? 1 : 0; o = (o && n) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & child, TOLAB, this_proj -> atoms[step][k].label[is_clone], -1); if (asearch -> action == RANMOVE) { if (this_proj -> modelgl -> atom_win -> msd[k] > 0.0) { str = g_strdup_printf ("MSDmax= %f", this_proj -> modelgl -> atom_win -> msd[k]); } else { str = g_strdup_printf ("Set MSDmax for ..."); } gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+2, str, -1); g_free (str); } } dothat = gtk_tree_model_iter_next (atom_model, & child); } if (asearch -> action == RANMOVE) { asearch -> pick[j] = (m && o) ? 3 : (o) ? 2 : (m) ? 1 : 0; } else { asearch -> pick[j] = m; } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC, m, -1); if (asearch -> action == RANMOVE && v != 0) { if (v > 0.0) { if (filter > 2) { str = g_strdup_printf ("For all: MSDmax= %f", v); } else { str = g_strdup_printf ("MSDmax= %f", v); } } else { if (obj && filter > 2) { str = g_strdup_printf ("Set MSDmax for ..."); } else { str = g_strdup_printf ("Set MSDmax for all ..."); } } gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); if (obj) gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+1, o, -1); } } } dothis = gtk_tree_model_iter_next (atom_model, & iter); } } } } /*! \fn void check_all_trees (project * this_proj) \brief check all search trees \param this_proj the target project */ void check_all_trees (project * this_proj) { int i; for (i=0; i<7; i++) { if (i != 5 && this_proj -> modelgl -> search_widg[i] != NULL) { if (this_proj -> modelgl -> search_widg[i] -> atom_model && this_proj -> modelgl -> search_widg[i] -> todo_size < 10000) { check_tree_for_this_search (this_proj, this_proj -> modelgl -> search_widg[i]); } } } } /*! \fn atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid) \brief get insert object from a list by id \param first the first insert object of the list \param oid object origin id (type of origin) \param aid object id */ atomic_object * get_atomic_object_by_origin (atomic_object * first, int oid, int aid) { atomic_object * object = first; while (object) { if (! aid && object -> origin == oid) return object; if (aid && object -> id == aid-1) return object; object = object -> next; } return NULL; } /*! \fn void motion_to_zero (atom_search * asearch) \brief reset motion to 0.0 \param asearch the target atom search */ void motion_to_zero (atom_search * asearch) { project * this_proj = get_project_by_id (asearch -> proj); int i, j; for (i=0; i<2; i++) { for (j=0; j<6; j++) { this_proj -> modelgl -> atom_win -> old_param[asearch -> status][i][j] = this_proj -> modelgl -> atom_win -> new_param[asearch -> status][i][j] = 0.0; } } for (i=0; i<2; i++) { for (j=0; j<6; j++) { update_range_and_entry (this_proj, asearch -> status, i, j); } } } /*! \fn void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id) \brief adjust atom search parameters for motion cases \param this_proj the target project \param asearch the target atom search \param mv motion id (0 = standard, 1 = random) \param id object id */ void adjust_object_to_move (project * this_proj, atom_search * asearch, int mv, int id) { gboolean adjust_mv = FALSE; int filter = get_asearch_filter (asearch); if (this_proj -> modelgl -> atom_win -> to_be_moved[mv]) { atomic_object * object = this_proj -> modelgl -> atom_win -> to_be_moved[mv]; gboolean check_it = TRUE; gboolean remove_it = FALSE; gboolean add_it = FALSE; while (check_it) { if (object -> id == id) { if (! asearch -> todo[id]) remove_it = TRUE; check_it = FALSE; } else { if (object -> next) { object = object -> next; } else { check_it = FALSE; add_it = TRUE; } } } if (remove_it) { adjust_mv = TRUE; if (object -> ibonds) g_free (object -> ibonds); if (object -> baryc) g_free (object -> baryc); if (object -> at_list) g_free (object -> at_list); if (object -> coord) g_free (object -> coord); if (object -> bcid) g_free (object -> bcid); object -> atoms = object -> bonds = 0; if (object -> next && object -> prev) { object -> prev -> next = object -> next; object -> next -> prev = object -> prev; g_free (object); } else if (! object -> prev && object -> next) { object = object -> next; object -> prev = NULL; g_free (this_proj -> modelgl -> atom_win -> to_be_moved[mv]); this_proj -> modelgl -> atom_win -> to_be_moved[mv] = object; } else if (object -> prev) { object -> prev -> next = NULL; g_free (object); } else { g_free (this_proj -> modelgl -> atom_win -> to_be_moved[mv]); this_proj -> modelgl -> atom_win -> to_be_moved[mv] = NULL; } } else if (add_it) { adjust_mv = TRUE; object_motion = TRUE; if (! filter) { object -> next = create_object_from_species (this_proj, id, NULL); } else if (filter < 3) { object -> next = create_object_from_atom_coordination (this_proj, filter-1, id, NULL); } else { object -> next = create_object_from_frag_mol (this_proj, filter-1, id, NULL); } object -> next -> id = id; object_motion = FALSE; this_proj -> modelgl -> atom_win -> rebuilt[mv] = FALSE; object -> next -> prev = object; } } else { adjust_mv = TRUE; object_motion = TRUE; if (! filter) { this_proj -> modelgl -> atom_win -> to_be_moved[mv] = create_object_from_species (this_proj, id, NULL); } else if (filter < 3) { this_proj -> modelgl -> atom_win -> to_be_moved[mv] = create_object_from_atom_coordination (this_proj, filter-1, id, NULL); } else { this_proj -> modelgl -> atom_win -> to_be_moved[mv] = create_object_from_frag_mol (this_proj, filter-1, id, NULL); } this_proj -> modelgl -> atom_win -> to_be_moved[mv] -> id = id; this_proj -> modelgl -> atom_win -> rebuilt[mv] = FALSE; object_motion = FALSE; } if (adjust_mv && ! mv && this_proj -> modelgl -> atom_win) motion_to_zero (asearch); } /*! \fn void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, project * this_proj) \brief append data to the search tree store \param atom_level the iter to insert the data to \param asearch the target atom search \param is_object the atom search object (atom or group of atoms) \param h the object type id \param i the object id \param this_proj the target project */ void append_to_model (GtkTreeIter * atom_level, atom_search * asearch, gboolean is_object, int h, int i, project * this_proj) { int j, k, l; int step = this_proj -> modelgl -> anim -> last -> img -> step; gchar * str; j = this_proj -> atoms[0][i].sp; str = g_strdup_printf ("%s%d", this_proj -> chemistry -> label[j], i+1); int aobj = get_asearch_object (asearch); if (aobj == 2) str = g_strdup_printf ("%s + neighbor(s)", str); gboolean is_clone = (asearch -> pointer[0].c == 1) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, atom_level, IDCOL, i+1, 1, " ", 2, str, TOLAB, this_proj -> atoms[step][i].label[is_clone], -1); g_free (str); atomic_object * object; switch (asearch -> action) { case 0: gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, this_proj -> atoms[step][i].pick[0], -1); break; case 1: gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, this_proj -> atoms[step][i].pick[0], -1); break; case RANMOVE: if (asearch -> set_for_all > 0) { asearch -> todo[i] = asearch -> set_for_all; if (aobj) { adjust_object_to_move (this_proj, asearch, 1, i); } } k = (asearch -> todo[i] == 1 || asearch -> todo[i] == 3) ? 1 : 0; l = (asearch -> todo[i] == 2 || asearch -> todo[i] == 3) ? 1 : 0; if (this_proj -> modelgl -> atom_win -> msd[i] > 0.0) { str = g_strdup_printf ("MSDmax= %f", this_proj -> modelgl -> atom_win -> msd[i]); } else { str = g_strdup_printf ("Set MSDmax for ..."); } gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, k, TOPIC+2, str, -1); if (is_object) { gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC+1, l, -1); } g_free (str); break; default: if (asearch -> set_for_all > 0) { asearch -> todo[i] = asearch -> set_for_all; if (asearch -> action == DISPL) { if (aobj) { adjust_object_to_move (this_proj, asearch, 0, i); } } } gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC, asearch -> todo[i], -1); if (asearch -> action == REPLACE) { object = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[0], i, 0); gtk_tree_store_set (asearch -> atom_model, atom_level, TOPIC+1, (object) ? object -> name : "Select ...", TOPIC+3, h, -1); } break; } } /*! \fn gboolean fill_for_action (atom_search * asearch, int i, int j, project * this_proj) \brief test if the atom 'i' of species 'j' matches requirement(s) to be in the tree store \param asearch the target atom search \param i the atom id \param j the chemical species id (or type id) \param this_proj the target project */ gboolean fill_for_action (atom_search * asearch, int i, int j, project * this_proj) { gboolean append = FALSE; if (asearch -> spec == 0 || asearch -> spec == j+1) { if (asearch -> action > 1) { if (asearch -> status == 2) { append = TRUE; } else { append = (this_proj -> atoms[0][i].pick[0] == asearch -> status) ? TRUE : FALSE; } } else { append = TRUE; } } return append; } /*! \fn gboolean append (atom_search * asearch, project * this_proj, int i, int j) \brief test if the atom 'i' of species 'j' must be added to the tree store or not \param asearch the target atom search \param this_proj the target project \param i the atom id \param j the chemical species id */ gboolean append (atom_search * asearch, project * this_proj, int i, int j) { int k; gchar * str_a, * str_b; k = this_proj -> modelgl -> anim -> last -> img -> step; gboolean append = FALSE; if (fill_for_action (asearch, i, j, this_proj)) { if (asearch -> search_digit == -1) { if (asearch -> pointer[0].c == 1) { append = this_proj -> atoms[k][i].cloned; } else { append = TRUE; } } else { str_a = g_strdup_printf ("%d", i+1); str_b = g_strdup_printf ("%d", asearch -> search_digit); if (strlen (str_b) > strlen (str_a)) { append = FALSE; } else { k = 0; append = TRUE; while (k < strlen (str_b)) { if (str_a[k] != str_b[k]) { append = FALSE; break; } k++; } } g_free (str_a); g_free (str_b); } } return append; } /*! \fn gchar * adjust_picked (gchar * picked, atomic_object * object, gboolean init) \brief adjust the name of the replacement object to use for a type of object if any \param picked type name (species, coordination, fragment, molecule name) \param object the target insert object \param init 1 / 0 depending on the atom search filter */ gchar * adjust_picked (gchar * picked, atomic_object * object, gboolean init) { if (object) { if (init && ! picked) { return g_strdup_printf ("%s", object -> name); } else { if (g_strcmp0(picked, object -> name) == 0) { return g_strdup_printf ("%s", picked); } else { return NULL; } } } else { return NULL; } } /*! \fn gchar * get_node_name (int node, atom_search * asearch, project * this_proj) \brief get node label in the atom search tree store \param node the node id \param asearch the target atom search \param this_proj the target project */ gchar * get_node_name (int node, atom_search * asearch, project * this_proj) { int i, j, k, l; int filter = get_asearch_filter (asearch); gchar * str; if (! filter) { str = g_strdup_printf ("%s", this_proj -> chemistry -> label[node]); } else if (filter == 1) { str = (node) ? g_strdup_printf ("%d-fold", node) : g_strdup_printf ("Isolated"); } else if (filter == 2) { i = 0; for (j=0; j nspec; j++) { i += this_proj -> coord -> ntg[1][j]; if (i > node) break; } k = 0; for (l=0; l coord -> ntg[filter - 1][l]; str = g_strdup_printf ("%s", env_name(this_proj, node-k, j, 1, NULL)); } else if (filter == 3) { str = g_strdup_printf ("Fragment N°%d", node+1); } else { str = g_strdup_printf ("Molecule N°%d", node+1); } if (filter < 3 && asearch -> pointer[0].c == 1) str = g_strdup_printf ("%s*", str); return str; } /*! \fn void fill_atom_model (atom_search * asearch, project * this_proj) \brief fill atom search tree store \param asearch the target atom search \param this_proj the target project */ void fill_atom_model (atom_search * asearch, project * this_proj) { GtkTreeIter spec_level, atom_level; int g, h, i, j, k, l, m, n; gchar * str; gboolean do_append; gboolean doit; gboolean * to_insert; gboolean is_object = get_asearch_is_object (asearch); gchar ** picked_names; int obj = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); int step = this_proj -> modelgl -> anim -> last -> img -> step; if (asearch -> action != INSERT) { if (asearch -> todo_size >= 10000 && ! asearch -> passivating && ! asearch -> mode) { if (! is_the_widget_visible(asearch -> info[1])) { gtk_widget_show (asearch -> info[1]); } if (is_the_widget_visible (asearch -> id_box)) { gtk_widget_hide (asearch -> id_box); } } else { if (is_the_widget_visible(asearch -> info[1])) { gtk_widget_hide (asearch -> info[1]); } if (asearch -> mode) { if (is_the_widget_visible(asearch -> id_box)) { gtk_widget_hide (asearch -> id_box); } } else { if (asearch -> passivating || (filter > 2 && obj == 2)) { if (is_the_widget_visible (asearch -> id_box)) { gtk_widget_hide (asearch -> id_box); } } else { if (! is_the_widget_visible (asearch -> id_box)) { gtk_widget_show (asearch -> id_box); } } } int val = get_asearch_num_objects (asearch); to_insert = allocbool(val); n = 0; if (asearch -> action == REPLACE) { picked_names = g_malloc0(val*sizeof*picked_names); n = (asearch -> pointer[0].c == 3) ? 0 : 3; } switch (filter) { case 0: for (h=0; h spec || asearch -> spec == h+1) { for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; if (j == h) { to_insert[h] = append (asearch, this_proj, i, j); if (to_insert[h]) { if (asearch -> action == REPLACE && asearch -> in_selection) { picked_names[h] = adjust_picked (picked_names[h], get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[n], (asearch -> mode) ? -(h+3) : (asearch -> passivating) ? h : i, 0), doit); doit = FALSE; } if (asearch -> action != REPLACE || n || ! picked_names[h] || asearch -> mode) break; } } } } } break; case 1: for (h=0; h natomes; i++) { if (this_proj -> atoms[0][i].numv == h) { j = this_proj -> atoms[0][i].sp; to_insert[h] = append (asearch, this_proj, i, j); if (to_insert[h]) { if (asearch -> action == REPLACE && asearch -> in_selection) { picked_names[h] = adjust_picked (picked_names[h], get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[n], (asearch -> mode) ? -(h+3) : (asearch -> passivating) ? h : i, 0), doit); } if (asearch -> action != REPLACE || n || ! picked_names[h] || asearch -> mode) break; } } } } break; default: for (h=0; h natomes; i++) { if (asearch -> spec == 0 || asearch -> spec == this_proj -> atoms[0][i].sp + 1) { j = this_proj -> atoms[step][i].coord[filter - 1]; if (filter == 2) { for (k=0; k atoms[0][i].sp; k++) j += this_proj -> coord -> ntg[filter - 1][k]; } if (j == h) { to_insert[h] = append (asearch, this_proj, i, this_proj -> atoms[0][i].sp); if (to_insert[h]) { if (asearch -> action == REPLACE && asearch -> in_selection) { picked_names[h] = adjust_picked (picked_names[h], get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[n], (asearch -> mode) ? -(h+3) : (asearch -> passivating) ? h : i, 0), doit); } if (asearch -> action != REPLACE || n || ! picked_names[h] || asearch -> mode) break; } } } } } break; } if ((asearch -> action == REPLACE || asearch -> action == REMOVE) && asearch -> mode && obj && filter > 2) { if (filter == 3 && this_proj -> coord -> totcoord[2] > 1) { str = g_strdup_printf ("Fragments"); gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); if (asearch -> set_for_all > 0) asearch -> pick[0] = asearch -> set_for_all; gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -1, 1, str, TOPIC, asearch -> pick[0], -1); g_free (str); str = g_strdup_printf ("%d", asearch -> todo[0]); j = (asearch -> action == REMOVE) ? 1 : 2; gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+j, str, -1); g_free (str); if (asearch -> action == REPLACE) { if (picked_names[0]) { str = g_strdup_printf ("For all: %s", picked_names[0]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, str, -1); g_free (str); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, "Select for all ...", -1); } } } else if (filter == 4 && this_proj -> modelfc) { for (k=0; k modelfc -> mol_by_step[0]; k++) { if (this_proj -> modelfc -> mols[0][k].multiplicity > 1) { str = g_strdup_printf ("Molecule N°%d", k+1); gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); if (asearch -> set_for_all > 0) asearch -> pick[k] = asearch -> set_for_all; gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(k+1), 1, str, TOPIC, asearch -> pick[k], -1); g_free (str); str = g_strdup_printf ("%d", asearch -> todo[k]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); if (asearch -> action == REPLACE) { if (picked_names[k]) { str = g_strdup_printf ("For all: %s", picked_names[k]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, str, -1); g_free (str); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, "Select for all ...", -1); } } } } } } else { for (h=0; h atom_model, & spec_level, NULL); if (asearch -> action == REPLACE && ! asearch -> mode) { g = (asearch -> pointer[0].c == 3) ? 0 : 1; this_proj -> modelgl -> atom_win -> replace_nodes[g][h] = gtk_tree_model_get_path (GTK_TREE_MODEL(asearch -> atom_model), & spec_level); } str = get_node_name (h, asearch, this_proj); if (asearch -> set_for_all > 0) asearch -> pick[h] = asearch -> set_for_all; if (asearch -> action < RANMOVE || asearch -> action > RANMOVE) { gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(h+1), 1, str, TOPIC, asearch -> pick[h], -1); if (asearch -> passivating) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOLAB, asearch -> lab[h], -1); } if (asearch -> set_for_all > 0 && asearch -> action == DISPL && filter > 2) { asearch -> todo[h] = asearch -> set_for_all; adjust_object_to_move (this_proj, asearch, 0, h); } if (asearch -> mode) { g_free (str); str = g_strdup_printf ("%d", asearch -> todo[h]); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+5-asearch -> action, str, -1); } } else if (asearch -> action == RANMOVE) { i = (asearch -> pick[h] == 1 || asearch -> pick[h] == 3) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(h+1), 1, str, TOPIC, i, -1); if (is_object) { i = (asearch -> pick[h] == 2 || asearch -> pick[h] == 3) ? 1 : 0; gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, i, -1); if (asearch -> set_for_all > 0) { if (filter > 2) { asearch -> todo[h] = asearch -> set_for_all; adjust_object_to_move (this_proj, asearch, 1, h); } } } } g_free (str); if (asearch -> action == REPLACE) { if (picked_names[h]) { if (asearch -> mode || (obj && filter > 2)) { str = g_strdup_printf ("%s", picked_names[h]); } else { str = g_strdup_printf ("For all: %s", picked_names[h]); } gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, str, -1); g_free (str); } else { if (asearch -> mode || (obj && filter > 2)) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, "Select ...", -1); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, "Select for all ...", -1); } } } else if (asearch -> action == RANMOVE) { if (this_proj -> modelgl -> atom_win -> msd_all[h] > 0.0) { if (obj && filter > 2) { str = g_strdup_printf ("MSDmax= %f", this_proj -> modelgl -> atom_win -> msd_all[h]); } else { str = g_strdup_printf ("For all: MSDmax= %f", this_proj -> modelgl -> atom_win -> msd_all[h]); } gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); } else { if (obj && filter > 2) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, "Set MSDmax for ...", -1); } else { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, "Set MSDmax for all ...", -1); } } } doit = FALSE; if (asearch -> action > REMOVE && asearch -> action != RANMOVE) { doit = TRUE; } else { doit = (asearch -> passivating) ? FALSE : ! asearch -> mode; } if (doit && (! obj || (filter > 0 && filter < 3))) { for (i=0; i natomes; i++) { do_append = FALSE; j = this_proj -> atoms[0][i].sp; if (! filter) { if (j == h && append (asearch, this_proj, i, j)) do_append=TRUE; } else { k = filter - 1; l = this_proj -> atoms[step][i].coord[k]; if (filter == 1) { m = this_proj -> coord -> geolist[0][j][l]; if (m == h && append (asearch, this_proj, i, j)) do_append=TRUE; } else { if (filter == 2) for (m=0; m coord -> ntg[1][m]; if (l == h && append (asearch, this_proj, i, j)) do_append=TRUE; } } if (do_append) { gtk_tree_store_append (asearch -> atom_model, & atom_level, & spec_level); append_to_model (& atom_level, asearch, is_object, h, i, this_proj); } } } } } g_free (to_insert); if (asearch -> action == DISPL) check_motion_interactors (this_proj, asearch); if (asearch -> action == REPLACE) g_free (picked_names); } //if (asearch -> passivating) check_tree_for_this_search (this_proj, asearch); } } else { i = (asearch -> pointer[0].c == 7) ? 2 : 1; atomic_object * iobj = this_proj -> modelgl -> atom_win -> to_be_inserted[i]; j = 0; while (iobj) { gtk_list_store_append (asearch -> obj_model, & atom_level); str = g_strdup_printf ("x= %f, y= %f, z= %f", iobj -> baryc[0], iobj -> baryc[1], iobj -> baryc[2]); gtk_list_store_set (asearch -> obj_model, & atom_level, IDCOL, j+1, 1, g_strdup_printf ("%d", j+1), 2, iobj -> name, TOLAB, asearch -> todo[j], TOPIC, str, -1); g_free (str); if (i == 2) { str = g_strdup_printf ("%f", iobj -> occ); gtk_list_store_set (asearch -> obj_model, & atom_level, TOPIC+1, str, -1); g_free (str); } j ++; iobj = iobj -> next; } } if (asearch -> set_for_all > 0) asearch -> set_for_all = -asearch -> set_for_all; } G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data); void add_random_column (atom_search * asearch); /*! \fn void update_search_tree (atom_search * asearch) \brief update search tree \param asearch the target atom search */ void update_search_tree (atom_search * asearch) { if (asearch -> pointer[0].c == 7 && asearch -> obj_model) { g_signal_handler_disconnect (G_OBJECT(GTK_TREE_MODEL(asearch -> obj_model)), asearch -> filter); gtk_list_store_clear (asearch -> obj_model); asearch -> filter = g_signal_connect_data (G_OBJECT(GTK_TREE_MODEL(asearch -> obj_model)), "row-deleted", G_CALLBACK(move_up_down), asearch, NULL, (GConnectFlags) 0); } else { if (asearch -> atom_model) gtk_tree_store_clear (asearch -> atom_model); if (asearch -> obj_model) gtk_list_store_clear (asearch -> obj_model); } fill_atom_model (asearch, get_project_by_id(asearch -> proj)); //if (asearch -> action) gtk_tree_view_expand_all (GTK_TREE_VIEW(asearch -> atom_tree)); } /*! \fn gboolean update_this_search (atom_search * asearch) \brief test if it is required to update the search tree or not \param asearch the target atom search */ gboolean update_this_search (atom_search * asearch) { int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); if (asearch -> passivating) { return FALSE; } else if (! asearch -> passivating && asearch -> todo_size >= 10000) { return FALSE; } else if (! (object && filter > 2)) { return TRUE; } return FALSE; } /*! \fn G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data) \brief adjust atom search parameters if >= 10 000 atoms \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_atom (GtkEntry * entry, gpointer data) { atom_search * asearch = (atom_search *)data; int i; project * this_proj = get_project_by_id(asearch -> proj); gchar * str_a, * str_b; str_a = g_strdup_printf ("%s", entry_get_text (GTK_ENTRY(asearch -> entry_a))); asearch -> spec_to_add = -1; for (i = 0; i < this_proj -> nspec; i++) { str_b = g_strdup_printf ("%s", exact_name(this_proj -> chemistry -> label[i])); if (g_strcmp0 (str_a, str_b) == 0) { asearch -> spec_to_add = i; } g_free (str_b); } g_free (str_a); if (asearch -> spec_to_add != -1) { widget_set_sensitive (asearch -> entry_b, 1); set_image_from_icon_name (asearch -> img_a, APPLY); } else { widget_set_sensitive (asearch -> entry_b, 0); widget_set_sensitive (asearch -> but_a, 0); widget_set_sensitive (asearch -> but_b, 0); update_entry_text (GTK_ENTRY(asearch -> entry_b), ""); set_image_from_icon_name (asearch -> img_a, DIAL_ERROR); } } /*! \fn void clear_fields (atom_search * asearch) \brief clear all search fields if >= 10 000 atoms \param asearch the target atom search */ void clear_fields (atom_search * asearch) { int i = gtk_combo_box_get_active (GTK_COMBO_BOX(asearch -> atom_box)); if (i) { update_entry_text (GTK_ENTRY(asearch -> entry_a), exact_name(get_project_by_id(asearch -> proj) -> chemistry -> label[i-1])); } else { update_entry_text (GTK_ENTRY(asearch -> entry_a), ""); } set_atom (GTK_ENTRY(asearch -> entry_a), asearch); update_entry_text (GTK_ENTRY(asearch -> entry_b), ""); set_image_from_icon_name (asearch -> img_b, DIAL_ERROR); } /*! \fn gboolean remove_from_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) \brief remove from the tree model \param model the tree model \param path the path in the tree model \param iter the tree iter \param data the associated data pointer */ gboolean remove_from_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) { int i, j; GtkTreeIter parent; atom_search * asearch = (atom_search *)data; project * this_proj; if (gtk_tree_model_get_iter (model, iter, path)) { gtk_tree_model_get (model, iter, IDCOL, & i, -1); if (i == asearch -> int_b) { j = (i > 0) ? i -- : abs(i) - 1; asearch -> todo[j] = 0; if (asearch -> action == REPLACE) { j = (i > 0) ? i -- : i - 2; this_proj = get_project_by_id(asearch -> proj); clean_this_object (j, 0, this_proj, asearch); asearch -> in_selection --; } if (gtk_tree_model_iter_parent (model, & parent, iter)) { gtk_tree_store_remove (GTK_TREE_STORE(model), iter); if (! gtk_tree_model_iter_has_child(model, & parent)) { gtk_tree_store_remove (GTK_TREE_STORE(model), & parent); if (asearch -> action == REPLACE) { j = abs(i) - 1; gtk_tree_path_free (this_proj -> modelgl -> atom_win -> replace_nodes[0][j]); this_proj -> modelgl -> atom_win -> replace_nodes[0][j] = NULL; } } } else { gtk_tree_store_remove (GTK_TREE_STORE(model), iter); } return TRUE; } } return FALSE; } /*! \fn G_MODULE_EXPORT void remove_atom (GtkButton * but, gpointer data) \brief remove atom (or object) from the search tree if >= 10 000 atoms \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void remove_atom (GtkButton * but, gpointer data) { atom_search * asearch = (atom_search *)data; asearch -> int_b = (int )atof(entry_get_text (GTK_ENTRY(asearch -> entry_b))); gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), remove_from_model, asearch); clear_fields (asearch); } /*! \fn gboolean atom_is_in_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) \brief is this atom already in the tree model if >= 10 000 atoms \param model the target tree model \param path the path in the tree model \param iter the tree iter \param data the associated data pointer */ gboolean atom_is_in_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) { int b; atom_search * asearch = (atom_search *)data; if (gtk_tree_model_get_iter (model, iter, path)) { gtk_tree_model_get (model, iter, IDCOL, & b, -1); if (b == asearch -> int_b) { asearch -> was_selected = TRUE; asearch -> path = gtk_tree_model_get_path (model, iter); return TRUE; } } return FALSE; } /*! \fn G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data) \brief add atom (or object) to the search tree if >= 10 000 atoms \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void add_atom (GtkButton * but, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); GtkTreeIter spec_level, atom_level, new_level; int i, j, k, l, m; i = this_proj -> modelgl -> anim -> last -> img -> step; j = asearch -> spec_to_add; int filter = get_asearch_filter (asearch); gboolean is_object = get_asearch_is_object (asearch); if (! asearch -> mode) { if (append (asearch, this_proj, -1, j)) { asearch -> was_selected = FALSE; m = asearch -> int_b; asearch -> int_b = j+1; gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); if (! asearch -> was_selected) { switch (filter) { case 0: l = j; break; case 1: l = this_proj -> atoms[i][asearch -> num_to_add].numv; break; case 2: l = this_proj -> atoms[i][asearch -> num_to_add].coord[filter - 1]; for (k=0; k coord -> ntg[filter - 1][k]; break; default: l = this_proj -> atoms[i][asearch -> num_to_add].coord[filter - 1]; break; } asearch -> int_b = -(l+1); gchar * str = get_node_name (l, asearch, this_proj); asearch -> was_selected = FALSE; gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); if (! asearch -> was_selected) { gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); if (asearch -> action == REPLACE) { this_proj -> modelgl -> atom_win -> replace_nodes[0][l] = gtk_tree_model_get_path (GTK_TREE_MODEL(asearch -> atom_model), & spec_level); } gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, -(l+1), 1, str, -1); gtk_tree_store_append (asearch -> atom_model, & atom_level, & spec_level); append_to_model (& atom_level, asearch, is_object, l, asearch -> num_to_add, this_proj); } else { // Find out where to insert that node ! gtk_tree_model_get_iter (GTK_TREE_MODEL(asearch -> atom_model), & spec_level, asearch -> path); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, & spec_level)) { gboolean append = FALSE; gboolean dothat = TRUE; k = 0; while (dothat) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, IDCOL, & k, -1); if (k > asearch -> num_to_add) { dothat = FALSE; } else { dothat = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & atom_level); append = TRUE; } } gtk_tree_store_insert_before (asearch -> atom_model, & new_level, & spec_level, (append) ? NULL : & atom_level); append_to_model (& new_level, asearch, l, is_object, asearch -> num_to_add, this_proj); } } g_free (str); asearch -> int_b = m; if (asearch -> action == REPLACE) { gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+1, "Select for all ...", -1); } else if (asearch -> action == RANMOVE) { str = g_strdup_printf ("Set MSDmax for all ..."); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); } } } } clear_fields (asearch); } /*! \fn void re_populate_tree_search (atom_search * asearch) \brief re populate search tree after atom action if >= 10 000 atoms \param asearch the target atom search */ void re_populate_tree_search (atom_search * asearch) { project * this_proj = get_project_by_id (asearch -> proj); GtkTreeIter spec_level, atom_level, new_level; int i, j, k, l, m; i = this_proj -> modelgl -> anim -> last -> img -> step; int filter = get_asearch_filter (asearch); gboolean is_object = get_asearch_is_object (asearch); int s_int_b = asearch -> int_b; for (j=0; j todo_size; j++) { if (asearch -> todo[j]) { k = this_proj -> atoms[i][j].sp; if (append (asearch, this_proj, -1, k)) { asearch -> was_selected = FALSE; switch (filter) { case 0: l = k; break; case 1: l = this_proj -> atoms[i][j].numv; break; case 2: l = this_proj -> atoms[i][j].coord[filter - 1]; for (m=0; m coord -> ntg[filter - 1][m]; break; default: l = this_proj -> atoms[i][j].coord[filter - 1]; break; } asearch -> int_b = -(l+1); gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); if (! asearch -> was_selected) { gchar * str = get_node_name (l, asearch, this_proj); gtk_tree_store_append (asearch -> atom_model, & spec_level, NULL); gtk_tree_store_set (asearch -> atom_model, & spec_level, IDCOL, asearch -> int_b, 1, str, -1); if (asearch -> action == RANMOVE) { str = g_strdup_printf ("Set MSDmax for all ..."); gtk_tree_store_set (asearch -> atom_model, & spec_level, TOPIC+2, str, -1); g_free (str); } gtk_tree_store_append (asearch -> atom_model, & atom_level, & spec_level); append_to_model (& atom_level, asearch, is_object, l, j, this_proj); } else { // Find out where to insert that node ! gtk_tree_model_get_iter (GTK_TREE_MODEL(asearch -> atom_model), & spec_level, asearch -> path); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, & spec_level)) { gboolean append = FALSE; gboolean dothat = TRUE; k = 0; while (dothat) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & atom_level, IDCOL, & k, -1); if (k > j) { dothat = FALSE; } else { dothat = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & atom_level); append = TRUE; } } gtk_tree_store_insert_before (asearch -> atom_model, & new_level, & spec_level, (append) ? NULL : & atom_level); append_to_model (& new_level, asearch, is_object, l, j, this_proj); } } } } } asearch -> int_b = s_int_b; } /*! \fn G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data) \brief set search id if >= 10 000 atoms \param entry the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_id (GtkEntry * entry, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); asearch -> int_b = (int )atof(entry_get_text (GTK_ENTRY(asearch -> entry_b))); if (asearch -> int_b > 0 && asearch -> int_b < this_proj -> natomes+1) { asearch -> was_selected = FALSE; gtk_tree_model_foreach (GTK_TREE_MODEL(asearch -> atom_model), atom_is_in_model, asearch); int s = this_proj -> modelgl -> anim -> last -> img -> step; asearch -> int_b --; if (asearch -> was_selected && this_proj -> atoms[s][asearch -> int_b].sp == asearch -> spec_to_add) { widget_set_sensitive (asearch -> but_a, 0); widget_set_sensitive (asearch -> but_b, 1); set_image_from_icon_name (asearch -> img_b, APPLY); } else { if (this_proj -> atoms[s][asearch -> int_b].sp == asearch -> spec_to_add) { asearch -> num_to_add = asearch -> int_b; widget_set_sensitive (asearch -> but_a, 1); widget_set_sensitive (asearch -> but_b, 0); set_image_from_icon_name (asearch -> img_b, APPLY); } else { widget_set_sensitive (asearch -> but_a, 0); widget_set_sensitive (asearch -> but_b, 0); set_image_from_icon_name (asearch -> img_b, DIAL_ERROR); } } } } /*! \fn void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status) \brief adjust parameters for this atom search \param asearch the target atom search \param this_proj the target project \param a the atom id \param s the chemical species, or object id \param c the column id \param status the new toogle status */ void adjust_search_param (atom_search * asearch, project * this_proj, int a, int s, int c, gboolean status) { int i, j, k, l, m; opengl_project_changed (asearch -> proj); i = (a < 0) ? 0 : a; for (j=i; j natomes; j++) { k = this_proj -> atoms[0][j].pick[0]; l = this_proj -> atoms[0][j].sp; m = this_proj -> atoms[0][j].label[0]; if (s < 0 || l == s) { if (asearch -> status == 2 || asearch -> status == k) { if (a == j || a < 0) { switch (c) { case TOLAB: #ifdef GTK4 if (m != status) label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(j)); #else if (m != status) label_unlabel_this_atom (NULL, GINT_TO_POINTER(j)); #endif break; default: if (asearch -> action != RANMOVE) { asearch -> todo[j] = status; if (asearch -> action == DISPL && asearch -> object) adjust_object_to_move (this_proj, asearch, 0, j); } else { switch (asearch -> todo[j]) { case 0: asearch -> todo[j] += (c-TOLAB); break; case 1: if (c == TOPIC) { asearch -> todo[j] -= (c-TOLAB); } else { asearch -> todo[j] += (c-TOLAB); } break; case 2: if (c == TOPIC) { asearch -> todo[j] += (c-TOLAB); } else { asearch -> todo[j] -= (c-TOLAB); } break; case 3: asearch -> todo[j] -= (c-TOLAB); break; } if (asearch -> object) adjust_object_to_move (this_proj, asearch, 1, j); } break; } } if (a == j) break; } } } } G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data); /*! \fn void adjust_this_tree_branch (atom_search * asearch, project * this_proj, int oid, int sid, GtkTreeIter iter) \brief adjust tree branch (for an entire type of object) \param asearch the target atom search \param this_proj the target project \param oid the column id \param sid the chemical species or object type id \param iter the tree iter */ void adjust_this_tree_branch (atom_search * asearch, project * this_proj, int oid, int sid, GtkTreeIter iter) { int k, l, m, n, o, p, q; int status; int * to_label = NULL; int is_clone = (asearch -> action == 1) ? 1 : 0; int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); gboolean doit; GtkTreeModel * model = (asearch -> action == INSERT) ? GTK_TREE_MODEL(asearch -> obj_model) : GTK_TREE_MODEL(asearch -> atom_model); opengl_project_changed (this_proj -> id); gtk_tree_model_get (model, & iter, oid, & status, -1); atom_in_selection * selected; if (asearch -> action < 2 && oid == TOPIC) { selected_status = ! status; switch (filter) { case 0: selected_aspec = sid; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[0][! status]); #else select_unselect_atoms (NULL, & this_proj -> modelgl -> colorp[0][! status]); #endif break; default: if (filter < 3) { k = this_proj -> modelgl -> selection_mode; this_proj -> modelgl -> selection_mode = object; } p = this_proj -> modelgl -> anim -> last -> img -> step; for (l=0; l natomes; l++) { n = this_proj -> atoms[p][l].sp; o = this_proj -> atoms[p][l].coord[filter-1]; doit = FALSE; if (filter == 1) { if (this_proj -> atoms[p][l].numv == sid && append (asearch, this_proj, l, n)) doit = TRUE; } else { if (filter == 2) { for (m=0; m coord -> ntg[1][m]; } } if (o == sid && append (asearch, this_proj, l, n)) doit = TRUE; } if (doit) { o = get_to_be_selected (this_proj -> modelgl); #ifdef GTK4 if (this_proj -> atoms[p][l].pick[o] != status) { select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(l)); } select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(l)); #else if (this_proj -> atoms[p][l].pick[o] != status) { select_unselect_this_atom (NULL, GINT_TO_POINTER(l)); } select_unselect_this_atom (NULL, GINT_TO_POINTER(l)); #endif } } if (filter < 3) this_proj -> modelgl -> selection_mode = k; break; } } else { if (asearch -> action != INSERT) { if (oid == TOLAB) { if (asearch -> pointer[0].c == 8) { preserve_ogl_selection (this_proj -> modelgl); this_proj -> modelgl -> cell_win -> cut_this_slab = TRUE; save_all_selections (this_proj -> modelgl, 0); create_slab_lists (this_proj); update_all_selections (this_proj -> modelgl, 0); q = 0; if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { to_label = allocint (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected); } } p = this_proj -> modelgl -> anim -> last -> img -> step; switch (filter) { case 0: if (asearch -> pointer[0].c == 8) { if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { selected = this_proj -> modelgl -> anim -> last -> img -> selected[0] -> first; while (selected) { if (selected -> sp == sid) { to_label[q] = selected -> id; q ++; } selected = selected -> next; } } } else { #ifdef GTK4 show_hide_labels (NULL, NULL, & this_proj -> modelgl -> colorp[is_clone][sid]); #else // GTK3 Menu Action To Check gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_lab[is_clone][sid], ! status); show_hide_labels (this_proj -> modelgl -> ogl_lab[is_clone][sid], & this_proj -> modelgl -> colorp[is_clone][sid]); #endif } break; default: if (filter < 3) { k = this_proj -> modelgl -> selection_mode; this_proj -> modelgl -> selection_mode = object; } for (l=0; l natomes; l++) { n = this_proj -> atoms[p][l].sp; o = this_proj -> atoms[p][l].coord[filter-1]; doit = FALSE; if (filter == 1) { if (this_proj -> atoms[p][l].numv == sid && append (asearch, this_proj, l, n)) doit = TRUE; } else if (filter == 2 || filter == 4) { if (filter == 2) { for (m=0; m coord -> ntg[1][m]; } } if (o == sid && append (asearch, this_proj, l, n)) doit = TRUE; } else if (filter == 3) { if (asearch -> mode && object) { doit = TRUE; } else { if (o == sid && append (asearch, this_proj, l, n)) doit = TRUE; } } if (doit) { if (asearch -> pointer[0].c == 8) { if (this_proj -> modelgl -> anim -> last -> img -> selected[0] -> selected) { selected = this_proj -> modelgl -> anim -> last -> img -> selected[0] -> first; while (selected) { if (selected -> id == l) { to_label[q] = l; q ++; } selected = selected -> next; } } } else { this_proj -> atoms[p][l].label[0] = status; #ifdef GTK4 label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(l)); #else label_unlabel_this_atom (NULL, GINT_TO_POINTER(l)); #endif } } } if (filter < 3) this_proj -> modelgl -> selection_mode = k; break; } if (asearch -> pointer[0].c == 8) { restore_ogl_selection (this_proj -> modelgl); if (q) { for (l=0; l atoms[0][m].label[0] = ! status; this_proj -> atoms[0][m].label[1] = ! status; } g_free (to_label); } this_proj -> modelgl -> cell_win -> cut_this_slab = FALSE; this_proj -> modelgl -> create_shaders[SLABS] = TRUE; gtk_tree_store_set (asearch -> atom_model, & iter, TOLAB, ! status, -1); } } else { if (asearch -> passivating || (object && filter > 2)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[sid] += (oid-TOLAB); } else { asearch -> todo[sid] -= (oid-TOLAB); } if (object && ! asearch -> passivating) adjust_object_to_move (this_proj, asearch, 1, sid); } else { asearch -> todo[sid] = ! status; if (asearch -> action == DISPL) { if (object && ! asearch -> passivating) adjust_object_to_move (this_proj, asearch, 0, sid); motion_to_zero (asearch); } } } else if (! asearch -> mode) { switch (filter) { case 0: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; if (n == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; case 1: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; if (this_proj -> atoms[0][l].numv == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; case 2: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; o = this_proj -> atoms[0][l].coord[filter-1]; for (m=0; m coord -> ntg[1][m]; } if (o == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; default: for (l=0; l natomes; l++) { n = this_proj -> atoms[0][l].sp; o = this_proj -> atoms[0][l].coord[filter-1]; if (o == sid && append (asearch, this_proj, l, n)) { if (asearch -> action == RANMOVE) { if (! status) { asearch -> todo[l] += (oid-TOLAB); } else { asearch -> todo[l] -= (oid-TOLAB); } if (object) adjust_object_to_move (this_proj, asearch, 1, l); } else { asearch -> todo[l] = ! status; if (asearch -> action == DISPL && object) adjust_object_to_move (this_proj, asearch, 0, l); } } } break; } } } } else { for (k=0; k in_selection; k++) { asearch -> todo[k] = ! status; } } } switch (oid) { case TOLAB: if (asearch -> action == INSERT) asearch -> pick[sid] = ! status; asearch -> lab[sid] = ! status; break; default: if (asearch -> action == RANMOVE) { if (! status) { asearch -> pick[sid] += (oid-TOLAB); } else { asearch -> pick[sid] -= (oid-TOLAB); } } else { asearch -> pick[sid] = ! status; } break; } if (asearch -> todo_size < 10000 || asearch -> passivating || (object == 2 && filter > 2)) update_search_tree (asearch); } /*! \fn void adjust_this_tree_leaf (atom_search * asearch, project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter) \brief adjust tree leaf (for a single object) \param asearch the target atom search \param this_proj the target project \param oid the column id \param aid the atom id \param new_status the new toggle status \param iter the tree iter */ void adjust_this_tree_leaf (atom_search * asearch, project * this_proj, int oid, int aid, int new_status, GtkTreeIter iter) { int status; int k, l, p; opengl_project_changed (this_proj -> id); int sel = this_proj -> modelgl -> selection_mode; int is_clone = (asearch -> action == 1) ? 1 : 0; int object = (asearch -> object) ? 1 : 0; this_proj -> modelgl -> selection_mode = object; p = this_proj -> modelgl -> anim -> last -> img -> step; // For atom i if (oid == TOLAB) { if (asearch -> action == INSERT) { if (asearch -> todo[aid] != new_status || new_status < 0) { status = ! asearch -> todo[aid]; asearch -> todo[aid] = status; } } else if (this_proj -> atoms[p][aid].label[is_clone] != new_status || new_status < 0) { #ifdef GTK4 label_unlabel_this_atom (NULL, NULL, GINT_TO_POINTER(aid)); #else label_unlabel_this_atom (NULL, GINT_TO_POINTER(aid)); #endif status = this_proj -> atoms[p][aid].label[is_clone]; } } else { if (asearch -> action < 2) { if (this_proj -> atoms[p][aid].pick[0] != new_status || new_status < 0) { // selected_status = ! this_proj -> atoms[p][aid].pick[get_to_be_selected (this_proj -> modelgl)]; selected_status = ! this_proj -> atoms[p][aid].pick[0]; #ifdef GTK4 select_unselect_this_atom (NULL, NULL, GINT_TO_POINTER(aid)); #else select_unselect_this_atom (NULL, GINT_TO_POINTER(aid)); #endif status = this_proj -> atoms[p][aid].pick[0]; } } else { if (asearch -> todo[aid] != new_status || new_status < 0) { status = ! asearch -> todo[aid]; adjust_search_param (asearch, this_proj, aid, this_proj -> atoms[p][aid].sp, oid, status); } } } status = (new_status < 0) ? status : new_status; if (asearch -> action == RANMOVE && oid != TOLAB) { k = (asearch -> todo[aid] == 1 || asearch -> todo[aid] == 3) ? 1 : 0; l = (asearch -> todo[aid] == 2 || asearch -> todo[aid] == 3) ? 1 : 0; // Check 'for all' gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC, k, -1); if (object) gtk_tree_store_set (asearch -> atom_model, & iter, TOPIC+1, l, -1); } else if (asearch -> action == INSERT) { gtk_list_store_set (asearch -> obj_model, & iter, oid, status, -1); } else { if (asearch -> action == DISPL && oid != TOLAB) motion_to_zero (asearch); gtk_tree_store_set (asearch -> atom_model, & iter, oid, status, -1); } this_proj -> modelgl -> selection_mode = sel; check_all_trees (this_proj); } /*! \fn G_MODULE_EXPORT void select_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) \brief toggle select / unselect object in the atom search tree model \param cell_renderer the cell renderer toggle button \param string_path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void select_atom (GtkCellRendererToggle * cell_renderer, gchar * string_path, gpointer data) { int i, j, k; GtkTreeIter iter; tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); atom_search * asearch = this_proj -> modelgl -> search_widg[dat -> c]; GtkTreePath * path = gtk_tree_path_new_from_string (string_path); GtkTreeModel * model = (asearch -> action == INSERT) ? GTK_TREE_MODEL(asearch -> obj_model) : GTK_TREE_MODEL(asearch -> atom_model); gtk_tree_model_get_iter (model, & iter, path); gtk_tree_model_get (model, & iter, IDCOL, & i, -1); check_label = FALSE; if (this_proj -> modelgl -> atom_win) { this_proj -> modelgl -> atom_win -> rebuilt[(asearch -> action == RANMOVE) ? 1 : 0] = FALSE; } if (i > 0) { i --; // For atom i adjust_this_tree_leaf (asearch, this_proj, dat -> b, i, -1, iter); } else { // For spec i if (asearch -> todo_size >= 10000 && ! asearch -> passivating) { GtkTreeIter child; gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & iter, dat -> b, & j, -1); gtk_tree_store_set (asearch -> atom_model, & iter, dat -> b, ! j, -1); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & child, & iter)) { gboolean dothis = TRUE; while (dothis) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & child, IDCOL, & k, -1); k --; adjust_this_tree_leaf (asearch, this_proj, dat -> b, k, ! j, child); dothis = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & child); } } } else { adjust_this_tree_branch (asearch, this_proj, dat -> b, abs(i) - 1, iter); } } if (asearch -> action == DISPL) check_motion_interactors (this_proj, asearch); check_label = TRUE; this_proj -> modelgl -> labelled = check_label_numbers (this_proj, 2); update (this_proj -> modelgl); } /*! \fn int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch) \brief get the id of the object selected (in contextual menu, or in combo box) \param visible is the 'model edition' window visible (1/0) \param p the target project id \param str the string that describing the selection \param asearch the target atom search */ int get_selected_object_id (gboolean visible, int p, gchar * str, atom_search * asearch) { int i, j; gchar * word, * name; for (i = 1; mol[i].type || mol[i].object; i++) { if (mol[i].object != NULL) { if (g_strcmp0 (mol[i].object, str) == 0) { if (i < 9) { return (int) mol[i].Z; } else if (i == 9) { return get_atom_id_from_periodic_table (asearch); } else if (i > 10 && i < 17) { return insert_this_project_from_lib (i-11, visible, get_project_by_id(p), asearch); } else if (i == 17) { return select_from_library (visible, get_project_by_id(p), asearch); } } } } for (i=0; i name, i+1); for (j=0; j<3; j++) { word = g_strdup_printf ("%s in %s", action_atoms[j], name); if (g_strcmp0 (word, str) == 0) { g_free (word); g_free (name); get_project_by_id(p) -> modelgl -> other_status = j; return create_object_from_open_project (get_project_by_id(p), i); } else { g_free (word); } } g_free (name); } if (g_strcmp0 ("Copied data", str) == 0) { return FROM_DATA; } if (g_strcmp0 ("Empty position", str) == 0) return 120; return 0; } /*! \fn void adjust_data_model_to_replace (project * this_proj, atom_search * asearch, int sid, int vid) \brief adjust the data of the tree model to insert 'vid' \param this_proj the target project \param asearch the target atom search \param sid the chemical species \param vid id of the object to insert */ void adjust_data_model_to_replace (project * this_proj, atom_search * asearch, int sid, int vid) { int i, j, k, l; int filter = get_asearch_filter (asearch); switch (filter) { case 0: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].sp == sid && append (asearch, this_proj, i, this_proj -> atoms[0][i].sp)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } break; case 1: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].numv == sid) { j = this_proj -> atoms[0][i].sp; if (append (asearch, this_proj, i, j)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } } break; case 2: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[1]; for (l=0; l coord -> ntg[1][l]; if (k == sid && append (asearch, this_proj, i, j)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } break; default: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[filter-1]; if (k == sid && append (asearch, this_proj, i, j)) { to_insert_in_project (vid, i, this_proj, asearch, TRUE); } } break; } } /*! \fn G_MODULE_EXPORT void changed_action_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) \brief change combo box in atom search tree model \param combo the cell renderer combo box \param path_string the path in the tree model \param iter the tree iter \param data the associated data pointer */ G_MODULE_EXPORT void changed_action_renderer (GtkCellRendererCombo * combo, gchar * path_string, GtkTreeIter * iter, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); int h, i, j, k; atom_search * asearch = this_proj -> modelgl -> search_widg[dat -> c]; GValue val = {0, }; GObject * cmodel; g_object_get (combo, "model", & cmodel, NULL); gtk_tree_model_get_value ((GtkTreeModel *)cmodel, iter, 0, & val); GtkTreeIter child; gboolean dothis; GtkTreeModel * model = (asearch -> action == INSERT) ? GTK_TREE_MODEL(asearch -> obj_model) : GTK_TREE_MODEL(asearch -> atom_model); if (gtk_tree_model_get_iter_from_string (model, iter, path_string)) { gtk_tree_model_get (model, iter, IDCOL, & h, -1); gchar * str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); i = get_selected_object_id (TRUE, this_proj -> id, str, asearch); g_free (str); int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); k = (asearch -> pointer[0].c == 3) ? 0 : (asearch -> pointer[0].c == 5) ? 1 : 3; if (h > 0 || (object && ! asearch -> passivating && filter > 2) || asearch -> passivating || asearch -> mode) { // Single atom or object if (i) { j = (asearch -> mode) ? h - 2 : abs(h) - 1; to_insert_in_project (i, j, this_proj, asearch, TRUE); str = (asearch -> mode) ? g_strdup_printf ("%s", get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name) : g_strdup_printf ("For all: %s", get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name); gtk_tree_store_set (asearch -> atom_model, iter, TOPIC+1, str, -1); g_free (str); } else { gtk_tree_store_set (asearch -> atom_model, iter, TOPIC+1, (h > 0) ? "Select ..." : "Select for all ...", -1); } } else { // The entire species if (i) { if (! asearch -> passivating && this_proj -> natomes >= 10000) { if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & child, iter)) { dothis = TRUE; while (dothis) { gtk_tree_model_get (GTK_TREE_MODEL(asearch -> atom_model), & child, IDCOL, & j, -1); j --; to_insert_in_project (i, j, this_proj, asearch, TRUE); gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+1, get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name, -1); dothis = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & child); } } str = g_strdup_printf ("For all: %s", get_atomic_object_by_origin(this_proj -> modelgl -> atom_win -> to_be_inserted[k], j, 0) -> name); gtk_tree_store_set (asearch -> atom_model, iter, TOPIC+1, str, -1); g_free (str); } else { adjust_data_model_to_replace (this_proj, asearch, abs(h)-1, i); } } else { if (! asearch -> passivating && this_proj -> natomes >= 10000) { gtk_tree_store_set (asearch -> atom_model, iter, 5, "Select for all ...", -1); if (gtk_tree_model_iter_children (GTK_TREE_MODEL(asearch -> atom_model), & child, iter)) { dothis = TRUE; while (dothis) { gtk_tree_store_set (asearch -> atom_model, & child, TOPIC+1, "Select ...", -1); dothis = gtk_tree_model_iter_next (GTK_TREE_MODEL(asearch -> atom_model), & child); } } } else { gtk_tree_store_set (asearch -> atom_model, iter, 5, "Select ...", -1); } } } if (update_this_search(asearch)) update_search_tree (asearch); } } /*! \fn GtkTreeModel * replace_combo_tree (gboolean insert, int proj) \brief replace combo box in the tree view \param insert add 'Select ...' combo box item \param proj target crystal builder project id */ GtkTreeModel * replace_combo_tree (gboolean insert, int proj) { GtkTreeIter iter, iter2, iter3; GtkTreeStore *store; int i, j; gchar * name, * word; store = gtk_tree_store_new (1, G_TYPE_STRING); if (insert) { gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, "Select ...", -1); } for (i=0; mol[i].type || mol[i].object; i++) { if (mol[i].type) { gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, mol[i].type, -1); } else if (mol[i].object) { gtk_tree_store_append (store, & iter2, & iter); gtk_tree_store_set (store, & iter2, 0, mol[i].object, -1); } } gboolean doit = FALSE; for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { doit = TRUE; break; } } if (doit) { gtk_tree_store_append (store, & iter, NULL); gtk_tree_store_set (store, & iter, 0, "Import from project", -1); for (i=0; i steps == 1 && get_project_by_id(i) -> natomes) { gtk_tree_store_append (store, & iter2, & iter); name = g_strdup_printf ("%s (%d)", get_project_by_id(i) -> name, i+1); gtk_tree_store_set (store, & iter2, 0, name, -1); for (j=0; j<3; j++) { gtk_tree_store_append (store, & iter3, & iter2); word = g_strdup_printf ("%s in %s", action_atoms[j], name); gtk_tree_store_set (store, & iter3, 0, word, -1); g_free (word); } g_free (name); } } } if (copied_object) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, "Copied data", -1); } if (get_project_by_id(proj) -> modelgl) { if (get_project_by_id(proj) -> modelgl -> builder_win) { gtk_tree_store_append (store, &iter, NULL); gtk_tree_store_set (store, & iter, 0, "Empty position", -1); } } return GTK_TREE_MODEL (store); } /*! \fn void search_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) \brief show / hide cell renderer, if visible then add or not pango markup \param col the tree view column \param renderer the cell renderer \param mod the tree model \param iter the tree iter \param data the associated data pointer */ void search_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { int i, j; i = GPOINTER_TO_INT(data); i ++; gtk_tree_model_get (mod, iter, IDCOL, & j, -1); gboolean vis = (j < 0 && i == 2) ? FALSE : TRUE; gtk_cell_renderer_set_visible (renderer, vis); if (vis && (i < TOLAB || i > TOPIC)) { gchar * str = NULL; gtk_tree_model_get (mod, iter, i, & str, -1); g_object_set (renderer, "markup", str, NULL, NULL); g_free (str); } } int atom_to_edit; atom_search * csearch; /*! \fn G_MODULE_EXPORT void set_occupancy (GtkEntry * res, gpointer data) \brief set occupancy entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_occupancy (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = atof(m); atomic_object * object = (atomic_object *)data; if (v > 0.0 && v<= 1.0) { object -> occ = v; } update_entry_double (res, object -> occ); } /*! \fn G_MODULE_EXPORT void set_i_coord (GtkEntry * res, gpointer data) \brief set insertion coordinate(s) for the object to be inserted entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_i_coord (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = atof(m); int ax = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id (csearch -> proj); int oid = (csearch -> pointer[0].c == 5) ? 1 : 2; atomic_object * object = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[oid], 0, atom_to_edit+1); object -> baryc[ax] = v; update_entry_double (res, object -> baryc[ax]); } /*! \fn G_MODULE_EXPORT void set_max_msd (GtkEntry * res, gpointer data) \brief set MSD max entry callback \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_msd (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = atof(m); int ax = GPOINTER_TO_INT (data); project * this_proj = get_project_by_id (csearch -> proj); if (! (v < 0.0)) { if (ax > 0) { if (this_proj -> modelgl -> atom_win -> msd[ax-1] != v) csearch -> pick[this_proj -> atoms[0][ax-1].sp] = 0; this_proj -> modelgl -> atom_win -> msd[ax-1] = v; } else { ax = -ax-1; this_proj -> modelgl -> atom_win -> msd_all[ax] = v; if (! csearch -> passivating) { int object = get_asearch_object (csearch); int filter = get_asearch_filter (csearch); int i, j, k, l; switch (filter) { case 0: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].sp == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } break; case 1: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; if (this_proj -> atoms[0][i].numv == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } break; case 2: for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].sp; k = this_proj -> atoms[0][i].coord[filter-1]; for (l=0; l coord -> ntg[1][l]; if (k == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } break; default: if (! object) { for (i=0; i natomes; i++) { j = this_proj -> atoms[0][i].coord[filter-1]; if (j == ax) this_proj -> modelgl -> atom_win -> msd[i] = v; } } break; } } } update_entry_double (res, v); } else { //show_error ("MSDmax must be > 0.0 !", 1, this_proj -> modelgl -> atom_win -> win); if (ax > 0) { v = this_proj -> modelgl -> atom_win -> msd[ax-1]; } else { v = this_proj -> modelgl -> atom_win -> msd_all[-ax-1]; } update_entry_double (res, v); } } int max_random; /*! \fn G_MODULE_EXPORT void set_max_action (GtkEntry * res, gpointer data) \brief set how many time(s) to re-do the action \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_action (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); int v = (int)atof(m); int ax = GPOINTER_TO_INT (data); if (v > -1 && v <= max_random) { csearch -> todo[-ax-1] = v; } update_entry_int (res, csearch -> todo[-ax-1]); } /*! \fn void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg) \brief find iter in the tree model using path string, then edit the data \param path_string the path in the tree model \param data the associated data pointer \param widg the GtkWidget sending the signal */ void get_coord_iter_and_edit (gchar * path_string, gpointer data, GtkWidget * widg) { tint * cid = (tint *)data; project * this_proj = get_project_by_id (cid -> a); csearch = this_proj -> modelgl -> search_widg[cid -> c]; GtkTreeIter iter; GtkTreeModel * model = (csearch -> action == INSERT) ? GTK_TREE_MODEL(csearch -> obj_model) : GTK_TREE_MODEL(csearch -> atom_model); if (gtk_tree_model_get_iter (model, & iter, gtk_tree_path_new_from_string (path_string))) { int h, i, j, k, l; gtk_tree_model_get (model, & iter, IDCOL, & h, -1); if (h > 0 || csearch -> action == REPLACE || csearch -> action == REMOVE || csearch -> action == RANMOVE) { atom_to_edit = h-1; GtkWidget * win = gtk_dialog_new (); if (this_proj -> modelgl -> builder_win) { gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW(this_proj -> modelgl -> builder_win -> win)); } else { gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW(this_proj -> modelgl -> atom_win -> win)); } gtk_window_set_resizable (GTK_WINDOW (win), FALSE); gchar * str; atomic_object * iobj; gchar * obj[5]={"atom(s)", "total coordination(s)", "partial coordination(s)", "in fragment", "in molecule"}; gchar * act[2]={"Replace", "Remove"}; int object = get_asearch_object (csearch); int filter = get_asearch_filter (csearch); switch (csearch -> action) { case REPLACE: str = g_strdup_printf ("Replace %s randomly", obj[(object) ? filter : 0]); break; case REMOVE: str = g_strdup_printf ("Remove %s randomly", obj[(object) ? filter : 0]); break; case RANMOVE: str = g_strdup_printf ("Maximum Mean Square Displacement"); break; default: i = (csearch -> pointer[0].c == 5) ? 1 : 2; iobj = get_atomic_object_by_origin (this_proj -> modelgl -> atom_win -> to_be_inserted[i], 0, atom_to_edit+1); if (cid -> b - TOLAB) { str = g_strdup_printf ("Site occupancy for %s", prepare_for_title(iobj -> name)); } else { str = g_strdup_printf ("Insert %s at", prepare_for_title(iobj -> name)); } break; } gtk_window_set_title (GTK_WINDOW(win), str); g_free (str); gtk_window_set_modal (GTK_WINDOW (win), TRUE); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox; GtkWidget * entry; gchar * axis[3]={"x", "y", "z"}; gchar * nran = NULL; switch (csearch -> action) { case INSERT: if (cid -> b - TOLAB && csearch -> pointer[0].c == 7) { hbox = create_hbox (5); str = g_strdup_printf ("Occupancy= "); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); entry = create_entry (G_CALLBACK(set_occupancy), 100, 15, FALSE, iobj); update_entry_double (GTK_ENTRY(entry), iobj -> occ); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } else { for (i=0; i<3; i++) { hbox = create_hbox (5); str = g_strdup_printf ("%s =", axis[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 0); g_free (str); entry = create_entry (G_CALLBACK(set_i_coord), 100, 15, FALSE, GINT_TO_POINTER(i)); update_entry_double (GTK_ENTRY(entry), iobj -> baryc[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } } break; case RANMOVE: hbox = create_hbox (5); entry = create_entry (G_CALLBACK(set_max_msd), 100, 15, FALSE, GINT_TO_POINTER(h)); if (h > 0) { j = this_proj -> atoms[0][atom_to_edit].sp; if (object) { str = g_strdup_printf ("MSDmax for %s%d + neighbors = ", this_proj -> chemistry -> label[j], atom_to_edit+1); } else { str = g_strdup_printf ("MSDmax for %s%d = ", this_proj -> chemistry -> label[j], atom_to_edit+1); } update_entry_double (GTK_ENTRY(entry), this_proj -> modelgl -> atom_win -> msd[atom_to_edit]); } else { switch (filter) { case 0: str = g_strdup_printf ("MSDmax for all %s atom(s) = ", this_proj -> chemistry -> label[-h-1]); break; case 1: if (-h-1 == 0) { str = g_strdup_printf ("MSDmax for all isolated atom(s) = "); } else if (object) { str = g_strdup_printf ("MSDmax for all %d-fold atom(s) + neighbors = ", -h-1); } else { str = g_strdup_printf ("MSDmax for all %d-fold atom(s) = ", -h-1); } break; case 2: i = 0; for (j=0; j nspec; j++) { i += this_proj -> coord -> ntg[1][j]; if (i > -h-1) break; } k = 0; for (l=0; l coord -> ntg[1][l]; i = (-h-1) - k; nran = env_name(this_proj, i, j, 1, NULL); if (object) { str = g_strdup_printf ("MSDmax for all %s + neighbors = ", nran); } else { str = g_strdup_printf ("MSDmax for all %s = ", nran); } break; case 3: if (object) { str = g_strdup_printf ("MSDmax for fragment N°%d = ", -h); } else { str = g_strdup_printf ("MSDmax for the atom(s) in fragment N°%d = ", -h); } break; case 4: if (object) { str = g_strdup_printf ("MSDmax for molecule N°%d = ", -h); } else { str = g_strdup_printf ("MSDmax for the atom(s) in molecule N°%d = ", -h); } break; } update_entry_double (GTK_ENTRY(entry), this_proj -> modelgl -> atom_win -> msd_all[-h-1]); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("[Å2]", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); break; default: max_random = 0; switch (filter) { case 0: if (csearch -> status == 2) { max_random = this_proj -> chemistry -> nsps[-h-1]; nran = g_strdup_printf ("%s", this_proj -> chemistry -> label[-h-1]); } else { max_random = 0; for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].sp == -h-1 && this_proj -> atoms[0][i].pick[0] == csearch -> status) max_random ++; } } break; case 1: for (i=0; i natomes; i++) { if (this_proj -> atoms[0][i].numv == -h-1 && (this_proj -> atoms[0][i].pick[0] == csearch -> status || csearch -> status == 2)) max_random ++; } if (-h-1 > 0) { nran = g_strdup_printf ("%d-fold", -h-1); } else { nran = g_strdup_printf ("isolated"); } break; case 2: i = 0; for (j=0; j nspec; j++) { i += this_proj -> coord -> ntg[1][j]; if (i > -h-1) break; } k = 0; for (l=0; l coord -> ntg[1][l]; i = (-h-1) - k; for (k=0; k natomes; k++) { if (this_proj -> atoms[0][k].sp == j && this_proj -> atoms[0][k].coord[1] == i) { if (this_proj -> atoms[0][k].pick[0] == csearch -> status || csearch -> status == 2) max_random ++; } } if (csearch -> action != RANMOVE) nran = env_name(this_proj, i, j, 1, NULL); break; default: if (object) { i = (-h-1); if (filter == 3) { max_random = this_proj -> coord -> totcoord[2]; } else if (filter == 4) { max_random = this_proj -> modelfc -> mols[0][i].multiplicity; } } else { i = (-h-1); for (k=0; k natomes; k++) { if (this_proj -> atoms[0][k].coord[filter-1] == i) { if (this_proj -> atoms[0][k].pick[0] == csearch -> status || csearch -> status == 2) max_random ++; } } nran = g_strdup_printf ("atom(s)"); } break; } hbox = create_hbox (5); entry = create_entry (G_CALLBACK(set_max_action), 100, 15, FALSE, GINT_TO_POINTER(h)); if (object) { if (filter == 3) { str = g_strdup_printf ("%s randomly n fragment(s) in all fragments, n= ", act[csearch -> action - 3]); } else if (filter == 4) { str = g_strdup_printf ("%s randomly n fragment(s) in molecule N°%d, n= ", act[csearch -> action - 3], -h); } else { str = g_strdup_printf ("%s randomly n %s coordinations, n= ", act[csearch -> action - 3], nran); } } else { if (filter < 3) { str = g_strdup_printf ("%s randomly n %s %s, n= ", act[csearch -> action - 3], nran, obj[0]); } else { str = g_strdup_printf ("%s randomly n %s %s N°%d, n= ", act[csearch -> action - 3], nran, obj[filter], -h); } } if (nran) g_free (nran); update_entry_int (GTK_ENTRY(entry), csearch -> todo[-h-1]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf (" with nmax = %d", max_random); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 50, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); break; } run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); if (csearch -> action != RANMOVE) { update_search_tree (csearch); } else { if (h > 0) { if (this_proj -> modelgl -> atom_win -> msd[atom_to_edit] > 0.0) { str = g_strdup_printf ("MSDmax= %f", this_proj -> modelgl -> atom_win -> msd[atom_to_edit]); } else { str = g_strdup_printf ("Set MSDmax for ..."); } gtk_tree_store_set (csearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); } else { if (this_proj -> modelgl -> atom_win -> msd_all[-h-1] > 0.0) { if (object && filter > 2) { str = g_strdup_printf ("MSDmax= %f", this_proj -> modelgl -> atom_win -> msd_all[-h-1]); } else { str = g_strdup_printf ("For all: MSDmax= %f", this_proj -> modelgl -> atom_win -> msd_all[-h-1]); } gtk_tree_store_set (csearch -> atom_model, & iter, TOPIC+2, str, -1); g_free (str); } else { if (object && filter > 2) { gtk_tree_store_set (csearch -> atom_model, &iter, TOPIC+2, "Set MSDmax for ...", -1); } else { gtk_tree_store_set (csearch -> atom_model, & iter, TOPIC+2, "Set MSDmax for all ...", -1); } } } check_all_trees (this_proj); } } } } /*! \fn G_MODULE_EXPORT void to_edit_coords (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) \brief to edit data in the atom search tree model \param cell the GtkCellRenderer \param editable the editable \param path_string the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void to_edit_coords (GtkCellRenderer * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) { destroy_this_widget (GTK_WIDGET(editable)); get_coord_iter_and_edit (path_string, data, NULL); } /*! \fn G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) \brief add pango markup to a combo box inserted in the cell of a tree view \param cell the GtkCellRendererCombo \param editable the editable \param path_string the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void markup_action_renderer (GtkCellRendererCombo * cell, GtkCellEditable * editable, gchar * path_string, gpointer data) { GtkComboBox * combo = GTK_COMBO_BOX(editable); GList * cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(combo)); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), cell_list -> data, "markup", 0, NULL); } /*GtkCellView * view = (GtkCellView *)gtk_bin_get_child(GTK_BIN(editable)); GList * list = gtk_cell_view_get_cell_renderers (view); while (list) { GtkCellRenderer *render = (GtkCellRenderer *)list -> data; list = list -> next; gtk_cell_layout_set_cell_data_func (GTK_CELL_LAYOUT(combo), renderer1, TaskStatusComboCellData, NULL, NULL); }*/ } /*! \fn G_MODULE_EXPORT void set_max_msd_for_all (GtkEntry * res, gpointer data) \brief set the maximum MSD for all atom(s) / object(s) of the search \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_max_msd_for_all (GtkEntry * res, gpointer data) { const gchar * m = entry_get_text (res); double v = atof(m); project * this_proj = get_project_by_id (csearch -> proj); int i, j; if (v <= 0.0) { // show_error ("MSDmax must be > 0.0 !", 1, this_proj -> modelgl -> atom_win -> win); v = this_proj -> modelgl -> atom_win -> msd[0]; } i = csearch -> todo_size; for (j=0; j modelgl -> atom_win -> msd[j] = v; } i = get_asearch_num_objects (csearch); for (j=0; j modelgl -> atom_win -> msd_all[j] = v; } update_entry_double (res, v); } /*! \fn gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) \brief update tree model for each iter \param model the tree model \param path the path in the tree model \param iter the tree it \param data the associated data pointer */ gboolean update_search_model (GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data) { int i; tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); atom_search * asearch = this_proj -> modelgl -> search_widg[dat -> c]; if (gtk_tree_model_get_iter (model, iter, path)) { gtk_tree_model_get (model, iter, IDCOL, & i, -1); gtk_tree_store_set (GTK_TREE_STORE(model), iter, dat -> b, asearch -> int_b, -1); if (i > 0) { i --; adjust_this_tree_leaf (asearch, this_proj, dat -> b, i, asearch -> int_b, * iter); } else if (asearch -> object) { adjust_this_tree_branch (asearch, this_proj, dat -> b, abs(i) - 1, * iter); } return FALSE; } else { return TRUE; } } /*! \fn G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data) \brief select all element(s) in the tree view column \param col the target tree view column \param data the associated data pointer */ G_MODULE_EXPORT void select_all_atoms (GtkTreeViewColumn * col, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id(dat -> a); csearch = this_proj -> modelgl -> search_widg[dat -> c]; int i, j, k; opengl_project_changed (dat -> a); if (dat -> b == TOPIC+2) { GtkWidget * win = gtk_dialog_new (); gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW(this_proj -> modelgl -> atom_win -> win)); gtk_window_set_resizable (GTK_WINDOW (win), FALSE); gchar * str = g_strdup_printf ("Maximum Mean Square Displacement"); gtk_window_set_title (GTK_WINDOW(win), str); g_free (str); gtk_window_set_modal (GTK_WINDOW (win), TRUE); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (5); GtkWidget * entry = create_entry (G_CALLBACK(set_max_msd_for_all), 100, 15, FALSE, NULL); update_entry_double (GTK_ENTRY(entry), 0.0); str = g_strdup_printf ("MSDmax for all object(s) = "); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 100, -1, 0.0, 0.5), FALSE, FALSE, 15); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, entry, FALSE, FALSE, 0); str = g_strdup_printf ("[Å2]"); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); update_search_tree (csearch); } else { if (dat -> b == TOLAB) { if (csearch -> action == INSERT) { k = (csearch -> pointer[0].c == 5) ? 1 : 2; if (this_proj -> modelgl -> atom_win -> to_be_inserted[k]) { j = ! csearch -> todo[0]; for (i=0; i in_selection; i++) csearch -> todo[i] = j; } } else { k = this_proj -> modelgl -> anim -> last -> img -> step; if (csearch -> action < 2) { is_selected = -1; i = 0; } else { if (csearch -> status < 2) { is_selected = csearch -> status; for (i=0; i natomes; i++) { if (this_proj -> atoms[k][i].pick[0] == is_selected) break; } } else { is_selected = -1; i = 0; } } j = ! this_proj -> atoms[k][i].label[0]; selected_aspec = -1; column_label = TRUE; #ifdef GTK4 label_unlabel_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][j]); #else label_unlabel_atoms (NULL, & opengl_project -> modelgl -> colorp[0][j]); #endif column_label = FALSE; } } else { k = this_proj -> modelgl -> anim -> last -> img -> step; if (csearch -> action < 2) { j = ! this_proj -> atoms[k][0].pick[0]; selected_aspec = is_selected = -1; #ifdef GTK4 select_unselect_atoms (NULL, NULL, & opengl_project -> modelgl -> colorp[0][j]); #else select_unselect_atoms (NULL, & opengl_project -> modelgl -> colorp[0][j]); #endif } else { if (csearch -> action != RANMOVE) { j = (csearch -> set_for_all < 0) ? 0 : 1; } else { // The value depends on both translation (1), rotation (2), or both (3) switch (abs(csearch -> set_for_all)) { case 0: if (dat -> b == TOPIC) { j = 1; } else { j = 2; } break; case 1: if (dat -> b == TOPIC) { j = 0; } else { j = 3; } break; case 2: if (dat -> b == TOPIC) { j = 3; } else { j = 0; } break; case 3: if (dat -> b == TOPIC) { j = 2; } else { j = 1; } break; } } } } if (csearch -> action > 1 && dat -> c != 7) { clean_picked_and_labelled (csearch, FALSE); if (dat -> b != TOLAB) clean_todo (csearch); } csearch -> set_for_all = (dat -> b == TOLAB) ? 0 : j; update_search_tree (csearch); } /*else { GtkTreeIter iter; if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL(csearch -> atom_model), & iter)) { gtk_tree_model_get (GTK_TREE_MODEL(csearch -> atom_model), & iter, dat -> b, & j, -1); g_debug ("j= %d,", j); g_debug ("a= %d, b= %d, c= %d, aa= %d, bb= %d, cc= %d", dat -> a, dat -> b, dat -> c, csearch -> pointer[dat -> b-TOLAB].a, csearch -> pointer[dat -> b-TOLAB].b, csearch -> pointer[dat -> b-TOLAB].c); csearch -> int_b = ! j; gtk_tree_model_foreach (GTK_TREE_MODEL(csearch -> atom_model), update_search_model, & csearch -> pointer[dat -> b-TOLAB]); } }*/ } /*! \fn G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) \brief Move row up or down in the tree model using the mouse \param tree_model the target tree model \param path the path in the tree model \param data the associated data pointer */ G_MODULE_EXPORT void move_up_down (GtkTreeModel * tree_model, GtkTreePath * path, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); atomic_object * obja, * objb, * objc; GtkTreeIter iter; gboolean valid; int i, j; int * old_todo = duplicate_int (asearch -> in_selection, asearch -> todo); obja = duplicate_atomic_object (this_proj -> modelgl -> atom_win -> to_be_inserted[2]); obja -> next = this_proj -> modelgl -> atom_win -> to_be_inserted[2] -> next; g_free (this_proj -> modelgl -> atom_win -> to_be_inserted[2]); objb = NULL; valid = gtk_tree_model_get_iter_first (tree_model, & iter); j = 0; while (valid) { gtk_tree_model_get (tree_model, & iter, 0, & i, -1); i --; objc = obja; while (objc -> id != i) objc = objc -> next; if (objc) { if (! objb) { this_proj -> modelgl -> atom_win -> to_be_inserted[2] = duplicate_atomic_object (objc); objb = this_proj -> modelgl -> atom_win -> to_be_inserted[2]; } else { objb -> next = duplicate_atomic_object (objc); objb -> next -> prev = objb; objb = objb -> next; } objb -> id = j; asearch -> todo[j] = old_todo[i]; j ++; } valid = gtk_tree_model_iter_next (tree_model, & iter); } g_free (old_todo); i = 0; valid = gtk_tree_model_get_iter_first (tree_model, & iter); while (valid) { gtk_list_store_set (GTK_LIST_STORE(tree_model), & iter, IDCOL, i+1, 1, g_strdup_printf ("%d", i+1), -1); i ++; valid = gtk_tree_model_iter_next (tree_model, & iter); } } /*! \fn GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int nats) \brief create atom search tree view \param asearch the target atom search \param this_proj the target project \param nats the total number of atom(s) */ GtkWidget * create_atoms_tree (atom_search * asearch, project * this_proj, int nats) { int i, j, k, l; GtkTreeViewColumn * atom_col[5]; GtkCellRenderer * atom_cell[5]; gchar * ctitle[6][5]={{"Object", "Name", "Label", "Pick", " "}, {"Object", "Name", "Label", "Move", " "}, {"Object", "Name", "Label", "Replace", "By"}, {"Object", "Name", "Label", "Remove", " "}, {"Object", "Name", "Insert", "Position", "Occupancy"}, {"Object", "Name", "Label", "Translate", "Max. MSD"}}; gchar * ctype[3][5]={{"text", "text", "active", "active", "text"}, {"text", "text", "active", "text", "text"}, {"text", "text", "active", "active", "text"}}; j = (asearch -> action == REPLACE || asearch -> action == RANMOVE) ? 1 : 0; k = (asearch -> action == RANMOVE) ? 2 : (asearch -> action == INSERT) ? 1 : 0; if (asearch -> action == INSERT && asearch -> pointer[0].c == 7) j ++; gboolean toggle; GType coltype[3][8] = {{G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT}, {G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_INT}}; if (asearch -> action == INSERT) { asearch -> obj_model = gtk_list_store_newv (8, coltype[k]); } else { asearch -> atom_model = gtk_tree_store_newv (8, coltype[k]); } if (! (nats > 10000) || asearch -> action == INSERT) { fill_atom_model (asearch, this_proj); } if (asearch -> action == INSERT) { asearch -> atom_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(asearch -> obj_model)); } else { asearch -> atom_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(asearch -> atom_model)); } for (i=0; i<4+j; i++) { toggle = FALSE; if (i < 2 || (asearch -> action == INSERT && i > 2) || (asearch -> action == RANMOVE && i == 4)) { atom_cell[i] = gtk_cell_renderer_text_new (); if ((asearch -> action == INSERT && i > 2) || (asearch -> action == RANMOVE && i == 4)) { g_object_set (atom_cell[i], "editable", TRUE, NULL); g_signal_connect (G_OBJECT(atom_cell[i]), "editing-started", G_CALLBACK(to_edit_coords), & asearch -> pointer[i-3]); if (asearch -> action == RANMOVE) toggle = TRUE; } } else if (i < 4) { atom_cell[i] = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(atom_cell[i]), "toggled", G_CALLBACK(select_atom), & asearch -> pointer[i-2]); toggle = TRUE; } else { atom_cell[i] = gtk_cell_renderer_combo_new (); GtkTreeModel * model = replace_combo_tree (FALSE, this_proj -> id); g_object_set (atom_cell[i], "model", model, "text-column", 0, "has-entry", FALSE, "editable", TRUE, NULL); g_object_unref (model); g_signal_connect (G_OBJECT(atom_cell[i]), "editing-started", G_CALLBACK(markup_action_renderer), & asearch -> pointer[i-4]); g_signal_connect (G_OBJECT(atom_cell[i]), "changed", G_CALLBACK(changed_action_renderer), & asearch -> pointer[i-4]); } gtk_cell_renderer_set_fixed_size (atom_cell[i], -1, 25); l = (asearch -> action == RANMOVE && i == 4) ? i+1 : i; atom_col[i] = gtk_tree_view_column_new_with_attributes (ctitle[(asearch -> action < 2) ? 0 : asearch -> action - 1][i], atom_cell[i], ctype[k][i], l+1, NULL); if (toggle && ! asearch -> passivating) { gtk_tree_view_column_set_clickable (atom_col[i], TRUE); g_signal_connect (G_OBJECT(atom_col[i]), "clicked", G_CALLBACK(select_all_atoms), & asearch -> pointer[l-2]); } gtk_tree_view_append_column(GTK_TREE_VIEW(asearch -> atom_tree), atom_col[i]); gtk_tree_view_column_set_alignment (atom_col[i], 0.5); gtk_tree_view_column_set_cell_data_func (atom_col[i], atom_cell[i], search_set_visible, GINT_TO_POINTER(l), NULL); } if (asearch -> pointer[0].c == 7) { asearch -> filter = g_signal_connect_data (G_OBJECT(GTK_TREE_MODEL(asearch -> obj_model)), "row-deleted", G_CALLBACK(move_up_down), asearch, NULL, (GConnectFlags) 0); gtk_tree_view_set_reorderable (GTK_TREE_VIEW(asearch -> atom_tree), TRUE); } return asearch -> atom_tree; } /*! \fn int get_todo_size (atom_search * asearch) \brief get the size of the atom search selection list \param asearch the target atom search */ int get_todo_size (atom_search * asearch) { int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); project * this_proj = get_project_by_id (asearch -> proj); int tsize = 0; switch (filter) { case 0: tsize = (asearch -> mode || asearch -> passivating) ? this_proj -> nspec : this_proj -> natomes; break; case 1: tsize = (asearch -> mode || asearch -> passivating) ? this_proj -> coord -> cmax+1 : this_proj -> natomes; break; default: if (asearch -> mode || asearch -> passivating) { tsize = this_proj -> coord -> totcoord[filter -1]; } else { tsize = (object && filter > 2) ? this_proj -> coord -> totcoord[filter -1] : this_proj -> natomes; } break; } return tsize; } /*! \fn void allocate_todo (atom_search * asearch, int tsize) \brief allocate the selection list data buffer \param asearch the target atom search \param tsize the target size */ void allocate_todo (atom_search * asearch, int tsize) { asearch -> todo = allocint (tsize); asearch -> todo_size = tsize; } /*! \fn void clean_todo (atom_search * asearch) \brief clean atom search selection list \param asearch the target atom search */ void clean_todo (atom_search * asearch) { project * this_proj = get_project_by_id (asearch -> proj); if (asearch -> todo) g_free (asearch -> todo); allocate_todo (asearch, get_todo_size(asearch)); atomic_object * object; switch (asearch -> action) { case DISPL: if (this_proj -> modelgl -> atom_win -> to_be_moved[0]) { object = this_proj -> modelgl -> atom_win -> to_be_moved[0]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_moved[0] = NULL; } break; case RANMOVE: if (this_proj -> modelgl -> atom_win -> to_be_moved[1]) { object = this_proj -> modelgl -> atom_win -> to_be_moved[1]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_moved[1] = NULL; } g_free (this_proj -> modelgl -> atom_win -> msd); this_proj -> modelgl -> atom_win -> msd = allocfloat (asearch -> todo_size); break; case REPLACE: if (this_proj -> modelgl -> atom_win -> to_be_inserted[0]) { object = this_proj -> modelgl -> atom_win -> to_be_inserted[0]; while (object -> next) { object = object -> next; g_free (object -> prev); } g_free (object); this_proj -> modelgl -> atom_win -> to_be_inserted[0] = NULL; } asearch -> in_selection = 0; break; } } /*! \fn void clean_picked_and_labelled (atom_search * asearch, gboolean clean_msd) \brief initialize atom search data buffers \param asearch the target atom search \param clean_msd clean msd all data (1) or not (0) */ void clean_picked_and_labelled (atom_search * asearch, gboolean clean_msd) { project * this_proj; int val = get_asearch_num_objects (asearch); asearch -> lab = allocint(val); asearch -> pick = allocint(val); if (asearch -> action == RANMOVE) { this_proj = get_project_by_id (asearch -> proj); if (this_proj -> modelgl -> atom_win && clean_msd) { g_free (this_proj -> modelgl -> atom_win -> msd_all); this_proj -> modelgl -> atom_win -> msd_all = allocfloat (val); } } else if (asearch -> action == REPLACE) { this_proj = get_project_by_id (asearch -> proj); int i = (asearch -> pointer[0].c == 3) ? 0 : 1; if (this_proj -> modelgl -> atom_win) { if (this_proj -> modelgl -> atom_win -> win && this_proj -> modelgl -> atom_win -> replace_nodes[i]) { g_free (this_proj -> modelgl -> atom_win -> replace_nodes[i]); } this_proj -> modelgl -> atom_win -> replace_nodes[i] = g_malloc0(val*sizeof*this_proj -> modelgl -> atom_win -> replace_nodes[i]); } } } /*! \fn G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data) \brief change the search chemical species \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_spec_changed (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *) data; int i = gtk_combo_box_get_active (box); asearch -> spec = i; update_search_tree (asearch); if (get_project_by_id(asearch -> proj) -> natomes >= 10000) { if (i > 0) { update_entry_text (GTK_ENTRY(asearch -> entry_a), exact_name(get_project_by_id(asearch -> proj) -> chemistry -> label[i-1])); } else { update_entry_text (GTK_ENTRY(asearch -> entry_a), ""); } set_atom (GTK_ENTRY(asearch -> entry_a), asearch); widget_set_sensitive (asearch -> entry_a, ! i); } } /*! \fn G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data) \brief change the search filter \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_filter_changed (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *) data; asearch -> filter = gtk_combo_box_get_active (box); int object = get_asearch_object (asearch); int filter = get_asearch_filter (asearch); widget_set_sensitive (asearch -> atom_box, (object && filter > 2) ? 0 : 1); widget_set_sensitive (asearch -> id_box, (object && filter > 2) ? 0 : 1); if (object && filter > 2) { gtk_combo_box_set_active (GTK_COMBO_BOX(asearch -> atom_box), 0); } if (asearch -> action == DISPL) motion_to_zero (asearch); clean_todo (asearch); clean_picked_and_labelled (asearch, TRUE); set_spec_changed (GTK_COMBO_BOX(asearch -> atom_box), asearch); } /*! \fn G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data) \brief change the search object \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_object_changed (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *) data; GtkTreeViewColumn * rot_c; int was_object; int object; int filter; if (get_project_by_id(asearch -> proj) -> natomes >= 10000) { was_object = ((! asearch -> mode && asearch -> object > 1) || (asearch -> mode && asearch -> object)) ? 1 : 0; asearch -> object = gtk_combo_box_get_active (box); filter = get_asearch_filter (asearch); object = ((! asearch -> mode && asearch -> object > 1) || (asearch -> mode && asearch -> object)) ? 1 : 0; if ((! asearch -> mode && (asearch -> object == 1 || asearch -> object == 3)) || (asearch -> mode && asearch -> object)) { if (! asearch -> mode) asearch -> passivating = TRUE; if (is_the_widget_visible(asearch -> id_box)) gtk_widget_hide (asearch -> id_box); if (is_the_widget_visible(asearch -> info[1])) gtk_widget_hide (asearch -> info[1]); } else { asearch -> passivating = FALSE; if (((! asearch -> mode && asearch -> object == 2) || (asearch -> mode && asearch -> object)) && filter > 2) { if (is_the_widget_visible(asearch -> id_box)) gtk_widget_hide (asearch -> id_box); if (is_the_widget_visible(asearch -> info[1])) gtk_widget_hide (asearch -> info[1]); } else { if (! is_the_widget_visible(asearch -> id_box)) gtk_widget_show (asearch -> id_box); if (! is_the_widget_visible(asearch -> info[1])) gtk_widget_show (asearch -> info[1]); } } } else { was_object = (asearch -> object) ? 1 : 0; asearch -> object = gtk_combo_box_get_active (box); filter = get_asearch_filter (asearch); object = (asearch -> object) ? 1 : 0; if (is_the_widget_visible(asearch -> id_box)) gtk_widget_hide (asearch -> id_box); if (is_the_widget_visible(asearch -> info[1])) gtk_widget_hide (asearch -> info[1]); } if (was_object) { combo_text_prepend (asearch -> filter_box, "Chemical species"); if (asearch -> action == RANMOVE) { rot_c = gtk_tree_view_get_column (GTK_TREE_VIEW(asearch -> atom_tree), 4); gtk_tree_view_remove_column (GTK_TREE_VIEW(asearch -> atom_tree), rot_c); } } if (object) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> filter_box, 0); if (asearch -> action == RANMOVE) { GtkCellRenderer * rot = gtk_cell_renderer_toggle_new (); g_signal_connect (G_OBJECT(rot), "toggled", G_CALLBACK(select_atom), & asearch -> pointer[2]); int i = 5; rot_c = gtk_tree_view_column_new_with_attributes ("Rotate", rot, "active", i, NULL); gtk_tree_view_column_set_clickable (rot_c, TRUE); g_signal_connect (G_OBJECT(rot_c), "clicked", G_CALLBACK(select_all_atoms), & asearch -> pointer[2]); gtk_tree_view_column_set_alignment (rot_c, 0.5); gtk_tree_view_insert_column (GTK_TREE_VIEW(asearch -> atom_tree), rot_c, i-1); } } if (asearch -> action == DISPL) widget_set_sensitive (get_project_by_id(asearch -> proj) -> modelgl -> atom_win -> at_expand[2], object); gtk_combo_box_set_active (GTK_COMBO_BOX(asearch -> filter_box), 0); set_filter_changed (GTK_COMBO_BOX(asearch -> filter_box), asearch); } /*! \fn void add_random_column (atom_search * asearch) \brief add a column to the search tree model for the case of random search \param asearch the target atom search */ void add_random_column (atom_search * asearch) { int i = 8 - asearch -> action; GtkCellRenderer * num = gtk_cell_renderer_text_new (); g_object_set (num, "editable", TRUE, NULL); g_signal_connect (G_OBJECT(num), "editing-started", G_CALLBACK(to_edit_coords), & asearch -> pointer[0]); GtkTreeViewColumn * num_c = gtk_tree_view_column_new_with_attributes ("Number", num, "text", i, NULL); gtk_tree_view_column_set_cell_data_func (num_c, num, search_set_visible, GINT_TO_POINTER(i), NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(asearch -> atom_tree), num_c); } /*! \fn G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data) \brief change search mode \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_search_mode (GtkComboBox * box, gpointer data) { atom_search * asearch = (atom_search *)data; project * this_proj = get_project_by_id(asearch -> proj); asearch -> mode = gtk_combo_box_get_active (box); if ((asearch -> action == REPLACE || asearch -> action == REMOVE) && asearch -> atom_tree) { if (! asearch -> mode) { GtkTreeViewColumn * num_c; num_c = gtk_tree_view_get_column (GTK_TREE_VIEW(asearch -> atom_tree), 8 - asearch -> action); gtk_tree_view_remove_column (GTK_TREE_VIEW(asearch -> atom_tree), num_c); } else { add_random_column (asearch); } } if (this_proj -> natomes >= 10000) { if (asearch -> object_box) { if (asearch -> mode) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> object_box, 3); gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> object_box, 1); } else { gtk_combo_box_text_insert ((GtkComboBoxText *)asearch -> object_box, 1, NULL, "Atom(s): all"); combo_text_append (asearch -> object_box, "Group of atoms: all"); } } } else { gtk_combo_box_text_remove_all ((GtkComboBoxText *)asearch -> object_box); combo_text_append (asearch -> object_box, "Atom(s)"); combo_text_append (asearch -> object_box, "Group of atoms"); } /*if (asearch -> filter_box) { if (! this_proj -> modelgl -> adv_bonding[1] && this_proj -> modelgl -> atom_win -> adv_bonding[1]) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> filter_box, 3+i); } if (! this_proj -> modelgl -> adv_bonding[0] && this_proj -> modelgl -> atom_win -> adv_bonding[0]) { gtk_combo_box_text_remove ((GtkComboBoxText *)asearch -> filter_box, 2+i); } gtk_combo_box_set_active (GTK_COMBO_BOX(asearch -> filter_box), 0); set_filter_changed (GTK_COMBO_BOX(asearch -> filter_box), asearch); }*/ gtk_combo_box_set_active (GTK_COMBO_BOX(asearch -> object_box), 0); set_object_changed (GTK_COMBO_BOX(asearch -> object_box), asearch); } /*! \fn G_MODULE_EXPORT void set_search_digit (GtkEntry * res, gpointer data) \brief update search entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_search_digit (GtkEntry * res, gpointer data) { atom_search * asearch = (atom_search *) data; const gchar * m = entry_get_text (res); double v = atof(m); asearch -> search_digit = (int)v; if (asearch -> search_digit <= 0) { asearch -> search_digit --; update_entry_text (res, ""); } else { update_entry_int (res, asearch -> search_digit); } set_spec_changed (GTK_COMBO_BOX(asearch -> atom_box), data); } /*! \fn void prep_search_box (GtkWidget * vbox, GtkWidget * lab, GtkWidget * combo) \brief prepare some search widgets \param vbox the box to insert the search box in \param lab the GtkWidget sending the signal \param combo the GtkWidget sending the signal */ void prep_search_box (GtkWidget * vbox, GtkWidget * lab, GtkWidget * combo) { GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, lab, FALSE, FALSE, 30); GtkWidget * fixed = gtk_fixed_new (); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fixed, FALSE, FALSE, 10); gtk_widget_set_size_request (combo, 175, -1); gtk_fixed_put (GTK_FIXED(fixed), combo, 0, 0); } /*! \fn GtkWidget * prepare_box_too_much (atom_search * asearch) \brief if too many atoms, then individual search \param asearch the target atom search */ GtkWidget * prepare_box_too_much (atom_search * asearch) { GtkWidget * box; GtkWidget * widg; GtkWidget * too_box = create_vbox (BSEP); widg = bbox (too_box, "\t Atom species: "); gtk_widget_set_size_request (widg, 200, -1); asearch -> entry_a = create_entry (G_CALLBACK(set_atom), 90, 15, TRUE, asearch); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> entry_a, FALSE, FALSE, 0); asearch -> img_a = stock_image (DIAL_ERROR); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> img_a, FALSE, FALSE, 5); widg = bbox (too_box, "\t Atom Id: "); gtk_widget_set_size_request (widg, 200, -1); asearch -> entry_b = create_entry (G_CALLBACK(set_id), 90, 15, TRUE, asearch); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> entry_b, FALSE, FALSE, 0); asearch -> img_b = stock_image (DIAL_ERROR); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, widg, asearch -> img_b, FALSE, FALSE, 5); box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, too_box, box, FALSE, FALSE, 5); asearch -> but_a = create_button ("Add", IMG_NONE, NULL, 75, -1, GTK_RELIEF_NORMAL, G_CALLBACK(add_atom), asearch); widget_set_sensitive (asearch -> but_a, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, asearch -> but_a, FALSE, FALSE, 75); asearch -> but_b = create_button ("Remove", IMG_NONE, NULL, 75, -1, GTK_RELIEF_NORMAL, G_CALLBACK(remove_atom), asearch); widget_set_sensitive (asearch -> but_b, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, box, asearch -> but_b, FALSE, FALSE, 0); return too_box; } /*! \fn GtkWidget * selection_tab (atom_search * asearch, int nats) \brief create the search widget \param asearch the target atom search \param nats the total number of atoms */ GtkWidget * selection_tab (atom_search * asearch, int nats) { project * this_proj = get_project_by_id (asearch -> proj); int i, j; i = (nats < 10000) ? 1 : 0; j = (asearch -> action == 5) ? 300 : -1; GtkWidget * selection = create_layout (j, 390 + (! i)*60 - i*100); GtkWidget * vbox = add_vbox_to_layout (selection, 0, (asearch -> action > 1) ? 0 : 10); GtkWidget * hbox, * vvbox; GtkWidget * lab; if (asearch -> action != 5) { // Later on simply hide info[1] (to much atoms info) if needed for (j=0; j<2; j++) { asearch -> info[j] = create_vbox (BSEP); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, asearch -> info[j], FALSE, FALSE, 0); } hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[0], hbox, FALSE, FALSE, 2); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(".", 5, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Search: ", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); asearch -> object_box = create_combo (); combo_text_append (asearch -> object_box, "Atom(s)"); if (! i) combo_text_append (asearch -> object_box, "Atom(s): all"); combo_text_append (asearch -> object_box, "Group of atoms"); if (! i) combo_text_append (asearch -> object_box, "Group of atoms: all"); gtk_combo_box_set_active (GTK_COMBO_BOX(asearch -> object_box), asearch -> object); asearch -> filter_box = create_combo (); gchar * filters[5]={"Chemical species", "Total coordination", "Partial coordination", "Fragment", "Molecule"}; for (j=0; j<3; j++) combo_text_append (asearch -> filter_box, filters[j]); if (this_proj -> modelgl -> adv_bonding[0]) combo_text_append (asearch -> filter_box, filters[3]); if (this_proj -> modelgl -> adv_bonding[1]) combo_text_append (asearch -> filter_box, filters[4]); gtk_combo_box_set_active (GTK_COMBO_BOX(asearch -> filter_box), asearch -> filter); asearch -> atom_box = create_combo (); combo_text_append (asearch -> atom_box, "All"); for (j=0; j nspec; j++) combo_text_append (asearch -> atom_box, this_proj -> chemistry -> label[j]); gtk_combo_box_set_active (GTK_COMBO_BOX(asearch -> atom_box), asearch -> spec); g_signal_connect (G_OBJECT (asearch -> object_box), "changed", G_CALLBACK(set_object_changed), asearch); g_signal_connect (G_OBJECT (asearch -> filter_box), "changed", G_CALLBACK(set_filter_changed), asearch); g_signal_connect (G_OBJECT (asearch -> atom_box), "changed", G_CALLBACK(set_spec_changed), asearch); GtkWidget * entry = create_entry (G_CALLBACK(set_search_digit), 90, 15, TRUE, asearch); if (asearch -> action < 2) { prep_search_box (asearch -> info[0], markup_label("For: ", 100, -1, 0.0, 0.5), asearch -> object_box); prep_search_box (asearch -> info[0], markup_label("Filter by: ", 100, -1, 0.0, 0.5), asearch -> filter_box); prep_search_box (asearch -> info[0], markup_label("Species: ", 100, -1, 0.0, 0.5), asearch -> atom_box); asearch -> id_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[0], asearch -> id_box, FALSE, FALSE, 0); prep_search_box (asearch -> id_box, markup_label("Atom Id: ", 100, -1, 0.0, 0.5), entry); } else { hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[0], hbox, FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("For: ", -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> object_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Filter by: ", -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> filter_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label("Species: ", -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> atom_box, FALSE, FALSE, 0); asearch -> id_box = create_hbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, asearch -> id_box, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, asearch -> id_box, markup_label("Atom Id: ", -1, -1, 0.0, 0.5), FALSE, FALSE, 10); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, asearch -> id_box, entry, FALSE, FALSE, 0); } // If more than 10 000 atoms: if (asearch -> action < 2) { lab = markup_label("\tThe number of atoms in the model is too large\n" "\t\tto display and browse the entire list !\n" "\tYou need to search for object(s) manually:", -1, -1, 0.5, 0.5); } else { lab = markup_label("The number of atoms in the model is too large to display and browse the entire list !\n" "\t\t\t\tYou need to search for object(s) manually:", -1, -1, 0.5, 0.5); } add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[1], lab, FALSE, FALSE, 10); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[1], hbox, FALSE, FALSE, 0); /* vvbox = create_vbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 80); cbox = create_combo (); combo_text_append (cbox, "All objects"); combo_text_append (cbox, "Selection"); g_signal_connect (G_OBJECT(cbox), "changed", G_CALLBACK(set_too_much_type), asearch); gtk_combo_box_set_active (GTK_COMBO_BOX(cbox), asearch -> too_much); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, cbox, FALSE, FALSE, 30); // asearch -> big_box = // Combo box with "All objects", "Selection" */ vvbox = create_vbox (0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, vvbox, FALSE, FALSE, 120); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, prepare_box_too_much (asearch), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, asearch -> info[1], markup_label("The search must be performed using species and/or ID.\n" "Use the filters above to define the object(s) of the search", -1, -1, 0.5, 0.5), FALSE, FALSE, 5); } abox (vbox, "Selection: ", 2); hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); GtkWidget * scrollsets = create_scroll (NULL, -1, -1, GTK_SHADOW_ETCHED_IN); i = (asearch -> action < 2) ? 0 : 1; j = (asearch -> action < 2) ? 1 : 0; if (asearch -> action < 2) { gtk_widget_set_size_request (scrollsets, 400+i*100, 270); } else { gtk_widget_set_size_request (scrollsets, 400+i*100, 290-i*120); } gtk_widget_set_hexpand (scrollsets, TRUE); add_container_child (CONTAINER_SCR, scrollsets, create_atoms_tree (asearch, this_proj, nats)); check_all_trees (this_proj); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, scrollsets, FALSE, FALSE, 100-j*75); return selection; } Atomes-GNU-1.1.14/src/opengl/win/w_sequencer.c000066400000000000000000000367401457665371200210430ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_sequencer.c * @short Functions to create the MD sequencer window * @author Sébastien Le Roux */ /* * This file: 'w_sequencer.c' * * Contains: * - The functions to create the MD sequencer window * * List of functions: static gboolean animate (gpointer data); static gboolean seq_wait_for_stop (gpointer data); void set_player_title (glwin * view); void update_selection (glwin * view, int o_step); void update_step_button (glwin * view); void sequence (glwin * view, int o_step, int n_step); G_MODULE_EXPORT void seq_go_previous (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_first (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_last (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_go_to (GtkEntry * res, gpointer data); G_MODULE_EXPORT void seq_jump (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_play (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_loop (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_faster (GtkButton * but, gpointer data); G_MODULE_EXPORT void seq_slower (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data); */ #include "global.h" #include "interface.h" #include "callbacks.h" #include "glview.h" #include "glwindow.h" /*! \fn void set_player_title (glwin * view) \brief set sequencer window title \param view the target glwin */ void set_player_title (glwin * view) { int step = view -> anim -> last -> img -> step + 1; gchar * str = g_strdup_printf ("%s - player - step %d", prepare_for_title (get_project_by_id(view -> proj) -> name), step); gtk_window_set_title (GTK_WINDOW(view -> player -> win), str); g_free (str); } /*! \fn void update_selection (glwin * view, int o_step) \brief match and udpate selected atom()s from o_step to the active step \param view the target glwin \param o_step the step to match selection with */ void update_selection (glwin * view, int o_step) { int i, j, k; i = view -> anim -> last -> img -> step; project * this_proj = get_project_by_id(view -> proj); for (k=0; k<2; k++) { view -> anim -> last -> img -> selected[k] -> selected = 0; view -> anim -> last -> img -> selected[k] -> first = NULL; view -> anim -> last -> img -> selected[k] -> last = NULL; for (j=0; j natomes; j++) { if (this_proj -> atoms[o_step][j].pick[k]) { this_proj -> atoms[i][j].pick[k] = FALSE; process_selected_atom (this_proj, view, j, 0, 0, k); } if (this_proj -> atoms[o_step][j].label[k]) { this_proj -> atoms[i][j].label[k] = TRUE; } } update_all_selections (view, k); } } /*! \fn void update_step_button (glwin * view) \brief correct widget buttons sensitivity based on MD step \param view the target glwin */ void update_step_button (glwin * view) { if (view -> anim -> last -> img -> step == get_project_by_id(view -> proj) -> steps - 1) { widget_set_sensitive (view -> player -> first, 1); widget_set_sensitive (view -> player -> prev, 1); widget_set_sensitive (view -> player -> last, 0); widget_set_sensitive (view -> player -> next, 0); } else if (view -> anim -> last -> img -> step == 0) { widget_set_sensitive (view -> player -> first, 0); widget_set_sensitive (view -> player -> prev, 0); widget_set_sensitive (view -> player -> last, 1); widget_set_sensitive (view -> player -> next, 1); } else { widget_set_sensitive (view -> player -> first, 1); widget_set_sensitive (view -> player -> prev, 1); widget_set_sensitive (view -> player -> last, 1); widget_set_sensitive (view -> player -> next, 1); } } /*! \fn void sequence (glwin * view, int o_step, int n_step) \brief sequence to next step \param view the target glwin \param o_step actual step \param n_step next step */ void sequence (glwin * view, int o_step, int n_step) { int i; for (i=0; i<2; i++) save_all_selections (view, i); view -> anim -> last -> img -> step = n_step; update_selection (view, o_step); for (i=0; i proj), i)) view -> n_shaders[i][n_step] = -1; } recreate_all_shaders (view); set_player_title (view); update_step_button (view); update (view); } /*! \fn G_MODULE_EXPORT void seq_go_previous (GtkButton * but, gpointer data) \brief go to previous frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_previous (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (view -> anim -> last -> img -> step > 0) { sequence (view, view -> anim -> last -> img -> step, view -> anim -> last -> img -> step - 1); } } /*! \fn G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data) \brief go to next frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_next (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; project * this_proj = get_project_by_id(view -> proj); if (view -> anim -> last -> img -> step < this_proj -> steps-1) { sequence (view, view -> anim -> last -> img -> step, view -> anim -> last -> img -> step + 1); } } /*! \fn G_MODULE_EXPORT void seq_go_first (GtkButton * but, gpointer data) \brief go to first frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_first (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; sequence (view, view -> anim -> last -> img -> step, 0); } /*! \fn G_MODULE_EXPORT void seq_go_last (GtkButton * but, gpointer data) \brief got to last frame \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_last (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; sequence (view, view -> anim -> last -> img -> step, get_project_by_id(view -> proj) -> steps - 1); } /*! \fn G_MODULE_EXPORT void seq_go_to (GtkEntry * res, gpointer data) \brief jump to frame \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_go_to (GtkEntry * res, gpointer data) { glwin * view = (glwin *) data; const gchar * m = entry_get_text (res); int s = (int)atof(m); project * this_proj = get_project_by_id(view -> proj); if (s > 0 && s <= this_proj -> steps) { sequence (view, view -> anim -> last -> img -> step, s-1); } update_entry_int (res, this_proj -> modelgl -> anim -> last -> img -> step+1); } /*! \fn G_MODULE_EXPORT void seq_jump (GtkButton * but, gpointer data) \brief jump to frame dialog \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_jump (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; GtkWidget * win = dialogmodal ("Enter a step number", GTK_WINDOW(view -> player -> win)); GtkWidget * vbox = dialog_get_content_area (win); GtkWidget * hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, TRUE, TRUE, 0); gchar * str = g_strdup_printf ("Step number [%d-%d]: ", 1, get_project_by_id(view -> proj) -> steps); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new (str), TRUE, TRUE, 0); g_free (str); GtkWidget * step = create_entry (G_CALLBACK(seq_go_to), 100, 15, TRUE, (gpointer)view); update_entry_int (GTK_ENTRY(step), view -> anim -> last -> img -> step+1); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, step, FALSE, FALSE, 0); run_this_gtk_dialog (win, G_CALLBACK(run_destroy_dialog), NULL); } /*! \fn static gboolean animate (gpointer data) \brief animate \param data the associated data pointer */ static gboolean animate (gpointer data) { glwin * view = (glwin *) data; if (view -> play) { if (view -> anim -> last -> img -> step < get_project_by_id(view -> proj) -> steps-1) { sequence (view, view -> anim -> last -> img -> step, view -> anim -> last -> img -> step+1); } else if (view -> loop) { sequence (view, view -> anim -> last -> img -> step, 0); } else { view -> play = FALSE; view -> stop = TRUE; } } else { view -> play = FALSE; view -> stop = TRUE; } return view -> play; } /*! \fn G_MODULE_EXPORT void seq_play (GtkButton * but, gpointer data) \brief play \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_play (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (! view -> play) { view -> play = TRUE; view -> stop = FALSE; g_timeout_add (view -> speed, (GSourceFunc) animate, view); } } /*! \fn G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data) \brief stop \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_stop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; view -> play = FALSE; } /*! \fn G_MODULE_EXPORT void seq_loop (GtkButton * but, gpointer data) \brief loop the animation \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_loop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; if (view -> loop) { view -> loop = FALSE; button_set_image (but, NULL, IMG_STOCK, MEDIA_LOOP); } else { view -> loop = TRUE; button_set_image (but, NULL, IMG_STOCK, MEDIA_ULOOP); } show_the_widgets (GTK_WIDGET(but)); } /*! \fn static gboolean seq_wait_for_stop (gpointer data) \brief pause / restart if on pause \param data the associated data pointer */ static gboolean seq_wait_for_stop (gpointer data) { glwin * view = (glwin *) data; if (view -> stop) { seq_play (NULL, data); return FALSE; } else { return TRUE; } } /*! \fn G_MODULE_EXPORT void seq_faster (GtkButton * but, gpointer data) \brief go faster \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_faster (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; int oldspeed; if (view -> play && view -> speed > 4) { oldspeed = view -> speed; if (view -> speed == 5) { view -> speed -= 1; } else { view -> speed -= 5; } view -> play = FALSE; g_timeout_add (oldspeed, (GSourceFunc) seq_wait_for_stop, view); } } /*! \fn G_MODULE_EXPORT void seq_slower (GtkButton * but, gpointer data) \brief go slower \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void seq_slower (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; int oldspeed; if (view -> play && view -> speed < 10000) { oldspeed = view -> speed; if (view -> speed == 1) { view -> speed = 5; } else { view -> speed += 5; } view -> play = FALSE; g_timeout_add (oldspeed, (GSourceFunc) seq_wait_for_stop, view); } } /*! \fn G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data) \brief create the sequencer window \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_sequencer (GtkWidget * widg, gpointer data) { //int p; glwin * view = (glwin *) data; if (view -> player == NULL) { //p = view -> proj; view -> player = g_malloc0 (sizeof*view -> player); view -> player -> win = create_win (" ", view -> win, FALSE, FALSE); set_player_title (view); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, view -> player -> win, vbox); // First line GtkWidget * hboxa = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hboxa, TRUE, TRUE, 0); // First view -> player -> first = create_button ("First", IMG_STOCK, MEDIA_FIRST, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_first), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> first, TRUE, TRUE, 0); // Previous view -> player -> prev = create_button ("Previous", IMG_STOCK, MEDIA_PREV, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_previous), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> prev, TRUE, TRUE, 0); // Next view -> player -> next = create_button ("Next", IMG_STOCK, MEDIA_NEXT, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_next), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> next, TRUE, TRUE, 0); // Last view -> player -> last = create_button ("Last", IMG_STOCK, MEDIA_LAST, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_go_last), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> last, TRUE, TRUE, 0); // JumpTo view -> player -> jump = create_button ("Go to", IMG_STOCK, MEDIA_GOTO, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_jump), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxa, view -> player -> jump, TRUE, TRUE, 0); // Second line GtkWidget * hboxb = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hboxb, TRUE, TRUE, 0); // Play view -> player -> play = create_button ("Play", IMG_STOCK, MEDIA_PLAY, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_play), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> play, TRUE, TRUE, 0); // Stop view -> player -> stop = create_button ("Stop", IMG_STOCK, MEDIA_STOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_stop), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> stop, TRUE, TRUE, 0); // Loop view -> player -> loop = create_button ("Loop", IMG_STOCK, MEDIA_LOOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_loop), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> loop, TRUE, TRUE, 0); // Faster view -> player -> fast = create_button ("Faster", IMG_STOCK, MEDIA_FAST, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_faster), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> fast, TRUE, TRUE, 0); // Slower view -> player -> slow = create_button ("Slower", IMG_STOCK, MEDIA_SLOW, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(seq_slower), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hboxb, view -> player -> slow, TRUE, TRUE, 0); add_gtk_close_event (view -> player -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> player -> win); update_step_button (view); } else { gtk_widget_show (view -> player -> win); } } Atomes-GNU-1.1.14/src/opengl/win/w_spiner.c000066400000000000000000000134361457665371200203460ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_spiner.c * @short Functions to create the 'Spin' window * @author Sébastien Le Roux */ /* * This file: 'w_spiner.c' * * Contains: * - The functions to create the 'Spin' window * * List of functions: gboolean spin (gpointer data); static gboolean spin_wait_for_stop (gpointer data); G_MODULE_EXPORT void spin_go (GtkButton * but, gpointer data); G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data); G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data); */ #include "global.h" #include "glview.h" extern void save_rotation_quaternion (glwin * view); extern void rotate_x_y (glwin * view, double angle_x, double angle_y); /*! \fn gboolean spin (gpointer data) \brief spin \param data the associated data pointer */ gboolean spin (gpointer data) { tint * val = (tint *) data; project * this_proj = get_project_by_id(val -> a); #ifdef DEBUG // g_debug (":: SPIN:: a= %d, c= %d", val -> a, val -> c); // g_debug (":: SPIN:: speed[c]= %d", this_proj -> modelgl -> spin_speed[val -> c]); #endif if (this_proj -> modelgl -> spin[val -> c]) { save_rotation_quaternion (this_proj -> modelgl); double cameraAngle[2] = {0.0, 0.0}; cameraAngle[val -> c] = 0.1 * this_proj -> modelgl -> spin_speed[val -> c]; rotate_x_y (this_proj -> modelgl, cameraAngle[0], cameraAngle[1]); update (this_proj -> modelgl); return TRUE; } else { return FALSE; } } /*! \fn static gboolean spin_wait_for_stop (gpointer data) \brief spin and wait for stop \param data the associated data pointer */ static gboolean spin_wait_for_stop (gpointer data) { tint * val = (tint *) data; if (get_project_by_id(val -> a) -> modelgl -> spin[val -> c]) { return TRUE; } else { return FALSE; } } /*! \fn G_MODULE_EXPORT void spin_go (GtkButton * but, gpointer data) \brief start spin \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void spin_go (GtkButton * but, gpointer data) { tint * val = (tint *) data; glwin * view = get_project_by_id(val -> a) -> modelgl; int s = val -> b - 2; #ifdef DEBUG // g_debug (":: SPIN_GO:: a= %d, b= %d, c= %d, d=%d", val -> a, val -> b, val -> c, s); // g_debug (":: SPIN_GO:: speed[b]= %d", view -> spin_speed[val -> c]); #endif view -> spin_speed[val -> c] += s; if (view -> spin_speed[val -> c] == 0) { view -> spin[val -> c] = FALSE; g_timeout_add (REFRESH, (GSourceFunc) spin_wait_for_stop, data); } else if (! view -> spin[val -> c]) { view -> spin[val -> c] = TRUE; g_timeout_add (REFRESH, (GSourceFunc) spin, data); } } /*! \fn G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data) \brief stop spin \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void spin_stop (GtkButton * but, gpointer data) { glwin * view = (glwin *) data; int i; for (i=0; i<2; i++) { view -> spin[i] = FALSE; view -> spin_speed[i] = 0; } //set_sensitive_coord_menu (view, TRUE); } /*! \fn G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data) \brief create the spin window callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_spinner (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> spiner == NULL) { view -> spiner = g_malloc0 (sizeof*view -> spiner); gchar * str = g_strdup_printf ("%s - spin", prepare_for_title(get_project_by_id(view -> proj) -> name)); view -> spiner -> win = create_win (str, view -> win, FALSE, FALSE); g_free (str); GtkWidget * table = gtk_grid_new (); add_container_child (CONTAINER_WIN, view -> spiner -> win, table); view -> spiner -> right = create_button ("Right", IMG_STOCK, GO_RIGHT, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[1][1]); view -> spiner -> left = create_button ("Left", IMG_STOCK, GO_LEFT, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[3][1]); view -> spiner -> stop = create_button ("Stop", IMG_STOCK, MEDIA_STOP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_stop), view); view -> spiner -> up = create_button ("Up", IMG_STOCK, GO_UP, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[3][0]); view -> spiner -> down = create_button ("Down", IMG_STOCK, GO_DOWN, -1, -1, GTK_RELIEF_NONE, G_CALLBACK(spin_go), & view -> colorp[1][0]); gtk_grid_attach (GTK_GRID (table), view -> spiner -> right, 2,1,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> left, 0,1,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> stop, 1,1,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> up, 1,0,1,1); gtk_grid_attach (GTK_GRID (table), view -> spiner -> down, 1,2,1,1); add_gtk_close_event (view -> spiner -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> spiner -> win); gtk_window_set_resizable (GTK_WINDOW(view -> spiner -> win), FALSE); } else { gtk_widget_show (view -> spiner -> win); } } Atomes-GNU-1.1.14/src/opengl/win/w_volumes.c000066400000000000000000001334711457665371200205420ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file w_volumes.c * @short Functions to create the 'Volumes' window \n Functions to compute system / fragment / molecular volumes * @author Sébastien Le Roux */ /* * This file: 'w_volumes.c' * * Contains: * - The functions to create the 'Volumes' window - The functions to compute system / fragment / molecular volumes * * List of functions: double cap_volume (double ht, double dh); double get_sphere_caps_volume (double dab, double rad, double rbd); double sphere_volume (double rad); double get_atoms_volume (project * this_proj, int rid, int sid, int gid, int gcid); double molecular_volume (int nats, atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang); double get_atoms_box (project * this_proj, int rid, int sid, int geo, int gid); void clean_volumes_data (glwin * view); void adjust_vol_md_step (project * this_proj, int geo); void add_frag_mol_vol_data (GtkWidget * vbox, project * this_proj, glwin * view, int geo); G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data); G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data); G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data); G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data); G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data); G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data); G_MODULE_EXPORT void update_vol_frag_mol_search (GtkEntry * res, gpointer data); G_MODULE_EXPORT void set_angular_precision (GtkComboBox * box, gpointer data); G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data); GtkWidget * frag_mol_volume_search (project * this_proj, int g); GtkWidget * frag_mol_volume_tab (glwin * view, int geo); GtkWidget * vol_model_tab (glwin * view); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "glview.h" #include "atom_edit.h" extern void center_this_molecule (glwin * view); extern double draw_cuboid (gboolean draw, int SHADID, int shadnum, mat4_t rot, vec3_t cpos, double paral[3][3], ColRGBA col, double slab_alpha); /*! \fn void clean_volumes_data (glwin * view) \brief clean volume data \param view the target glwin */ void clean_volumes_data (glwin * view) { if (view -> volume_win) { if (view -> volume_win -> win) { destroy_this_widget (view -> volume_win -> win); } g_free (view -> volume_win); view -> volume_win = NULL; } int i, j; for (i=0; i atoms_volume[i]) g_free (view -> atoms_volume[i]); view -> atoms_volume[i] = NULL; if (view -> atoms_ppvolume[i]) g_free (view -> atoms_ppvolume[i]); view -> atoms_ppvolume[i] = NULL; if (view -> volume_box[i]) g_free (view -> volume_box[i]); view -> volume_box[i] = NULL; view -> comp_vol[i] = FALSE; view -> anim -> last -> img -> show_vol[i] = FALSE; } for (i=0; i<2; i++) { for (j=0; j frag_mol_volume[i][j]) g_free (view -> frag_mol_volume[i][j]); view -> frag_mol_volume[i][j] = NULL; if (view -> frag_mol_ppvolume[i][j]) g_free (view -> frag_mol_ppvolume[i][j]); view -> frag_mol_ppvolume[i][j] = NULL; if (! i) { if (view -> frag_box[j]) g_free (view -> frag_box[j]); view -> frag_box[j] = NULL; } if (view -> fm_comp_vol[i][j]) g_free (view -> fm_comp_vol[i][j]); view -> fm_comp_vol[i][j] = NULL; if (view -> anim -> last -> img -> fm_show_vol[i][j]) g_free (view -> anim -> last -> img -> fm_show_vol[i][j]); view -> anim -> last -> img -> fm_show_vol[i][j] = NULL; if (view -> anim -> last -> img -> fm_vol_col[i][j]) g_free (view -> anim -> last -> img -> fm_vol_col[i][j]); view -> anim -> last -> img -> fm_vol_col[i][j] = NULL; } } int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, get_project_by_id(view -> proj)); } /*! \fn double cap_volume (double ht, double dh) \brief compute cap volume \param ht cap height \param dh sphere radius */ double cap_volume (double ht, double dh) { return (pi/3.0)*ht*ht*(3*dh-ht); } /*! \fn double get_sphere_caps_volume (double dab, double rad, double rbd) \brief compute sphere cap volume \param dab distance between the center of the 2 spheres \param rad sphere a radius \param rbd sphere b radius */ double get_sphere_caps_volume (double dab, double rad, double rbd) { double h1, h2; double px; double rmi, rma; rmi = min (rad, rbd); rma = max (rad, rbd); px = (dab*dab - rmi*rmi + rma*rma) / (2.0*dab); h1 = rma - px; h2 = rmi - (dab - px); return cap_volume (h1, rma) + cap_volume (h2, rmi); } /*! \fn double sphere_volume (double rad) \brief compute sphere volume \param rad sphere radius */ double sphere_volume (double rad) { return ((4.0*pi)/3.0)*rad*rad*rad; } /*! \fn double get_atoms_volume (project * this_proj, int rid, int sid, int gid, int gcid) \brief compute exact atomic volume for all system or fragment or molecule \param this_proj the target project \param rid the type of atomic radius(ii) \param sid the MD step \param gid -1 = all system, 2 = fragment(s), 3 = molecule(s) \param gcid fragment or molecule id number */ double get_atoms_volume (project * this_proj, int rid, int sid, int gid, int gcid) { int i, j, k, l, m, n, o; double vol = 0.0; double cap_vol = 0.0; double * rvdws = allocdouble (this_proj -> nspec); distance dist; for (i=0; i nspec; i++) { j = (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]; rvdws[i] = set_radius_ (& j, & rid); } for (j=0; j<2; j++) { for (k=0; k modelgl -> bonds[sid][j]; k++) { l = this_proj -> modelgl -> bondid[sid][j][k][0]; m = this_proj -> atoms[sid][l].sp; n = this_proj -> modelgl -> bondid[sid][j][k][1]; o = this_proj -> atoms[sid][n].sp; if (gid < 0 || this_proj -> atoms[sid][l].coord[gid] == gcid) { dist = distance_3d (& this_proj -> cell, (this_proj -> cell.npt) ? sid : 0, & this_proj -> atoms[sid][l], & this_proj -> atoms[sid][n]); if (dist.length < rvdws[m]+rvdws[o]) cap_vol += get_sphere_caps_volume (dist.length, rvdws[m], rvdws[o]); } } } vol = 0.0; if (gid < 0) { for (i=0; i nspec; i++) { vol += this_proj -> chemistry -> nsps[i] * sphere_volume (rvdws[i]); } vol -= cap_vol; } else { if (gid == 3) { for (i=0; i nspec; i++) { vol += this_proj -> modelfc -> mols[sid][gcid].species[i] * sphere_volume (rvdws[i]); } vol *= this_proj -> modelfc -> mols[sid][gcid].multiplicity; vol -= cap_vol; vol /= this_proj -> modelfc -> mols[sid][gcid].multiplicity; } else { for (i=0; i natomes; i++) { if (this_proj -> atoms[sid][i].coord[gid] == gcid) { j = this_proj -> atoms[sid][i].sp; vol += sphere_volume (rvdws[j]); } } vol -= cap_vol; } } g_free (rvdws); return vol; } double vamin[3], vamax[3]; /*! \fn double molecular_volume (int nats, atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang) \brief compute volume \param nats number of atoms \param ats_vol the list of atom(s) \param baryc barycenter of the atomic coordinates \param rvdws the list of atomic radius (ii) \param a_ang x axis rotation angle \param b_ang y axis rotation angle \param c_ang z axis rotation angle */ double molecular_volume (int nats, atom * ats_vol, double baryc[3], double * rvdws, double a_ang, double b_ang, double c_ang) { double paral[3][3]; mat4_t rot; vec3_t c_old, c_new; rot = m4_rotation_xyz (a_ang, b_ang, c_ang); int i, j, k; k = 0; for (i=0; i nspec); for (i=0; i nspec; i++) { j = (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]; rvdws[i] = set_radius_ (& j, & rid); } if (geo < 0) center_this_molecule (this_proj -> modelgl); int a_ang, b_ang, c_ang; double val, vbl; int finess = pow (10, this_proj -> modelgl -> volume_win -> angp); int nats; atom * ats_vol = NULL; atomic_object * object = NULL; gboolean rtmp; double * baryc; switch (geo) { case 2: object_motion = TRUE; rtmp = this_proj -> modelgl -> rebuild[0][0]; this_proj -> modelgl -> rebuild[0][0] = TRUE; object = create_object_from_frag_mol (this_proj, geo, gid, NULL); object_motion = FALSE; this_proj -> modelgl -> rebuild[0][0] = rtmp; nats = object -> atoms; baryc = duplicate_double (3, object -> baryc); ats_vol = object -> at_list; break; default: nats = this_proj -> natomes; ats_vol = this_proj -> atoms[sid]; baryc = allocdouble (3); break; } for (a_ang=0; a_ang < 90*finess; a_ang ++) { for (b_ang=0; b_ang < 90*finess; b_ang ++) { for (c_ang=0; c_ang < 90*finess; c_ang ++) { val = molecular_volume (nats, ats_vol, baryc, rvdws, a_ang/finess, b_ang/finess, c_ang/finess); if (a_ang == 0 && b_ang == 0 && c_ang == 0) { vbl = val; if (geo < 0) { for (i=0; i<3; i++) { this_proj -> modelgl -> volume_box[rid][sid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> volume_box[rid][sid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> volume_box[rid][sid][3] = a_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][4] = b_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][5] = c_ang/finess; } else { for (i=0; i<3; i++) { this_proj -> modelgl -> frag_box[rid][sid][gid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> frag_box[rid][sid][gid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> frag_box[rid][sid][gid][3] = a_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][4] = b_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][5] = c_ang/finess; } } else if (val < vbl) { vbl = val; if (geo < 0) { for (i=0; i<3; i++) { this_proj -> modelgl -> volume_box[rid][sid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> volume_box[rid][sid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> volume_box[rid][sid][3] = a_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][4] = b_ang/finess; this_proj -> modelgl -> volume_box[rid][sid][5] = c_ang/finess; } else { for (i=0; i<3; i++) { this_proj -> modelgl -> frag_box[rid][sid][gid][i] = vamax[i] - vamin[i]; this_proj -> modelgl -> frag_box[rid][sid][gid][i+6] = (vamax[i] + vamin[i]) / 2.0; } this_proj -> modelgl -> frag_box[rid][sid][gid][3] = a_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][4] = b_ang/finess; this_proj -> modelgl -> frag_box[rid][sid][gid][5] = c_ang/finess; } } else { break; } } } } ats_vol = NULL; g_free (rvdws); g_free (baryc); if (geo == 2) g_free (object); return vbl; } /*! \fn G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data) \brief compute volume \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void molecular_volumes (GtkButton * but, gpointer data) { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); int i; for (i=0; i steps; i++) this_proj -> modelgl -> atoms_ppvolume[dat -> b][i] = get_atoms_box (this_proj, dat -> b, i, -1, 0); this_proj -> modelgl -> comp_vol[dat -> b] = TRUE; widget_set_sensitive (this_proj -> modelgl -> volume_win -> hbvol[dat -> b], this_proj -> modelgl -> comp_vol[dat -> b]); double movol = 0.0; for (i=0; i steps; i++) movol += this_proj -> modelgl -> atoms_ppvolume[dat -> b][i]; movol /= this_proj -> steps; gchar * str = g_strdup_printf ("%15.3f", movol); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> lab_vol[dat -> b], str); g_free (str); if (this_proj -> modelgl -> comp_vol[dat -> b]) { gtk_widget_hide (this_proj -> modelgl -> volume_win -> compb[dat -> b]); show_the_widgets (this_proj -> modelgl -> volume_win -> hboxv[dat -> b]); } this_proj -> modelgl -> volumes = TRUE; } /*! \fn void adjust_vol_md_step (project * this_proj, int geo) \brief update volume value labels \param this_proj the target project \param geo 2 = fragment(s), 3 = molecule(s) */ void adjust_vol_md_step (project * this_proj, int geo) { int i, j, k; k = this_proj -> modelgl -> volume_win -> sid[geo-2]; gchar * str; if (this_proj -> coord -> totcoord[geo] <= 10000) { for (i=0; i coord -> totcoord[geo]; j++) { if (this_proj -> modelgl -> fm_comp_vol[geo-2][i][k][j]) { gtk_widget_hide (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][j]); str = g_strdup_printf ("%15.3f", this_proj -> modelgl -> frag_mol_ppvolume[geo-2][i][k][j]); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> fm_lab_vol[geo-2][i][j], str); g_free (str); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][j]); } else { show_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][j]); gtk_widget_hide (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][j]); } } } } else { for (i=0; i modelgl -> volume_win -> ngeov[geo-2]; j++) { k = this_proj -> modelgl -> volume_win -> geov_id[geo-2][j]; if (this_proj -> modelgl -> fm_comp_vol[geo-2][i][0][k]) { gtk_widget_hide (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][k]); str = g_strdup_printf ("%15.3f", this_proj -> modelgl -> frag_mol_ppvolume[geo-2][i][0][k]); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> fm_lab_vol[geo-2][i][k], str); g_free (str); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][k]); } else { show_the_widgets (this_proj -> modelgl -> volume_win -> fm_compb[geo-2][i][k]); gtk_widget_hide (this_proj -> modelgl -> volume_win -> fm_hboxv[geo-2][i][k]); } } } } } /*! \fn G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data) \brief compute fragment / molecule volume \param but the GtkButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_molecular_volumes (GtkButton * but, gpointer data) { int i, j; qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); int sid = this_proj -> modelgl -> volume_win -> sid[dat -> b-2]; if (dat -> b == 2) { this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] = get_atoms_box (this_proj, dat -> d, sid, dat -> b, dat -> c); } else { this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] = 0.0; for (i=0; i modelfc -> mols[sid][dat -> c].multiplicity; i++) { j = this_proj -> modelfc -> mols[sid][dat -> c].fragments[i]; if (! this_proj -> modelgl -> fm_comp_vol[0][dat -> d][sid][j]) { this_proj -> modelgl -> frag_mol_ppvolume[0][dat -> d][sid][j] = get_atoms_box (this_proj, dat -> d, sid, 2, j); this_proj -> modelgl -> fm_comp_vol[0][dat -> d][sid][j] = TRUE; widget_set_sensitive (this_proj -> modelgl -> volume_win -> fm_hbvol[0][dat -> d][j], this_proj -> modelgl -> fm_comp_vol[0][dat -> d][sid][j]); } this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] += this_proj -> modelgl -> frag_mol_ppvolume[0][dat -> d][sid][j]; } this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c] /= this_proj -> modelfc -> mols[sid][dat -> c].multiplicity; } center_molecule (this_proj); for (i=0; i<2; i++) this_proj -> modelgl -> saved_coord[i] = save_coordinates (this_proj, i); init_default_shaders (this_proj -> modelgl); update (this_proj -> modelgl); this_proj -> modelgl -> fm_comp_vol[dat -> b-2][dat -> d][sid][dat -> c] = TRUE; widget_set_sensitive (this_proj -> modelgl -> volume_win -> fm_hbvol[dat -> b-2][dat -> d][dat -> c], this_proj -> modelgl -> fm_comp_vol[dat -> b-2][dat -> d][sid][dat -> c]); gchar * str = g_strdup_printf ("%15.3f", this_proj -> modelgl -> frag_mol_ppvolume[dat -> b-2][dat -> d][sid][dat -> c]); gtk_label_set_text ((GtkLabel *)this_proj -> modelgl -> volume_win -> fm_lab_vol[dat -> b-2][dat -> d][dat -> c], str); g_free (str); if (this_proj -> modelgl -> fm_comp_vol[dat -> b-2][dat -> d][sid][dat -> c]) { gtk_widget_hide (this_proj -> modelgl -> volume_win -> fm_compb[dat -> b-2][dat -> d][dat -> c]); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_hboxv[dat -> b-2][dat -> d][dat -> c]); } if (dat -> b == 3) { adjust_vol_md_step (this_proj, 2); } this_proj -> modelgl -> volumes = TRUE; } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data) \brief toggle show / hide volume callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_volumes (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data) \brief toggle show / hide volume callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void show_volumes (GtkToggleButton * but, gpointer data) #endif { tint * dat = (tint *)data; project * this_proj = get_project_by_id (dat -> a); #ifdef GTK4 this_proj -> modelgl -> anim -> last -> img -> show_vol[dat -> b] = gtk_check_button_get_active (but); #else this_proj -> modelgl -> anim -> last -> img -> show_vol[dat -> b] = gtk_toggle_button_get_active (but); #endif int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data) \brief toggle show / hide fragment / molecule volume callback GTK4 \param but the GtkCheckButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_show_volumes (GtkCheckButton * but, gpointer data) #else /*! \fn G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data) \brief toggle show / hide fragment / molecule volume callback GTK3 \param but the GtkToggleButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_show_volumes (GtkToggleButton * but, gpointer data) #endif { qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); #ifdef GTK4 this_proj -> modelgl -> anim -> last -> img -> fm_show_vol[dat -> b-2][dat -> d][dat -> c] = gtk_check_button_get_active (but); #else this_proj -> modelgl -> anim -> last -> img -> fm_show_vol[dat -> b-2][dat -> d][dat -> c] = gtk_toggle_button_get_active (but); #endif int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data) \brief change volume color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_volume_color (GtkColorChooser * colob, gpointer data) { tint * id = (tint *) data; project * this_proj = get_project_by_id(id -> a); this_proj -> modelgl -> anim -> last -> img -> vol_col[id -> b] = get_button_color (colob); int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data) \brief change fragment / molecule volume color \param colob the GtkColorChooser sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void fm_set_volume_color (GtkColorChooser * colob, gpointer data) { qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); this_proj -> modelgl -> anim -> last -> img -> fm_vol_col[dat -> b-2][dat -> d][dat -> c] = get_button_color (colob); int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (this_proj -> modelgl); } /*! \fn G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data) \brief change MD step spin callback \param res the GtkSpinButton sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_md_step_vol (GtkSpinButton * res, gpointer data) { qint * dat = (qint *)data; project * this_proj = get_project_by_id (dat -> a); this_proj -> modelgl -> volume_win -> sid[dat -> b-2] = gtk_spin_button_get_value_as_int(res); adjust_vol_md_step (this_proj, dat -> b); } /*! \fn void add_frag_mol_vol_data (GtkWidget * vbox, project * this_proj, glwin * view, int geo) \brief add fragment / molecule volume data to the search tab \param vbox the GtkWidget sending the signal \param this_proj the target project \param view the target glwin \param geo 2 = fragment(s), 3 = molecule(s) */ void add_frag_mol_vol_data (GtkWidget * vbox, project * this_proj, glwin * view, int geo) { gchar * name_geo[2] = {"fragment", "molecule"}; gchar * fmo[2] = {"Fragment", "Molecule"}; GtkWidget * hbox; GtkWidget * hhbox; GtkWidget * fragtab; gchar * str; int i, j; int ngeov = (this_proj -> coord -> totcoord[geo] > 10000) ? view -> volume_win -> ngeov[geo-2] : this_proj -> coord -> totcoord[geo]; if (geo == 3) { str = g_strdup_printf ("Mean volume(s) occupied by the atom(s) for each %s:", name_geo[geo-2]); } else { str = g_strdup_printf ("Volume(s) occupied by the atom(s) for each %s:", name_geo[geo-2]); } abox (vbox, str, 5); g_free (str); fragtab = create_scroll (vbox, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragtab, TRUE); gtk_widget_set_vexpand (fragtab, TRUE); GtkWidget * vvbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, fragtab, vvbox); double vof; int geoid; for (i=0; i coord -> totcoord[geo] > 10000) ? view -> volume_win -> geov_id[geo-2][i] : i; str = g_strdup_printf ("%s N°%d", fmo[geo-2], geoid+1); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); g_free (str); for (j=0; j%s: ", text_filled[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); view -> frag_mol_volume[geo-2][j][0][geoid] = get_atoms_volume (this_proj, j, 0, geo, i); str = g_strdup_printf ("%15.3f", view -> frag_mol_volume[geo-2][j][0][geoid]); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); } } if (geo == 3) { str = g_strdup_printf ("Mean smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:", name_geo[geo-2]); } else { str = g_strdup_printf ("Smallest rectangle parallepiped volume(s) to englobe the atom(s) for each %s:", name_geo[geo-2]); } abox (vbox, str, 5); g_free (str); fragtab = create_scroll (vbox, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragtab, TRUE); gtk_widget_set_vexpand (fragtab, TRUE); vvbox = create_vbox (BSEP); add_container_child (CONTAINER_SCR, fragtab, vvbox); for (i=0; i coord -> totcoord[geo] > 10000) ? view -> volume_win -> geov_id[geo-2][i] : i; str = g_strdup_printf ("%s N°%d", fmo[geo-2], geoid+1); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 20); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 5); g_free (str); for (j=0; j%s: ", text_filled[j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 0); view -> volume_win -> fm_compb[geo-2][j][geoid] = create_button ("Compute", IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(fm_molecular_volumes), & view -> gcid[geo][geoid][j]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> fm_compb[geo-2][j][geoid], FALSE, FALSE, 20); vof = 0.0; if (view -> frag_mol_ppvolume[geo-2][j]) vof = view -> frag_mol_ppvolume[geo-2][j][0][geoid]; str = g_strdup_printf ("%15.3f", vof); view -> volume_win -> fm_hboxv[geo-2][j][geoid] = create_hbox (BSEP); view -> volume_win -> fm_lab_vol[geo-2][j][geoid] = markup_label (str, 100, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hboxv[geo-2][j][geoid] , view -> volume_win -> fm_lab_vol[geo-2][j][geoid], FALSE, FALSE, 20); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hboxv[geo-2][j][geoid] , markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> fm_hboxv[geo-2][j][geoid] , FALSE, FALSE, 0); view -> volume_win -> fm_hbvol[geo-2][j][geoid] = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hbvol[geo-2][j][geoid], check_button ("Show/Hide", 100, -1, view -> anim -> last -> img -> fm_show_vol[geo-2][j][geoid], G_CALLBACK(fm_show_volumes), & view -> gcid[geo][geoid][j]), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> fm_hbvol[geo-2][j][geoid], color_button (view -> anim -> last -> img -> fm_vol_col[geo-2][j][geoid], TRUE, 50, -1, G_CALLBACK(fm_set_volume_color), & view -> gcid[geo][geoid][j]), FALSE, FALSE, 5); widget_set_sensitive (view -> volume_win -> fm_hbvol[geo-2][j][geoid], view -> fm_comp_vol[geo-2][j][0][geoid]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> volume_win -> fm_hbvol[geo-2][j][geoid], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vvbox, hbox, FALSE, FALSE, 0); } } } /*! \fn G_MODULE_EXPORT void update_vol_frag_mol_search (GtkEntry * res, gpointer data) \brief update fragment / molecule search entry \param res the GtkEntry sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void update_vol_frag_mol_search (GtkEntry * res, gpointer data) { tint * dat = (tint * )data; const gchar * m = entry_get_text (res); int v = (int)atof(m); project * this_proj = get_project_by_id(dat -> a); int g = dat -> b; if (v > 0 && v <= this_proj -> coord -> totcoord[g]) { int i; gboolean update = TRUE; for (i=0; i modelgl -> volume_win -> ngeov[g-2]; i++) { if (this_proj -> modelgl -> volume_win -> geov_id[g-2][i] == v-1) { update = FALSE; break; } } if (update) { int * sdata = duplicate_int (this_proj -> modelgl -> volume_win -> ngeov[g-2], this_proj -> modelgl -> volume_win -> geov_id[g-2]); g_free (this_proj -> modelgl -> volume_win -> geov_id[g-2]); this_proj -> modelgl -> volume_win -> geov_id[g-2] = allocint (this_proj -> modelgl -> volume_win -> ngeov[g-2]+1); for (i=0; i modelgl -> volume_win -> ngeov[g-2]; i++) { this_proj -> modelgl -> volume_win -> geov_id[g-2][i] = sdata[i]; } this_proj -> modelgl -> volume_win -> geov_id[g-2][i] = v-1; this_proj -> modelgl -> volume_win -> ngeov[g-2] ++; destroy_this_widget (this_proj -> modelgl -> volume_win -> fm_vvbox[g-2]); this_proj -> modelgl -> volume_win -> fm_vvbox[g-2] = create_vbox (BSEP); add_frag_mol_vol_data (this_proj -> modelgl -> volume_win -> fm_vvbox[g-2], this_proj, this_proj -> modelgl, g); add_box_child_start (GTK_ORIENTATION_VERTICAL, this_proj -> modelgl -> volume_win -> fm_vbox[g-2], this_proj -> modelgl -> volume_win -> fm_vvbox[g-2], TRUE, TRUE, 0); show_the_widgets (this_proj -> modelgl -> volume_win -> fm_vvbox[g-2]); adjust_vol_md_step (this_proj, g); } } else { update_entry_text (res, ""); } } /*! \fn GtkWidget * frag_mol_volume_search (project * this_proj, int g) \brief create the fragment(s) / molecule(s) search widget \param this_proj the target project \param g 2 = fragment(s), 3 = molecule(s) */ GtkWidget * frag_mol_volume_search (project * this_proj, int g) { GtkWidget * frag_mol_search = create_vbox (BSEP); gchar * obj[2] = {"fragment", "molecule"}; gchar * str = g_strdup_printf ("Too many %ss in your model !\n" " It is impossible to display the entire list ...\n" "... instead you can look for %s(s) 'manually':\n", obj[g-2], obj[g-2]); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, markup_label(str, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); g_free (str); gchar * search_item[2]={"Fragment ID:", "Molecule ID:"}; GtkWidget * hbox; GtkWidget * entry; GtkWidget * label; hbox = create_hbox (0); add_box_child_start (GTK_ORIENTATION_VERTICAL, frag_mol_search, hbox, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(search_item[g-2], 100, -1, 0.0, 0.5), FALSE, FALSE, 20); entry = create_entry (G_CALLBACK(update_vol_frag_mol_search), 100, 15, FALSE, & this_proj -> modelgl -> colorp[g][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,entry, FALSE, FALSE, 0); str = g_strdup_printf ("in [%d - %d]", 1, this_proj -> coord -> totcoord[g]); label = markup_label (str, 50, -1, 0.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox,label, FALSE, FALSE, 20); g_free (str); return frag_mol_search; } /*! \fn GtkWidget * frag_mol_volume_tab (glwin * view, int geo) \brief create the fragment(s) / molecule(s) tab \param view the target glwin \param geo 2 = fragment(s), 3 = molecule(s) */ GtkWidget * frag_mol_volume_tab (glwin * view, int geo) { GtkWidget * vbox = create_vbox (BSEP); project * this_proj = get_project_by_id (view -> proj); GtkWidget * hbox; gchar * str; if (this_proj -> steps > 1) { // MD step box GtkWidget * sbut = spin_button (G_CALLBACK(set_md_step_vol), view -> volume_win -> sid[geo-2], 1.0, this_proj -> steps, 1.0, 0, 1000, & view -> gcid[geo][0][geo]); gtk_widget_set_size_request (sbut, 25, -1); GtkWidget * fix = gtk_fixed_new (); gtk_fixed_put (GTK_FIXED (fix), sbut, 0, 10); str = g_strdup_printf ("Select MD step [1-%d]:", this_proj -> steps); hbox = abox (vbox, str, 5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, fix, FALSE, FALSE, 20); } int i, j; for (i=0; i fm_comp_vol[geo-2][i]) { view -> fm_comp_vol[geo-2][i] = allocdbool (this_proj -> steps, this_proj -> coord -> totcoord[geo]); } if (! view -> anim -> last -> img -> fm_show_vol[geo-2][i]) { view -> anim -> last -> img -> fm_show_vol[geo-2][i] = allocbool (this_proj -> coord -> totcoord[geo]); } if (! view -> anim -> last -> img -> fm_vol_col[geo-2][i]) { view -> anim -> last -> img -> fm_vol_col[geo-2][i] = g_malloc0(this_proj -> coord -> totcoord[geo]*sizeof*view -> anim -> last -> img -> fm_vol_col[geo-2][i]); for (j=0; j coord -> totcoord[geo]; j++) { view -> anim -> last -> img -> fm_vol_col[geo-2][i][j] = init_color (j+i*this_proj -> coord -> totcoord[geo], FILLED_STYLES*this_proj -> coord -> totcoord[geo]); view -> anim -> last -> img -> fm_vol_col[geo-2][i][j].alpha = 0.75; } } if (! view -> frag_box[i]) { view -> frag_box[i] = alloctdouble (this_proj -> steps, this_proj -> coord -> totcoord[geo], 9); } if (! view -> frag_mol_volume[geo-2][i]) { view -> frag_mol_volume[geo-2][i] = allocddouble (this_proj -> steps, this_proj -> coord -> totcoord[geo]); } if (! view -> frag_mol_ppvolume[geo-2][i]) { view -> frag_mol_ppvolume[geo-2][i] = allocddouble (this_proj -> steps, this_proj -> coord -> totcoord[geo]); } if (! view -> volume_win -> fm_compb[geo-2][i]) { view -> volume_win -> fm_compb[geo-2][i] = g_malloc0 (this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win ->fm_compb[geo-2][i]); } if (! view -> volume_win -> fm_hbvol[geo-2][i]) { view -> volume_win -> fm_hbvol[geo-2][i] = g_malloc0 (this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win -> fm_hbvol[geo-2][i]); } if (! view -> volume_win -> fm_hboxv[geo-2][i]) { view -> volume_win -> fm_hboxv[geo-2][i] = g_malloc0 (this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win -> fm_hboxv[geo-2][i]); } if (! view -> volume_win -> fm_lab_vol[geo-2][i]) { view -> volume_win -> fm_lab_vol[geo-2][i] = g_malloc0 (this_proj -> coord -> totcoord[geo]*sizeof*view -> volume_win -> fm_lab_vol[geo-2][i]); } } GtkWidget * fragtab; if (this_proj -> coord -> totcoord[geo] > 10000) { fragtab = create_scroll (vbox, -1, -1, GTK_SHADOW_NONE); gtk_widget_set_hexpand (fragtab, TRUE); gtk_widget_set_vexpand (fragtab, TRUE); add_container_child (CONTAINER_SCR, fragtab, frag_mol_volume_search(this_proj, geo)); } view -> volume_win -> fm_vbox[geo-2] = create_vbox (BSEP); view -> volume_win -> fm_vvbox[geo-2] = create_vbox (BSEP); add_frag_mol_vol_data (view -> volume_win -> fm_vvbox[geo-2], this_proj, view, geo); add_box_child_start (GTK_ORIENTATION_VERTICAL, view -> volume_win -> fm_vbox[geo-2], view -> volume_win -> fm_vvbox[geo-2], TRUE, TRUE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, view -> volume_win -> fm_vbox[geo-2], TRUE, TRUE, 0); return vbox; } /*! \fn G_MODULE_EXPORT void set_angular_precision (GtkComboBox * box, gpointer data) \brief change angular precision \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_angular_precision (GtkComboBox * box, gpointer data) { glwin * view = (glwin *)data; int i = gtk_combo_box_get_active (box); if (i != view -> volume_win -> angp) { project * this_proj = get_project_by_id (view -> proj); view -> volume_win -> angp = i; int j, k; for (i=0; i volume_win -> compb[i]); gtk_widget_hide (view -> volume_win -> hboxv[i]); view -> comp_vol[i] = FALSE; widget_set_sensitive (view -> volume_win -> hbvol[i], view -> comp_vol[i]); view -> anim -> last -> img -> show_vol[i] = FALSE; for (j=0; j<2; j++) { for (k=0; k coord -> totcoord[j+2]; k++) { show_the_widgets (view -> volume_win -> fm_compb[j][i][k]); gtk_widget_hide (view -> volume_win -> fm_hboxv[j][i][k]); view -> fm_comp_vol[j][i][0][k] = FALSE; widget_set_sensitive (view -> volume_win -> fm_hbvol[j][i][k], view -> fm_comp_vol[j][i][0][k]); view -> anim -> last -> img -> fm_show_vol[j][i][k] = FALSE; } } } this_proj -> modelgl -> volumes = FALSE; int shaders[1] = {VOLMS}; re_create_md_shaders (1, shaders, this_proj); update (view); } } /*! \fn GtkWidget * vol_model_tab (glwin * view) \brief create the 'Model' volume tab \param view the target glwin */ GtkWidget * vol_model_tab (glwin * view) { GtkWidget * vbox = create_vbox (BSEP); abox (vbox, "Volume(s) occupied by all the atom(s):", 5); GtkWidget * hbox; int i, j; project * this_proj = get_project_by_id (view -> proj); GtkWidget * hhbox; gchar * str; double vof; for (i=0; i%s: ", text_filled[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); if (! view -> atoms_volume[i]) view -> atoms_volume[i] = allocdouble (this_proj -> steps); for (j=0; j steps; j++) view -> atoms_volume[i][j] = get_atoms_volume (this_proj, i, j, -1, 0); vof = 0.0; for (j=0; j steps; j++) vof += view -> atoms_volume[i][j]; vof /= this_proj -> steps; str = g_strdup_printf ("%15.3f", vof); hhbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 100, -1, 1.0, 0.5), FALSE, FALSE, 0); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 20); if (this_proj -> steps > 1) { add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label ("average by MD step", -1, -1, 0.0, 0.5), FALSE, FALSE, 0); } add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); } abox (vbox, "Smallest rectangle parallepiped volume(s) to englobe all atom(s):", 5); hbox = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, gtk_label_new("Angular precision: "), FALSE, FALSE, 10); GtkWidget * ang_combo = create_combo (); gchar * angpr[4] = {"°", "°/10", "°/100", "°/1000"}; for (i=0; i<4; i++) combo_text_append (ang_combo, angpr[i]); gtk_combo_box_set_active (GTK_COMBO_BOX(ang_combo), view -> volume_win -> angp); g_signal_connect (G_OBJECT (ang_combo), "changed", G_CALLBACK(set_angular_precision), view); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, ang_combo, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); for (i=0; i%s: ", text_filled[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label (str, 200, -1, 0.0, 0.5), FALSE, FALSE, 30); g_free (str); hhbox = create_hbox (BSEP); if (! view -> comp_vol[i]) { view -> anim -> last -> img -> vol_col[i].red = (i+1.0)/FILLED_STYLES; view -> anim -> last -> img -> vol_col[i].green = 1.0; view -> anim -> last -> img -> vol_col[i].blue = 0.0; view -> anim -> last -> img -> vol_col[i].alpha = 0.75; } if (! view -> atoms_ppvolume[i]) view -> atoms_ppvolume[i] = allocdouble (this_proj -> steps); if (! view -> volume_box[i]) view -> volume_box[i] = allocddouble (this_proj -> steps, 9); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, hhbox, FALSE, FALSE, 0); view -> volume_win -> compb[i] = create_button ("Compute", IMG_NONE, NULL, 150, -1, GTK_RELIEF_NORMAL, G_CALLBACK(molecular_volumes), & view -> colorp[i][0]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> compb[i], FALSE, FALSE, 20); vof = 0.0; for (j=0; j steps; j++) vof += view -> atoms_ppvolume[i][j]; vof /= this_proj -> steps; str = g_strdup_printf ("%15.3f", vof); view -> volume_win -> hboxv[i] = create_hbox (BSEP); view -> volume_win -> lab_vol[i] = markup_label (str, 100, -1, 1.0, 0.5); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hboxv[i], view -> volume_win -> lab_vol[i], FALSE, FALSE, 20); g_free (str); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hboxv[i], markup_label ("Å3", 50, -1, 0.0, 0.5), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hhbox, view -> volume_win -> hboxv[i], FALSE, FALSE, 0); view -> volume_win -> hbvol[i] = create_hbox (BSEP); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hbvol[i], check_button ("Show/Hide", 100, -1, view -> anim -> last -> img -> show_vol[i], G_CALLBACK(show_volumes), & view -> colorp[i][0]), FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, view -> volume_win -> hbvol[i], color_button (view -> anim -> last -> img -> vol_col[i], TRUE, 50, -1, G_CALLBACK(set_volume_color), & view -> colorp[i][0]), FALSE, FALSE, 5); widget_set_sensitive (view -> volume_win -> hbvol[i], view -> comp_vol[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, view -> volume_win -> hbvol[i], FALSE, FALSE, 5); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 0); } return vbox; } /*! \fn G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data) \brief create the 'Volumes' window callback \param widg the GtkWidget sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void window_volumes (GtkWidget * widg, gpointer data) { glwin * view = (glwin *) data; if (view -> volume_win == NULL) { view -> volume_win = g_malloc0 (sizeof*view -> volume_win); project * this_proj = get_project_by_id (view -> proj); gchar * str = g_strdup_printf ("%s - volumes", this_proj -> name); view -> volume_win -> win = create_win (str, view -> win, FALSE, FALSE); gtk_widget_set_size_request (view -> volume_win -> win, 450, 420); g_free (str); GtkWidget * vbox = create_vbox (BSEP); add_container_child (CONTAINER_WIN, view -> volume_win -> win, vbox); GtkWidget * notebook = gtk_notebook_new (); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, notebook, TRUE, TRUE, 0); gtk_notebook_append_page (GTK_NOTEBOOK(notebook), vol_model_tab (view), gtk_label_new ("Model")); if (view -> adv_bonding[0]) gtk_notebook_append_page (GTK_NOTEBOOK(notebook), frag_mol_volume_tab (view, 2), gtk_label_new ("Fragment(s)")); if (view -> adv_bonding[1]) gtk_notebook_append_page (GTK_NOTEBOOK(notebook), frag_mol_volume_tab (view, 3), gtk_label_new ("Molecule(s)")); add_gtk_close_event (view -> volume_win -> win, G_CALLBACK(hide_this_window), NULL); show_the_widgets (view -> volume_win -> win); int i; for (i=0; i comp_vol[i]) { gtk_widget_hide (view -> volume_win -> compb[i]); } else { gtk_widget_hide (view -> volume_win -> hboxv[i]); } } if (view -> adv_bonding[0]) adjust_vol_md_step (this_proj, 2); if (view -> adv_bonding[1]) adjust_vol_md_step (this_proj, 3); } else { gtk_widget_show (view -> volume_win -> win); } } Atomes-GNU-1.1.14/src/project/000077500000000000000000000000001457665371200157325ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/project/close_p.c000066400000000000000000000240451457665371200175270ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file close_p.c * @short Functions to close an atomes project \n Callbacks to close an atomes project * @author Sébastien Le Roux */ /* * This file: 'close_p.c' * * Contains: * - the functions to close an atomes project - the callbacks to close an atomes project * * List of functions: void update_insert_combos (); void close_project (project * to_close); void to_close_this_project (int to_activate, project * this_proj); G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "workspace.h" #include "curve.h" #include "glview.h" extern GtkTreeStore * tool_model; extern GtkTreeModel * replace_combo_tree (gboolean insert, int proj); /*! \fn void update_insert_combos () \brief update some GtkComboBox in the workspace if a project is removed */ void update_insert_combos () { GtkTreeModel * model; project * this_proj; GList * cell_list; GtkWidget * box; int i; for (i=0; i modelgl) { if ((this_proj -> modelgl -> atom_win && this_proj -> modelgl -> atom_win -> visible) || this_proj -> modelgl -> builder_win) { model = replace_combo_tree (TRUE, i); box = (this_proj -> modelgl -> builder_win) ? this_proj -> modelgl -> builder_win -> add_combo : this_proj -> modelgl -> atom_win -> atom_combo[3]; gtk_combo_box_set_model (GTK_COMBO_BOX(box), model); gtk_combo_box_set_active (GTK_COMBO_BOX(box), 0); cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(box)); if (cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(box), cell_list -> data, "markup", 0, NULL); } g_object_unref (model); } } } } /*! \fn void close_project (project * to_close) \brief close a project \param to_close the project to close */ void close_project (project * to_close) { int i, j, k, l; #ifdef DEBUG g_debug ("CLOSE_PROJECT: proj to close= %d", to_close -> id); g_debug ("CLOSE_PROJECT: nprojects = %d", nprojects); g_debug ("CLOSE_PROJECT: activep = %d", activep); #endif if (to_close -> initgl) { if (to_close -> modelgl -> measure_win) { to_close -> modelgl -> measure_win -> win = destroy_this_widget (to_close -> modelgl -> measure_win -> win); g_free (to_close -> modelgl -> measure_win); } if (to_close -> modelgl -> volume_win) { to_close -> modelgl -> volume_win -> win = destroy_this_widget (to_close -> modelgl -> volume_win -> win); g_free (to_close -> modelgl -> volume_win); } if (to_close -> modelgl -> player) { to_close -> modelgl -> player -> win = destroy_this_widget (to_close -> modelgl -> player -> win); g_free (to_close -> modelgl -> player); } if (to_close -> modelgl -> spiner) { to_close -> modelgl -> spiner -> win = destroy_this_widget (to_close -> modelgl -> spiner -> win); g_free (to_close -> modelgl -> spiner); } if (to_close -> modelgl -> rec) { to_close -> modelgl -> rec -> win = destroy_this_widget (to_close -> modelgl -> rec -> win); g_free (to_close -> modelgl -> rec); } if (to_close -> modelgl -> atom_win) { to_close -> modelgl -> atom_win -> win = destroy_this_widget (to_close -> modelgl -> atom_win -> win); g_free (to_close -> modelgl -> atom_win); } if (to_close -> modelgl -> cell_win) { to_close -> modelgl -> cell_win -> win = destroy_this_widget (to_close -> modelgl -> cell_win -> win); g_free (to_close -> modelgl -> cell_win); } if (to_close -> modelgl -> builder_win) { to_close -> modelgl -> builder_win -> win = destroy_this_widget (to_close -> modelgl -> builder_win -> win); g_free (to_close -> modelgl -> builder_win); } if (to_close -> modelgl -> coord_win) { to_close -> modelgl -> coord_win -> win = destroy_this_widget (to_close -> modelgl -> coord_win -> win); g_free (to_close -> modelgl -> coord_win); } for (i=0; i<2; i++) { if (to_close -> modelgl -> model_win[i]) { to_close -> modelgl -> model_win[i] -> win = destroy_this_widget (to_close -> modelgl -> model_win[i] -> win); g_free (to_close -> modelgl -> model_win[i]); } } if (to_close -> modelgl -> opengl_win) { to_close -> modelgl -> opengl_win -> win = destroy_this_widget (to_close -> modelgl -> opengl_win -> win); g_free (to_close -> modelgl -> opengl_win); } to_close -> modelgl -> win = destroy_this_widget (to_close -> modelgl -> win); for (i=0; i modelgl, i); g_free (to_close -> modelgl); if (to_close -> modelfc) { for (i=0; i< to_close -> steps; i++) { g_free (to_close -> modelfc -> mols[i]); } } } if (to_close -> run) { for (i=0 ; i visok[i]=FALSE; if (to_close -> curves[i]) { hide_curves (to_close, i); erase_curves (to_close, i); } } } clean_view (); if (nprojects == 1) { prep_calc_actions (); workzone.first = NULL; workzone.last = NULL; activep = -1; correct_this_window_title (MainWindow, g_strdup_printf ("%s", PACKAGE)); correct_this_window_title (curvetoolbox, g_strdup_printf ("Toolboxes")); if (workspacefile != NULL) { g_free (workspacefile); workspacefile = NULL; } newspace = TRUE; } else if (nprojects > 1) { if (to_close == workzone.first) { workzone.first = workzone.first -> next; workzone.first -> prev = NULL; } else if (to_close == workzone.last) { workzone.last = workzone.last -> prev; workzone.last -> next = NULL; } else { to_close -> prev -> next = to_close -> next; to_close -> next -> prev = to_close -> prev; } g_free (to_close); } nprojects --; if (nprojects) { project * this_proj = workzone.first; for (i=0 ; i id = i; if (this_proj -> initgl) { this_proj -> modelgl -> proj = i; for (j=0; j nspec*2; k++) { this_proj -> modelgl -> colorp[j][k].a = i; } } for (j=0; j<10; j++) { if (this_proj -> modelgl -> gcid[j] != NULL) { for (k=0; k coord -> totcoord[j]; k++) { for (l=0; l modelgl -> gcid[j][k][l].a = i; } } } } if (this_proj -> modelgl -> atom_win) { for (j=0; j<8; j++) { if (this_proj -> modelgl -> search_widg[j]) { for (k=0; k<3; k++) this_proj -> modelgl -> search_widg[j] -> pointer[k].a = i; } } } } for (j=0; j idcc[j] != NULL) { for (k=0; k numc[j]; k++) { this_proj -> idcc[j][k].a = i; } } } if (this_proj -> next != NULL) this_proj = this_proj -> next; } this_proj = workzone.first; for (i=0 ; i id = i; for (j=0; j numc[j]; k++) { if (this_proj -> curves[j][k] -> window) { curve_window_add_menu_bar (& this_proj -> idcc[j][k]); if (is_the_widget_visible(this_proj -> curves[j][k] -> plot)) { gtk_widget_queue_draw (this_proj -> curves[j][k] -> plot); } } } } if (this_proj -> next != NULL) this_proj = this_proj -> next; } } update_insert_combos (); } /*! \fn void to_close_this_project (int to_activate, project * this_proj) \brief to close this project \param to_activate If the workspace is not empty, activate first another project \param this_proj the target project */ void to_close_this_project (int to_activate, project * this_proj) { if (nprojects > 0) close_project (this_proj); if (nprojects > 0) { activate_project (NULL, GINT_TO_POINTER(to_activate)); } else { remove_edition_and_analyze_actions (); active_project = NULL; fill_tool_model (); } } /*! \fn G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata) \brief signal to close a project \param widg the GtkWidget sending the signal \param cdata the associated data pointer */ G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata) { if (nprojects > 0) { int i = GPOINTER_TO_INT(cdata); int j = activep; if (j >= i && j > 0) j--; gtk_tree_store_clear (tool_model); remove_project_from_workspace (i); close_project (get_project_by_id(i)); if (nprojects > 0) { activate_project (NULL, GINT_TO_POINTER(j)); } else { remove_edition_and_analyze_actions (); active_project = NULL; fill_tool_model (); } } else { show_warning ("No project to be closed", MainWindow); } } Atomes-GNU-1.1.14/src/project/debugio.c000066400000000000000000000420771457665371200175260ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file debugio.c * @short Some debugging and printing functions * @author Sébastien Le Roux */ /* * This file: 'debugio.c' * * Contains: * - Some debugging and printing functions * * List of functions: void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost); void debug_lattice_info (project * this_proj, gchar * iost); void debugioproj (project * this_proj, gchar * iost); void debug_chemical_information (project * this_proj); */ #include "global.h" #include "project.h" /*! \fn void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost) \brief debug and print some info about the curves in a project \param this_proj the target project \param win curve window exists (1/0) \param rid analysis id \param cid curve id \param iost input or output information */ void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost) { g_debug (" "); g_debug ("IODEBUG: %s: pid= %d, rid= %d, cid= %d", iost, this_proj -> id, rid, cid); g_debug ("IODEBUG: %s: ndata= %d", iost, this_proj -> curves[rid][cid] -> ndata); if (this_proj -> curves[rid][cid] -> data[0] == NULL) { g_debug ("IODEBUG: %s: data[0] == NULL", iost); } g_debug ("IODEBUG: %s: x[0]= %f", iost, this_proj -> curves[rid][cid] -> data[0][0]); g_debug ("IODEBUG: %s: y[0]= %f", iost, this_proj -> curves[rid][cid] -> data[1][0]); g_debug ("IODEBUG: %s: x[ndata-1]= %f", iost, this_proj -> curves[rid][cid] -> data[0][this_proj -> curves[rid][cid] -> ndata - 1]); g_debug ("IODEBUG: %s: y[ndata-1]= %f", iost, this_proj -> curves[rid][cid] -> data[1][this_proj -> curves[rid][cid] -> ndata - 1]); if (win) { g_debug ("IODEBUG: %s: cmax[0]= %f, cmax[1]= %f", iost, this_proj -> curves[rid][cid] -> cmax[0], this_proj -> curves[rid][cid] -> cmax[1]); g_debug ("IODEBUG: %s: name= %s", iost, this_proj -> curves[rid][cid] -> name); g_debug ("IODEBUG: %s: show_title= %d", iost, this_proj -> curves[rid][cid] -> show_title); g_debug ("IODEBUG: %s: default_title= %d", iost, this_proj -> curves[rid][cid] -> default_title); g_debug ("IODEBUG: %s: title= %s", iost, this_proj -> curves[rid][cid] -> title); g_debug ("IODEBUG: %s: title_font= %s", iost, this_proj -> curves[rid][cid] -> title_font); g_debug ("IODEBUG: %s: title_pos[0]= %f, title_pos[1]= %f", iost, this_proj -> curves[rid][cid] -> title_pos[0], this_proj -> curves[rid][cid] -> title_pos[1]); g_debug ("IODEBUG: %s: title.red= %f, title.green= %f, title.blue= %f", iost, this_proj -> curves[rid][cid] -> title_color.red, this_proj -> curves[rid][cid] -> title_color.green, this_proj -> curves[rid][cid] -> title_color.blue); // Axis g_debug ("IODEBUG: %s: axmin[0]= %f, axmin[1]= %f", iost, this_proj -> curves[rid][cid] -> axmin[0], this_proj -> curves[rid][cid] -> axmin[1]); g_debug ("IODEBUG: %s: axmax[0]= %f, axmax[1]= %f", iost, this_proj -> curves[rid][cid] -> axmax[0], this_proj -> curves[rid][cid] -> axmax[1]); g_debug ("IODEBUG: %s: x_axis_title= %s", iost, this_proj -> curves[rid][cid] -> axis_title[0]); g_debug ("IODEBUG: %s: x_axis_title_font= %s", iost, this_proj -> curves[rid][cid] -> axis_title_font[0]); g_debug ("IODEBUG: %s: x_axis_title_pos[0]= %d, x_axis_title_pos[1]= %d", iost, this_proj -> curves[rid][cid] -> axis_title_x[0], this_proj -> curves[rid][cid] -> axis_title_y[0]); g_debug ("IODEBUG: %s: y_axis_title= %s", iost, this_proj -> curves[rid][cid] -> axis_title[1]); g_debug ("IODEBUG: %s: y_axis_title_font= %s", iost, this_proj -> curves[rid][cid] -> axis_title_font[1]); g_debug ("IODEBUG: %s: y_axis_title_pos[0]= %d, y_axis_title_pos[1]= %d", iost, this_proj -> curves[rid][cid] -> axis_title_x[1], this_proj -> curves[rid][cid] -> axis_title_y[1]); g_debug ("IODEBUG: %s: scale[0]= %d, scale[1]= %d", iost, this_proj -> curves[rid][cid] -> scale[0], this_proj -> curves[rid][cid] -> scale[1]); g_debug ("IODEBUG: %s: x_axis_defaut_title= %d", iost, this_proj -> curves[rid][cid] -> axis_defaut_title[0]); g_debug ("IODEBUG: %s: y_axis_defaut_title= %d", iost, this_proj -> curves[rid][cid] -> axis_defaut_title[1]); g_debug ("IODEBUG: %s: grid[0]= %d, grid[1]= %d", iost, this_proj -> curves[rid][cid] -> show_grid[0], this_proj -> curves[rid][cid] -> show_grid[1]); g_debug ("IODEBUG: %s: show_axis[0]= %d, show_axis[1]= %d", iost, this_proj -> curves[rid][cid] -> show_axis[0], this_proj -> curves[rid][cid] -> show_axis[1]); g_debug ("IODEBUG: %s: autoscale[0]= %d, autoscale[1]= %d", iost, this_proj -> curves[rid][cid] -> autoscale[0], this_proj -> curves[rid][cid] -> autoscale[1]); g_debug ("IODEBUG: %s: majt[0]= %f, majt[1]= %f", iost, this_proj -> curves[rid][cid] -> majt[0], this_proj -> curves[rid][cid] -> majt[1]); g_debug ("IODEBUG: %s: mint[0]= %d, mint[1]= %d", iost, this_proj -> curves[rid][cid] -> mint[0], this_proj -> curves[rid][cid] -> mint[1]); g_debug ("IODEBUG: %s: ticks_io[0]= %d, ticks_io[1]= %d", iost, this_proj -> curves[rid][cid] -> ticks_io[0], this_proj -> curves[rid][cid] -> ticks_io[1]); g_debug ("IODEBUG: %s: ticks_pos[0]= %d, ticks_pos[1]= %d", iost, this_proj -> curves[rid][cid] -> ticks_pos[0], this_proj -> curves[rid][cid] -> ticks_pos[1]); g_debug ("IODEBUG: %s: majt_size[0]= %d, majt_size[1]= %d", iost, this_proj -> curves[rid][cid] -> majt_size[0], this_proj -> curves[rid][cid] -> majt_size[1]); g_debug ("IODEBUG: %s: mint_size[0]= %d, mint_size[1]= %d", iost, this_proj -> curves[rid][cid] -> mint_size[0], this_proj -> curves[rid][cid] -> mint_size[1]); g_debug ("IODEBUG: %s: labels_pos[0]= %d, labels_pos[1]= %d", iost, this_proj -> curves[rid][cid] -> labels_pos[0], this_proj -> curves[rid][cid] -> labels_pos[1]); g_debug ("IODEBUG: %s: labels_digit[0]= %d, labels_digit[1]= %d", iost, this_proj -> curves[rid][cid] -> labels_digit[0], this_proj -> curves[rid][cid] -> labels_digit[1]); g_debug ("IODEBUG: %s: labels_font[0]= %s, labels_font[1]= %s", iost, this_proj -> curves[rid][cid] -> labels_font[0], this_proj -> curves[rid][cid] -> labels_font[1]); g_debug ("IODEBUG: %s: labels_angle[0]= %f, labels_angle[1]= %f", iost, this_proj -> curves[rid][cid] -> labels_angle[0], this_proj -> curves[rid][cid] -> labels_angle[1]); g_debug ("IODEBUG: %s: labels_shift_x[0]= %d, labels_shift_y[0]= %d", iost, this_proj -> curves[rid][cid] -> labels_shift_x[0], this_proj -> curves[rid][cid] -> labels_shift_y[0]); g_debug ("IODEBUG: %s: labels_shift_x[1]= %d, labels_shift_y[1]= %d", iost, this_proj -> curves[rid][cid] -> labels_shift_x[1], this_proj -> curves[rid][cid] -> labels_shift_y[1]); // Legend g_debug ("IODEBUG: %s: show_legend= %d", iost, this_proj -> curves[rid][cid] -> show_legend); g_debug ("IODEBUG: %s: legend_pos[0]= %f, legend_pos[1]= %f", iost, this_proj -> curves[rid][cid] -> legend_pos[0], this_proj -> curves[rid][cid] -> legend_pos[1]); g_debug ("IODEBUG: %s: legend_font= %s", iost, this_proj -> curves[rid][cid] -> legend_font); g_debug ("IODEBUG: %s: legend.red= %f, legend.green= %f, legend.blue= %f", iost, this_proj -> curves[rid][cid] -> legend_color.red, this_proj -> curves[rid][cid] -> legend_color.green, this_proj -> curves[rid][cid] -> legend_color.blue); g_debug ("IODEBUG: %s: show_legend_box= %d", iost, this_proj -> curves[rid][cid] -> show_legend_box); g_debug ("IODEBUG: %s: legend_box_dash= %d", iost, this_proj -> curves[rid][cid] -> legend_box_dash); g_debug ("IODEBUG: %s: legend_box_thickness= %f", iost, this_proj -> curves[rid][cid] -> legend_box_thickness); g_debug ("IODEBUG: %s: legend_box.red= %f, legend_box.green= %f, legend_box.blue= %f", iost, this_proj -> curves[rid][cid] -> legend_box_color.red, this_proj -> curves[rid][cid] -> legend_box_color.green, this_proj -> curves[rid][cid] -> legend_box_color.blue); // Frame g_debug ("IODEBUG: %s: show_frame= %d", iost, this_proj -> curves[rid][cid] -> show_frame); g_debug ("IODEBUG: %s: frame_type= %d", iost, this_proj -> curves[rid][cid] -> frame_type); g_debug ("IODEBUG: %s: frame_dash= %d", iost, this_proj -> curves[rid][cid] -> frame_dash); g_debug ("IODEBUG: %s: frame_thickness= %f", iost, this_proj -> curves[rid][cid] -> frame_thickness); g_debug ("IODEBUG: %s: frame.red= %f, frame.green= %f, frame.blue= %f", iost, this_proj -> curves[rid][cid] -> frame_color.red, this_proj -> curves[rid][cid] -> frame_color.green, this_proj -> curves[rid][cid] -> frame_color.blue); g_debug ("IODEBUG: %s: frame.xmin= %f, frame.xmax= %f", iost, this_proj -> curves[rid][cid] -> frame_pos[0][0], this_proj -> curves[rid][cid] -> frame_pos[0][1]); g_debug ("IODEBUG: %s: frame.ymin= %f, frame.ymax= %f", iost, this_proj -> curves[rid][cid] -> frame_pos[1][0], this_proj -> curves[rid][cid] -> frame_pos[1][1]); // Data g_debug ("IODEBUG: %s: backc.red= %f, backc.green= %f, backc.blue= %f", iost, this_proj -> curves[rid][cid] -> backcolor.red, this_proj -> curves[rid][cid] -> backcolor.green, this_proj -> curves[rid][cid] -> backcolor.blue); g_debug ("IODEBUG: %s: legend_font= %s", iost, this_proj -> curves[rid][cid] -> legend_font); if (this_proj -> curves[rid][cid] -> cfile != NULL) { g_debug ("IODEBUG: %s: cfile= %s", iost, this_proj -> curves[rid][cid] -> cfile); } } else { g_debug ("IODEBUG: %s: No curve window", iost); } } /*! \fn void debug_lattice_info (project * this_proj, gchar * iost) \brief debug lattice data \param this_proj the target project \param iost input or output information */ void debug_lattice_info (project * this_proj, gchar * iost) { g_debug ("IODEBUG::%s:: lattice debug", iost); cell_info * debug_cell = & this_proj -> cell; g_debug ("IODEBUG::%s:: pbc= %d, frac= %d, ltype= %d", iost, debug_cell -> pbc, debug_cell -> frac, debug_cell -> ltype); g_debug ("IODEBUG::%s:: npt= %d, has_a_box= %d, crystal= %d", iost, debug_cell -> npt, debug_cell -> has_a_box, debug_cell -> crystal); g_debug ("IODEBUG::%s:: volumec= %f, density= %f", iost, debug_cell -> volume, debug_cell -> density); g_debug ("IODEBUG::%s:: cextra[0]= %d, cextra[1]= %d, cextra[2]= %d", iost, debug_cell -> cextra[0], debug_cell -> cextra[1], debug_cell -> cextra[2]); if (debug_cell -> box) { box_info * debug_box = debug_cell -> box; int i; for (i=0; i<2; i++) g_debug ("IODEBUG::%s:: i= %d, param[%d][0]= %f, param[%d][1]= %f, param[%d][2]= %f", iost, i, i, debug_box -> param[i][0], i, debug_box -> param[i][1], i, debug_box -> param[i][2]); for (i=0; i<3; i++) g_debug ("IODEBUG::%s:: i= %d, vect[%d][0]= %f, vect[%d][1]= %f, vect[%d][2]= %f", iost, i, i, debug_box -> vect[i][0], i, debug_box -> vect[i][1], i, debug_box -> vect[i][2]); for (i=0; i<3; i++) g_debug ("IODEBUG::%s:: i= %d, rvect[%d][0]= %f, rvect[%d][1]= %f, rvect[%d][2]= %f", iost, i, i, debug_box -> rvect[i][0], i, debug_box -> rvect[i][1], i, debug_box -> rvect[i][2]); } } /*! \fn void debugioproj (project * this_proj, gchar * iost) \brief debug project info \param this_proj the target project \param iost input or output information */ void debugioproj (project * this_proj, gchar * iost) { int i, j; g_debug ("IODEBUG::%s: name= %s", iost, this_proj -> name); if (this_proj -> coordfile != NULL) { g_debug ("IODEBUG::%s: coordfile= %s", iost, this_proj -> coordfile); g_debug ("IODEBUG::%s: tfile= %d", iost, this_proj -> tfile); } if (this_proj -> bondfile != NULL) { g_debug ("IODEBUG::%s: bondfile= %s", iost, this_proj -> bondfile); } g_debug ("IODEBUG::%s: newproj= %d", iost, this_proj -> newproj); g_debug ("IODEBUG::%s: pbc= %d", iost, this_proj -> cell.pbc); g_debug ("IODEBUG::%s: frac= %d", iost, this_proj -> cell.frac); g_debug ("IODEBUG::%s: run= %d", iost, this_proj -> run); g_debug ("IODEBUG::%s: dmtx= %d", iost, this_proj -> dmtx); g_debug ("IODEBUG::%s: nspec= %d", iost, this_proj -> nspec); g_debug ("IODEBUG::%s: natomes= %d", iost, this_proj -> natomes); g_debug ("IODEBUG::%s: steps= %d", iost, this_proj -> steps); g_debug ("IODEBUG::%s: grtotcutoff= %f", iost, this_proj -> chemistry -> grtotcutoff); g_debug ("IODEBUG::%s: cvect[0][0]= %f, cvect[0][1]= %f, cvect[0][2]= %f", iost, this_proj -> cell.box[0].vect[0][0], this_proj -> cell.box[0].vect[0][1], this_proj -> cell.box[0].vect[0][2]); g_debug ("IODEBUG::%s: cvect[1][0]= %f, cvect[1][1]= %f, cvect[1][2]= %f", iost, this_proj -> cell.box[0].vect[1][0], this_proj -> cell.box[0].vect[1][1], this_proj -> cell.box[0].vect[1][2]); g_debug ("IODEBUG::%s: cvect[2][0]= %f, cvect[2][1]= %f, cvect[2][2]= %f", iost, this_proj -> cell.box[0].vect[2][0], this_proj -> cell.box[0].vect[2][1], this_proj -> cell.box[0].vect[2][2]); g_debug ("IODEBUG::%s: langles[0]= %f, langles[1]= %f, langles[2]= %f", iost, this_proj -> cell.box[0].param[1][0], this_proj -> cell.box[0].param[1][1], this_proj -> cell.box[0].param[1][2]); g_debug ("IODEBUG::%s: vmod[0]= %f, vmod[1]= %f, vmod[2]= %f", iost, this_proj -> cell.box[0].param[0][0], this_proj -> cell.box[0].param[0][1], this_proj -> cell.box[0].param[0][2]); for (i=0; i num_delta[i]); g_debug ("IODEBUG::%s: i= %d, delta[i]= %f", iost, i, this_proj -> delta[i]); g_debug ("IODEBUG::%s: i= %d, min[i]= %f", iost, i, this_proj -> min[i]); g_debug ("IODEBUG::%s: i= %d, max[i]= %f", iost, i, this_proj -> max[i]); } for (i=0; i visok[i]); g_debug ("IODEBUG::%s: i= %d, initok[i]= %d", iost, i, this_proj -> initok[i]); } if (this_proj -> natomes != 0 && this_proj -> nspec != 0) { for (i=0; i steps; i++) { g_debug ("IODEBUG::%s: proj.atom[%d][%d].x= %f, proj.atom[%d][%d].x= %f", iost, i, 0, this_proj -> atoms[i][0].x, i, this_proj -> natomes-1, this_proj -> atoms[i][this_proj -> natomes - 1].x); g_debug ("IODEBUG::%s: proj.atom[%d][%d].y= %f, proj.atom[%d][%d].y= %f", iost, i, 0, this_proj -> atoms[i][0].y, i, this_proj -> natomes - 1, this_proj -> atoms[i][this_proj -> natomes - 1].y); g_debug ("IODEBUG::%s: proj.atom[%d][%d].z= %f, proj.atom[%d][%d].z= %f", iost, i, 0, this_proj -> atoms[i][0].z, i, this_proj -> natomes - 1, this_proj -> atoms[i][this_proj -> natomes - 1].z); } for (i=0; i nspec; i++) { g_debug ("IODEBUG::%s: i= %d, nsps[i]= %d", iost, i, this_proj -> chemistry -> nsps[i]); g_debug ("IODEBUG::%s: i= %d, atid[i]= %d", iost, i, (int)this_proj -> chemistry -> chem_prop[CHEM_Z][i]); g_debug ("IODEBUG::%s: i= %d, mass[i]= %f", iost, i, this_proj -> chemistry -> chem_prop[CHEM_M][i]); g_debug ("IODEBUG::%s: i= %d, rad[i]= %f", iost, i, this_proj -> chemistry -> chem_prop[CHEM_R][i]); } for (i=0; i nspec; i++) { for (j=0; j nspec; j++) { g_debug ("IODEBUG::%s: i= %d, j= %d, cutoffs[i][j]= %f", iost, i, j, this_proj -> chemistry -> cutoffs[i][j]); } } } debug_lattice_info (this_proj, iost); } /*! \fn void debug_chemical_information (project * this_proj) \brief debug chemical data info \param this_proj the target project */ void debug_chemical_information (project * this_proj) { g_debug ("Number of species: %d", this_proj -> nspec); int i; for (i=0; i nspec; i++) { g_debug ("Spec= %d, label= %s, element= %s ", i+1, this_proj -> chemistry -> label[i], this_proj -> chemistry -> element[i]); g_debug (" nsps[%d]= %d, formula[%d]= %d", i+1, this_proj -> chemistry -> nsps[i], i+1, this_proj -> chemistry -> formula[i]); } g_debug ("Number of atoms: %d", this_proj -> natomes); for (i=0; i natomes; i++) { g_debug (" at= %d, lot[%d]= %d", i+1, i+1, this_proj -> atoms[0][i].sp); } } Atomes-GNU-1.1.14/src/project/init_p.c000066400000000000000000000061051457665371200173620ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file init_p.c * @short Functions to initialize an atomes project * @author Sébastien Le Roux */ /* * This file: 'init_p.c' * * Contains: * - The functions to initialize an atomes project * * List of functions: void init_curves_and_calc (project * this_proj); void init_project (gboolean alloc_box); */ #include "global.h" #include "bind.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "curve.h" #include "glview.h" #include "glwindow.h" /*! \fn void init_curves_and_calc (project * this_proj) \brief for a project reset analysis, curves, data to not performed \param this_proj the target project */ void init_curves_and_calc (project * this_proj) { int i; for (i=0; i runok[i] = FALSE; this_proj -> initok[i] = FALSE; this_proj -> visok[i] = FALSE; } } /*! \fn void init_project (gboolean alloc_box) \brief initialize a new project \param alloc_box allocate data for the MD box (1/0) */ void init_project (gboolean alloc_box) { int i; project * new_proj = g_malloc0 (sizeof*proj); nprojects ++; activep = nprojects - 1; new_proj -> id = activep; new_proj -> name = g_strdup_printf("%s%2d", "Project N°", activep); new_proj -> delta[RI] = new_proj -> delta[CH] = 1.0; new_proj -> min[RI] = new_proj -> min[CH] = 1; new_proj -> delta[SP] = 2.0; for (i=0; i<5; i++) new_proj -> rsparam[i][1] = 10; new_proj -> csparam[5] = 10; new_proj -> rsearch[0] = -1; new_proj -> rsearch[1] = new_proj -> csearch = 500; new_proj -> tfile = -1; new_proj -> newproj = TRUE; new_proj -> steps = 1; new_proj -> xcor = 1; new_proj -> tunit = -1; new_proj -> sk_advanced[0] = 1.0; new_proj -> sk_advanced[1] = 15.0; new_proj -> coord = g_malloc0 (sizeof*new_proj -> coord); if (alloc_box) new_proj -> cell.box = g_malloc0(sizeof*new_proj -> cell.box); remove_edition_actions (); init_curves_and_calc (new_proj); new_proj -> numwid = -1; if (nprojects == 1) { workzone.first = g_malloc0 (sizeof*workzone.first); workzone.first = new_proj; workzone.last = g_malloc0 (sizeof*workzone.last); } else { new_proj -> prev = workzone.last; workzone.last -> next = new_proj; } workzone.last = new_proj; active_project_changed (new_proj -> id); prep_calc_actions (); new_proj -> newproj = FALSE; } Atomes-GNU-1.1.14/src/project/open_p.c000066400000000000000000000356301457665371200173650ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file open_p.c * @short Functions to start the reading of an atomes project file * @author Sébastien Le Roux */ /* * This file: 'open_p.c' * * Contains: * - The functions to start the reading of an atomes project file * * List of functions: int open_project (FILE * fp, int npi); char * read_string (int i, FILE * fp); gchar * read_this_string (FILE * fp); void initcnames (int w, int s); void allocatoms (project * this_proj); void alloc_proj_data (project * this_proj, int cid); chemical_data * alloc_chem_data (int spec); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "curve.h" #include "glview.h" extern void alloc_curves (int c); extern void init_box_calc (); extern void set_color_map_sensitive (glwin * view); extern void initgr (int r); extern void initsq (int r); extern void initbd (); extern void initang (); extern void initrng (); extern void initchn (); extern void initmsd (); extern void initsh (int s); /*! \fn char * read_string (int i, FILE * fp) \brief read a string from a file \param i the size of the string to read \param fp the file pointer */ char * read_string (int i, FILE * fp) { char * tmp = NULL; tmp = g_malloc0 (i*sizeof*tmp); int j; for (j=0; j 0) { gchar * str = g_strdup_printf ("%s", read_string (i, fp)); return str; } return NULL; } /*! \fn void initcnames (int w, int s) \brief initialize curve namees \param w calculation id \param s initialize spherical harmonics or not */ void initcnames (int w, int s) { switch (w) { case GR: initgr (w); break; case SQ: initsq (w); break; case SK: initsq (w); break; case GK: initgr (w); break; case BD: initbd (); break; case AN: initang (); break; case RI: initrng (); break; case CH: initchn (); break; case SP: initsh (0); break; default: initmsd (); break; } } /*! \fn void allocatoms (project * this_proj) \brief allocate project data \param this_proj the target project */ void allocatoms (project * this_proj) { int i, j; if (this_proj -> atoms != NULL) { g_free (this_proj -> atoms); this_proj -> atoms = NULL; } this_proj -> atoms = g_malloc0 (this_proj -> steps*sizeof*this_proj -> atoms); for (i=0; i < this_proj -> steps; i++) { this_proj -> atoms[i] = g_malloc0 (this_proj -> natomes*sizeof*this_proj -> atoms[i]); for (j=0; j natomes; j++) { this_proj -> atoms[i][j].style = NONE; } } } /*! \fn chemical_data * alloc_chem_data (int spec) \brief allocate chemistry data \param spec the number of chemical species */ chemical_data * alloc_chem_data (int spec) { chemical_data * chem = g_malloc0 (sizeof*chem); chem -> label = g_malloc0 (spec*sizeof*chem -> label); chem -> element = g_malloc0 (spec*sizeof*chem -> element); chem -> nsps = allocint (spec); chem -> formula = allocint (spec); chem -> cutoffs = allocddouble (spec, spec); chem -> chem_prop = allocddouble (CHEM_PARAMS, spec); return chem; } /*! \fn void alloc_proj_data (project * this_proj, int cid) \brief allocate data \param this_proj the target project \param cid Allocate chemistry data (1/0) */ void alloc_proj_data (project * this_proj, int cid) { if (cid) this_proj -> chemistry = alloc_chem_data (this_proj -> nspec); allocatoms (this_proj); } /*! \fn int open_project (FILE * fp, int npi) \brief open atomes project file \param fp the file pointer \param npi the total number of projects in the workspace */ int open_project (FILE * fp, int npi) { int i, j, k; gchar * ver; // First 2 lines for compatibility issues if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; ver = g_malloc0 (i*sizeof*ver); if (fread (ver, sizeof(char), i, fp) != i) return ERROR_PROJECT; gboolean labels_in_file = FALSE; gboolean correct_x = TRUE; // test on ver for version if (g_strcmp0(ver, "%\n% project file v-2.6\n%\n") == 0) { labels_in_file = TRUE; } else if (g_strcmp0(ver, "%\n% project file v-2.7\n%\n") == 0) { labels_in_file = TRUE; correct_x = FALSE; } #ifdef DEBUG g_debug ("%s", ver); #endif // DEBUG g_free (ver); // After that we read the data active_project -> name = read_this_string (fp); if (active_project -> name == NULL) return ERROR_PROJECT; #ifdef DEBUG g_debug ("OPEN_PROJECT: Project name= %s",active_project -> name); #endif if (fread (& active_project -> tfile, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (active_project -> tfile > -1) { active_project -> coordfile = read_this_string (fp); if (active_project -> coordfile == NULL) return ERROR_PROJECT; } if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (i > -1) { active_project -> bondfile = read_this_string (fp); if (active_project -> bondfile == NULL) return ERROR_PROJECT; } if (fread (active_project -> runok, sizeof(gboolean), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fread (active_project -> initok, sizeof(gboolean), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fread (active_project -> visok, sizeof(gboolean), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fread (& active_project -> nspec, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fread (& active_project -> natomes, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fread (& active_project -> steps, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fread (& active_cell -> pbc, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fread (& active_cell -> frac, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fread (& active_cell -> ltype, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (i > 1 && i != active_project -> steps) return ERROR_PROJECT; if (i > 1) active_cell -> npt = TRUE; active_cell -> box = g_malloc0 (i*sizeof*active_cell -> box); active_box = & active_cell -> box[0]; for (j=0; j box[j].vect[k], sizeof(double), 3, fp) != 3) return ERROR_PROJECT; } if (fread (active_cell -> box[j].param[0], sizeof(double), 3, fp) != 3) return ERROR_PROJECT; if (fread (active_cell -> box[j].param[1], sizeof(double), 3, fp) != 3) return ERROR_PROJECT; } if (fread (& active_cell -> crystal, sizeof(gboolean), 1, fp) != 1) return ERROR_PROJECT; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (active_cell -> crystal && i) { active_cell -> sp_group = g_malloc0(sizeof*active_cell -> sp_group); active_cell -> sp_group -> id = i; active_cell -> sp_group -> bravais = read_this_string (fp); if (! active_cell -> sp_group -> bravais) return ERROR_PROJECT; active_cell -> sp_group -> hms = read_this_string (fp); if (! active_cell -> sp_group -> hms) return ERROR_PROJECT; active_cell -> sp_group -> setting = read_this_string (fp); if (! active_cell -> sp_group -> setting) return ERROR_PROJECT; } if (fread (& active_project -> run, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fread (& active_project -> initgl, sizeof(gboolean), 1, fp) != 1) return ERROR_PROJECT; if (fread (active_project -> tmp_pixels, sizeof(int), 2, fp) != 2) return ERROR_PROJECT; if (fread (active_project -> num_delta, sizeof(int), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fread (active_project -> delta, sizeof(double), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fread (active_project -> rsearch, sizeof(int), 2, fp) != 2) return ERROR_PROJECT; for (i=0; i<5; i++) { if (fread (active_project -> rsparam[i], sizeof(int), 6, fp) != 6) return ERROR_PROJECT; if (fread (active_project -> rsdata[i], sizeof(double), 5, fp) != 5) return ERROR_PROJECT; } if (fread (& active_project -> csearch, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fread (active_project -> csparam, sizeof(int), 7, fp) != 7) return ERROR_PROJECT; if (fread (active_project -> csdata, sizeof(double), 2, fp) != 2) return ERROR_PROJECT; if (fread (active_project -> min, sizeof(double), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fread (active_project -> max, sizeof(double), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fread (& active_project -> tunit, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (active_project -> natomes != 0 && active_project -> nspec != 0) { alloc_proj_data (active_project, 1); active_chem = active_project -> chemistry; if (labels_in_file) { for (i=0; i nspec; i++) { active_chem -> label[i] = read_this_string (fp); active_chem -> element[i] = read_this_string (fp); } } if (fread (active_chem -> nsps, sizeof(int), active_project -> nspec, fp) != active_project -> nspec) return ERROR_PROJECT; if (fread (active_chem -> formula, sizeof(int), active_project -> nspec, fp) != active_project -> nspec) return ERROR_PROJECT; j = 0; for (i=0; i nspec; i++) j+= active_chem -> nsps[i]; if (j != active_project -> natomes) return ERROR_PROJECT; for (i=0; i chem_prop[i], sizeof(double), active_project -> nspec, fp) != active_project -> nspec) return ERROR_PROJECT; } if (correct_x) { for (i=0; i nspec; i++) { active_chem -> chem_prop[CHEM_X][i] = active_chem -> chem_prop[CHEM_Z][i]; } } if (fread (& active_chem -> grtotcutoff, sizeof(double), 1, fp) != 1) return ERROR_PROJECT; for ( i = 0 ; i < active_project -> nspec ; i ++ ) { if (fread (active_chem -> cutoffs[i], sizeof(double), active_project -> nspec, fp) != active_project -> nspec) return ERROR_PROJECT; } for (i=0; i steps; i++) { for (j=0; j< active_project -> natomes; j++) { if (read_atom_a (fp, active_project, i, j) != OK) return ERROR_ATOM_A; } } init_box_calc (); if (active_project -> run) { #ifdef DEBUG g_debug ("OPEN_PROJECT:: So far so good ... still"); g_debug ("OPEN_PROJECT:: RUN PROJECT\n"); #endif i = alloc_data_ (& active_project -> natomes, & active_project -> nspec, & active_project -> steps); if (i == 1) { if (! labels_in_file) { j = 1; prep_spec_ (active_chem -> chem_prop[CHEM_Z], active_chem -> nsps, & j); } initcwidgets (); // Read curves for (i=0; i initok[i]) initcnames (i, 0); if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; #ifdef DEBUG g_debug ("\n**********************************************\ni= %d\n**********************************************\n", i); #endif if (i != 0) { j = 0; if (fread (& j, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (j) { active_project -> numc[SP] = j; active_project -> numwid += j; alloc_curves (SP); addcurwidgets (activep, SP, 0); active_project -> initok[SP] = TRUE; for (k=0; k curves[SP][k] -> name = read_this_string (fp); if (active_project -> curves[SP][k] -> name == NULL) return ERROR_PROJECT; } } for (j=0; j initgl) { gboolean tmp_bonding; if (fread (& tmp_bonding, sizeof(gboolean), 1, fp) != 1) return ERROR_PROJECT; if (fread (tmp_adv_bonding, sizeof(gboolean), 2, fp) != 2) return ERROR_PROJECT; apply_project (TRUE); fill_tool_model (); int tmpcoord[10]; if (fread (tmpcoord, sizeof(int), 10, fp) != 10) return ERROR_PROJECT; if (active_glwin -> bonding) { for (i=0; i<2; i++) if (tmpcoord[i] != active_project -> coord -> totcoord[i]) return ERROR_PROJECT; for (i=2; i<4; i++) { if (active_glwin -> adv_bonding[i-2]) { if (tmpcoord[i] != active_project -> coord -> totcoord[i]) return ERROR_PROJECT; } } } for (i=0; i<10; i++) active_project -> coord -> totcoord[i] = tmpcoord[i]; // Read molecule info if ((active_project -> natomes > ATOM_LIMIT || active_project -> steps > STEP_LIMIT) && tmp_adv_bonding[1]) { if (read_mol (fp) != OK) return ERROR_MOL; } for (i=0; i<2; i++) active_glwin -> adv_bonding[i] = tmp_adv_bonding[i]; active_glwin -> bonding = tmp_bonding; if (read_bonding (fp) != OK) return ERROR_COORD; i = read_opengl_image (fp, active_project, active_glwin -> anim -> last -> img, active_project -> nspec); if (i != OK) return i; i = read_dlp_field_data (fp, active_project); if (i != OK) return i; i = read_lmp_field_data (fp, active_project); if (i != OK) return i; for (i=0; i<2; i++) { j = read_cpmd_data (fp, i, active_project); if (j != OK) return j; } for (i=0; i<2; i++) { j = read_cp2k_data (fp, i, active_project); if (j != OK) return j; } #ifdef GTK3 // GTK3 Menu Action To Check set_color_map_sensitive (active_glwin); #endif return OK; } return OK; } else { return ERROR_UPDATE; } } Atomes-GNU-1.1.14/src/project/project.c000066400000000000000000000066341457665371200175550ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file project.c * @short Project management functions * @author Sébastien Le Roux */ /* * This file: 'project.c' * * Contains: * - Project management functions * * List of functions: void save_pos_ (int * nat, int lot[* nat], int * num, double xpos[* num], double ypos[* num], double zpos[* num]); void send_steps_ (int * steps); project * get_project_by_id (int p); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "bind.h" workspace workzone; project * active_project = NULL; chemical_data * active_chem = NULL; coord_info * active_coord = NULL; cell_info * active_cell = NULL; box_info * active_box = NULL; image * active_image = NULL; glwin * active_glwin = NULL; project * opengl_project = NULL; /*! \fn void save_pos_ (int * nat, int lot[*nat], int * num, double xpos[*num], double ypos[*num], double zpos[*num]) \brief retrieve atomic coordinates from Fortran90 \param nat Number of atoms \param lot List of chemical species by atoms \param num Number of coordinates (NA x NS) \param xpos x coordinates \param ypos y coordinates \param zpos z coordinates */ void save_pos_ (int * nat, int lot[* nat], int * num, double xpos[* num], double ypos[* num], double zpos[* num]) { int i, j, k; k = 0; for ( i=0 ; i < active_project -> steps ; i++ ) { for (j=0; j < active_project -> natomes; j++) { active_project -> atoms[i][j].x = xpos[k]; active_project -> atoms[i][j].y = ypos[k]; active_project -> atoms[i][j].z = zpos[k]; active_project -> atoms[i][j].sp = lot[j]-1; active_project -> atoms[i][j].id = j; active_project -> atoms[i][j].show[0] = TRUE; active_project -> atoms[i][j].show[1] = TRUE; active_project -> atoms[i][j].label[0] = FALSE; active_project -> atoms[i][j].label[1] = FALSE; if (active_glwin == NULL) { active_project -> atoms[i][j].pick[0] = FALSE; } else if (! active_image -> selected[0] -> selected) { active_project -> atoms[i][j].pick[0] = FALSE; } active_project -> atoms[i][j].cloned = FALSE; k++; } } } /*! \fn void send_steps_ (int * steps) \brief retrieve the number of MD steps from Fortran90 \param steps the number of MD steps */ void send_steps_ (int * steps) { active_project -> steps = * steps; } /*! \fn project * get_project_by_id (int p) \brief get project pointer using id number \param p the id number */ project * get_project_by_id (int p) { project * tmp = workzone.first; int i; for (i=0; i id == p) return tmp; if (tmp -> next != NULL) tmp = tmp -> next; } return NULL; } Atomes-GNU-1.1.14/src/project/project.h000066400000000000000000000101071457665371200175500ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file project.h * @short Function declarations for reading atomes project file \n Function declarations for saving atomes project file * @author Sébastien Le Roux */ /* * This header file: 'project.h' * * Contains: - Function declarations for reading atomes project file - Function declarations for saving atomes project file */ #ifndef PROJECT_H_ #define PROJECT_H_ #define IODEBUG FALSE extern int num_bonds (int i); extern int num_angles (int i); extern int num_dihedrals (int i); // Read extern int read_atom_a (FILE * fp, project * this_proj, int s, int a); extern int read_atom_b (FILE * fp, project * this_proj, int s, int a); extern int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid); extern int read_project_curve (FILE * fp, int wid, int pid); extern int read_mol (FILE * fp); extern int read_bonding (FILE * fp); extern int read_dlp_field_data (FILE * fp, project * this_proj); extern int read_lmp_field_data (FILE * fp, project * this_proj); extern int read_cpmd_data (FILE * fp, int cid, project * this_proj); extern int read_cp2k_data (FILE * fp, int cid, project * this_proj); extern gchar * read_this_string (FILE * fp); extern void alloc_proj_data (project * this_proj, int cid); extern int open_project (FILE * fp, int wid); // Save extern int save_atom_a (FILE * fp, project * this_proj, int s, int a); extern int save_opengl_image (FILE * fp, project * this_proj, image * img, int sid); extern int save_project_curve (FILE * fp, int wid, project * this_proj, int rid, int cid); extern int save_dlp_field_data (FILE * fp, project * this_proj); extern int save_lmp_field_data (FILE * fp, project * this_proj); extern int save_cpmd_data (FILE * fp, int cid, project * this_proj); extern int save_cp2k_data (FILE * fp, int cid, project * this_proj); extern int save_this_string (FILE * fp, gchar * string); extern int save_mol (FILE * fp, project * this_proj); extern int save_bonding (FILE * fp, project * this_proj); extern int save_project (FILE * fp, project * this_proj, int wid); extern G_MODULE_EXPORT void set_color_map (GtkWidget * widg, gpointer data); extern int * save_color_map (glwin * view); extern void restore_color_map (glwin * view, int * colm); extern colormap * allocate_color_map (int pts, project * this_proj); extern gboolean setup_custom_color_map (float * data, project * this_proj, gboolean init); #ifdef GTK4 extern G_MODULE_EXPORT gboolean edit_tab (GtkWidget * widget, GdkEvent * event, gpointer fdata); #else extern G_MODULE_EXPORT gboolean edit_tab (GtkWidget * widget, GdkEventButton * event, gpointer fdata); #endif extern void init_curves_and_calc (project * this_proj); extern void init_project (gboolean alloc_box); extern int update_project (); extern void clean_view (); extern void view_buffer (GtkTextBuffer * buffer); extern void update_insert_combos (); extern void close_project (project * to_close); extern void to_close_this_project (int to_activate, project * this_proj); extern void hide_current_project (project * to_hide); extern void active_project_changed (int id); extern void opengl_project_changed (int id); extern G_MODULE_EXPORT void on_close_activate (GtkWidget * widg, gpointer cdata); extern void add_project (); extern void debugiocurve (project * this_proj, gboolean win, int rid, int cid, gchar * iost); extern void debugioproj (project * this_proj, gchar * iost); #endif Atomes-GNU-1.1.14/src/project/read_bond.c000066400000000000000000000166411457665371200200230ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_bond.c * @short Function to read bonding information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_bond.c' * * Contains: * - The function to read bonding information in the atomes project file format * * List of functions: int read_bonding (FILE * fp); */ #include "global.h" #include "project.h" #include "glview.h" extern void new_coord_menus (project * this_proj, coord_info * coord, int new_spec, int nmols, gboolean * showcoord[2], gboolean * showpoly[2], gboolean * showfrag, gboolean update_it, gboolean update_mol); /*! \fn int read_bonding (FILE * fp) \brief read bonding information from file \param fp the file pointer */ int read_bonding (FILE * fp) { int i, j, k, l, m; distance clo; coord_info * coord = g_malloc0 (sizeof*coord); coord -> species = active_project -> nspec; image * img = active_glwin -> anim -> last -> img; gboolean read_bond = FALSE; if (! active_glwin -> bonding || ! active_glwin -> adv_bonding[1] || active_project -> natomes > ATOM_LIMIT || active_project -> steps > STEP_LIMIT) { read_bond = TRUE; } if (read_bond) { active_glwin -> bonds = allocdint (active_project -> steps, 2); active_glwin -> bondid = g_malloc0 (active_project -> steps*sizeof*active_glwin -> bondid); for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (fread (active_project -> atoms[i][j].coord, sizeof(int), 5, fp) != 5) return ERROR_COORD; if (fread (& active_project -> atoms[i][j].numv, sizeof(int), 1, fp) != 1) return ERROR_COORD; if (active_project -> atoms[i][j].numv) { active_project -> atoms[i][j].vois = allocint(active_project -> atoms[i][j].numv); if (fread (active_project -> atoms[i][j].vois, sizeof(int), active_project -> atoms[i][j].numv, fp) != active_project -> atoms[i][j].numv) return ERROR_COORD; } } if (fread (active_glwin -> bonds[i], sizeof(int), 2, fp) != 2) return ERROR_COORD; active_glwin -> bondid[i] = g_malloc0 (2*sizeof*active_glwin -> bondid[i]); for (j=0; j<2; j++) { if (active_glwin -> bonds[i][j]) { active_glwin -> allbonds[j] += active_glwin -> bonds[i][j]; active_glwin -> bondid[i][j] = allocdint (active_glwin -> bonds[i][j], 2); if (j) active_glwin -> clones[i] = g_malloc0(active_glwin -> bonds[i][1]*sizeof*active_glwin -> clones[i]); for (k=0; k bonds[i][j]; k++) { if (fread (active_glwin -> bondid[i][j][k], sizeof(int), 2, fp) != 2) return ERROR_COORD; if (j) { l = active_glwin -> bondid[i][j][k][0]; m = active_glwin -> bondid[i][j][k][1]; clo = distance_3d (active_cell, (active_cell -> npt) ? i : 0, & active_project -> atoms[i][l], & active_project -> atoms[i][m]); active_glwin -> clones[i][k].x = clo.x; active_glwin -> clones[i][k].y = clo.y; active_glwin -> clones[i][k].z = clo.z; } } } } } for (i=0; i<2; i++) { coord -> ntg[i] = allocint(coord -> species); if (fread (coord -> ntg[i], sizeof(int), coord -> species, fp) != coord -> species) return ERROR_COORD; coord -> geolist[i] = g_malloc0 (coord -> species*sizeof*coord -> geolist[i]); if (i == 1) coord -> partial_geo = g_malloc0 (coord -> species*sizeof*coord -> partial_geo); for (j=0; j species; j++) { coord -> geolist[i][j] = g_malloc0 (coord -> ntg[i][j]*sizeof*coord -> geolist[i][j]); if (fread (coord -> geolist[i][j], sizeof(int), coord -> ntg[i][j], fp) != coord -> ntg[i][j]) return ERROR_COORD; if (i == 1) { coord -> partial_geo[j] = g_malloc0 (coord -> ntg[i][j]*sizeof*coord -> partial_geo[j]); for (k=0; k ntg[i][j]; k++) { coord -> partial_geo[j][k] = g_malloc0 (coord -> species*sizeof*coord -> partial_geo[j][k]); if (fread (coord -> partial_geo[j][k], sizeof(int), coord -> species, fp) != coord -> species) return ERROR_COORD; } } } } coord -> cmax = 0; coord -> cmin = 20; for (i=0; i species; i++) { for (j=0; j ntg[1][i]; j++) { coord -> cmax = max(coord -> cmax, coord -> geolist[1][i][j]); coord -> cmin = min(coord -> cmin, coord -> geolist[1][i][j]); } } } for (i=0; i<10; i++) { if (fread (& j, sizeof(int), 1, fp) != 1) return ERROR_COORD; if (i < 2 && active_glwin -> bonding && j != active_project -> coord -> totcoord[i]) return ERROR_COORD; if (i > 1 && i < 4 && active_glwin -> adv_bonding[i-2] && j != active_project -> coord -> totcoord[i]) return ERROR_COORD; if (i < 2) { if (fread (img -> show_atom[i], sizeof(gboolean), active_project -> nspec, fp) != active_project -> nspec) return ERROR_COORD; if (fread (img -> show_label[i], sizeof(gboolean), active_project -> nspec, fp) != active_project -> nspec) return ERROR_COORD; } if (active_project -> coord -> totcoord[i]) { if (! img -> show_poly[i] && (i < 2 || (i > 3 && i < 9))) img -> show_poly[i] = allocbool(active_project -> coord -> totcoord[i]); if (! img -> show_coord[i]) img -> show_coord[i] = allocbool(active_project -> coord -> totcoord[i]); if (fread (img -> show_coord[i], sizeof(gboolean), active_project -> coord -> totcoord[i], fp) != active_project -> coord -> totcoord[i]) return ERROR_RW; if (i < 2 || (i > 3 && i < 9)) { if (fread (img -> show_poly[i], sizeof(gboolean), active_project -> coord -> totcoord[i], fp) != active_project -> coord -> totcoord[i]) return ERROR_RW; } } } if (! active_glwin -> bonding || ! active_glwin -> adv_bonding[1] || active_project -> natomes > ATOM_LIMIT || active_project -> steps > STEP_LIMIT) { gboolean * showfrag = duplicate_bool (active_project -> coord -> totcoord[2], img -> show_coord[2]); gboolean * showcoord[2]; gboolean * showpoly[2]; for (i=0; i<2; i++) { showcoord[i] = duplicate_bool (active_project -> coord -> totcoord[i], img -> show_coord[i]); showpoly[i] = duplicate_bool (active_project -> coord -> totcoord[i], img -> show_poly[i]); } for (i=0; i<10; i++) coord -> totcoord[i] = active_project -> coord -> totcoord[i]; active_project -> coord -> cmax = coord -> cmax; active_project -> coord -> cmin = coord -> cmin; new_coord_menus (active_project, coord, active_project -> nspec, 0, showcoord, showpoly, showfrag, TRUE, TRUE); } return OK; } Atomes-GNU-1.1.14/src/project/read_curve.c000066400000000000000000000266761457665371200202360ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_curve.c * @short Functions to read curve data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_curve.c' * * Contains: * - The functions to read curve data in the atomes project file format * * List of functions: int read_project_curve (FILE * fp, int wid, int pid); gboolean read_data_layout (FILE * fp, DataLayout * layout); */ #include "global.h" #include "project.h" /*! \fn gboolean read_data_layout (FILE * fp, DataLayout * layout) \brief read data layout from file \param fp the file pointer \param layout the data layout to store the data */ gboolean read_data_layout (FILE * fp, DataLayout * layout) { if (fread (& layout -> datacolor, sizeof(ColRGBA), 1, fp) != 1) return FALSE; if (fread (& layout -> thickness, sizeof(double), 1, fp) != 1) return FALSE; if (fread (& layout -> dash, sizeof(int), 1, fp) != 1) return FALSE; if (fread (& layout -> glyph, sizeof(int), 1, fp) != 1) return FALSE; if (fread (& layout -> gsize, sizeof(double), 1, fp) != 1) return FALSE; if (fread (& layout -> gfreq, sizeof(int), 1, fp) != 1) return FALSE; if (fread (& layout -> hwidth, sizeof(double), 1, fp) != 1) return FALSE; if (fread (& layout -> hopac, sizeof(double), 1, fp) != 1) return FALSE; if (fread (& layout -> hpos, sizeof(int), 1, fp) != 1) return FALSE; if (fread (& layout -> aspect, sizeof(int), 1, fp) != 1) return FALSE; return TRUE; } /*! \fn int read_project_curve (FILE * fp, int wid, int pid) \brief read a project curve from file \param fp the file pointer \param wid the total number of projects in the workspace \param pid the active project id */ int read_project_curve (FILE * fp, int wid, int pid) { int i, j; int pic, rid, cid; if (wid > 0) { if (fread (& pic, sizeof(int), 1, fp) != 1) return ERROR_RW; } else { pic = pid; } project * this_proj = get_project_by_id (pic); if (fread (& rid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& cid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> displayed, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> ndata, sizeof(int), 1, fp) != 1) return ERROR_RW; this_proj -> curves[rid][cid] -> data[0] = allocdouble (this_proj -> curves[rid][cid] -> ndata); if (fread (this_proj -> curves[rid][cid] -> data[0], sizeof(double), this_proj -> curves[rid][cid] -> ndata, fp) != this_proj -> curves[rid][cid] -> ndata) return ERROR_RW; this_proj -> curves[rid][cid] -> data[1] = allocdouble (this_proj -> curves[rid][cid] -> ndata); if (fread (this_proj -> curves[rid][cid] -> data[1], sizeof(double), this_proj -> curves[rid][cid] -> ndata, fp) != this_proj -> curves[rid][cid] -> ndata) return ERROR_RW; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { this_proj -> curves[rid][cid] -> err = allocdouble (this_proj -> curves[rid][cid] -> ndata); if (fread (this_proj -> curves[rid][cid] -> err, sizeof(double), this_proj -> curves[rid][cid] -> ndata, fp) != this_proj -> curves[rid][cid] -> ndata) return ERROR_RW; } if (this_proj -> curves[rid][cid] -> displayed) { if (fread (this_proj -> curves[rid][cid] -> wsize, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> cmin, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> cmax, sizeof(double), 2, fp) != 2) return ERROR_RW; // Title if (fread (& this_proj -> curves[rid][cid] -> show_title, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> default_title, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (! this_proj -> curves[rid][cid] -> default_title) { this_proj -> curves[rid][cid] -> title = read_this_string (fp); if (this_proj -> curves[rid][cid] -> title == NULL) return ERROR_RW; } if (fread (this_proj -> curves[rid][cid] -> title_pos, sizeof(double), 2, fp) != 2) return ERROR_RW; this_proj -> curves[rid][cid] -> title_font = read_this_string (fp); if (this_proj -> curves[rid][cid] -> title_font == NULL) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> title_color, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; // Axis if (fread (this_proj -> curves[rid][cid] -> axmin, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> axmax, sizeof(double), 2, fp) != 2) return ERROR_RW; for (j=0; j<2; j++) { this_proj -> curves[rid][cid] -> axis_title[j] = read_this_string (fp); if (this_proj -> curves[rid][cid] -> axis_title[j] == NULL) return ERROR_RW; this_proj -> curves[rid][cid] -> axis_title_font[j] = read_this_string (fp); if (this_proj -> curves[rid][cid] -> axis_title_font[j] == NULL) return ERROR_RW; } if (fread (this_proj -> curves[rid][cid] -> axis_title_x, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> axis_title_y, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> scale, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> axis_defaut_title, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> autoscale, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> majt, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> mint, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> ticks_io, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> ticks_pos, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> majt_size, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> mint_size, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> labels_pos, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> labels_digit, sizeof(int), 2, fp) != 2) return ERROR_RW; for (j=0; j<2; j++) { this_proj -> curves[rid][cid] -> labels_font[j] = read_this_string (fp); if (this_proj -> curves[rid][cid] -> labels_font[j] == NULL) return ERROR_RW; } if (fread (this_proj -> curves[rid][cid] -> labels_angle, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> labels_shift_x, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> labels_shift_y, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> show_grid, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> show_axis, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; // Legend if (fread (& this_proj -> curves[rid][cid] -> show_legend, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; this_proj -> curves[rid][cid] -> legend_font = read_this_string (fp); if (this_proj -> curves[rid][cid] -> legend_font == NULL) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> legend_pos, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> legend_color, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> show_legend_box, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> legend_box_dash, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> legend_box_thickness, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> legend_box_color, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; // Frame if (fread (& this_proj -> curves[rid][cid] -> show_frame, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> frame_type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> frame_dash, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> frame_thickness, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> frame_color, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; if (fread (this_proj -> curves[rid][cid] -> frame_pos, sizeof(this_proj -> curves[rid][cid] -> frame_pos), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> backcolor, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; // Data this_proj -> curves[rid][cid] -> layout = g_malloc0 (sizeof*this_proj -> curves[rid][cid] -> layout); if (! read_data_layout (fp, this_proj -> curves[rid][cid] -> layout)) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> draw_id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> curves[rid][cid] -> bshift, sizeof(int), 1, fp) != 1) return ERROR_RW; this_proj -> curves[rid][cid] -> extrac = g_malloc0 (sizeof*this_proj -> curves[rid][cid] -> extrac); if (fread (& this_proj -> curves[rid][cid] -> extrac -> extras, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> curves[rid][cid] -> extrac -> extras > 0) { this_proj -> curves[rid][cid] -> extrac -> first = g_malloc0 (sizeof*this_proj -> curves[rid][cid] -> extrac -> first); this_proj -> curves[rid][cid] -> extrac -> last = g_malloc0 (sizeof*this_proj -> curves[rid][cid] -> extrac -> last); CurveExtra * ctmp = this_proj -> curves[rid][cid] -> extrac -> first; for (i=0; i curves[rid][cid] -> extrac -> extras; i++) { if (fread (& ctmp -> id.a, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& ctmp -> id.b, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& ctmp -> id.c, sizeof(int), 1, fp) != 1) return ERROR_RW; ctmp -> layout = g_malloc0 (sizeof*ctmp -> layout); if (! read_data_layout (fp, ctmp -> layout)) return ERROR_RW; if (i < this_proj -> curves[rid][cid] -> extrac -> extras - 1) { ctmp -> next = g_malloc0 (sizeof*ctmp -> next); ctmp -> next -> prev = ctmp; ctmp = ctmp -> next; } else if (i == this_proj -> curves[rid][cid] -> extrac -> extras - 1) { this_proj -> curves[rid][cid] -> extrac -> last = ctmp; } } } if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i == 1) { this_proj -> curves[rid][cid] -> cfile = read_this_string (fp); if (this_proj -> curves[rid][cid] -> cfile == NULL) return ERROR_RW; } } #ifdef DEBUG // debugiocurve (this_proj, win, rid, cid, "READ"); #endif return OK; } Atomes-GNU-1.1.14/src/project/read_field.c000066400000000000000000000537041457665371200201650ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_field.c * @short Functions to read DLPOLY force field data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_field.c' * * Contains: * - The functions to read DLPOLY force field data in the atomes project file format * * List of functions: int read_field_atom (FILE * fp); int read_field_shell (FILE * fp); int read_field_constraint (FILE * fp); int read_field_pmf (FILE * fp); int read_field_rigid (FILE * fp); int read_field_tethered (FILE * fp, int fid); int read_field_prop (FILE * fp, int fid, int pid); int read_field_struct (FILE * fp, int fid); int read_field_molecule (FILE * fp, int fid); int read_field_body (FILE * fp, int fid); int read_field_external (FILE * fp, int fid); int read_dlp_field_data (FILE * fp, project * this_proj); int read_lmp_field_data (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" #include "dlp_field.h" /*! \fn int read_field_atom (FILE * fp) \brief read field atom properties from file \param fp the file pointer */ int read_field_atom (FILE * fp) { if (fread (& tmp_fat -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fat -> fid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fat -> afid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fat -> type, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_fat -> name = read_this_string (fp); if (tmp_fat -> name == NULL) return ERROR_RW; if (fread (& tmp_fat -> num, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fat -> sp, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fat -> mass, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fat -> charge, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fat -> frozen, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_fat -> frozen_id = allocbool(tmp_fat -> num); if (fread (tmp_fat -> frozen_id, sizeof(gboolean), tmp_fat -> num, fp) != tmp_fat -> num) return ERROR_RW; if (fread (& tmp_fat -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; tmp_fat -> list = allocint(tmp_fat -> num); if (fread (tmp_fat -> list, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return ERROR_RW; tmp_fat -> list_id = allocint(tmp_fat -> num); if (fread (tmp_fat -> list_id, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return ERROR_RW; return OK; } /*! \fn int read_field_shell (FILE * fp) \brief read field core shell data from file \param fp the file pointer */ int read_field_shell (FILE * fp) { if (fread (& tmp_fshell -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (tmp_fshell -> ia, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (& tmp_fshell -> m, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fshell -> z, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fshell -> k2, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fshell -> k4, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fshell -> vdw, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fshell -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fshell -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_field_constraint (FILE * fp) \brief read field constraint data from file \param fp the file pointer */ int read_field_constraint (FILE * fp) { if (fread (& tmp_fcons -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (tmp_fcons -> ia, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (& tmp_fcons -> av, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fcons -> length, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fcons -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fcons -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_field_pmf (FILE * fp) \brief read field mean force potential data from file \param fp the file pointer */ int read_field_pmf (FILE * fp) { if (fread (& tmp_fpmf -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fpmf -> av, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fpmf -> length, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (tmp_fpmf -> num, sizeof(int), 2, fp) != 2) return ERROR_RW; int i; for (i=0; i<2; i++) { tmp_fpmf -> list[i] = allocint (tmp_fpmf -> num[i]); if (fread (tmp_fpmf -> list[i], sizeof(int), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return ERROR_RW; tmp_fpmf -> weight[i] = allocfloat (tmp_fpmf -> num[i]); if (fread (tmp_fpmf -> weight[i], sizeof(float), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return ERROR_RW; } if (fread (& tmp_fpmf -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fpmf -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_field_rigid (FILE * fp) \brief read field rigid constraints data from file \param fp the file pointer */ int read_field_rigid (FILE * fp) { if (fread (& tmp_frig -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_frig -> num, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_frig -> list = allocint (tmp_frig -> num); if (fread (tmp_frig -> list, sizeof(int), tmp_frig -> num, fp) != tmp_frig -> num) return ERROR_RW; if (fread (& tmp_frig -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_frig -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_field_tethered (FILE * fp, int fid) \brief read field tethered data from file \param fp the file pointer \param fid the field id */ int read_field_tethered (FILE * fp, int fid) { if (fread (& tmp_ftet -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_ftet -> num, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_ftet -> key, sizeof(int), 1, fp) != 1) return ERROR_RW; int i = fvalues[fid][0][tmp_ftet -> key]; tmp_ftet -> val = allocfloat (i); if (fread (tmp_ftet -> val, sizeof(float), i, fp) != i) return ERROR_RW; if (fread (& tmp_ftet -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_ftet -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_field_prop (FILE * fp, int fid, int pid) \brief read field property from file \param fp the file pointer \param fid the field id \param pid the property id */ int read_field_prop (FILE * fp, int fid, int pid) { if (fread (& tmp_fprop -> pid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fprop -> fpid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fprop -> key, sizeof(int), 1, fp) != 1) return ERROR_RW; int i = struct_id(pid+7); tmp_fprop -> aid = allocint (i); if (fread (tmp_fprop -> aid, sizeof(int), i, fp) != i) return ERROR_RW; i = fvalues[fid][pid+1][tmp_fprop -> key]; tmp_fprop -> val = allocfloat (i); if (fread (tmp_fprop -> val, sizeof(float), i, fp) != i) return ERROR_RW; if (fread (& tmp_fprop -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fprop -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_field_struct (FILE * fp, int fid) \brief read field structural properties from file \param fp the file pointer \param fid the field id */ int read_field_struct (FILE * fp, int fid) { if (fread (& tmp_fstr -> st, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fstr -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fstr -> num, sizeof(int), 1, fp) != 1) return ERROR_RW; int i, j; i = struct_id(tmp_fstr -> st + 7); tmp_fstr -> aid = allocint (i); if (fread (tmp_fstr -> aid, sizeof(int), i, fp) != i) return ERROR_RW; if (fread (& tmp_fstr-> av, sizeof(float), 1, fp) != 1) return ERROR_RW; tmp_fstr -> def = g_malloc0(sizeof*tmp_fstr -> def); tmp_fprop = tmp_fstr -> def; if (read_field_prop(fp, fid, tmp_fstr -> st) != OK) return ERROR_RW; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { tmp_fstr -> other = g_malloc0(sizeof*tmp_fstr -> other); tmp_fprop = tmp_fstr -> other; for (j=0; j st) != OK) return ERROR_RW; if (j < i-1) { tmp_fprop -> next = g_malloc0(sizeof*tmp_fprop -> next); tmp_fprop = tmp_fprop -> next; } } } return OK; } /*! \fn int read_field_molecule (FILE * fp, int fid) \brief read field molecule from file \param fp the file pointer \param fid the field id */ int read_field_molecule (FILE * fp, int fid) { if (fread (& tmp_fmol -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; //tmp_fmol -> mol = g_malloc0(sizeof*tmp_fmol -> mol); int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; // if (i == 20) i = 1; tmp_fmol -> mol = & active_project -> modelfc -> mols[0][i]; tmp_fmol -> name = read_this_string (fp); if (tmp_fmol -> name == NULL) return ERROR_RW; if (fread (& tmp_fmol -> multi, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_fmol -> fragments = allocint (tmp_fmol -> multi); if (fread (tmp_fmol -> fragments, sizeof(int), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return ERROR_RW; tmp_fmol -> atoms_id = g_malloc0(tmp_fmol -> mol -> natoms*sizeof*tmp_fmol -> atoms_id); for (i=0; i mol -> natoms; i++) { tmp_fmol -> atoms_id[i] = g_malloc0(tmp_fmol -> multi*sizeof*tmp_fmol -> atoms_id[i]); if (fread (tmp_fmol -> atoms_id[i], sizeof(dint), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return ERROR_RW; } if (fread (& tmp_fmol -> atoms, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_fmol -> first_atom = g_malloc0(sizeof*tmp_fmol -> first_atom); tmp_fat = tmp_fmol -> first_atom; for (i=0; i atoms; i++) { if (read_field_atom(fp) != OK) return ERROR_RW; if (i < tmp_fmol -> atoms-1) { tmp_fat -> next = g_malloc0(sizeof*tmp_fat -> next); tmp_fat = tmp_fat -> next; } } if (fread (& tmp_fmol -> shells, sizeof(int), 1, fp) != 1) return ERROR_RW; if (tmp_fmol -> shells) { tmp_fmol -> first_shell = g_malloc0(sizeof*tmp_fmol -> first_shell); tmp_fshell = tmp_fmol -> first_shell; for (i=0; i shells; i++) { if (read_field_shell(fp) != OK) return ERROR_RW; if (i < tmp_fmol -> shells - 1) { tmp_fshell -> next = g_malloc0(sizeof*tmp_fshell -> next); tmp_fshell = tmp_fshell -> next; } } } if (fread (& tmp_fmol -> constraints, sizeof(int), 1, fp) != 1) return ERROR_RW; if (tmp_fmol -> constraints) { tmp_fmol -> first_constraint = g_malloc0(sizeof*tmp_fmol -> first_constraint); tmp_fcons = tmp_fmol -> first_constraint; for (i=0; i constraints; i++) { if (read_field_constraint(fp) != OK) return ERROR_RW; if (i < tmp_fmol -> constraints - 1) { tmp_fcons -> next = g_malloc0(sizeof*tmp_fcons -> next); tmp_fcons = tmp_fcons -> next; } } } if (fread (& tmp_fmol -> pmfs, sizeof(int), 1, fp) != 1) return ERROR_RW; if (tmp_fmol -> pmfs) { tmp_fmol -> first_pmf = g_malloc0(sizeof*tmp_fmol -> first_pmf); tmp_fpmf = tmp_fmol -> first_pmf; for (i=0; i pmfs; i++) { if (read_field_pmf(fp) != OK) return ERROR_RW; if (i < tmp_fmol -> pmfs - 1) { tmp_fpmf -> next = g_malloc0(sizeof*tmp_fpmf -> next); tmp_fpmf = tmp_fpmf -> next; } } } if (fread (& tmp_fmol -> rigids, sizeof(int), 1, fp) != 1) return ERROR_RW; if (tmp_fmol -> rigids) { tmp_fmol -> first_rigid = g_malloc0(sizeof*tmp_fmol -> first_rigid); tmp_frig = tmp_fmol -> first_rigid; for (i=0; i rigids; i++) { if (read_field_rigid(fp) != OK) return ERROR_RW; if (i < tmp_fmol -> rigids - 1) { tmp_frig -> next = g_malloc0(sizeof*tmp_frig -> next); tmp_frig = tmp_frig -> next; } } } if (fread (& tmp_fmol -> tethered, sizeof(int), 1, fp) != 1) return ERROR_RW; if (tmp_fmol -> tethered) { tmp_fmol -> first_tethered = g_malloc0(sizeof*tmp_fmol -> first_tethered); tmp_ftet = tmp_fmol -> first_tethered; for (i=0; i tethered; i++) { if (read_field_tethered(fp, fid) != OK) return ERROR_RW; if (i < tmp_fmol -> tethered - 1) { tmp_ftet -> next = g_malloc0(sizeof*tmp_ftet -> next); tmp_ftet = tmp_ftet -> next; } } } if (fread (tmp_fmol -> nstruct, sizeof(int), 8, fp) != 8) return ERROR_RW; for (i=0; i<8; i++) { if (tmp_fmol -> nstruct[i]) { tmp_fmol -> first_struct[i] = g_malloc0(sizeof*tmp_fmol -> first_struct[i]); tmp_fstr = tmp_fmol -> first_struct[i]; for (j=0; j nstruct[i]; j++) { if (read_field_struct (fp, fid) != OK) return ERROR_RW; if (j < tmp_fmol -> nstruct[i]-1) { tmp_fstr -> next = g_malloc0(sizeof*tmp_fstr -> next); tmp_fstr = tmp_fstr -> next; } } } } return OK; } /*! \fn int read_field_body (FILE * fp, int fid) \brief read field nth body data from file \param fp the file pointer \param fid the field id */ int read_field_body (FILE * fp, int fid) { if (fread (& tmp_fbody -> bd, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fbody -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fbody -> key, sizeof(int), 1, fp) != 1) return ERROR_RW; if (tmp_fbody -> bd == 0) { tmp_fbody -> fpid = allocint (2); if (fread (tmp_fbody -> fpid, sizeof(int), 2, fp) != 2) return ERROR_RW; } int i, j; i = body_at(tmp_fbody -> bd); tmp_fbody -> na = allocint(i); if (fread (tmp_fbody -> na, sizeof(int), i, fp) != i) return ERROR_RW; tmp_fbody -> ma = g_malloc0(i*sizeof*tmp_fbody -> ma); tmp_fbody -> a = g_malloc0(i*sizeof*tmp_fbody -> a); for (j=0; j ma[j] = allocint(tmp_fbody -> na[j]); if (fread (tmp_fbody -> ma[j], sizeof(int), tmp_fbody -> na[j], fp) != tmp_fbody -> na[j]) return ERROR_RW; tmp_fbody -> a[j] = allocint(tmp_fbody -> na[j]); if (fread (tmp_fbody -> a[j], sizeof(int), tmp_fbody -> na[j], fp) != tmp_fbody -> na[j]) return ERROR_RW; } i = fvalues[fid][9+tmp_fbody -> bd][tmp_fbody -> key]; tmp_fbody -> val = allocfloat(i); if (fread (tmp_fbody -> val, sizeof(float), i, fp) != i) return ERROR_RW; if (fread (& tmp_fbody -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fbody -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_field_external (FILE * fp, int fid) \brief read field external data from file \param fp the file pointer \param fid the field id */ int read_field_external (FILE * fp, int fid) { if (fread (& tmp_fext -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& tmp_fext -> key, sizeof(int), 1, fp) != 1) return ERROR_RW; int i = fvalues[fid][14][tmp_fext -> key]; tmp_fext -> val = allocfloat(i); if (fread (tmp_fext -> val, sizeof(float), i, fp) != i) return ERROR_RW; if (fread (& tmp_fext -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_dlp_field_data (FILE * fp, project * this_proj) \brief read force field data from file \param fp the file pointer \param this_proj the target project */ int read_dlp_field_data (FILE * fp, project * this_proj) { int i, j, k, l, m, n; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (! i) return OK; this_proj -> force_field[0] = g_malloc0(sizeof*this_proj -> force_field[0]); // Allocate force field data this_proj -> force_field[0] -> sys_opts = allocdouble (17); this_proj -> force_field[0] -> io_opts = allocdouble (23); this_proj -> force_field[0] -> ana_opts = allocdouble (17); this_proj -> force_field[0] -> elec_opts = allocdouble (11); this_proj -> force_field[0] -> vdw_opts = allocdouble (6); this_proj -> force_field[0] -> met_opts = allocdouble (2); this_proj -> force_field[0] -> equi_opts = allocdouble (17); this_proj -> force_field[0] -> thermo_opts= allocdouble (10); this_proj -> force_field[0] -> md_opts = allocdouble (20); this_proj -> force_field[0] -> out_opts = allocdouble (31); // CONTROL file if (fread (this_proj -> force_field[0] -> sys_opts, sizeof(double), 17, fp) != 17) return ERROR_RW; if (fread (this_proj -> force_field[0] -> io_opts, sizeof(double), 23, fp) != 23) return ERROR_RW; if (fread (this_proj -> force_field[0] -> ana_opts, sizeof(double), 17, fp) != 17) return ERROR_RW; if (fread (this_proj -> force_field[0] -> elec_opts, sizeof(double), 11, fp) != 11) return ERROR_RW; if (fread (this_proj -> force_field[0] -> vdw_opts, sizeof(double), 6, fp) != 6) return ERROR_RW; if (fread (this_proj -> force_field[0] -> met_opts, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> force_field[0] -> equi_opts, sizeof(double), 17, fp) != 17) return ERROR_RW; if (fread (& this_proj -> force_field[0] -> ensemble, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> force_field[0] -> thermostat, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (this_proj -> force_field[0] -> thermo_opts, sizeof(double), 10, fp) != 10) return ERROR_RW; if (fread (this_proj -> force_field[0] -> md_opts, sizeof(double), 20, fp) != 20) return ERROR_RW; if (fread (this_proj -> force_field[0] -> out_opts, sizeof(double), 31, fp) != 31) return ERROR_RW; // FIELD file if (fread (this_proj -> force_field[0] -> prepare_file, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> force_field[0] -> afp, sizeof(gboolean), MAXDATC+MAXDATA, fp) != MAXDATC+MAXDATA) return ERROR_RW; if (fread (& this_proj -> force_field[0] -> type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> force_field[0] -> energy_unit, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> force_field[0] -> atom_init, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> force_field[0] -> molecules, sizeof(int), 1, fp) != 1) return ERROR_RW; if (! this_proj -> force_field[0] -> molecules) return ERROR_RW; this_proj -> force_field[0] -> first_molecule = g_malloc0(sizeof*this_proj -> force_field[0] -> first_molecule); tmp_fmol = this_proj -> force_field[0] -> first_molecule; for (i=0; i force_field[0] -> molecules; i++) { if (read_field_molecule (fp, 0) != OK) return ERROR_RW; // setup_field_molecule_neighbors (i, this_proj); for (j=0; j mol -> natoms; j++) { for (k=0; k multi; k++) { l = tmp_fmol -> atoms_id[j][k].a; m = tmp_fmol -> atoms_id[j][k].b; tmp_fat = tmp_fmol -> first_atom; while (tmp_fat -> id < l) tmp_fat = tmp_fat -> next; n = tmp_fat -> list[m]; this_proj -> atoms[0][n].fid = j; this_proj -> atoms[0][n].faid = l; } } if (i < this_proj -> force_field[0] -> molecules-1) { tmp_fmol -> next = g_malloc0(sizeof*tmp_fmol -> next); tmp_fmol = tmp_fmol -> next; } } if (fread (this_proj -> force_field[0] -> nbody, sizeof(int), 5, fp) != 5) return ERROR_RW; for (i=0; i<5; i++) { if (this_proj -> force_field[0] -> nbody[i]) { this_proj -> force_field[0] -> first_body[i] = g_malloc0(sizeof*this_proj -> force_field[0] -> first_body[i]); tmp_fbody = this_proj -> force_field[0] -> first_body[i]; for (j=0; j force_field[0] -> nbody[i]; j++) { if (read_field_body (fp, 0) != OK) return ERROR_RW; if (j < this_proj -> force_field[0] -> nbody[i]-1) { tmp_fbody -> next = g_malloc0(sizeof*tmp_fbody -> next); tmp_fbody = tmp_fbody -> next; } } } } // Tersoff potential cross terms if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { j = this_proj -> force_field[0] -> nbody[2] * (this_proj -> force_field[0] -> nbody[2] - 1) / 2; this_proj -> force_field[0] -> cross = g_malloc0(j*sizeof*this_proj -> force_field[0] -> cross); for (k=0; k force_field[0] -> cross[k] = g_malloc0(3*sizeof*this_proj -> force_field[0] -> cross[k]); if (fread (& this_proj -> force_field[0] -> cross[k], sizeof(double), 3, fp) != 3) return ERROR_RW; } } if (fread (& this_proj -> force_field[0] -> extern_fields, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> force_field[0] -> extern_fields) { this_proj -> force_field[0] -> first_external = g_malloc0(sizeof*this_proj -> force_field[0] -> first_external); tmp_fext = this_proj -> force_field[0] -> first_external; for (i=0; i force_field[0] -> extern_fields; i++) { if (read_field_external(fp, 0) != OK) return ERROR_RW; if (i < this_proj -> force_field[0] -> extern_fields-1) { tmp_fext -> next = g_malloc0(sizeof*tmp_fext -> next); tmp_fext = tmp_fext -> next; } } } return OK; } /*! \fn int read_lmp_field_data (FILE * fp, project * this_proj) \brief read LAMMPS field data from file \param fp the file pointer \param this_proj the target project */ int read_lmp_field_data (FILE * fp, project * this_proj) { int i; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (! i) return OK; return OK; } Atomes-GNU-1.1.14/src/project/read_mol.c000066400000000000000000000117531457665371200176670ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_mol.c * @short Functions to read molecule(s) data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_mol.c' * * Contains: * - The functions to read molecule(s) data in the atomes project file format * * List of functions: int read_atom_m (FILE * fp, int s, int a); int read_this_mol (FILE * fp, molecule * tmp); int read_mol (FILE * fp); */ #include "global.h" #include "project.h" #include "initcoord.h" #include "submenus.h" extern void duplicate_molecule (molecule * new_mol, molecule * old_mol); /*! \fn int read_atom_m (FILE * fp, int s, int a) \brief read atom fragment and molecule data \param fp the file pointer \param s the MD step \param a the atom number */ int read_atom_m (FILE * fp, int s, int a) { if (fread (& active_project -> atoms[s][a].coord[2], sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& active_project -> atoms[s][a].coord[3], sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_this_mol (FILE * fp, molecule * tmp) \brief read molecule data \param fp the file pointer \param tmp the molecule to store the data */ int read_this_mol (FILE * fp, molecule * tmp) { if (fread (& tmp -> id, sizeof(int), 1, fp) != 1) return 0; if (fread (& tmp -> md, sizeof(int), 1, fp) != 1) return 0; if (fread (& tmp -> multiplicity, sizeof(int), 1, fp) != 1) return 0; if (! tmp -> multiplicity) return 0; tmp -> fragments = allocint(tmp -> multiplicity); if (fread (tmp -> fragments, sizeof(int), tmp -> multiplicity, fp) != tmp -> multiplicity) return 0; if (fread (& tmp -> natoms, sizeof(int), 1, fp) != 1) return 0; if (fread (& tmp -> nspec, sizeof(int), 1, fp) != 1) return 0; tmp -> species = allocint(active_project -> nspec); if (fread (tmp -> species, sizeof(int), active_project -> nspec, fp) != active_project -> nspec) return 0; return 1; } /*! \fn int read_mol (FILE * fp) \brief read molecule(s) information from file \param fp the file pointer */ int read_mol (FILE * fp) { int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_MOL; if (! i) return OK; active_project -> modelfc = g_malloc0 (sizeof*active_project -> modelfc); for (i=1; i<4; i++) { if (fread (& j, sizeof(int), 1, fp) != 1) return ERROR_MOL; if (i == 1 && j != active_coord -> totcoord[1]) return ERROR_MOL; if (i > 1) active_coord -> totcoord[i] = j; } active_project -> modelfc -> mol_by_step = allocint(active_project -> steps); if (fread (active_project -> modelfc -> mol_by_step, sizeof(int), active_project -> steps, fp) != active_project -> steps) return ERROR_MOL; active_project -> modelfc -> mols = g_malloc0 (active_project -> steps*sizeof*active_project -> modelfc -> mols); for (i=0; i steps; i++) { active_project -> modelfc -> mols[i] = g_malloc0 (active_project -> modelfc -> mol_by_step[i]*sizeof*active_project -> modelfc -> mols[i]); } molecule * tmp = g_malloc0(sizeof*tmp); for (i=0; i steps; i++) { for (j=0; j modelfc -> mol_by_step[i]; j++) { if (! read_this_mol(fp, & active_project -> modelfc -> mols[i][j])) return ERROR_MOL; } } for (i=0; i steps; i++) { for (j=0; j< active_project -> natomes; j++) { if (read_atom_m (fp, i, j) != OK) return ERROR_MOL; } } #ifdef GTK3 // Now recreate menus for (i=2; i<4; i++) { init_opengl_coords (i, active_coord -> totcoord[i], 1); init_menu_fragmol_ (& i); active_glwin -> adv_bonding[i-2] = TRUE; for (j=2; j<4; j++) { detach_frag_mol_menu (active_glwin, i, j); } active_glwin -> ogl_coord[i+1] = destroy_this_widget (active_glwin -> ogl_coord[i+1]); if (i == 2) active_glwin -> ogl_coord[3] = menu_item_new_with_submenu ("Fragment(s)", active_project -> coord -> totcoord[2], add_menu_coord (active_glwin, 0, 2)); if (i == 3) active_glwin -> ogl_coord[4] = menu_item_new_with_submenu ("Molecule(s)", active_project -> coord -> totcoord[2], add_menu_coord (active_glwin, 0, 3)); GtkWidget * cmenu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (active_glwin -> ogl_coord[0])); gtk_menu_shell_insert (GTK_MENU_SHELL(cmenu), active_glwin -> ogl_coord[i+1], i+2); } #endif return OK; } Atomes-GNU-1.1.14/src/project/read_opengl.c000066400000000000000000000646111457665371200203650ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_opengl.c * @short Functions to read the OpenGL window data in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_opengl.c' * * Contains: * - The functions to read the OpenGL window data in the atomes project file format * * List of functions: int read_atom_a (FILE * fp, project * this_proj, int s, int a); int read_atom_b (FILE * fp, project * this_proj, int s, int a); int read_rings_chains_data (FILE * fp, glwin * view, int type, int rid, int size, int steps); int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid); */ #include "global.h" #include "project.h" #include "glview.h" #include "initcoord.h" /*! \fn int read_atom_a (FILE * fp, project * this_proj, int s, int a) \brief read atom properties from file (a) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int read_atom_a (FILE * fp, project * this_proj, int s, int a) { if (fread (& this_proj -> atoms[s][a].id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> atoms[s][a].sp, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> atoms[s][a].x, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> atoms[s][a].y, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> atoms[s][a].z, sizeof(double), 1, fp) != 1) return ERROR_RW; //g_debug ("Reading:: step= %d, at= %d, sp[%d]= %d, x[%d]= %f, y[%d]= %f, z[%d]= %f", // s, a+1, a, this_proj -> atoms[s][a].sp, a, this_proj -> atoms[s][a].x, a, this_proj -> atoms[s][a].y, a, this_proj -> atoms[s][a].z); return OK; } /*! \fn int read_atom_b (FILE * fp, project * this_proj, int s, int a) \brief read atom properties from file (b) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int read_atom_b (FILE * fp, project * this_proj, int s, int a) { if (fread (this_proj -> atoms[s][a].show, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fread (this_proj -> atoms[s][a].label, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fread (& this_proj -> atoms[s][a].style, sizeof(int), 1, fp) != 1) return ERROR_RW; int i, j, k, l, m; if (this_proj -> modelgl -> rings) { for (i=0; i<5; i++) { if (this_proj -> modelgl -> ring_max[i]) { this_proj -> atoms[s][a].rings[i] = g_malloc0 (this_proj -> rsparam[i][1]*sizeof*this_proj -> atoms[s][a].rings[i]); for (j=0; j rsparam[i][1]; j++) { m = 0; for (k=0; k modelgl -> num_rings[i][s][j]; k++) { for (l=0; l modelgl -> all_rings[i][s][j][k][l] == a) m ++; } this_proj -> atoms[s][a].rings[i][j] = allocint(m + 1); this_proj -> atoms[s][a].rings[i][j][0] = m; m = 1; for (k=0; k modelgl -> num_rings[i][s][j]; k++) { for (l=0; l modelgl -> all_rings[i][s][j][k][l] == a) { this_proj -> atoms[s][a].rings[i][j][m] = k; m ++; break; } } } } } } } if (this_proj -> modelgl -> chains) { if (this_proj -> modelgl -> chain_max) { this_proj -> atoms[s][a].chain = g_malloc0 (this_proj -> csparam[5]*sizeof*this_proj -> atoms[s][a].chain); for (j=0; j csparam[5]; j++) { m = 0; for (k=0; k modelgl -> num_chains[s][j]; k++) { for (l=0; l modelgl -> all_chains[s][j][k][l] == a) m ++; } this_proj -> atoms[s][a].chain[j] = allocint(m + 1); this_proj -> atoms[s][a].chain[j][0] = m; m = 1; for (k=0; k modelgl -> num_chains[s][j]; k++) { for (l=0; l modelgl -> all_chains[s][j][k][l] == a) { this_proj -> atoms[s][a].chain[j][m] = k; m ++; } } } } } } return OK; } /*! \fn int read_rings_chains_data (FILE * fp, glwin * view, int type, int rid, int size, int steps) \brief read rings and chains statistics data from file \param fp the file pointer \param view the glwin to store the data \param type Rings (0) or chains (1) \param rid the ring id or 0 \param size the size of the ring or chain \param steps the number of MD steps */ int read_rings_chains_data (FILE * fp, glwin * view, int type, int rid, int size, int steps) { int i, j, k; int * tmpcoo, * tmpcoord; if (! type) { if (fread (& view -> ring_max[rid], sizeof(int), 1, fp) != 1) return ERROR_RW; if (view -> ring_max[rid]) { view -> num_rings[rid] = allocdint (steps, size); view -> show_rpoly[rid] = g_malloc0 (steps*sizeof*view -> show_rpoly[rid]); view -> all_rings[rid] = g_malloc0 (steps*sizeof*view -> all_rings[rid]); tmpcoo = allocint(size); for (i=0; i num_rings[rid][i], sizeof(int), size, fp) != size) return ERROR_RW; view -> all_rings[rid][i] = g_malloc0 (size*sizeof*view -> all_rings[rid][i]); view -> show_rpoly[rid][i] = g_malloc0 (size*sizeof*view -> show_rpoly[rid][i]); for (j=0; j num_rings[rid][i][j]; if (view -> num_rings[rid][i][j]) { view -> all_rings[rid][i][j] = allocdint (view -> num_rings[rid][i][j], j+1); view -> show_rpoly[rid][i][j] = allocbool (view -> num_rings[rid][i][j]); if (fread (view -> show_rpoly[rid][i][j], sizeof(int), view -> num_rings[rid][i][j], fp) != view -> num_rings[rid][i][j]) return ERROR_RW; for (k=0; k num_rings[rid][i][j]; k++) { if (fread (view -> all_rings[rid][i][j][k], sizeof(int), j+1, fp) != j+1) return ERROR_RW; } } } } i = 0; for (j=0; j anim -> last -> img -> show_coord[j]); init_opengl_coords (4+rid, i, 1); k = 0; init_menurings_ (& j, & rid, & i, tmpcoord, & k); g_free (tmpcoo); g_free (tmpcoord); view -> anim -> last -> img -> show_coord[j] = duplicate_bool(i, show_rings); g_free (show_rings); } } else { if (fread (& view -> chain_max, sizeof(int), 1, fp) != 1) return ERROR_RW; if (view -> chain_max) { view -> num_chains = allocdint (steps, size); view -> all_chains = g_malloc0 (steps*sizeof*view -> all_rings[rid]); tmpcoo = allocint(size); for (i=0; i num_chains[i], sizeof(int), size, fp) != size) return ERROR_RW; view -> all_chains[i] = g_malloc0 (size*sizeof*view -> all_chains[i]); for (j=0; j num_chains[i][j]; if (view -> num_chains[i][j]) { view -> all_chains[i][j] = allocdint (view -> num_chains[i][j], j+1); for (k=0; k num_chains[i][j]; k++) { if (fread (view -> all_chains[i][j][k], sizeof(int), j+1, fp) != j+1) return ERROR_RW; } } } } i = 0; for (j=0; j anim -> last -> img -> show_coord[j]); init_opengl_coords (j, i, 1); init_menurings_ (& j, & k , & i, tmpcoord, & k); g_free (tmpcoo); g_free (tmpcoord); view -> anim -> last -> img -> show_coord[j] = duplicate_bool(i, show_chains); g_free (show_chains); } } return OK; } /*! \fn int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid) \brief read OpenGL image properties from file \param fp the file pointer \param this_proj the target project \param img the latest image to store the data \param sid the number of chemical species */ int read_opengl_image (FILE * fp, project * this_proj, image * img, int sid) { int i, j, k, l, m, n; gboolean val; if (fread (& img -> backcolor, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; if (fread (img -> color_map, sizeof(int), 2, fp) != 2) return ERROR_RW; if (img -> color_map[0] > ATOM_MAPS-1) { img -> color_map[0] -= 10; if (fread (& j, sizeof(int), 1, fp) != 1) return ERROR_RW; this_proj -> modelgl -> custom_map = allocate_color_map (j, this_proj); this_proj -> modelgl -> custom_map -> points = j; if (fread (& this_proj -> modelgl -> custom_map -> cmax, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& this_proj -> modelgl -> custom_map -> cmin, sizeof(int), 1, fp) != 1) return ERROR_RW; this_proj -> modelgl -> custom_map -> positions = allocfloat (j); this_proj -> modelgl -> custom_map -> values = g_malloc (j*sizeof*this_proj -> modelgl -> custom_map -> values); if (fread (this_proj -> modelgl -> custom_map -> positions, sizeof(float), j, fp) != j) return ERROR_RW; if (fread (this_proj -> modelgl -> custom_map -> values, sizeof(ColRGBA), j, fp) != j) return ERROR_RW; j = this_proj -> steps*this_proj -> natomes; for (i=0; i steps; i++) { if (fread (this_proj -> modelgl -> custom_map -> data[i], sizeof(float), this_proj -> natomes, fp) != this_proj -> natomes) return ERROR_RW; } setup_custom_color_map (NULL, this_proj, FALSE); } if (fread (& img -> cloned_poly, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (img -> at_color, sizeof(ColRGBA), sid*2, fp) != sid*2) return ERROR_RW; if (fread (img -> sphererad, sizeof(double), sid*2, fp) != sid*2) return ERROR_RW; if (fread (img -> pointrad, sizeof(double), sid*2, fp) != sid*2) return ERROR_RW; if (fread (img -> atomicrad, sizeof(double), sid*2, fp) != sid*2) return ERROR_RW; for (i=0; i bondrad[i], sizeof(double), 2*sid, fp) != 2*sid) return ERROR_RW; if (fread (img -> linerad[i], sizeof(double), 2*sid, fp) != 2*sid) return ERROR_RW; } if (fread (img -> radall, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fread (& img -> draw_clones, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (img -> labels_position, sizeof(int), 5, fp) != 5) return ERROR_RW; if (fread (img -> labels_render, sizeof(int), 5, fp) != 5) return ERROR_RW; if (fread (img -> labels_scale, sizeof(int), 5, fp) != 5) return ERROR_RW; if (fread (img -> labels_format, sizeof(int), 2, fp) != 2) return ERROR_RW; for (i=0; i<5; i++) { if (fread (img -> labels_shift[i], sizeof(double), 3, fp) != 3) return ERROR_RW; if (fread (& val, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (val) { if (i < 2) { j = 2*sid; } else if (i == 2) { j = 3; } else { j = 1; } img -> labels_color[i] = g_malloc (j*sizeof*img -> labels_color[i]); for (k=0; k labels_color[i][k], sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; } } img -> labels_font[i] = read_this_string (fp); if (img -> labels_font[i] == NULL) return ERROR_RW; } // Measures if (fread (& img -> mtilt, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (& img -> mpattern, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> mfactor, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> mwidth, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fread (& img -> m_is_pressed, sizeof(double), 1, fp) != 1) return ERROR_RW; // Model box and axis if (fread (img -> box_axis, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fread (img -> box_axis_rad, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fread (img -> box_axis_line, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fread (& img -> box_color, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; if (fread (img -> extra_cell, sizeof(int), 3, fp) != 3) return ERROR_RW; // Axis if (fread (& img -> axispos, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> axis_length, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fread (img -> axis_pos, sizeof(double), 3, fp) != 3) return ERROR_RW; if (fread (& val, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (val) { img -> axis_color = g_malloc (3*sizeof*img -> axis_color); for (i=0; i<3; i++) { if (fread (& img -> axis_color[i], sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; } } if (fread (& img -> axis_labels, sizeof(int), 1, fp) != 1) return ERROR_RW; for (i=0; i<3; i++) { img -> axis_title[i] = read_this_string (fp); if (img -> axis_title[i] == NULL) return ERROR_RW; } // OpenGL if (fread (& img -> p_depth, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fread (& img -> gnear, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fread (& img -> gfar, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fread (& img -> gleft, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fread (& img -> gright, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fread (& img -> gtop, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fread (& img -> gbottom, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fread (& img -> rotation_quaternion, sizeof(vec4_t), 1, fp) != 1) return ERROR_RW; if (fread (& img -> rotation_mode, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> zoom, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fread (img -> c_shift, sizeof(GLdouble), 2, fp) != 2) return ERROR_RW; if (fread (& img -> style, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> quality, sizeof(GLint), 1, fp) != 1) return ERROR_RW; if (fread (& img -> render, sizeof(GLint), 1, fp) != 1) return ERROR_RW; if (fread (& img -> lights, sizeof(int), 1, fp) != 1) return ERROR_RW; if (img -> l_ght != NULL) { g_free (img -> l_ght); img -> l_ght = NULL; } img -> l_ght = g_malloc0 (img -> lights*sizeof*img -> l_ght); for (i=0; i lights; i++) { if (fread (& img -> l_ght[i].type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> l_ght[i].fix, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> l_ght[i].show, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> l_ght[i].position, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fread (& img -> l_ght[i].direction, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fread (& img -> l_ght[i].intensity, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fread (& img -> l_ght[i].attenuation, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fread (& img -> l_ght[i].spot_data, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; } if (fread (& img -> m_terial.predefine, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> m_terial.albedo, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fread (img -> m_terial.param, sizeof(GLfloat), 6, fp) != 6) return ERROR_RW; if (fread (& img -> f_g.mode, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> f_g.based, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> f_g.density, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fread (& img -> f_g.depth, sizeof(float), 2, fp) != 2) return ERROR_RW; if (fread (& img -> f_g.color, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fread (& img -> filled_type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> step, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& img -> rep, sizeof(int), 1, fp) != 1) return ERROR_RW; for (i=0; i<4; i++) { if (i < 2) { for (j=0; j spcolor[i][j], sizeof(ColRGBA), this_proj -> coord -> ntg[i][j], fp) != this_proj -> coord -> ntg[i][j]) return ERROR_RW; } } else { if (fread (& j, sizeof(int), 1, fp) != 1) return ERROR_RW; if (j) { if (j != this_proj -> coord -> totcoord[i]) { g_warning ("READING OPENGL:: this should not happen !\n i= %d, totcoord[i]= %d, j= %d", i, this_proj -> coord -> totcoord[i], j); return ERROR_RW; } if (fread (img -> spcolor[i][0], sizeof(ColRGBA), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return ERROR_RW; } } } active_glwin = this_proj -> modelgl; active_image = this_proj -> modelgl -> anim -> last -> img; active_coord = this_proj -> coord; if (fread (& this_proj -> modelgl -> rings, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (this_proj -> modelgl -> rings) { for (i=0; i<5; i++) { if (read_rings_chains_data (fp, this_proj -> modelgl, 0, i, this_proj -> rsparam[i][1], this_proj -> steps) != OK) return ERROR_RINGS; } } if (fread (& this_proj -> modelgl -> chains, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (this_proj -> modelgl -> chains) { if (read_rings_chains_data (fp, this_proj -> modelgl, 1, 0, this_proj -> csparam[5], this_proj -> steps) != OK) return ERROR_CHAINS; } if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { this_proj -> modelgl -> create_shaders[VOLMS] = TRUE; this_proj -> modelgl -> volumes = TRUE; for (i=0; i modelgl -> atoms_volume[i] = allocdouble (this_proj -> steps); this_proj -> modelgl -> atoms_ppvolume[i] = allocdouble (this_proj -> steps); if (fread (this_proj -> modelgl -> atoms_volume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return ERROR_RW; if (fread (this_proj -> modelgl -> atoms_ppvolume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return ERROR_RW; this_proj -> modelgl -> volume_box[i] = allocddouble (this_proj -> steps, 9); for (j=0; j steps; j++) { if (fread (this_proj -> modelgl -> volume_box[i][j], sizeof(double), 9, fp) != 9) return ERROR_RW; } } if (fread (this_proj -> modelgl -> comp_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return ERROR_RW; if (fread (active_image -> show_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return ERROR_RW; if (fread (active_image -> vol_col, sizeof(ColRGBA), FILLED_STYLES, fp) != FILLED_STYLES) return ERROR_RW; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { for (j=0; j modelgl -> frag_mol_volume[0][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> frag_mol_ppvolume[0][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> fm_comp_vol[0][j] = allocdbool (this_proj -> steps, i); active_image -> fm_show_vol[0][j] = allocbool (i); this_proj -> modelgl -> frag_box[j] = alloctdouble (this_proj -> steps, i, 9); for (l=0; l modelgl -> frag_mol_ppvolume[0][j][m][n], sizeof(double), 1, fp) != 1) return ERROR_RW; if (fread (this_proj -> modelgl -> frag_box[j][m][n], sizeof(double), 9, fp) != 9) return ERROR_RW; this_proj -> modelgl -> fm_comp_vol[0][j][m][n] = TRUE; } active_image -> fm_vol_col[0][j] = g_malloc0 (i*sizeof*active_image -> fm_vol_col[0][j]); if (fread (active_image -> fm_show_vol[0][j], sizeof(gboolean), i, fp) != i) return ERROR_RW; if (fread (active_image -> fm_vol_col[0][j], sizeof(ColRGBA), i, fp) != i) return ERROR_RW; } } if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { for (j=0; j modelgl -> frag_mol_volume[1][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> frag_mol_ppvolume[1][j] = allocddouble (this_proj -> steps, i); this_proj -> modelgl -> fm_comp_vol[1][j] = allocdbool (this_proj -> steps, i); active_image -> fm_show_vol[1][j] = allocbool (i); for (l=0; l modelgl -> frag_mol_ppvolume[1][j][m][n], sizeof(double), 1, fp) != 1) return ERROR_RW; this_proj -> modelgl -> fm_comp_vol[1][j][m][n] = TRUE; } if (fread (active_image -> fm_show_vol[1][j], sizeof(gboolean), i, fp) != i) return ERROR_RW; active_image -> fm_vol_col[1][j] = g_malloc0 (i*sizeof*active_image -> fm_vol_col[1][j]); if (fread (active_image -> fm_vol_col[1][j], sizeof(ColRGBA), i, fp) != i) return ERROR_RW; } } } } } for (i=0; i steps; i++) { for (j=0; j< this_proj -> natomes; j++) { if (read_atom_b (fp, this_proj, i, j) != OK) return ERROR_ATOM_B; } } // Finally selection lists, bonds, angles and dihedrals for (i=0; i<2; i++) { if (fread (& j, sizeof(int), 1, fp) != 1) return ERROR_RW; if (j) { for (k=0; k modelgl, l, 0, 0, i); } update_all_selections (this_proj -> modelgl, i); if (img -> selected[i] -> selected >= 2 && img -> selected[i] -> selected <= 20) { j = num_bonds (img -> selected[i] -> selected); if (fread (img -> selected[i] -> selected_bonds, sizeof(int), j, fp) != j) return ERROR_RW; if (img -> selected[i] -> selected >= 3) { j = num_angles (img -> selected[i] -> selected); if (fread (img -> selected[i] -> selected_angles, sizeof(int), j, fp) != j) return ERROR_RW; if (img -> selected[i] -> selected >= 4 && img -> selected[i] -> selected <= 10) { j = num_dihedrals (img -> selected[i] -> selected); if (fread (img -> selected[i] -> selected_dihedrals, sizeof(int), j, fp) != j) return ERROR_RW; } } } } } this_proj -> modelgl -> labelled = check_label_numbers (this_proj, 2); #ifdef GTK3 // GTK3 Menu Action To Check for (i=0; i<2; i++) { for (j=0; j modelgl -> ogl_spec[i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j]) != img -> show_atom[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_spec[i][j], img -> show_atom[i][j]); } } } } for (i=0; i<10; i++) { if (this_proj -> modelgl -> ogl_poly[0][i] != NULL) { for (j=0; j coord -> totcoord[i]; j++) { if (i < 2 || (i > 3 && i < 9)) { if (this_proj -> modelgl -> ogl_poly[0][i][j] != NULL) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_poly[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j]) != img -> show_poly[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_poly[0][i][j], img -> show_poly[i][j]); } } } } } } if (this_proj -> modelgl -> ogl_geom[0][i] != NULL) { for (j=0; j coord -> totcoord[i]; j++) { if (this_proj -> modelgl -> ogl_geom[0][i][j] != NULL) { if (GTK_IS_WIDGET(this_proj -> modelgl -> ogl_geom[0][i][j])) { if (gtk_check_menu_item_get_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j]) != img -> show_coord[i][j]) { gtk_check_menu_item_set_active ((GtkCheckMenuItem *)this_proj -> modelgl -> ogl_geom[0][i][j], img -> show_coord[i][j]); } } } } } } show_the_widgets (this_proj -> modelgl -> ogl_coord[0]); update_all_menus (this_proj -> modelgl, this_proj -> natomes); #endif this_proj -> modelgl -> labelled = check_label_numbers (this_proj, 2); #ifdef GTK4 update_menu_bar (this_proj -> modelgl); for (i=0; i<2; i++) { for (j=0; j show_atom[i][j]) { show_hide_atoms (NULL, NULL, & this_proj -> modelgl -> colorp[i][j]); } } } for (i=0; i<10; i++) { for (j=0; j coord -> totcoord[i]; j++) { if (i < 2 || (i > 3 && i < 9)) { if (img -> show_poly[i][j]) { show_hide_poly (NULL, NULL, & this_proj -> modelgl -> gcid[i][j][i]); } } } for (j=0; j coord -> totcoord[i]; j++) { if (! img -> show_coord[i][j]) { show_hide_coord (NULL, NULL, & this_proj -> modelgl -> gcid[i][j][i]); } } } #endif return OK; } Atomes-GNU-1.1.14/src/project/read_qm.c000066400000000000000000000242171457665371200175140ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_qm.c * @short Functions to read ab-intio (CPMD/CP2K) calculation parameters in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'read_qm.c' * * Contains: * - Functions to read ab-intio (CPMD/CP2K) calculation parameters in the atomes project file format * * List of functions: int read_thermo (FILE * fp, thermostat * thermo); int read_fixed_atoms_cpmd (FILE * fp, cpmd * cpmd_input); int read_fixed_atoms_cp2k (FILE * fp, cp2k * cp2k_input, int idf); int read_cpmd_data (FILE * fp, int cid, project * this_proj); int read_cp2k_data (FILE * fp, int cid, project * this_proj); */ #include "global.h" #include "project.h" /*! \fn int read_thermo (FILE * fp, thermostat * thermo) \brief read thermostat information from file \param fp the file pointer \param thermo the thermostat to store the data */ int read_thermo (FILE * fp, thermostat * thermo) { if (fread (& thermo -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& thermo -> type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& thermo -> sys, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& thermo -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (thermo -> params, sizeof(double), 4, fp) != 4) return ERROR_RW; if (fread (& thermo -> natoms, sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int read_fixed_atoms_cpmd (FILE * fp, cpmd * cpmd_input) \brief read fixed CPMD atom(s) from file \param fp the file pointer \param cpmd_input the CPMD input structure to store the data */ int read_fixed_atoms_cpmd (FILE * fp, cpmd * cpmd_input) { int i; if (fread (& cpmd_input -> fixat, sizeof(int), 1, fp) != 1) return ERROR_RW; if (cpmd_input -> fixat) { if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { cpmd_input -> fixlist = allocint (cpmd_input -> fixat); if (fread (cpmd_input -> fixlist, sizeof(int), cpmd_input -> fixat, fp) != cpmd_input -> fixat) return ERROR_RW; } if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { cpmd_input -> fixcoord = allocdint (cpmd_input -> fixat, 3); for (i=0; i fixat; i++) if (fread (cpmd_input -> fixcoord[i], sizeof(int), 3, fp) != 3) return ERROR_RW; } } return OK; } /*! \fn int read_fixed_atoms_cp2k (FILE * fp, cp2k * cp2k_input, int idf) \brief read fixed CP2K from file \param fp the file pointer \param cp2k_input the CP2K input structure to store the data \param idf the fixed atom(s) format */ int read_fixed_atoms_cp2k (FILE * fp, cp2k * cp2k_input, int idf) { int i; if (fread (& cp2k_input -> fixat[idf], sizeof(int), 1, fp) != 1) return ERROR_RW; if (cp2k_input -> fixat[idf]) { if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { cp2k_input -> fixlist[idf] = allocint (cp2k_input -> fixat[idf]); if (fread (cp2k_input -> fixlist[idf], sizeof(int), cp2k_input -> fixat[idf], fp) != cp2k_input -> fixat[idf]) return ERROR_RW; } if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { cp2k_input -> fixcoord[idf] = allocdint (cp2k_input -> fixat[idf], 3); for (i=0; i fixat[idf]; i++) if (fread (cp2k_input -> fixcoord[idf][i], sizeof(int), 3, fp) != 3) return ERROR_RW; } } return OK; } /*! \fn int read_cpmd_data (FILE * fp, int cid, project * this_proj) \brief read CPMD data from file \param fp the file pointer \param cid CPMD id (0 = ab-initio, 1 = QM-MM) \param this_proj the target project */ int read_cpmd_data (FILE * fp, int cid, project * this_proj) { int i; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (! i) return OK; this_proj -> cpmd_input[cid] = g_malloc0 (sizeof*this_proj -> cpmd_input[cid]); if (fread (& this_proj -> cpmd_input[cid] -> calc_type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (this_proj -> cpmd_input[cid] -> default_opts, sizeof(double), 17, fp) != 17) return ERROR_RW; if (fread (this_proj -> cpmd_input[cid] -> calc_opts, sizeof(double), 24, fp) != 24) return ERROR_RW; if (fread (& this_proj -> cpmd_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> cpmd_input[cid] -> thermostats) { this_proj -> cpmd_input[cid] -> ions_thermostat = g_malloc0 (sizeof*this_proj -> cpmd_input[cid] -> ions_thermostat); thermostat * thermo = this_proj -> cpmd_input[cid] -> ions_thermostat; for (i=0; i cpmd_input[cid] -> thermostats; i++) { if (read_thermo (fp, thermo) != OK) return ERROR_RW; if (i < this_proj -> cpmd_input[cid] -> thermostats - 1) { thermo -> next = g_malloc0 (sizeof*thermo -> next); thermo -> next -> prev = thermo; thermo = thermo -> next; } } if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (i) { this_proj -> cpmd_input[cid] -> elec_thermostat = g_malloc0 (sizeof*this_proj -> cpmd_input[cid] -> elec_thermostat); if (read_thermo (fp, this_proj -> cpmd_input[cid] -> elec_thermostat) != OK) return ERROR_RW; } } if (read_fixed_atoms_cpmd (fp, this_proj -> cpmd_input[cid]) != OK) { return ERROR_RW; } if (fread (& this_proj -> cpmd_input[cid] -> dummies, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> cpmd_input[cid] -> dummies) { this_proj -> cpmd_input[cid] -> dummy = g_malloc0 (sizeof*this_proj -> cpmd_input[cid] -> dummy); dummy_atom * dummy = this_proj -> cpmd_input[cid] -> dummy; for (i=0; i < this_proj -> cpmd_input[cid] -> dummies; i ++) { if (fread (& dummy -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& dummy -> type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (& dummy -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fread (dummy -> xyz, sizeof(double), 3, fp) != 3) return ERROR_RW; if (fread (dummy -> coord, sizeof(int), 4, fp) != 4) return ERROR_RW; if (fread (& dummy -> natoms, sizeof(int), 1, fp) != 1) return ERROR_RW; if (dummy -> natoms) { dummy -> list = allocint (dummy -> natoms); if (fread (dummy -> list, sizeof(int), dummy -> natoms, fp) != dummy -> natoms) return ERROR_RW; } if (i < this_proj -> cpmd_input[cid] -> dummies - 1) { dummy -> next = g_malloc0 (sizeof*dummy -> next); dummy -> next -> prev = dummy; dummy = dummy -> next; } } } this_proj -> cpmd_input[cid] -> pp = allocdint (this_proj -> nspec, 2); for (i=0; i nspec; i++) { if (fread (this_proj -> cpmd_input[cid] -> pp[i], sizeof(int), 2, fp) != 2) return ERROR_RW; } this_proj -> cpmd_input[cid] -> info = read_this_string (fp); /*g_debug (" ********************* CPMD INFO *********************"); g_debug ("\n%s\n", this_proj -> cpmd_input[cid] -> info); g_debug (" *****************************************************");*/ if (this_proj -> cpmd_input[cid] -> info == NULL) return ERROR_RW; return OK; } /*! \fn int read_cp2k_data (FILE * fp, int cid, project * this_proj) \brief read CP2K data from file \param fp the file pointer \param cid CP2K id (0 = ab-initio, 1 = QM-MM) \param this_proj the target project */ int read_cp2k_data (FILE * fp, int cid, project * this_proj) { int i, j; if (fread (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (! i) return OK; this_proj -> cp2k_input[cid] = g_malloc0 (sizeof*this_proj -> cp2k_input[cid]); if (fread (& this_proj -> cp2k_input[cid] -> input_type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fread (this_proj -> cp2k_input[cid] -> opts, sizeof(double), 42, fp) != 42) return ERROR_RW; for (i=0; i<3; i++) { if (fread (this_proj -> cp2k_input[cid] -> extra_opts[i], sizeof(double), 4, fp) != 4) return ERROR_RW; } if (fread (& this_proj -> cp2k_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> cp2k_input[cid] -> thermostats) { this_proj -> cp2k_input[cid] -> ions_thermostat = g_malloc0 (sizeof*this_proj -> cp2k_input[cid] -> ions_thermostat); thermostat * thermo = this_proj -> cp2k_input[cid] -> ions_thermostat; for (i=0; i cp2k_input[cid] -> thermostats; i++) { if (read_thermo (fp, thermo) != OK) return ERROR_RW; if (i < this_proj -> cp2k_input[cid] -> thermostats - 1) { thermo -> next = g_malloc0 (sizeof*thermo -> next); thermo -> next -> prev = thermo; thermo = thermo -> next; } } } for (i=0; i<2; i++) { if (read_fixed_atoms_cp2k (fp, this_proj -> cp2k_input[cid], i) != OK) { return ERROR_RW; } } this_proj -> cp2k_input[cid] -> spec_data = allocdint (this_proj -> nspec, 2); this_proj -> cp2k_input[cid] -> spec_files = g_malloc0 (this_proj -> nspec*sizeof*this_proj -> cp2k_input[cid] -> spec_files); for (i=0; i nspec; i++) { if (fread (this_proj -> cp2k_input[cid] -> spec_data[i], sizeof(int), 2, fp) != 2) return ERROR_RW; this_proj -> cp2k_input[cid] -> spec_files[i] = g_malloc0 (2*sizeof*this_proj -> cp2k_input[cid] -> spec_files[i]); for (j=0; j<2; j++) { this_proj -> cp2k_input[cid] -> spec_files[i][j] = read_this_string (fp); } } for (i=0; i<5; i++) { this_proj -> cp2k_input[cid] -> files[i] = read_this_string (fp); } this_proj -> cp2k_input[cid] -> info = read_this_string (fp); if (this_proj -> cp2k_input[cid] -> info == NULL) return ERROR_RW; return OK; } Atomes-GNU-1.1.14/src/project/readers/000077500000000000000000000000001457665371200173575ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/project/readers/read_c3d.c000066400000000000000000000233761457665371200212020ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_c3d.c * @short Functions to read Chem3d atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_c3d.c' * * Contains: * - The functions to read Chem3d atomic coordinates * * List of functions: int c3d_get_atom_coordinates (); int open_c3d_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include #include "readers.h" extern void check_for_species (double v, int ato); /*! \fn int c3d_get_atom_coordinates () \brief get the atomic coordinates from the C3D file */ int c3d_get_atom_coordinates () { int i, j, k; double v; gchar * lia[5] = {"a", "b", "c", "d", "e"}; this_reader -> nspec = 0; active_project -> steps = this_reader -> steps; active_project -> natomes = this_reader -> natomes; allocatoms (active_project); this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); #ifdef OPENMP int v_dummy; int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (this_reader -> steps < numth) { if (numth >= 2*(this_reader -> steps-1)) { doatoms = TRUE; } else { numth = this_reader -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = i*(this_reader -> natomes + 1) + 1; #pragma omp parallel for num_threads(numth) private(j,v,v_dummy,this_line,saved_line,this_word) shared(i,k,lia,coord_line,this_reader,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; #pragma omp critical check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[4], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = atof(this_word); } else { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,v,v_dummy,this_line,saved_line,this_word) shared(lia,coord_line,this_reader,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = i*(this_reader -> natomes + 1) + 1; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[4], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = atof(this_word); } else { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; #else line_node * tmp_line; tail = head; k = 0; for (i=0; i steps; i++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); return 2; } v = get_z_from_periodic_table (this_word); if (v) { if (! i) check_for_species (v, j); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); return 2; } this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); return 2; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); return 2; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[4], k+j); return 2; } active_project -> atoms[i][j].z = atof(this_word); } else { format_error (i+1, j+1, lia[0], k+j); return 2; } tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif for (i=1; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].sp = active_project -> atoms[0][j].sp; } } return 0; } /*! \fn int open_c3d_file (int linec) \brief open C3D file \param linec Number of lines in the file */ int open_c3d_file (int linec) { int res; #ifdef OPENMP this_line = g_strdup_printf ("%s", coord_line[0]); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info ("Wrong file format - cannot find the number of atoms !", 0); add_reader_info ("Wrong file format - first line is corrupted !", 0); res = 2; goto end; } this_reader -> natomes = (int)atof(this_word); reader_info ("c3d", "Number of atoms", this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 1) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 1); reader_info ("c3d", "Number of steps", this_reader -> steps); res = (this_reader -> steps > 1) ? 2 : c3d_get_atom_coordinates (); } #else this_line = g_strdup_printf ("%s", head -> line); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info ("Wrong file format - cannot find the number of atoms !", 0); add_reader_info ("Wrong file format - the first line is corrupted !", 0); res = 2; goto end; } this_reader -> natomes = (int)atof(this_word); reader_info ("chem3d", "Number of atoms", this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 1) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 1); reader_info ("chem3d", "Number of steps", this_reader -> steps); res = (this_reader -> steps > 1) ? 2 : c3d_get_atom_coordinates (); } #endif end: return res; } Atomes-GNU-1.1.14/src/project/readers/read_cif.c000066400000000000000000001766541457665371200213020ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_cif.c * @short Functions to read CIF files * @author Sébastien Le Roux */ /* * This file: 'read_cif.c' * * Contains: * - The functions to read CIF files * * List of functions: int get_atom_wyckoff (gchar * line, int wid); int cif_get_value (gchar * kroot, gchar * keyw, int linec, int lstart, gchar ** cif_word, gboolean rec_val, gboolean all_ligne, gboolean in_loop); int cif_file_get_data_in_loop (int linec, int lid); int cif_file_get_number_of_atoms (int linec, int lid, int nelem); int get_loop_line_id (int linec, int lid); int get_loop_line_for_key (gchar * key_a, gchar * key_b, int linec); int cif_file_get_number_of_positions (int linec, int lid); int get_space_group_from_hm (gchar * hmk); int get_setting_from_hm (gchar * hmk, int end); int group_info_from_hm_key (int spg, gchar * key_hm); int cif_get_space_group (int linec); int open_cif_file (int linec); float get_atom_coord (gchar * line, int mid); gboolean get_missing_object_from_user (); gboolean cif_file_get_atoms_data (int lin, int cid[8]); gboolean cif_get_atomic_coordinates (int linec); gboolean cif_get_symmetry_positions (int linec); gboolean cif_get_cell_data (int linec); gchar * get_cif_word (gchar * mot); gchar * get_atom_label (gchar * line, int lid); gchar * get_string_from_origin (space_group * spg); G_MODULE_EXPORT void set_cif_to_insert (GtkComboBox * box, gpointer data); void file_get_to_line (int line_id); void check_for_to_lab (int ato, gchar * stlab); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include "atom_edit.h" #include "cbuild_edit.h" #include "readers.h" #include #include extern int get_atom_id_from_periodic_table (atom_search * asearch); extern double get_z_from_periodic_table (gchar * lab); extern void get_origin (space_group * spg); extern void compute_lattice_properties (cell_info * cell); extern int test_lattice (builder_edition * cbuilder, cell_info * cif_cell); extern int read_space_group (builder_edition * cbuilder, int spg); extern gchar * wnpos[3]; extern void get_wyck_char (float val, int ax, int bx); extern space_group * duplicate_space_group (space_group * spg); extern int build_crystal (gboolean visible, project * this_proj, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); extern distance distance_3d (cell_info * cell, int mdstep, atom * at, atom * bt); extern void sort (int dim, int * tab); extern gchar * tmp_pos; FILE * cifp; char * line_ptr; int * keylines = NULL; int cif_loop_id; gchar * cif_coord_opts[40][2] = {{"b1", "Monoclinic unique axis b, cell choice 1, abc"}, // 0 {"b2", "Monoclinic unique axis b, cell choice 2, abc"}, // 1 {"b3", "Monoclinic unique axis b, cell choice 3, abc"}, // 2 {"-b1", "Monoclinic unique axis b, cell choice 1, c-ba"}, // 3 {"-b2", "Monoclinic unique axis b, cell choice 2, c-ba"}, // 4 {"-b3", "Monoclinic unique axis b, cell choice 3, c-ba"}, // 5 {"c1", "Monoclinic unique axis c, cell choice 1, abc"}, // 6 {"c2", "Monoclinic unique axis c, cell choice 2, abc"}, // 7 {"c3", "Monoclinic unique axis c, cell choice 3, abc"}, // 8 {"-c1", "Monoclinic unique axis c, cell choice 1, ba-c"}, // 9 {"-c2", "Monoclinic unique axis c, cell choice 2, ba-c"}, // 10 {"-c3", "Monoclinic unique axis c, cell choice 3, ba-c"}, // 11 {"a1", "Monoclinic unique axis a, cell choice 1, abc"}, // 12 {"a2", "Monoclinic unique axis a, cell choice 2, abc"}, // 13 {"a3", "Monoclinic unique axis a, cell choice 3, abc"}, // 14 {"-a1", "Monoclinic unique axis a, cell choice 1, -acb"}, // 15 {"-a2", "Monoclinic unique axis a, cell choice 2, -acb"}, // 16 {"-a3", "Monoclinic unique axis a, cell choice 3, -acb"}, // 17 {"abc", "Orthorhombic"}, // 18 {"ba-c", "Orthorhombic"}, // 10 {"cab", "Orthorhombic"}, // 20 {"-cba", "Orthorhombic"}, // 21 {"bca", "Orthorhombic"}, // 22 {"a-cb", "Orthorhombic"}, // 23 {"1abc", "Orthorhombic origin choice 1"}, // 24 {"1ba-c", "Orthorhombic origin choice 1"}, // 25 {"1cab", "Orthorhombic origin choice 1"}, // 26 {"1-cba", "Orthorhombic origin choice 1"}, // 27 {"1bca", "Orthorhombic origin choice 1"}, // 28 {"1a-cb", "rthorhombic origin choice 1"}, // 29 {"2abc", "Orthorhombic origin choice 2"}, // 30 {"2ba-c", "Orthorhombic origin choice 2"}, // 31 {"2cab", "Orthorhombic origin choice 2"}, // 32 {"2-cba", "Orthorhombic origin choice 2"}, // 33 {"2bca", "Orthorhombic origin choice 2"}, // 34 {"2a-cb", "Orthorhombic origin choice 2"}, // 35 {"1", "Tetragonal or cubic origin choice 1"}, // 36 {"2", "Tetragonal or cubic origin choice 2"}, // 37 {"h", "Trigonal using hexagonal axes"}, // 38 {"r", "Trigonal using rhombohedral axes "}}; // 39 #ifdef G_OS_WIN32 typedef intptr_t ssize_t; ssize_t getline(char **lineptr, size_t *n, FILE *stream) { size_t pos; int c; if (lineptr == NULL || stream == NULL || n == NULL) { errno = EINVAL; return -1; } c = getc(stream); if (c == EOF) return -1; if (*lineptr == NULL) { *lineptr = malloc(128); if (*lineptr == NULL) return -1; *n = 128; } pos = 0; while(c != EOF) { if (pos + 1 >= *n) { size_t new_size = *n + (*n >> 2); if (new_size < 128) { new_size = 128; } char *new_ptr = realloc(*lineptr, new_size); if (new_ptr == NULL) return -1; *n = new_size; *lineptr = new_ptr; } ((unsigned char *)(*lineptr))[pos ++] = c; if (c == '\n') break; c = getc(stream); } (*lineptr)[pos] = '\0'; return pos; } #endif // G_OS_WIN_32 /*! \fn gchar * get_cif_word (gchar * mot) \brief get string from CIF file, EOL can be ugly \param mot the string that was read in the file */ gchar * get_cif_word (gchar * mot) { gchar * word = substitute_string (mot, "\n", NULL); word = substitute_string (word, "\r", NULL); return word; } /*! \fn float get_atom_coord (gchar * line, int mid) \brief read atom coordinates from CIF file \param line the string that contains the data \param mid the position to reach on the line */ float get_atom_coord (gchar * line, int mid) { gchar * co_line = g_strdup_printf ("%s", line); char * co_word = strtok_r (co_line, " ", & line); int i; for (i=0; i lattice.sp_group -> numw; i++) { if (g_strcmp0(get_cif_word(wy_word), this_reader -> lattice.sp_group -> wyckoff[i].let) == 0) { j = i; break; } } wy_line = NULL; wy_word = NULL; return j; } GtkWidget ** img_cif; atom_search * cif_search = NULL; atomic_object * cif_object = NULL; /*! \fn G_MODULE_EXPORT void set_cif_to_insert (GtkComboBox * box, gpointer data) \brief change the object to insert at an empty cif position \param box the GtkComboBox sending the signal \param data the associated data pointer */ G_MODULE_EXPORT void set_cif_to_insert (GtkComboBox * box, gpointer data) { GValue val = {0, }; int i, j, k; i = GPOINTER_TO_INT(data); GtkTreeModel * cmodel = gtk_combo_box_get_model (box); GtkTreeIter iter; gchar * str; gboolean done = TRUE; if (gtk_combo_box_get_active_iter (box, & iter)) { gtk_tree_model_get_value (cmodel, & iter, 0, & val); str = g_strdup_printf ("%s", (char *)g_value_get_string (& val)); j = get_selected_object_id (FALSE, activep, str, cif_search); to_insert_in_project (j, i, active_project, cif_search, FALSE); if (j > 0) { gtk_tree_store_set (GTK_TREE_STORE(cmodel), & iter, 0, periodic_table_info[j].lab, -1); } cif_search -> todo[i] = (! j) ? 0 : 1; if (! j) done = FALSE; cif_search -> in_selection = 0; for (k=0; k object_to_insert; k++) cif_search -> in_selection += cif_search -> todo[k]; } str = (done) ? g_strdup_printf (APPLY) : g_strdup_printf (DELETEB); set_image_from_icon_name (img_cif[i], str); g_free (str); if (! done) gtk_combo_box_set_active (box, 0); } /*! \fn gboolean get_missing_object_from_user () \brief get missing atomic number in CIF file from the user */ gboolean get_missing_object_from_user () { cif_search = allocate_atom_search (activep, REPLACE, 0, this_reader -> object_to_insert); cif_object = NULL; GtkWidget * info = dialogmodal ("Error while reading CIF file", GTK_WINDOW(MainWindow)); GtkWidget * vbox, * hbox; gchar * str; vbox = dialog_get_content_area (info); gchar * labpick = "To continue and build the crystal according to the information of the CIF file\n" "it is required to provide a suitable value for each and every missing parameter(s)." "\n\nPlease select an atom type for the following object(s):"; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (labpick, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); img_cif = g_malloc0(this_reader -> object_to_insert*sizeof*img_cif); GtkWidget * but; GtkCellRenderer * renderer; GtkTreeModel * model; GList * cell_list; int i; for (i=0; i object_to_insert; i++) { hbox = create_hbox(0); add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, hbox, FALSE, FALSE, 5); str = g_strdup_printf ("Type N°%d:\t%s", i+1, this_reader -> label[i]); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, markup_label(str, 150, -1, 0.0, 0.5), FALSE, FALSE, 20); g_free (str); img_cif[i] = stock_image (DELETEB); model = replace_combo_tree (TRUE, activep); but = gtk_combo_box_new_with_model (model); g_object_unref (model); renderer = gtk_cell_renderer_combo_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (but), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (but), renderer, "text", 0, NULL); gtk_combo_box_set_active (GTK_COMBO_BOX(but), 0); g_signal_connect (G_OBJECT(but), "changed", G_CALLBACK(set_cif_to_insert), GINT_TO_POINTER(i)); cell_list = gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(but)); if(cell_list && cell_list -> data) { gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(but), cell_list -> data, "markup", 0, NULL); } add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, but, FALSE, FALSE, 0); add_box_child_start (GTK_ORIENTATION_HORIZONTAL, hbox, img_cif[i], FALSE, FALSE, 30); } gchar * endpick = "In case of a molecule: insert an extra type of atom and run a substitution afterwards."; add_box_child_start (GTK_ORIENTATION_VERTICAL, vbox, markup_label (endpick, 200, -1, 0.5, 0.5), FALSE, FALSE, 10); run_this_gtk_dialog (info, G_CALLBACK(run_destroy_dialog), NULL); g_free (img_cif); return (cif_search -> in_selection == this_reader -> object_to_insert) ? TRUE : FALSE; } #ifndef OPENMP /*! \fn void file_get_to_line (int line_id) \brief reach line in CIF file \param line_id Line to reach */ void file_get_to_line (int line_id) { int i; tail = head; for (i=0; i next; } #endif /*! \fn int cif_get_value (gchar * kroot, gchar * keyw, int linec, int lstart, gchar ** cif_word, gboolean rec_val, gboolean all_ligne, gboolean in_loop) \brief read pattern in CIF file \param kroot String root (first part) \param keyw String root (first part) \param linec Total number of lines \param lstart Line to reach \param cif_word pointer to store the data read \param rec_val Record position on the line \param all_ligne Browse all line (1/0) \param in_loop More than one identical key string (1/0) */ int cif_get_value (gchar * kroot, gchar * keyw, int linec, int lstart, gchar ** cif_word, gboolean rec_val, gboolean all_ligne, gboolean in_loop) { int res = 0; int i; size_t j, k, l, m; gchar * str; gchar * str_w, * str_a, * str_b; gchar * mot; j = strlen(kroot); k = strlen(keyw); l = j+k+1; #ifdef OPENMP int numth = (in_loop) ? 1 : omp_get_max_threads (); gchar * saved_line; #pragma omp parallel for num_threads(numth) private(i,m,this_line,saved_line,this_word,str_a,str_b,str_w) shared(j,k,l,this_reader,res,coord_line,cif_word,mot,rec_val,all_ligne,in_loop,kroot,keyw) for (i=lstart; i%s - error at line %d !", keyw, i+1); add_reader_info (str, 0); g_free (str); g_free (str_w); g_free (str_a); g_free (str_b); res = -1; goto endi; } } res = i+1; if (all_ligne) { mot = g_strdup_printf ("%s", this_word); this_word = strtok_r (NULL, " ", & saved_line); while (this_word) { mot = g_strdup_printf ("%s%s", mot, this_word); this_word = strtok_r (NULL, " ", & saved_line); } this_word = g_strdup_printf ("%s", mot); g_free (mot); } if (this_word) * cif_word = get_cif_word (this_word); g_free (str_w); g_free (str_a); g_free (str_b); goto endi; } g_free (str_a); g_free (str_b); } g_free (str_w); this_word = strtok_r (NULL, " ", & saved_line); } endi:; } if (res < 0) res = 0; #else file_get_to_line (lstart); res = 0; i = lstart; while (tail) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); while (this_word) { if (in_loop && this_word[0] != '_') return 0; str_w = get_cif_word(this_word); str_w = g_ascii_strdown (str_w, strlen(str_w)); if (strlen(str_w) == l) { str_a = g_strdup_printf ("%c", str_w[0]); for (m=1; m%s - error at line %d !", keyw, i+1); add_reader_info (str, 0); g_free (str); g_free (str_w); g_free (str_a); g_free (str_b); return 0; } } if (all_ligne) { mot = g_strdup_printf ("%s", this_word); this_word = strtok (NULL, " "); while (this_word) { mot = g_strdup_printf ("%s%s", mot, this_word); this_word = strtok (NULL, " "); } this_word = g_strdup_printf ("%s", mot); g_free (mot); } if (this_word) * cif_word = get_cif_word (this_word); g_free (str_w); g_free (str_a); g_free (str_b); return i+1; } g_free (str_a); g_free (str_b); } g_free (str_w); this_word = strtok (NULL, " "); } tail = tail -> next; i ++; } #endif return res; } /*! \fn int cif_file_get_data_in_loop (int linec, int lid) \brief get the number of "_" motifs in a line \param linec Total number of lines \param lid Line to reach */ int cif_file_get_data_in_loop (int linec, int lid) { gboolean res = FALSE; int i = 0; #ifdef OPENMP while (! res) { if (lid+i < linec) { this_line = g_strdup_printf ("%s", coord_line[lid+i]); this_word = strtok (this_line, " "); if (this_word[0] == '_') { i ++; } else { res = TRUE; } } else { res = TRUE; } } #else file_get_to_line (lid); while (! res) { if (tail) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (this_word[0] == '_') { i ++; tail = tail -> next; } else { res = TRUE; } } else { res = TRUE; } } #endif return i; } /*! \fn int cif_file_get_number_of_atoms (int linec, int lid, int nelem) \brief get the number of atom(s) in a CIF file \param linec Total number of lines \param lid Line to reach \param nelem Number of element(s) the line */ int cif_file_get_number_of_atoms (int linec, int lid, int nelem) { gboolean res = FALSE; int i, j; char init; i = 0; #ifdef OPENMP while (! res && (lid+i) < linec) { this_line = g_strdup_printf ("%s", coord_line[lid+i]); this_word = strtok (this_line, " "); j = 0; while (this_word) { if (! j) init = this_word[0]; j ++; this_word = strtok (NULL, " "); } if (j == nelem && init != '_') { i ++; } else { res = TRUE; } } #else file_get_to_line (lid); while (! res && tail) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); j = 0; while (this_word) { if (j == 0) init = this_word[0]; j ++; this_word = strtok (NULL, " "); } if (j == nelem && init != '_') { i ++; } else { res = TRUE; } tail = tail -> next; } #endif return i; } /*! \fn void check_for_to_lab (int ato, gchar * stlab) \brief check atom label \param ato Atom id \param stlab Label read in the CIF file */ void check_for_to_lab (int ato, gchar * stlab) { int i, j; j = -1; // First is the label of 'ato' already listed for (i=0; i object_to_insert; i++) { if (g_strcmp0(this_reader -> label[i], stlab) == 0) { j = i; break; } } if (j < 0) { if (this_reader -> label) { this_reader -> label = g_realloc (this_reader -> label, (this_reader -> object_to_insert+1)*sizeof*this_reader -> label); } else { this_reader -> label = g_malloc0 (1*sizeof*this_reader -> label); } this_reader -> label[this_reader -> object_to_insert] = g_strdup_printf ("%s", stlab); this_reader -> object_to_insert ++; j = this_reader -> object_to_insert-1; } if (this_reader -> object_list) { this_reader -> object_list = g_realloc (this_reader -> object_list, (this_reader -> atom_unlabelled+1)*sizeof*this_reader -> object_list); this_reader -> u_atom_list = g_realloc (this_reader -> u_atom_list, (this_reader -> atom_unlabelled+1)*sizeof*this_reader -> u_atom_list); } else { this_reader -> object_list = g_malloc0 (1*sizeof*this_reader -> object_list); this_reader -> u_atom_list = g_malloc0 (1*sizeof*this_reader -> u_atom_list); } this_reader -> object_list[this_reader -> atom_unlabelled] = j; this_reader -> u_atom_list[this_reader -> atom_unlabelled] = ato; this_reader -> atom_unlabelled ++; } /*! \fn gboolean cif_file_get_atoms_data (int lin, int cid[8]) \brief get atoms data from the CIF file \param lin Line to reach \param cid positions on the line for the data to read */ gboolean cif_file_get_atoms_data (int lin, int cid[8]) { int i, j; double v; gchar * str; gboolean done = TRUE; gchar * cline; #ifdef OPENMP int numth = omp_get_max_threads (); #pragma omp parallel for num_threads(numth) private(i,j,v,cline,str) shared(this_reader,coord_line,done) for (i=0; i natomes; i++) { cline = g_strdup_printf ("%s", coord_line[i+lin]); str = get_atom_label (cline, (cid[0]) ? cid[0] : cid[1]); v = get_z_from_periodic_table (str); #pragma omp critical { if (v) { check_for_species (v, i); } else { done = FALSE; check_for_to_lab (i, str); } } if (this_reader -> cartesian) { active_project -> atoms[0][i].x = get_atom_coord (cline, cid[2]); active_project -> atoms[0][i].y = get_atom_coord (cline, cid[3]); active_project -> atoms[0][i].z = get_atom_coord (cline, cid[4]); } else { for (j=0; j<3; j++) this_reader -> coord[i][j] = get_atom_coord (cline, cid[j+2]); } if (! this_reader -> cartesian) { this_reader -> wyckoff[i] = (cid[5]) ? get_atom_wyckoff (cline, cid[5]) : 0; this_reader -> occupancy[i] = (cid[6]) ? get_atom_coord (cline, cid[6]) : 1.0; this_reader -> multi[i] = (cid[7]) ? get_atom_coord (cline, cid[7]) : 0.0; } if (cline) g_free (cline); if (str) g_free (str); } #else file_get_to_line (lin); for (i=0; i natomes; i++) { cline = g_strdup_printf ("%s", tail -> line); str = get_atom_label (cline, (cid[0]) ? cid[0] : cid[1]); v = get_z_from_periodic_table (str); if (v) { check_for_species (v, i); } else { done = FALSE; check_for_to_lab (i, str); } if (this_reader -> cartesian) { active_project -> atoms[0][i].x = get_atom_coord (cline, cid[2]); active_project -> atoms[0][i].y = get_atom_coord (cline, cid[3]); active_project -> atoms[0][i].z = get_atom_coord (cline, cid[4]); } else { for (j=0; j<3; j++) this_reader -> coord[i][j] = get_atom_coord (cline, cid[j+2]); } if (! this_reader -> cartesian) { this_reader -> wyckoff[i] = (cid[5]) ? get_atom_wyckoff (cline, cid[5]) : 0; this_reader -> occupancy[i] = (cid[6]) ? get_atom_coord (cline, cid[6]) : 1.0; this_reader -> multi[i] = (cid[7]) ? get_atom_coord (cline, cid[7]) : 0.0; } /* #ifdef DEBUG j = this_reader -> wyckoff[i]; g_debug ("CIF:: At= %s, w_letter[%d]= %s, occ= %f, x= %f, y= %f, z= %f", this_reader -> label[i], j, this_reader -> lattice.sp_group -> wyckoff[j].let, this_reader -> occupancy[i], this_reader -> coord[i][0], this_reader -> coord[i][1], this_reader -> coord[i][2]); #endif */ tail = tail -> next; g_free (tail -> prev); } #endif if (! done) { done = (cif_search) ? TRUE : get_missing_object_from_user (); } return done; } /*! \fn int get_loop_line_id (int linec, int lid) \brief reach a line in the CIF file \param linec Total number of lines \param lid Line to reach */ int get_loop_line_id (int linec, int lid) { int i; gchar * str_w; #ifdef OPENMP gchar * saved_line; for (i=lid-1; i>-1; i--) { this_line = g_strdup_printf ("%s", coord_line[i]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (this_word) { str_w = g_ascii_strdown (this_word, strlen(this_word)); if (g_strcmp0 ("loop_", get_cif_word(str_w)) == 0) { g_free (str_w); return i+1; } g_free (str_w); } } #else file_get_to_line (lid); i = lid; while (tail) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (this_word) { str_w = g_ascii_strdown (this_word, strlen(this_word)); if (g_strcmp0 ("loop_", get_cif_word(str_w)) == 0) { g_free (str_w); return i+1; } g_free (str_w); } i --; tail = tail -> prev; } #endif return 0; } /*! \fn int get_loop_line_for_key (gchar * key_a, gchar * key_b, int linec) \brief search a string \param key_a String root (first part) \param key_b String end (second part) \param linec Total number of lines */ int get_loop_line_for_key (gchar * key_a, gchar * key_b, int linec) { int i; gchar * str; i = cif_get_value (key_a, key_b, linec, 0, & str, FALSE, FALSE, FALSE); return (i) ? get_loop_line_id (linec, i) : 0; } /*! \fn gboolean cif_get_atomic_coordinates (int linec) \brief read the atomic coordinates from the CIF file \param linec Total number of lines */ gboolean cif_get_atomic_coordinates (int linec) { gchar * labkeys[2] = {"type_symbol", "label"}; gchar * frackeys[3] = {"fract_x", "fract_y", "fract_z"}; gchar * cartkeys[3] = {"cartn_x", "cartn_y", "cartn_z"}; gchar * symkeys[3] = {"wyckoff_symbol", "occupancy", "symmetry_multiplicity"}; gchar * str = NULL; int cid[8]; int loop_line; int i, j, k, l; loop_line = get_loop_line_for_key ("_atom_site", cartkeys[0], linec); if (! loop_line) { loop_line = get_loop_line_for_key ("_atom_site", frackeys[0], linec); if (! loop_line) { return FALSE; } } else { this_reader -> cartesian = TRUE; } i = 0; for (j=0; j<2; j++) { cid[j] = cif_get_value ("_atom_site", labkeys[j], linec, loop_line, & str, FALSE, FALSE, TRUE); if (cid[j]) { i ++; cid[j] -= loop_line; } } if (! i) { add_reader_info ("Atomic coordinates: impossible to find atomic label(s) ...", 0); return FALSE; } i = 0; for (j=0; j<3; j++) { cid[j+2] = cif_get_value ("_atom_site", cartkeys[j], linec, loop_line, & str, FALSE, FALSE, TRUE); if (cid[j+2]) { i ++; cid[j+2] -= loop_line; } else if (this_reader -> cartesian) { str = g_strdup_printf ("Atomic coordinates: impossible to find '%s' ...", cartkeys[j]); add_reader_info (str, 1); g_free (str); this_reader -> cartesian = FALSE; } } if (i < 3) { j = 0; for (l=0; l<3; l++) { cid[l+2] = cif_get_value ("_atom_site", frackeys[l], linec, loop_line, & str, FALSE, FALSE, TRUE); if (cid[l+2]) { cid[l+2] -= loop_line; j ++; } else { str = g_strdup_printf ("Atomic coordinates: impossible to find '%s' ...", frackeys[l]); add_reader_info (str, 1); g_free (str); } } if (j < 3) { add_reader_info ("Atomic coordinates: no complete cartesian coordinates !", 0); add_reader_info ("Atomic coordinates: no complete fractional coordinates !", 0); return FALSE; } } else { this_reader -> cartesian = TRUE; } if (! this_reader -> cartesian) { for (i=0; i<3; i++) { cid[i+5] = cif_get_value ("_atom_site", symkeys[i], linec, loop_line, & str, FALSE, FALSE, TRUE); if (cid[i+5]) { cid[i+5] -= loop_line; } } } i = cif_file_get_data_in_loop (linec, loop_line); #ifdef DEBUG g_debug ("CIF:: Num of field in loop= %d", i); #endif this_reader -> natomes = cif_file_get_number_of_atoms (linec, loop_line+i, i); #ifdef DEBUG g_debug ("CIF:: Number of atoms in CIF file= %d", this_reader -> natomes); #endif if (! this_reader -> natomes) return FALSE; if (this_reader -> cartesian) { active_project -> steps = 1; active_project -> natomes = this_reader -> natomes; allocatoms (active_project); } else { this_reader -> coord = allocddouble (this_reader -> natomes, 3); } if (! this_reader -> cartesian) { this_reader -> lot = allocint (this_reader -> natomes); this_reader -> wyckoff = allocint (this_reader -> natomes); this_reader -> occupancy = allocdouble (this_reader -> natomes); this_reader -> multi = allocint (this_reader -> natomes); } this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); if (! cif_file_get_atoms_data (loop_line+i, cid)) return FALSE; if (! this_reader -> cartesian) { this_reader -> occupied = g_malloc0(this_reader -> natomes*sizeof*this_reader -> occupied); double v; for (i=0; i natomes; i++) { for (j=0; j<2; j++) { k = 1; v = this_reader -> occupancy[i]; for (l=0; l natomes; l++) { if (l != i) { if (this_reader -> coord[i][0] == this_reader -> coord[l][0] && this_reader -> coord[i][1] == this_reader -> coord[l][1] && this_reader -> coord[i][2] == this_reader -> coord[l][2]) { v += this_reader -> occupancy[l]; k ++; if (j) this_reader -> occupied[i][k] = l; if (v > 1.00001) { add_reader_info ("Atomic coordinates: a site was found to have an occupancy > 1.0 !", 0); return FALSE; } } } } if (! j) { this_reader -> occupied[i] = allocint (k+1); this_reader -> occupied[i][0] = k; this_reader -> occupied[i][1] = i; } } } } return TRUE; } /*! \fn int cif_file_get_number_of_positions (int linec, int lid) \brief get the number of symmetry positions \param linec Total number of lines \param lid Line to reach */ int cif_file_get_number_of_positions (int linec, int lid) { gboolean res = FALSE; int i = 0; while (! res) { #ifdef OPENMP this_line = g_strdup_printf ("%s", coord_line[lid+i]); #else file_get_to_line (lid+i); this_line = g_strdup_printf ("%s", tail -> line); #endif this_word = strtok (this_line, " "); if (this_word[0] == '_' || g_strcmp0(this_word, "loop_") == 0) { res = TRUE; break; } else { i ++; } } if (i) { this_reader -> sym_pos = g_malloc0(i*sizeof*this_reader -> sym_pos); int j, k; gchar * str; gchar * k_word; gchar * sym_pos_line; for (j=0; j sym_pos[j] = g_malloc0(3*sizeof*this_reader -> sym_pos[j]); #ifdef OPENMP sym_pos_line = g_strdup_printf ("%s", coord_line[lid+j]); #else file_get_to_line (lid+j); sym_pos_line = g_strdup_printf ("%s", tail -> line); #endif this_line = g_strdup_printf ("%s", sym_pos_line); this_word = strtok (this_line, " "); k_word = g_strdup_printf ("%s", this_word); str = g_strdup_printf ("%d", j+1); if (g_strcmp0(k_word, str) == 0) { g_free (this_line); this_line = NULL; for (k=strlen(k_word); k sym_pos[j][k] = g_strdup_printf ("%s", this_word); this_word = strtok (NULL, " "); } } } return i; } /*! \fn gboolean cif_get_symmetry_positions (int linec) \brief read the symmetry positions from the CIF file \param linec Total number of lines */ gboolean cif_get_symmetry_positions (int linec) { gchar * pos_key[2]={"_symmetry_equiv_pos_as", "_space_group_symop_operation"}; gchar * str; int loop_line; int line_id; int i; for (i=0; i<2; i++) { loop_line = get_loop_line_for_key (pos_key[i], "xyz", linec); if (loop_line) { line_id = cif_get_value (pos_key[i], "xyz", linec, loop_line, & str, FALSE, FALSE, TRUE); break; } } if (! loop_line) return FALSE; // Read lines after the instruction, as many positions as line until _ or loop this_reader -> num_sym_pos = cif_file_get_number_of_positions (linec, line_id); return TRUE; } /*! \fn int get_space_group_from_hm (gchar * hmk) \brief retrieve space group using the HM Key \param hmk */ int get_space_group_from_hm (gchar * hmk) { int i; gchar * str; gchar * hm = g_strdup_printf ("%s", replace_markup (hmk, "S", NULL)); for (i=0; i<230; i++) { str = substitute_string (hmsymbols[i], " ", NULL); if (g_strcmp0(str, hm) == 0) { g_free (str); g_free (hm); return i+1; } g_free (str); str = substitute_string (groups[i], "", NULL); str = substitute_string (str, "", NULL); if (g_strcmp0(str, hm) == 0) { g_free (str); g_free (hm); return i+1; } g_free (str); } // Cross checking for erroneus writting in the CIF file // ie. Fm3m in place of Fm-3m for (i=0; i<230; i++) { str = substitute_string (groups[i], "", NULL); str = substitute_string (str, "", NULL); if (g_strrstr(str, "-")) { str = substitute_string (str, "-", NULL); if (g_strcmp0(str, hm) == 0) { g_free (str); g_free (hm); return i+1; } } g_free (str); } g_free (hm); return 0; } /*! \fn gchar * get_string_from_origin (space_group * spg) \brief get the space group origin from its name \param spg Space group */ gchar * get_string_from_origin (space_group * spg) { gchar * str = NULL; if (wnpos[1]) { g_free (wnpos[1]); wnpos[1] = NULL; } get_wyck_char (spg -> coord_origin.m01, 1, 0); get_wyck_char (spg -> coord_origin.m11, 1, 1); get_wyck_char (spg -> coord_origin.m21, 1, 2); if (wnpos[1]) { str = g_strdup_printf ("%s", wnpos[1]); g_free (wnpos[1]); wnpos[1] = NULL; } return str; } /*! \fn int get_setting_from_hm (gchar * hmk, int end) \brief Getting the space group parameters using the HM Key \param hmk the HM key \param end Use origin (number of possible SP origins), or not (-1) */ int get_setting_from_hm (gchar * hmk, int end) { int i, j; gchar * str; if (this_reader -> lattice.sp_group) { i = this_reader -> lattice.sp_group -> nums; for (j=0; j lattice.sp_group -> settings[j].name, "s", "/"); str = substitute_string (str, "_", NULL); if (end < 0) { if (g_strcmp0(str, hmk) == 0) { g_free (str); return j; } } else { if (g_strcmp0(str, hmk) == 0 && this_reader -> lattice.sp_group -> settings[j].origin == end+1) { g_free (str); return j; } } g_free (str); } if (this_reader -> lattice.sp_group -> id > 2 && this_reader -> lattice.sp_group -> id < 16) { // This is a way around the way this familly of SG is often written, // using incomplete or inexact hmk keyword, ex: P21/a instead of P121/a1 for (j=0; j lattice.sp_group -> settings[j].name, "s", "/"); str = substitute_string (str, "_", NULL); str = substitute_string (str, "12", "2"); str = substitute_string (str, "/a1", "/a"); str = substitute_string (str, "/b1", "/b"); str = substitute_string (str, "/c1", "/c"); str = substitute_string (str, "/m1", "/m"); str = substitute_string (str, "/n1", "/n"); if (end < 0) { if (g_strcmp0(str, hmk) == 0) { g_free (str); str = g_strdup_printf ("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s", groups[this_reader -> lattice.sp_group -> id-1], hmk); add_reader_info (str, 1); g_free (str); return j; } } else { if (g_strcmp0(str, hmk) == 0 && this_reader -> lattice.sp_group -> settings[j].origin == end+1) { g_free (str); str = g_strdup_printf ("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s", groups[this_reader -> lattice.sp_group -> id-1], hmk); add_reader_info (str, 1); g_free (str); return j; } } g_free (str); } } return -1; } else { return -1; } } /*! \fn int group_info_from_hm_key (int spg, gchar * key_hm) \brief get the space group information using the HM key from the CIF file \param spg Space group \param key_hm HM key */ int group_info_from_hm_key (int spg, gchar * key_hm) { int i, j; gchar * str; gchar * exts[2] = {"h", "r"}; gchar * orig[2] = {"1", "2"}; gchar * key = NULL; gchar * hmk = NULL; gchar * hma, * hmb; gchar * hmkey = substitute_string (key_hm, "'", NULL); //hmkey = substitute_string (hmkey, "/", "s"); this_reader -> setting = -1; if (strstr(hmkey,":")) { key = g_strdup_printf ("%s", hmkey); hmk = g_strdup_printf ("%s", strtok (key, ":")); hma = g_strdup_printf ("%s:", hmk); hmb = replace_markup (hmkey, hma, NULL); i = strlen(hmb); hmb = g_ascii_strdown (hmb, i); for (i=0; i<2; i++) { if (g_strcmp0(hmb, exts[i]) == 0) { this_reader -> setting = i; break; } } g_free (hma); g_free (key); if (this_reader -> setting < 0) { for (i=0; i<2; i++) { if (g_strcmp0(hmb, orig[i]) == 0) { j = get_space_group_from_hm (hmk); this_reader -> setting = (spg) ? get_setting_from_hm (hmk, i) : 0; if (! j && this_reader -> setting < 0) { this_reader -> setting = 0; str = g_strdup_printf ("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s", groups[this_reader -> lattice.sp_group -> id-1], key_hm); add_reader_info (str, 1); g_free (str); } if (this_reader -> setting < 0) this_reader -> setting = 0; g_free (hmk); g_free (hmb); return j; } } } g_free (hmb); } else { hmk = g_strdup_printf ("%s", hmkey); } j = get_space_group_from_hm (hmk); this_reader -> setting = (spg || j) ? get_setting_from_hm (hmk, -1) : 0; g_free (hmk); if (! j && this_reader -> setting < 0) { str = g_strdup_printf ("Space group: CIF file information could be inaccurate !\n" " CIF file space group: %s, CIF file H-M symbol: %s", groups[this_reader -> lattice.sp_group -> id-1], key_hm); add_reader_info (str, 1); g_free (str); } if (this_reader -> setting < 0) this_reader -> setting = 0; return (spg) ? (j) ? j : spg : j; } /*! \fn gboolean cif_get_cell_data (int linec) \brief get the cell data from the CIF file \param linec Total number of lines */ gboolean cif_get_cell_data (int linec) { gchar * cellkeys[3] = {"length_a", "length_b", "length_c"}; gchar * cellangs[3] = {"angle_alpha", "angle_beta", "angle_gamma",}; gchar * str = NULL; int i; this_reader -> lattice.box = g_malloc0(sizeof*this_reader -> lattice.box); for (i=0; i<3; i++) { if (! cif_get_value ("_cell", cellkeys[i], linec, 0, & str, TRUE, FALSE, FALSE)) { str = g_strdup_printf ("Lattice parameters: impossible to retrieve the '%s' parameter !", box_prop[0][i]); add_reader_info (str, 0); g_free (str); return FALSE; } this_reader -> lattice.box[0].param[0][i] = atof(str); #ifdef DEBUG g_debug ("CIF:: box[0][%d]= %f", i, this_reader -> lattice.box[0].param[0][i]); #endif if (! cif_get_value ("_cell", cellangs[i], linec, 0, & str, TRUE, FALSE, FALSE)) { str = g_strdup_printf ("Lattice parameters: impossible to retrieve the '%s' parameter !", box_prop[1][i]); add_reader_info (str, 0); g_free (str); return FALSE; } this_reader -> lattice.box[0].param[1][i] = atof(str); #ifdef DEBUG g_debug ("CIF:: box[1][%d]= %f", i, this_reader -> lattice.box[0].param[1][i]); #endif } this_reader -> lattice.ltype = 0; compute_lattice_properties (& this_reader -> lattice); for (i=0; i<3; i++) this_reader -> lattice.cextra[i] = 1; return TRUE; } /*! \fn int cif_get_space_group (int linec) \brief get the space group from the CIF file \param linec Total number of lines */ int cif_get_space_group (int linec) { gchar * symkey[2] = {"int_tables_number", "group_it_number"}; gchar * str = NULL; int spg = 0; int i, j, k, l; for (i=0; i<2; i++) { if (cif_get_value ("_symmetry", symkey[i], linec, 0, & str, TRUE, FALSE, FALSE)) { spg = (int)atof(str); break; } } if (! spg) { if (cif_get_value ("_space_group", "it_number", linec, 0, & str, TRUE, FALSE, FALSE)) { spg = (int)atof(str); } } gchar * hmkey = NULL; if (! cif_get_value ("_symmetry", "space_group_name_h-m", linec, 0, & hmkey, FALSE, TRUE, FALSE)) { cif_get_value ("_space_group", "name_h-m_alt", linec, 0, & hmkey, FALSE, TRUE, FALSE); } if (! hmkey && ! spg) { add_reader_info ("Space group: no space group and no H-M symbol found !", 1); return FALSE; } #ifdef DEBUG if (spg) g_debug ("CIF:: Space group:: N°= %d, name= %s", spg, groups[spg-1]); if (hmkey) g_debug ("CIF:: H-M symbol:: %s", hmkey); #endif if (spg) { if (! read_space_group (NULL, spg-1)) return FALSE; } if (hmkey) { i = group_info_from_hm_key (spg, hmkey); if (! spg && ! i) { add_reader_info ("Space group: no space group found, unknown H-M symbol !", 1); #ifdef DEBUG g_debug ("CIF:: No space group found, unknown H-M symbol !"); #endif } else if (spg && ! i) { str = g_strdup_printf ("Space group: space group and H-M symbol do not match !\n" " CIF file space group: %s, CIF file H-M symbol: %s", groups[spg-1], hmkey); add_reader_info (str, 1); g_free (str); #ifdef DEBUG g_debug ("CIF:: Space group and H-M symbol do not match:: spg= %d, hm= %d", spg, i); #endif } else if (i && ! spg) { spg = i; } if (! this_reader -> lattice.sp_group) { if (! read_space_group (NULL, spg-1)) return FALSE; } } gchar * lat; int res = spg; if (spg > 1) { if (cif_get_value ("_space_group", "it_coordinate_system_code", linec, 0, & str, FALSE, FALSE, FALSE)) { str = substitute_string (str, "'", NULL); for (i=0; i<40; i++) { if (g_strcmp0(str, cif_coord_opts[i][0]) == 0) { if (i < 18) { if (spg < 3 || spg > 15) { res = 0; break; } if (str[0] == '-') { k = (int) atof (g_strdup_printf ("%c", str[2])); str = g_strdup_printf ("%c%c", str[0], str[1]); } else { k = (int) atof (g_strdup_printf ("%c", str[1])); str = g_strdup_printf ("%c", str[0]); } l = 0; for (j=0; j< this_reader -> lattice.sp_group -> nums; j++) { this_reader -> lattice.sp_group -> sid = j; get_origin (this_reader -> lattice.sp_group); lat = get_string_from_origin (this_reader -> lattice.sp_group); if (g_strcmp0(lat, str) == 0) l ++; if (l == k) { if (j < this_reader -> setting) add_reader_info ("Space group: ambiguous space group setting !", 1); this_reader -> setting = j; break; } } } else if (i < 36) { if (spg < 16 || spg > 74) { res = 0; break; } k = 0; if (str[0] == '1' || str[0]=='2') { k = (int) atof(g_strdup_printf ("%c", str[0])); str = replace_markup (str, g_strdup_printf("%d", k), NULL); } l = 0; for (j=0; j< this_reader -> lattice.sp_group -> nums; j++) { lat = g_strdup_printf ("%s%s%s", this_reader -> lattice.sp_group -> settings[j].pos[0], this_reader -> lattice.sp_group -> settings[j].pos[1], this_reader -> lattice.sp_group -> settings[j].pos[2]); if (g_strcmp0(lat, str) == 0) { if (j < this_reader -> setting || this_reader -> lattice.sp_group -> settings[j].origin != k) { add_reader_info ("Space group: ambiguous space group setting !", 1); } this_reader -> setting = j; l = 1; break; } } if (! l) add_reader_info ("Space group: ambiguous space group setting !", 1); } else if (i < 38) { if (spg < 75 || (spg > 142 && spg < 195)) { res = 0; break; } j = i - 36; if (j < this_reader -> setting) add_reader_info ("Space group: ambiguous space group setting !", 1); this_reader -> setting = j; } else { if (spg < 143 || spg > 165) { res = 0; break; } j = i - 38; if (j < this_reader -> setting) add_reader_info ("Space group: ambiguous space group setting !", 1); this_reader -> setting = j; } } } g_free (str); } if (spg > 142 && spg < 168) { // Trigonal space group gboolean correct_this = FALSE; box_info * box = & this_reader -> lattice.box[0]; switch (this_reader -> setting) { case 0: if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] == box -> param[0][2]) { if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == box -> param[1][2]) { correct_this = TRUE; } } break; case 1: if (box -> param[0][0] == box -> param[0][1] && box -> param[0][0] != box -> param[0][2]) { if (box -> param[1][0] == box -> param[1][1] && box -> param[1][0] == 90.0 && box -> param[1][2] == 120.0) { correct_this = TRUE; } } break; } if (correct_this) { gchar * setc[2] = {"hexagonal", "rhombohedral"}; str = g_strdup_printf ("Space group: found trigonal space group N°%d-%s, %s setting\n" "but the lattice parameters were found in %s format ...\n" "\t ... the space group setting was modified accordingly !", spg, groups[spg-1], setc[this_reader -> setting], setc[! this_reader -> setting]); add_reader_info (str, 1); g_free (str); this_reader -> setting = ! this_reader -> setting; } } // Test space group vs. box parameters: this_reader -> lattice.sp_group -> sid = this_reader -> setting; if (! test_lattice (NULL, & this_reader -> lattice)) { str = g_strdup_printf ("Space group and lattice paramters are not compatible !\n" "\nCheck a, b, c, and α, β, ɣ, with the type of crystal system."); add_reader_info (str, 0); g_free (str); res = -1; } } this_reader -> lattice.sp_group -> sid = this_reader -> setting; get_origin (this_reader -> lattice.sp_group); return res; } /*! \fn int open_cif_file (int linec) \brief open CIF file \param linec Total number of lines */ int open_cif_file (int linec) { int res; int i, j, k, l, m, n; if (cif_get_cell_data (linec)) { i = cif_get_space_group (linec); if (i > 0) { #ifdef DEBUG g_debug ("CIF:: SP setting:: %d, name= %s", this_reader -> setting+1, this_reader -> lattice.sp_group -> settings[this_reader -> setting].name); #endif if (this_reader -> lattice.sp_group) get_origin (this_reader -> lattice.sp_group); } else if (i == 0) { // No space group found #ifdef DEBUG g_debug ("CIF:: Impossible to retrieve space group information !"); #endif } else { // Error in space group return 3; } } // Reading positions if (cif_get_symmetry_positions (linec)) { if (! cif_use_symmetry_positions && this_reader -> num_sym_pos) { add_reader_info ("Symmetry position(s) in CIF file\n", 1); } } if (cif_use_symmetry_positions && ! this_reader -> num_sym_pos) { add_reader_info ("No symmetry position(s) in CIF file\n", 0); return 3; } if (cif_get_atomic_coordinates (linec)) { if (! this_reader -> cartesian) { for (i=0; i<3; i++) { for (j=0; j<3; j++) { if (i < 2) { active_box -> param[i][j] = this_reader -> lattice.box[0].param[i][j]; } active_box -> vect[i][j] = this_reader -> lattice.box[0].vect[i][j]; } } active_cell -> ltype = 1; active_cell -> pbc = TRUE; active_cell -> has_a_box = TRUE; if (this_reader -> lattice.sp_group) { active_cell -> crystal = TRUE; active_cell -> sp_group = duplicate_space_group (this_reader -> lattice.sp_group); } } res = 0; if (cif_use_symmetry_positions) { this_reader -> cartesian = TRUE; compute_lattice_properties (active_cell); active_project -> steps = 1; double spgpos[3][4]; int max_pos = this_reader -> num_sym_pos * this_reader -> natomes; gboolean dist_message = FALSE; gboolean low_occ = FALSE; gboolean save_it; vec3_t f_pos, c_pos; gboolean * save_pos = allocbool (max_pos); mat4_t pos_mat; atom at, bt; distance dist; double u; vec3_t * all_pos = g_malloc0(max_pos*sizeof*all_pos); int * all_origin = allocint (max_pos); int * cif_pos = allocint (this_reader -> natomes); double ** cryst_pos = allocddouble (this_reader -> natomes, 3); double ** occ_pos = g_malloc0(sizeof*occ_pos); int ** lot_pos = g_malloc0(sizeof*lot_pos); int num_pos = 0; int pos_max = 0; for (i=0; i<2; i++) { for (j=0; j natomes; j++) { if (! j) { num_pos = 0; for (k=0; k<3; k++) cryst_pos[num_pos][k] = this_reader -> coord[j][k]; cif_pos[num_pos] = 1; if (i) { occ_pos[num_pos][0] = this_reader -> occupancy[j]; lot_pos[num_pos][0] = this_reader -> lot[j]; } num_pos ++; pos_max = 1; } else { save_it = TRUE; for (k=0; k coord[j][0] == cryst_pos[k][0] && this_reader -> coord[j][1] == cryst_pos[k][1] && this_reader -> coord[j][2] == cryst_pos[k][2]) { save_it = FALSE; break; } } if (save_it) { for (k=0; k<3; k++) cryst_pos[num_pos][k] = this_reader -> coord[j][k]; cif_pos[num_pos] = 1; if (i) { occ_pos[num_pos][0] = this_reader -> occupancy[j]; lot_pos[num_pos][0] = this_reader -> lot[j]; } num_pos ++; } else { if (i) { occ_pos[k][cif_pos[k]] = this_reader -> occupancy[j]; lot_pos[k][cif_pos[k]] = this_reader -> lot[j]; } cif_pos[k] ++; pos_max = max (pos_max, cif_pos[k]); } } } if (! i) { occ_pos = allocddouble (num_pos, pos_max); lot_pos = allocdint (num_pos, pos_max); } } for (i=0; i num_sym_pos; i++) { for (j=0; j<3; j++) { tmp_pos = g_strdup_printf ("%s", this_reader -> sym_pos[i][j]); for (k=0; k<3; k++) { spgpos[j][k] = get_val_from_wyckoff (vect_comp[k], this_reader -> sym_pos[i][j]); } if (tmp_pos) { spgpos[j][3] = get_value_from_pos (tmp_pos); g_free (tmp_pos); tmp_pos = NULL; } else { spgpos[j][3] = 0.0; } } pos_mat = mat4 (spgpos[0][0], spgpos[0][1], spgpos[0][2], spgpos[0][3], spgpos[1][0], spgpos[1][1], spgpos[1][2], spgpos[1][3], spgpos[2][0], spgpos[2][1], spgpos[2][2], spgpos[2][3], 0.0, 0.0, 0.0, 1.0); for (j=0; j lattice.box[0].frac_to_cart, f_pos); all_pos[l].x = c_pos.x; all_pos[l].y = c_pos.y; all_pos[l].z = c_pos.z; all_origin[l] = j; save_it = TRUE; at.x = all_pos[l].x; at.y = all_pos[l].y; at.z = all_pos[l].z; for (k=0; k nspec + this_reader -> object_to_insert); i = 0; int * cryst_lot = allocint (cryst -> objects); int * from_origin = allocint (num_pos); for (j=0; j coord[i] = g_malloc0(sizeof*cryst -> coord[i]); cryst -> coord[i][0].x = all_pos[j].x; cryst -> coord[i][0].y = all_pos[j].y; cryst -> coord[i][0].z = all_pos[j].z; cryst -> pos_by_object[i] = 1; cryst_lot[i] = site_lot[k][l]; if (cryst_lot[i] < 0) { cryst -> at_by_object[i] = get_atomic_object_by_origin (cif_object, - cryst_lot[i] - 1, 0) -> atoms; } else { cryst -> at_by_object[i] = 1; } i ++; } from_origin[k] ++; } } g_free (site_lot); g_free (all_origin); g_free (from_origin); g_free (all_pos); g_free (save_pos); g_free (taken_pos); g_free (all_id); i = 0; for (j=0; j objects; j++) { i += cryst -> at_by_object[j] * cryst -> pos_by_object[j]; } active_project -> natomes = i; allocatoms (active_project); atomic_object * c_obj; int * spec_num = allocint (120); i = 0; for (j=0; j objects; j++) { if (cryst_lot[j] < 0) { k = - cryst_lot[j] - 1; c_obj = get_atomic_object_by_origin (cif_object, k, 0); for (l=0; l atoms; l++) { m = c_obj -> at_list[l].sp; n = c_obj -> old_z[m]; spec_num[n] ++; active_project -> atoms[0][i].sp = n; active_project -> atoms[0][i].x = cryst -> coord[j][0].x + c_obj -> at_list[l].x; active_project -> atoms[0][i].y = cryst -> coord[j][0].y + c_obj -> at_list[l].y; active_project -> atoms[0][i].z = cryst -> coord[j][0].z + c_obj -> at_list[l].z; i ++; } } else { k = (int)this_reader -> z[cryst_lot[j]]; spec_num[k] ++; active_project -> atoms[0][i].sp = k; active_project -> atoms[0][i].x = cryst -> coord[j][0].x; active_project -> atoms[0][i].y = cryst -> coord[j][0].y; active_project -> atoms[0][i].z = cryst -> coord[j][0].z; i ++; } } g_free (this_reader -> nsps); int * tmp_nsps = allocint (120); int * tmp_spid = allocint (120); i = 0; for (j=0; j<120; j++) { if (spec_num[j]) { tmp_nsps[i] = spec_num[j]; tmp_spid[j] = i; i++; } } this_reader -> nspec = i; this_reader -> nsps = allocint (i); for (i=0; i nspec; i++) this_reader -> nsps[i] = tmp_nsps[i]; g_free (tmp_nsps); g_free (this_reader -> z); this_reader -> z = allocdouble(i); i = 0; for (j=0; j<120; j++) { if (spec_num[j]) { this_reader -> z[i] = (double)j; i ++; } } for (i=0; i natomes; i++) { j = active_project -> atoms[0][i].sp; k = tmp_spid[j]; active_project -> atoms[0][i].sp = k; } g_free (tmp_spid); if (low_occ) { add_reader_info ("The crystal will be created however some objects might be missing,\n" "Occupancy is too low compared to the number of site(s) per cell.\n\n" "To build a crystal matching the defined occupancy:\n" "\t 1) If you are trying to read a CIF file, use the crystal builder instead.\n" "\t 2) Modify the occupancy set-up to 'Completely random'.\n" "\t 3) Increase the number of unit cells up to get rid of this message.\n\n", 1); } if (dist_message) { add_reader_info ("Object(s) at equivalent positions have been removed\n" "to ensure the consistency of the model\n" "when using Periodic Boundary Conditions\n ", 1); } } } else { // No coordinates found #ifdef DEBUG g_debug ("CIF:: Impossible to retrieve atomic coordinates !"); #endif res = 2; } return res; } Atomes-GNU-1.1.14/src/project/readers/read_coord.c000066400000000000000000000325201457665371200216260ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_coord.c * @short General functions to import atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_coord.c' * * Contains: * - The general functions to import atomic coordinates * * List of functions: gboolean set_dummy_in_use (gchar * this_word); int open_coord_file (gchar * filename, int fti); void add_reader_info (gchar * info, int mid); void reader_info (gchar * type, gchar * sinf, int val); void format_error (int stp, int ato, gchar * mot, int line); void check_for_species (double v, int ato); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include #include "cbuild_edit.h" extern int open_xyz_file (int linec); extern int open_c3d_file (int linec); extern int open_pdb_file (int linec); extern int open_trj_file (int linec); extern int open_vas_file (int linec); extern int open_cif_file (int linec); extern int open_hist_file (int linec); extern void allocatoms (project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern int build_crystal (gboolean visible, project * this_proj, gboolean to_wrap, gboolean show_clones, cell_info * cell, GtkWidget * widg); extern const gchar * dfi[2]; extern atom_search * cif_search; extern atomic_object * cif_object; FILE * coordf; coord_file * this_reader; gchar ** coord_line = NULL; gchar * this_line = NULL; char * this_word; line_node * head = NULL; line_node * tail = NULL; /*! \fn void add_reader_info (gchar * info, int mid) \brief append information message to the reader information \param info the reader information message \param mid message type (0 = error, 1 = warning) */ void add_reader_info (gchar * info, int mid) { this_reader -> info = (this_reader -> info) ? g_strdup_printf ("%s\n%s", this_reader -> info, info) : g_strdup_printf ("%s", info); if (! mid) this_reader -> mid = 0; } /*! \fn void reader_info (gchar * type, gchar * sinf, int val) \brief display reader information \param type File type \param sinf Information message \param val Value to present */ void reader_info (gchar * type, gchar * sinf, int val) { g_print ("Reading coordinates [%s]: %s = %d\n", type, sinf, val); } /*! \fn void format_error (int stp, int ato, gchar * mot, int line) \brief Message to display an error message \param stp the MD step id \param ato Atom id \param mot Message \param line Line with the error */ void format_error (int stp, int ato, gchar * mot, int line) { gchar * str; if (ato < 0) { str = g_strdup_printf ("Wrong file format: error at step %d !\n" "Wrong file format: record %s on line %d is corrupted !", stp, mot, line); } else { str = g_strdup_printf ("Wrong file format: error at step %d, atom %d !\n" "Wrong file format: record %s on line %d is corrupted !", stp, ato, mot, line+1); } add_reader_info (str, 0); g_free (str); } /*! \fn int set_v_dummy (gchar * this_word) \brief check if dummy is used for unknown species, if not then ask what to do \param this_word the chemical species label */ int set_v_dummy (gchar * this_word) { int i; for (i=0; i ndummy; i++) { if (g_strcmp0(this_reader -> dummy[i], this_word) == 0) { return i+1; } } gchar ** dummy = NULL; if (this_reader -> ndummy) { dummy = duplicate_strings (this_reader -> ndummy, this_reader -> dummy); g_free (this_reader -> dummy); } this_reader -> ndummy ++; this_reader -> dummy = g_malloc0(this_reader -> ndummy*sizeof*this_reader -> dummy); if (dummy) { for (i=0; i ndummy-1; i++) { this_reader -> dummy[i] = g_strdup_printf ("%s", dummy[i]); } } this_reader -> dummy[this_reader -> ndummy-1] = g_strdup_printf ("%s", this_word); // Dummy added, then do we use this dummy ? gchar * str = g_strdup_printf ("Use dummy atom(s) for unknown %s species ?", this_word); gboolean use_dummy = ask_yes_no ("Use dummy atom(s) ?", str, GTK_MESSAGE_QUESTION, MainWindow); g_free (str); if (use_dummy) { str = g_strdup_printf ("Using dummy atom(s) for unknown %s species", this_word); add_reader_info (str, 1); g_free (str); return this_reader -> ndummy; } else { str = g_strdup_printf ("No dummy atom(s) for unknown %s species", this_word); add_reader_info (str, 1); g_free (str); return 0; } } /*! \fn void check_for_species (double v, int ato) \brief Fill the species for each atom and the associated data \param v Z \param ato the atom id */ void check_for_species (double v, int ato) { int i; gboolean add_spec; add_spec = TRUE; if (this_reader -> nspec) { for (i=0; i nspec; i++) { if (this_reader -> z[i] == v) { if (this_reader -> cartesian) { active_project -> atoms[0][ato].sp = i; } else { this_reader -> lot[ato] = i; } this_reader -> nsps[i] ++; add_spec = FALSE; break; } } } if (add_spec) { if (this_reader -> nspec) { this_reader -> z = g_realloc (this_reader -> z, (this_reader -> nspec+1)*sizeof*this_reader -> z); this_reader -> nsps = g_realloc (this_reader -> nsps, (this_reader -> nspec+1)*sizeof*this_reader -> nsps); } if (this_reader -> cartesian) { active_project -> atoms[0][ato].sp = this_reader -> nspec; } else { this_reader -> lot[ato] = this_reader -> nspec; } this_reader -> nsps[this_reader -> nspec] = 1; this_reader -> z[this_reader -> nspec] = v; this_reader -> nspec ++; } } /*! \fn int open_coord_file (gchar * filename, int fti) \brief open atomic coordinates file \param filename the file name \param fti the type of coordinates */ int open_coord_file (gchar * filename, int fti) { int res; #ifdef OPENMP struct stat status; res = stat (filename, & status); if (res == -1) { add_reader_info ("Error - cannot get file statistics !", 0); return 1; } int fsize = status.st_size; #endif coordf = fopen (filename, dfi[0]); if (! coordf) { add_reader_info ("Error - cannot open coordinates file !", 0); return 1; } int i, j, k, l; #ifdef OPENMP gchar * coord_content = g_malloc0(fsize*sizeof*coord_content); fread (coord_content, fsize, 1, coordf); fclose (coordf); int linecount = 0; for (j=0; j next = g_malloc0 (sizeof*tail -> next); if (fti == 9 || fti == 10) { tail -> next -> prev = g_malloc0 (sizeof*tail -> next -> prev); tail -> next -> prev = tail; } tail = tail -> next; } tail -> line = g_strdup_printf ("%s", buf); tail -> line = substitute_string (tail -> line, "\n", "\0"); i ++; } g_free (buf); fclose (coordf); #endif if (i) { this_reader -> cartesian = TRUE; if (fti < 2) { res = open_xyz_file (i); } else if (fti == 2) { res = open_c3d_file (i); } else if (fti < 5) { res = open_trj_file (i); } else if (fti < 7) { res = open_vas_file (i); } else if (fti > 6 && fti < 9) { res = open_pdb_file (i); } else if (fti == 9 || fti == 10) { if (fti == 10) cif_use_symmetry_positions = TRUE; this_reader -> cartesian = FALSE; res = open_cif_file (i); } else if (fti == 11) { res = open_hist_file (i); } } else { res = 1; } #ifndef OPENMP if (tail) g_free (tail); #endif if (! res) { if (fti == 9) { if (! this_reader -> cartesian) { // this_reader -> lattice.sp_group -> sid = 2; // get_origin (this_reader -> lattice.sp_group); if (! cif_use_symmetry_positions) { i = build_crystal (FALSE, active_project, TRUE, FALSE, & this_reader -> lattice, MainWindow); if (! i) { add_reader_info ("Error trying to build crystal using the CIF file parameters !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n", 0); res = 3; } else if (i > 1) { add_reader_info ("Potential issue(s) when building crystal !\n" "This usually comes from: \n" "\t - incorrect space group description\n" "\t - incomplete space group description\n" "\t - missing space group setting\n" "\t - incorrect space group setting\n", 1); if (this_reader -> num_sym_pos) { add_reader_info ("\nAnother model will be built using included symmetry positions\n", 1); cif_use_symmetry_positions = TRUE; } } } } } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].id = j; active_project -> atoms[i][j].show[0] = TRUE; active_project -> atoms[i][j].show[1] = TRUE; active_project -> atoms[i][j].label[0] = FALSE; active_project -> atoms[i][j].label[1] = FALSE; active_project -> atoms[i][j].pick[0] = FALSE; active_project -> atoms[i][j].cloned = FALSE; } } if (fti != 9 || this_reader -> cartesian) { active_project -> nspec = this_reader -> nspec; active_project -> chemistry = alloc_chem_data (active_project -> nspec); active_project_changed (activep); k = l = 0; reader_info (coord_files_ext[fti], "Number of species", active_project -> nspec); for (i=0; i nspec; i++) { j = (int)this_reader -> z[i]; if (this_reader -> z[i] < 1.0) { active_chem -> label[i] = g_strdup_printf ("%s", this_reader -> dummy[l]); active_chem -> element[i] = g_strdup_printf ("Dummy %s", this_reader -> dummy[l]); active_chem -> chem_prop[CHEM_M][i] = 1.0; active_chem -> chem_prop[CHEM_R][i] = 0.5; l ++; } else { active_chem -> label[i] = g_strdup_printf ("%s", periodic_table_info[j].lab); active_chem -> element[i] = g_strdup_printf ("%s", periodic_table_info[j].name); active_chem -> chem_prop[CHEM_M][i] = set_mass_ (& j); active_chem -> chem_prop[CHEM_R][i] = set_radius_ (& j, & k); if (! active_chem -> chem_prop[CHEM_R][i]) { gchar * str = g_strdup_printf ("For species %s, radius is equal to 0.0 !", active_chem -> label[i]); add_reader_info (str, 1); g_free (str); } active_chem -> chem_prop[CHEM_N][i] = set_neutron_ (& j); active_chem -> chem_prop[CHEM_X][i] = active_chem -> chem_prop[CHEM_Z][i]; } active_chem -> nsps[i] = this_reader -> nsps[i]; g_print ("Reading coordinates [%s]:\t %s, nsps[%d]= %d\n", coord_files_ext[fti], active_chem -> label[i], i+1, active_chem -> nsps[i]); active_chem -> chem_prop[CHEM_Z][i] = this_reader -> z[i]; } } else { reader_info (coord_files_ext[fti], "Number of species", active_project -> nspec); for (i=0; i nspec; i++) { g_print ("Reading coordinates [%s]:\t %s, nsps[%d]= %d\n", coord_files_ext[fti], active_chem -> label[i], i+1, active_chem -> nsps[i]); } } } if (! (fti == 9 && cif_use_symmetry_positions) || res) { if (cif_search) { g_free (cif_search); cif_search = NULL; } if (cif_object) { g_free (cif_object); cif_object = NULL; } cif_use_symmetry_positions = FALSE; } return res; } Atomes-GNU-1.1.14/src/project/readers/read_hist.c000066400000000000000000000323601457665371200214710ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_hist.c * @short Functions to read DL-POLY history file * @author Sébastien Le Roux */ /* * This file: 'read_hist.c' * * Contains: * - The functions to read DL-POLY history file * * List of functions: int hist_get_data (int linec); int hist_get_content (); int open_hist_file (int linec); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include #include "cbuild_edit.h" #include "readers.h" #include extern void check_for_species (double v, int ato); /*! \fn int hist_get_data (int linec) \brief read data from the DL-POLY history file \param linec Total number of lines */ int hist_get_data (int linec) { int i; if (linec < 7) return 0; #ifdef OPENMP this_line = g_strdup_printf ("%s", coord_line[1]); #else line_node * tmp_line; tail = head; tmp_line = tail; tail = tail -> next; g_free (tmp_line); this_line = g_strdup_printf ("%s", tail -> line); #endif // OPENMP this_word = strtok (this_line, " "); this_reader -> traj = (int)atof(this_word); this_word = strtok (NULL, " "); if (! this_word) { add_reader_info ("Wrong file format - record ii line is corrupted !", 0); return 0; } this_reader -> lattice.pbc = (int)atof(this_word); this_word = strtok (NULL, " "); if (! this_word) { add_reader_info ("Wrong file format - record ii line is corrupted !", 0); return 0; } this_reader -> natomes = (int)atof(this_word); i = linec - 2; if (i%(4 + (2+this_reader -> traj)*this_reader -> natomes)) return 0; this_reader -> steps = i/(4 + (2+this_reader -> traj)*this_reader -> natomes); return 1; } /*! \fn int hist_get_content () \brief read the content of the DL-POLY history file */ int hist_get_content () { gchar * lil[3] = {"ii", "iii", "iv"}; int i, j, k, l; double v; this_reader -> nspec = 0; active_project -> steps = this_reader -> steps; active_project -> natomes = this_reader -> natomes; allocatoms (active_project); this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); this_reader -> lattice.box = g_malloc0(this_reader -> steps*sizeof*this_reader -> lattice.box); int res = 1; #ifdef OPENMP int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (this_reader -> steps < numth) { if (numth >= 2*(this_reader -> steps-1)) { doatoms = TRUE; } else { numth = this_reader -> steps; } } if (doatoms) { // OpenMP on atoms for (i=0; i steps; i++) { k = 3 + i*(this_reader -> natomes*(2+this_reader -> traj) + 4); for (j=0; j<3; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, -1, lil[l], k+j); return 0; } this_reader -> lattice.box[i].vect[j][l] = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); } } k += 3; #pragma omp parallel for num_threads(numth) private(j,l,v,this_line,saved_line,this_word) shared(i,k,lil,coord_line,this_reader,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, j+1, lil[l], k+j*(2+this_reader -> traj)); res = 0; goto enda; } if (l < 2) this_word = strtok_r (NULL, " ", & saved_line); } v = atof (this_word); if (v > 0.0) { if (! i) { #pragma omp critical check_for_species (v, j); } g_free (this_line); this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)+1]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[0], k+j*(2+this_reader -> traj)); res = 0; goto enda; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[1], k+j*(2+this_reader -> traj)); res = 0; goto enda; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)); res = 0; goto enda; } active_project -> atoms[i][j].z = atof(this_word); } else { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)); res = 0; goto enda; } g_free (this_line); enda:; } if (res == 0) break; } } else { // OpenMP on MD steps #pragma omp parallel for num_threads(numth) private(i,j,k,l,v,this_line,saved_line,this_word) shared(lil,coord_line,this_reader,active_project,res) for (i=0; i steps; i++) { if (! res) goto ends; k = 3 + i*(this_reader -> natomes*(2+this_reader -> traj)+4); for (j=0; j<3; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, -1, lil[l], k+j); res = 0; goto ends; } this_reader -> lattice.box[i].vect[j][l] = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); } } k += 3; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, j+1, lil[l], k+j*(2+this_reader -> traj)); res = 0; goto ends; } if (l < 2) this_word = strtok_r (NULL, " ", & saved_line); } v = atof (this_word); if (v > 0.0) { if (! i) check_for_species (v, j); g_free (this_line); this_line = g_strdup_printf ("%s", coord_line[k+j*(2+this_reader -> traj)+1]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[0], k+j*(2+this_reader -> traj)+1); res = 0; goto ends; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[1], k+j*(2+this_reader -> traj)+1); res = 0; goto ends; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)+1); res = 0; goto ends; } active_project -> atoms[i][j].z = atof(this_word); } else { format_error (i+1, j+1, lil[2], k+j*(2+this_reader -> traj)); res = 0; goto ends; } g_free (this_line); } ends:; } } #else line_node * tmp_line; tmp_line = tail; tail = tail -> next; g_free (tmp_line); for (i=0; i steps; i++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k = 3 + i*(this_reader -> natomes*(2+this_reader -> traj) + 4); for (j=0; j<3; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, -1, lil[l], k+j); return 0; } this_reader -> lattice.box[i].vect[j][l] = atof(this_word); this_word = strtok (NULL, " "); } tmp_line = tail; tail = tail -> next; g_free (tmp_line); } k += 3; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); for (l=0; l<3; l++) { if (! this_word) { format_error (i+1, j+1, lil[l], k+2*j); return 0; } if (l < 2) this_word = strtok (NULL, " "); } v = atof (this_word); if (v > 0.0) { if (! i) check_for_species (v, j); tmp_line = tail; tail = tail -> next; g_free (tmp_line); this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lil[0], k+2*j+1); return 0; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lil[1], k+2*j+1); return 0; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lil[2], k+2*j+1); return 0; } active_project -> atoms[i][j].z = atof(this_word); } else { format_error (i+1, j+1, lil[l], k+2*j+1); return 0; } tmp_line = tail; tail = tail -> next; g_free (tmp_line); } } #endif if (! res) return res; gboolean add_spec; for (i=0; i nspec; i++) { add_spec = FALSE; for (j=1; j<120; j++) { if (fabs(periodic_table_info[j].M - this_reader -> z[i]) < 0.1) { this_reader -> z[i] = (float)j; add_spec = TRUE; break; } } if (! add_spec) { gchar * str = g_strdup_printf ("Cannot find species with a mass of %f !", this_reader -> z[i]); add_reader_info (str, 0); g_free (str); return 0; } } for (i=1; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].sp = active_project -> atoms[0][j].sp; } } this_reader -> lattice.npt = FALSE; for (i=1; i steps; i++) { for (j=0; j<3; j++) { for (k=0; k<3; k++) { if (this_reader -> lattice.box[i].vect[j][k] != this_reader -> lattice.box[0].vect[j][k]) { this_reader -> lattice.npt = TRUE; break; } } if (this_reader -> lattice.npt) break; } if (this_reader -> lattice.npt) break; } return 1; } /*! \fn int open_hist_file (int linec) \brief open DL-POLY history file \param linec Number of lines in the file */ int open_hist_file (int linec) { int res; int i, j, k, l; if (hist_get_data(linec)) { reader_info ("hist", "Number of atoms", this_reader -> natomes); reader_info ("hist", "Number of steps", this_reader -> steps); if (hist_get_content()) { active_cell -> ltype = 2; active_cell -> pbc = this_reader -> lattice.pbc; active_cell -> npt = this_reader -> lattice.npt; i = (active_cell -> npt) ? this_reader -> steps : 1; if (active_cell -> npt) { g_free (active_cell -> box); active_cell -> box = g_malloc0(i*sizeof*active_cell -> box); active_box = & active_cell -> box[0]; } for (j=0; j box[j].vect[k][l] = this_reader -> lattice.box[j].vect[k][l]; } } } active_cell -> has_a_box = TRUE; active_cell -> crystal = FALSE; res = 0; } else { // Content error res = 2; } } else { // Data error res = 2; } return res; } Atomes-GNU-1.1.14/src/project/readers/read_isaacs.c000066400000000000000000001100661457665371200217650ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_isaacs.c * @short Functions to read an ISAACS XML file \n Functions to write an ISAACS XML file * @author Sébastien Le Roux */ /* * This file: 'read_isaacs.c' * * Contains: * - The functions to read an ISAACS XML file - The functions to write an ISAACS XML file * * List of functions: int XmlwriterFilename (const char *uri); int write_xml (const char * filetosave); int get_spec_from_data (xmlChar * data); int setprop (xmlNodePtr pnode); int testopening (char * tdata, char * tfichier); int setchemistry (xmlNodePtr xsnode); int setbox (xmlNodePtr boxnode); int setpbc (xmlNodePtr pbcnode); int setcutoffs (xmlNodePtr cutnode); int settime(xmlNodePtr timenode); int check_xml (const char * filetocheck); size_t strfind (char * ida); gboolean file_exists(const char * filename); gchar * open_xml (const char * filetoread); xmlNodePtr findnode (xmlNodePtr startnode, char * nname); */ #include #include #include #include #include "global.h" #include "interface.h" #include "callbacks.h" #define MY_ENCODING "UTF-8" extern int open_coordinate_file (int id); #define NFORMATS 7 char * reg_types[NFORMATS] = {"XYZ file", "Chem3D file", "CPMD trajectory", "VASP trajectory", "multiple XYZ file", "multiple Chem3D file", "PDB file"}; /*! \fn size_t strfind (char * ida) \brief size of a string without spaces \param ida */ size_t strfind (char * ida) { size_t a, b, c; a = strlen(ida); b = 0; for ( c=0 ; c < a ; c++) { if (ida[c] != ' ') { b ++; } } return b; } /*! \fn int XmlwriterFilename (const char *uri) \brief write ISAACS XML file \param *uri the file name */ int XmlwriterFilename (const char *uri) { int rc; int i, j; xmlTextWriterPtr writer; char isaacinfo[16] = " I.S.A.A.C.S. v"; char xmlinfo[11]=" XML file "; const xmlChar intro[50]=""; char * val; char * ncut; size_t lgt; /* Create a new XmlWriter for uri, with no compression. */ writer = xmlNewTextWriterFilename(uri, 0); if (writer == NULL) return 0; rc = xmlTextWriterSetIndent(writer, 1); if (rc < 0) return 0; /* Start the document with the xml default for the version, * encoding MY_ENCODING and the default for the standalone * declaration. */ rc = xmlTextWriterStartDocument(writer, NULL, MY_ENCODING, NULL); if (rc < 0) return 0; strcpy((char *)intro, isaacinfo); strcat((char *)intro, "1.0"); strcat((char *)intro, xmlinfo); rc = xmlTextWriterWriteComment(writer, intro); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST "isaacs-xml"); if (rc < 0) return 0; /* Start the "data" element. Since thist is the first * element, this will be the root element of the document. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)" Data format and file containing the configuration(s) "); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"data"); if (rc < 0) return 0; int reg = 0; if (active_project -> tfile < 2) { reg = (active_project -> steps > 1) ? 4 : 0; } else if (active_project -> tfile == 2) { reg = (active_project -> steps > 1) ? 5 : 1; } else if (active_project -> tfile < 5) { reg = 2; } else if (active_project -> tfile < 6) { reg = 3; } else if (active_project -> tfile < 9) { reg = 6; } else { return 0; } rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"type", "%s", reg_types[reg]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"file", "%s", active_project -> coordfile); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "chemistry" element. label id="0"> label> ... */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)" Chemistry information "); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"chemistry"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"atoms", "%d", active_project -> natomes); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"species"); if (rc < 0) return 0; val=g_strdup_printf("%d",active_project -> nspec); rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"number", BAD_CAST val); g_free (val); if (rc < 0) return 0; for ( i=0 ; i nspec ; i++) { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"label"); if (rc < 0) return 0; val=g_strdup_printf("%d",i); rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"id", BAD_CAST val); g_free (val); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatString (writer, "%s", active_chem -> label[i]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; for ( i=0 ; i nspec ; i++) { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"element"); if (rc < 0) return 0; rc = xmlTextWriterWriteAttribute(writer, BAD_CAST (const xmlChar *)"symbol", BAD_CAST active_chem -> label[i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"name", "%s ", active_chem -> element[i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"z", "%d", (int)active_chem -> chem_prop[CHEM_Z][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"mass", "%f", active_chem -> chem_prop[CHEM_M][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"rad", "%d", 0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"radius", "%f", active_chem -> chem_prop[CHEM_R][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"nscatt", "%f", active_chem -> chem_prop[CHEM_N][i]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"xscatt", "%f", active_chem -> chem_prop[CHEM_Z][i]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "box" element. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)" Box information "); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"box"); if (rc < 0) return 0; if (active_cell -> ltype == 1) { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"edges"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a", "%f", active_box -> param[0][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b", "%f", active_box -> param[0][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c", "%f", active_box -> param[0][2]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"angles"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"alpha", "%f", active_box -> param[1][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"beta", "%f", active_box -> param[1][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"gamma", "%f", active_box -> param[1][2]); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } else { rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"edges"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"angles"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"alpha", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"beta", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"gamma", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"vectors"); if (rc < 0) return 0; if (active_cell -> ltype == 2) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.x", "%f", active_box -> vect[0][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.y", "%f", active_box -> vect[0][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.z", "%f", active_box -> vect[0][2]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.x", "%f", active_box -> vect[1][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.y", "%f", active_box -> vect[1][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.z", "%f", active_box -> vect[1][2]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.x", "%f", active_box -> vect[2][0]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.y", "%f", active_box -> vect[2][1]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.z", "%f", active_box -> vect[2][2]); if (rc < 0) return 0; } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.x", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.y", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"a.z", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.x", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.y", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"b.z", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.x", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.y", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"c.z", "%f", 0.0); if (rc < 0) return 0; } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "pbc" element. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)" PBC information "); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"pbc"); if (rc < 0) return 0; if (active_cell -> pbc) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"apply", "%s", "TRUE"); } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"apply", "%s", "FALSE"); } if (rc < 0) return 0; if (active_cell -> frac) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"fractional", "%s", "TRUE"); } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"fractional", "%s", "FALSE"); } if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"fractype", "%d", active_cell -> frac); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "cutoffs" element. label[spi]-active_chem -> label[spj]> label[spi]-active_chem -> label[spj]> */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)" Cutoffs information "); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"cutoffs"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"total", "%f", active_chem -> grtotcutoff); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"partials"); if (rc < 0) return 0; for ( i=0 ; i nspec ; i++ ) { for ( j=0 ; j nspec ; j++ ) { lgt = 10; lgt += strfind (active_chem -> label[i]) + strlen("-") + strfind(active_chem -> label[j]); ncut = g_malloc0 (lgt*sizeof*ncut); strncpy (ncut, active_chem -> label[i], strfind(active_chem -> label[i])); strcat (ncut, "-"); strncat (ncut, active_chem -> label[j], strfind(active_chem -> label[j])); rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST ncut, "%f", active_chem -> cutoffs[i][j]); if (rc < 0) return 0; g_free (ncut); ncut=NULL; } } rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; /* Start the "time series" element.
*/ if (active_project -> steps > 1) { rc = xmlTextWriterWriteComment(writer, (const xmlChar *)" Time series "); if (rc < 0) return 0; rc = xmlTextWriterStartElement(writer, BAD_CAST (const xmlChar *)"time-series"); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"dt", "%f", 0.0); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"unit", "t [%s]", untime[active_project -> tunit]); if (rc < 0) return 0; rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"ndt", "%d", 1); if (rc < 0) return 0; rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; } /* Start the "project" element. */ rc = xmlTextWriterWriteComment(writer, (const xmlChar *)" Apply project "); if (rc < 0) return 0; if (active_project -> run) { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"project", "%s", "TRUE"); } else { rc = xmlTextWriterWriteFormatElement(writer, BAD_CAST (const xmlChar *)"project", "%s", "FALSE"); } if (rc < 0) return 0; // Closing "" rc = xmlTextWriterEndElement(writer); if (rc < 0) return 0; rc = xmlTextWriterEndDocument(writer); if (rc < 0) return 0; xmlFreeTextWriter(writer); return 1; } /*! \fn int write_xml (const char * filetosave) \brief write XML file \param filetosave File to write */ int write_xml (const char * filetosave) { /* first, the file version */ int res=XmlwriterFilename(filetosave); /* * Cleanup function for the XML library. */ xmlCleanupParser(); /* * this is to debug memory for regression tests */ xmlMemoryDump(); return res; } /*! \fn gboolean file_exists(const char * filename) \brief file exists ? \param filename File name */ gboolean file_exists(const char * filename) { FILE * file; if ((file = fopen(filename, "r"))) { fclose(file); return TRUE; } return FALSE; } /*! \fn xmlNodePtr findnode (xmlNodePtr startnode, char * nname) \brief find XML node \param startnode Starting node \param nname Node name to find */ xmlNodePtr findnode (xmlNodePtr startnode, char * nname) { xmlNodePtr tmp; tmp = startnode; while (g_strcmp0 ((char *)(tmp -> name), nname) != 0) { if (tmp -> next == NULL) { return NULL; } tmp = tmp -> next; } return tmp; } /*! \fn int get_spec_from_data (xmlChar * data) \brief get atomic species from data \param data the data */ int get_spec_from_data (xmlChar * data) { int i; for ( i=0 ; i nspec ; i++) { if (g_strcmp0 (exact_name((char *)data), active_chem -> label[i]) == 0) { return i; } } return -1; } /*! \fn int setprop (xmlNodePtr pnode) \brief read chemical properties from XML node \param pnode the XML node */ int setprop (xmlNodePtr pnode) { int i, res; xmlAttrPtr pspec; xmlNodePtr idn, ptnode, ptn; xmlChar * data; ptnode=pnode; for ( i=0 ; i nspec ; i++) { ptnode = findnode(ptnode, "element"); if (ptnode == NULL) { res=6; goto pend; } pspec = ptnode -> properties; idn = pspec -> children; data = xmlNodeGetContent(idn); res = get_spec_from_data(data); if (res < 0) { res=6; goto pend; } ptnode = ptnode -> children; ptn = findnode(ptnode, "name"); if (ptn == NULL) { res=6; goto pend; } data = xmlNodeGetContent(ptn); if (g_strcmp0 (exact_name((char *)data), active_chem -> element[res]) != 0) { res=6; goto pend; } ptn = findnode(ptnode, "z"); if (ptn == NULL) { res=6; goto pend; } data= xmlNodeGetContent(ptn); if ((int)active_chem -> chem_prop[CHEM_Z][res] != (int)atof((char *)data)) { res=6; goto pend; } ptn = findnode(ptnode, "mass"); if (ptn == NULL) { res=6; goto pend; } data= xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_M][res] = atof((char *)data); ptn = findnode(ptnode, "rad"); if (ptn == NULL) { res=6; goto pend; } data= xmlNodeGetContent(ptn); // val = atof((char *)data); ptn = findnode(ptnode, "radius"); if (ptn == NULL) { res=6; goto pend; } data= xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_R][res] = atof((char *)data); ptn = findnode(ptnode, "nscatt"); if (ptn == NULL) { res=6; goto pend; } data= xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_N][res] = atof((char *)data); ptn = findnode(ptnode, "xscatt"); if (ptn == NULL) { res=6; goto pend; } data= xmlNodeGetContent(ptn); active_chem -> chem_prop[CHEM_X][res] = atof((char *)data); ptnode = ptnode -> parent; ptnode = ptnode -> next; } res = 0; pend: return res; } /*! \fn int testopening (char * tdata, char * tfichier) \brief test atomic coordinates file opening \param tdata Type of coordinates \param tfichier File name */ int testopening (char * tdata, char * tfichier) { int i, j; char * err; j = -1; for ( i=0 ; i -1) { if (file_exists (tfichier)) { switch (j) { case 0: active_project -> tfile = 0; break; case 1: active_project -> tfile = 2; break; case 2: active_project -> tfile = 3; break; case 3: active_project -> tfile = 5; break; case 4: active_project -> tfile = 0; break; case 5: active_project -> tfile = 2; break; case 6: active_project -> tfile = 7; break; } active_project -> coordfile = tfichier; if (open_coordinate_file (active_project -> tfile) == 0) { return 0; } else { return 11; } } else { j=4; err=g_strdup_printf("The %s\n %s\n from the XML file does not exist\n", tdata, tfichier); show_error (err, 0, MainWindow); g_free (err); return j; } } else { show_error ("Unknown data format in XML file\n", 0, MainWindow); j=4; return j; } } /*! \fn int setchemistry (xmlNodePtr xsnode) \brief read chemistry data from node \param xsnode the XML node */ int setchemistry (xmlNodePtr xsnode) { xmlNodePtr idn, cs, xnode; xmlAttrPtr xspec; xmlChar * data; int ats, res, i; double val; xnode = xsnode -> children; cs = findnode(xnode, "atoms"); if (cs == NULL) { res=5; goto xend; } data = xmlNodeGetContent(cs); val = atof((char *)data); ats = val; if (ats != active_project -> natomes) { show_warning ("The number of atoms in the XML file\n" "is not the same that the number of atoms\n" "in the file containing the coordinates.\n" "Other information from the XML file\n" "will be ignored\n", MainWindow); res=5; goto xend; } else { cs = findnode(xnode, "species"); if (cs == NULL) { res=5; goto xend; } xspec = cs -> properties; idn = xspec -> children; data = xmlNodeGetContent(idn); val = atof((char *)data); ats = val; if (ats != active_project -> nspec) { show_warning ("The number of chemical species in the XML file\n" "is not the same that the number of chemical species\n" "in the file that contains the atomic coordinates.\n", MainWindow); res = 5; goto xend; } else { cs = cs -> children; ats = 0; for ( i=0 ; i nspec ; i++) { cs = findnode(cs, "label"); if (cs == NULL) { res=5; goto xend; } data = xmlNodeGetContent(cs); res = get_spec_from_data (data); if (res < 0) { res=5; goto xend; } else { ats ++; } } if (ats != active_project -> nspec) { res=5; goto xend; } xnode = xsnode -> children; res = setprop (xnode); } } xend: return res; } /*! \fn int setbox (xmlNodePtr boxnode) \brief read box properties from node \param boxnode the XML node */ int setbox (xmlNodePtr boxnode) { int box; xmlNodePtr bnode, ba, bb; xmlChar * data; double val; bnode = boxnode -> children; ba=findnode(bnode, "edges"); if (ba == NULL) { box=7; goto bend; } ba = ba -> children; bb=findnode(ba, "a"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> param[0][0]= val; bb=findnode(ba, "b"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> param[0][1]= val; bb=findnode(ba, "c"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> param[0][2]= val; ba=findnode(bnode, "angles"); if (ba == NULL) { box=7; goto bend; } ba = ba -> children; bb=findnode(ba, "alpha"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> param[1][0] = val; bb=findnode(ba, "beta"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> param[1][1]= val; bb=findnode(ba, "gamma"); if (bb == NULL) { box=7; goto bend; } if (active_box -> param[0][0] != 0.0 && active_box -> param[0][1] != 0.0 && active_box -> param[0][2] != 0.0 && active_box -> param[1][0] != 0.0 && active_box -> param[1][1] != 0.0 && active_box -> param[1][2] != 0.0) { active_cell -> ltype = 1; } else { active_cell -> ltype = 0; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> param[1][2]= val; ba=findnode(bnode, "vectors"); if (ba == NULL) { box=7; goto bend; } ba = ba -> children; bb=findnode(ba, "a.x"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> vect[0][0]= val; bb=findnode(ba, "a.y"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> vect[0][1]= val; bb=findnode(ba, "a.z"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> vect[0][2]= val; bb=findnode(ba, "b.x"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> vect[1][0]= val; bb=findnode(ba, "b.y"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> vect[1][1]= val; bb=findnode(ba, "b.z"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> vect[1][2]= val; bb=findnode(ba, "c.x"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> vect[2][0]= val; bb=findnode(ba, "c.y"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> vect[2][1]= val; bb=findnode(ba, "c.z"); if (bb == NULL) { box=7; goto bend; } data = xmlNodeGetContent(bb); val = atof((char *)data); active_box -> vect[2][2]= val; if (active_box -> vect[0][0] != 0.0 && active_box -> vect[0][1] != 0.0 && active_box -> vect[0][2] != 0.0 && active_box -> vect[1][0] != 0.0 && active_box -> vect[1][1] != 0.0 && active_box -> vect[1][2] != 0.0 && active_box -> vect[2][0] != 0.0 && active_box -> vect[2][1] != 0.0 && active_box -> vect[2][2] != 0.0) { active_cell -> ltype = 2; } box = 0; bend: return box; } /*! \fn int setpbc (xmlNodePtr pbcnode) \brief read the PBC information from node \param pbcnode the XML node */ int setpbc (xmlNodePtr pbcnode) { int pbc;//, j; xmlNodePtr pnode, bnode; xmlChar * data; //double val; pnode = pbcnode -> children; bnode=findnode(pnode, "apply"); if (bnode == NULL) { pbc=8; goto pend; } data = xmlNodeGetContent(bnode); active_cell -> pbc = 0; if (g_strcmp0 ((char *)data, (char *)"TRUE") == 0) { active_cell -> pbc = 1; } bnode=findnode(pnode, "fractional"); if (bnode == NULL) { pbc=8; goto pend; } data = xmlNodeGetContent(bnode); active_cell -> frac = 0; if (g_strcmp0 ((char *)data, (char *)"TRUE") == 0) { bnode=findnode(pnode, "fractype"); if (bnode == NULL) { pbc=8; goto pend; } data = xmlNodeGetContent(bnode); //val=atof((char *)data); //j = val; active_cell -> frac = 1; } pbc=0; pend: return pbc; } /*! \fn int setcutoffs (xmlNodePtr cutnode) \brief read bond cutoffs from node \param cutnode the XML node */ int setcutoffs (xmlNodePtr cutnode) { int cut; int i, j; xmlNodePtr cnode, cn; xmlChar * data; double val; char * ncut; size_t lgt; cnode = cutnode -> children; cn = findnode(cnode, "total"); if (cn == NULL) { cut=9; goto cend; } data = xmlNodeGetContent(cn); val=atof((char *)data); active_chem -> grtotcutoff = val; cn = findnode(cnode, "partials"); if (cn == NULL) { cut=9; goto cend; } cnode = cn -> children; for ( i=0 ; i nspec ; i++ ) { for ( j=0 ; j nspec ; j++ ) { lgt=10; lgt+=strfind(active_chem -> label[i]) + strlen("-") + strfind(active_chem -> label[j]); ncut = g_malloc0 (lgt*sizeof*ncut); strncpy (ncut, active_chem -> label[i], strfind(active_chem -> label[i])); strcat (ncut, "-"); strncat (ncut, active_chem -> label[j], strfind(active_chem -> label[j])); cn = findnode(cnode, ncut); if (cn == NULL) { cut=9; goto cend; } data = xmlNodeGetContent(cn); val=atof((char *)data); active_chem -> cutoffs[i][j] = val; g_free (ncut); ncut=NULL; } } cut=0; cend: return cut; } /*! \fn int settime(xmlNodePtr timenode) \brief read MD information from node \param timenode the XML node */ int settime(xmlNodePtr timenode) { int i, j; //double val, delta_t; //int tunit, ndtbs; int tps; xmlChar * data; xmlNodePtr tnode, tn; tnode = timenode -> children; tn = findnode(tnode, "dt"); if (tn == NULL) { tps=10; goto tend; } data = xmlNodeGetContent(tn); //val = atof((char *)data); //delta_t = val; tn = findnode(tnode, "unit"); if (tn == NULL) { tps=10; goto tend; } data = xmlNodeGetContent(tn); j=-1; for ( i=0 ; i<6 ; i++) { if (g_strcmp0 ((char *)data, g_strdup_printf ("t [%s]", untime[i])) == 0) j=i; } if (j == -1) { tps=10; goto tend; } if (j < 5) { //tunit = j+1; } tn = findnode(tnode, "ndt"); if (tn != NULL) { data = xmlNodeGetContent(tn); //val = atof((char *)data); //ndtbs = val; } tps=0; tend: return tps; } /*! \fn int check_xml (const char * filetocheck) \brief check the opening of ISAACS XML file \param filetocheck File name */ int check_xml (const char * filetocheck) { int res; xmlDoc * doc; xmlTextReaderPtr reader; const xmlChar xisaacs[11]="isaacs-xml"; xmlChar * cdata, * cfichier; xmlNodePtr racine, node; /* * build an xmlReader for that file */ reader = xmlReaderForFile(filetocheck, NULL, 0); if (reader != NULL) { res = 0; doc = xmlParseFile(filetocheck); if (doc == NULL) { res=1; goto end; } else { racine = xmlDocGetRootElement(doc); if (g_strcmp0 ((char *)(racine->name), (char *)xisaacs) != 0) { res=2; goto end; } else { node = racine -> children; node = findnode(node, "data"); if (node == NULL) { res=3; goto end; } node = node -> children; node = findnode(node, "type"); if (node == NULL) { res=3; goto end; } cdata = xmlNodeGetContent(node); node = findnode(node, "file"); if (node == NULL) { res=3; goto end; } cfichier = xmlNodeGetContent(node); res= testopening((char *)cdata, (char *)cfichier); if (res != 0) { goto end; } else { node = racine -> children; node = findnode(node, "chemistry"); if (node == NULL) { res=3; goto end; } res= setchemistry(node); if (res != 0) { goto end; } node = racine -> children; node = findnode(node, "pbc"); if (node == NULL) { res=3; goto end; } res=setpbc (node); if (res != 0) { goto end; } node = racine -> children; node = findnode(node, "box"); if (node == NULL) { res=3; goto end; } active_cell -> box = g_malloc0(sizeof*active_cell -> box); active_box = & active_cell -> box[0]; res=setbox (node); if (res != 0) { goto end; } node = racine -> children; node = findnode(node, "cutoffs"); if (node == NULL) { res=3; goto end; } active_chem -> cutoffs = allocddouble (active_project -> nspec, active_project -> nspec); res=setcutoffs (node); if (res != 0) { goto end; } if (active_project -> steps > 1) { node = racine -> children; node = findnode(node, "time-series"); if (node == NULL) { res=3; goto end; } res=settime (node); if (res != 0) { goto end; } } node = racine -> children; node = findnode(node, "project"); if (node == NULL) { res=3; goto end; } cdata=xmlNodeGetContent(node); if (g_strcmp0 ((char *)cdata, (char *)"TRUE") == 0) { active_project -> run = 1; } else { active_project -> run = 0; } } } } } else { res=1; } end: /* * Cleanup function for the XML library. */ if (reader != NULL) xmlFreeTextReader(reader); /* *Free the global variables that may *have been allocated by the parser. */ xmlCleanupParser(); return res; } /*! \fn gchar * open_xml (const char * filetoread) \brief Open ISAACS XML file \param filetoread File name */ gchar * open_xml (const char * filetoread) { int oxml; oxml = check_xml(filetoread); switch(oxml) { case 1: return ("Impossible to open the Isaacs project file (XML) file\n"); break; case 2: return ("The file is not a valid Isaacs project file (XML) file\n"); break; case 3: return ("The Isaacs project file (XML) file is incomplete\n"); break; case 4: return ("Problem(s) in the <data> section of the Isaacs project file (XML)\n"); break; case 5: return ("Problem(s) in the <chemistry> section of the Isaacs project file (XML)\n"); break; case 6: return ("Problem(s) in the <element> section of the Isaacs project file (XML)\n"); break; case 7: return ("Problem(s) in the <box> section of the Isaacs project file (XML)\n"); break; case 8: return ("Problem(s) in the <pbc> section of the Isaacs project file (XML)\n"); break; case 9: return ("Problem(s) in the <cutoffs> section of the Isaacs project file (XML)\n"); break; case 10: return ("Problem(s) in the <time-series> section of the Isaacs project file (XML)\n"); break; default: return NULL; break; } } Atomes-GNU-1.1.14/src/project/readers/read_isaacs.h000066400000000000000000000032711457665371200217710ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_isaacs.h * @short Function declarations to read / write ISAACS XML file * @author Sébastien Le Roux */ /* * This header file: 'read_isaacs.h' * * Contains: - Function declarations to read / write ISAACS XML file */ #ifndef ISAACSRW_H_ #define ISAACSRW_H_ #include #include #include #include size_t strfind (int * ida); int XmlwriterFilename (const char *uri); int write_xml (const char * filetosave); gboolean file_exists (const char * filename); xmlNodePtr findnode (xmlNodePtr startnode, char * nname); int setprop (xmlNodePtr pnode); int testopening (char * tdata, char * tfichier); int setchemistry (xmlNodePtr xsnode); int setbox (xmlNodePtr boxnode); int setpbc (xmlNodePtr pbcnode); int setcutoffs (xmlNodePtr cutnode); int settime(xmlNodePtr timenode); int check_xml (const char * filetocheck); gchar * open_xml (const char * filetoread); #endif Atomes-GNU-1.1.14/src/project/readers/read_npt.c000066400000000000000000000171531457665371200213260ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_npt.c * @short Functions to read NPT data * @author Sébastien Le Roux */ /* * This file: 'read_npt.c' * * Contains: * - The functions to read NPT data * * List of functions: int cell_get_lattice (int format); int open_cell_file (int format, gchar * filename); void add_cell_info (gchar * info); */ #include "global.h" #include "bind.h" #include "interface.h" #include "project.h" #include #include "cbuild_edit.h" #ifdef G_OS_WIN32 typedef intptr_t ssize_t; extern ssize_t getline(char **lineptr, size_t *n, FILE *stream); #endif FILE * cellp; typedef struct cell_file cell_file; struct cell_file { cell_info lattice; gchar * info; }; cell_file * this_cell; /*! \fn void add_cell_info (gchar * info) \brief append information message to the cell information \param info the cell information message */ void add_cell_info (gchar * info) { this_cell -> info = (this_cell -> info) ? g_strdup_printf ("%s\n%s", this_cell -> info, info) : g_strdup_printf ("%s", info); } /*! \fn int cell_get_lattice (int format) \brief get the lattice parameters format from the file \param format File format */ int cell_get_lattice (int format) { size_t length = 0; gchar * line = NULL; gchar * this_line; char * this_word; int i, j, k; char c; i = 0; for (c = getc(cellp); c != EOF; c = getc(cellp)) if (c == '\n') i ++; j = (format == 0 || format == 2) ? 1 : (format == 1) ? 2 : 3; k = i / j; i = i - k * j; if (i) return 0; if (k != active_project -> steps) { add_cell_info (g_strdup_printf ("Wrong file format - %d steps in coordinates file", active_project -> steps)); add_cell_info (g_strdup_printf ("Wrong file format - %d steps found in cell file", k)); return 0; } rewind (cellp); this_cell -> lattice.box = g_malloc0(k*sizeof*this_cell -> lattice.box); for (i=0; i steps; i++) { if (format < 2) { for (j=0; j<2; j++) { if (! j || format == 1) { getline (& line, & length, cellp); this_line = g_strdup_printf ("%s", line); this_word = strtok (this_line, " "); } else { this_word = strtok (NULL, " "); } k = 0; if (! this_word) { add_cell_info (g_strdup_printf ("Wrong file format - error at step %d !", i+1)); return 0; } this_cell -> lattice.box[i].param[j][k] = atof(this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf ("Wrong file format - error at step %d !", i+1)); return 0; } this_cell -> lattice.box[i].param[j][k] = atof(this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf ("Wrong file format - error at step %d !", i+1)); return 0; } this_cell -> lattice.box[i].param[j][k] = atof(this_word); } } else { for (j=0; j<3; j++) { if (! j || format == 3) { getline (& line, & length, cellp); this_line = g_strdup_printf ("%s", line); this_word = strtok (this_line, " "); } else { this_word = strtok (NULL, " "); } k = 0; if (! this_word) { add_cell_info (g_strdup_printf ("Wrong file format - error at step %d !", i+1)); return 0; } this_cell -> lattice.box[i].vect[j][k] = atof(this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf ("Wrong file format - error at step %d !", i+1)); return 0; } this_cell -> lattice.box[i].vect[j][k] = atof(this_word); k ++; this_word = strtok (NULL, " "); if (! this_word) { add_cell_info (g_strdup_printf ("Wrong file format - error at step %d !", i+1)); return 0; } this_cell -> lattice.box[i].vect[j][k] = atof(this_word); } } } this_cell -> lattice.npt = FALSE; for (i=1; i steps; i++) { if (format < 2) { for (j=0; j<2; j++) { for (k=0; k<3; k++) { if (this_cell -> lattice.box[i].param[j][k] != this_cell -> lattice.box[0].param[j][k]) { this_cell -> lattice.npt = TRUE; break; } } if (this_cell -> lattice.npt) break; } if (this_cell -> lattice.npt) break; } else { for (j=0; j<3; j++) { for (k=0; k<3; k++) { if (this_cell -> lattice.box[i].vect[j][k] != this_cell -> lattice.box[0].vect[j][k]) { this_cell -> lattice.npt = TRUE; break; } } if (this_cell -> lattice.npt) break; } if (this_cell -> lattice.npt) break; } } return 1; } /*! \fn int open_cell_file (int format, gchar * filename) \brief open the file that contains the cell parameters \param format File format \param filename File name */ int open_cell_file (int format, gchar * filename) { int res; int i, j, k, l; cellp = fopen (filename, "r"); if (cellp) { this_cell = g_malloc0(sizeof*this_cell); if (cell_get_lattice(format)) { active_cell -> ltype = format/2 + 1; active_cell -> pbc = TRUE; active_cell -> npt = this_cell -> lattice.npt; i = (active_cell -> npt) ? active_project -> steps : 1; if (active_cell -> npt) { g_free (active_cell -> box); active_cell -> box = g_malloc0(i*sizeof*active_cell -> box); active_box = & active_cell -> box[0]; } for (j=0; j box[j].param[k][l] = this_cell -> lattice.box[j].param[k][l]; } } } else { for (k=0; k<3; k++) { for (l=0; l<3; l++) { active_cell -> box[j].vect[k][l] = this_cell -> lattice.box[j].vect[k][l]; } } } } active_cell -> has_a_box = TRUE; active_cell -> crystal = FALSE; res = 0; } else { // No or wrong cell data found #ifdef DEBUG g_debug ("CELL-NPT:: Impossible to retrieve cell parameters !"); #endif res = 2; } } else { // Cannot open file res = 1; } if (this_cell) { if (this_cell -> info) { show_error (this_cell -> info, 0, MainWindow); } if (this_cell) { if (this_cell -> info) g_free (this_cell -> info); if (this_cell -> lattice.box) g_free (this_cell -> lattice.box); g_free (this_cell); this_cell = NULL; } } return res; } Atomes-GNU-1.1.14/src/project/readers/read_pdb.c000066400000000000000000000136361457665371200212740ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_pdb.c * @short Functions to read PDB files * @author Sébastien Le Roux */ /* * This file: 'read_pdb.c' * * Contains: * - The functions to read PDB files * * List of functions: int pdb_get_atoms_data (int linec); int open_pdb_file (int linec); double get_z_from_pdb_name (char * name); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include "readers.h" #include #include /*! \fn double get_z_from_pdb_name (char * name) \brief get Z from the PDB atom string \param name the string from the PDB file */ double get_z_from_pdb_name (char * name) { if (strlen(name) == 2) name[1] = tolower ((unsigned char)name[1]); return get_z_from_periodic_table (name); } /*! \fn int pdb_get_atoms_data (int linec) \brief get the atomic data from the PDB file \param linec Total number of lines */ int pdb_get_atoms_data (int linec) { typedef struct pdb_atom pdb_atom; struct pdb_atom { int id; int sp; double nz; double x, y, z; pdb_atom * prev; pdb_atom * next; }; #ifdef OPENMP int h, i, j, k, l; int res; int numth = omp_get_max_threads (); pdb_atom ** first_at = g_malloc0(numth*sizeof*first_at); pdb_atom * other_at = NULL; gchar * saved_line; gboolean add_spec; h = 0; res = 1; #pragma omp parallel for num_threads(numth) private(i,j,k,l,this_line,saved_line,this_word,other_at,add_spec) shared(h,this_reader,res,coord_line,first_at) for (i=0; i next = g_malloc0(sizeof*other_at -> next); other_at -> prev = g_malloc0(sizeof*other_at -> prev); other_at -> next -> prev = other_at; other_at = other_at -> next; } for (k=0; k<13; k++) { this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { add_reader_info (g_strdup_printf ("Wrong file format - record %d on line %d is corrupted !", k+2, i+1), 0); res = 0; goto ends; } if (k == 8) other_at -> x = atof(this_word); if (k == 9) other_at -> y = atof(this_word); if (k == 10) other_at -> z = atof(this_word); if (k == 12) { other_at -> nz = get_z_from_pdb_name (this_word); add_spec = TRUE; #pragma omp critical if (other_at -> nz) { if (this_reader -> z) { for (l=0; l nspec; l++) { if (active_chem -> chem_prop[CHEM_Z][l] == other_at -> nz) { other_at -> sp = l; if (! i) this_reader -> nsps[l] ++; add_spec = FALSE; break; } } } else { this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); } if (add_spec) { if (this_reader -> nspec) { this_reader -> z = g_realloc (this_reader -> z, (this_reader -> nspec+1)*sizeof*this_reader -> z); this_reader -> nsps = g_realloc (this_reader -> nsps, (this_reader -> nspec+1)*sizeof*this_reader -> nsps); } other_at -> sp = this_reader -> nspec; this_reader -> nsps[this_reader -> nspec] ++; this_reader -> nspec ++; } } } } } } ends:; } if (! res) { g_free (first_at); g_free (other_at); return 0; } active_project -> natomes = h; active_project -> steps = 1; active_project -> nspec = this_reader -> nspec; if (active_project -> natomes) return 0; alloc_proj_data (active_project, 1); active_project_changed (activep); j = 0; for (i=0; i atoms[0][j].id = j; active_project -> atoms[0][j].sp = other_at -> sp; active_project -> atoms[0][j].x = other_at -> x; active_project -> atoms[0][j].y = other_at -> y; active_project -> atoms[0][j].z = other_at -> z; j ++; other_at = other_at -> next; g_free (other_at -> prev); } // Get back results } #else #endif return active_project -> natomes; } /*! \fn int open_pdb_file (int linec) \brief open PDB file \param linec Number of lines in the file */ int open_pdb_file (int linec) { if (! pdb_get_atoms_data (linec)) return 2; return 0; } Atomes-GNU-1.1.14/src/project/readers/read_trj.c000066400000000000000000000155271457665371200213270ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_trj.c * @short Functions to read CPMD atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_trj.c' * * Contains: * - The functions to read CPMD atomic coordinates * * List of functions: int trj_get_atom_coordinates (); int open_trj_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include #include "readers.h" /*! \fn int trj_get_atom_coordinates () \brief get the atomic coordinates from the CPMD file */ int trj_get_atom_coordinates () { int i, j, k, l; gchar * lia[4] = {"a", "b", "c", "d"}; allocatoms (active_project); #ifdef OPENMP int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (active_project -> steps < numth) { if (numth >= 2*(active_project -> steps-1)) { doatoms = TRUE; } else { numth = active_project -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = i*active_project -> natomes; #pragma omp parallel for num_threads(numth) private(j,this_line,saved_line,this_word) shared(i,k,lia,coord_line,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = atof(this_word); g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,this_line,saved_line,this_word) shared(lia,coord_line,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = i*active_project -> natomes; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = atof(this_word) * 0.52917721; this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = atof(this_word) * 0.52917721; this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = atof(this_word) * 0.52917721; g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; for (i=1; i steps; i++) { for (j=0; j natomes; j++) { if (active_project -> atoms[i-1][j].sp != active_project -> atoms[i][j].sp) { add_reader_info (g_strdup_printf ("Error - chemical species changes between steps %d and %d, for atom %d !", i, i+1, j+1), 0); return 2; } } } #else line_node * tmp_line; tail = head; k = 0; for (i=0; i steps; i++) { for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k); return 2; } this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k); return 2; } active_project -> atoms[i][j].x = atof(this_word) * 0.52917721; this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k); return 2; } active_project -> atoms[i][j].y = atof(this_word) * 0.52917721; this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[3], k); return 2; } active_project -> atoms[i][j].z = atof(this_word) * 0.52917721; tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif i = 0; for (j=0; j nspec; j++) { for (k=0; k nsps[j]; k++) { for (l=0; l steps; l++) { active_project -> atoms[l][i].sp = j; } i ++; } } return 0; } /*! \fn int open_trj_file (int linec) \brief open CPMD file \param linec Number of lines in the file */ int open_trj_file (int linec) { if (linec%(this_reader -> natomes) != 0) return 2; reader_info ("trj", "Number of atoms", this_reader -> natomes); active_project -> steps = linec / this_reader -> natomes; reader_info ("trj", "Number of steps", active_project -> steps); active_project -> natomes = this_reader -> natomes; return trj_get_atom_coordinates (); } Atomes-GNU-1.1.14/src/project/readers/read_vas.c000066400000000000000000000152431457665371200213140ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_vas.c * @short Functions to read VASP atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_vas.c' * * Contains: * - The functions to read VASP atomic coordinates * * List of functions: int vas_get_atom_coordinates (int sli); int open_vas_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include #include "readers.h" /*! \fn int vas_get_atom_coordinates (int sli) \brief get the atomic coordinates from the VASP file \param sli Correction parameters depending on the VASP file version */ int vas_get_atom_coordinates (int sli) { int i, j, k, l; gchar * lia[4] = {"a", "b", "c", "d"}; allocatoms (active_project); #ifdef OPENMP int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (active_project -> steps < numth) { if (numth >= 2*(active_project -> steps-1)) { doatoms = TRUE; } else { numth = active_project -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = 1 + i*(active_project -> natomes + 1) + sli; #pragma omp parallel for num_threads(numth) private(j,this_line,saved_line,this_word) shared(i,k,lia,coord_line,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = atof(this_word); g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,this_line,saved_line,this_word) shared(lia,coord_line,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = 1 + i*(active_project -> natomes + 1) + sli; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = atof(this_word); g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; for (i=1; i steps; i++) { for (j=0; j natomes; j++) { if (active_project -> atoms[i-1][j].sp != active_project -> atoms[i][j].sp) { add_reader_info (g_strdup_printf ("Error - chemical species changes between steps %d and %d, for atom %d !", i, i+1, j+1), 0); return 2; } } } #else line_node * tmp_line; tail = head; k = 0; for (i=0; i next; g_free (tmp_line); k ++; } for (i=0; i steps; i++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k); return 2; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k); return 2; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k); return 2; } active_project -> atoms[i][j].z = atof(this_word); tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif i = 0; for (j=0; j nspec; j++) { for (k=0; k nsps[j]; k++) { for (l=0; l steps; l++) { active_project -> atoms[l][i].sp = j; } i ++; } } return 0; } /*! \fn int open_vas_file (int linec) \brief open VASP file \param linec Number of lines in the file */ int open_vas_file (int linec) { int i, j; j = 0; for (i=5; i<8; i++) { if ((linec - i)%(this_reader -> natomes + 1) == 0) j = i; } if (! j) return 2; reader_info ("xdatcar", "Number of atoms", this_reader -> natomes); active_project -> steps = (linec-j) / (this_reader -> natomes + 1); reader_info ("xdatcar", "Number of steps", active_project -> steps); active_project -> natomes = this_reader -> natomes; return vas_get_atom_coordinates (j); } Atomes-GNU-1.1.14/src/project/readers/read_xyz.c000066400000000000000000000221641457665371200213550ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file read_xyz.c * @short Functions to read XYZ atomic coordinates * @author Sébastien Le Roux */ /* * This file: 'read_xyz.c' * * Contains: * - The functions to read XYZ atomic coordinates * * List of functions: int xyz_get_atom_coordinates (); int open_xyz_file (int linec); */ #include "global.h" #include "glview.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "bind.h" #include #include "readers.h" /*! \fn int xyz_get_atom_coordinates () \brief get the atomic coordinates from the XYZ file */ int xyz_get_atom_coordinates () { int i, j, k; double v; gchar * lia[4] = {"a", "b", "c", "d"}; this_reader -> nspec = 0; active_project -> steps = this_reader -> steps; active_project -> natomes = this_reader -> natomes; allocatoms (active_project); this_reader -> z = allocdouble (1); this_reader -> nsps = allocint (1); #ifdef OPENMP int v_dummy; int res; int numth = omp_get_max_threads (); gboolean doatoms = FALSE; gchar * saved_line; if (this_reader -> steps < numth) { if (numth >= 2*(this_reader -> steps-1)) { doatoms = TRUE; } else { numth = this_reader -> steps; } } if (doatoms) { // OpenMP on atoms res = 0; for (i=0; i steps; i++) { k = i*(this_reader -> natomes + 2) + 2; #pragma omp parallel for num_threads(numth) private(j,v,v_dummy,this_line,saved_line,this_word) shared(i,k,lia,coord_line,this_reader,active_project,res) for (j=0; j natomes; j++) { if (res == 2) goto enda; this_line = g_strdup_printf ("%s", coord_line[k+j]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; #pragma omp critical check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto enda; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto enda; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); res = 2; goto enda; } active_project -> atoms[i][j].z = atof(this_word); } else { format_error (i+1, j+1, lia[0], k+j); res = 2; goto enda; } g_free (this_line); enda:; } if (res == 2) break; } } else { res = 0; #pragma omp parallel for num_threads(numth) private(i,j,k,v,v_dummy,this_line,saved_line,this_word) shared(lia,coord_line,this_reader,active_project,res) for (i=0; i steps; i++) { if (res == 2) goto ends; k = i*(this_reader -> natomes + 2) + 2; for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", coord_line[k+j]); saved_line = g_strdup_printf ("%s", this_line); this_word = strtok_r (this_line, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); res = 2; goto ends; } v = get_z_from_periodic_table (this_word); v_dummy = 0; if (! v) { #pragma omp critical v_dummy = set_v_dummy (this_word); } if (v || v_dummy) { if (! i) { v = v + v_dummy * 0.1; check_for_species (v, j); } this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); res = 2; goto ends; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok_r (NULL, " ", & saved_line); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); res = 2; goto ends; } active_project -> atoms[i][j].z = atof(this_word); } else { format_error (i+1, j+1, lia[3], k+j); res = 2; goto ends; } g_free (this_line); } ends:; } } g_free (coord_line); if (res == 2) return 2; #else line_node * tmp_line; tail = head; k = 0; for (i=0; i steps; i++) { for (j=0; j<2; j++) { tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } for (j=0; j natomes; j++) { this_line = g_strdup_printf ("%s", tail -> line); this_word = strtok (this_line, " "); if (! this_word) { format_error (i+1, j+1, lia[0], k+j); return 2; } v = get_z_from_periodic_table (this_word); if (v) { if (! i) check_for_species (v, j); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[1], k+j); return 2; } active_project -> atoms[i][j].x = atof(this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[2], k+j); return 2; } active_project -> atoms[i][j].y = atof(this_word); this_word = strtok (NULL, " "); if (! this_word) { format_error (i+1, j+1, lia[3], k+j); return 2; } active_project -> atoms[i][j].z = atof(this_word); } else { format_error (i+1, j+1, lia[0], k+j); return 2; } tmp_line = tail; tail = tail -> next; g_free (tmp_line); k ++; } } #endif for (i=1; i steps; i++) { for (j=0; j natomes; j++) { active_project -> atoms[i][j].sp = active_project -> atoms[0][j].sp; } } return 0; } /*! \fn int open_xyz_file (int linec) \brief open XYZ file \param linec Number of lines in the file */ int open_xyz_file (int linec) { int res; #ifdef OPENMP this_line = g_strdup_printf ("%s", coord_line[0]); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info ("Wrong file format - cannot find the number of atoms !", 0); add_reader_info ("Wrong file format - first line is corrupted !", 0); res = 2; goto end; } this_reader -> natomes = (int)atof(this_word); reader_info ("xyz", "Number of atoms", this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 2) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 2); reader_info ("xyz", "Number of steps", this_reader -> steps); res = xyz_get_atom_coordinates (); } #else this_line = g_strdup_printf ("%s", head -> line); this_word = strtok (this_line, " "); if (! this_word) { add_reader_info ("Wrong file format - cannot find the number of atoms !", 0); add_reader_info ("Wrong file format - the first line is corrupted !", 0); res = 2; goto end; } this_reader -> natomes = (int)atof(this_word); reader_info ("xyz", "Number of atoms", this_reader -> natomes); g_free (this_line); if (linec%(this_reader -> natomes + 2) != 0) { res = 2; } else { this_reader -> steps = linec / (this_reader -> natomes + 2); reader_info ("xyz", "Number of steps", this_reader -> steps); res = xyz_get_atom_coordinates (); } #endif end: return res; } Atomes-GNU-1.1.14/src/project/readers/readers.h000066400000000000000000000032111457665371200211520ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file readers.h * @short Functions declaration to read atomic coordinates * @author Sébastien Le Roux */ /* * This header file: 'readers.h' * * Contains: - Functions declaration to read atomic coordinates */ #ifndef READERS_H_ #define READERS_H_ #include "read_isaacs.h" extern int set_v_dummy (gchar * this_word); extern double get_z_from_periodic_table (gchar * lab); extern void allocatoms (project * this_proj); extern chemical_data * alloc_chem_data (int spec); extern FILE * coordf; extern coord_file * this_reader; extern gchar * this_line; extern char * this_word; extern gchar ** coord_line; extern line_node * head; extern line_node * tail; extern void add_reader_info (gchar * info, int mid); extern void reader_info (gchar * type, gchar * sinf, int val); extern void format_error (int stp, int ato, gchar * mot, int line); extern void check_for_species (double v, int ato); #endif Atomes-GNU-1.1.14/src/project/save_bond.c000066400000000000000000000076071457665371200200500ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file save_bond.c * @short Functions to save bonding information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_bond.c' * * Contains: * - The functions to save bonding information in the atomes project file format * * List of functions: int save_bonding (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" #include "glview.h" #include "initcoord.h" /*! \fn int save_bonding (FILE * fp, project * this_proj) \brief save bonding information to file \param fp the file pointer \param this_proj the target project */ int save_bonding (FILE * fp, project * this_proj) { int i, j, k; image * img = this_proj -> modelgl -> anim -> last -> img; if (! this_proj -> modelgl -> bonding || ! this_proj -> modelgl -> adv_bonding[1] || this_proj -> natomes > ATOM_LIMIT || this_proj -> steps > STEP_LIMIT) { for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (fwrite (this_proj -> atoms[i][j].coord, sizeof(int), 5, fp) != 5) return ERROR_COORD; if (fwrite (& this_proj -> atoms[i][j].numv, sizeof(int), 1, fp) != 1) return ERROR_COORD; if (this_proj -> atoms[i][j].numv) { if (fwrite (this_proj -> atoms[i][j].vois, sizeof(int), this_proj -> atoms[i][j].numv, fp) != this_proj -> atoms[i][j].numv) return ERROR_COORD; } } if (fwrite (this_proj -> modelgl -> bonds[i], sizeof(int), 2, fp) != 2) return ERROR_COORD; for (j=0; j<2; j++) { for (k=0; k modelgl -> bonds[i][j]; k++) { if (fwrite (this_proj -> modelgl -> bondid[i][j][k], sizeof(int), 2, fp) != 2) return ERROR_COORD; } } } coord_info * coord = this_proj -> coord; for (i=0; i<2; i++) { if (fwrite (coord -> ntg[i], sizeof(int), coord -> species, fp) != coord -> species) return ERROR_COORD; for (j=0; j species; j++) { if (fwrite (coord -> geolist[i][j], sizeof(int), coord -> ntg[i][j], fp) != coord -> ntg[i][j]) return ERROR_COORD; if (i == 1) { for (k=0; k ntg[i][j]; k++) { if (fwrite (coord -> partial_geo[j][k], sizeof(int), coord -> species, fp) != coord -> species) return ERROR_COORD; } } } } } for (i=0; i<10; i++) { if (fwrite (& this_proj -> coord -> totcoord[i], sizeof(int), 1, fp) != 1) return ERROR_COORD; if (i < 2) { if (fwrite (img -> show_atom[i], sizeof(gboolean), this_proj -> nspec, fp) != this_proj -> nspec) return ERROR_COORD; if (fwrite (img -> show_label[i], sizeof(gboolean), this_proj -> nspec, fp) != this_proj -> nspec) return ERROR_COORD; } if (this_proj -> coord -> totcoord[i]) { if (fwrite (img -> show_coord[i], sizeof(gboolean), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return ERROR_COORD; if (i < 2 || (i > 3 && i < 9)) { if (fwrite (img -> show_poly[i], sizeof(gboolean), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return ERROR_COORD; } } } return OK; } Atomes-GNU-1.1.14/src/project/save_curve.c000066400000000000000000000242431457665371200202450ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file save_curve.c * @short Functions to save curves information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_curve.c' * * Contains: * - The functions to save curves information in the atomes project file format * * List of functions: int save_project_curve (FILE * fp, int wid, project * this_proj, int rid, int cid); gboolean write_data_layout (FILE * fp, DataLayout * layout); */ #include "global.h" #include "project.h" /*! \fn gboolean write_data_layout (FILE * fp, DataLayout * layout) \brief save curve data layout to file \param fp the file pointer \param layout the data layout to save */ gboolean write_data_layout (FILE * fp, DataLayout * layout) { if (fwrite (& layout -> datacolor, sizeof(ColRGBA), 1, fp) != 1) return FALSE; if (fwrite (& layout -> thickness, sizeof(double), 1, fp) != 1) return FALSE; if (fwrite (& layout -> dash, sizeof(int), 1, fp) != 1) return FALSE; if (fwrite (& layout -> glyph, sizeof(int), 1, fp) != 1) return FALSE; if (fwrite (& layout -> gsize, sizeof(double), 1, fp) != 1) return FALSE; if (fwrite (& layout -> gfreq, sizeof(int), 1, fp) != 1) return FALSE; if (fwrite (& layout -> hwidth, sizeof(double), 1, fp) != 1) return FALSE; if (fwrite (& layout -> hopac, sizeof(double), 1, fp) != 1) return FALSE; if (fwrite (& layout -> hpos, sizeof(int), 1, fp) != 1) return FALSE; if (fwrite (& layout -> aspect, sizeof(int), 1, fp) != 1) return FALSE; return TRUE; } /*! \fn int save_project_curve (FILE * fp, int wid, project * this_proj, int rid, int cid) \brief save project curve to file \param fp the file pointer \param wid the total number of project file in the workspace \param this_proj the target project \param rid the calculation to save \param cid the curve id to save */ int save_project_curve (FILE * fp, int wid, project * this_proj, int rid, int cid) { int i, j; if (wid > 0) { if (fwrite (& this_proj -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; } if (fwrite (& rid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& cid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> displayed, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> ndata, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> data[0], sizeof(double), this_proj -> curves[rid][cid] -> ndata, fp) != this_proj -> curves[rid][cid] -> ndata) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> data[1], sizeof(double), this_proj -> curves[rid][cid] -> ndata, fp) != this_proj -> curves[rid][cid] -> ndata) return ERROR_RW; i = 0; if (this_proj -> curves[rid][cid] -> err != NULL) i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> curves[rid][cid] -> err != NULL) { if (fwrite (this_proj -> curves[rid][cid] -> err, sizeof(double), this_proj -> curves[rid][cid] -> ndata, fp) != this_proj -> curves[rid][cid] -> ndata) return ERROR_RW; } if (this_proj -> curves[rid][cid] -> displayed) { if (fwrite (this_proj -> curves[rid][cid] -> wsize, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> cmin, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> cmax, sizeof(double), 2, fp) != 2) return ERROR_RW; // Title if (fwrite (& this_proj -> curves[rid][cid] -> show_title, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> default_title, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (! this_proj -> curves[rid][cid] -> default_title) { if (save_this_string (fp, this_proj -> curves[rid][cid] -> title) != OK) return ERROR_RW; } if (fwrite (this_proj -> curves[rid][cid] -> title_pos, sizeof(double), 2, fp) != 2) return ERROR_RW; if (save_this_string (fp, this_proj -> curves[rid][cid] -> title_font) != OK) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> title_color, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; // Axis if (fwrite (this_proj -> curves[rid][cid] -> axmin, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> axmax, sizeof(double), 2, fp) != 2) return ERROR_RW; for (j=0; j<2; j++) { if (save_this_string (fp, this_proj -> curves[rid][cid] -> axis_title[j]) != OK) return ERROR_RW; if (save_this_string (fp, this_proj -> curves[rid][cid] -> axis_title_font[j]) != OK) return ERROR_RW; } if (fwrite (this_proj -> curves[rid][cid] -> axis_title_x, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> axis_title_y, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> scale, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> axis_defaut_title, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> autoscale, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> majt, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> mint, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> ticks_io, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> ticks_pos, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> majt_size, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> mint_size, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> labels_pos, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> labels_digit, sizeof(int), 2, fp) != 2) return ERROR_RW; for (j=0; j<2; j++) { if (save_this_string (fp, this_proj -> curves[rid][cid] -> labels_font[j]) != OK) return ERROR_RW; } if (fwrite (this_proj -> curves[rid][cid] -> labels_angle, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> labels_shift_x, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> labels_shift_y, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> show_grid, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> show_axis, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; // Legend if (fwrite (& this_proj -> curves[rid][cid] -> show_legend, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (save_this_string (fp, this_proj -> curves[rid][cid] -> legend_font) != OK) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> legend_pos, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> legend_color, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> show_legend_box, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> legend_box_dash, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> legend_box_thickness, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> legend_box_color, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; // Frame if (fwrite (& this_proj -> curves[rid][cid] -> show_frame, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> frame_type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> frame_dash, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> frame_thickness, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> frame_color, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; if (fwrite (this_proj -> curves[rid][cid] -> frame_pos, sizeof(this_proj -> curves[rid][cid] -> frame_pos), 1, fp) != 1) return ERROR_RW; // Data if (fwrite (& this_proj -> curves[rid][cid] -> backcolor, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; if (! write_data_layout (fp, this_proj -> curves[rid][cid] -> layout)) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> draw_id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> bshift, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> curves[rid][cid] -> extrac -> extras, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> curves[rid][cid] -> extrac -> extras > 0) { CurveExtra * ctmp = this_proj -> curves[rid][cid] -> extrac -> first; for (i=0; i curves[rid][cid] -> extrac -> extras; i++) { if (fwrite (& ctmp -> id.a, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& ctmp -> id.b, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& ctmp -> id.c, sizeof(int), 1, fp) != 1) return ERROR_RW; if (! write_data_layout (fp, ctmp -> layout)) return ERROR_RW; if (ctmp -> next != NULL) ctmp = ctmp -> next; } } if (save_this_string (fp, this_proj -> curves[rid][cid] -> cfile) != OK) return ERROR_RW; } #ifdef DEBUG // debugiocurve (this_proj, win, rid, cid, "WRITE"); #endif return OK; } Atomes-GNU-1.1.14/src/project/save_field.c000066400000000000000000000431161457665371200202040ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file save_field.c * @short Functions to save force field information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_field.c' * * Contains: * - The functions to save force field information in the atomes project file format * * List of functions: int save_field_atom (FILE * fp); int save_field_shell (FILE * fp); int save_field_constraint (FILE * fp); int save_field_pmf (FILE * fp); int save_field_rigid (FILE * fp); int save_field_tethered (FILE * fp, int fid); int save_field_prop (FILE * fp, int fid, int pid); int save_field_struct (FILE * fp, int fid); int save_field_molecule (FILE * fp, int fid); int save_field_body (FILE * fp, int fid); int save_field_external (FILE * fp, int fid); int save_dlp_field_data (FILE * fp, project * this_proj); int save_lmp_field_data (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" #include "dlp_field.h" /* typedef struct field field struct field { gboolean prepare_file[2]; // Field and Config files gboolean afp[MAXDATC+MAXDATA]; int type; int energy_unit; int atom_init; int molecules; field_molecule * first_molecule; int nbody[5]; field_nth_body * first_body[5]; // Tersoff potential cross terms double ** cross; int extern_fields; field_external * first_external; // Control file double sys_opts[17]; double io_opts[23]; double ana_opts[17]; double elec_opts[11]; double vdw_opts[6]; double met_opts[2]; double equi_opts[17]; int ensemble; int thermostat; double thermo_opts[10]; double md_opts[20]; double out_opts[31]; }; */ /*! \fn int save_field_atom (FILE * fp) \brief save field atom data to file \param fp the file pointer */ int save_field_atom (FILE * fp) { if (fwrite (& tmp_fat -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fat -> fid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fat -> afid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fat -> type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (save_this_string (fp, tmp_fat -> name) != OK) return ERROR_RW; if (fwrite (& tmp_fat -> num, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fat -> sp, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fat -> mass, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fat -> charge, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fat -> frozen, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (tmp_fat -> frozen_id, sizeof(gboolean), tmp_fat -> num, fp) != tmp_fat -> num) return ERROR_RW; if (fwrite (& tmp_fat -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (tmp_fat -> list, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return ERROR_RW; if (fwrite (tmp_fat -> list_id, sizeof(int), tmp_fat -> num, fp) != tmp_fat -> num) return ERROR_RW; return OK; } /*! \fn int save_field_shell (FILE * fp) \brief save field core shell data to file \param fp the file pointer */ int save_field_shell (FILE * fp) { if (fwrite (& tmp_fshell -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (tmp_fshell -> ia, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (& tmp_fshell -> m, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fshell -> z, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fshell -> k2, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fshell -> k4, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fshell -> vdw, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fshell -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fshell -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_field_constraint (FILE * fp) \brief save field constraint data to file \param fp the file pointer */ int save_field_constraint (FILE * fp) { if (fwrite (& tmp_fcons -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (tmp_fcons -> ia, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (& tmp_fcons -> av, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fcons -> length, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fcons -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fcons -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_field_pmf (FILE * fp) \brief save field mean force potential data to file \param fp the file pointer */ int save_field_pmf (FILE * fp) { if (fwrite (& tmp_fpmf -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fpmf -> av, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fpmf -> length, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (tmp_fpmf -> num, sizeof(int), 2, fp) != 2) return ERROR_RW; int i; for (i=0; i<2; i++) { if (fwrite (tmp_fpmf -> list[i], sizeof(int), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return ERROR_RW; if (fwrite (tmp_fpmf -> weight[i], sizeof(float), tmp_fpmf -> num[i], fp) != tmp_fpmf -> num[i]) return ERROR_RW; } if (fwrite (& tmp_fpmf -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fpmf -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_field_rigid (FILE * fp) \brief save field rigid constraints data to file \param fp the file pointer */ int save_field_rigid (FILE * fp) { if (fwrite (& tmp_frig -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_frig -> num, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (tmp_frig -> list, sizeof(int), tmp_frig -> num, fp) != tmp_frig -> num) return ERROR_RW; if (fwrite (& tmp_frig -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_frig -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_field_tethered (FILE * fp, int fid) \brief save field tethered data to file \param fp the file pointer \param fid */ int save_field_tethered (FILE * fp, int fid) { if (fwrite (& tmp_ftet -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_ftet -> num, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_ftet -> key, sizeof(int), 1, fp) != 1) return ERROR_RW; int i = fvalues[fid][0][tmp_ftet -> key]; if (fwrite (tmp_ftet -> val, sizeof(float), i, fp) != i) return ERROR_RW; if (fwrite (& tmp_ftet -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_ftet -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_field_prop (FILE * fp, int fid, int pid) \brief save field property data to file \param fp the file pointer \param fid the field id \param pid the property id */ int save_field_prop (FILE * fp, int fid, int pid) { if (fwrite (& tmp_fprop -> pid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fprop -> fpid, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fprop -> key, sizeof(int), 1, fp) != 1) return ERROR_RW; int i = struct_id(pid+7); if (fwrite (tmp_fprop -> aid, sizeof(int), i, fp) != i) return ERROR_RW; i = fvalues[fid][pid+1][tmp_fprop -> key]; if (fwrite (tmp_fprop -> val, sizeof(float), i, fp) != i) return ERROR_RW; if (fwrite (& tmp_fprop -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fprop -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_field_struct (FILE * fp, int fid) \brief save field structural properties to file \param fp the file pointer \param fid the field id */ int save_field_struct (FILE * fp, int fid) { if (fwrite (& tmp_fstr -> st, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fstr -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fstr -> num, sizeof(int), 1, fp) != 1) return ERROR_RW; int i = struct_id(tmp_fstr -> st + 7); if (fwrite (tmp_fstr -> aid, sizeof(int), i, fp) != i) return ERROR_RW; if (fwrite (& tmp_fstr-> av, sizeof(float), 1, fp) != 1) return ERROR_RW; tmp_fprop = tmp_fstr -> def; if (save_field_prop(fp, fid, tmp_fstr -> st) != OK) return ERROR_RW; tmp_fprop = tmp_fstr -> other; i = 0; while (tmp_fprop) { i ++; tmp_fprop = tmp_fprop -> next; } if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (tmp_fstr -> other) { tmp_fprop = tmp_fstr -> other; while (tmp_fprop) { if (save_field_prop(fp, fid, tmp_fstr -> st) != OK) return ERROR_RW; tmp_fprop = tmp_fprop -> next; } } return OK; } /*! \fn int save_field_molecule (FILE * fp, int fid) \brief save field molecule data to file \param fp the file pointer \param fid the field id */ int save_field_molecule (FILE * fp, int fid) { if (fwrite (& tmp_fmol -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fmol -> mol -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (save_this_string (fp, tmp_fmol -> name) != OK) return ERROR_RW; if (fwrite (& tmp_fmol -> multi, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (tmp_fmol -> fragments, sizeof(int), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return ERROR_RW; int i; for (i=0; i mol -> natoms; i++) { if (fwrite (tmp_fmol -> atoms_id[i], sizeof(dint), tmp_fmol -> multi, fp) != tmp_fmol -> multi) return ERROR_RW; } if (fwrite (& tmp_fmol -> atoms, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_fat = tmp_fmol -> first_atom; while (tmp_fat) { if (save_field_atom(fp) != OK) return ERROR_RW; tmp_fat = tmp_fat -> next; } if (fwrite (& tmp_fmol -> shells, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_fshell = tmp_fmol -> first_shell; while (tmp_fshell) { if (save_field_shell(fp) != OK) return ERROR_RW; tmp_fshell = tmp_fshell -> next; } if (fwrite (& tmp_fmol -> constraints, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_fcons = tmp_fmol -> first_constraint; while (tmp_fcons) { if (save_field_constraint(fp) != OK) return ERROR_RW; tmp_fcons = tmp_fcons -> next; } if (fwrite (& tmp_fmol -> pmfs, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_fpmf = tmp_fmol -> first_pmf; while (tmp_fpmf) { if (save_field_pmf(fp) != OK) return ERROR_RW; tmp_fpmf = tmp_fpmf -> next; } if (fwrite (& tmp_fmol -> rigids, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_frig = tmp_fmol -> first_rigid; while (tmp_frig) { if (save_field_rigid(fp) != OK) return ERROR_RW; tmp_frig = tmp_frig -> next; } if (fwrite (& tmp_fmol -> tethered, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_ftet = tmp_fmol -> first_tethered; while (tmp_ftet) { if (save_field_tethered(fp, fid) != OK) return ERROR_RW; tmp_ftet = tmp_ftet -> next; } if (fwrite (tmp_fmol -> nstruct, sizeof(int), 8, fp) != 8) return ERROR_RW; for (i=0; i<8; i++) { tmp_fstr = tmp_fmol -> first_struct[i]; while (tmp_fstr) { if (save_field_struct (fp, fid) != OK) return ERROR_RW; tmp_fstr = tmp_fstr -> next; } } return OK; } /*! \fn int save_field_body (FILE * fp, int fid) \brief save field nth body data to file \param fp the file pointer \param fid the field id */ int save_field_body (FILE * fp, int fid) { if (fwrite (& tmp_fbody -> bd, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fbody -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fbody -> key, sizeof(int), 1, fp) != 1) return ERROR_RW; if (tmp_fbody -> bd == 0) if (fwrite (tmp_fbody -> fpid, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (tmp_fbody -> na, sizeof(int), body_at(tmp_fbody -> bd), fp) != body_at(tmp_fbody -> bd)) return ERROR_RW; int i; for (i=0; i bd); i++) { if (fwrite (tmp_fbody -> ma[i], sizeof(int), tmp_fbody -> na[i], fp) != tmp_fbody -> na[i]) return ERROR_RW; if (fwrite (tmp_fbody -> a[i], sizeof(int), tmp_fbody -> na[i], fp) != tmp_fbody -> na[i]) return ERROR_RW; } i = fvalues[fid][9+tmp_fbody -> bd][tmp_fbody -> key]; if (fwrite (tmp_fbody -> val, sizeof(float), i, fp) != i) return ERROR_RW; if (fwrite (& tmp_fbody -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fbody -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_field_external (FILE * fp, int fid) \brief save field external data to file \param fp the file pointer \param fid the field id */ int save_field_external (FILE * fp, int fid) { if (fwrite (& tmp_fext -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& tmp_fext -> key, sizeof(int), 1, fp) != 1) return ERROR_RW; int i = fvalues[fid][14][tmp_fext -> key]; if (fwrite (tmp_fext -> val, sizeof(float), i, fp) != i) return ERROR_RW; if (fwrite (& tmp_fext -> use, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_dlp_field_data (FILE * fp, project * this_proj) \brief save force field data to file \param fp the file pointer \param this_proj the target project */ int save_dlp_field_data (FILE * fp, project * this_proj) { int i, j; if (this_proj -> force_field[0] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; // CONTROL file if (fwrite (this_proj -> force_field[0] -> sys_opts, sizeof(double), 17, fp) != 17) return ERROR_RW; if (fwrite (this_proj -> force_field[0] -> io_opts, sizeof(double), 23, fp) != 23) return ERROR_RW; if (fwrite (this_proj -> force_field[0] -> ana_opts, sizeof(double), 17, fp) != 17) return ERROR_RW; if (fwrite (this_proj -> force_field[0] -> elec_opts, sizeof(double), 11, fp) != 11) return ERROR_RW; if (fwrite (this_proj -> force_field[0] -> vdw_opts, sizeof(double), 6, fp) != 6) return ERROR_RW; if (fwrite (this_proj -> force_field[0] -> met_opts, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> force_field[0] -> equi_opts, sizeof(double), 17, fp) != 17) return ERROR_RW; if (fwrite (& this_proj -> force_field[0] -> ensemble, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> force_field[0] -> thermostat, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (this_proj -> force_field[0] -> thermo_opts, sizeof(double), 10, fp) != 10) return ERROR_RW; if (fwrite (this_proj -> force_field[0] -> md_opts, sizeof(double), 20, fp) != 20) return ERROR_RW; if (fwrite (this_proj -> force_field[0] -> out_opts, sizeof(double), 31, fp) != 31) return ERROR_RW; // FIELD file if (fwrite (this_proj -> force_field[0] -> prepare_file, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> force_field[0] -> afp, sizeof(gboolean), MAXDATC+MAXDATA, fp) != MAXDATC+MAXDATA) return ERROR_RW; if (fwrite (& this_proj -> force_field[0] -> type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> force_field[0] -> energy_unit, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> force_field[0] -> atom_init, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> force_field[0] -> molecules, sizeof(int), 1, fp) != 1) return ERROR_RW; if (! this_proj -> force_field[0] -> molecules) return ERROR_RW; tmp_fmol = this_proj -> force_field[0] -> first_molecule; while (tmp_fmol) { if (save_field_molecule (fp, 0) != OK) return ERROR_RW; tmp_fmol = tmp_fmol -> next; } if (fwrite (this_proj -> force_field[0] -> nbody, sizeof(int), 5, fp) != 5) return ERROR_RW; for (i=0; i<5; i++) { if (this_proj -> force_field[0] -> nbody[i]) { tmp_fbody = this_proj -> force_field[0] -> first_body[i]; while (tmp_fbody) { if (save_field_body (fp, 0) != OK) return ERROR_RW; tmp_fbody = tmp_fbody -> next; } } } // Tersoff potential cross terms i = (this_proj -> force_field[0] -> cross) ? 1 : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> force_field[0] -> cross) { i = this_proj -> force_field[0] -> nbody[2] * (this_proj -> force_field[0] -> nbody[2] - 1) / 2; for (j=0; j force_field[0] -> cross[j], sizeof(double), 3, fp) != 3) return ERROR_RW; } } if (fwrite (& this_proj -> force_field[0] -> extern_fields, sizeof(int), 1, fp) != 1) return ERROR_RW; tmp_fext = this_proj -> force_field[0] -> first_external; while (tmp_fext) { if (save_field_external(fp, 0) != OK) return ERROR_RW; tmp_fext = tmp_fext -> next; } return OK; } /*! \fn int save_lmp_field_data (FILE * fp, project * this_proj) \brief save LAMMPS force field data to file \param fp the file pointer \param this_proj the target project */ int save_lmp_field_data (FILE * fp, project * this_proj) { int i; if (this_proj -> force_field[1] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } return OK; } Atomes-GNU-1.1.14/src/project/save_mol.c000066400000000000000000000111041457665371200177000ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file save_mol.c * @short Functions to save molecules information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_mol.c' * * Contains: * - The functions to save molecules information in the atomes project file format * * List of functions: int save_atom_m (FILE * fp, project * this_proj, int s, int a); int save_this_mol (FILE * fp, project * this_proj, molecule * tmp); int save_mol (FILE * fp, project * this_proj); */ #include "global.h" #include "project.h" /*molecule { int id; // Molecule id number int md; // MD step int multiplicity; // Multiplicity int * fragments; // Fragments list int natoms; // Number of atoms int nspec; // Number of chemical species int * species; // Number of atom by species atom ** atoms; // The list of all atoms int nbonds; // Number of chemical bonds int ** pbonds; // Number of chemical bonds by geometries int nangles; // Number of bond angles int *** pangles; // Number of bond angles by geometries int ** lgeo; // list of coordination spheres (by species) molecule * next; molecule * prev; };*/ /*! \fn int save_atom_m (FILE * fp, project * this_proj, int s, int a) \brief save atom data to file \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int save_atom_m (FILE * fp, project * this_proj, int s, int a) { if (fwrite (& this_proj -> atoms[s][a].coord[2], sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> atoms[s][a].coord[3], sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_this_mol (FILE * fp, project * this_proj, molecule * tmp) \brief save this molecule data to file \param fp the file pointer \param this_proj the target project \param tmp the molecule that contains the data */ int save_this_mol (FILE * fp, project * this_proj, molecule * tmp) { if (fwrite (& tmp -> id, sizeof(int), 1, fp) != 1) return 0; if (fwrite (& tmp -> md, sizeof(int), 1, fp) != 1) return 0; if (fwrite (& tmp -> multiplicity, sizeof(int), 1, fp) != 1) return 0; if (fwrite (tmp -> fragments, sizeof(int), tmp -> multiplicity, fp) != tmp -> multiplicity) return 0; if (fwrite (& tmp -> natoms, sizeof(int), 1, fp) != 1) return 0; if (fwrite (& tmp -> nspec, sizeof(int), 1, fp) != 1) return 0; if (fwrite (tmp -> species, sizeof(int), this_proj -> nspec, fp) != this_proj -> nspec) return 0; return 1; } /*! \fn int save_mol (FILE * fp, project * this_proj) \brief save molecule information to file \param fp the file pointer \param this_proj the target project */ int save_mol (FILE * fp, project * this_proj) { int i, j; i = 0; if (! this_proj -> modelfc) { if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_MOL; return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_MOL; for (i=1; i<4; i++) { if (fwrite (& this_proj -> coord -> totcoord[i], sizeof(int), 1, fp) != 1) return ERROR_MOL; } if (fwrite (this_proj -> modelfc -> mol_by_step, sizeof(int), this_proj -> steps, fp) != this_proj -> steps) return ERROR_MOL; for (i=0; i steps; i++) { for (j=0; j modelfc -> mol_by_step[i]; j++) { if (! save_this_mol (fp, this_proj, & this_proj -> modelfc -> mols[i][j])) return ERROR_MOL; } } for (i=0; i steps; i++) { for (j=0; j< this_proj -> natomes; j++) { if (save_atom_m (fp, this_proj, i, j) != OK) return ERROR_MOL; } } return OK; } Atomes-GNU-1.1.14/src/project/save_opengl.c000066400000000000000000000460101457665371200204010ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file save_opengl.c * @short Functions to save OpenGL information in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_opengl.c' * * Contains: * - The functions to save OpenGL information in the atomes project file format * * List of functions: int save_atom_a (FILE * fp, project * this_proj, int s, int a); int save_atom_b (FILE * fp, project * this_proj, int s, int a); int save_rings_chains_data (FILE * fp, int type, int size, int steps, int data_max, int ** num_data, gboolean *** show, int **** all_data); int save_opengl_image (FILE * fp, project * this_proj, image * img, int sid); */ #include "global.h" #include "project.h" #include "glwin.h" /*! \fn int save_atom_a (FILE * fp, project * this_proj, int s, int a) \brief save atom data to file (a) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int save_atom_a (FILE * fp, project * this_proj, int s, int a) { if (fwrite (& this_proj -> atoms[s][a].id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> atoms[s][a].sp, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> atoms[s][a].x, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> atoms[s][a].y, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> atoms[s][a].z, sizeof(double), 1, fp) != 1) return ERROR_RW; //g_debug ("Saving:: step= %d, at= %d, sp[%d]= %d, x[%d]= %f, y[%d]= %f, z[%d]= %f", // s, a+1, a, this_proj -> atoms[s][a].sp, a, this_proj -> atoms[s][a].x, a, this_proj -> atoms[s][a].y, a, this_proj -> atoms[s][a].z); return OK; } /*! \fn int save_atom_b (FILE * fp, project * this_proj, int s, int a) \brief save atom data to file (b) \param fp the file pointer \param this_proj the target project \param s the MD step \param a the atom number */ int save_atom_b (FILE * fp, project * this_proj, int s, int a) { if (fwrite (this_proj -> atoms[s][a].show, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fwrite (this_proj -> atoms[s][a].label, sizeof(gboolean), 2, fp) != 2) return ERROR_RW; if (fwrite (& this_proj -> atoms[s][a].style, sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_rings_chains_data (FILE * fp, int type, int size, int steps, int data_max, int ** num_data, gboolean *** show, int **** all_data) \brief saving rings and chains statistics data to file \param fp the file pointer \param type Rings (0) or chains (1) \param size the number of data to save \param steps the MD step \param data_max the maximum size of \param num_data Id of the objects to save \param show Display information pointer \param all_data Atoms id of the objects to save */ int save_rings_chains_data (FILE * fp, int type, int size, int steps, int data_max, int ** num_data, gboolean *** show, int **** all_data) { int i, j, k; if (fwrite (& data_max, sizeof(int), 1, fp) != 1) return ERROR_RW; if (data_max) { for (i=0; i backcolor, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; if (this_proj -> modelgl -> custom_map != NULL) img -> color_map[0] += 10; if (fwrite (img -> color_map, sizeof(int), 2, fp) != 2) return ERROR_RW; if (this_proj -> modelgl -> custom_map != NULL) { img -> color_map[0] -= 10; colormap * map = this_proj -> modelgl -> custom_map; if (fwrite (& map -> points, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& map -> cmax, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& map -> cmin, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (map -> positions, sizeof(float), map -> points, fp) != map -> points) return ERROR_RW; if (fwrite (map -> values, sizeof(ColRGBA), map -> points, fp) != map -> points) return ERROR_RW; for (i=0; i steps; i++) { if (fwrite (map -> data[i], sizeof(float), this_proj -> natomes, fp) != this_proj -> natomes) return ERROR_RW; } } if (fwrite (& img -> cloned_poly, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (img -> at_color, sizeof(ColRGBA), sid*2, fp) != sid*2) return ERROR_RW; if (fwrite (img -> sphererad, sizeof(double), sid*2, fp) != sid*2) return ERROR_RW; if (fwrite (img -> pointrad, sizeof(double), sid*2, fp) != sid*2) return ERROR_RW; if (fwrite (img -> atomicrad, sizeof(double), sid*2, fp) != sid*2) return ERROR_RW; for (i=0; i bondrad[i], sizeof(double), 2*sid, fp) != 2*sid) return ERROR_RW; if (fwrite (img -> linerad[i], sizeof(double), 2*sid, fp) != 2*sid) return ERROR_RW; } if (fwrite (img -> radall, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fwrite (& img -> draw_clones, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (img -> labels_position, sizeof(int), 5, fp) != 5) return ERROR_RW; if (fwrite (img -> labels_render, sizeof(int), 5, fp) != 5) return ERROR_RW; if (fwrite (img -> labels_scale, sizeof(int), 5, fp) != 5) return ERROR_RW; if (fwrite (img -> labels_format, sizeof(int), 2, fp) != 2) return ERROR_RW; for (i=0; i<5; i++) { if (fwrite (img -> labels_shift[i], sizeof(double), 3, fp) != 3) return ERROR_RW; if (img -> labels_color[i] != NULL) { val = TRUE; if (fwrite (& val, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (i < 2) { j = 2*sid; } else if (i == 2) { j = 3; } else { j = 1; } for (k=0; k labels_color[i][k], sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; } } else { val = FALSE; if (fwrite (& val, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; } if (save_this_string (fp, img -> labels_font[i]) != OK) return ERROR_RW; } // Measures if (fwrite (& img -> mtilt, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> mpattern, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> mfactor, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> mwidth, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> m_is_pressed, sizeof(double), 1, fp) != 1) return ERROR_RW; // Model box and axis if (fwrite (img -> box_axis, sizeof(int), 2, fp) != 2) return ERROR_RW; if (fwrite (img -> box_axis_rad, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fwrite (img -> box_axis_line, sizeof(double), 2, fp) != 2) return ERROR_RW; if (fwrite (& img -> box_color, sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; if (fwrite (img -> extra_cell, sizeof(int), 3, fp) != 3) return ERROR_RW; // Axis if (fwrite (& img -> axispos, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> axis_length, sizeof(double), 1, fp) != 1) return ERROR_RW; if (fwrite (img -> axis_pos, sizeof(double), 3, fp) != 3) return ERROR_RW; if (img -> axis_color != NULL) { val = TRUE; } else { val = FALSE; } if (fwrite (& val, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (val) { for (i=0; i<3; i++) { if (fwrite (& img -> axis_color[i], sizeof(ColRGBA), 1, fp) != 1) return ERROR_RW; } } if (fwrite (& img -> axis_labels, sizeof(int), 1, fp) != 1) return ERROR_RW; for (i=0; i<3; i++) { if (save_this_string (fp, img -> axis_title[i]) != OK) return ERROR_RW; } // OpenGL if (fwrite (& img -> p_depth, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> gnear, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> gfar, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> gleft, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> gright, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> gtop, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> gbottom, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> rotation_quaternion, sizeof(vec4_t), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> rotation_mode, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> zoom, sizeof(GLdouble), 1, fp) != 1) return ERROR_RW; if (fwrite (img -> c_shift, sizeof(GLdouble), 2, fp) != 2) return ERROR_RW; if (fwrite (& img -> style, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> quality, sizeof(GLint), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> render, sizeof(GLint), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> lights, sizeof(int), 1, fp) != 1) return ERROR_RW; for (i=0; i lights; i++) { if (fwrite (& img -> l_ght[i].type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> l_ght[i].fix, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> l_ght[i].show, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> l_ght[i].position, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> l_ght[i].direction, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> l_ght[i].intensity, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> l_ght[i].attenuation, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> l_ght[i].spot_data, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; } if (fwrite (& img -> m_terial.predefine, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> m_terial.albedo, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fwrite (img -> m_terial.param, sizeof(GLfloat), 6, fp) != 6) return ERROR_RW; if (fwrite (& img -> f_g.mode, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> f_g.based, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> f_g.density, sizeof(float), 1, fp) != 1) return ERROR_RW; if (fwrite (img -> f_g.depth, sizeof(float), 2, fp) != 2) return ERROR_RW; if (fwrite (& img -> f_g.color, sizeof(vec3_t), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> filled_type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> step, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& img -> rep, sizeof(int), 1, fp) != 1) return ERROR_RW; for (i=0; i<4; i++) { if (i < 2) { for (j=0; j spcolor[i][j], sizeof(ColRGBA), this_proj -> coord -> ntg[i][j], fp) != this_proj -> coord -> ntg[i][j]) return ERROR_RW; } } else { j = (this_proj -> modelgl -> adv_bonding[i-2] && this_proj -> coord -> totcoord[i]) ? this_proj -> coord -> totcoord[i] : 0; if (fwrite (& j, sizeof(int), 1, fp) != 1) return ERROR_RW; if (j) { if (fwrite (img -> spcolor[i][0], sizeof(ColRGBA), this_proj -> coord -> totcoord[i], fp) != this_proj -> coord -> totcoord[i]) return ERROR_RW; } } } if (fwrite (& this_proj -> modelgl -> rings, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (this_proj -> modelgl -> rings) { for (i=0; i<5; i++) { if (save_rings_chains_data (fp, 0, this_proj -> rsparam[i][1], this_proj -> steps, this_proj -> modelgl -> ring_max[i], this_proj -> modelgl -> num_rings[i], this_proj -> modelgl -> show_rpoly[i], this_proj -> modelgl -> all_rings[i]) != OK) return ERROR_RINGS; } } if (fwrite (& this_proj -> modelgl -> chains, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (this_proj -> modelgl -> chains) { if (save_rings_chains_data (fp, 1, this_proj -> csparam[5], this_proj -> steps, this_proj -> modelgl -> chain_max, this_proj -> modelgl -> num_chains, NULL, this_proj -> modelgl -> all_chains) != OK) return ERROR_CHAINS; } if (this_proj -> modelgl -> volumes) { i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; for (i=0; i modelgl -> atoms_volume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return ERROR_RW; if (fwrite (this_proj -> modelgl -> atoms_ppvolume[i], sizeof(double), this_proj -> steps, fp) != this_proj -> steps) return ERROR_RW; for (j=0; j steps; j++) { if (fwrite (this_proj -> modelgl -> volume_box[i][j], sizeof(double), 9, fp) != 9) return ERROR_RW; } } if (fwrite (this_proj -> modelgl -> comp_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return ERROR_RW; if (fwrite (img -> show_vol, sizeof(gboolean), FILLED_STYLES, fp) != FILLED_STYLES) return ERROR_RW; if (fwrite (img -> vol_col, sizeof(ColRGBA), FILLED_STYLES, fp) != FILLED_STYLES) return ERROR_RW; if (this_proj -> modelgl -> adv_bonding[0]) { if (fwrite (& this_proj -> coord -> totcoord[2], sizeof(int), 1, fp) != 1) return ERROR_RW; for (i=0; i steps; k++) { for (l=0; l coord -> totcoord[2]; l++) { if (this_proj -> modelgl -> fm_comp_vol[0][i][k][l]) j++; } } if (fwrite (& j, sizeof(int), 1, fp) != 1) return ERROR_RW; if (j) { for (k=0; k steps; k++) { for (l=0; l coord -> totcoord[2]; l++) { if (this_proj -> modelgl -> fm_comp_vol[0][i][k][l]) { if (fwrite (& k, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& l, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> modelgl -> frag_mol_ppvolume[0][i][k][l], sizeof(double), 1, fp) != 1) return ERROR_RW; if (fwrite (this_proj -> modelgl -> frag_box[i][k][l], sizeof(double), 9, fp) != 9) return ERROR_RW; } } } if (fwrite (img -> fm_show_vol[0][i], sizeof(gboolean), this_proj -> coord -> totcoord[2], fp) != this_proj -> coord -> totcoord[2]) return ERROR_RW; if (fwrite (img -> fm_vol_col[0][i], sizeof(ColRGBA), this_proj -> coord -> totcoord[2], fp) != this_proj -> coord -> totcoord[2]) return ERROR_RW; } } if (this_proj -> modelgl -> adv_bonding[1]) { if (fwrite (& this_proj -> coord -> totcoord[3], sizeof(int), 1, fp) != 1) return ERROR_RW; for (i=0; i steps; k++) { for (l=0; l coord -> totcoord[3]; l++) { if (this_proj -> modelgl -> fm_comp_vol[1][i][k][l]) j++; } } if (fwrite (& j, sizeof(int), 1, fp) != 1) return ERROR_RW; if (j) { for (k=0; k steps; k++) { for (l=0; l coord -> totcoord[3]; l++) { if (this_proj -> modelgl -> fm_comp_vol[1][i][k][l]) { if (fwrite (& k, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& l, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> modelgl -> frag_mol_ppvolume[1][i][k][l], sizeof(double), 1, fp) != 1) return ERROR_RW; } } } if (fwrite (img -> fm_show_vol[1][i], sizeof(gboolean), this_proj -> coord -> totcoord[3], fp) != this_proj -> coord -> totcoord[3]) return ERROR_RW; if (fwrite (img -> fm_vol_col[1][i], sizeof(ColRGBA), this_proj -> coord -> totcoord[3], fp) != this_proj -> coord -> totcoord[3]) return ERROR_RW; } } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; } for (i=0; i steps; i++) { for (j=0; j< this_proj -> natomes; j++) { if (save_atom_b (fp, this_proj, i, j) != OK) return ERROR_ATOM_B; } } // Finally selection lists, bonds, angles and dihedrals for (i=0; i<2; i++) { if (fwrite (& img -> selected[i] -> selected, sizeof(int), 1, fp) != 1) return ERROR_RW; if (img -> selected[i] -> selected) { atom_in_selection * at = img -> selected[i] -> first; for (j=0; j selected[i] -> selected; j++) { if (fwrite (& at -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (at -> next) at = at -> next; } if (img -> selected[i] -> selected >= 2 && img -> selected[i] -> selected <= 20) { j = num_bonds (img -> selected[i] -> selected); if (fwrite (img -> selected[i] -> selected_bonds, sizeof(int), j, fp) != j) return ERROR_RW; if (img -> selected[i] -> selected >= 3) { j = num_angles (img -> selected[i] -> selected); if (fwrite (img -> selected[i] -> selected_angles, sizeof(int), j, fp) != j) return ERROR_RW; if (img -> selected[i] -> selected >= 4 && img -> selected[i] -> selected <= 10) { j = num_dihedrals (img -> selected[i] -> selected); if (fwrite (img -> selected[i] -> selected_dihedrals, sizeof(int), j, fp) != j) return ERROR_RW; } } } } } return OK; } Atomes-GNU-1.1.14/src/project/save_p.c000066400000000000000000000230561457665371200173610ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file save_p.c * @short Functions to start saving an atomes project file * @author Sébastien Le Roux */ /* * This file: 'save_p.c' * * Contains: * - The functions to start saving an atomes project file * * List of functions: int save_this_string (FILE * fp, gchar * string); int save_project (FILE * fp, project * this_proj, int npi); */ #include "global.h" #include "project.h" /*! \fn int save_this_string (FILE * fp, gchar * string) \brief save string to file \param fp the file pointer \param string the string to save */ int save_this_string (FILE * fp, gchar * string) { int i; if (string) { i = strlen (string); if (i > 0) { i ++; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (string, sizeof(char), i, fp) != i) return ERROR_RW; } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; } } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; } return OK; } /*! \fn int save_project (FILE * fp, project * this_proj, int npi) \brief save project to file \param fp the file pointer \param this_proj the target project \param npi the total number of projects in the workspace */ int save_project (FILE * fp, project * this_proj, int npi) { int i, j, k; gchar * ver; // First 2 lines for compatibility issues i = 2; j = 7; ver = g_strdup_printf ("%%\n%% project file v-%1d.%1d\n%%\n", i, j); if (save_this_string (fp, ver) != OK) { g_free (ver); return ERROR_PROJECT; } g_free (ver); if (save_this_string (fp, this_proj -> name) != OK) return ERROR_PROJECT; if (fwrite (& this_proj -> tfile, sizeof(this_proj -> tfile), 1, fp) != 1) return ERROR_PROJECT; if (this_proj -> tfile > -1) { if (save_this_string (fp, this_proj -> coordfile) != OK) return ERROR_PROJECT; } if (this_proj -> bondfile != NULL) { if (save_this_string (fp, this_proj -> bondfile) != OK) return ERROR_PROJECT; } else { i = -1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; } if (fwrite (this_proj -> runok, sizeof(gboolean), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fwrite (this_proj -> initok, sizeof(gboolean), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fwrite (this_proj -> visok, sizeof(gboolean), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fwrite (& this_proj -> nspec, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fwrite (& this_proj -> natomes, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fwrite (& this_proj -> steps, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fwrite (& this_proj -> cell.pbc, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fwrite (& this_proj -> cell.frac, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fwrite (& this_proj -> cell.ltype, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; i = (this_proj -> cell.npt) ? this_proj -> steps : 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; for (j=0; j cell.box[j].vect[k], sizeof(double), 3, fp) != 3) return ERROR_PROJECT; } if (fwrite (this_proj -> cell.box[j].param[0], sizeof(double), 3, fp) != 3) return ERROR_PROJECT; if (fwrite (this_proj -> cell.box[j].param[1], sizeof(double), 3, fp) != 3) return ERROR_PROJECT; } if (fwrite (& this_proj -> cell.crystal, sizeof(gboolean), 1, fp) != 1) return ERROR_PROJECT; if (this_proj -> cell.sp_group) { if (fwrite (& this_proj -> cell.sp_group -> id, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (save_this_string (fp, this_proj -> cell.sp_group -> bravais) != OK) return ERROR_PROJECT; if (save_this_string (fp, this_proj -> cell.sp_group -> hms) != OK) return ERROR_PROJECT; if (save_this_string (fp, this_proj -> cell.sp_group -> setting) != OK) return ERROR_PROJECT; } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; } if (fwrite (& this_proj -> run, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fwrite (& this_proj -> initgl, sizeof(gboolean), 1, fp) != 1) return ERROR_PROJECT; if (fwrite (this_proj -> modelgl -> pixels, sizeof(int), 2, fp) != 2) return ERROR_PROJECT; if (fwrite (this_proj -> num_delta, sizeof(int), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fwrite (this_proj -> delta, sizeof(double), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fwrite (this_proj -> rsearch, sizeof(int), 2, fp) != 2) return ERROR_PROJECT; for (i=0; i<5; i++) { if (fwrite (this_proj -> rsparam[i], sizeof(int), 6, fp) != 6) return ERROR_PROJECT; if (fwrite (this_proj -> rsdata[i], sizeof(double), 5, fp) != 5) return ERROR_PROJECT; } if (fwrite (& this_proj -> csearch, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (fwrite (this_proj -> csparam, sizeof(int), 7, fp) != 7) return ERROR_PROJECT; if (fwrite (this_proj -> csdata, sizeof(double), 2, fp) != 2) return ERROR_PROJECT; if (fwrite (this_proj -> min, sizeof(double), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fwrite (this_proj -> max, sizeof(double), NGRAPHS, fp) != NGRAPHS) return ERROR_PROJECT; if (fwrite (& this_proj -> tunit, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (this_proj -> natomes != 0 && this_proj -> nspec != 0) { for (i=0; i nspec; i++) { if (save_this_string (fp, this_proj -> chemistry -> label[i]) != OK) return ERROR_PROJECT; if (save_this_string (fp, this_proj -> chemistry -> element[i]) != OK) return ERROR_PROJECT; } if (fwrite (this_proj -> chemistry -> nsps, sizeof(int), this_proj -> nspec, fp) != this_proj -> nspec) return ERROR_PROJECT; if (fwrite (this_proj -> chemistry -> formula, sizeof(int), this_proj -> nspec, fp) != this_proj -> nspec) return ERROR_PROJECT; for (i=0; i chemistry -> chem_prop[i], sizeof(double), this_proj -> nspec, fp) != this_proj -> nspec) return ERROR_PROJECT; } if (fwrite (& this_proj -> chemistry -> grtotcutoff, sizeof(double), 1, fp) != 1) return ERROR_PROJECT; for (i=0; i nspec; i++) { if (fwrite (this_proj -> chemistry -> cutoffs[i], sizeof(double), this_proj -> nspec, fp) != this_proj -> nspec) return ERROR_PROJECT; } for (i=0; i steps; i++) { for (j=0; j natomes; j++) { if (save_atom_a (fp, this_proj, i, j) != OK) return ERROR_ATOM_A; } } if (this_proj -> run) { k = 0; for (i=0; i numc[i]; j++) { if (this_proj -> curves[i][j] -> ndata != 0) { k ++; } } } if (fwrite (& k, sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (k) { if (fwrite (& this_proj -> numc[SP], sizeof(int), 1, fp) != 1) return ERROR_PROJECT; if (this_proj -> numc[SP]) { for (i=0; i numc[SP]; i++) { if (save_this_string (fp, this_proj -> curves[SP][i] -> name) != OK) return ERROR_PROJECT; } } for (i=0; i< NGRAPHS; i++) { for (j=0; j numc[i]; j++) { if (this_proj -> curves[i][j] -> ndata != 0) { if (save_project_curve (fp, npi, this_proj, i, j) != OK) return ERROR_CURVE; } } } } if (this_proj -> initgl) { if (fwrite (& this_proj -> modelgl -> bonding, sizeof(gboolean), 1, fp) != 1) return ERROR_COORD; if (fwrite (this_proj -> modelgl -> adv_bonding, sizeof(gboolean), 2, fp) != 2) return ERROR_COORD; if (fwrite (this_proj -> coord -> totcoord, sizeof(int), 10, fp) != 10) return ERROR_COORD; // Save molecule if ((this_proj -> natomes > ATOM_LIMIT || this_proj -> steps > STEP_LIMIT) && this_proj -> modelgl -> adv_bonding[1]) { if (save_mol (fp, this_proj) != OK) return ERROR_MOL; } // saving bonding info if (save_bonding (fp, this_proj) != OK) return ERROR_COORD; // saving glwin info i = save_opengl_image (fp, this_proj, this_proj -> modelgl -> anim -> last -> img, this_proj -> nspec); if (i != OK) return i; i = save_dlp_field_data (fp, this_proj); if (i != OK) return i; i = save_lmp_field_data (fp, this_proj); if (i != OK) return i; for (i=0; i<2; i++) { j = save_cpmd_data (fp, i, this_proj); if (j != OK) return j; } for (i=0; i<2; i++) { j = save_cp2k_data (fp, i, this_proj); if (j != OK) return j; } } } } else { // error return ERROR_NO_WAY; } #ifdef DEBUG // debugioproj (this_proj, "WRITE"); #endif return OK; } Atomes-GNU-1.1.14/src/project/save_qm.c000066400000000000000000000172001457665371200175310ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file save_qm.c * @short Functions to save ab-initio (CPMD/CP2K) calculation parameters in the atomes project file format * @author Sébastien Le Roux */ /* * This file: 'save_qm.c' * * Contains: * - The functions to save ab-initio (CPMD/CP2K) calculation parameters in the atomes project file format * * List of functions: int save_thermo (FILE * fp, thermostat * thermo); int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord); int save_cpmd_data (FILE * fp, int cid, project * this_proj); int save_cp2k_data (FILE * fp, int cid, project * this_proj); */ #include "global.h" #include "project.h" /*! \fn int save_thermo (FILE * fp, thermostat * thermo) \brief save thermostat to file \param fp the file pointer \param thermo the thermostat to save */ int save_thermo (FILE * fp, thermostat * thermo) { if (fwrite (& thermo -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& thermo -> type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& thermo -> sys, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& thermo -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (thermo -> params, sizeof(double), 4, fp) != 4) return ERROR_RW; if (fwrite (& thermo -> natoms, sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } /*! \fn int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord) \brief save fixed atom(s) to file \param fp the file pointer \param fixatoms the number of fixed atom(s) \param fixlist the list of fixed atom(s) \param fixcoord the list of fixed coordinate(s) for the fix atom(s) */ int save_fixed_atoms (FILE * fp, int fixatoms, int * fixlist, int ** fixcoord) { int i; if (fwrite (& fixatoms, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fixatoms) { if (fixlist) { if (fwrite (fixlist, sizeof(int), fixatoms, fp) != fixatoms) return ERROR_RW; } else { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; } if (fixcoord) { for (i=0; i cpmd_input[cid] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> cpmd_input[cid] -> calc_type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (this_proj -> cpmd_input[cid] -> default_opts, sizeof(double), 17, fp) != 17) return ERROR_RW; if (fwrite (this_proj -> cpmd_input[cid] -> calc_opts, sizeof(double), 24, fp) != 24) return ERROR_RW; if (fwrite (& this_proj -> cpmd_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> cpmd_input[cid] -> thermostats) { thermostat * thermo = this_proj -> cpmd_input[cid] -> ions_thermostat; i = 0; while (thermo) { if (save_thermo (fp, thermo) != OK) return ERROR_RW; i ++; thermo = thermo -> next; } i = (this_proj -> cpmd_input[cid] -> elec_thermostat) ? 1 : 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> cpmd_input[cid] -> elec_thermostat) { if (save_thermo (fp, this_proj -> cpmd_input[cid] -> elec_thermostat) != OK) return ERROR_RW; } } if (save_fixed_atoms (fp, this_proj -> cpmd_input[cid] -> fixat, this_proj -> cpmd_input[cid] -> fixlist, this_proj -> cpmd_input[cid] -> fixcoord) != OK) { return ERROR_RW; } if (fwrite (& this_proj -> cpmd_input[cid] -> dummies, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> cpmd_input[cid] -> dummies) { dummy_atom * dummy = this_proj -> cpmd_input[cid] -> dummy; while (dummy) { if (fwrite (& dummy -> id, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& dummy -> type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& dummy -> show, sizeof(gboolean), 1, fp) != 1) return ERROR_RW; if (fwrite (dummy -> xyz, sizeof(double), 3, fp) != 3) return ERROR_RW; if (fwrite (dummy -> coord, sizeof(int), 4, fp) != 4) return ERROR_RW; if (fwrite (& dummy -> natoms, sizeof(int), 1, fp) != 1) return ERROR_RW; if (dummy -> natoms) { if (fwrite (dummy -> list, sizeof(int), dummy -> natoms, fp) != dummy -> natoms) return ERROR_RW; } dummy = dummy -> next; } } for (i=0; i nspec; i++) { if (fwrite (this_proj -> cpmd_input[cid] -> pp[i], sizeof(int), 2, fp) != 2) return ERROR_RW; } return save_this_string (fp, this_proj -> cpmd_input[cid] -> info); } /*! \fn int save_cp2k_data (FILE * fp, int cid, project * this_proj) \brief save CP2K data to file \param fp the file pointer \param cid the CP2K id (0 = ab-initio, 1 = QM-MM) \param this_proj the target project */ int save_cp2k_data (FILE * fp, int cid, project * this_proj) { int i, j; if (this_proj -> cp2k_input[cid] == NULL) { i = 0; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; return OK; } i = 1; if (fwrite (& i, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (& this_proj -> cp2k_input[cid] -> input_type, sizeof(int), 1, fp) != 1) return ERROR_RW; if (fwrite (this_proj -> cp2k_input[cid] -> opts, sizeof(double), 42, fp) != 42) return ERROR_RW; for (i=0; i<3; i++) { if (fwrite (this_proj -> cp2k_input[cid] -> extra_opts[i], sizeof(double), 4, fp) != 4) return ERROR_RW; } if (fwrite (& this_proj -> cp2k_input[cid] -> thermostats, sizeof(int), 1, fp) != 1) return ERROR_RW; if (this_proj -> cp2k_input[cid] -> thermostats) { thermostat * thermo = this_proj -> cp2k_input[cid] -> ions_thermostat; while (thermo) { if (save_thermo (fp, thermo) != OK) return ERROR_RW; thermo = thermo -> next; } } for (i=0; i<2; i++) { if (save_fixed_atoms (fp, this_proj -> cp2k_input[cid] -> fixat[i], this_proj -> cp2k_input[cid] -> fixlist[i], this_proj -> cp2k_input[cid] -> fixcoord[i]) != OK) { return ERROR_RW; } } for (i=0; i nspec; i++) { if (fwrite (this_proj -> cp2k_input[cid] -> spec_data[i], sizeof(int), 2, fp) != 2) return ERROR_RW; for (j=0; j<2; j++) { if (save_this_string (fp, this_proj -> cp2k_input[cid] -> spec_files[i][j]) != OK) return ERROR_RW; } } for (i=0; i<5; i++) { if (save_this_string (fp, this_proj -> cp2k_input[cid] -> files[i]) != OK) return ERROR_RW; } return save_this_string (fp, this_proj -> cp2k_input[cid] -> info); } Atomes-GNU-1.1.14/src/project/update_p.c000066400000000000000000000143201457665371200176770ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file update_p.c * @short Functions to update a project \n Functions to activate a project * @author Sébastien Le Roux */ /* * This file: 'update_p.c' * * Contains: * - The functions to update a project - The functions to activate a project * * List of functions: int update_project (); void prep_calc_actions (); void active_project_changed (int id); void opengl_project_changed (int id); */ #include "global.h" #include "bind.h" #include "interface.h" #include "callbacks.h" #include "project.h" #include "workspace.h" extern GtkWidget * work_menu (int p, int c); extern GtkTreeStore * tool_model; /*! \fn void prep_calc_actions () \brief prepare analysis widgets */ void prep_calc_actions () { int i; // Depends on the number of calculations available for (i=0; i runok[i]) { add_action (analyze_actions[i]); } else { remove_action (analyze_action_names[i]); } } else { if (active_project -> runok[i+1]) { add_action (analyze_actions[i]); } else { remove_action (analyze_action_names[i]); } } } } /*! \fn int update_project () \brief update project: send data to Fortran90, and update calculation interactors */ int update_project () { #ifdef DEBUG g_debug ("UPDATE_PROJECT: to update"); #endif int i, j; if (! active_project -> newproj && active_project -> natomes) { i = alloc_data_ (& active_project -> natomes, & active_project -> nspec, & active_project -> steps); if (i == 1) { to_read_pos (); int * lot = allocint (active_project -> natomes); for (j=0; j natomes; j++) lot[j] = active_project -> atoms[0][j].sp; read_data_ (lot, active_chem -> nsps); g_free (lot); read_chem_ (active_chem -> chem_prop[CHEM_M], active_chem -> chem_prop[CHEM_R], active_chem -> chem_prop[CHEM_N], active_chem -> chem_prop[CHEM_X]); j = 0; prep_spec_ (active_chem -> chem_prop[CHEM_Z], active_chem -> nsps, & j); } else { return 0; } if (active_project -> run) { active_project -> dmtx = FALSE; j = (active_cell -> npt) ? active_project -> steps : 1; for (i=0; i box[i].vect, active_cell -> box[i].param[0], active_cell -> box[i].param[1], & active_cell -> ltype, & active_cell -> frac, & active_cell -> pbc); } cutoffsend (); } } if (active_project -> numwid > 0) { if (active_cell -> has_a_box) { active_project -> runok[GR] = TRUE; active_project -> runok[SK] = TRUE; } else { active_project -> runok[GR] = FALSE; active_project -> runok[SQ] = FALSE; active_project -> runok[SK] = FALSE; active_project -> runok[GK] = FALSE; } if (active_project -> natomes) { active_project -> runok[BD] = TRUE; active_project -> runok[RI] = TRUE; active_project -> runok[CH] = TRUE; active_project -> runok[SP] = TRUE; if (active_project -> steps > 1) active_project -> runok[MS] = TRUE; } } #ifdef DEBUG g_debug ("UPDATE_PROJECT: updated"); #endif return 1; } /*! \fn void active_project_changed (int id) \brief change the active project \param id the id of the new active project */ void active_project_changed (int id) { char * errp = NULL; if (id != inactep && inactep < nprojects && ! atomes_logo) clean_view (); gtk_tree_store_clear (tool_model); activep = id; active_project = get_project_by_id (id); active_chem = active_project -> chemistry; active_coord = active_project -> coord; active_cell = & active_project -> cell; active_box = NULL; active_glwin = NULL; active_image = NULL; if (active_project -> modelgl != NULL) { active_glwin = active_project -> modelgl; if (active_glwin -> anim != NULL) { active_image = active_glwin -> anim -> last -> img; } } if (active_cell -> box) { if (active_project -> steps == 1 || ! active_cell -> npt || ! active_image) { active_box = & active_cell -> box[0]; } else if (active_cell -> npt) { active_box = & active_cell -> box[active_image -> step]; } } if (update_project() == 0) { errp = g_strdup_printf ("Impossible to update project: %s\n", active_project -> name); show_error (errp, 0, MainWindow); g_free (errp); } else { if (active_project -> numwid > 0) { prep_calc_actions (); add_action (edition_actions[0]); if (active_cell -> npt) { remove_action (edition_action_names[1]); } else { add_action (edition_actions[1]); } add_action (edition_actions[2]); fill_tool_model (); correct_this_window_title (curvetoolbox, g_strdup_printf ("Toolboxes - %s", prepare_for_title(active_project -> name))); correct_this_window_title (MainWindow, g_strdup_printf ("%s - %s", PACKAGE, prepare_for_title (active_project -> name))); } inactep = activep; } activew = activep; } /*! \fn void opengl_project_changed (int id) \brief change the OpenGL project \param id the id of the new OpenGL project */ void opengl_project_changed (int id) { activev = id; opengl_project = get_project_by_id(id); } Atomes-GNU-1.1.14/src/workspace/000077500000000000000000000000001457665371200162625ustar00rootroot00000000000000Atomes-GNU-1.1.14/src/workspace/modelinfo.c000066400000000000000000000327671457665371200204210ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file modelinfo.c * @short Functions to display model information in GtkTextBuffer * @author Sébastien Le Roux */ /* * This file: 'modelinfo.c' * * Contains: * - Functions to display model information in GtkTextBuffer * * List of functions: void print_spg_name (gchar * str , GtkTextBuffer * buffer); void print_spg_setting (gchar * init, GtkTextBuffer * buffer); void model_info (project * this_proj, GtkTextBuffer * buffer); void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf); void opengl_info (project * this_proj, GtkTextBuffer * buf); */ #include "global.h" #include "interface.h" extern gchar * groups[230] ; extern char * vect_comp[3]; extern gchar * substitute_string (gchar * init, gchar * o_motif, gchar * n_motif); extern gchar * get_num_string (gchar * str); /*! \fn void print_spg_name (gchar * str , GtkTextBuffer * buffer) \brief print space group name in a GtkTextBuffer \param str the space group string \param buffer the GtkTextBuffer */ void print_spg_name (gchar * str , GtkTextBuffer * buffer) { str = substitute_string (str, "", "x"); if (strstr(str, "wsubx")) { gchar * sta = g_strdup_printf ("%s", str); sta = strtok (sta, "wsubx"); print_info (sta, "bold", buffer); while (sta) { sta = strtok (NULL, "ysubx"); if (sta) { print_info (sta, "sub_bold", buffer); sta = strtok (NULL, "ysubx"); if (sta) { print_info (sta, "bold", buffer); } } } } else { print_info (str, "bold", buffer); } g_free (str); } /*! \fn void print_spg_setting (gchar * init, GtkTextBuffer * buffer) \brief print space group name in a GtkTextBuffer \param init the space group setting \param buffer the GtkTextBuffer */ void print_spg_setting (gchar * init, GtkTextBuffer * buffer) { gchar * str = g_strdup_printf ("%s", init); str = substitute_string (str, "_", " "); str = get_num_string (str); str = substitute_string (str, " ", NULL); print_spg_name (str, buffer); } /*! \fn void model_info (project * this_proj, GtkTextBuffer * buffer) \brief display model information in GtkTexBuffer \param this_proj the target project \param buffer the GtkTextBuffer */ void model_info (project * this_proj, GtkTextBuffer * buffer) { int i, j, k; double v; gchar * str; if (g_strcmp0(this_proj -> projfile, "(null)") == 0) this_proj -> projfile = NULL; if (this_proj -> projfile != NULL) { print_info ("\n\tProject file: ", "italic", buffer); print_info (this_proj -> projfile, NULL, buffer); } if (this_proj -> tfile > -1 && this_proj -> coordfile != NULL) { print_info ("\n\tCoordinates file: ", "italic", buffer); print_info (this_proj -> coordfile, NULL, buffer); print_info ("\n\tFile type: ", "italic", buffer); print_info (coord_files[this_proj -> tfile], NULL, buffer); this_proj -> tfile = 0; } print_info ("\n\nModel properties\n\n\n", "heading", buffer); if (this_proj -> steps > 1) { print_info ("\tNumber of MD steps = ", "italic", buffer); str = g_strdup_printf ("%d\n", this_proj -> steps); print_info (str, "bold", buffer); g_free (str); } print_info ("\tNumber of atoms = ", "italic", buffer); str = g_strdup_printf ("%d\n", this_proj -> natomes); print_info (str, "bold", buffer); g_free (str); print_info ("\tNumber of species = ", "italic", buffer); str = g_strdup_printf ("%d\n\n", this_proj -> nspec); print_info (str, "bold", buffer); g_free (str); if (this_proj -> cell.volume > 0.0) { gchar * latv[2][3]={{"a", "b", "c"}, {"α", "β", "γ"}}; if (this_proj -> cell.npt) { print_info ("\tAv. lattice parameters:\n\n", NULL, buffer); } else { print_info ("\tLattice parameters:\n\n", NULL, buffer); } for (i=0; i<2; i++) { print_info ("\t", NULL, buffer); for (j=0; j<3; j++) { str = g_strdup_printf ("\t %s=", latv[i][j]); print_info (str, "bold_italic", buffer); g_free (str); if (this_proj -> cell.npt) { v = 0.0; for (k=0; k steps; k++) v += this_proj -> cell.box[k].param[i][j]; v /= this_proj -> steps; } else { v = this_proj -> cell.box[0].param[i][j]; } str = g_strdup_printf ("%10.5lf", v); print_info (str, "bold_green", buffer); g_free (str); } print_info ("\n", NULL, buffer); } print_info ("\n", NULL, buffer); if (this_proj -> cell.npt) { print_info ("\tAv. lattice vectors:\n\n\t\t", NULL, buffer); } else { print_info ("\tLattice vectors:\n\n\t\t", NULL, buffer); } for (i=0; i<3; i++) { str = g_strdup_printf (" %s ", vect_comp[i]); print_info (str, NULL, buffer); g_free (str); } print_info ("\n", NULL, buffer); for (i=0; i<3; i++) { str = g_strdup_printf ("\t\t%s", latv[0][i]); print_info (str, NULL, buffer); g_free (str); for (j=0; j<3; j++) { if (this_proj -> cell.npt) { v = 0.0; for (k=0; k steps; k++) v += this_proj -> cell.box[k].vect[i][j]; v /= this_proj -> steps; } else { v = this_proj -> cell.box[0].vect[i][j]; } str = g_strdup_printf ("%10.5lf", v); print_info (str, "bold_orange", buffer); g_free (str); } print_info ("\n", NULL, buffer); } if (this_proj -> cell.sp_group) { print_info ("\n", NULL, buffer); print_info ("\tCrystal information:\n\n", "italic", buffer); str = g_strdup_printf ("%d", this_proj -> cell.sp_group -> id); print_info ("\t\tSpace group N°: ","italic", buffer); print_info (str, "bold", buffer); g_free (str); print_info ("\n", NULL, buffer); print_info ("\t\tSpace group: ","italic", buffer); print_spg_name (g_strdup_printf ("%s", groups[this_proj -> cell.sp_group -> id-1]), buffer); print_info ("\n", NULL, buffer); print_info ("\t\tSpace group setting: ","italic", buffer); print_spg_setting (this_proj -> cell.sp_group -> setting, buffer); print_info ("\n", NULL, buffer); print_info ("\t\tHermman-Mauguin: ","italic", buffer); print_spg_setting (this_proj -> cell.sp_group -> hms, buffer); print_info ("\n", NULL, buffer); print_info ("\t\tBravais lattice: ","italic", buffer); print_info (this_proj -> cell.sp_group -> bravais, "bold", buffer); print_info ("\n", NULL, buffer); } print_info ("\n", NULL, buffer); if (this_proj -> cell.npt) { print_info ("\tAv. volume = ", "italic", buffer); } else { print_info ("\tVolume = ", "italic", buffer); } str = g_strdup_printf ("%14.6lf", this_proj -> cell.volume); print_info (str, "bold", buffer); g_free (str); print_info (" Å", NULL, buffer); print_info ("3", "sup", buffer); if (this_proj -> cell.npt) { print_info ("\n\tAv. density = ", "italic", buffer); } else { print_info ("\n\tDensity = ", "italic", buffer); } str = g_strdup_printf ("%14.6lf", this_proj -> cell.density); print_info (str, "bold", buffer); g_free (str); print_info (" g / cm", NULL, buffer); print_info ("3", "sup", buffer); if (this_proj -> cell.npt) { print_info ("\n\tAv. number density = ", "italic", buffer); } else { print_info ("\n\tNumber density = ", "italic", buffer); } str = g_strdup_printf ("%14.6lf", this_proj -> natomes / this_proj -> cell.volume); print_info (str, "bold", buffer); g_free (str); print_info (" Atoms / Å", NULL, buffer); print_info ("3", "sup", buffer); } print_info ("\n\n\tEmpirical formula:\t", "italic", buffer); for (i=0; i nspec; i++) { print_info (this_proj -> chemistry -> label[i], "bold", buffer); if (this_proj -> chemistry -> formula[i] != 1) { str = g_strdup_printf ("%d", this_proj -> chemistry -> formula[i]); print_info (str, "sub", buffer); g_free (str); } print_info (" ", NULL, buffer); } if (this_proj -> cell.volume != 0.0) { print_info ("\n\n\tAtom\t Number Fraction\tNumber density (atoms / Å", "italic", buffer); print_info ("3", "sup", buffer); print_info (")\n", "italic", buffer); } else { print_info ("\n\n\tAtom\t Number Fraction", "italic", buffer); } for (i=0; i nspec; i++) { str = g_strdup_printf ("\n\t%s\t%7d\t%11.6lf", this_proj -> chemistry -> label[i], this_proj -> chemistry -> nsps[i], (double)this_proj -> chemistry -> nsps[i]/this_proj -> natomes); print_info (str, textcolor(i), buffer); g_free (str); if (this_proj -> cell.volume != 0.0) { str = g_strdup_printf ("\t%11.6lf", this_proj -> chemistry -> nsps[i]/this_proj -> cell.volume); print_info (str, textcolor(i), buffer); g_free (str); } } } /*! \fn void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf) \brief print OpenGL stuff in a GtkTextBuffer \param text Message \param name OpenGL id to retreive \param buf the GtkTextBuffer */ void print_this_ogl_stuff (gchar * text, GLenum name, GtkTextBuffer * buf) { int i; gchar * str; print_info (text, NULL, buf); glGetIntegerv (name, & i); str = g_strdup_printf ("%d\n", i); print_info (str, "bold_blue", buf); g_free (str); } /*! \fn void opengl_info (project * this_proj, GtkTextBuffer * buf) \brief display OpenGL information in a GtkTextBuffer \param this_proj the target project \param buf the GtkTextBuffer */ void opengl_info (project * this_proj, GtkTextBuffer * buf) { int i, j, k, l; i = j = k = l = -1; gtk_gl_area_make_current ((GtkGLArea * )this_proj -> modelgl -> plot); gchar * str; print_info ("\n\nOpenGL driver information\n\n", "heading", buf); print_info ("\tOpenGL Version \t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n", (const char*)glGetString(GL_VERSION)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Driver\t\t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n", (const char*)glGetString(GL_VENDOR)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Hardware \t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n", (const char*)glGetString(GL_RENDERER)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Shading Version \t\t\t: ", NULL, buf); str = g_strdup_printf ("%s\n\n", (const char*)glGetString (GL_SHADING_LANGUAGE_VERSION)); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tOpenGL Window information:\n\n", NULL, buf); print_info ("\t\tColor Bits (R,G,B,A)\t\t: ", NULL, buf); glGetIntegerv (GL_RED_BITS, & i); glGetIntegerv (GL_GREEN_BITS, & j); glGetIntegerv (GL_BLUE_BITS, & k); glGetIntegerv (GL_ALPHA_BITS, & l); str = g_strdup_printf ("%d, %d, %d, %d\n", i, j, k, l); print_info (str, "bold_blue", buf); g_free (str); print_this_ogl_stuff ("\t\tDepth Bits \t\t\t: ", GL_DEPTH_BITS, buf); print_this_ogl_stuff ("\t\tStencil Bits \t\t\t: ", GL_STENCIL_BITS, buf); print_this_ogl_stuff ("\t\tMax. Lights Allowed \t\t: ", GL_MAX_LIGHTS, buf); print_this_ogl_stuff ("\t\tMax. Texture Size \t\t: ", GL_MAX_TEXTURE_SIZE, buf); print_this_ogl_stuff ("\t\tMax. Clipping Planes \t\t: ", GL_MAX_CLIP_PLANES, buf); print_this_ogl_stuff ("\t\tMax. Modelview Matrix Stacks \t: ", GL_MAX_MODELVIEW_STACK_DEPTH, buf); print_this_ogl_stuff ("\t\tMax. Projection Matrix Stacks \t: ", GL_MAX_PROJECTION_STACK_DEPTH, buf); print_this_ogl_stuff ("\t\tMax. Attribute Stacks \t\t: ", GL_MAX_ATTRIB_STACK_DEPTH, buf); print_this_ogl_stuff ("\t\tMax. Texture Stacks \t\t: ", GL_MAX_TEXTURE_STACK_DEPTH, buf); print_info ("\n\tGeometry Shader information:\n\n", NULL, buf); print_this_ogl_stuff ("\t\tMax. output vertices \t\t: ", GL_MAX_GEOMETRY_OUTPUT_VERTICES, buf); print_this_ogl_stuff ("\t\tMax. output components \t\t: ", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS, buf); print_this_ogl_stuff ("\t\tMax. total output components \t: ", GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, buf); print_info ("\n\tTotal number of OpenGL Extensions\t: ", NULL, buf); glGetIntegerv (GL_NUM_EXTENSIONS, & i); str = g_strdup_printf ("%d\n", i); print_info (str, "bold_blue", buf); g_free (str); print_info ("\tExtensions list:\n", NULL, buf); for (j=0; j Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file workinfo.c * @short Functions to display project information in GtkTextBuffer * @author Sébastien Le Roux */ /* * This file: 'workinfo.c' * * Contains: * - Functions to display project information in GtkTextBuffer * * List of functions: void workinfo (project * this_proj, int i); */ #include "global.h" #include "interface.h" #include "project.h" extern void update_rdf_view (project * this_proj, int rdf); extern void update_sq_view (project * this_proj, int sqk); extern void update_angle_view (project * this_proj); extern void update_rings_view (project * this_proj, int c); extern void update_chains_view (project * this_proj); extern void update_spherical_view (project * this_proj); extern void update_msd_view (project * this_proj); extern void model_info (project * this_proj, GtkTextBuffer * buf); extern void opengl_info (project * this_proj, GtkTextBuffer * buf); /*! \fn void workinfo (project * this_proj, int i) \brief display information about a workspace menu item for a project \param this_proj the target project \param i the properties to display from the menu */ void workinfo (project * this_proj, int i) { gchar * str; int j; project * tmp_proj; switch (i) { case 0: this_proj -> text_buffer[i] = add_buffer (NULL, NULL, NULL); print_info ("\n\nWorkspace information\n\n\n", "heading", this_proj -> text_buffer[0]); if (g_strcmp0(workspacefile, "(null)") == 0) workspacefile = NULL; if (workspacefile != NULL) { print_info ("\tWorkspace file: ", "italic", this_proj -> text_buffer[0]); print_info (workspacefile, NULL, this_proj -> text_buffer[0]); } str = g_strdup_printf ("\n\n\t%d", nprojects); print_info (str, "bold_red", this_proj -> text_buffer[0]); g_free (str); print_info (" project(s) in workspace: ", NULL, this_proj -> text_buffer[0]); tmp_proj = workzone.first; for (j=0; j text_buffer[0]); print_info (prepare_for_title(tmp_proj -> name), "italic", this_proj -> text_buffer[0]); if (tmp_proj -> next != NULL) tmp_proj = tmp_proj -> next; } print_info ("\n\n\tActive project: ", NULL, this_proj -> text_buffer[0]); print_info (prepare_for_title(active_project -> name), "bold_green", this_proj -> text_buffer[0]); break; case 1: this_proj -> text_buffer[i] = add_buffer (NULL, NULL, NULL); model_info (this_proj, this_proj -> text_buffer[1]); break; case 2: this_proj -> text_buffer[i] = add_buffer (NULL, NULL, NULL); opengl_info (this_proj, this_proj -> text_buffer[i]); break; case GR+OT: if (this_proj -> text_buffer[i] == NULL && this_proj -> visok[GR]) update_rdf_view (this_proj, GR); break; case SQ+OT: if (this_proj -> text_buffer[i] == NULL && this_proj -> visok[SQ]) update_sq_view (this_proj, SQ); break; case SK+OT: if (this_proj -> text_buffer[i] == NULL && this_proj -> visok[SK]) update_sq_view (this_proj, SK); break; case GK+OT: if (this_proj -> text_buffer[i] == NULL && this_proj -> visok[GK]) update_rdf_view (this_proj, GK); break; case AN+OT: if (this_proj -> text_buffer[i] == NULL && this_proj -> visok[AN]) update_angle_view (this_proj); break; case RI+OT: if (this_proj -> text_buffer[i] == NULL && this_proj -> visok[RI]) { for (j=0; j<5; j++) if (this_proj -> rsparam[j][5]) update_rings_view (this_proj, j); } break; case CH+OT: if (this_proj -> text_buffer[i] == NULL && this_proj -> visok[CH]) update_chains_view (this_proj); break; case SP+OT: if (this_proj -> text_buffer[i] == NULL && this_proj -> visok[SP]) update_spherical_view (this_proj); break; case MS+OT: if (this_proj -> text_buffer[i] == NULL && this_proj -> visok[MS]) update_msd_view (this_proj); break; } if (this_proj -> text_buffer[i] == NULL) this_proj -> text_buffer[i] = add_buffer (NULL, NULL, NULL); view_buffer (this_proj -> text_buffer[i]); } Atomes-GNU-1.1.14/src/workspace/workspace.c000066400000000000000000000540021457665371200204250ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file workspace.c * @short Implementation of the workspace tree view \n Associated callbacks * @author Sébastien Le Roux */ /* * This file: 'workspace.c' * * Contains: * - Implementation of the workspace tree view - Associated callbacks * * List of functions: int find_calc_by_path (GtkTreeView * treeview, GtkTreePath * path); int find_proj_by_path (GtkTreePath * path); G_MODULE_EXPORT gboolean on_workspace_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data); void add_project (GtkTreeStore * store, int i); void correct_this_window_title (GtkWidget * win, gchar * str); void workspace_menu (GtkWidget * tree, gpointer event, double x, double y); void create_workspace (); void add_project_to_workspace (); void remove_project_from_workspace (int id); static void fill_workspace (GtkTreeStore * store); G_MODULE_EXPORT void activate_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void workspace_ondc (GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * col, gpointer data); G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata); G_MODULE_EXPORT void workspace_popup (GtkGesture * gesture, int n_press, double x, double y, gpointer data); GtkWidget * create_workspace_tree (); */ #include "global.h" #include "callbacks.h" #include "interface.h" #include "project.h" #include "glwindow.h" extern void workinfo (project * this_proj, int i); extern GtkWidget * work_menu (int p, int c); GdkPixbuf * pix = NULL; GtkWidget * img = NULL; GtkWidget * hbox = NULL; GtkWidget * vbox = NULL; GtkWidget * lab = NULL; GtkWidget * lap = NULL; GtkWidget * eap = NULL; gchar * labtmp = NULL; gchar * laptmp = NULL; GtkWidget * worktree = NULL; GtkTreeStore * workstore = NULL; GtkTreeIter worklevel; GtkTreeIter * piter = NULL; GtkTreeIter * witer = NULL; GtkTreePath ** prpath = NULL; GtkTreePath * wpath = NULL; GdkPixbuf * wpix = NULL; gchar * wchar = NULL; int projects_in_workspace = 0; char * work_menu_items[NITEMS-2] = {"Workspace ", "Settings ", //"OpenGL - 3D ", "Visualization ", //"Calc. visualization ", "Analysis ", "g(r)/G(r) ", "S(q) from g(r) ", "S(q) from Debye equation ", "g(r) from FFT[S(q) Debye]", "Bonding information ", "Angle distribution ", "Ring statistics ", "Chain statistics ", "Spherical harmonics ", "Mean Square Displacement "}; /*! \fn void add_project (GtkTreeStore * store, int i) \brief add project to the GtkTreeStore of the workspace \param store the GtkTreeStore \param i the id of the project to add */ void add_project (GtkTreeStore * store, int i) { int j; gchar * tmp; GtkTreeIter steplevel; GtkTreeIter optslevel; gtk_tree_store_append (store, & piter[i], & worklevel); if (i == activep) { tmp = g_strdup_printf ("%s", active_project -> name); } else { tmp = g_strdup_printf ("%s", get_project_by_id(i) -> name); } gtk_tree_store_set (store, & piter[i], 0, THETD, 1, tmp, 2, -1, -1); prpath[i] = gtk_tree_model_get_path (GTK_TREE_MODEL(store), & piter[i]); g_free (tmp); gtk_tree_store_append (store, & steplevel, & piter[i]); gtk_tree_store_set (store, & steplevel, 0, SETTING, 1, work_menu_items[1], 2, -3, -1); // OpenGL gtk_tree_store_append (store, & steplevel, & piter[i]); gtk_tree_store_set (store, & steplevel, 0, OGLM, 1, work_menu_items[2], 2, -2, -1); //gtk_tree_store_append (store, & optslevel, & steplevel); //gtk_tree_store_set (store, & optslevel, 0, OGLM, 1, work_menu_items[3], 2, -1, -1); //gtk_tree_store_append (store, & optslevel, & steplevel); //gtk_tree_store_set (store, & optslevel, 0, OGLC, 1, work_menu_items[4], 2, -1, -1); // Calculations gtk_tree_store_append (store, & steplevel, & piter[i]); gtk_tree_store_set (store, & steplevel, 0, RUN, 1, work_menu_items[3], 2, -1, -1); for (j=0; j steps > 1) { gtk_tree_store_append (store, & optslevel, & steplevel); gtk_tree_store_set (store, & optslevel, 0, gdk_pixbuf_new_from_file(graph_img[j], NULL), 1, work_menu_items[4+j], 2, j, -1); } } gtk_tree_view_expand_to_path (GTK_TREE_VIEW(worktree), gtk_tree_model_get_path(GTK_TREE_MODEL(store), & worklevel)); projects_in_workspace ++; } /*! \fn static void fill_workspace (GtkTreeStore * store) \brief fill the workspace tree store \param store the GtkTreeStore */ static void fill_workspace (GtkTreeStore * store) { int i; gtk_tree_store_append (store, & worklevel, NULL); gtk_tree_store_set (store, & worklevel, 0, THETD, 1, work_menu_items[0], 2, -4, -1); if (piter != NULL) g_free (piter); if (prpath != NULL) g_free (prpath); if (nprojects > 0) { piter = g_malloc (nprojects*sizeof*piter); prpath = g_malloc (nprojects*sizeof*prpath); } for (i=0; i name, -1); } active_project_changed (id); gchar * tmp = g_strdup_printf ("%s", active_project -> name); gtk_tree_store_set (workstore, & piter[id], 1, tmp, -1); g_free (tmp); } /*! \fn int find_calc_by_path (GtkTreeView * treeview, GtkTreePath * path) \brief find the calculation using the GtkTreePath in the GtkTreeView \param treeview the GtkTreeView \param path the GtkTreePath */ int find_calc_by_path (GtkTreeView * treeview, GtkTreePath * path) { int i; GtkTreeIter iter; GtkTreeModel * model = gtk_tree_view_get_model (treeview); if (gtk_tree_model_get_iter (model, & iter, path)) { gtk_tree_model_get (model, & iter, 2, & i, -1); return i; } return -1; } /*! \fn int find_proj_by_path (GtkTreePath * path) \brief find the project id using the GtkTreePath \param path the GtkTreePath */ int find_proj_by_path (GtkTreePath * path) { int i, j; i = -1; for (j=0; j%s", wchar); gtk_tree_store_set (GTK_TREE_STORE(model), & iter, 1, tmp, -1); g_free (tmp); #ifdef DEBUG g_debug ("WORKSPACE_ONDC: cleaning view"); g_debug ("WORKSPACE_ONDC: wchar = %s", wchar); #endif gtk_tree_model_get (model, & iter, 2, & i, -1); i += 4; #ifdef DEBUG g_debug ("WORKSPACE_ONDC: creating view id= %d", i); #endif j = find_proj_by_path (path); #ifdef DEBUG g_debug ("WORKSPACE_ONDC: for project= %d", j); #endif if (j < 0) j = activep; if (i == 2) prep_model (j); workinfo (get_project_by_id(j), i); } } } /*! \fn void correct_this_window_title (GtkWidget * win, gchar * str) \brief use new title for GtkWindow, providing it exists \param win the GtkWindow \param str the new title */ void correct_this_window_title (GtkWidget * win, gchar * str) { if (win) { if (GTK_IS_WIDGET(win)) { gtk_window_set_title (GTK_WINDOW (win), str); } } if (str) g_free (str); } /*! \fn G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata) \brief change project name \param wid the GtkWidgent sending the signal \param edata the associated data pointer */ G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata) { int i, j, k; gchar * tmp; i = GPOINTER_TO_INT (edata); tmp = g_strdup_printf ("Please enter a new name for project N°%d", i); project * this_proj = get_project_by_id(i); tmp = cask(tmp, "Project name", i, this_proj -> name, MainWindow); if (tmp != NULL) { this_proj -> name = g_strdup_printf ("%s", tmp); if (i == activep) { g_free (tmp); tmp = g_strdup_printf ("%s", this_proj -> name); } gtk_tree_store_set (workstore, & piter[i], 1, tmp, -1); g_free (tmp); // Need to update other project windows names !!! gchar * tmp_title = prepare_for_title (this_proj -> name); if (this_proj -> modelgl != NULL) { if (this_proj -> modelgl -> win != NULL) { correct_this_window_title (this_proj -> modelgl -> win, g_strdup_printf ("%s - 3D view - [%s mode]", tmp_title, mode_name[this_proj -> modelgl -> mode])); } gchar * win_title[2]={"Atom(s) configuration", "Clone(s) configuration"}; for (j=0; j<2; j++) { if (this_proj -> modelgl -> model_win[j] != NULL) { correct_this_window_title (this_proj -> modelgl -> model_win[j] -> win, g_strdup_printf ("%s - %s", win_title[j], tmp_title)); } } if (this_proj -> modelgl -> coord_win != NULL) { correct_this_window_title (this_proj -> modelgl -> coord_win -> win, g_strdup_printf ("Environments configuration - %s", tmp_title)); } if (this_proj -> modelgl -> atom_win != NULL) { correct_this_window_title (this_proj -> modelgl -> atom_win -> win, g_strdup_printf ("Model edition - %s", tmp_title)); } if (this_proj -> modelgl -> cell_win != NULL) { correct_this_window_title (this_proj -> modelgl -> cell_win -> win, g_strdup_printf ("Cell edition - %s", tmp_title)); } if (this_proj -> modelgl -> opengl_win != NULL) { correct_this_window_title (this_proj -> modelgl -> opengl_win -> win, g_strdup_printf ("OpenGL material aspect and light settings - %s", tmp_title)); } if (this_proj -> modelgl -> spiner != NULL) { correct_this_window_title (this_proj -> modelgl -> spiner -> win, g_strdup_printf ("%s - spin", tmp_title)); } if (this_proj -> modelgl -> player != NULL) { j = this_proj -> modelgl -> anim -> last -> img -> step; correct_this_window_title (this_proj -> modelgl -> player -> win, g_strdup_printf ("%s - player - step %d", tmp_title, j)); } if (this_proj -> modelgl -> measure_win != NULL) { correct_this_window_title (this_proj -> modelgl -> measure_win -> win, g_strdup_printf ("%s - measures", tmp_title)); } } g_free (tmp_title); for (j=0; j initok[j]) { for (k=0; k numc[j]; k++) { if (this_proj -> curves[j][k] -> window != NULL) { correct_this_window_title (this_proj -> curves[j][k] -> window, g_strdup_printf ("%s - %s", prepare_for_title(this_proj -> name), this_proj -> curves[j][k] -> name)); } } } } if (activep == i) { correct_this_window_title (MainWindow, g_strdup_printf ("%s - %s", PACKAGE, prepare_for_title(active_project -> name))); correct_this_window_title (curvetoolbox, g_strdup_printf ("Toolboxes - %s", prepare_for_title(active_project -> name))); } } } /*! \fn void workspace_menu (GtkWidget * tree, gpointer event, double x, double y) \brief popup the workspace contextual menu in workspace tree view \param tree the GtkTreeView \param event the event \param x x position \param y y position */ void workspace_menu (GtkWidget * tree, gpointer event, double x, double y) { GtkWidget * menu; GtkTreePath * mpath; int this_calc = -1; gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW(tree), (gint)x, (gint)y, & mpath, NULL, NULL, NULL); if (mpath != NULL) { activew = find_proj_by_path (mpath); this_calc = find_calc_by_path (GTK_TREE_VIEW(tree), mpath); } else { activew = activep; } menu = work_menu (activew, this_calc); #ifdef GTK3 pop_menu_at_pointer (menu, (GdkEvent *)event); #else gtk_widget_set_parent (menu, MainWindow); pop_menu_at_pointer (menu, x, y); #endif } #ifdef GTK4 /*! \fn G_MODULE_EXPORT void workspace_popup (GtkGesture * gesture, int n_press, double x, double y, gpointer data) \brief GTK4 popover workspace menu at current location \param gesture the GtkGesture sending the signal \param n_press number of times it was pressed \param x x position \param y y position \param data the associated data pointer */ G_MODULE_EXPORT void workspace_popup (GtkGesture * gesture, int n_press, double x, double y, gpointer data) { if (gtk_gesture_single_get_current_button ((GtkGestureSingle * )gesture) == GDK_BUTTON_SECONDARY) { workspace_menu ((GtkWidget *)data, NULL, x, y); } } #else /*! \fn G_MODULE_EXPORT gboolean on_workspace_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data) \brief GTK3 button event on workspace to display contextual menu \param widget the GtkWidget sending the signal \param event the associated GtkButton \param data the associated data pointer */ G_MODULE_EXPORT gboolean on_workspace_button_event (GtkWidget * widget, GdkEventButton * event, gpointer data) { if (event -> type == GDK_BUTTON_PRESS && event -> button == 3) { workspace_menu (widget, (gpointer)event, event -> x, event -> y); } return FALSE; } #endif void workspace_set_visible (GtkTreeViewColumn * col, GtkCellRenderer * renderer, GtkTreeModel * mod, GtkTreeIter * iter, gpointer data) { gtk_cell_renderer_set_visible (renderer, FALSE); } /*! \fn GtkWidget * create_workspace_tree () \brief create the workspace tree store */ GtkWidget * create_workspace_tree () { GtkTreeViewColumn * col; GtkCellRenderer * renderer; GtkTreeSelection * workselect; worktree = destroy_this_widget (worktree); workstore = gtk_tree_store_new (3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_INT); fill_workspace (workstore); worktree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(workstore)); g_object_unref (workstore); col = gtk_tree_view_column_new (); renderer = gtk_cell_renderer_pixbuf_new (); gtk_tree_view_column_pack_start (col, renderer, FALSE); gtk_tree_view_column_set_attributes (col, renderer, "pixbuf", 0, NULL); renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_pack_start (col, renderer, TRUE); gtk_tree_view_column_set_attributes (col, renderer, "markup", 1, NULL); renderer = gtk_cell_renderer_text_new (); gtk_tree_view_column_pack_start (col, renderer, TRUE); gtk_tree_view_column_set_attributes (col, renderer, "markup", 2, NULL); gtk_tree_view_column_set_cell_data_func (col, renderer, workspace_set_visible, NULL, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(worktree), col); workselect = gtk_tree_view_get_selection (GTK_TREE_VIEW(worktree)); gtk_tree_selection_set_mode (workselect, GTK_SELECTION_SINGLE); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW(worktree), FALSE); //g_signal_connect (G_OBJECT(workselect), "changed", G_CALLBACK(selework), (gpointer)worktree); g_signal_connect (G_OBJECT(worktree), "row-activated", G_CALLBACK(workspace_ondc), NULL); #ifdef GTK3 g_signal_connect (G_OBJECT(worktree), "button-press-event", G_CALLBACK(on_workspace_button_event), NULL); #else add_widget_gesture_and_key_action (worktree, "workspace-context-click", G_CALLBACK(workspace_popup), (gpointer)worktree, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); #endif gtk_tree_view_expand_all (GTK_TREE_VIEW(worktree)); return worktree; } /*! \fn void create_workspace () \brief create the workspace */ void create_workspace () { add_container_child (CONTAINER_SCR, MainScrol[0], create_workspace_tree ()); lab = NULL; witer = NULL; wpath = NULL; show_the_widgets (MainScrol[0]); } /*! \fn void add_project_to_workspace () \brief add project(s) to the workspace tree */ void add_project_to_workspace () { if (worktree != NULL && workstore != NULL && nprojects > 0) { int i; if (projects_in_workspace > 0) { GtkTreeIter ** tmpiter; tmpiter = g_malloc (projects_in_workspace*sizeof*tmpiter); for (i=0; i name, -1); } if (tmpiter != NULL) g_free (tmpiter); } else { if (prpath != NULL) g_free (prpath); if (piter != NULL) g_free (piter); piter = g_malloc ((projects_in_workspace+1)*sizeof*piter); prpath = g_malloc ((projects_in_workspace+1)*sizeof*prpath); } add_project (workstore, activep); newspace = FALSE; } else { create_workspace (); } if (nprojects == 0) { widget_set_sensitive (worktree, 0); } else { widget_set_sensitive (worktree, 1); } } /*! \fn void remove_project_from_workspace (int id) \brief remove project from workspace \param id the id of the project to be remove */ void remove_project_from_workspace (int id) { int i, j; GtkTreeIter ** tmpiter; if (worktree != NULL && workstore != NULL && nprojects > 0) { if (wpath != NULL) { i = find_proj_by_path (wpath); if (i == id) { wpath = NULL; wchar = NULL; } } if (projects_in_workspace > 1) { tmpiter = g_malloc ((projects_in_workspace-1)*sizeof*tmpiter); j = -1; for (i=0; i name, -1); } } g_free (tmpiter); } else { gtk_tree_store_remove (workstore, & piter[id]); if (prpath != NULL) g_free (prpath); prpath = NULL; if (piter != NULL) g_free (piter); piter = NULL; projects_in_workspace --; widget_set_sensitive (worktree, 0); witer = NULL; wchar = NULL; } } } Atomes-GNU-1.1.14/src/workspace/workspace.h000066400000000000000000000025131457665371200204320ustar00rootroot00000000000000/* This file is part of the 'atomes' software 'atomes' is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. 'atomes' is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU Affero General Public License along with 'atomes'. If not, see Copyright (C) 2022-2024 by CNRS and University of Strasbourg */ /*! * @file workspace.h * @short Function declarations for workspace managment * @author Sébastien Le Roux */ /* * This header file: 'workspace.h' * * Contains: - Function declarations for workspace managment */ #ifndef WORKSPACE_H_ #define WORKSPACE_H_ void correct_this_window_title (GtkWidget * win, gchar * str); G_MODULE_EXPORT void activate_project (GtkWidget * widg, gpointer data); G_MODULE_EXPORT void change_project_name (GtkWidget * wid, gpointer edata); void add_project_to_workspace (); void remove_project_from_workspace (); extern char * work_menu_items[NITEMS-2]; #endif Atomes-GNU-1.1.14/stamp-h1000066400000000000000000000000271457665371200150510ustar00rootroot00000000000000timestamp for config.h